@d13co/use-wallet 4.5.0 → 4.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.pnpm/@magic-sdk+types@24.22.0/node_modules/@magic-sdk/types/src/core/exception-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.22.0/node_modules/@magic-sdk/types/src/core/json-rpc-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.22.0/node_modules/@magic-sdk/types/src/core/message-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.22.0/node_modules/@magic-sdk/types/src/core/deep-link-pages.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.22.0/node_modules/@magic-sdk/types/src/modules/auth-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.22.0/node_modules/@magic-sdk/types/src/modules/rpc-provider-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.22.0/node_modules/@magic-sdk/types/src/modules/user-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.22.0/node_modules/@magic-sdk/types/src/modules/nft-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.22.0/node_modules/@magic-sdk/types/src/modules/wallet-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.22.0/node_modules/@magic-sdk/types/src/modules/common-types.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/node_modules/eventemitter3/index.js","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/semver.js","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/base64-json.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/core/sdk-exceptions.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/type-guards.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/core/sdk-environment.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/auth.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/base-module.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/core/json-rpc.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/get-payload-id.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/storage.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/uuid.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/web-crypto.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/promise-tools.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/events.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/version-check.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/user.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/device-share-web-crypto.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/url.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/wallet.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/third-party-wallets.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/rpc-provider.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/nft.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/core/sdk.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/core/view-controller.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/view-controller-utils.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/base-extension.ts","../../../node_modules/.pnpm/@magic-sdk+commons@25.4.2_@magic-sdk+provider@29.5.0_localforage@1.10.0__@magic-sdk+types@24.22.0/node_modules/@magic-sdk/commons/src/index.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/magic-sdk/node_modules/localforage/dist/localforage.js","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/src/_driver.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/node_modules/localforage-driver-commons/_bundle/fesm5.js","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/src/Store.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/src/_initStorage.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/src/clear.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/src/dropInstance.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/src/getItem.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/src/iterate.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/src/key.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/src/keys.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/src/length.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/src/removeItem.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/src/setItem.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/src/index.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/magic-sdk/src/index.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/magic-sdk/src/iframe-controller.ts","../../../node_modules/.pnpm/@magic-ext+algorand@24.4.2/node_modules/@magic-ext/algorand/src/index.ts","../../../node_modules/.pnpm/tweetnacl@1.0.3/node_modules/tweetnacl/nacl-fast.js","../src/index.ts","../src/logger.ts","../src/manager.ts","../src/network.ts","../src/storage.ts","../src/store.ts","../src/wallets/types.ts","../src/utils.ts","../src/wallets/walletconnect.ts","../src/wallets/base.ts","../src/wallets/skins.ts","../src/wallets/biatec.ts","../src/wallets/custom.ts","../src/wallets/defly.ts","../src/wallets/avm-web-provider.ts","../src/wallets/defly-web.ts","../src/wallets/exodus.ts","../src/wallets/kibisis.ts","../src/wallets/kmd.ts","../src/wallets/lute.ts","../src/wallets/magic.ts","../src/wallets/liquid-evm-base.ts","../src/wallets/metamask.ts","../src/wallets/mnemonic.ts","../src/wallets/pera.ts","../src/wallets/rainbow.ts","../src/wallets/web3auth.ts","../src/secure-key.ts","../src/wallets/w3wallet.ts","../src/webpack.ts"],"sourcesContent":["export enum SDKErrorCode {\n MissingApiKey = 'MISSING_API_KEY',\n ModalNotReady = 'MODAL_NOT_READY',\n ConnectionLost = 'CONNECTION_WAS_LOST',\n MalformedResponse = 'MALFORMED_RESPONSE',\n InvalidArgument = 'INVALID_ARGUMENT',\n ExtensionNotInitialized = 'EXTENSION_NOT_INITIALIZED',\n IncompatibleExtensions = 'INCOMPATIBLE_EXTENSIONS',\n}\n\nexport enum SDKWarningCode {\n SyncWeb3Method = 'SYNC_WEB3_METHOD',\n DuplicateIframe = 'DUPLICATE_IFRAME',\n ReactNativeEndpointConfiguration = 'REACT_NATIVE_ENDPOINT_CONFIGURATION',\n DeprecationNotice = 'DEPRECATION_NOTICE',\n ProductAnnouncement = 'ANNOUNCEMENT',\n}\n\nexport enum RPCErrorCode {\n // Standard JSON RPC 2.0 Error Codes\n ParseError = -32700,\n InvalidRequest = -32600,\n MethodNotFound = -32601,\n InvalidParams = -32602,\n InternalError = -32603,\n\n // Custom RPC Error Codes\n MagicLinkFailedVerification = -10000,\n MagicLinkExpired = -10001,\n MagicLinkRateLimited = -10002,\n MagicLinkInvalidRedirectURL = -10006,\n UserAlreadyLoggedIn = -10003,\n UpdateEmailFailed = -10004,\n UserRequestEditEmail = -10005,\n InactiveRecipient = -10010,\n AccessDeniedToUser = -10011,\n RedirectLoginComplete = -10015,\n DpopInvalidated = -10019,\n}\n\nexport type ErrorCode = SDKErrorCode | RPCErrorCode;\nexport type WarningCode = SDKWarningCode;\n","import { RPCErrorCode } from './exception-types';\n\n// --- Request interfaces\n\nexport interface JsonRpcRequestPayload<TParams = any> {\n jsonrpc: string;\n id: string | number | null;\n method: string;\n params?: TParams;\n}\n\nexport interface JsonRpcRequestCallback {\n /** Callback executed upon JSON RPC response. */\n (err: JsonRpcError | null, result?: JsonRpcResponsePayload | null): void;\n}\n\nexport interface JsonRpcBatchRequestCallback {\n /** Callback executed upon JSON RPC response. */\n (err: JsonRpcError | null, result?: (JsonRpcResponsePayload | null)[] | null): void;\n}\n\n// --- Response interfaces\n\nexport interface JsonRpcError {\n message: string;\n code: RPCErrorCode;\n data?: any;\n}\n\nexport interface JsonRpcResponsePayload<ResultType = any> {\n jsonrpc: string;\n id: string | number | null;\n result?: ResultType | null;\n error?: JsonRpcError | null;\n}\n\nexport interface UserInfo {\n email?: string;\n}\n\nexport type ShowUIPromiEvents = {\n disconnect: () => void;\n};\n\nexport interface WalletInfo {\n walletType: string;\n}\n\nexport interface RequestUserInfoScope {\n scope?: {\n email?: 'required' | 'optional';\n };\n}\n\nexport enum LocalStorageKeys {\n PROVIDER = 'magic_3pw_provider',\n ADDRESS = 'magic_3pw_address',\n CHAIN_ID = 'magic_3pw_chainId',\n}\n\nexport enum ThirdPartyWalletEvents {\n WalletConnected = 'wallet_connected',\n WalletRejected = 'wallet_rejected',\n Web3ModalSelected = 'web3modal_selected',\n}\n\nexport interface ConnectWithUIOptions {\n autoPromptThirdPartyWallets?: boolean;\n}\n\nexport type ConnectWithUiEvents = {\n 'id-token-created': (params: { idToken: string }) => void;\n} & { [key in ThirdPartyWalletEvents]: () => void };\n\n// --- Payload methods\n\n/**\n * Enum of JSON RPC methods for interacting with the Magic SDK authentication\n * relayer.\n */\nexport enum MagicPayloadMethod {\n LoginWithSms = 'magic_auth_login_with_sms',\n LoginWithEmailOTP = 'magic_auth_login_with_email_otp',\n LoginWithMagicLink = 'magic_auth_login_with_magic_link',\n LoginWithCredential = 'magic_auth_login_with_credential',\n SetAuthorizationToken = 'magic_auth_set_authorization_token',\n GetIdToken = 'magic_auth_get_id_token',\n GenerateIdToken = 'magic_auth_generate_id_token',\n GetMetadata = 'magic_auth_get_metadata',\n IsLoggedIn = 'magic_is_logged_in',\n Logout = 'magic_auth_logout',\n UpdateEmail = 'magic_auth_update_email',\n UserSettings = 'magic_auth_settings',\n UserSettingsTestMode = 'magic_auth_settings_testing_mode',\n LoginWithSmsTestMode = 'magic_auth_login_with_sms_testing_mode',\n LoginWithEmailOTPTestMode = 'magic_auth_login_with_email_otp_testing_mode',\n LoginWithMagicLinkTestMode = 'magic_login_with_magic_link_testing_mode',\n LoginWithCredentialTestMode = 'magic_auth_login_with_credential_testing_mode',\n GetIdTokenTestMode = 'magic_auth_get_id_token_testing_mode',\n GenerateIdTokenTestMode = 'magic_auth_generate_id_token_testing_mode',\n GetMetadataTestMode = 'magic_auth_get_metadata_testing_mode',\n IsLoggedInTestMode = 'magic_auth_is_logged_in_testing_mode',\n LogoutTestMode = 'magic_auth_logout_testing_mode',\n UpdateEmailTestMode = 'magic_auth_update_email_testing_mode',\n IntermediaryEvent = 'magic_intermediary_event',\n RequestAccounts = 'eth_requestAccounts',\n GetInfo = 'magic_get_info',\n ShowUI = 'magic_wallet',\n NFTPurchase = 'magic_nft_purchase',\n NFTCheckout = 'magic_nft_checkout',\n NFTTransfer = 'magic_nft_transfer',\n RequestUserInfoWithUI = 'mc_request_user_info',\n Disconnect = 'mc_disconnect',\n // UpdatePhoneNumber = 'magic_auth_update_phone_number',\n // UpdatePhoneNumberTestMode = 'magic_auth_update_phone_number_testing_mode',\n RecoverAccount = 'magic_auth_recover_account',\n RecoverAccountTestMode = 'magic_auth_recover_account_testing_mode',\n MagicBoxHeartBeat = 'magic_box_heart_beat',\n AutoConnect = 'mc_auto_connect',\n Login = 'mc_login',\n EncryptV1 = 'magic_auth_encrypt_v1',\n DecryptV1 = 'magic_auth_decrypt_v1',\n ShowNFTs = 'magic_show_nfts',\n ShowOnRamp = 'magic_show_fiat_onramp',\n ShowSendTokensUI = 'magic_show_send_tokens_ui',\n ShowAddress = 'magic_show_address',\n ShowBalances = 'magic_show_balances',\n SendGaslessTransaction = 'eth_sendGaslessTransaction',\n RevealPK = 'magic_reveal_key',\n EnableMFA = 'magic_auth_enable_mfa_flow',\n DisableMFA = 'magic_auth_disable_mfa_flow',\n GetMultichainPublicAddress = 'magic_get_multichain_public_address',\n}\n\n// Methods to not route if connected to third party wallet\nexport const routeToMagicMethods = [\n MagicPayloadMethod.IntermediaryEvent,\n MagicPayloadMethod.NFTCheckout,\n MagicPayloadMethod.Login,\n];\n","import { JsonRpcResponsePayload, JsonRpcError, JsonRpcRequestPayload } from './json-rpc-types';\n\nexport enum MagicIncomingWindowMessage {\n MAGIC_HANDLE_RESPONSE = 'MAGIC_HANDLE_RESPONSE',\n MAGIC_OVERLAY_READY = 'MAGIC_OVERLAY_READY',\n MAGIC_SHOW_OVERLAY = 'MAGIC_SHOW_OVERLAY',\n MAGIC_HIDE_OVERLAY = 'MAGIC_HIDE_OVERLAY',\n MAGIC_HANDLE_EVENT = 'MAGIC_HANDLE_EVENT',\n MAGIC_MG_BOX_SEND_RECEIPT = 'MAGIC_MG_BOX_SEND_RECEIPT',\n MAGIC_SEND_PRODUCT_ANNOUNCEMENT = 'MAGIC_SEND_PRODUCT_ANNOUNCEMENT',\n MAGIC_PONG = 'MAGIC_PONG',\n MAGIC_POPUP_RESPONSE = 'MAGIC_POPUP_RESPONSE',\n MAGIC_POPUP_OAUTH_VERIFY_RESPONSE = 'MAGIC_POPUP_OAUTH_VERIFY_RESPONSE',\n}\n\nexport enum MagicOutgoingWindowMessage {\n MAGIC_HANDLE_REQUEST = 'MAGIC_HANDLE_REQUEST',\n MAGIC_PING = 'MAGIC_PING',\n}\n\n/** The shape of responding window message datas from the Magic iframe context. */\nexport interface MagicMessageRequest {\n msgType: string;\n payload: JsonRpcRequestPayload | JsonRpcRequestPayload[];\n rt?: string;\n jwt?: string;\n deviceShare?: string;\n}\n\n/** The shape of responding window message datas from the Magic iframe context. */\nexport interface MagicMessageResponse<ResultType = any> {\n msgType: string;\n response: Partial<JsonRpcError> & Partial<JsonRpcResponsePayload<ResultType>>;\n rt?: string;\n deviceShare?: string;\n}\n\n/** The expected message event returned by the Magic iframe context. */\nexport interface MagicMessageEvent extends Partial<MessageEvent> {\n data: MagicMessageResponse;\n}\n","export enum DeepLinkPage {\n UpdateEmail = 'update-email',\n MFA = 'mfa',\n Recovery = 'recovery',\n}\n","import { WalletEventOnReceived } from './wallet-types';\n\nexport interface LoginWithMagicLinkConfiguration {\n /**\n * The email address of the user attempting to login.\n */\n email: string;\n\n /**\n * When `true`, a pre-built modal interface will show to the user, directing\n * them to check their email for the \"magic link\" to complete their\n * authentication.\n */\n showUI?: boolean;\n\n /**\n * You can optionally provide a redirect URI that will be followed at the end\n * of the magic link flow. Don't forget to invoke\n * `magic.auth.loginWithCredential()` to complete the login from the route you\n * configure here.\n */\n redirectURI?: string;\n\n /**\n * Enterprise users with a custom SMTP can create custom email templates\n * from their dashboard. The default Magic loginWithMagicLink email will be\n * overridden when a variation is passed here.\n */\n overrides?: {\n variation?: string;\n };\n\n /**\n * The number of seconds until the generated Decenteralized ID token will expire.\n */\n lifespan?: number;\n}\n\nexport interface LoginWithSmsConfiguration {\n /**\n * Specify the phone number of the user attempting to login.\n */\n phoneNumber: string;\n\n /**\n * When `true`, a pre-built modal interface will show to the user, directing\n * them to check their SMS for the one time passcode (OTP) to complete their\n * authentication.\n *\n * When `false`, developers will be able to implement their own custom UI to\n * continue the SMS OTP flow.\n */\n showUI?: boolean;\n\n /*\n * The number of seconds until the generated Decenteralized ID token will expire.\n */\n lifespan?: number;\n}\nexport interface LoginWithEmailOTPConfiguration {\n /**\n * Specify the email address of the user attempting to login.\n */\n email: string;\n\n /**\n * When `true`, a pre-built modal interface will show to the user, directing\n * them to check their email for the one time passcode (OTP) to complete their\n * authentication.\n *\n * When `false`, developers will be able to implement their own custom UI to\n * continue the email OTP flow.\n */\n showUI?: boolean;\n\n /**\n * Device Unrecognized UI will enforce showing up to secure user's login\n *\n * When set to true (default), an improved device recognition UI will be displayed to the user,\n * prompting them to verify their login by checking their email for device approval. This feature\n * enhances authentication security.\n *\n * This param will only be affect if showUI is false. When set to false,\n * developers have the flexibility to implement their own customized UI to\n * handle device check events, providing a more tailored user experience.\n */\n deviceCheckUI?: boolean;\n\n /**\n * Enterprise users with a custom SMTP can create custom email templates\n * from their dashboard. The default Magic loginWithOTP email will be\n * overridden when a variation is passed here.\n */\n overrides?: {\n variation?: string;\n };\n\n /**\n * The number of seconds until the generated Decenteralized ID token will expire.\n */\n lifespan?: number;\n}\n\nexport interface LoginWithCredentialConfiguration {\n /**\n * A credential token or a valid query string (prefixed with ? or #)\n */\n credentialOrQueryString?: string;\n\n /**\n * The number of seconds until the generated Decenteralized ID token will expire.\n */\n lifespan?: number;\n}\n\nexport interface EnableMFAConfiguration {\n /**\n * When `true`, a pre-built modal interface will show to the user, directing\n * them to enable MFA usign Google Authenticator app.\n *\n * When `false`, developers will be able to implement their own custom UI to\n * continue the enable MFA flow.\n */\n showUI?: boolean;\n}\n\nexport interface DisableMFAConfiguration {\n /**\n * When `true`, a pre-built modal interface will show to the user, directing\n * them to disable MFA.\n *\n * When `false`, developers will be able to implement their own custom UI to\n * continue the disable MFA flow.\n */\n showUI?: boolean;\n}\n\n/**\n * Auth Events Enum\n */\nexport enum LoginWithMagicLinkEventEmit {\n Retry = 'retry',\n}\n\nexport enum LoginWithMagicLinkEventOnReceived {\n EmailSent = 'email-sent',\n EmailNotDeliverable = 'email-not-deliverable',\n}\n\nexport enum LoginWithEmailOTPEventEmit {\n VerifyEmailOtp = 'verify-email-otp',\n VerifyMFACode = 'verify-mfa-code',\n LostDevice = 'lost-device',\n VerifyRecoveryCode = 'verify-recovery-code',\n Cancel = 'cancel',\n}\n\nexport enum LoginWithSmsOTPEventEmit {\n VerifySmsOtp = 'verify-sms-otp',\n Cancel = 'cancel',\n Retry = 'retry',\n}\n\nexport enum LoginWithSmsOTPEventOnReceived {\n SmsOTPSent = 'sms-otp-sent',\n InvalidSmsOtp = 'invalid-sms-otp',\n ExpiredSmsOtp = 'expired-sms-otp',\n}\n\nexport enum LoginWithEmailOTPEventOnReceived {\n EmailOTPSent = 'email-otp-sent',\n InvalidEmailOtp = 'invalid-email-otp',\n InvalidMfaOtp = 'invalid-mfa-otp',\n ExpiredEmailOtp = 'expired-email-otp',\n MfaSentHandle = 'mfa-sent-handle',\n RecoveryCodeSentHandle = 'recovery-code-sent-handle',\n InvalidRecoveryCode = 'invalid-recovery-code',\n RecoveryCodeSuccess = 'recovery-code-success',\n LoginThrottled = 'login-throttled',\n}\n\nexport enum DeviceVerificationEventEmit {\n Retry = 'device-retry',\n}\n\nexport enum DeviceVerificationEventOnReceived {\n DeviceApproved = 'device-approved',\n DeviceNeedsApproval = 'device-needs-approval',\n DeviceVerificationLinkExpired = 'device-verification-link-expired',\n DeviceVerificationEmailSent = 'device-verification-email-sent',\n}\n\nexport enum RecencyCheckEventEmit {\n Retry = 'Recency/auth-factor-retry',\n Cancel = 'Recency/auth-factor-verification-cancel',\n VerifyEmailOtp = 'Recency/auth-factor-verify-email-otp',\n VerifyMFACode = 'Recency/verify-mfa-code',\n}\n\nexport enum RecencyCheckEventOnReceived {\n PrimaryAuthFactorNeedsVerification = 'Recency/auth-factor-needs-verification',\n PrimaryAuthFactorVerified = 'Recency/auth-factor-verified',\n InvalidEmailOtp = 'Recency/auth-factor-invalid-email-otp',\n EmailExpired = 'Recency/auth-factor-verification-email-expired',\n EmailSent = 'Recency/auth-factor-verification-email-sent',\n EmailNotDeliverable = 'Recency/auth-factor-verification-email-not-deliverable',\n}\n\nexport enum UpdateEmailEventEmit {\n RetryWithNewEmail = 'UpdateEmail/retry-with-new-email',\n Cancel = 'UpdateEmail/new-email-verification-cancel',\n VerifyEmailOtp = 'UpdateEmail/new-email-verify-otp',\n}\n\nexport enum UpdateEmailEventOnReceived {\n NewAuthFactorNeedsVerification = 'UpdateEmail/new-email-needs-verification',\n EmailUpdated = 'UpdateEmail/email-updated',\n InvalidEmailOtp = 'UpdateEmail/new-email-invalid-email-otp',\n EmailExpired = 'UpdateEmail/new-email-verification-email-expired',\n EmailSent = 'UpdateEmail/new-email-verification-email-sent',\n EmailNotDeliverable = 'UpdateEmail/new-email-verification-email-not-deliverable',\n InvalidEmail = 'UpdateEmail/new-email-invalid',\n EmailAlreadyExists = 'UpdateEmail/new-email-already-exists',\n}\n\nexport enum AuthEventOnReceived {\n IDTokenCreated = 'Auth/id-token-created',\n}\n\nexport enum FarcasterLoginEventEmit {\n Cancel = 'Farcaster/cancel',\n}\n\nexport enum EnableMFAEventOnReceived {\n MFASecretGenerated = 'mfa-secret-generated',\n InvalidMFAOtp = 'invalid-mfa-otp',\n MFARecoveryCodes = 'mfa-recovery-codes',\n}\nexport enum EnableMFAEventEmit {\n VerifyMFACode = 'verify-mfa-code',\n Cancel = 'cancel-mfa-setup',\n}\n\nexport enum DisableMFAEventOnReceived {\n MFACodeRequested = 'mfa-code-requested',\n InvalidMFAOtp = 'invalid-mfa-otp',\n InvalidRecoveryCode = 'invalid-recovery-code',\n}\n\nexport enum DisableMFAEventEmit {\n VerifyMFACode = 'verify-mfa-code',\n LostDevice = 'lost-device',\n Cancel = 'cancel-mfa-disable',\n}\n\n/**\n * EventHandlers\n */\nexport type LoginWithMagicLinkEventHandlers = {\n // Event Received\n [LoginWithMagicLinkEventOnReceived.EmailSent]: () => void;\n [LoginWithMagicLinkEventOnReceived.EmailNotDeliverable]: () => void;\n\n // Event sent\n [LoginWithMagicLinkEventEmit.Retry]: () => void;\n} & DeviceVerificationEventHandlers;\n\nexport type LoginWithSmsOTPEventHandlers = {\n // Event sent\n [LoginWithSmsOTPEventEmit.VerifySmsOtp]: (otp: string) => void;\n [LoginWithSmsOTPEventEmit.Cancel]: () => void;\n [LoginWithSmsOTPEventEmit.Retry]: () => void;\n\n // Event received\n [LoginWithSmsOTPEventOnReceived.SmsOTPSent]: () => void;\n [LoginWithSmsOTPEventOnReceived.InvalidSmsOtp]: () => void;\n [LoginWithSmsOTPEventOnReceived.ExpiredSmsOtp]: () => void;\n} & DeviceVerificationEventHandlers;\n\nexport type LoginWithEmailOTPEventHandlers = {\n // Event Received\n [LoginWithEmailOTPEventOnReceived.EmailOTPSent]: () => void;\n [LoginWithEmailOTPEventOnReceived.LoginThrottled]: () => void;\n [LoginWithEmailOTPEventOnReceived.InvalidEmailOtp]: () => void;\n [LoginWithEmailOTPEventOnReceived.InvalidMfaOtp]: () => void;\n [LoginWithEmailOTPEventOnReceived.ExpiredEmailOtp]: () => void;\n [LoginWithEmailOTPEventOnReceived.MfaSentHandle]: () => void;\n [LoginWithEmailOTPEventOnReceived.RecoveryCodeSentHandle]: () => void;\n [LoginWithEmailOTPEventOnReceived.InvalidRecoveryCode]: () => void;\n [LoginWithEmailOTPEventOnReceived.RecoveryCodeSuccess]: () => void;\n [AuthEventOnReceived.IDTokenCreated]: (idToken: string) => void;\n [WalletEventOnReceived.WalletInfoFetched]: () => void;\n\n // Event sent\n [LoginWithEmailOTPEventEmit.VerifyEmailOtp]: (otp: string) => void;\n [LoginWithEmailOTPEventEmit.VerifyMFACode]: (mfa: string) => void;\n [LoginWithEmailOTPEventEmit.LostDevice]: () => void;\n [LoginWithEmailOTPEventEmit.VerifyRecoveryCode]: (recoveryCode: string) => void;\n [LoginWithEmailOTPEventEmit.Cancel]: () => void;\n} & DeviceVerificationEventHandlers;\n\ntype DeviceVerificationEventHandlers = {\n // Event Received\n [DeviceVerificationEventOnReceived.DeviceNeedsApproval]: () => void;\n [DeviceVerificationEventOnReceived.DeviceVerificationEmailSent]: () => void;\n [DeviceVerificationEventOnReceived.DeviceVerificationLinkExpired]: () => void;\n [DeviceVerificationEventOnReceived.DeviceApproved]: () => void;\n\n // Event sent\n [DeviceVerificationEventEmit.Retry]: () => void;\n};\n\n/**\n * Update Email\n */\n\nexport type RecencyCheckEventHandlers = {\n [RecencyCheckEventOnReceived.PrimaryAuthFactorNeedsVerification]: () => void;\n [RecencyCheckEventOnReceived.PrimaryAuthFactorVerified]: () => void;\n [RecencyCheckEventOnReceived.InvalidEmailOtp]: () => void;\n [RecencyCheckEventOnReceived.EmailNotDeliverable]: () => void;\n [RecencyCheckEventOnReceived.EmailExpired]: () => void;\n [RecencyCheckEventOnReceived.EmailSent]: () => void;\n\n [RecencyCheckEventEmit.Cancel]: () => void;\n [RecencyCheckEventEmit.Retry]: () => void;\n [RecencyCheckEventEmit.VerifyEmailOtp]: (otp: string) => void;\n [RecencyCheckEventEmit.VerifyMFACode]: (mfa: string) => void;\n};\n\nexport type UpdateEmailEventHandlers = {\n [UpdateEmailEventOnReceived.NewAuthFactorNeedsVerification]: () => void;\n [UpdateEmailEventOnReceived.EmailUpdated]: () => void;\n [UpdateEmailEventOnReceived.InvalidEmailOtp]: () => void;\n [UpdateEmailEventOnReceived.EmailNotDeliverable]: () => void;\n [UpdateEmailEventOnReceived.EmailExpired]: () => void;\n [UpdateEmailEventOnReceived.EmailSent]: () => void;\n [UpdateEmailEventOnReceived.InvalidEmail]: () => void;\n [UpdateEmailEventOnReceived.EmailAlreadyExists]: () => void;\n\n [UpdateEmailEventEmit.Cancel]: () => void;\n [UpdateEmailEventEmit.RetryWithNewEmail]: (email?: string) => void;\n [UpdateEmailEventEmit.VerifyEmailOtp]: (otp: string) => void;\n} & RecencyCheckEventHandlers;\n\n/**\n * Enable MFA\n */\n\nexport type EnableMFAEventHandlers = {\n // Event Received\n [EnableMFAEventOnReceived.MFASecretGenerated]: ({ QRCode, key }: { QRCode: string; key: string }) => void;\n [EnableMFAEventOnReceived.InvalidMFAOtp]: ({ errorCode }: { errorCode: string }) => void;\n [EnableMFAEventOnReceived.MFARecoveryCodes]: ({ recoveryCode }: { recoveryCode: string }) => void;\n\n // Event sent\n [EnableMFAEventEmit.VerifyMFACode]: (totp: string) => void;\n [EnableMFAEventEmit.Cancel]: () => void;\n};\n\n/**\n * Disable MFA\n */\n\nexport type DisableMFAEventHandlers = {\n // Event Received\n [DisableMFAEventOnReceived.MFACodeRequested]: () => void;\n [DisableMFAEventOnReceived.InvalidMFAOtp]: ({ errorCode }: { errorCode: string }) => void;\n [DisableMFAEventOnReceived.InvalidRecoveryCode]: () => void;\n\n // Event sent\n [DisableMFAEventEmit.VerifyMFACode]: (totp: string) => void;\n [DisableMFAEventEmit.LostDevice]: (recoveryCode: string) => void;\n [DisableMFAEventEmit.Cancel]: () => void;\n};\n","export type EthNetworkName = 'mainnet' | 'goerli' | 'sepolia';\n\nexport enum EthChainType {\n Harmony = 'HARMONY',\n}\n\nexport interface CustomNodeConfiguration {\n rpcUrl: string;\n chainId?: number;\n chainType?: EthChainType;\n}\n\nexport type EthNetworkConfiguration = EthNetworkName | CustomNodeConfiguration;\n\nexport type ProviderEnableEvents = {\n 'id-token-created': (params: { idToken: string }) => void;\n};\n","import { RecencyCheckEventHandlers } from './auth-types';\nimport { DeepLinkPage } from '../core/deep-link-pages';\n\nexport interface GetIdTokenConfiguration {\n /**\n * The number of seconds until the generated ID token will expire.\n */\n lifespan?: number;\n}\n\nexport interface GenerateIdTokenConfiguration extends GetIdTokenConfiguration {\n /**\n * An optional piece of data to sign with the token. Note, however, that the\n * unsigned data _will not_ be encoded in the token, only an encrypted\n * signature of the data.\n */\n attachment?: string;\n}\n\nexport enum UserEventsEmit {\n ClosedByUser = 'closed-by-user',\n}\n\nexport enum UserEventsOnReceived {\n ClosedByUser = 'closed-by-user-on-received',\n}\n\nexport interface MagicUserMetadata {\n issuer: string | null;\n publicAddress: string | null;\n email: string | null;\n phoneNumber: string | null;\n isMfaEnabled: boolean;\n recoveryFactors: [RecoveryFactor] | [];\n walletType: string;\n firstLoginAt: string | null;\n}\n\nexport enum RecoveryFactorEventOnReceived {\n EnterNewPhoneNumber = 'enter-new-phone-number',\n EnterOtpCode = 'enter-otp-code',\n RecoveryFactorAlreadyExists = 'recovery-factor-already-exists',\n MalformedPhoneNumber = 'malformed-phone-number',\n InvalidOtpCode = 'invalid-otp-code',\n RecoveryFactorUpdated = 'recovery-factor-updated',\n RecoveryFactorDeleted = 'recovery-factor-deleted',\n}\n\nexport enum RecoveryFactorEventEmit {\n SendNewPhoneNumber = 'send-new-phone-number',\n SendOtpCode = 'send-otp-code',\n Cancel = 'cancel',\n StartEditPhoneNumber = 'start-edit-phone-number',\n}\n\ntype RecoveryFactor = {\n type: RecoveryMethodType;\n value: string;\n};\n\nexport type RecoveryFactorEventHandlers = {\n // Event Received\n [RecoveryFactorEventEmit.SendNewPhoneNumber]: (phone_number: string) => void;\n [RecoveryFactorEventEmit.SendOtpCode]: (otp: string) => void;\n [RecoveryFactorEventEmit.StartEditPhoneNumber]: () => void;\n [RecoveryFactorEventEmit.Cancel]: () => void;\n\n // Event sent\n [RecoveryFactorEventOnReceived.EnterNewPhoneNumber]: () => void;\n [RecoveryFactorEventOnReceived.EnterOtpCode]: () => void;\n [RecoveryFactorEventOnReceived.RecoveryFactorAlreadyExists]: () => void;\n [RecoveryFactorEventOnReceived.MalformedPhoneNumber]: () => void;\n [RecoveryFactorEventOnReceived.InvalidOtpCode]: () => void;\n [RecoveryFactorEventOnReceived.RecoveryFactorUpdated]: (updatedFactor: { type: string, value: string }) => void;\n [RecoveryFactorEventOnReceived.RecoveryFactorDeleted]: () => void;\n} & RecencyCheckEventHandlers;\n\nexport enum RecoveryMethodType {\n PhoneNumber = 'phone_number',\n}\n\nexport interface UpdateEmailConfiguration {\n /**\n * The new email address to update to\n */\n email: string;\n\n /**\n * When `true`, a pre-built pending modal interface will\n * guide the user to check their new, followed by old emails\n * for confirmation emails.\n */\n showUI?: boolean;\n}\n\nexport interface UpdateWebAuthnInfoConfiguration {\n /**\n * WebAuthn info id\n */\n id: string;\n\n /**\n * nickname that user attempts to update to the webauth device associate to the id.\n */\n nickname: string;\n}\n\nexport interface RecoverAccountConfiguration {\n /**\n * The email to recover\n */\n email: string;\n showUI: boolean;\n}\n\nexport interface ShowSettingsConfiguration {\n /**\n * deep linking destination\n */\n page: DeepLinkPage;\n showUI?: boolean;\n}\n\nexport enum RecoverAccountEventOnReceived {\n SmsOtpSent = 'sms-otp-sent',\n LoginThrottled = 'login-throttled',\n InvalidSmsOtp = 'invalid-sms-otp',\n SmsVerified = 'sms-verified',\n AccountRecovered = 'account-recovered',\n UpdateEmailRequired = 'update-email-required',\n}\n\nexport enum RecoverAccountEventEmit {\n Cancel = 'cancel',\n VerifyOtp = 'verify-otp-code',\n ResendSms = 'resend-sms-otp',\n UpdateEmail = 'update-email',\n}\n\nexport type RecoverAccountEventHandlers = {\n // Event Received\n [RecoverAccountEventEmit.Cancel]: () => void;\n [RecoverAccountEventEmit.VerifyOtp]: (otp: string) => void;\n [RecoverAccountEventEmit.ResendSms]: () => void;\n [RecoverAccountEventEmit.UpdateEmail]: (email: string) => void;\n\n // Event sent\n [RecoverAccountEventOnReceived.SmsOtpSent]: ({ phoneNumber }: { phoneNumber: string }) => void;\n [RecoverAccountEventOnReceived.LoginThrottled]: (error: string) => void;\n [RecoverAccountEventOnReceived.InvalidSmsOtp]: ({\n errorMessage,\n errorCode,\n }: {\n errorMessage: string;\n errorCode: string;\n }) => void;\n [RecoverAccountEventOnReceived.SmsVerified]: () => void;\n [RecoverAccountEventOnReceived.AccountRecovered]: () => void;\n [RecoverAccountEventOnReceived.UpdateEmailRequired]: () => void;\n};\n","export type NFTResponseStatus = 'cancelled' | 'pending' | 'processed' | 'declined' | 'expired';\n\nexport type NFTResponse = {\n status: NFTResponseStatus;\n};\n\nexport interface NFTPurchaseRequest {\n nft: {\n name: string;\n imageUrl: string;\n blockchainNftId: string;\n contractAddress: string;\n network: string;\n platform: string;\n type: string;\n };\n identityPrefill: {\n firstName: string;\n lastName: string;\n dateOfBirth: string; // YYYY-MM-DD\n emailAddress: string;\n phone: string;\n address: {\n street1: string;\n street2: string;\n city: string;\n regionCode: string;\n postalCode: string;\n countryCode: string;\n };\n };\n}\n\nexport type NFTPurchaseResponse = NFTResponse & {\n errorMessage?: string;\n};\n\nexport interface NFTCheckoutRequest {\n // given by magic / found in the developer dashboard in future\n contractId: string;\n // in contract, if ERC1155… for ERC721, use token ID = 0\n tokenId: string;\n name: string;\n imageUrl: string;\n quantity?: number; // default is 1\n walletAddress?: string; // default is user's wallet address\n // If enabled, the user will be able to pay with crypto. the default is false\n isCryptoCheckoutEnabled?: boolean;\n walletProvider?: 'magic' | 'web3modal';\n}\n\nexport type NFTCheckoutResponse = NFTResponse;\n\nexport type NFTCheckoutEvents = {\n disconnect: () => void;\n 'nft-checkout-initiated': (rawTransaction: string) => void;\n};\n\nexport interface NFTTransferRequest {\n tokenId: string;\n contractAddress: string;\n quantity?: number;\n recipient?: string;\n}\n\nexport type NFTTransferResponse = NFTResponse;\n\nexport enum NftCheckoutIntermediaryEvents {\n Success = 'nft-checkout-success',\n Failure = 'nft-checkout-failure',\n Initiated = 'nft-checkout-initiated',\n Disconnect = 'disconnect',\n}\n\nexport type NftCheckoutEventHandler = {\n [NftCheckoutIntermediaryEvents.Initiated]: (rawTransaction: string) => void;\n [NftCheckoutIntermediaryEvents.Success]: (signedTransaction: string) => void;\n [NftCheckoutIntermediaryEvents.Failure]: () => void;\n};\n","export type GasApiResponse = {\n request_id: string;\n state: string;\n success: boolean;\n};\n\nexport type AccessListEntry = { address: string; storageKeys: Array<string> };\n\n/**\n * An ordered collection of [[AccessList]] entries.\n */\nexport type AccessList = Array<AccessListEntry>;\n\nexport interface GaslessTransactionRequest {\n /**\n * The transaction type.\n */\n type?: number;\n\n /**\n * The target of the transaction.\n */\n to?: string;\n\n /**\n * The sender of the transaction.\n */\n from?: string;\n\n /**\n * The nonce of the transaction, used to prevent replay attacks.\n */\n\n nonce?: number;\n\n /**\n * The maximum amount of gas to allow this transaction to consime.\n */\n gasLimit?: bigint;\n\n /**\n * The gas price to use for legacy transactions or transactions on\n * legacy networks.\n *\n * Most of the time the ``max*FeePerGas`` is preferred.\n */\n gasPrice?: bigint;\n\n /**\n * The [[link-eip-1559]] maximum priority fee to pay per gas.\n */\n maxPriorityFeePerGas?: bigint;\n\n /**\n * The [[link-eip-1559]] maximum total fee to pay per gas. The actual\n * value used is protocol enforced to be the block's base fee.\n */\n maxFeePerGas?: bigint;\n\n /**\n * The transaction data.\n */\n data?: string;\n\n /**\n * The transaction value (in wei).\n */\n value?: bigint;\n\n /**\n * The chain ID for the network this transaction is valid on.\n */\n chainId?: bigint;\n\n /**\n * The [[link-eip-2930]] access list. Storage slots included in the access\n * list are //warmed// by pre-loading them, so their initial cost to\n * fetch is guaranteed, but then each additional access is cheaper.\n */\n accessList?: AccessList;\n\n /**\n * A custom object, which can be passed along for network-specific\n * values.\n */\n customData?: any;\n}\n\nexport enum WalletEventOnReceived {\n WalletInfoFetched = 'Wallet/wallet-info-fetched',\n}\n","export enum UiEventsEmit {\n CloseMagicWindow = 'close-magic-window',\n}\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","/* eslint-disable */\n/* istanbul ignore file */\n\n// DO NOT CHANGE THIS FILE.\n//\n// We have to bundle `semver` ourselves due to a long-standing cyclic dependency\n// which causes Rollup to break the `satisfies` function.\n//\n// See:\n// - https://github.com/magiclabs/magic-js/issues/198\n// - https://github.com/rollup/plugins/issues/879\n// - https://github.com/npm/node-semver/issues/318\n// - https://github.com/npm/node-semver/issues/381\n\nfunction createCommonjsModule(e){const r={exports:{}};return e(r,r.exports),r.exports}const SEMVER_SPEC_VERSION=\"2.0.0\",MAX_LENGTH$2=256,MAX_SAFE_INTEGER$1=Number.MAX_SAFE_INTEGER||9007199254740991,MAX_SAFE_COMPONENT_LENGTH=16,constants={SEMVER_SPEC_VERSION:\"2.0.0\",MAX_LENGTH:256,MAX_SAFE_INTEGER:MAX_SAFE_INTEGER$1,MAX_SAFE_COMPONENT_LENGTH:16},debug=\"object\"==typeof process&&process.env&&process.env.NODE_DEBUG&&/\\bsemver\\b/i.test(process.env.NODE_DEBUG)?(...e)=>console.error(\"SEMVER\",...e):()=>{},debug_1=debug,re_1=createCommonjsModule(function(e,r){const{MAX_SAFE_COMPONENT_LENGTH:t}=constants,s=(r=e.exports={}).re=[],i=r.src=[],o=r.t={};let a=0;const n=(e,r,t)=>{const n=a++;debug_1(n,r),o[e]=n,i[n]=r,s[n]=new RegExp(r,t?\"g\":void 0)};n(\"NUMERICIDENTIFIER\",\"0|[1-9]\\\\d*\"),n(\"NUMERICIDENTIFIERLOOSE\",\"[0-9]+\"),n(\"NONNUMERICIDENTIFIER\",\"\\\\d*[a-zA-Z-][a-zA-Z0-9-]*\"),n(\"MAINVERSION\",`(${i[o.NUMERICIDENTIFIER]})\\\\.`+`(${i[o.NUMERICIDENTIFIER]})\\\\.`+`(${i[o.NUMERICIDENTIFIER]})`),n(\"MAINVERSIONLOOSE\",`(${i[o.NUMERICIDENTIFIERLOOSE]})\\\\.`+`(${i[o.NUMERICIDENTIFIERLOOSE]})\\\\.`+`(${i[o.NUMERICIDENTIFIERLOOSE]})`),n(\"PRERELEASEIDENTIFIER\",`(?:${i[o.NUMERICIDENTIFIER]}|${i[o.NONNUMERICIDENTIFIER]})`),n(\"PRERELEASEIDENTIFIERLOOSE\",`(?:${i[o.NUMERICIDENTIFIERLOOSE]}|${i[o.NONNUMERICIDENTIFIER]})`),n(\"PRERELEASE\",`(?:-(${i[o.PRERELEASEIDENTIFIER]}(?:\\\\.${i[o.PRERELEASEIDENTIFIER]})*))`),n(\"PRERELEASELOOSE\",`(?:-?(${i[o.PRERELEASEIDENTIFIERLOOSE]}(?:\\\\.${i[o.PRERELEASEIDENTIFIERLOOSE]})*))`),n(\"BUILDIDENTIFIER\",\"[0-9A-Za-z-]+\"),n(\"BUILD\",`(?:\\\\+(${i[o.BUILDIDENTIFIER]}(?:\\\\.${i[o.BUILDIDENTIFIER]})*))`),n(\"FULLPLAIN\",`v?${i[o.MAINVERSION]}${i[o.PRERELEASE]}?${i[o.BUILD]}?`),n(\"FULL\",`^${i[o.FULLPLAIN]}$`),n(\"LOOSEPLAIN\",`[v=\\\\s]*${i[o.MAINVERSIONLOOSE]}${i[o.PRERELEASELOOSE]}?${i[o.BUILD]}?`),n(\"LOOSE\",`^${i[o.LOOSEPLAIN]}$`),n(\"GTLT\",\"((?:<|>)?=?)\"),n(\"XRANGEIDENTIFIERLOOSE\",`${i[o.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`),n(\"XRANGEIDENTIFIER\",`${i[o.NUMERICIDENTIFIER]}|x|X|\\\\*`),n(\"XRANGEPLAIN\",`[v=\\\\s]*(${i[o.XRANGEIDENTIFIER]})`+`(?:\\\\.(${i[o.XRANGEIDENTIFIER]})`+`(?:\\\\.(${i[o.XRANGEIDENTIFIER]})`+`(?:${i[o.PRERELEASE]})?${i[o.BUILD]}?`+\")?)?\"),n(\"XRANGEPLAINLOOSE\",`[v=\\\\s]*(${i[o.XRANGEIDENTIFIERLOOSE]})`+`(?:\\\\.(${i[o.XRANGEIDENTIFIERLOOSE]})`+`(?:\\\\.(${i[o.XRANGEIDENTIFIERLOOSE]})`+`(?:${i[o.PRERELEASELOOSE]})?${i[o.BUILD]}?`+\")?)?\"),n(\"XRANGE\",`^${i[o.GTLT]}\\\\s*${i[o.XRANGEPLAIN]}$`),n(\"XRANGELOOSE\",`^${i[o.GTLT]}\\\\s*${i[o.XRANGEPLAINLOOSE]}$`),n(\"COERCE\",`(^|[^\\\\d])(\\\\d{1,${t}})`+`(?:\\\\.(\\\\d{1,${t}}))?`+`(?:\\\\.(\\\\d{1,${t}}))?`+\"(?:$|[^\\\\d])\"),n(\"COERCERTL\",i[o.COERCE],!0),n(\"LONETILDE\",\"(?:~>?)\"),n(\"TILDETRIM\",`(\\\\s*)${i[o.LONETILDE]}\\\\s+`,!0),r.tildeTrimReplace=\"$1~\",n(\"TILDE\",`^${i[o.LONETILDE]}${i[o.XRANGEPLAIN]}$`),n(\"TILDELOOSE\",`^${i[o.LONETILDE]}${i[o.XRANGEPLAINLOOSE]}$`),n(\"LONECARET\",\"(?:\\\\^)\"),n(\"CARETTRIM\",`(\\\\s*)${i[o.LONECARET]}\\\\s+`,!0),r.caretTrimReplace=\"$1^\",n(\"CARET\",`^${i[o.LONECARET]}${i[o.XRANGEPLAIN]}$`),n(\"CARETLOOSE\",`^${i[o.LONECARET]}${i[o.XRANGEPLAINLOOSE]}$`),n(\"COMPARATORLOOSE\",`^${i[o.GTLT]}\\\\s*(${i[o.LOOSEPLAIN]})$|^$`),n(\"COMPARATOR\",`^${i[o.GTLT]}\\\\s*(${i[o.FULLPLAIN]})$|^$`),n(\"COMPARATORTRIM\",`(\\\\s*)${i[o.GTLT]}\\\\s*(${i[o.LOOSEPLAIN]}|${i[o.XRANGEPLAIN]})`,!0),r.comparatorTrimReplace=\"$1$2$3\",n(\"HYPHENRANGE\",`^\\\\s*(${i[o.XRANGEPLAIN]})`+\"\\\\s+-\\\\s+\"+`(${i[o.XRANGEPLAIN]})`+\"\\\\s*$\"),n(\"HYPHENRANGELOOSE\",`^\\\\s*(${i[o.XRANGEPLAINLOOSE]})`+\"\\\\s+-\\\\s+\"+`(${i[o.XRANGEPLAINLOOSE]})`+\"\\\\s*$\"),n(\"STAR\",\"(<|>)?=?\\\\s*\\\\*\"),n(\"GTE0\",\"^\\\\s*>=\\\\s*0.0.0\\\\s*$\"),n(\"GTE0PRE\",\"^\\\\s*>=\\\\s*0.0.0-0\\\\s*$\")}),numeric=/^[0-9]+$/,compareIdentifiers$1=(e,r)=>{const t=numeric.test(e),s=numeric.test(r);return t&&s&&(e=+e,r=+r),e===r?0:t&&!s?-1:s&&!t?1:e<r?-1:1},rcompareIdentifiers=(e,r)=>compareIdentifiers$1(r,e),identifiers={compareIdentifiers:compareIdentifiers$1,rcompareIdentifiers:rcompareIdentifiers},{MAX_LENGTH:MAX_LENGTH$1,MAX_SAFE_INTEGER:MAX_SAFE_INTEGER}=constants,{re:re$4,t:t$4}=re_1,{compareIdentifiers:compareIdentifiers}=identifiers;class SemVer{constructor(e,r){if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof SemVer){if(e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease)return e;e=e.version}else if(\"string\"!=typeof e)throw new TypeError(`Invalid Version: ${e}`);if(e.length>MAX_LENGTH$1)throw new TypeError(`version is longer than ${MAX_LENGTH$1} characters`);debug_1(\"SemVer\",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;const t=e.trim().match(r.loose?re$4[t$4.LOOSE]:re$4[t$4.FULL]);if(!t)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+t[1],this.minor=+t[2],this.patch=+t[3],this.major>MAX_SAFE_INTEGER||this.major<0)throw new TypeError(\"Invalid major version\");if(this.minor>MAX_SAFE_INTEGER||this.minor<0)throw new TypeError(\"Invalid minor version\");if(this.patch>MAX_SAFE_INTEGER||this.patch<0)throw new TypeError(\"Invalid patch version\");t[4]?this.prerelease=t[4].split(\".\").map(e=>{if(/^[0-9]+$/.test(e)){const r=+e;if(r>=0&&r<MAX_SAFE_INTEGER)return r}return e}):this.prerelease=[],this.build=t[5]?t[5].split(\".\"):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(\".\")}`),this.version}toString(){return this.version}compare(e){if(debug_1(\"SemVer.compare\",this.version,this.options,e),!(e instanceof SemVer)){if(\"string\"==typeof e&&e===this.version)return 0;e=new SemVer(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){return e instanceof SemVer||(e=new SemVer(e,this.options)),compareIdentifiers(this.major,e.major)||compareIdentifiers(this.minor,e.minor)||compareIdentifiers(this.patch,e.patch)}comparePre(e){if(e instanceof SemVer||(e=new SemVer(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let r=0;do{const t=this.prerelease[r],s=e.prerelease[r];if(debug_1(\"prerelease compare\",r,t,s),void 0===t&&void 0===s)return 0;if(void 0===s)return 1;if(void 0===t)return-1;if(t!==s)return compareIdentifiers(t,s)}while(++r)}compareBuild(e){e instanceof SemVer||(e=new SemVer(e,this.options));let r=0;do{const t=this.build[r],s=e.build[r];if(debug_1(\"prerelease compare\",r,t,s),void 0===t&&void 0===s)return 0;if(void 0===s)return 1;if(void 0===t)return-1;if(t!==s)return compareIdentifiers(t,s)}while(++r)}inc(e,r){switch(e){case\"premajor\":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc(\"pre\",r);break;case\"preminor\":this.prerelease.length=0,this.patch=0,this.minor++,this.inc(\"pre\",r);break;case\"prepatch\":this.prerelease.length=0,this.inc(\"patch\",r),this.inc(\"pre\",r);break;case\"prerelease\":0===this.prerelease.length&&this.inc(\"patch\",r),this.inc(\"pre\",r);break;case\"major\":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case\"minor\":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case\"patch\":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case\"pre\":if(0===this.prerelease.length)this.prerelease=[0];else{let e=this.prerelease.length;for(;--e>=0;)\"number\"==typeof this.prerelease[e]&&(this.prerelease[e]++,e=-2);-1===e&&this.prerelease.push(0)}r&&(this.prerelease[0]===r?isNaN(this.prerelease[1])&&(this.prerelease=[r,0]):this.prerelease=[r,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}}const compare=(e,r,t)=>new SemVer(e,t).compare(new SemVer(r,t)),compare_1=compare,eq=(e,r,t)=>0===compare_1(e,r,t),eq_1=eq,neq=(e,r,t)=>0!==compare_1(e,r,t),neq_1=neq,gt=(e,r,t)=>compare_1(e,r,t)>0,gt_1=gt,gte=(e,r,t)=>compare_1(e,r,t)>=0,gte_1=gte,lt=(e,r,t)=>compare_1(e,r,t)<0,lt_1=lt,lte=(e,r,t)=>compare_1(e,r,t)<=0,lte_1=lte,cmp=(e,r,t,s)=>{switch(r){case\"===\":return\"object\"==typeof e&&(e=e.version),\"object\"==typeof t&&(t=t.version),e===t;case\"!==\":return\"object\"==typeof e&&(e=e.version),\"object\"==typeof t&&(t=t.version),e!==t;case\"\":case\"=\":case\"==\":return eq_1(e,t,s);case\"!=\":return neq_1(e,t,s);case\">\":return gt_1(e,t,s);case\">=\":return gte_1(e,t,s);case\"<\":return lt_1(e,t,s);case\"<=\":return lte_1(e,t,s);default:throw new TypeError(`Invalid operator: ${r}`)}},cmp_1=cmp,ANY=Symbol(\"SemVer ANY\");class Comparator{static get ANY(){return ANY}constructor(e,r){if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof Comparator){if(e.loose===!!r.loose)return e;e=e.value}debug_1(\"comparator\",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===ANY?this.value=\"\":this.value=this.operator+this.semver.version,debug_1(\"comp\",this)}parse(e){const r=this.options.loose?re$3[t$3.COMPARATORLOOSE]:re$3[t$3.COMPARATOR],t=e.match(r);if(!t)throw new TypeError(`Invalid comparator: ${e}`);this.operator=void 0!==t[1]?t[1]:\"\",\"=\"===this.operator&&(this.operator=\"\"),t[2]?this.semver=new SemVer(t[2],this.options.loose):this.semver=ANY}toString(){return this.value}test(e){if(debug_1(\"Comparator.test\",e,this.options.loose),this.semver===ANY||e===ANY)return!0;if(\"string\"==typeof e)try{e=new SemVer(e,this.options)}catch(e){return!1}return cmp_1(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof Comparator))throw new TypeError(\"a Comparator is required\");if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),\"\"===this.operator)return\"\"===this.value||new Range(e.value,r).test(this.value);if(\"\"===e.operator)return\"\"===e.value||new Range(this.value,r).test(e.semver);const t=!(\">=\"!==this.operator&&\">\"!==this.operator||\">=\"!==e.operator&&\">\"!==e.operator),s=!(\"<=\"!==this.operator&&\"<\"!==this.operator||\"<=\"!==e.operator&&\"<\"!==e.operator),i=this.semver.version===e.semver.version,o=!(\">=\"!==this.operator&&\"<=\"!==this.operator||\">=\"!==e.operator&&\"<=\"!==e.operator),a=cmp_1(this.semver,\"<\",e.semver,r)&&(\">=\"===this.operator||\">\"===this.operator)&&(\"<=\"===e.operator||\"<\"===e.operator),n=cmp_1(this.semver,\">\",e.semver,r)&&(\"<=\"===this.operator||\"<\"===this.operator)&&(\">=\"===e.operator||\">\"===e.operator);return t||s||i&&o||a||n}}const{re:re$3,t:t$3}=re_1;class Range{constructor(e,r){if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof Range)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new Range(e.raw,r);if(e instanceof Comparator)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e,this.set=e.split(/\\s*\\|\\|\\s*/).map(e=>this.parseRange(e.trim())).filter(e=>e.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);this.format()}format(){return this.range=this.set.map(e=>e.join(\" \").trim()).join(\"||\").trim(),this.range}toString(){return this.range}parseRange(e){const{loose:r}=this.options;e=e.trim();const t=r?re$2[t$2.HYPHENRANGELOOSE]:re$2[t$2.HYPHENRANGE];e=e.replace(t,hyphenReplace(this.options.includePrerelease)),debug_1(\"hyphen replace\",e),e=e.replace(re$2[t$2.COMPARATORTRIM],comparatorTrimReplace),debug_1(\"comparator trim\",e,re$2[t$2.COMPARATORTRIM]),e=(e=(e=e.replace(re$2[t$2.TILDETRIM],tildeTrimReplace)).replace(re$2[t$2.CARETTRIM],caretTrimReplace)).split(/\\s+/).join(\" \");const s=r?re$2[t$2.COMPARATORLOOSE]:re$2[t$2.COMPARATOR];return e.split(\" \").map(e=>parseComparator(e,this.options)).join(\" \").split(/\\s+/).map(e=>replaceGTE0(e,this.options)).filter(this.options.loose?e=>!!e.match(s):()=>!0).map(e=>new Comparator(e,this.options))}intersects(e,r){if(!(e instanceof Range))throw new TypeError(\"a Range is required\");return this.set.some(t=>isSatisfiable(t,r)&&e.set.some(e=>isSatisfiable(e,r)&&t.every(t=>e.every(e=>t.intersects(e,r)))))}test(e){if(!e)return!1;if(\"string\"==typeof e)try{e=new SemVer(e,this.options)}catch(e){return!1}for(let r=0;r<this.set.length;r++)if(testSet(this.set[r],e,this.options))return!0;return!1}}const{re:re$2,t:t$2,comparatorTrimReplace:comparatorTrimReplace,tildeTrimReplace:tildeTrimReplace,caretTrimReplace:caretTrimReplace}=re_1,isSatisfiable=(e,r)=>{let t=!0;const s=e.slice();let i=s.pop();for(;t&&s.length;)t=s.every(e=>i.intersects(e,r)),i=s.pop();return t},parseComparator=(e,r)=>(debug_1(\"comp\",e,r),e=replaceCarets(e,r),debug_1(\"caret\",e),e=replaceTildes(e,r),debug_1(\"tildes\",e),e=replaceXRanges(e,r),debug_1(\"xrange\",e),e=replaceStars(e,r),debug_1(\"stars\",e),e),isX=e=>!e||\"x\"===e.toLowerCase()||\"*\"===e,replaceTildes=(e,r)=>e.trim().split(/\\s+/).map(e=>replaceTilde(e,r)).join(\" \"),replaceTilde=(e,r)=>{const t=r.loose?re$2[t$2.TILDELOOSE]:re$2[t$2.TILDE];return e.replace(t,(r,t,s,i,o)=>{let a;return debug_1(\"tilde\",e,r,t,s,i,o),isX(t)?a=\"\":isX(s)?a=`>=${t}.0.0 <${+t+1}.0.0-0`:isX(i)?a=`>=${t}.${s}.0 <${t}.${+s+1}.0-0`:o?(debug_1(\"replaceTilde pr\",o),a=`>=${t}.${s}.${i}-${o} <${t}.${+s+1}.0-0`):a=`>=${t}.${s}.${i} <${t}.${+s+1}.0-0`,debug_1(\"tilde return\",a),a})},replaceCarets=(e,r)=>e.trim().split(/\\s+/).map(e=>replaceCaret(e,r)).join(\" \"),replaceCaret=(e,r)=>{debug_1(\"caret\",e,r);const t=r.loose?re$2[t$2.CARETLOOSE]:re$2[t$2.CARET],s=r.includePrerelease?\"-0\":\"\";return e.replace(t,(r,t,i,o,a)=>{let n;return debug_1(\"caret\",e,r,t,i,o,a),isX(t)?n=\"\":isX(i)?n=`>=${t}.0.0${s} <${+t+1}.0.0-0`:isX(o)?n=\"0\"===t?`>=${t}.${i}.0${s} <${t}.${+i+1}.0-0`:`>=${t}.${i}.0${s} <${+t+1}.0.0-0`:a?(debug_1(\"replaceCaret pr\",a),n=\"0\"===t?\"0\"===i?`>=${t}.${i}.${o}-${a} <${t}.${i}.${+o+1}-0`:`>=${t}.${i}.${o}-${a} <${t}.${+i+1}.0-0`:`>=${t}.${i}.${o}-${a} <${+t+1}.0.0-0`):(debug_1(\"no pr\"),n=\"0\"===t?\"0\"===i?`>=${t}.${i}.${o}${s} <${t}.${i}.${+o+1}-0`:`>=${t}.${i}.${o}${s} <${t}.${+i+1}.0-0`:`>=${t}.${i}.${o} <${+t+1}.0.0-0`),debug_1(\"caret return\",n),n})},replaceXRanges=(e,r)=>(debug_1(\"replaceXRanges\",e,r),e.split(/\\s+/).map(e=>replaceXRange(e,r)).join(\" \")),replaceXRange=(e,r)=>{e=e.trim();const t=r.loose?re$2[t$2.XRANGELOOSE]:re$2[t$2.XRANGE];return e.replace(t,(t,s,i,o,a,n)=>{debug_1(\"xRange\",e,t,s,i,o,a,n);const E=isX(i),p=E||isX(o),l=p||isX(a),c=l;return\"=\"===s&&c&&(s=\"\"),n=r.includePrerelease?\"-0\":\"\",E?t=\">\"===s||\"<\"===s?\"<0.0.0-0\":\"*\":s&&c?(p&&(o=0),a=0,\">\"===s?(s=\">=\",p?(i=+i+1,o=0,a=0):(o=+o+1,a=0)):\"<=\"===s&&(s=\"<\",p?i=+i+1:o=+o+1),\"<\"===s&&(n=\"-0\"),t=`${s+i}.${o}.${a}${n}`):p?t=`>=${i}.0.0${n} <${+i+1}.0.0-0`:l&&(t=`>=${i}.${o}.0${n} <${i}.${+o+1}.0-0`),debug_1(\"xRange return\",t),t})},replaceStars=(e,r)=>(debug_1(\"replaceStars\",e,r),e.trim().replace(re$2[t$2.STAR],\"\")),replaceGTE0=(e,r)=>(debug_1(\"replaceGTE0\",e,r),e.trim().replace(re$2[r.includePrerelease?t$2.GTE0PRE:t$2.GTE0],\"\")),hyphenReplace=e=>(r,t,s,i,o,a,n,E,p,l,c,$,h)=>`${t=isX(s)?\"\":isX(i)?`>=${s}.0.0${e?\"-0\":\"\"}`:isX(o)?`>=${s}.${i}.0${e?\"-0\":\"\"}`:a?`>=${t}`:`>=${t}${e?\"-0\":\"\"}`} ${E=isX(p)?\"\":isX(l)?`<${+p+1}.0.0-0`:isX(c)?`<${p}.${+l+1}.0-0`:$?`<=${p}.${l}.${c}-${$}`:e?`<${p}.${l}.${+c+1}-0`:`<=${E}`}`.trim(),testSet=(e,r,t)=>{for(let t=0;t<e.length;t++)if(!e[t].test(r))return!1;if(r.prerelease.length&&!t.includePrerelease){for(let t=0;t<e.length;t++)if(debug_1(e[t].semver),e[t].semver!==Comparator.ANY&&e[t].semver.prerelease.length>0){const s=e[t].semver;if(s.major===r.major&&s.minor===r.minor&&s.patch===r.patch)return!0}return!1}return!0};export const satisfies=(e,r,t)=>{try{r=new Range(r,t)}catch(e){return!1}return r.test(e)};const satisfies_1=satisfies,{MAX_LENGTH:MAX_LENGTH}=constants,{re:re$1,t:t$1}=re_1,parse=(e,r)=>{if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof SemVer)return e;if(\"string\"!=typeof e)return null;if(e.length>MAX_LENGTH)return null;if(!(r.loose?re$1[t$1.LOOSE]:re$1[t$1.FULL]).test(e))return null;try{return new SemVer(e,r)}catch(e){return null}},parse_1=parse,{re:re,t:t}=re_1;export const coerce=(e,r)=>{if(e instanceof SemVer)return e;if(\"number\"==typeof e&&(e=String(e)),\"string\"!=typeof e)return null;let s=null;if((r=r||{}).rtl){let r;for(;(r=re[t.COERCERTL].exec(e))&&(!s||s.index+s[0].length!==e.length);)s&&r.index+r[0].length===s.index+s[0].length||(s=r),re[t.COERCERTL].lastIndex=r.index+r[1].length+r[2].length;re[t.COERCERTL].lastIndex=-1}else s=e.match(re[t.COERCE]);return null===s?null:parse_1(`${s[2]}.${s[3]||\"0\"}.${s[4]||\"0\"}`,r)};\n","function percentToByte(p: string) {\n return String.fromCharCode(parseInt(p.slice(1), 16));\n}\n\nfunction byteToPercent(b: string) {\n return `%${`00${b.charCodeAt(0).toString(16)}`.slice(-2)}`;\n}\n\n/**\n * Encodes a Base64 string. Safe for UTF-8 characters.\n * Original source is from the `universal-base64` NPM package.\n *\n * @source https://github.com/blakeembrey/universal-base64/blob/master/src/browser.ts\n */\nfunction btoaUTF8(str: string): string {\n return btoa(encodeURIComponent(str).replace(/%[0-9A-F]{2}/g, percentToByte));\n}\n\n/**\n * Decodes a Base64 string. Safe for UTF-8 characters.\n * Original source is from the `universal-base64` NPM package.\n *\n * @source https://github.com/blakeembrey/universal-base64/blob/master/src/browser.ts\n */\nfunction atobUTF8(str: string): string {\n return decodeURIComponent(Array.from(atob(str), byteToPercent).join(''));\n}\n\n/**\n * Given a JSON-serializable object, encode as a Base64 string.\n */\nexport function encodeJSON<T>(options: T): string {\n return btoaUTF8(JSON.stringify(options));\n}\n\n/**\n * Given a Base64 JSON string, decode a JavaScript object.\n */\nexport function decodeJSON<T>(queryString: string): T {\n return JSON.parse(atobUTF8(queryString));\n}\n","import { JsonRpcError, RPCErrorCode, SDKErrorCode, SDKWarningCode } from '@magic-sdk/types';\nimport { isJsonRpcErrorCode } from '../util/type-guards';\nimport { SDKEnvironment } from './sdk-environment';\nimport { BaseExtension } from '../modules/base-extension';\n\n// --- Error/warning classes\n\n/**\n * This error type represents internal SDK errors. This could be developer\n * mistakes (or Magic's mistakes), or execution errors unrelated to standard\n * JavaScript exceptions.\n */\nexport class MagicSDKError extends Error {\n __proto__ = Error;\n\n constructor(\n public code: SDKErrorCode,\n public rawMessage: string,\n ) {\n super(`Magic SDK Error: [${code}] ${rawMessage}`);\n Object.setPrototypeOf(this, MagicSDKError.prototype);\n }\n}\n\n/**\n * This error type communicates exceptions that occur during execution in the\n * Magic `<iframe>` context.\n */\nexport class MagicRPCError extends Error {\n __proto__ = Error;\n\n public code: RPCErrorCode | number;\n public rawMessage: string;\n public data: any;\n\n constructor(sourceError?: JsonRpcError | null) {\n super();\n\n const codeNormalized = Number(sourceError?.code);\n this.rawMessage = sourceError?.message || 'Internal error';\n this.code = isJsonRpcErrorCode(codeNormalized) ? codeNormalized : RPCErrorCode.InternalError;\n this.message = `Magic RPC Error: [${this.code}] ${this.rawMessage}`;\n this.data = sourceError?.data || undefined;\n\n Object.setPrototypeOf(this, MagicRPCError.prototype);\n }\n}\n\n/**\n * In contrast to `SDKError` objects, this \"warning\" type communicates important\n * context that does not rise to the level of an exception. These should be\n * logged rather than thrown.\n */\nexport class MagicSDKWarning {\n public message: string;\n\n constructor(\n public code: SDKWarningCode,\n public rawMessage: string,\n ) {\n this.message = `Magic SDK Warning: [${code}] ${rawMessage}`;\n }\n\n /**\n * Logs this warning to the console.\n */\n public log() {\n console.warn(this.message);\n }\n}\n\n/**\n * This error type is reserved for communicating errors that arise during\n * execution of Magic SDK Extension methods. Compare this to the `SDKError`\n * type, specifically in context of Extensions.\n */\nexport class MagicExtensionError<TData = any> extends Error {\n __proto__ = Error;\n\n constructor(\n ext: BaseExtension<string>,\n public code: string | number,\n public rawMessage: string,\n public data: TData,\n ) {\n super(`Magic Extension Error (${ext.name}): [${code}] ${rawMessage}`);\n Object.setPrototypeOf(this, MagicExtensionError.prototype);\n }\n}\n\n/**\n * In contrast to `MagicExtensionError` objects, this \"warning\" type\n * communicates important context that does not rise to the level of an\n * exception. These should be logged rather than thrown.\n */\nexport class MagicExtensionWarning {\n public message: string;\n\n constructor(\n ext: BaseExtension<string>,\n public code: string | number,\n public rawMessage: string,\n ) {\n this.message = `Magic Extension Warning (${ext.name}): [${code}] ${rawMessage}`;\n }\n\n /**\n * Logs this warning to the console.\n */\n public log() {\n console.warn(this.message);\n }\n}\n\n// --- SDK error factories\n\nexport function createMissingApiKeyError() {\n return new MagicSDKError(\n SDKErrorCode.MissingApiKey,\n 'Please provide an API key that you acquired from the Magic developer dashboard.',\n );\n}\n\nexport function createModalNotReadyError() {\n return new MagicSDKError(SDKErrorCode.ModalNotReady, 'Modal is not ready');\n}\n\nexport function createMalformedResponseError() {\n return new MagicSDKError(SDKErrorCode.MalformedResponse, 'Response from the Magic iframe is malformed.');\n}\n\nexport function createExtensionNotInitializedError(member: string) {\n return new MagicSDKError(\n SDKErrorCode.ExtensionNotInitialized,\n `Extensions must be initialized with a Magic SDK instance before \\`Extension.${member}\\` can be accessed. Do not invoke \\`Extension.${member}\\` inside an extension constructor.`,\n );\n}\n\nexport function createIncompatibleExtensionsError(extensions: BaseExtension<string>[]) {\n let msg = `Some extensions are incompatible with \\`${SDKEnvironment.sdkName}@${SDKEnvironment.version}\\`:`;\n\n extensions\n .filter(ext => typeof ext.compat !== 'undefined' && ext.compat !== null)\n .forEach(ext => {\n const compat = ext.compat![SDKEnvironment.sdkName];\n\n /* istanbul ignore else */\n if (typeof compat === 'string') {\n msg += `\\n - Extension \\`${ext.name}\\` supports version(s) \\`${compat}\\``;\n } else if (!compat) {\n msg += `\\n - Extension \\`${ext.name}\\` does not support ${SDKEnvironment.platform} environments.`;\n }\n\n // Else case is irrelevant here\n // (we filter out extensions with missing `compat` field)\n });\n\n return new MagicSDKError(SDKErrorCode.IncompatibleExtensions, msg);\n}\n\nexport function createInvalidArgumentError(options: {\n procedure: string;\n argument: number;\n expected: string;\n received: string;\n}) {\n /**\n * Parses the argument index (given by `argument`) to attach the correct ordinal suffix.\n * (i.e.: 1st, 2nd, 3rd, 4th, etc.)\n */\n const ordinalSuffix = (i: number) => {\n const iAdjusted = i + 1; // Argument is zero-indexed.\n const j = iAdjusted % 10;\n const k = iAdjusted % 100;\n if (j === 1 && k !== 11) return `${iAdjusted}st`;\n if (j === 2 && k !== 12) return `${iAdjusted}nd`;\n if (j === 3 && k !== 13) return `${iAdjusted}rd`;\n return `${iAdjusted}th`;\n };\n\n return new MagicSDKError(\n SDKErrorCode.InvalidArgument,\n `Invalid ${ordinalSuffix(options.argument)} argument given to \\`${options.procedure}\\`.\\n` +\n ` Expected: \\`${options.expected}\\`\\n` +\n ` Received: \\`${options.received}\\``,\n );\n}\n\n// --- SDK warning factories\n\nexport function createDuplicateIframeWarning() {\n return new MagicSDKWarning(SDKWarningCode.DuplicateIframe, 'Duplicate iframes found.');\n}\n\nexport function createSynchronousWeb3MethodWarning() {\n return new MagicSDKWarning(\n SDKWarningCode.SyncWeb3Method,\n 'Non-async web3 methods are deprecated in web3 > 1.0 and are not supported by the Magic web3 provider. Please use an async method instead.',\n );\n}\n\nexport function createReactNativeEndpointConfigurationWarning() {\n return new MagicSDKWarning(\n SDKWarningCode.ReactNativeEndpointConfiguration,\n `CUSTOM DOMAINS ARE NOT SUPPORTED WHEN USING MAGIC SDK WITH REACT NATIVE! The \\`endpoint\\` parameter SHOULD NOT be provided. The Magic \\`<iframe>\\` is automatically wrapped by a WebView pointed at \\`${SDKEnvironment.defaultEndpoint}\\`. Changing this default behavior will lead to unexpected results and potentially security-threatening bugs.`,\n );\n}\n\nexport function createDeprecationWarning(options: {\n method: string;\n removalVersions: {\n [P in\n | 'magic-sdk'\n | '@magic-sdk/react-native'\n | '@magic-sdk/react-native-bare'\n | '@magic-sdk/react-native-expo']: string;\n };\n useInstead?: string;\n}) {\n const { method, removalVersions, useInstead } = options;\n\n const removalVersion = removalVersions[SDKEnvironment.sdkName];\n const useInsteadSuffix = useInstead ? ` Use \\`${useInstead}\\` instead.` : '';\n const message = `\\`${method}\\` will be removed from \\`${SDKEnvironment.sdkName}\\` in version \\`${removalVersion}\\`.${useInsteadSuffix}`;\n\n return new MagicSDKWarning(SDKWarningCode.DeprecationNotice, message);\n}\n","/**\n * This file contains our type guards.\n *\n * Type guards are a feature of TypeScript which narrow the type signature of\n * intersection types (types that can be one thing or another).\n *\n * @see\n * https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-guards-and-differentiating-types\n */\n\nimport { JsonRpcRequestPayload, JsonRpcResponsePayload, MagicPayloadMethod, RPCErrorCode } from '@magic-sdk/types';\n\n/**\n * Assert `value` is `undefined`.\n */\nfunction isUndefined(value: any): value is undefined {\n return typeof value === 'undefined';\n}\n\n/**\n * Assert `value` is `null`.\n */\nfunction isNull(value: any): value is null {\n return value === null;\n}\n\n/**\n * Assert `value` is `null` or `undefined`.\n */\nfunction isNil(value: any): value is null | undefined {\n return isNull(value) || isUndefined(value);\n}\n\n/**\n * Assert `value` is a `JsonRpcRequestPayload` object.\n */\nexport function isJsonRpcRequestPayload(value?: JsonRpcRequestPayload): value is JsonRpcRequestPayload {\n if (isNil(value)) return false;\n return (\n !isUndefined(value.jsonrpc) && !isUndefined(value.id) && !isUndefined(value.method) && !isUndefined(value.params)\n );\n}\n\n/**\n * Assert `value` is a `JsonRpcResponsePayload` object.\n */\nexport function isJsonRpcResponsePayload(value: any): value is JsonRpcResponsePayload {\n if (isNil(value)) return false;\n return (\n !isUndefined(value.jsonrpc) && !isUndefined(value.id) && (!isUndefined(value.result) || !isUndefined(value.error))\n );\n}\n\n/**\n * Assert `value` is a Magic SDK payload method identifier.\n */\nexport function isMagicPayloadMethod(value?: any): value is MagicPayloadMethod {\n if (isNil(value)) return false;\n return typeof value === 'string' && Object.values(MagicPayloadMethod).includes(value as any);\n}\n\n/**\n * Assert `value` is an expected JSON RPC error code.\n */\nexport function isJsonRpcErrorCode(value?: any): value is RPCErrorCode {\n if (isNil(value)) return false;\n return typeof value === 'number' && Object.values(RPCErrorCode).includes(value);\n}\n\n/**\n * Assert `value` is an empty, plain object.\n */\nexport function isEmpty(value?: any): value is {} {\n if (!value) return true;\n\n for (const key in value) {\n /* istanbul ignore else */\n if (Object.hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n\n return true;\n}\n","import type localForage from 'localforage';\nimport type { ViewController } from './view-controller';\nimport type { SDKBase } from './sdk';\nimport type { WithExtensions } from '../modules/base-extension';\n\ntype ConstructorOf<C> = { new (...args: any[]): C };\n\n/**\n * A structure containing details about the current environment.\n * This is guaranteed to be populated before the SDK is instantiated.\n */\nexport interface SDKEnvironment {\n sdkName: 'magic-sdk' | '@magic-sdk/react-native' | '@magic-sdk/react-native-bare' | '@magic-sdk/react-native-expo';\n version: string;\n platform: 'web' | 'react-native';\n defaultEndpoint: string;\n ViewController: ConstructorOf<ViewController>;\n configureStorage: () => Promise<typeof localForage>;\n bundleId?: string | null;\n}\n\nexport const SDKEnvironment: SDKEnvironment = {} as any;\n\nexport function createSDK<SDK extends SDKBase>(\n SDKBaseCtor: ConstructorOf<SDK>,\n environment: SDKEnvironment,\n): WithExtensions<SDK> {\n Object.assign(SDKEnvironment, environment);\n return SDKBaseCtor as any;\n}\n\nexport const sdkNameToEnvName = {\n 'magic-sdk': 'magic-sdk' as const,\n '@magic-sdk/react-native': 'magic-sdk-rn' as const,\n '@magic-sdk/react-native-bare': 'magic-sdk-rn-bare' as const,\n '@magic-sdk/react-native-expo': 'magic-sdk-rn-expo' as const,\n};\n","import {\n MagicPayloadMethod,\n LoginWithMagicLinkConfiguration,\n LoginWithSmsConfiguration,\n LoginWithEmailOTPConfiguration,\n LoginWithEmailOTPEventHandlers,\n LoginWithMagicLinkEventHandlers,\n UpdateEmailConfiguration,\n DeviceVerificationEventEmit,\n LoginWithEmailOTPEventEmit,\n UpdateEmailEventHandlers,\n UpdateEmailEventEmit,\n RecencyCheckEventEmit,\n LoginWithSmsOTPEventEmit,\n LoginWithSmsOTPEventHandlers,\n LoginWithCredentialConfiguration,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { createJsonRpcRequestPayload } from '../core/json-rpc';\nimport { SDKEnvironment } from '../core/sdk-environment';\nimport { isMajorVersionAtLeast } from '../util/version-check';\nimport { createDeprecationWarning } from '../core/sdk-exceptions';\n\nexport const ProductConsolidationMethodRemovalVersions = {\n 'magic-sdk': 'v18.0.0',\n '@magic-sdk/react-native': 'v14.0.0',\n '@magic-sdk/react-native-bare': 'v19.0.0',\n '@magic-sdk/react-native-expo': 'v19.0.0',\n};\n\nexport class AuthModule extends BaseModule {\n /**\n * Initiate the \"magic link\" login flow for a user. If the flow is successful,\n * this method will return a Decentralized ID token (with a default lifespan\n * of 15 minutes).\n */\n public loginWithMagicLink(configuration: LoginWithMagicLinkConfiguration) {\n const isRNMobilePackage =\n SDKEnvironment.sdkName === '@magic-sdk/react-native' ||\n SDKEnvironment.sdkName === '@magic-sdk/react-native-bare' ||\n SDKEnvironment.sdkName === '@magic-sdk/react-native-expo';\n\n // RN SDK major version is greater than or equal to v19\n if (isRNMobilePackage && isMajorVersionAtLeast(SDKEnvironment.version, 19)) {\n throw new Error(\n 'loginWithMagicLink() is deprecated for this package, please utilize a passcode method like loginWithSMS or loginWithEmailOTP instead.',\n );\n } else if (isRNMobilePackage) {\n // RN SDK major version is less than v19\n createDeprecationWarning({\n method: 'auth.loginWithMagicLink()',\n removalVersions: ProductConsolidationMethodRemovalVersions,\n useInstead: 'auth.loginWithEmailOTP()',\n }).log();\n }\n\n const { email, showUI = true, redirectURI, overrides, lifespan } = configuration;\n\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LoginWithMagicLinkTestMode : MagicPayloadMethod.LoginWithMagicLink,\n [{ email, showUI, redirectURI, overrides, lifespan }],\n );\n return this.request<string | null, LoginWithMagicLinkEventHandlers>(requestPayload);\n }\n\n /**\n * Initiate an SMS login flow for a user. If successful,\n * this method will return a Decenteralized ID token (with a default lifespan\n * of 15 minutes)\n */\n public loginWithSMS(configuration: LoginWithSmsConfiguration) {\n const { phoneNumber, showUI = true, lifespan } = configuration;\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LoginWithSmsTestMode : MagicPayloadMethod.LoginWithSms,\n [{ phoneNumber, showUI, lifespan }],\n );\n\n const handle = this.request<string | null, LoginWithSmsOTPEventHandlers>(requestPayload);\n\n if (!showUI && handle) {\n handle.on(LoginWithSmsOTPEventEmit.VerifySmsOtp, (otp: string) => {\n this.createIntermediaryEvent(LoginWithSmsOTPEventEmit.VerifySmsOtp, requestPayload.id as string)(otp);\n });\n\n handle.on(LoginWithSmsOTPEventEmit.Cancel, () => {\n this.createIntermediaryEvent(LoginWithSmsOTPEventEmit.Cancel, requestPayload.id as string)();\n });\n }\n\n return handle;\n }\n\n /**\n * Initiate an Email with OTP login flow for a user. If successful,\n * this method will return a Decenteralized ID token (with a default lifespan\n * of 15 minutes)\n */\n public loginWithEmailOTP(configuration: LoginWithEmailOTPConfiguration) {\n const { email, showUI, deviceCheckUI, overrides, lifespan } = configuration;\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LoginWithEmailOTPTestMode : MagicPayloadMethod.LoginWithEmailOTP,\n [{ email, showUI, deviceCheckUI, overrides, lifespan }],\n );\n const handle = this.request<string | null, LoginWithEmailOTPEventHandlers>(requestPayload);\n if (!deviceCheckUI && handle) {\n handle.on(DeviceVerificationEventEmit.Retry, () => {\n this.createIntermediaryEvent(DeviceVerificationEventEmit.Retry, requestPayload.id as any)();\n });\n }\n if (!showUI && handle) {\n handle.on(LoginWithEmailOTPEventEmit.VerifyEmailOtp, (otp: string) => {\n this.createIntermediaryEvent(LoginWithEmailOTPEventEmit.VerifyEmailOtp, requestPayload.id as any)(otp);\n });\n handle.on(LoginWithEmailOTPEventEmit.VerifyMFACode, (mfa: string) => {\n this.createIntermediaryEvent(LoginWithEmailOTPEventEmit.VerifyMFACode, requestPayload.id as string)(mfa);\n });\n handle.on(LoginWithEmailOTPEventEmit.LostDevice, () => {\n this.createIntermediaryEvent(LoginWithEmailOTPEventEmit.LostDevice, requestPayload.id as string)();\n });\n handle.on(LoginWithEmailOTPEventEmit.VerifyRecoveryCode, (recoveryCode: string) => {\n this.createIntermediaryEvent(\n LoginWithEmailOTPEventEmit.VerifyRecoveryCode,\n requestPayload.id as string,\n )(recoveryCode);\n });\n handle.on(LoginWithEmailOTPEventEmit.Cancel, () => {\n this.createIntermediaryEvent(LoginWithEmailOTPEventEmit.Cancel, requestPayload.id as any)();\n });\n }\n\n return handle;\n }\n\n /**\n * Log a user in with a special one-time-use credential token. This is\n * currently used during magic link flows with a configured redirect to\n * hydrate the user session at the end of the flow. If the flow is successful,\n * this method will return a Decentralized ID token (with a default lifespan\n * of 15 minutes).\n *\n * If no argument is provided, a credential is automatically parsed from\n * `window.location.search`.\n */\n public loginWithCredential(configuration?: LoginWithCredentialConfiguration) {\n const { credentialOrQueryString, lifespan } = configuration || {};\n let credentialResolved = credentialOrQueryString ?? '';\n\n if (!credentialOrQueryString && SDKEnvironment.platform === 'web') {\n credentialResolved = window.location.search;\n\n // Remove the query from the redirect callback as a precaution.\n const urlWithoutQuery = window.location.origin + window.location.pathname;\n window.history.replaceState(null, '', urlWithoutQuery);\n }\n\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LoginWithCredentialTestMode : MagicPayloadMethod.LoginWithCredential,\n [credentialResolved, lifespan],\n );\n\n return this.request<string | null>(requestPayload);\n }\n\n // Custom Auth\n public setAuthorizationToken(jwt: string) {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.SetAuthorizationToken, [{ jwt }]);\n return this.request<boolean>(requestPayload);\n }\n\n public updateEmailWithUI(configuration: UpdateEmailConfiguration) {\n const { email, showUI = true } = configuration;\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.UpdateEmailTestMode : MagicPayloadMethod.UpdateEmail,\n [{ email, showUI }],\n );\n\n const handle = this.request<string | null, UpdateEmailEventHandlers>(requestPayload);\n\n if (!showUI) {\n handle.on(RecencyCheckEventEmit.Retry, () => {\n this.createIntermediaryEvent(RecencyCheckEventEmit.Retry, requestPayload.id as any)();\n });\n handle.on(RecencyCheckEventEmit.Cancel, () => {\n this.createIntermediaryEvent(RecencyCheckEventEmit.Cancel, requestPayload.id as any)();\n });\n handle.on(RecencyCheckEventEmit.VerifyEmailOtp, (otp: string) => {\n this.createIntermediaryEvent(RecencyCheckEventEmit.VerifyEmailOtp, requestPayload.id as string)(otp);\n });\n handle.on(RecencyCheckEventEmit.VerifyMFACode, (mfa: string) => {\n this.createIntermediaryEvent(RecencyCheckEventEmit.VerifyMFACode, requestPayload.id as string)(mfa);\n });\n handle.on(UpdateEmailEventEmit.RetryWithNewEmail, (newEmail?) => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.RetryWithNewEmail, requestPayload.id as any)(newEmail);\n });\n handle.on(UpdateEmailEventEmit.Cancel, () => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.Cancel, requestPayload.id as any)();\n });\n handle.on(UpdateEmailEventEmit.VerifyEmailOtp, (otp: string) => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.VerifyEmailOtp, requestPayload.id as any)(otp);\n });\n }\n return handle;\n }\n}\n","import {\n JsonRpcRequestPayload,\n MagicOutgoingWindowMessage,\n MagicIncomingWindowMessage,\n MagicPayloadMethod,\n IntermediaryEvents,\n routeToMagicMethods,\n} from '@magic-sdk/types';\nimport { createMalformedResponseError, MagicRPCError } from '../core/sdk-exceptions';\nimport type { SDKBase } from '../core/sdk';\nimport { createJsonRpcRequestPayload, standardizeJsonRpcRequestPayload } from '../core/json-rpc';\nimport { createPromiEvent } from '../util/promise-tools';\nimport type { ViewController } from '../core/view-controller';\nimport type { EventsDefinition } from '../util/events';\n\nexport class BaseModule {\n constructor(protected sdk: SDKBase) {}\n\n /**\n * The `ViewController` for the SDK instance registered to this module.\n */\n protected get overlay(): ViewController {\n return (this.sdk as any).overlay;\n }\n\n /**\n * Emits promisified requests to the Magic `<iframe>` context.\n */\n protected request<ResultType = any, Events extends EventsDefinition = void>(payload: Partial<JsonRpcRequestPayload>) {\n if (this.sdk.thirdPartyWallets.isConnected && !routeToMagicMethods.includes(payload.method as MagicPayloadMethod)) {\n const promiEvent = createPromiEvent<ResultType, Events>((resolve, reject) => {\n this.sdk.thirdPartyWallets.requestOverride(payload).then(resolve).catch(reject);\n });\n return promiEvent;\n }\n\n const responsePromise = this.overlay.post<ResultType>(\n MagicOutgoingWindowMessage.MAGIC_HANDLE_REQUEST,\n standardizeJsonRpcRequestPayload(payload),\n );\n\n // PromiEvent-ify the response.\n const promiEvent = createPromiEvent<ResultType, Events>((resolve, reject) => {\n responsePromise\n .then(res => {\n cleanupEvents();\n if (res.hasError) reject(new MagicRPCError(res.payload.error));\n else if (res.hasResult) resolve(res.payload.result as ResultType);\n else throw createMalformedResponseError();\n })\n .catch(err => {\n cleanupEvents();\n reject(err);\n });\n });\n\n // Listen for events from the `<iframe>` associated with the current payload\n // and emit those to `PromiEvent` subscribers.\n const cleanupEvents = this.overlay.on(MagicIncomingWindowMessage.MAGIC_HANDLE_EVENT, evt => {\n const { response } = evt.data;\n\n if (response.id === payload.id && response.result?.event) {\n const { event, params = [] } = response.result;\n promiEvent.emit(event, ...params);\n }\n });\n\n return promiEvent;\n }\n\n // Creates an intermediary event which takes a typed event and a payload ID\n protected createIntermediaryEvent<T = Function>(eventType: IntermediaryEvents, payloadId: string) {\n const e = (args: any) => {\n const res = createJsonRpcRequestPayload(MagicPayloadMethod.IntermediaryEvent, [{ payloadId, eventType, args }]);\n this.request(res);\n };\n return e as unknown as T;\n }\n}\n","import { JsonRpcRequestPayload, JsonRpcResponsePayload, JsonRpcError, RPCErrorCode } from '@magic-sdk/types';\nimport { isJsonRpcResponsePayload } from '../util/type-guards';\nimport { getPayloadId } from '../util/get-payload-id';\nimport { clearKeys } from '../util/web-crypto';\n\nconst payloadPreprocessedSymbol = Symbol('Payload pre-processed by Magic SDK');\n\n/**\n * To avoid \"pre-processing\" a payload more than once (and needlessly\n * incrementing our payload ID generator), we attach a symbol to detect a\n * payloads we've already visited.\n */\nfunction markPayloadAsPreprocessed<T extends Partial<JsonRpcRequestPayload>>(payload: T): T {\n Object.defineProperty(payload, payloadPreprocessedSymbol, {\n value: true,\n enumerable: false,\n });\n\n return payload;\n}\n\n/**\n * Returns `true` if the payload has been visited by our \"pre-processing,\" in\n * `standardizeJsonRpcRequestPayload(...)`.\n */\nfunction isPayloadPreprocessed<T extends Partial<JsonRpcRequestPayload>>(payload: T) {\n return !!(payload as any)[payloadPreprocessedSymbol];\n}\n\n/**\n * Returns a full `JsonRpcRequestPayload` from a potentially incomplete payload\n * object. This method mutates the given `payload` to preserve compatibility\n * with external libraries that perform their own `JsonRpcRequestPayload.id`\n * check to associate responses (such as `web3`).\n *\n * This function is no-op if the payload has already been processed before.\n */\nexport function standardizeJsonRpcRequestPayload(payload: Partial<JsonRpcRequestPayload>) {\n if (!isPayloadPreprocessed(payload)) {\n payload.jsonrpc = payload.jsonrpc ?? '2.0';\n payload.id = getPayloadId();\n payload.method = payload.method ?? 'noop';\n payload.params = payload.params ?? [];\n\n markPayloadAsPreprocessed(payload);\n }\n\n return payload as JsonRpcRequestPayload;\n}\n\n/**\n * Build a valid JSON RPC payload for emitting to the Magic SDK iframe relayer.\n */\nexport function createJsonRpcRequestPayload(method: string, params: any[] = []): JsonRpcRequestPayload {\n return markPayloadAsPreprocessed({\n params,\n method,\n jsonrpc: '2.0',\n id: getPayloadId(),\n });\n}\n\n/**\n * Formats and standardizes a JSON RPC 2.0 response from a number of potential\n * sources.\n */\nexport class JsonRpcResponse<ResultType = any> {\n private readonly _jsonrpc: string;\n private readonly _id: string | number | null;\n private _result?: ResultType | null;\n private _error?: JsonRpcError | null;\n\n constructor(responsePayload: JsonRpcResponsePayload);\n constructor(response: JsonRpcResponse<ResultType>);\n constructor(requestPayload: JsonRpcRequestPayload);\n constructor(responseOrPayload: JsonRpcResponsePayload | JsonRpcResponse<ResultType> | JsonRpcRequestPayload) {\n if (responseOrPayload instanceof JsonRpcResponse) {\n this._jsonrpc = responseOrPayload.payload.jsonrpc;\n this._id = responseOrPayload.payload.id;\n this._result = responseOrPayload.payload.result;\n this._error = responseOrPayload.payload.error;\n } else if (isJsonRpcResponsePayload(responseOrPayload)) {\n this._jsonrpc = responseOrPayload.jsonrpc;\n this._id = responseOrPayload.id;\n this._result = responseOrPayload.result;\n this._error = responseOrPayload.error;\n } else {\n this._jsonrpc = responseOrPayload.jsonrpc;\n this._id = responseOrPayload.id;\n this._result = undefined;\n this._error = undefined;\n }\n }\n\n public applyError(error?: JsonRpcError | null) {\n this._error = error;\n return this;\n }\n\n public applyResult(result?: ResultType | null) {\n this._result = result;\n return this;\n }\n\n public get hasError() {\n // Handle DPOP error and rotate new keys\n if (this._error?.code === RPCErrorCode.DpopInvalidated) {\n clearKeys();\n }\n return typeof this._error !== 'undefined' && this._error !== null;\n }\n\n public get hasResult() {\n return typeof this._result !== 'undefined';\n }\n\n public get payload(): JsonRpcResponsePayload {\n return {\n jsonrpc: this._jsonrpc,\n id: this._id,\n result: this._result,\n error: this._error,\n };\n }\n}\n","function* createIntGenerator(): Generator<number, number, void> {\n let index = 0;\n\n while (true) {\n /* istanbul ignore next */\n if (index < Number.MAX_SAFE_INTEGER) yield ++index;\n else index = 0;\n }\n}\n\nconst intGenerator = createIntGenerator();\n\n/**\n * Get an integer ID for attaching to a JSON RPC request payload.\n */\nexport function getPayloadId(): number {\n return intGenerator.next().value;\n}\n","import { SDKEnvironment } from '../core/sdk-environment';\n\n/* global LocalForage LocalForageDbMethods */\nlet lf: LocalForage;\n\n/**\n * Proxies `localforage` methods with strong-typing.\n */\nfunction proxyLocalForageMethod<TMethod extends keyof LocalForageDbMethods>(method: TMethod): LocalForage[TMethod] {\n return async (...args: any[]) => {\n /* istanbul ignore else */\n if (!lf) lf = await SDKEnvironment.configureStorage();\n await lf.ready();\n return (lf[method] as any)(...args);\n };\n}\n\nexport const getItem = proxyLocalForageMethod('getItem');\nexport const setItem = proxyLocalForageMethod('setItem');\nexport const removeItem = proxyLocalForageMethod('removeItem');\nexport const clear = proxyLocalForageMethod('clear');\nexport const length = proxyLocalForageMethod('length');\nexport const key = proxyLocalForageMethod('key');\nexport const keys = proxyLocalForageMethod('keys');\nexport const iterate = proxyLocalForageMethod('iterate');\n","export function uuid() {\n const u = window.crypto.getRandomValues(new Uint8Array(16));\n\n // set the version bit to v4\n u[6] = (u[6] & 0x0f) | 0x40;\n\n // set the variant bit to \"don't care\" (yes, the RFC\n // calls it that)\n u[8] = (u[8] & 0xbf) | 0x80;\n\n // hex encode them and add the dashes\n let uid = '';\n uid += u[0].toString(16);\n uid += u[1].toString(16);\n uid += u[2].toString(16);\n uid += u[3].toString(16);\n uid += '-';\n\n uid += u[4].toString(16);\n uid += u[5].toString(16);\n uid += '-';\n\n uid += u[6].toString(16);\n uid += u[7].toString(16);\n uid += '-';\n\n uid += u[8].toString(16);\n uid += u[9].toString(16);\n uid += '-';\n\n uid += u[10].toString(16);\n uid += u[11].toString(16);\n uid += u[12].toString(16);\n uid += u[13].toString(16);\n uid += u[14].toString(16);\n uid += u[15].toString(16);\n\n return uid;\n}\n","import { setItem, getItem, removeItem } from './storage';\nimport { uuid } from './uuid';\n\nexport const STORE_KEY_PRIVATE_KEY = 'STORE_KEY_PRIVATE_KEY';\nexport const STORE_KEY_PUBLIC_JWK = 'STORE_KEY_PUBLIC_JWK';\nconst ALGO_NAME = 'ECDSA';\nconst ALGO_CURVE = 'P-256';\n\nconst EC_GEN_PARAMS: EcKeyGenParams = {\n name: ALGO_NAME,\n namedCurve: ALGO_CURVE,\n};\n\nexport function isWebCryptoSupported() {\n const hasCrypto = typeof window !== 'undefined' && !!(window.crypto as any);\n const hasSubtleCrypto = hasCrypto && !!(window.crypto.subtle as any);\n\n return hasCrypto && hasSubtleCrypto;\n}\n\nexport function clearKeys() {\n removeItem(STORE_KEY_PUBLIC_JWK);\n removeItem(STORE_KEY_PRIVATE_KEY);\n}\n\nexport async function createJwt() {\n // will return undefined is webcrypto is not supported\n const publicJwk = await getPublicKey();\n\n if (!publicJwk) {\n console.info('unable to create public key or webcrypto is unsupported');\n return undefined;\n }\n\n const { subtle } = window.crypto;\n const privateJwk = await getItem<CryptoKey>(STORE_KEY_PRIVATE_KEY);\n\n if (!privateJwk || !subtle) {\n console.info('unable to find private key or webcrypto unsupported');\n return undefined;\n }\n\n const claims = {\n iat: Math.floor(new Date().getTime() / 1000),\n jti: uuid(),\n };\n\n const headers = {\n typ: 'dpop+jwt',\n alg: 'ES256',\n jwk: publicJwk,\n };\n\n const jws = {\n protected: strToUrlBase64(JSON.stringify(headers)),\n claims: strToUrlBase64(JSON.stringify(claims)),\n };\n\n const data = strToUint8(`${jws.protected}.${jws.claims}`);\n const sigType = { name: ALGO_NAME, hash: { name: 'SHA-256' } };\n\n const sig = uint8ToUrlBase64(new Uint8Array(await subtle.sign(sigType, privateJwk, data)));\n return `${jws.protected}.${jws.claims}.${sig}`;\n}\n\nasync function getPublicKey() {\n if (!isWebCryptoSupported()) {\n console.info('webcrypto is not supported');\n return undefined;\n }\n\n if (!(await getItem(STORE_KEY_PUBLIC_JWK))) {\n await generateWCKP();\n }\n\n return getItem(STORE_KEY_PUBLIC_JWK) as JsonWebKey;\n}\n\nasync function generateWCKP() {\n // to avoid a nasty babel bug we have to hoist this above the await ourselves\n // https://github.com/rpetrich/babel-plugin-transform-async-to-promises/issues/20\n const { subtle } = window.crypto;\n const kp = await subtle.generateKey(\n EC_GEN_PARAMS,\n false, // need to export the public key, while keep private key non-extractable\n ['sign'],\n );\n\n const jwkPublicKey = await subtle.exportKey('jwk', kp.publicKey!);\n\n // persist keys\n await setItem(STORE_KEY_PRIVATE_KEY, kp.privateKey!);\n // persist the jwk public key since it needs to be exported anyways\n await setItem(STORE_KEY_PUBLIC_JWK, jwkPublicKey);\n}\n\nfunction strToUrlBase64(str: string) {\n return binToUrlBase64(utf8ToBinaryString(str));\n}\n\nfunction strToUint8(str: string) {\n return new TextEncoder().encode(str);\n}\n\nfunction binToUrlBase64(bin: string) {\n return btoa(bin).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+/g, '');\n}\n\nfunction utf8ToBinaryString(str: string) {\n const escstr = encodeURIComponent(str);\n // replaces any uri escape sequence, such as %0A,\n // with binary escape, such as 0x0A\n return escstr.replace(/%([0-9A-F]{2})/g, (_, p1) => String.fromCharCode(parseInt(p1, 16)));\n}\n\nfunction uint8ToUrlBase64(uint8: Uint8Array) {\n let bin = '';\n uint8.forEach(code => {\n bin += String.fromCharCode(code);\n });\n return binToUrlBase64(bin);\n}\n","import { UserEventsEmit, UserEventsOnReceived } from '@magic-sdk/types';\nimport { TypedEmitter, EventsDefinition, createTypedEmitter } from './events';\n\n/**\n * Extends `Promise` with a polymorphic `this` type to accommodate arbitrary\n * `Promise` API extensions.\n */\ninterface ExtendedPromise<T> extends Promise<T> {\n then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null,\n ): ExtendedPromise<TResult1 | TResult2> & this;\n\n catch<TResult = never>(\n onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null,\n ): ExtendedPromise<T | TResult> & this;\n\n finally(onfinally?: (() => void) | undefined | null): ExtendedPromise<T> & this;\n}\n\n/**\n * A `Promise` and `EventEmitter` all in one!\n */\nexport type PromiEvent<TResult, TEvents extends EventsDefinition = void> = ExtendedPromise<TResult> &\n TypedEmitter<TEvents extends void ? DefaultEvents<TResult> : TEvents & DefaultEvents<TResult>>;\n\n/**\n * Default events attached to every `PromiEvent`.\n */\ntype DefaultEvents<TResult> = {\n done: (result: TResult) => void;\n error: (reason: any) => void;\n settled: () => void;\n [UserEventsEmit.ClosedByUser]: () => void;\n};\n\n/**\n * A `Promise` executor with can be optionally asynchronous.\n */\ntype AsyncPromiseExecutor<TResult> = (\n resolve: (value: TResult | PromiseLike<TResult>) => void,\n reject: (reason?: any) => void,\n) => void | Promise<void>;\n\nconst promiEventBrand = Symbol('isPromiEvent');\n\n/**\n * Returns `true` if the given `value` is a `PromiEvent`.\n */\nexport function isPromiEvent(value: any): value is PromiEvent<any> {\n return !!value[promiEventBrand];\n}\n\n/**\n * Create a native JavaScript `Promise` overloaded with strongly-typed methods\n * from `EventEmitter`.\n */\nexport function createPromiEvent<TResult, TEvents extends EventsDefinition = void>(\n executor: AsyncPromiseExecutor<TResult>,\n): PromiEvent<TResult, TEvents extends void ? DefaultEvents<TResult> : TEvents & DefaultEvents<TResult>> {\n const promise = createPromise(executor);\n const { createBoundEmitterMethod, createChainingEmitterMethod } = createTypedEmitter<\n TEvents & DefaultEvents<TResult>\n >();\n\n // We save the original `Promise` methods to the following symbols so we can\n // access them internally.\n const thenSymbol = Symbol('Promise.then');\n const catchSymbol = Symbol('Promise.catch');\n const finallySymbol = Symbol('Promise.finally');\n\n /**\n * Ensures the next object in the `PromiEvent` chain is overloaded with\n * `EventEmitter` methods.\n */\n const createChainingPromiseMethod =\n (method: typeof thenSymbol | typeof catchSymbol | typeof finallySymbol, source: Promise<any>) =>\n (...args: any[]) => {\n const nextPromise = (source as any)[method].apply(source, args);\n return promiEvent(nextPromise);\n };\n\n /**\n * Builds a `PromiEvent` by assigning `EventEmitter` methods to a native\n * `Promise` object.\n */\n const promiEvent = (source: any) => {\n return Object.assign(source, {\n [promiEventBrand]: true,\n\n [thenSymbol]: source[thenSymbol] || source.then,\n [catchSymbol]: source[catchSymbol] || source.catch,\n [finallySymbol]: source[finallySymbol] || source.finally,\n\n then: createChainingPromiseMethod(thenSymbol, source),\n catch: createChainingPromiseMethod(catchSymbol, source),\n finally: createChainingPromiseMethod(finallySymbol, source),\n\n on: createChainingEmitterMethod('on', source),\n once: createChainingEmitterMethod('once', source),\n addListener: createChainingEmitterMethod('addListener', source),\n\n off: createChainingEmitterMethod('off', source),\n removeListener: createChainingEmitterMethod('removeListener', source),\n removeAllListeners: createChainingEmitterMethod('removeAllListeners', source),\n\n emit: createBoundEmitterMethod('emit'),\n eventNames: createBoundEmitterMethod('eventNames'),\n listeners: createBoundEmitterMethod('listeners'),\n listenerCount: createBoundEmitterMethod('listenerCount'),\n });\n };\n\n const result = promiEvent(\n promise.then(\n (resolved) => {\n // Emit default completion events and resolve result.\n result.emit('done', resolved);\n result.emit('settled');\n return resolved;\n },\n\n (err) => {\n // Emit default error events and re-throw.\n result.emit('error', err);\n result.emit('settled');\n throw err;\n },\n ),\n );\n\n result.on(UserEventsOnReceived.ClosedByUser, () => {\n result.emit(UserEventsEmit.ClosedByUser);\n });\n return result;\n}\n\n/**\n * Creates a `Promise` with an **async executor** that automatically catches\n * errors occurring within the executor. Nesting promises in this way is usually\n * deemed an _anti-pattern_, but it's useful and clean when promisifying the\n * event-based code that's inherent to JSON RPC.\n *\n * So, here we solve the issue of nested promises by ensuring that no errors\n * mistakenly go unhandled!\n */\nexport function createPromise<TResult>(executor: AsyncPromiseExecutor<TResult>) {\n return new Promise<TResult>((resolve, reject) => {\n const result = executor(resolve, reject);\n Promise.resolve(result).catch(reject);\n });\n}\n","import EventEmitter from 'eventemitter3';\n\nexport type EventsDefinition = { [K in string | symbol]: (...args: any[]) => void } | void;\n\n/**\n * An extension of `EventEmitter` (provided by `eventemitter3`) with an adjusted\n * type interface that supports the unique structure of Magic SDK modules.\n */\nexport class TypedEmitter<Events extends EventsDefinition = void> extends EventEmitter<\n Events extends void ? string | symbol : Events\n> {}\n\ntype ChainingMethods = 'on' | 'once' | 'addListener' | 'off' | 'removeListener' | 'removeAllListeners';\ntype NonChainingMethods = 'emit' | 'eventNames' | 'listeners' | 'listenerCount';\n\ntype ReplaceReturnType<T extends (...a: any) => any, TNewReturn> = (...a: Parameters<T>) => TNewReturn;\n\n/**\n * Creates a `TypedEmitter` instance and returns helper functions for easily\n * mixing `TypedEmitter` methods into other objects.\n */\nexport function createTypedEmitter<Events extends EventsDefinition = void>() {\n const emitter = new TypedEmitter<Events>();\n\n const createChainingEmitterMethod = <T1 extends ChainingMethods, T2>(\n method: T1,\n source: T2,\n ): ReplaceReturnType<TypedEmitter[T1], T2> => {\n return (...args: any[]) => {\n (emitter as any)[method].apply(emitter, args);\n return source;\n };\n };\n\n const createBoundEmitterMethod = <T extends NonChainingMethods>(method: T): TypedEmitter[T] => {\n return (...args: any[]) => {\n return (emitter as any)[method].apply(emitter, args);\n };\n };\n\n return {\n emitter,\n createChainingEmitterMethod,\n createBoundEmitterMethod,\n };\n}\n","export function isMajorVersionAtLeast(version: string, majorVersion: number): boolean {\n // Split the version string into major, minor, and patch versions\n const [major] = version.split('.').map(Number);\n\n // Check if the major version is at least the required major version\n return major >= majorVersion;\n}\n","import {\n GetIdTokenConfiguration,\n MagicPayloadMethod,\n MagicUserMetadata,\n GenerateIdTokenConfiguration,\n UserInfo,\n RequestUserInfoScope,\n RecoverAccountConfiguration,\n ShowSettingsConfiguration,\n EnableMFAConfiguration,\n EnableMFAEventEmit,\n EnableMFAEventHandlers,\n DisableMFAConfiguration,\n DisableMFAEventHandlers,\n DisableMFAEventEmit,\n RecencyCheckEventEmit,\n RecoveryFactorEventHandlers,\n RecoveryFactorEventEmit,\n RecoverAccountEventHandlers,\n RecoverAccountEventEmit,\n UpdateEmailEventHandlers,\n UpdateEmailEventEmit,\n} from '@magic-sdk/types';\nimport { getItem, setItem, removeItem } from '../util/storage';\nimport { BaseModule } from './base-module';\nimport { createJsonRpcRequestPayload } from '../core/json-rpc';\nimport { clearDeviceShares } from '../util/device-share-web-crypto';\nimport { createPromiEvent } from '../util';\n\ntype UserLoggedOutCallback = (loggedOut: boolean) => void;\n\nexport class UserModule extends BaseModule {\n public getIdToken(configuration?: GetIdTokenConfiguration) {\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.GetIdTokenTestMode : MagicPayloadMethod.GetIdToken,\n [configuration],\n );\n return this.request<string>(requestPayload);\n }\n\n public generateIdToken(configuration?: GenerateIdTokenConfiguration) {\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.GenerateIdTokenTestMode : MagicPayloadMethod.GenerateIdToken,\n [configuration],\n );\n return this.request<string>(requestPayload);\n }\n\n public getInfo() {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.GetInfo, []);\n return this.request<MagicUserMetadata>(requestPayload);\n }\n\n public isLoggedIn() {\n return createPromiEvent<boolean, any>(async (resolve, reject) => {\n try {\n let cachedIsLoggedIn = false;\n if (this.sdk.useStorageCache) {\n cachedIsLoggedIn = (await getItem(this.localForageIsLoggedInKey)) === 'true';\n\n // if isLoggedIn is true on storage, optimistically resolve with true\n // if it is false, we use `usr.isLoggedIn` as the source of truth.\n if (cachedIsLoggedIn) {\n resolve(true);\n }\n }\n\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.IsLoggedInTestMode : MagicPayloadMethod.IsLoggedIn,\n );\n const isLoggedInResponse = await this.request<boolean>(requestPayload);\n if (this.sdk.useStorageCache) {\n if (isLoggedInResponse) {\n setItem(this.localForageIsLoggedInKey, true);\n } else {\n removeItem(this.localForageIsLoggedInKey);\n }\n if (cachedIsLoggedIn && !isLoggedInResponse) {\n this.emitUserLoggedOut(true);\n }\n }\n resolve(isLoggedInResponse);\n } catch (err) {\n reject(err);\n }\n });\n }\n\n public logout() {\n removeItem(this.localForageIsLoggedInKey);\n clearDeviceShares();\n\n return createPromiEvent<boolean, any>(async (resolve, reject) => {\n try {\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LogoutTestMode : MagicPayloadMethod.Logout,\n );\n const response = await this.request<boolean>(requestPayload);\n if (this.sdk.useStorageCache) {\n this.emitUserLoggedOut(response);\n }\n resolve(response);\n } catch (err) {\n reject(err);\n }\n });\n }\n\n /* Request email address from logged in user */\n public requestInfoWithUI(scope?: RequestUserInfoScope) {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.RequestUserInfoWithUI, scope ? [scope] : []);\n return this.request<UserInfo>(requestPayload);\n }\n\n public showSettings(configuration?: ShowSettingsConfiguration) {\n const { showUI = true } = configuration || {};\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.UserSettingsTestMode : MagicPayloadMethod.UserSettings,\n [configuration],\n );\n const handle = this.request<string | null, RecoveryFactorEventHandlers>(requestPayload);\n if (!showUI && handle) {\n handle.on(RecoveryFactorEventEmit.SendNewPhoneNumber, (phone_number: string) => {\n this.createIntermediaryEvent(\n RecoveryFactorEventEmit.SendNewPhoneNumber,\n requestPayload.id as string,\n )(phone_number);\n });\n handle.on(RecoveryFactorEventEmit.SendOtpCode, (otp: string) => {\n this.createIntermediaryEvent(RecoveryFactorEventEmit.SendOtpCode, requestPayload.id as string)(otp);\n });\n handle.on(RecoveryFactorEventEmit.StartEditPhoneNumber, () => {\n this.createIntermediaryEvent(RecoveryFactorEventEmit.StartEditPhoneNumber, requestPayload.id as string)();\n });\n handle.on(RecoveryFactorEventEmit.Cancel, () => {\n this.createIntermediaryEvent(RecoveryFactorEventEmit.Cancel, requestPayload.id as string)();\n });\n handle.on(RecencyCheckEventEmit.VerifyEmailOtp, (otp: string) => {\n this.createIntermediaryEvent(RecencyCheckEventEmit.VerifyEmailOtp, requestPayload.id as string)(otp);\n });\n }\n return handle;\n }\n\n public recoverAccount(configuration: RecoverAccountConfiguration) {\n const { email, showUI } = configuration;\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.RecoverAccountTestMode : MagicPayloadMethod.RecoverAccount,\n [{ email, showUI }],\n );\n const handle = this.request<string | boolean | null, RecoverAccountEventHandlers & UpdateEmailEventHandlers>(\n requestPayload,\n );\n\n if (!showUI && handle) {\n handle.on(RecoverAccountEventEmit.Cancel, () => {\n this.createIntermediaryEvent(RecoverAccountEventEmit.Cancel, requestPayload.id as string)();\n });\n handle.on(RecoverAccountEventEmit.ResendSms, () => {\n this.createIntermediaryEvent(RecoverAccountEventEmit.ResendSms, requestPayload.id as string)();\n });\n handle.on(RecoverAccountEventEmit.VerifyOtp, (otp: string) => {\n this.createIntermediaryEvent(RecoverAccountEventEmit.VerifyOtp, requestPayload.id as string)(otp);\n });\n handle.on(RecoverAccountEventEmit.UpdateEmail, (newEmail: string) => {\n this.createIntermediaryEvent(RecoverAccountEventEmit.UpdateEmail, requestPayload.id as string)(newEmail);\n });\n\n handle.on(UpdateEmailEventEmit.Cancel, () => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.Cancel, requestPayload.id as string)();\n });\n handle.on(UpdateEmailEventEmit.RetryWithNewEmail, (newEmail?) => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.RetryWithNewEmail, requestPayload.id as string)(newEmail);\n });\n\n handle.on(UpdateEmailEventEmit.VerifyEmailOtp, (otp: string) => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.VerifyEmailOtp, requestPayload.id as string)(otp);\n });\n }\n\n return handle;\n }\n\n public revealPrivateKey() {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.RevealPK);\n return this.request<boolean>(requestPayload);\n }\n\n public onUserLoggedOut(callback: UserLoggedOutCallback): void {\n this.userLoggedOutCallbacks.push(callback);\n }\n\n public enableMFA(configuration: EnableMFAConfiguration) {\n const { showUI = true } = configuration;\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.EnableMFA, [{ showUI }]);\n const handle = this.request<string | boolean | null, EnableMFAEventHandlers>(requestPayload);\n\n if (!showUI && handle) {\n handle.on(EnableMFAEventEmit.VerifyMFACode, (totp: string) => {\n this.createIntermediaryEvent(EnableMFAEventEmit.VerifyMFACode, requestPayload.id as string)(totp);\n });\n\n handle.on(EnableMFAEventEmit.Cancel, () => {\n this.createIntermediaryEvent(EnableMFAEventEmit.Cancel, requestPayload.id as string)();\n });\n }\n return handle;\n }\n\n public disableMFA(configuration: DisableMFAConfiguration) {\n const { showUI = true } = configuration;\n\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.DisableMFA, [{ showUI }]);\n const handle = this.request<string | boolean | null, DisableMFAEventHandlers>(requestPayload);\n\n if (!showUI && handle) {\n handle.on(DisableMFAEventEmit.VerifyMFACode, (totp: string) => {\n this.createIntermediaryEvent(DisableMFAEventEmit.VerifyMFACode, requestPayload.id as string)(totp);\n });\n\n handle.on(DisableMFAEventEmit.LostDevice, (recoveryCode: string) => {\n this.createIntermediaryEvent(DisableMFAEventEmit.LostDevice, requestPayload.id as string)(recoveryCode);\n });\n\n handle.on(DisableMFAEventEmit.Cancel, () => {\n this.createIntermediaryEvent(DisableMFAEventEmit.Cancel, requestPayload.id as string)();\n });\n }\n return handle;\n }\n\n // Private members\n private emitUserLoggedOut(loggedOut: boolean): void {\n this.userLoggedOutCallbacks.forEach(callback => {\n callback(loggedOut);\n });\n }\n\n private localForageIsLoggedInKey = 'magic_auth_is_logged_in';\n private userLoggedOutCallbacks: UserLoggedOutCallback[] = [];\n}\n","import { getItem, iterate, removeItem, setItem } from './storage';\nimport { isWebCryptoSupported } from './web-crypto';\n\nexport const DEVICE_SHARE_KEY = 'ds';\nexport const ENCRYPTION_KEY_KEY = 'ek';\nexport const INITIALIZATION_VECTOR_KEY = 'iv';\n\nconst ALGO_NAME = 'AES-GCM'; // for encryption\nconst ALGO_LENGTH = 256;\n\nexport async function clearDeviceShares() {\n const keysToRemove: string[] = [];\n await iterate((value, key, iterationNumber) => {\n if (key.startsWith(`${DEVICE_SHARE_KEY}_`)) {\n keysToRemove.push(key);\n }\n });\n for (const key of keysToRemove) {\n await removeItem(key);\n }\n}\n\nfunction arrayBufferToBase64(buffer: ArrayBuffer) {\n let binary = '';\n const bytes = new Uint8Array(buffer);\n const len = bytes.byteLength;\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n}\n\nexport function base64ToArrayBuffer(base64: string) {\n const binaryString = window.atob(base64);\n const len = binaryString.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes.buffer;\n}\n\nasync function getOrCreateInitVector() {\n if (!isWebCryptoSupported()) {\n console.info('webcrypto is not supported');\n return undefined;\n }\n const { crypto } = window;\n const existingIv = (await getItem(INITIALIZATION_VECTOR_KEY)) as Uint8Array;\n if (existingIv) {\n return existingIv;\n }\n\n const iv = crypto.getRandomValues(new Uint8Array(12)); // 12 bytes for AES-GCM\n return iv;\n}\n\nasync function getOrCreateEncryptionKey() {\n if (!isWebCryptoSupported()) {\n console.info('webcrypto is not supported');\n return undefined;\n }\n const { subtle } = window.crypto;\n const existingKey = (await getItem(ENCRYPTION_KEY_KEY)) as CryptoKey;\n if (existingKey) {\n return existingKey;\n }\n\n const key = await subtle.generateKey(\n { name: ALGO_NAME, length: ALGO_LENGTH },\n false, // non-extractable\n ['encrypt', 'decrypt'],\n );\n return key;\n}\n\nexport async function encryptAndPersistDeviceShare(deviceShareBase64: string, networkHash: string): Promise<void> {\n const iv = await getOrCreateInitVector();\n const encryptionKey = await getOrCreateEncryptionKey();\n\n if (!iv || !encryptionKey || !deviceShareBase64) {\n return;\n }\n const decodedDeviceShare = base64ToArrayBuffer(deviceShareBase64);\n\n const { subtle } = window.crypto;\n\n const encryptedData = await subtle.encrypt(\n {\n name: ALGO_NAME,\n iv,\n },\n encryptionKey,\n decodedDeviceShare,\n );\n\n // The encrypted device share we store is a base64 encoded string representation\n // of the magic kms encrypted client share encrypted with webcrypto\n const encryptedDeviceShare = arrayBufferToBase64(encryptedData);\n\n await setItem(`${DEVICE_SHARE_KEY}_${networkHash}`, encryptedDeviceShare);\n await setItem(ENCRYPTION_KEY_KEY, encryptionKey);\n await setItem(INITIALIZATION_VECTOR_KEY, iv);\n}\n\nexport async function getDecryptedDeviceShare(networkHash: string): Promise<string | undefined> {\n const encryptedDeviceShare = await getItem<string>(`${DEVICE_SHARE_KEY}_${networkHash}`);\n const iv = (await getItem(INITIALIZATION_VECTOR_KEY)) as Uint8Array; // use existing encryption key and initialization vector\n const encryptionKey = (await getItem(ENCRYPTION_KEY_KEY)) as CryptoKey;\n\n if (!iv || !encryptedDeviceShare || !encryptionKey || !isWebCryptoSupported()) {\n return undefined;\n }\n\n const { subtle } = window.crypto;\n const ab = await subtle.decrypt({ name: ALGO_NAME, iv }, encryptionKey, base64ToArrayBuffer(encryptedDeviceShare));\n\n return arrayBufferToBase64(ab);\n}\n","/**\n * Builds a `URL` object safely.\n */\nexport function createURL(url: string, base?: string): URL {\n // Safari raises an error if `undefined` is given to the second argument of\n // the `URL` constructor.\n return base ? new URL(url, base) : new URL(url);\n}\n","import {\n GasApiResponse,\n MagicPayloadMethod,\n GaslessTransactionRequest,\n ConnectWithUIOptions,\n ConnectWithUiEvents,\n ShowUIPromiEvents,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { createJsonRpcRequestPayload } from '../core/json-rpc';\nimport { createPromiEvent } from '../util';\n\ntype ShowUiConfig = {\n onramperParams?: { [key: string]: string };\n};\n\nexport class WalletModule extends BaseModule {\n /* Prompt Magic's Login Form */\n public connectWithUI(options?: ConnectWithUIOptions) {\n const promiEvent = createPromiEvent<string[], ConnectWithUiEvents>(async (resolve, reject) => {\n try {\n const loginRequestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.Login, [\n {\n enabledWallets: this.sdk.thirdPartyWallets.enabledWallets,\n ...options,\n },\n ]);\n\n const loginRequest = this.request<string[], ConnectWithUiEvents>(loginRequestPayload);\n\n this.sdk.thirdPartyWallets.eventListeners.forEach(({ event, callback }) => {\n loginRequest.on(event, () => callback(loginRequestPayload.id as string));\n });\n\n loginRequest.on('id-token-created' as any, (params: { idToken: string }) => {\n promiEvent.emit('id-token-created', params);\n });\n\n const result = await loginRequest;\n if ((result as any).error) reject(result);\n resolve(result);\n } catch (error) {\n reject(error);\n }\n });\n return promiEvent;\n }\n\n /* Prompt Magic's Wallet UI (not available for users logged in with third party wallets) */\n public showUI(config?: ShowUiConfig) {\n return this.request<boolean, ShowUIPromiEvents>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowUI, [config]));\n }\n\n public showAddress() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowAddress));\n }\n\n public showSendTokensUI() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowSendTokensUI));\n }\n\n public showOnRamp() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowOnRamp));\n }\n\n public showNFTs() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowNFTs));\n }\n\n public showBalances() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowBalances));\n }\n\n public sendGaslessTransaction(address: string, transaction: GaslessTransactionRequest) {\n return this.request<GasApiResponse>(\n createJsonRpcRequestPayload(MagicPayloadMethod.SendGaslessTransaction, [address, transaction]),\n );\n }\n}\n","import {\n JsonRpcRequestPayload,\n LocalStorageKeys,\n MagicPayloadMethod,\n MagicUserMetadata,\n ThirdPartyWalletEvents,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { PromiEvent, createPromiEvent } from '../util';\n\nexport class ThirdPartyWalletsModule extends BaseModule {\n public eventListeners: { event: ThirdPartyWalletEvents; callback: (payloadId: string) => Promise<void> }[] = [];\n public enabledWallets: Record<string, boolean> = {};\n public isConnected = false;\n\n public resetThirdPartyWalletState() {\n localStorage.removeItem(LocalStorageKeys.PROVIDER);\n localStorage.removeItem(LocalStorageKeys.ADDRESS);\n localStorage.removeItem(LocalStorageKeys.CHAIN_ID);\n this.isConnected = false;\n }\n\n public requestOverride(payload: Partial<JsonRpcRequestPayload>) {\n // Handle method overrides if login/getInfo/isLoggedIn/logout\n if (payload.method === MagicPayloadMethod.Login) {\n this.resetThirdPartyWalletState();\n return super.request(payload);\n }\n if (payload.method === MagicPayloadMethod.GetInfo) {\n return this.getInfo(payload);\n }\n if (payload.method === MagicPayloadMethod.IsLoggedIn) {\n return this.isLoggedIn(payload);\n }\n if (payload.method === MagicPayloadMethod.Logout) {\n return this.logout(payload);\n }\n // Route all other requests to 3pw provider\n switch (localStorage.getItem(LocalStorageKeys.PROVIDER)) {\n case 'web3modal':\n return this.web3modalRequest(payload);\n // Fallback to default request\n default:\n this.resetThirdPartyWalletState();\n return super.request(payload);\n }\n }\n\n /* Core Method Overrides */\n\n private isLoggedIn(payload: Partial<JsonRpcRequestPayload>): PromiEvent<boolean> {\n switch (localStorage.getItem(LocalStorageKeys.PROVIDER)) {\n case 'web3modal':\n return this.web3modalIsLoggedIn();\n default:\n this.resetThirdPartyWalletState();\n return super.request(payload);\n }\n }\n\n private getInfo(payload: Partial<JsonRpcRequestPayload>): PromiEvent<MagicUserMetadata> {\n switch (localStorage.getItem(LocalStorageKeys.PROVIDER)) {\n case 'web3modal':\n return this.web3modalGetInfo();\n default:\n this.resetThirdPartyWalletState();\n return super.request(payload);\n }\n }\n\n private logout(payload: Partial<JsonRpcRequestPayload>): PromiEvent<boolean> {\n const provider = localStorage.getItem(LocalStorageKeys.PROVIDER);\n this.resetThirdPartyWalletState();\n switch (provider) {\n case 'web3modal': {\n return this.web3modalLogout();\n }\n default:\n return super.request(payload);\n }\n }\n\n /* Web3Modal Methods */\n\n private web3modalRequest(payload: Partial<JsonRpcRequestPayload>) {\n return createPromiEvent<unknown>((resolve, reject) => {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n this.sdk.web3modal.modal.getWalletProvider().request(payload).then(resolve).catch(reject);\n });\n }\n\n private web3modalIsLoggedIn() {\n return createPromiEvent<boolean>(resolve => {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n const walletStatus = this.sdk.web3modal.modal.getStatus();\n if (walletStatus === 'connected') {\n resolve(true);\n }\n if (walletStatus === 'disconnected') {\n this.resetThirdPartyWalletState();\n resolve(false);\n }\n if (walletStatus === 'reconnecting') {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n const unsubscribeFromProviderEvents = this.sdk.web3modal.modal.subscribeProvider(({ status }) => {\n if (status === 'connected') {\n unsubscribeFromProviderEvents();\n resolve(true);\n }\n if (status === 'disconnected') {\n unsubscribeFromProviderEvents();\n this.resetThirdPartyWalletState();\n resolve(false);\n }\n });\n }\n });\n }\n\n private formatWeb3modalGetInfoResponse() {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n const walletType = this.sdk.web3modal.modal.getWalletInfo()?.name;\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n const userAddress = this.sdk.web3modal.modal.getAddress();\n return {\n publicAddress: userAddress as string,\n email: null,\n issuer: `did:ethr:${userAddress}`,\n phoneNumber: null,\n isMfaEnabled: false,\n recoveryFactors: [] as [],\n walletType: walletType || 'web3modal',\n firstLoginAt: null,\n };\n }\n\n private web3modalGetInfo() {\n return createPromiEvent<MagicUserMetadata>((resolve, reject) => {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n const walletStatus = this.sdk.web3modal.modal.getStatus();\n if (walletStatus === 'connected') {\n resolve(this.formatWeb3modalGetInfoResponse());\n }\n\n if (walletStatus === 'disconnected') {\n this.resetThirdPartyWalletState();\n reject('Magic RPC Error: [-32603] Internal error: User denied account access.');\n }\n\n if (walletStatus === 'reconnecting') {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n const unsubscribeFromProviderEvents = this.sdk.web3modal.modal.subscribeProvider(({ status }) => {\n if (status === 'connected') {\n unsubscribeFromProviderEvents();\n resolve(this.formatWeb3modalGetInfoResponse());\n }\n if (status === 'disconnected') {\n unsubscribeFromProviderEvents();\n this.resetThirdPartyWalletState();\n reject('Magic RPC Error: [-32603] Internal error: User denied account access.');\n }\n });\n }\n });\n }\n\n private web3modalLogout(): PromiEvent<boolean> {\n return createPromiEvent<boolean>(async resolve => {\n try {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n await this.sdk.web3modal.modal.disconnect();\n } catch (error) {\n console.error(error);\n }\n resolve(true);\n });\n }\n}\n","import {\n JsonRpcRequestPayload,\n JsonRpcRequestCallback,\n MagicOutgoingWindowMessage,\n JsonRpcBatchRequestCallback,\n JsonRpcResponsePayload,\n ProviderEnableEvents,\n MagicPayloadMethod,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { createInvalidArgumentError, MagicRPCError, createSynchronousWeb3MethodWarning } from '../core/sdk-exceptions';\nimport { createJsonRpcRequestPayload, standardizeJsonRpcRequestPayload, JsonRpcResponse } from '../core/json-rpc';\nimport { PromiEvent } from '../util/promise-tools';\nimport { createTypedEmitter, EventsDefinition, TypedEmitter } from '../util/events';\n\nconst { createBoundEmitterMethod, createChainingEmitterMethod } = createTypedEmitter();\n\n/** */\nexport class RPCProviderModule extends BaseModule implements TypedEmitter {\n // Implements EIP 1193:\n // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1193.md\n\n public readonly isMagic = true;\n\n public sendAsync(payload: Partial<JsonRpcRequestPayload>, onRequestComplete: JsonRpcRequestCallback): void;\n public sendAsync(payload: Partial<JsonRpcRequestPayload>[], onRequestComplete: JsonRpcBatchRequestCallback): void;\n public sendAsync(\n payload: Partial<JsonRpcRequestPayload> | Partial<JsonRpcRequestPayload>[],\n onRequestComplete: JsonRpcRequestCallback | JsonRpcBatchRequestCallback,\n ): void;\n\n public sendAsync(\n payload: Partial<JsonRpcRequestPayload> | Partial<JsonRpcRequestPayload>[],\n onRequestComplete: JsonRpcRequestCallback | JsonRpcBatchRequestCallback,\n ): void {\n if (!onRequestComplete) {\n throw createInvalidArgumentError({\n procedure: 'Magic.rpcProvider.sendAsync',\n argument: 1,\n expected: 'function',\n received: onRequestComplete === null ? 'null' : typeof onRequestComplete,\n });\n }\n\n if (Array.isArray(payload)) {\n this.overlay\n .post(\n MagicOutgoingWindowMessage.MAGIC_HANDLE_REQUEST,\n payload.map(p => {\n const standardizedPayload = standardizeJsonRpcRequestPayload(p);\n this.prefixPayloadMethodForTestMode(standardizedPayload);\n return standardizedPayload;\n }),\n )\n .then(batchResponse => {\n (onRequestComplete as JsonRpcBatchRequestCallback)(\n null,\n batchResponse.map(response => ({\n ...response.payload,\n error: response.hasError ? new MagicRPCError(response.payload.error) : null,\n })),\n );\n });\n } else {\n const finalPayload = standardizeJsonRpcRequestPayload(payload);\n this.prefixPayloadMethodForTestMode(finalPayload);\n this.overlay.post(MagicOutgoingWindowMessage.MAGIC_HANDLE_REQUEST, finalPayload).then(response => {\n (onRequestComplete as JsonRpcRequestCallback)(\n response.hasError ? new MagicRPCError(response.payload.error) : null,\n response.payload,\n );\n });\n }\n }\n\n public send<ResultType = any>(method: string, params?: any[]): PromiEvent<ResultType>;\n public send(\n payload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n onRequestComplete: JsonRpcRequestCallback,\n ): void;\n public send<ResultType>(payload: JsonRpcRequestPayload, none: void): JsonRpcResponsePayload<ResultType>;\n\n public send<ResultType = any>(\n payloadOrMethod: string | JsonRpcRequestPayload | JsonRpcRequestPayload[],\n onRequestCompleteOrParams: JsonRpcRequestCallback | any[] | void,\n ): PromiEvent<ResultType> | JsonRpcResponsePayload<ResultType> | void {\n // Case #1\n // Web3 >= 1.0.0-beta.38 calls `send` with method and parameters.\n if (typeof payloadOrMethod === 'string') {\n const payload = createJsonRpcRequestPayload(\n payloadOrMethod,\n Array.isArray(onRequestCompleteOrParams) ? onRequestCompleteOrParams : [],\n );\n return this.request(payload) as any;\n }\n\n // Case #2\n // Web3 <= 1.0.0-beta.37 uses `send` with a callback for async queries.\n if (Array.isArray(payloadOrMethod) || !!onRequestCompleteOrParams) {\n this.sendAsync(payloadOrMethod, onRequestCompleteOrParams as any);\n return;\n }\n\n // Case #3\n // Legacy synchronous methods (unsupported).\n const warning = createSynchronousWeb3MethodWarning();\n warning.log();\n return new JsonRpcResponse(payloadOrMethod).applyError({\n code: -32603,\n message: warning.rawMessage,\n }).payload;\n }\n\n public enable() {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.Login);\n return this.request<string[], ProviderEnableEvents>(requestPayload);\n }\n\n /**\n * Here, we wrap `BaseModule.request` with an additional check\n * to determine if the RPC method requires a test-mode prefix.\n */\n protected request<ResultType = any, Events extends EventsDefinition = void>(payload: Partial<JsonRpcRequestPayload>) {\n this.prefixPayloadMethodForTestMode(payload);\n return super.request<ResultType, Events>(payload);\n }\n\n /**\n * Prefixes Ethereum RPC methods with a `testMode` identifier. This is done so\n * that Magic's <iframe> can handle signing methods using test-specific keys.\n */\n private prefixPayloadMethodForTestMode(payload: Partial<JsonRpcRequestPayload>) {\n const testModePrefix = 'testMode/eth/';\n\n // In test mode, we prefix all RPC methods with `test/` so that the\n // Magic <iframe> can handle them without requiring network calls.\n if (this.sdk.testMode) {\n payload.method = `${testModePrefix}${payload.method}`;\n }\n }\n\n public on = createChainingEmitterMethod('on', this);\n public once = createChainingEmitterMethod('once', this);\n public addListener = createChainingEmitterMethod('addListener', this);\n\n public off = createChainingEmitterMethod('off', this);\n public removeListener = createChainingEmitterMethod('removeListener', this);\n public removeAllListeners = createChainingEmitterMethod('removeAllListeners', this);\n\n public emit = createBoundEmitterMethod('emit');\n public eventNames = createBoundEmitterMethod('eventNames');\n public listeners = createBoundEmitterMethod('listeners');\n public listenerCount = createBoundEmitterMethod('listenerCount');\n}\n","import {\n MagicPayloadMethod,\n NFTCheckoutRequest,\n NFTCheckoutResponse,\n NFTCheckoutEvents,\n NFTPurchaseRequest,\n NFTPurchaseResponse,\n NFTTransferRequest,\n NFTTransferResponse,\n NftCheckoutIntermediaryEvents,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { createJsonRpcRequestPayload } from '../core/json-rpc';\n\nexport class NFTModule extends BaseModule {\n /* Start an NFT Purchase flow with Sardine */\n public purchase(options: NFTPurchaseRequest) {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.NFTPurchase, [options]);\n return this.request<NFTPurchaseResponse>(requestPayload);\n }\n\n /* Start an NFT Checkout flow with Paypal */\n public checkout(options: NFTCheckoutRequest) {\n const isThirdPartyWalletConnected = this.sdk.thirdPartyWallets.isConnected;\n\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.NFTCheckout, [\n {\n ...options,\n walletProvider: isThirdPartyWalletConnected ? 'web3modal' : 'magic',\n },\n ]);\n const promiEvent = this.request<NFTCheckoutResponse, NFTCheckoutEvents>(requestPayload);\n\n if (isThirdPartyWalletConnected) {\n promiEvent.on(NftCheckoutIntermediaryEvents.Initiated, async (rawTransaction) => {\n try {\n const hash = await this.request({\n method: 'eth_sendTransaction',\n params: [rawTransaction],\n });\n this.createIntermediaryEvent(NftCheckoutIntermediaryEvents.Success, requestPayload.id as string)(hash);\n } catch (error) {\n this.createIntermediaryEvent(NftCheckoutIntermediaryEvents.Failure, requestPayload.id as string)();\n }\n });\n promiEvent.on(NftCheckoutIntermediaryEvents.Disconnect, () => {\n this.sdk.thirdPartyWallets.resetThirdPartyWalletState();\n promiEvent.emit('disconnect');\n });\n }\n return promiEvent;\n }\n\n /* Start an NFT Transfer flow */\n public transfer(options: NFTTransferRequest) {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.NFTTransfer, [options]);\n return this.request<NFTTransferResponse>(requestPayload);\n }\n}\n","import { EthNetworkConfiguration, QueryParameters, SupportedLocale } from '@magic-sdk/types';\nimport { coerce, satisfies } from '../util/semver';\nimport { encodeJSON } from '../util/base64-json';\nimport {\n createMissingApiKeyError,\n createReactNativeEndpointConfigurationWarning,\n createIncompatibleExtensionsError,\n} from './sdk-exceptions';\nimport { AuthModule } from '../modules/auth';\nimport { UserModule } from '../modules/user';\nimport { WalletModule } from '../modules/wallet';\nimport { ThirdPartyWalletsModule } from '../modules/third-party-wallets';\nimport { RPCProviderModule } from '../modules/rpc-provider';\nimport { ViewController } from './view-controller';\nimport { createURL } from '../util/url';\nimport { BaseExtension } from '../modules/base-extension';\nimport { isEmpty } from '../util/type-guards';\nimport { SDKEnvironment, sdkNameToEnvName } from './sdk-environment';\nimport { NFTModule } from '../modules/nft';\n\n/**\n * Checks if the given `ext` is compatible with the platform & version of Magic\n * SDK currently in use.\n */\nfunction checkExtensionCompat(ext: BaseExtension<string>) {\n if (ext.compat && ext.compat[SDKEnvironment.sdkName] != null) {\n return typeof ext.compat[SDKEnvironment.sdkName] === 'string'\n ? satisfies(coerce(SDKEnvironment.version), ext.compat[SDKEnvironment.sdkName] as string)\n : !!ext.compat[SDKEnvironment.sdkName];\n }\n\n // To gracefully support older extensions, we assume\n // compatibility when the `compat` field is missing.\n return true;\n}\n\n/**\n * Generates a network hash of the SDK instance for persisting network specific\n * information on multichain setups\n */\nfunction getNetworkHash(apiKey: string, network?: EthNetworkConfiguration, extConfig?: any) {\n if (!network && !extConfig) {\n return `${apiKey}_eth_mainnet`;\n }\n if (extConfig) {\n return `${apiKey}_${JSON.stringify(extConfig)}`;\n }\n if (network) {\n if (typeof network === 'string') {\n return `${apiKey}_eth_${network}`;\n }\n // Custom network, not necessarily eth.\n return `${apiKey}_${network.rpcUrl}_${network.chainId}_${network.chainType}`;\n }\n return `${apiKey}_unknown`;\n}\n\n/**\n * Initializes SDK extensions, checks for platform/version compatibility issues,\n * then consolidates any global configurations provided by those extensions.\n */\nfunction prepareExtensions(this: SDKBase, options?: MagicSDKAdditionalConfiguration): Record<string, any> {\n const extensions: BaseExtension<string>[] | { [key: string]: BaseExtension<string> } = options?.extensions ?? [];\n const extConfig: any = {};\n const incompatibleExtensions: BaseExtension<string>[] = [];\n\n if (Array.isArray(extensions)) {\n extensions.forEach(ext => {\n if (checkExtensionCompat(ext)) {\n ext.init(this);\n if (ext.name) {\n // Only apply extensions with a known, defined `name` parameter.\n (this as any)[ext.name] = ext;\n }\n if (!isEmpty(ext.config)) extConfig[ext.name] = ext.config;\n } else {\n incompatibleExtensions.push(ext);\n }\n });\n } else {\n Object.keys(extensions).forEach(name => {\n if (checkExtensionCompat(extensions[name])) {\n extensions[name].init(this);\n const ext = extensions[name];\n (this as any)[name] = ext;\n if (!isEmpty(ext.config)) extConfig[extensions[name].name] = ext.config;\n } else {\n incompatibleExtensions.push(extensions[name]);\n }\n });\n }\n\n if (incompatibleExtensions.length) {\n throw createIncompatibleExtensionsError(incompatibleExtensions);\n }\n\n return extConfig;\n}\n\nexport type MagicSDKExtensionsOption<TCustomExtName extends string = string> =\n | BaseExtension<string>[]\n | { [P in TCustomExtName]: BaseExtension<string> };\n\nexport interface MagicSDKAdditionalConfiguration<\n TCustomExtName extends string = string,\n TExt extends MagicSDKExtensionsOption<TCustomExtName> = any,\n> {\n endpoint?: string;\n locale?: SupportedLocale;\n network?: EthNetworkConfiguration;\n extensions?: TExt;\n testMode?: boolean;\n deferPreload?: boolean;\n useStorageCache?: boolean;\n meta?: any; // Generic field for clients to add metadata\n authConfig?: { skipDIDToken: boolean }; // Skip DID Token generation\n}\n\nexport class SDKBase {\n private static readonly __overlays__: Map<string, ViewController> = new Map();\n\n protected readonly endpoint: string;\n protected readonly parameters: string;\n protected readonly networkHash: string;\n public readonly testMode: boolean;\n public readonly useStorageCache: boolean;\n\n /**\n * Contains methods for starting a Magic SDK authentication flow.\n */\n public readonly auth: AuthModule;\n\n /**\n * Contains methods for interacting with user data, checking login\n * status, generating cryptographically-secure ID tokens, and more.\n */\n public readonly user: UserModule;\n\n /**\n * Contains methods previously under the `ConnectExtension`, including\n * login, show wallet UI, request user info, and more.\n */\n public readonly wallet: WalletModule;\n\n /**\n * Contains methods for interacting with NFTs, including purchase.\n */\n public readonly nft: NFTModule;\n\n /**\n * Contains internal methods for third-party wallets.\n */\n public thirdPartyWallets: ThirdPartyWalletsModule;\n\n /**\n * Contains a Web3-compliant provider. Pass this module to your Web3/Ethers\n * instance for automatic compatibility with Ethereum methods.\n */\n public readonly rpcProvider: RPCProviderModule;\n\n /**\n * Creates an instance of Magic SDK.\n */\n constructor(\n public readonly apiKey: string,\n options?: MagicSDKAdditionalConfiguration,\n ) {\n if (!apiKey) throw createMissingApiKeyError();\n\n if (SDKEnvironment.platform === 'react-native' && options?.endpoint) {\n createReactNativeEndpointConfigurationWarning().log();\n }\n\n const { defaultEndpoint, version } = SDKEnvironment;\n this.testMode = !!options?.testMode;\n this.useStorageCache = !!options?.useStorageCache;\n this.endpoint = createURL(options?.endpoint ?? defaultEndpoint).origin;\n\n // Prepare built-in modules\n this.auth = new AuthModule(this);\n this.user = new UserModule(this);\n this.wallet = new WalletModule(this);\n this.nft = new NFTModule(this);\n this.thirdPartyWallets = new ThirdPartyWalletsModule(this);\n this.rpcProvider = new RPCProviderModule(this) as any;\n\n // Prepare extensions\n const extConfig: any = prepareExtensions.call(this, options);\n\n // Encode parameters as base64-JSON\n this.parameters = encodeJSON<QueryParameters>({\n API_KEY: this.apiKey,\n DOMAIN_ORIGIN: typeof window !== 'undefined' && window?.location ? window?.location.origin : '',\n ETH_NETWORK: options?.network,\n host: createURL(this.endpoint).host,\n sdk: sdkNameToEnvName[SDKEnvironment.sdkName],\n version,\n ext: isEmpty(extConfig) ? undefined : extConfig,\n locale: options?.locale || 'en_US',\n authConfig: options?.authConfig ? { ...options.authConfig } : undefined,\n ...(SDKEnvironment.bundleId ? { bundleId: SDKEnvironment.bundleId } : {}),\n meta: options?.meta,\n });\n this.networkHash = getNetworkHash(this.apiKey, options?.network, isEmpty(extConfig) ? undefined : extConfig);\n if (!options?.deferPreload) this.preload();\n }\n\n /**\n * Represents the view controller associated with this `MagicSDK` instance.\n */\n protected get overlay(): ViewController {\n if (!SDKBase.__overlays__.has(this.parameters)) {\n const controller = new SDKEnvironment.ViewController(this.endpoint, this.parameters, this.networkHash);\n\n // @ts-ignore - We don't want to expose this method to the user, but we\n // need to invoke in here so that the `ViewController` is ready for use.\n controller.init();\n\n SDKBase.__overlays__.set(this.parameters, controller);\n }\n\n return SDKBase.__overlays__.get(this.parameters)!;\n }\n\n /**\n * Preloads the Magic view, allowing for faster initial requests in browser\n * environments. Awaiting the returned promise will signal when the Magic view\n * has completed loading and is ready for requests.\n */\n public async preload() {\n await this.overlay.waitForReady();\n }\n}\n","import {\n MagicIncomingWindowMessage,\n MagicOutgoingWindowMessage,\n JsonRpcRequestPayload,\n MagicMessageEvent,\n MagicMessageRequest,\n SDKWarningCode,\n} from '@magic-sdk/types';\nimport { JsonRpcResponse } from './json-rpc';\nimport { createPromise } from '../util/promise-tools';\nimport { MagicSDKWarning, createModalNotReadyError } from './sdk-exceptions';\nimport { clearDeviceShares, encryptAndPersistDeviceShare } from '../util/device-share-web-crypto';\nimport {\n createMagicRequest,\n persistMagicEventRefreshToken,\n standardizeResponse,\n debounce,\n} from '../util/view-controller-utils';\n\ninterface RemoveEventListenerFunction {\n (): void;\n}\n\nconst SECOND = 1000;\nconst MINUTE = 60 * SECOND;\nconst PING_INTERVAL = 5 * MINUTE; // 5 minutes\nconst INITIAL_HEARTBEAT_DELAY = 60 * MINUTE; // 1 hour\n\nexport abstract class ViewController {\n public isReadyForRequest = false;\n protected readonly messageHandlers = new Set<(event: MagicMessageEvent) => any>();\n protected isConnectedToInternet = true;\n protected lastPongTime: null | number = null;\n protected heartbeatIntervalTimer: ReturnType<typeof setInterval> | null = null;\n /* istanbul ignore next */\n protected heartbeatDebounce = debounce(() => {\n // Only do this for web now\n if (this.endpoint === 'https://auth.magic.link/') {\n this.heartBeatCheck();\n }\n }, INITIAL_HEARTBEAT_DELAY);\n\n /**\n * Create an instance of `ViewController`\n *\n * @param endpoint - The URL for the relevant iframe context.\n * @param parameters - The unique, encoded query parameters for the\n * relevant iframe context.\n * @param networkHash - The hash of the network that this sdk instance is connected to\n * for multi-chain scenarios\n */\n constructor(\n protected readonly endpoint: string,\n protected readonly parameters: string,\n protected readonly networkHash: string,\n ) {\n this.listen();\n }\n\n protected abstract init(): void;\n protected abstract _post(data: MagicMessageRequest): Promise<void>;\n protected abstract hideOverlay(): void;\n protected abstract showOverlay(): void;\n protected abstract checkRelayerExistsInDOM(): Promise<boolean>;\n protected abstract reloadRelayer(): Promise<void>;\n\n /**\n * Send a payload to the Magic `<iframe>` for processing and automatically\n * handle the acknowledging follow-up event(s).\n *\n * @param msgType - The type of message to encode with the data.\n * @param payload - The JSON RPC payload to emit via `window.postMessage`.\n */\n public async post<ResultType = any>(\n msgType: MagicOutgoingWindowMessage,\n payload: JsonRpcRequestPayload[],\n ): Promise<JsonRpcResponse<ResultType>[]>;\n\n public async post<ResultType = any>(\n msgType: MagicOutgoingWindowMessage,\n payload: JsonRpcRequestPayload,\n ): Promise<JsonRpcResponse<ResultType>>;\n\n public async post<ResultType = any>(\n msgType: MagicOutgoingWindowMessage,\n payload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n ): Promise<JsonRpcResponse<ResultType> | JsonRpcResponse<ResultType>[]> {\n return createPromise(async (resolve, reject) => {\n if (!this.isConnectedToInternet) {\n const error = createModalNotReadyError();\n reject(error);\n }\n\n if (!(await this.checkRelayerExistsInDOM())) {\n this.isReadyForRequest = false;\n await this.reloadRelayer();\n }\n\n if (!this.isReadyForRequest) {\n await this.waitForReady();\n }\n\n const batchData: JsonRpcResponse[] = [];\n const batchIds = Array.isArray(payload) ? payload.map(p => p.id) : [];\n const msg = await createMagicRequest(`${msgType}-${this.parameters}`, payload, this.networkHash);\n\n await this._post(msg);\n\n /**\n * Collect successful RPC responses and resolve.\n */\n const acknowledgeResponse = (removeEventListener: RemoveEventListenerFunction) => (event: MagicMessageEvent) => {\n const { id, response } = standardizeResponse(payload, event);\n persistMagicEventRefreshToken(event);\n if (response?.payload.error?.message === 'User denied account access.') {\n clearDeviceShares();\n } else if (event.data.deviceShare) {\n const { deviceShare } = event.data;\n encryptAndPersistDeviceShare(deviceShare, this.networkHash);\n }\n if (id && response && Array.isArray(payload) && batchIds.includes(id)) {\n batchData.push(response);\n\n // For batch requests, we wait for all responses before resolving.\n if (batchData.length === payload.length) {\n removeEventListener();\n resolve(batchData);\n }\n } else if (id && response && !Array.isArray(payload) && id === payload.id) {\n removeEventListener();\n resolve(response);\n }\n };\n\n // Listen for and handle responses.\n const removeResponseListener = this.on(\n MagicIncomingWindowMessage.MAGIC_HANDLE_RESPONSE,\n acknowledgeResponse(() => removeResponseListener()),\n );\n });\n }\n\n /**\n * Listen for events received with the given `msgType`.\n *\n * @param msgType - The `msgType` encoded with the event data.\n * @param handler - A handler function to execute on each event received.\n * @return A `void` function to remove the attached event.\n */\n public on(\n msgType: MagicIncomingWindowMessage,\n handler: (this: Window, event: MagicMessageEvent) => any,\n ): RemoveEventListenerFunction {\n const boundHandler = handler.bind(window);\n\n // We cannot effectively cover this function because it never gets reference\n // by value. The functionality of this callback is tested within\n // `initMessageListener`.\n /* istanbul ignore next */\n const listener = (event: MagicMessageEvent) => {\n if (event.data.msgType === `${msgType}-${this.parameters}`) boundHandler(event);\n };\n\n this.messageHandlers.add(listener);\n return () => this.messageHandlers.delete(listener);\n }\n\n waitForReady() {\n return new Promise<void>(resolve => {\n const unsubscribe = this.on(MagicIncomingWindowMessage.MAGIC_OVERLAY_READY, () => {\n this.isReadyForRequest = true;\n resolve();\n unsubscribe();\n });\n });\n }\n\n /**\n * Listen for messages sent from the underlying Magic `<WebView>`.\n */\n private listen() {\n this.on(MagicIncomingWindowMessage.MAGIC_HIDE_OVERLAY, () => {\n this.hideOverlay();\n });\n\n this.on(MagicIncomingWindowMessage.MAGIC_SHOW_OVERLAY, () => {\n this.showOverlay();\n });\n\n this.on(MagicIncomingWindowMessage.MAGIC_SEND_PRODUCT_ANNOUNCEMENT, (event: MagicMessageEvent) => {\n if (event.data.response.result.product_announcement) {\n new MagicSDKWarning(SDKWarningCode.ProductAnnouncement, event.data.response.result.product_announcement).log();\n }\n });\n }\n\n /**\n * Sends periodic pings to check the connection.\n * If no pong is received or it’s stale, the iframe is reloaded.\n */\n /* istanbul ignore next */\n private heartBeatCheck() {\n let firstPing = true;\n\n // Helper function to send a ping message.\n const sendPing = async () => {\n const message = {\n msgType: `${MagicOutgoingWindowMessage.MAGIC_PING}-${this.parameters}`,\n payload: [],\n };\n await this._post(message);\n };\n\n this.heartbeatIntervalTimer = setInterval(async () => {\n // If no pong has ever been received.\n if (!this.lastPongTime) {\n if (!firstPing) {\n // On subsequent ping with no previous pong response, reload the iframe.\n this.reloadRelayer();\n firstPing = true;\n return;\n }\n } else {\n // If we have a pong, check how long ago it was received.\n const timeSinceLastPong = Date.now() - this.lastPongTime;\n if (timeSinceLastPong > PING_INTERVAL * 2) {\n // If the pong is too stale, reload the iframe.\n this.reloadRelayer();\n firstPing = true;\n return;\n }\n }\n\n // Send a new ping message and update the counter.\n await sendPing();\n firstPing = false;\n }, PING_INTERVAL);\n }\n\n // Debounce revival mechanism\n // Kill any existing PingPong interval\n /* istanbul ignore next */\n protected stopHeartBeat() {\n this.heartbeatDebounce();\n this.lastPongTime = null;\n\n if (this.heartbeatIntervalTimer) {\n clearInterval(this.heartbeatIntervalTimer);\n this.heartbeatIntervalTimer = null;\n }\n }\n}\n","import { JsonRpcResponse } from '../core/json-rpc';\nimport { JsonRpcRequestPayload, MagicMessageEvent } from '@magic-sdk/types';\nimport { getItem, setItem } from './storage';\nimport { SDKEnvironment } from '../core/sdk-environment';\nimport { getDecryptedDeviceShare } from './device-share-web-crypto';\nimport { createJwt } from './web-crypto';\n\ninterface StandardizedResponse {\n id?: string | number;\n response?: JsonRpcResponse;\n}\n\ninterface StandardizedMagicRequest {\n msgType: string;\n payload: JsonRpcRequestPayload | JsonRpcRequestPayload[];\n jwt?: string;\n rt?: string;\n deviceShare?: string;\n}\n\n/**\n * Get the originating payload from a batch request using the specified `id`.\n */\nexport function getRequestPayloadFromBatch(\n requestPayload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n id?: string | number | null,\n): JsonRpcRequestPayload | undefined {\n return id && Array.isArray(requestPayload)\n ? requestPayload.find(p => p.id === id)\n : (requestPayload as JsonRpcRequestPayload);\n}\n\n/**\n * Ensures the incoming response follows the expected schema and parses for a\n * JSON RPC payload ID.\n */\nexport function standardizeResponse(\n requestPayload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n event: MagicMessageEvent,\n): StandardizedResponse {\n const id = event.data.response?.id;\n const requestPayloadResolved = getRequestPayloadFromBatch(requestPayload, id);\n\n if (id && requestPayloadResolved) {\n // Build a standardized response object\n const response = new JsonRpcResponse(requestPayloadResolved)\n .applyResult(event.data.response.result)\n .applyError(event.data.response.error);\n\n return { id, response };\n }\n\n return {};\n}\n\nexport async function createMagicRequest(\n msgType: string,\n payload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n networkHash: string,\n) {\n const rt = await getItem<string>('rt');\n let jwt;\n\n // only for webcrypto platforms\n if (SDKEnvironment.platform === 'web') {\n try {\n jwt = (await getItem<string>('jwt')) ?? (await createJwt());\n } catch (e) {\n console.error('webcrypto error', e);\n }\n }\n\n const request: StandardizedMagicRequest = { msgType, payload };\n\n if (jwt) {\n request.jwt = jwt;\n }\n if (jwt && rt) {\n request.rt = rt;\n }\n\n // Grab the device share if it exists for the network\n const decryptedDeviceShare = await getDecryptedDeviceShare(networkHash);\n if (decryptedDeviceShare) {\n request.deviceShare = decryptedDeviceShare;\n }\n\n return request;\n}\n\nexport async function persistMagicEventRefreshToken(event: MagicMessageEvent) {\n if (!event.data.rt) {\n return;\n }\n\n await setItem('rt', event.data.rt);\n}\n\nexport function debounce<T extends (...args: unknown[]) => void>(func: T, delay: number) {\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n return function (...args: Parameters<T>): void {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n timeoutId = setTimeout(() => {\n func(...args);\n }, delay);\n };\n}\n","import { createJsonRpcRequestPayload, standardizeJsonRpcRequestPayload } from '../core/json-rpc';\nimport { BaseModule } from './base-module';\nimport { SDKBase, MagicSDKAdditionalConfiguration, MagicSDKExtensionsOption } from '../core/sdk';\nimport { createExtensionNotInitializedError, MagicExtensionError, MagicExtensionWarning } from '../core/sdk-exceptions';\nimport { createPromiEvent, encodeJSON, decodeJSON, storage, isPromiEvent } from '../util';\nimport { MagicPayloadMethod } from '@magic-sdk/types';\n\nconst sdkAccessFields = ['request', 'overlay', 'sdk'];\n\n/**\n * From the `BaseExtension`-derived instance, get the prototype\n * chain up to and including the `BaseModule` class.\n */\nfunction getPrototypeChain<T extends BaseExtension<string>>(instance: T) {\n let currentProto = Object.getPrototypeOf(instance);\n const protos = [currentProto];\n\n while (currentProto !== BaseModule.prototype) {\n currentProto = Object.getPrototypeOf(currentProto);\n protos.push(currentProto);\n }\n\n return protos;\n}\n\nexport abstract class BaseExtension<TName extends string, TConfig extends any = any> extends BaseModule {\n /**\n * A structure describing the platform and version compatibility of this\n * extension.\n */\n compat?: {\n 'magic-sdk': boolean | string;\n '@magic-sdk/react-native': boolean | string;\n '@magic-sdk/react-native-bare': boolean | string;\n '@magic-sdk/react-native-expo': boolean | string;\n };\n\n public abstract readonly name: TName;\n public abstract readonly config: TConfig;\n\n private __sdk_access_field_descriptors__ = new Map<\n string,\n { descriptor: PropertyDescriptor; isPrototypeField: boolean }\n >();\n private __is_initialized__ = false;\n\n protected utils = {\n createPromiEvent,\n isPromiEvent,\n encodeJSON,\n decodeJSON,\n createJsonRpcRequestPayload,\n standardizeJsonRpcRequestPayload,\n storage,\n };\n\n constructor() {\n super(undefined as any);\n\n // Disallow SDK access before initialization...\n\n const allSources = [this, ...getPrototypeChain(this)];\n\n sdkAccessFields.forEach(prop => {\n const allDescriptors = allSources.map(source => Object.getOwnPropertyDescriptor(source, prop));\n const sourceIndex = allDescriptors.findIndex(x => Boolean(x));\n const isPrototypeField = sourceIndex > 0;\n const descriptor = allDescriptors[sourceIndex];\n\n /* istanbul ignore else */\n if (descriptor) {\n this.__sdk_access_field_descriptors__.set(prop, { descriptor, isPrototypeField });\n\n Object.defineProperty(this, prop, {\n configurable: true,\n get: () => {\n throw createExtensionNotInitializedError(prop);\n },\n });\n }\n });\n }\n\n /**\n * Registers a Magic SDK instance with this Extension.\n *\n * @internal\n */\n public init(sdk: SDKBase) {\n if (this.__is_initialized__) return;\n\n // Replace original property descriptors\n // for SDK access fields post-initialization.\n sdkAccessFields.forEach(prop => {\n /* istanbul ignore else */\n if (this.__sdk_access_field_descriptors__.has(prop)) {\n const { descriptor, isPrototypeField } = this.__sdk_access_field_descriptors__.get(prop)!;\n\n if (isPrototypeField) {\n // For prototype fields, we just need the `delete` operator so that\n // the instance will fallback to the prototype chain itself.\n delete this[prop as keyof this];\n } else {\n Object.defineProperty(this, prop, descriptor);\n }\n }\n });\n\n this.sdk = sdk;\n this.__is_initialized__ = true;\n }\n\n /**\n * Creates a deprecation warning wrapped with a native Magic SDK warning type.\n * Best practice is to warn users of upcoming deprecations at least one major\n * version before the change is implemented. You can use this method to\n * communicate deprecations in a manner consistent with Magic SDK core code.\n */\n protected createDeprecationWarning(options: {\n method: string;\n removalVersion: string;\n useInstead?: string;\n }): MagicExtensionWarning {\n const { method, removalVersion, useInstead } = options;\n\n const useInsteadSuffix = useInstead ? ` Use \\`${useInstead}\\` instead.` : '';\n const message = `\\`${method}\\` will be removed from this Extension in version \\`${removalVersion}\\`.${useInsteadSuffix}`;\n return new MagicExtensionWarning(this, 'DEPRECATION_NOTICE', message);\n }\n\n /**\n * Creates a warning wrapped with a native Magic SDK warning type. This\n * maintains consistency in warning messaging for consumers of Magic SDK and\n * this Extension.\n */\n protected createWarning(code: string | number, message: string): MagicExtensionWarning {\n return new MagicExtensionWarning(this, code, message);\n }\n\n /**\n * Creates an error wrapped with a native Magic SDK error type. This maintains\n * consistency in error handling for consumers of Magic SDK and this\n * Extension.\n */\n protected createError<TData = any>(code: string | number, message: string, data: TData): MagicExtensionError<TData> {\n return new MagicExtensionError<TData>(this, code, message, data);\n }\n}\n\nabstract class InternalExtension<TName extends string, TConfig extends any = any> extends BaseExtension<TName> {\n public abstract readonly config: TConfig;\n}\n\n/**\n * A base class representing \"extensions\" to the core Magic JS APIs. Extensions\n * enable new functionality by composing Magic endpoints methods together.\n */\nexport class Extension {\n /**\n * This is a special constructor used to mark \"official\" extensions. These\n * extensions are designed for special interaction with the Magic iframe using\n * custom JSON RPC methods, business logic, and global configurations. This is\n * intended for internal-use only (and provides no useful advantage to\n * open-source extension developers over the regular `Extension` class).\n *\n * @internal\n */\n public static Internal = InternalExtension;\n}\n\n/**\n * Base class for multi-chain extensions, extracting getPublicAddress logic.\n */\nexport abstract class MultichainExtension<TName extends string, TConfig extends any = any> extends InternalExtension<\n TName,\n TConfig\n> {\n public readonly chain: string;\n constructor(public readonly config: TConfig) {\n super();\n this.chain = (config as any).chainType;\n }\n\n public async getPublicAddress<ResultType = any>(): Promise<ResultType> {\n return this.request(\n this.utils.createJsonRpcRequestPayload(MagicPayloadMethod.GetMultichainPublicAddress, [{ chain: this.chain }]),\n );\n }\n}\n\n/**\n * These fields are exposed on the `Extension` type,\n * but should be hidden from the public interface.\n */\ntype HiddenExtensionFields = 'name' | 'init' | 'config' | 'compat';\n\n/**\n * Gets the type contained in an array type.\n */\ntype UnwrapArray<T extends any[]> = T extends Array<infer P> ? P : never;\n\n/**\n * Create a union type of Extension names from an\n * array of Extension types given by `TExt`.\n */\ntype ExtensionNames<TExt extends BaseExtension<string>[]> =\n UnwrapArray<TExt> extends BaseExtension<infer R> ? R : never;\n\n/**\n * From the literal Extension name type given by `TExtName`,\n * extract a dictionary of Extension types.\n */\ntype GetExtensionFromName<TExt extends BaseExtension<string>[], TExtName extends string> = {\n [P in TExtName]: Extract<UnwrapArray<TExt>, BaseExtension<TExtName>>;\n}[TExtName];\n\n/**\n * Wraps a Magic SDK constructor with the necessary type\n * information to support a strongly-typed `Extension` interface.\n */\nexport type WithExtensions<SDK extends SDKBase> = {\n new <TCustomExtName extends string, TExt extends MagicSDKExtensionsOption<TCustomExtName>>(\n apiKey: string,\n options?: MagicSDKAdditionalConfiguration<TCustomExtName, TExt>,\n ): InstanceWithExtensions<SDK, TExt>;\n};\n\nexport type InstanceWithExtensions<SDK extends SDKBase, TExt extends MagicSDKExtensionsOption> = SDK & {\n [P in Exclude<\n TExt extends BaseExtension<string>[] ? ExtensionNames<TExt> : keyof TExt,\n number\n >]: TExt extends BaseExtension<string>[]\n ? Omit<GetExtensionFromName<TExt, P>, HiddenExtensionFields>\n : TExt extends {\n [P in Exclude<\n TExt extends BaseExtension<string>[] ? ExtensionNames<TExt> : keyof TExt,\n number\n >]: BaseExtension<string>;\n }\n ? Omit<TExt[P], HiddenExtensionFields>\n : never;\n};\n","// Only re-export modules & types that are intended\n// for the public API from this file.\n\nexport {\n Extension,\n MagicSDKError as SDKError,\n MagicExtensionError as ExtensionError,\n MagicExtensionWarning as ExtensionWarning,\n MagicRPCError as RPCError,\n MagicSDKWarning as SDKWarning,\n isPromiEvent,\n} from '@magic-sdk/provider';\n\nexport type { MagicSDKAdditionalConfiguration, MagicSDKExtensionsOption, PromiEvent } from '@magic-sdk/provider';\n\nexport * from '@magic-sdk/types';\n","/*!\n localForage -- Offline Storage, Improved\n Version 1.10.0\n https://localforage.github.io/localForage\n (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\n{\n if (Mutation) {\n var called = 0;\n var observer = new Mutation(nextTick);\n var element = global.document.createTextNode('');\n observer.observe(element, {\n characterData: true\n });\n scheduleDrain = function () {\n element.data = (called = ++called % 2);\n };\n } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n var channel = new global.MessageChannel();\n channel.port1.onmessage = nextTick;\n scheduleDrain = function () {\n channel.port2.postMessage(0);\n };\n } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n scheduleDrain = function () {\n\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n var promise = new this.constructor(INTERNAL);\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n}\n\nhandlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n return self;\n};\nhandlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n return self;\n};\n\nfunction getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n function onError(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n if (result.status === 'error') {\n onError(result.value);\n }\n}\n\nfunction tryCatch(func, value) {\n var out = {};\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n if (value instanceof this) {\n return value;\n }\n return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n return promise;\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n function resolveFromAll(outValue) {\n values[i] = outValue;\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n return promise;\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n try {\n if (typeof indexedDB !== 'undefined') {\n return indexedDB;\n }\n if (typeof webkitIndexedDB !== 'undefined') {\n return webkitIndexedDB;\n }\n if (typeof mozIndexedDB !== 'undefined') {\n return mozIndexedDB;\n }\n if (typeof OIndexedDB !== 'undefined') {\n return OIndexedDB;\n }\n if (typeof msIndexedDB !== 'undefined') {\n return msIndexedDB;\n }\n } catch (e) {\n return;\n }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n try {\n // Initialize IndexedDB; fall back to vendor-prefixed versions\n // if needed.\n if (!idb || !idb.open) {\n return false;\n }\n // We mimic PouchDB here;\n //\n // We test for openDatabase because IE Mobile identifies itself\n // as Safari. Oh the lulz...\n var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n // Safari <10.1 does not meet our requirements for IDB support\n // (see: https://github.com/pouchdb/pouchdb/issues/5572).\n // Safari 10.1 shipped with fetch, we can use that to detect it.\n // Note: this creates issues with `window.fetch` polyfills and\n // overrides; see:\n // https://github.com/localForage/localForage/issues/856\n return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n // See: https://github.com/mozilla/localForage/issues/128\n // See: https://github.com/mozilla/localForage/issues/272\n typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n // In the \"nopromises\" build this will just throw if you don't have\n // a global promise object, but it would throw anyway later.\n _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n if (typeof callback === 'function') {\n promise.then(callback);\n }\n\n if (typeof errorCallback === 'function') {\n promise[\"catch\"](errorCallback);\n }\n}\n\nfunction normalizeKey(key) {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n return key;\n}\n\nfunction getCallback() {\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n return new Promise$1(function (resolve) {\n var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n var blob = createBlob(['']);\n txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n\n txn.oncomplete = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n };\n })[\"catch\"](function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction _checkBlobSupport(idb) {\n if (typeof supportsBlobs === 'boolean') {\n return Promise$1.resolve(supportsBlobs);\n }\n return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n supportsBlobs = value;\n return supportsBlobs;\n });\n}\n\nfunction _deferReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Create a deferred object representing the current database operation.\n var deferredOperation = {};\n\n deferredOperation.promise = new Promise$1(function (resolve, reject) {\n deferredOperation.resolve = resolve;\n deferredOperation.reject = reject;\n });\n\n // Enqueue the deferred operation.\n dbContext.deferredOperations.push(deferredOperation);\n\n // Chain its promise to the database readiness.\n if (!dbContext.dbReady) {\n dbContext.dbReady = deferredOperation.promise;\n } else {\n dbContext.dbReady = dbContext.dbReady.then(function () {\n return deferredOperation.promise;\n });\n }\n}\n\nfunction _advanceReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Resolve its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.resolve();\n return deferredOperation.promise;\n }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Reject its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.reject(err);\n return deferredOperation.promise;\n }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n return new Promise$1(function (resolve, reject) {\n dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n if (dbInfo.db) {\n if (upgradeNeeded) {\n _deferReadiness(dbInfo);\n dbInfo.db.close();\n } else {\n return resolve(dbInfo.db);\n }\n }\n\n var dbArgs = [dbInfo.name];\n\n if (upgradeNeeded) {\n dbArgs.push(dbInfo.version);\n }\n\n var openreq = idb.open.apply(idb, dbArgs);\n\n if (upgradeNeeded) {\n openreq.onupgradeneeded = function (e) {\n var db = openreq.result;\n try {\n db.createObjectStore(dbInfo.storeName);\n if (e.oldVersion <= 1) {\n // Added when support for blob shims was added\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n }\n } catch (ex) {\n if (ex.name === 'ConstraintError') {\n console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n } else {\n throw ex;\n }\n }\n };\n }\n\n openreq.onerror = function (e) {\n e.preventDefault();\n reject(openreq.error);\n };\n\n openreq.onsuccess = function () {\n var db = openreq.result;\n db.onversionchange = function (e) {\n // Triggered when the database is modified (e.g. adding an objectStore) or\n // deleted (even when initiated by other sessions in different tabs).\n // Closing the connection here prevents those operations from being blocked.\n // If the database is accessed again later by this instance, the connection\n // will be reopened or the database recreated as needed.\n e.target.close();\n };\n resolve(db);\n _advanceReadiness(dbInfo);\n };\n });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n if (!dbInfo.db) {\n return true;\n }\n\n var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n var isDowngrade = dbInfo.version < dbInfo.db.version;\n var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n if (isDowngrade) {\n // If the version is not the default one\n // then warn for impossible downgrade.\n if (dbInfo.version !== defaultVersion) {\n console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n }\n // Align the versions to prevent errors.\n dbInfo.version = dbInfo.db.version;\n }\n\n if (isUpgrade || isNewStore) {\n // If the store is new then increment the version (if needed).\n // This will trigger an \"upgradeneeded\" event which is required\n // for creating a store.\n if (isNewStore) {\n var incVersion = dbInfo.db.version + 1;\n if (incVersion > dbInfo.version) {\n dbInfo.version = incVersion;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n return new Promise$1(function (resolve, reject) {\n var reader = new FileReader();\n reader.onerror = reject;\n reader.onloadend = function (e) {\n var base64 = btoa(e.target.result || '');\n resolve({\n __local_forage_encoded_blob: true,\n data: base64,\n type: blob.type\n });\n };\n reader.readAsBinaryString(blob);\n });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n var self = this;\n\n var promise = self._initReady().then(function () {\n var dbContext = dbContexts[self._dbInfo.name];\n\n if (dbContext && dbContext.dbReady) {\n return dbContext.dbReady;\n }\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n _deferReadiness(dbInfo);\n\n var dbContext = dbContexts[dbInfo.name];\n var forages = dbContext.forages;\n\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n if (forage._dbInfo.db) {\n forage._dbInfo.db.close();\n forage._dbInfo.db = null;\n }\n }\n dbInfo.db = null;\n\n return _getOriginalConnection(dbInfo).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n // store the latest db reference\n // in case the db was upgraded\n dbInfo.db = dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n })[\"catch\"](function (err) {\n _rejectReadiness(dbInfo, err);\n throw err;\n });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n if (retries === undefined) {\n retries = 1;\n }\n\n try {\n var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n callback(null, tx);\n } catch (err) {\n if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n return Promise$1.resolve().then(function () {\n if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n // increase the db version, to create the new ObjectStore\n if (dbInfo.db) {\n dbInfo.version = dbInfo.db.version + 1;\n }\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n }).then(function () {\n return _tryReconnect(dbInfo).then(function () {\n createTransaction(dbInfo, mode, callback, retries - 1);\n });\n })[\"catch\"](callback);\n }\n\n callback(err);\n }\n}\n\nfunction createDbContext() {\n return {\n // Running localForages sharing a database.\n forages: [],\n // Shared database.\n db: null,\n // Database readiness (promise).\n dbReady: null,\n // Deferred operations on the database.\n deferredOperations: []\n };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n // Get the current context of the database;\n var dbContext = dbContexts[dbInfo.name];\n\n // ...or create a new context.\n if (!dbContext) {\n dbContext = createDbContext();\n // Register the new context in the global container.\n dbContexts[dbInfo.name] = dbContext;\n }\n\n // Register itself as a running localForage in the current context.\n dbContext.forages.push(self);\n\n // Replace the default `ready()` function with the specialized one.\n if (!self._initReady) {\n self._initReady = self.ready;\n self.ready = _fullyReady;\n }\n\n // Create an array of initialization states of the related localForages.\n var initPromises = [];\n\n function ignoreErrors() {\n // Don't handle errors here,\n // just makes sure related localForages aren't pending.\n return Promise$1.resolve();\n }\n\n for (var j = 0; j < dbContext.forages.length; j++) {\n var forage = dbContext.forages[j];\n if (forage !== self) {\n // Don't wait for itself...\n initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n }\n }\n\n // Take a snapshot of the related localForages.\n var forages = dbContext.forages.slice(0);\n\n // Initialize the connection process only when\n // all the related localForages aren't pending.\n return Promise$1.all(initPromises).then(function () {\n dbInfo.db = dbContext.db;\n // Get the connection or open a new one without upgrade.\n return _getOriginalConnection(dbInfo);\n }).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n dbInfo.db = dbContext.db = db;\n self._dbInfo = dbInfo;\n // Share the final connection amongst related localForages.\n for (var k = 0; k < forages.length; k++) {\n var forage = forages[k];\n if (forage !== self) {\n // Self is already up-to-date.\n forage._dbInfo.db = dbInfo.db;\n forage._dbInfo.version = dbInfo.version;\n }\n }\n });\n}\n\nfunction getItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.get(key);\n\n req.onsuccess = function () {\n var value = req.result;\n if (value === undefined) {\n value = null;\n }\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n resolve(value);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openCursor();\n var iterationNumber = 1;\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (cursor) {\n var value = cursor.value;\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n var result = iterator(value, cursor.key, iterationNumber++);\n\n // when the iterator callback returns any\n // (non-`undefined`) value, then we stop\n // the iteration immediately\n if (result !== void 0) {\n resolve(result);\n } else {\n cursor[\"continue\"]();\n }\n } else {\n resolve();\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n\nfunction setItem(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n var dbInfo;\n self.ready().then(function () {\n dbInfo = self._dbInfo;\n if (toString.call(value) === '[object Blob]') {\n return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n if (blobSupport) {\n return value;\n }\n return _encodeBlob(value);\n });\n }\n return value;\n }).then(function (value) {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n\n // The reason we don't _save_ null is because IE 10 does\n // not support saving the `null` type in IndexedDB. How\n // ironic, given the bug below!\n // See: https://github.com/mozilla/localForage/issues/161\n if (value === null) {\n value = undefined;\n }\n\n var req = store.put(value, key);\n\n transaction.oncomplete = function () {\n // Cast to undefined so the value passed to\n // callback/promise is the same as what one would get out\n // of `getItem()` later. This leads to some weirdness\n // (setItem('foo', undefined) will return `null`), but\n // it's not my fault localStorage is our baseline and that\n // it's weird.\n if (value === undefined) {\n value = null;\n }\n\n resolve(value);\n };\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction removeItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n // We use a Grunt task to make this safe for IE and some\n // versions of Android (including those used by Cordova).\n // Normally IE won't like `.delete()` and will insist on\n // using `['delete']()`, but we have a build step that\n // fixes this for us now.\n var req = store[\"delete\"](key);\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onerror = function () {\n reject(req.error);\n };\n\n // The request will be also be aborted if we've exceeded our storage\n // space.\n transaction.onabort = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction clear(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.clear();\n\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction length(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.count();\n\n req.onsuccess = function () {\n resolve(req.result);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction key(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n if (n < 0) {\n resolve(null);\n\n return;\n }\n\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var advanced = false;\n var req = store.openKeyCursor();\n\n req.onsuccess = function () {\n var cursor = req.result;\n if (!cursor) {\n // this means there weren't enough keys\n resolve(null);\n\n return;\n }\n\n if (n === 0) {\n // We have the first key, return it if that's what they\n // wanted.\n resolve(cursor.key);\n } else {\n if (!advanced) {\n // Otherwise, ask the cursor to skip ahead n\n // records.\n advanced = true;\n cursor.advance(n);\n } else {\n // When we get here, we've got the nth key.\n resolve(cursor.key);\n }\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openKeyCursor();\n var keys = [];\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (!cursor) {\n resolve(keys);\n return;\n }\n\n keys.push(cursor.key);\n cursor[\"continue\"]();\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n return db;\n });\n\n if (!options.storeName) {\n promise = dbPromise.then(function (db) {\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n }\n\n var dropDBPromise = new Promise$1(function (resolve, reject) {\n var req = idb.deleteDatabase(options.name);\n\n req.onerror = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n reject(req.error);\n };\n\n req.onblocked = function () {\n // Closing all open connections in onversionchange handler should prevent this situation, but if\n // we do get here, it just means the request remains pending - eventually it will succeed or error\n console.warn('dropInstance blocked for database \"' + options.name + '\" until all open connections are closed');\n };\n\n req.onsuccess = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n resolve(db);\n };\n });\n\n return dropDBPromise.then(function (db) {\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n var _forage = forages[i];\n _advanceReadiness(_forage._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n } else {\n promise = dbPromise.then(function (db) {\n if (!db.objectStoreNames.contains(options.storeName)) {\n return;\n }\n\n var newVersion = db.version + 1;\n\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n forage._dbInfo.version = newVersion;\n }\n\n var dropObjectPromise = new Promise$1(function (resolve, reject) {\n var req = idb.open(options.name, newVersion);\n\n req.onerror = function (err) {\n var db = req.result;\n db.close();\n reject(err);\n };\n\n req.onupgradeneeded = function () {\n var db = req.result;\n db.deleteObjectStore(options.storeName);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n db.close();\n resolve(db);\n };\n });\n\n return dropObjectPromise.then(function (db) {\n dbContext.db = db;\n for (var j = 0; j < forages.length; j++) {\n var _forage2 = forages[j];\n _forage2._dbInfo.db = db;\n _advanceReadiness(_forage2._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n }\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar asyncStorage = {\n _driver: 'asyncStorage',\n _initStorage: _initStorage,\n _support: isIndexedDBValid(),\n iterate: iterate,\n getItem: getItem,\n setItem: setItem,\n removeItem: removeItem,\n clear: clear,\n length: length,\n key: key,\n keys: keys,\n dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n var i;\n var p = 0;\n var encoded1, encoded2, encoded3, encoded4;\n\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n /*jslint bitwise: true */\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n var i;\n\n for (i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += BASE_CHARS[bytes[i] >> 2];\n base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n base64String += BASE_CHARS[bytes[i + 2] & 63];\n }\n\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n } else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n\n return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString$1.call(value);\n }\n\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n //\n // TODO: See why those tests fail and use a better solution.\n if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer;\n var marker = SERIALIZED_MARKER;\n\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += TYPE_ARRAYBUFFER;\n } else {\n buffer = value.buffer;\n\n if (valueType === '[object Int8Array]') {\n marker += TYPE_INT8ARRAY;\n } else if (valueType === '[object Uint8Array]') {\n marker += TYPE_UINT8ARRAY;\n } else if (valueType === '[object Uint8ClampedArray]') {\n marker += TYPE_UINT8CLAMPEDARRAY;\n } else if (valueType === '[object Int16Array]') {\n marker += TYPE_INT16ARRAY;\n } else if (valueType === '[object Uint16Array]') {\n marker += TYPE_UINT16ARRAY;\n } else if (valueType === '[object Int32Array]') {\n marker += TYPE_INT32ARRAY;\n } else if (valueType === '[object Uint32Array]') {\n marker += TYPE_UINT32ARRAY;\n } else if (valueType === '[object Float32Array]') {\n marker += TYPE_FLOAT32ARRAY;\n } else if (valueType === '[object Float64Array]') {\n marker += TYPE_FLOAT64ARRAY;\n } else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n\n callback(marker + bufferToString(buffer));\n } else if (valueType === '[object Blob]') {\n // Conver the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n };\n\n fileReader.readAsArrayBuffer(value);\n } else {\n try {\n callback(JSON.stringify(value));\n } catch (e) {\n console.error(\"Couldn't convert value into a JSON string: \", value);\n\n callback(null, e);\n }\n }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n return JSON.parse(value);\n }\n\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case TYPE_ARRAYBUFFER:\n return buffer;\n case TYPE_BLOB:\n return createBlob([buffer], { type: blobType });\n case TYPE_INT8ARRAY:\n return new Int8Array(buffer);\n case TYPE_UINT8ARRAY:\n return new Uint8Array(buffer);\n case TYPE_UINT8CLAMPEDARRAY:\n return new Uint8ClampedArray(buffer);\n case TYPE_INT16ARRAY:\n return new Int16Array(buffer);\n case TYPE_UINT16ARRAY:\n return new Uint16Array(buffer);\n case TYPE_INT32ARRAY:\n return new Int32Array(buffer);\n case TYPE_UINT32ARRAY:\n return new Uint32Array(buffer);\n case TYPE_FLOAT32ARRAY:\n return new Float32Array(buffer);\n case TYPE_FLOAT64ARRAY:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nvar localforageSerializer = {\n serialize: serialize,\n deserialize: deserialize,\n stringToBuffer: stringToBuffer,\n bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n }\n }\n\n var dbInfoPromise = new Promise$1(function (resolve, reject) {\n // Open the database; the openDatabase API will automatically\n // create it for us if it doesn't exist.\n try {\n dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n } catch (e) {\n return reject(e);\n }\n\n // Create our key/value table if it doesn't exist.\n dbInfo.db.transaction(function (t) {\n createDbTable(t, dbInfo, function () {\n self._dbInfo = dbInfo;\n resolve();\n }, function (t, error) {\n reject(error);\n });\n }, reject);\n });\n\n dbInfo.serializer = localforageSerializer;\n return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n t.executeSql(sqlStatement, args, callback, function (t, error) {\n if (error.code === error.SYNTAX_ERR) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n if (!results.rows.length) {\n // if the table is missing (was deleted)\n // re-create it table and retry\n createDbTable(t, dbInfo, function () {\n t.executeSql(sqlStatement, args, callback, errorCallback);\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).value : null;\n\n // Check to see if this is serialized content we need to\n // unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n var rows = results.rows;\n var length = rows.length;\n\n for (var i = 0; i < length; i++) {\n var item = rows.item(i);\n var result = item.value;\n\n // Check to see if this is serialized content\n // we need to unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n result = iterator(result, item.key, i + 1);\n\n // void(0) prevents problems with redefinition\n // of `undefined`.\n if (result !== void 0) {\n resolve(result);\n return;\n }\n }\n\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n // The localStorage API doesn't return undefined values in an\n // \"expected\" way, so undefined is always cast to null in all\n // drivers. See: https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n resolve(originalValue);\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n // The transaction failed; check\n // to see if it's a quota error.\n if (sqlError.code === sqlError.QUOTA_ERR) {\n // We reject the callback outright for now, but\n // it's worth trying to re-run the transaction.\n // Even if the user accepts the prompt to use\n // more storage on Safari, this error will\n // be called.\n //\n // Try to re-run the transaction.\n if (retriesLeft > 0) {\n resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n return;\n }\n reject(sqlError);\n }\n });\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n // Ahhh, SQL makes this one soooooo easy.\n tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n var result = results.rows.item(0).c;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).key : null;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n var keys = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n keys.push(results.rows.item(i).key);\n }\n\n resolve(keys);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n return new Promise$1(function (resolve, reject) {\n db.transaction(function (t) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n var storeNames = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n storeNames.push(results.rows.item(i).name);\n }\n\n resolve({\n db: db,\n storeNames: storeNames\n });\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n}\n\nfunction dropInstance$1(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n var db;\n if (options.name === currentConfig.name) {\n // use the db reference of the current instance\n db = self._dbInfo.db;\n } else {\n db = openDatabase(options.name, '', '', 0);\n }\n\n if (!options.storeName) {\n // drop all database tables\n resolve(getAllStoreNames(db));\n } else {\n resolve({\n db: db,\n storeNames: [options.storeName]\n });\n }\n }).then(function (operationInfo) {\n return new Promise$1(function (resolve, reject) {\n operationInfo.db.transaction(function (t) {\n function dropTable(storeName) {\n return new Promise$1(function (resolve, reject) {\n t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n }\n\n var operations = [];\n for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n operations.push(dropTable(operationInfo.storeNames[i]));\n }\n\n Promise$1.all(operations).then(function () {\n resolve();\n })[\"catch\"](function (e) {\n reject(e);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar webSQLStorage = {\n _driver: 'webSQLStorage',\n _initStorage: _initStorage$1,\n _support: isWebSQLValid(),\n iterate: iterate$1,\n getItem: getItem$1,\n setItem: setItem$1,\n removeItem: removeItem$1,\n clear: clear$1,\n length: length$1,\n key: key$1,\n keys: keys$1,\n dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n try {\n return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n // in IE8 typeof localStorage.setItem === 'object'\n !!localStorage.setItem;\n } catch (e) {\n return false;\n }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n var keyPrefix = options.name + '/';\n\n if (options.storeName !== defaultConfig.storeName) {\n keyPrefix += options.storeName + '/';\n }\n return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n var localStorageTestKey = '_localforage_support_test';\n\n try {\n localStorage.setItem(localStorageTestKey, true);\n localStorage.removeItem(localStorageTestKey);\n\n return false;\n } catch (e) {\n return true;\n }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n var self = this;\n var dbInfo = {};\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n if (!_isLocalStorageUsable()) {\n return Promise$1.reject();\n }\n\n self._dbInfo = dbInfo;\n dbInfo.serializer = localforageSerializer;\n\n return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var keyPrefix = self._dbInfo.keyPrefix;\n\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the key\n // is likely undefined and we'll pass it straight to the\n // callback.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n var self = this;\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var keyPrefix = dbInfo.keyPrefix;\n var keyPrefixLength = keyPrefix.length;\n var length = localStorage.length;\n\n // We use a dedicated iterator instead of the `i` variable below\n // so other keys we fetch in localStorage aren't counted in\n // the `iterationNumber` argument passed to the `iterate()`\n // callback.\n //\n // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n var iterationNumber = 1;\n\n for (var i = 0; i < length; i++) {\n var key = localStorage.key(i);\n if (key.indexOf(keyPrefix) !== 0) {\n continue;\n }\n var value = localStorage.getItem(key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n if (value !== void 0) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result;\n try {\n result = localStorage.key(n);\n } catch (error) {\n result = null;\n }\n\n // Remove the prefix from the key, if a key is found.\n if (result) {\n result = result.substring(dbInfo.keyPrefix.length);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var length = localStorage.length;\n var keys = [];\n\n for (var i = 0; i < length; i++) {\n var itemKey = localStorage.key(i);\n if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n }\n }\n\n return keys;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n var self = this;\n var promise = self.keys().then(function (keys) {\n return keys.length;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n localStorage.removeItem(dbInfo.keyPrefix + key);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n // Convert undefined values to null.\n // https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n return new Promise$1(function (resolve, reject) {\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n try {\n localStorage.setItem(dbInfo.keyPrefix + key, value);\n resolve(originalValue);\n } catch (e) {\n // localStorage capacity exceeded.\n // TODO: Make this a specific error/event.\n if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n reject(e);\n }\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n var currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n if (!options.storeName) {\n resolve(options.name + '/');\n } else {\n resolve(_getKeyPrefix(options, self._defaultConfig));\n }\n }).then(function (keyPrefix) {\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar localStorageWrapper = {\n _driver: 'localStorageWrapper',\n _initStorage: _initStorage$2,\n _support: isLocalStorageValid(),\n iterate: iterate$2,\n getItem: getItem$2,\n setItem: setItem$2,\n removeItem: removeItem$2,\n clear: clear$2,\n length: length$2,\n key: key$2,\n keys: keys$2,\n dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n var len = array.length;\n var i = 0;\n while (i < len) {\n if (sameValue(array[i], searchElement)) {\n return true;\n }\n i++;\n }\n\n return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n INDEXEDDB: asyncStorage,\n WEBSQL: webSQLStorage,\n LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n description: '',\n driver: DefaultDriverOrder.slice(),\n name: 'localforage',\n // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n // we can use without a prompt.\n size: 4980736,\n storeName: 'keyvaluepairs',\n version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n localForageInstance[libraryMethod] = function () {\n var _args = arguments;\n return localForageInstance.ready().then(function () {\n return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n });\n };\n}\n\nfunction extend() {\n for (var i = 1; i < arguments.length; i++) {\n var arg = arguments[i];\n\n if (arg) {\n for (var _key in arg) {\n if (arg.hasOwnProperty(_key)) {\n if (isArray(arg[_key])) {\n arguments[0][_key] = arg[_key].slice();\n } else {\n arguments[0][_key] = arg[_key];\n }\n }\n }\n }\n }\n\n return arguments[0];\n}\n\nvar LocalForage = function () {\n function LocalForage(options) {\n _classCallCheck(this, LocalForage);\n\n for (var driverTypeKey in DefaultDrivers) {\n if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n var driver = DefaultDrivers[driverTypeKey];\n var driverName = driver._driver;\n this[driverTypeKey] = driverName;\n\n if (!DefinedDrivers[driverName]) {\n // we don't need to wait for the promise,\n // since the default drivers can be defined\n // in a blocking manner\n this.defineDriver(driver);\n }\n }\n }\n\n this._defaultConfig = extend({}, DefaultConfig);\n this._config = extend({}, this._defaultConfig, options);\n this._driverSet = null;\n this._initDriver = null;\n this._ready = false;\n this._dbInfo = null;\n\n this._wrapLibraryMethodsWithReady();\n this.setDriver(this._config.driver)[\"catch\"](function () {});\n }\n\n // Set any config values for localForage; can be called anytime before\n // the first API call (e.g. `getItem`, `setItem`).\n // We loop through options so we don't overwrite existing config\n // values.\n\n\n LocalForage.prototype.config = function config(options) {\n // If the options argument is an object, we use it to set values.\n // Otherwise, we return either a specified config value or all\n // config values.\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n // If localforage is ready and fully initialized, we can't set\n // any new configuration values. Instead, we return an error.\n if (this._ready) {\n return new Error(\"Can't call config() after localforage \" + 'has been used.');\n }\n\n for (var i in options) {\n if (i === 'storeName') {\n options[i] = options[i].replace(/\\W/g, '_');\n }\n\n if (i === 'version' && typeof options[i] !== 'number') {\n return new Error('Database version must be a number.');\n }\n\n this._config[i] = options[i];\n }\n\n // after all config options are set and\n // the driver option is used, try setting it\n if ('driver' in options && options.driver) {\n return this.setDriver(this._config.driver);\n }\n\n return true;\n } else if (typeof options === 'string') {\n return this._config[options];\n } else {\n return this._config;\n }\n };\n\n // Used to define a custom driver, shared across all instances of\n // localForage.\n\n\n LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n var promise = new Promise$1(function (resolve, reject) {\n try {\n var driverName = driverObject._driver;\n var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n // A driver name should be defined and not overlap with the\n // library-defined, default drivers.\n if (!driverObject._driver) {\n reject(complianceError);\n return;\n }\n\n var driverMethods = LibraryMethods.concat('_initStorage');\n for (var i = 0, len = driverMethods.length; i < len; i++) {\n var driverMethodName = driverMethods[i];\n\n // when the property is there,\n // it should be a method even when optional\n var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n reject(complianceError);\n return;\n }\n }\n\n var configureMissingMethods = function configureMissingMethods() {\n var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n return function () {\n var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n var promise = Promise$1.reject(error);\n executeCallback(promise, arguments[arguments.length - 1]);\n return promise;\n };\n };\n\n for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n var optionalDriverMethod = OptionalDriverMethods[_i];\n if (!driverObject[optionalDriverMethod]) {\n driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n }\n }\n };\n\n configureMissingMethods();\n\n var setDriverSupport = function setDriverSupport(support) {\n if (DefinedDrivers[driverName]) {\n console.info('Redefining LocalForage driver: ' + driverName);\n }\n DefinedDrivers[driverName] = driverObject;\n DriverSupport[driverName] = support;\n // don't use a then, so that we can define\n // drivers that have simple _support methods\n // in a blocking manner\n resolve();\n };\n\n if ('_support' in driverObject) {\n if (driverObject._support && typeof driverObject._support === 'function') {\n driverObject._support().then(setDriverSupport, reject);\n } else {\n setDriverSupport(!!driverObject._support);\n }\n } else {\n setDriverSupport(true);\n }\n } catch (e) {\n reject(e);\n }\n });\n\n executeTwoCallbacks(promise, callback, errorCallback);\n return promise;\n };\n\n LocalForage.prototype.driver = function driver() {\n return this._driver || null;\n };\n\n LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n return getDriverPromise;\n };\n\n LocalForage.prototype.getSerializer = function getSerializer(callback) {\n var serializerPromise = Promise$1.resolve(localforageSerializer);\n executeTwoCallbacks(serializerPromise, callback);\n return serializerPromise;\n };\n\n LocalForage.prototype.ready = function ready(callback) {\n var self = this;\n\n var promise = self._driverSet.then(function () {\n if (self._ready === null) {\n self._ready = self._initDriver();\n }\n\n return self._ready;\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n };\n\n LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n var self = this;\n\n if (!isArray(drivers)) {\n drivers = [drivers];\n }\n\n var supportedDrivers = this._getSupportedDrivers(drivers);\n\n function setDriverToConfig() {\n self._config.driver = self.driver();\n }\n\n function extendSelfWithDriver(driver) {\n self._extend(driver);\n setDriverToConfig();\n\n self._ready = self._initStorage(self._config);\n return self._ready;\n }\n\n function initDriver(supportedDrivers) {\n return function () {\n var currentDriverIndex = 0;\n\n function driverPromiseLoop() {\n while (currentDriverIndex < supportedDrivers.length) {\n var driverName = supportedDrivers[currentDriverIndex];\n currentDriverIndex++;\n\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n }\n\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n }\n\n return driverPromiseLoop();\n };\n }\n\n // There might be a driver initialization in progress\n // so wait for it to finish in order to avoid a possible\n // race condition to set _dbInfo\n var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n return Promise$1.resolve();\n }) : Promise$1.resolve();\n\n this._driverSet = oldDriverSetDone.then(function () {\n var driverName = supportedDrivers[0];\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(function (driver) {\n self._driver = driver._driver;\n setDriverToConfig();\n self._wrapLibraryMethodsWithReady();\n self._initDriver = initDriver(supportedDrivers);\n });\n })[\"catch\"](function () {\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n });\n\n executeTwoCallbacks(this._driverSet, callback, errorCallback);\n return this._driverSet;\n };\n\n LocalForage.prototype.supports = function supports(driverName) {\n return !!DriverSupport[driverName];\n };\n\n LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n extend(this, libraryMethodsAndProperties);\n };\n\n LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n var supportedDrivers = [];\n for (var i = 0, len = drivers.length; i < len; i++) {\n var driverName = drivers[i];\n if (this.supports(driverName)) {\n supportedDrivers.push(driverName);\n }\n }\n return supportedDrivers;\n };\n\n LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n // Add a stub for each driver API method that delays the call to the\n // corresponding driver method until localForage is ready. These stubs\n // will be replaced by the driver methods as soon as the driver is\n // loaded, so there is no performance impact.\n for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n callWhenReady(this, LibraryMethods[i]);\n }\n };\n\n LocalForage.prototype.createInstance = function createInstance(options) {\n return new LocalForage(options);\n };\n\n return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n","export const _driver = 'localforage-driver-memory';\n","/*!\nMIT License\n\nCopyright (c) 2018 Arturas Molcanovas <a.molcanovas@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n*/\n\n\nimport { __values } from 'tslib';\n\n/**\n * Abstracts constructing a Blob object, so it also works in older\n * browsers that don't support the native Blob constructor. (i.e.\n * old QtWebKit versions, at least).\n * Abstracts constructing a Blob object, so it also works in older\n * browsers that don't support the native Blob constructor. (i.e.\n * old QtWebKit versions, at least).\n *\n * @param parts\n * @param properties\n */\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n }\n catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n //tslint:disable-next-line:variable-name\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder\n : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder\n : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder\n : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\nvar SERIALIZED_MARKER_LENGTH = \"__lfsc__:\" /* SERIALIZED_MARKER */.length;\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + \"arbf\" /* TYPE_ARRAYBUFFER */.length;\n//tslint:disable:no-magic-numbers no-bitwise prefer-switch no-unbound-method\nvar toString = Object.prototype.toString;\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n for (var i = 0, p = 0; i < len; i += 4) {\n var encoded1 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */.indexOf(serializedString[i]);\n var encoded2 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */.indexOf(serializedString[i + 1]);\n var encoded3 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */.indexOf(serializedString[i + 2]);\n var encoded4 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */.indexOf(serializedString[i + 3]);\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return buffer;\n}\n/**\n * Converts a buffer to a string to store, serialized, in the backend\n * storage library.\n */\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n for (var i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */[bytes[i] >> 2];\n base64String += \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64String +=\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64String += \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */[bytes[i + 2] & 63];\n }\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n }\n else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n return base64String;\n}\n/**\n * Serialize a value, afterwards executing a callback (which usually\n * instructs the `setItem()` callback/promise to be executed). This is how\n * we store binary data with localStorage.\n * @param value\n * @param callback\n */\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString.call(value);\n }\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n if (value && (valueType === '[object ArrayBuffer]' ||\n (value.buffer && toString.call(value.buffer) === '[object ArrayBuffer]'))) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer = void 0;\n var marker = \"__lfsc__:\" /* SERIALIZED_MARKER */;\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += \"arbf\" /* TYPE_ARRAYBUFFER */;\n }\n else {\n buffer = value.buffer;\n if (valueType === '[object Int8Array]') {\n marker += \"si08\" /* TYPE_INT8ARRAY */;\n }\n else if (valueType === '[object Uint8Array]') {\n marker += \"ui08\" /* TYPE_UINT8ARRAY */;\n }\n else if (valueType === '[object Uint8ClampedArray]') {\n marker += \"uic8\" /* TYPE_UINT8CLAMPEDARRAY */;\n }\n else if (valueType === '[object Int16Array]') {\n marker += \"si16\" /* TYPE_INT16ARRAY */;\n }\n else if (valueType === '[object Uint16Array]') {\n marker += \"ur16\" /* TYPE_UINT16ARRAY */;\n }\n else if (valueType === '[object Int32Array]') {\n marker += \"si32\" /* TYPE_INT32ARRAY */;\n }\n else if (valueType === '[object Uint32Array]') {\n marker += \"ui32\" /* TYPE_UINT32ARRAY */;\n }\n else if (valueType === '[object Float32Array]') {\n marker += \"fl32\" /* TYPE_FLOAT32ARRAY */;\n }\n else if (valueType === '[object Float64Array]') {\n marker += \"fl64\" /* TYPE_FLOAT64ARRAY */;\n }\n else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n callback(marker + bufferToString(buffer));\n }\n else if (valueType === '[object Blob]') {\n // Convert the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n //tslint:disable-next-line:restrict-plus-operands\n var str = \"~~local_forage_type~\" /* BLOB_TYPE_PREFIX */ + value.type + \"~\" + bufferToString(this.result);\n callback(\"__lfsc__:\" /* SERIALIZED_MARKER */ + \"blob\" /* TYPE_BLOB */ + str);\n };\n fileReader.readAsArrayBuffer(value);\n }\n else {\n try {\n callback(JSON.stringify(value));\n }\n catch (e) {\n console.error('Couldn\\'t convert value into a JSON string: ', value);\n callback(null, e);\n }\n }\n}\n/**\n * Deserialize data we've inserted into a value column/field. We place\n * special markers into our strings to mark them as encoded; this isn't\n * as nice as a meta field, but it's the only sane thing we can do whilst\n * keeping localStorage support intact.\n *\n * Oftentimes this will just deserialize JSON content, but if we have a\n * special marker (SERIALIZED_MARKER, defined above), we will extract\n * some kind of arraybuffer/binary data/typed array out of the string.\n * @param value\n */\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== \"__lfsc__:\" /* SERIALIZED_MARKER */) {\n return JSON.parse(value);\n }\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === \"blob\" /* TYPE_BLOB */ && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case \"arbf\" /* TYPE_ARRAYBUFFER */:\n return buffer;\n case \"blob\" /* TYPE_BLOB */:\n return createBlob([buffer], { type: blobType });\n case \"si08\" /* TYPE_INT8ARRAY */:\n return new Int8Array(buffer);\n case \"ui08\" /* TYPE_UINT8ARRAY */:\n return new Uint8Array(buffer);\n case \"uic8\" /* TYPE_UINT8CLAMPEDARRAY */:\n return new Uint8ClampedArray(buffer);\n case \"si16\" /* TYPE_INT16ARRAY */:\n return new Int16Array(buffer);\n case \"ur16\" /* TYPE_UINT16ARRAY */:\n return new Uint16Array(buffer);\n case \"si32\" /* TYPE_INT32ARRAY */:\n return new Int32Array(buffer);\n case \"ui32\" /* TYPE_UINT32ARRAY */:\n return new Uint32Array(buffer);\n case \"fl32\" /* TYPE_FLOAT32ARRAY */:\n return new Float32Array(buffer);\n case \"fl64\" /* TYPE_FLOAT64ARRAY */:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nfunction clone(obj) {\n var e_1, _a;\n if (obj === null || typeof (obj) !== 'object' || 'isActiveClone' in obj) {\n return obj;\n }\n var temp = obj instanceof Date ? new Date(obj) : (obj.constructor());\n try {\n for (var _b = __values(Object.keys(obj)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n obj['isActiveClone'] = null;\n temp[key] = clone(obj[key]);\n delete obj['isActiveClone'];\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return temp;\n}\n\nfunction getKeyPrefix(options, defaultConfig) {\n return (options.name || defaultConfig.name) + \"/\" + (options.storeName || defaultConfig.storeName) + \"/\";\n}\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction getCallback() {\n var _args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n _args[_i] = arguments[_i];\n }\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n}\n\n//tslint:disable-next-line:no-ignored-initial-value\nfunction dropInstanceCommon(options, callback) {\n var _this = this;\n callback = getCallback.apply(this, arguments);\n options = (typeof options !== 'function' && options) || {};\n if (!options.name) {\n var currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n var promise;\n if (!options.name) {\n promise = Promise.reject('Invalid arguments');\n }\n else {\n promise = new Promise(function (resolve) {\n if (!options.storeName) {\n resolve(options.name + \"/\");\n }\n else {\n resolve(getKeyPrefix(options, _this._defaultConfig));\n }\n });\n }\n return { promise: promise, callback: callback };\n}\n\nfunction normaliseKey(key) {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + \" used as a key, but it is not a string.\");\n key = String(key);\n }\n return key;\n}\n\nvar serialiser = {\n bufferToString: bufferToString,\n deserialize: deserialize,\n serialize: serialize,\n stringToBuffer: stringToBuffer\n};\n\nexport { serialiser, clone, getKeyPrefix, executeCallback, getCallback, dropInstanceCommon, normaliseKey };\n//# sourceMappingURL=fesm5.js.map\n","const stores: { [store: string]: Store } = {};\n\n/** @internal */\nexport class Store {\n\n private data: { [k: string]: any } = {};\n\n private constructor(private readonly kp: string) {\n }\n\n public static resolve(kp: string): Store {\n if (!stores[kp]) {\n stores[kp] = new Store(kp);\n }\n\n return stores[kp];\n }\n\n public clear(): void {\n this.data = {};\n }\n\n public drop(): void {\n this.clear();\n delete stores[this.kp];\n }\n\n public get(key: string): any {\n return this.data[key];\n }\n\n public key(idx: number): string {\n return this.keys()[idx];\n }\n\n public keys(): string[] {\n return Object.keys(this.data);\n }\n\n public rm(k: string): void {\n delete this.data[k];\n }\n\n public set(k: string, v: any): void {\n this.data[k] = v;\n }\n}\n","import {clone, getKeyPrefix, LocalForageOptions, serialiser} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function _initStorage(this: any, options?: LocalForageOptions): any {\n const opts = options ? clone(options) : {};\n const kp = getKeyPrefix(opts, this._defaultConfig);\n const store = Store.resolve(kp);\n\n this._dbInfo = opts;\n this._dbInfo.serializer = serialiser;\n this._dbInfo.keyPrefix = kp;\n this._dbInfo.mStore = store;\n\n return Promise.resolve();\n}\n","import {executeCallback} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function clear(this: any, callback?: (err: any) => void): Promise<void> {\n const promise = this.ready().then(() => {\n (<Store>this._dbInfo.mStore).clear();\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {dropInstanceCommon, executeCallback} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function dropInstance(this: any, _options: any, _cb?: any) {\n const {promise, callback} = dropInstanceCommon.apply(this, <any>arguments);\n\n const outPromise = (<Promise<string>>promise).then<void>(keyPrefix => {\n Store.resolve(keyPrefix).drop();\n });\n\n executeCallback(outPromise, callback);\n\n return promise;\n}\n","import {executeCallback, normaliseKey} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function getItem(this: any, key$: string, callback?: any) {\n key$ = normaliseKey(key$);\n\n const promise = this.ready().then(() => {\n const result = (<Store>this._dbInfo.mStore).get(key$);\n\n // Deserialise if the result is not null or undefined\n return result == null ? null : this._dbInfo.serializer.deserialize(result); //tslint:disable-line:triple-equals\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {executeCallback} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function iterate(this: any, iterator: any, callback?: any) {\n const promise = this.ready().then(() => {\n const store = (<Store>this._dbInfo.mStore);\n const keys = store.keys();\n\n for (let i = 0; i < keys.length; i++) {\n let value = store.get(keys[i]);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = this._dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, keys[i], i + 1);\n\n if (value !== undefined) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {executeCallback} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function key(this: any, idx: number, callback?: any) {\n const promise = this.ready().then(() => {\n let result: any;\n try {\n result = (<Store>this._dbInfo.mStore).key(idx);\n\n if (result === undefined) {\n result = null;\n }\n } catch {\n result = null;\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {executeCallback} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function keys(this: any, callback?: any) {\n const promise = this.ready().then(() => {\n return (<Store>this._dbInfo.mStore).keys();\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {executeCallback} from 'localforage-driver-commons';\n\nexport function length(this: any, callback?: any) {\n const promise = this.keys().then((keys$: any[]) => keys$.length);\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {executeCallback, normaliseKey} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function removeItem(this: any, key$: string, callback?: any) {\n key$ = normaliseKey(key$);\n\n const promise = this.ready().then(() => {\n (<Store>this._dbInfo.mStore).rm(key$);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {executeCallback, normaliseKey} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function setItem(this: any, key$: string, value: any, callback?: any) {\n key$ = normaliseKey(key$);\n\n const promise = this.ready().then(() => {\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n const originalValue = value;\n\n return new Promise<any>((resolve, reject) => {\n this._dbInfo.serializer.serialize(value, (value$: string, error: Error) => {\n if (error) {\n reject(error);\n } else {\n try {\n (<Store>this._dbInfo.mStore).set(key$, value$);\n resolve(originalValue);\n } catch (e) {\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","export const _support = true;\nexport {_driver} from './_driver';\nexport {_initStorage} from './_initStorage';\nexport {clear} from './clear';\nexport {dropInstance} from './dropInstance';\nexport {getItem} from './getItem';\nexport {iterate} from './iterate';\nexport {key} from './key';\nexport {keys} from './keys';\nexport {length} from './length';\nexport {removeItem} from './removeItem';\nexport {setItem} from './setItem';\n","/* istanbul ignore file */\n// Deprecate test API key in v7.0.0\n\nimport { SDKBase, createSDK, InstanceWithExtensions, MagicSDKExtensionsOption } from '@magic-sdk/provider';\nimport localForage from 'localforage';\nimport * as memoryDriver from 'localforage-driver-memory';\nimport { IframeController } from './iframe-controller';\n\nexport * from '@magic-sdk/commons';\n\nexport const Magic = createSDK(SDKBase, {\n platform: 'web',\n sdkName: 'magic-sdk',\n version: process.env.WEB_VERSION!,\n defaultEndpoint: 'https://auth.magic.link/',\n ViewController: IframeController,\n configureStorage: async () => {\n const lf = localForage.createInstance({\n name: 'MagicAuthLocalStorageDB',\n storeName: 'MagicAuthLocalStorage',\n });\n\n await lf.defineDriver(memoryDriver);\n await lf.setDriver([localForage.INDEXEDDB, localForage.LOCALSTORAGE, memoryDriver._driver]);\n\n return lf;\n },\n});\n\nexport type Magic<T extends MagicSDKExtensionsOption<any> = MagicSDKExtensionsOption> = InstanceWithExtensions<\n SDKBase,\n T\n>;\n","import { createDuplicateIframeWarning, createModalNotReadyError, createURL, ViewController } from '@magic-sdk/provider';\nimport { MagicIncomingWindowMessage } from '@magic-sdk/types';\n\n/**\n * Magic `<iframe>` overlay styles. These base styles enable `<iframe>` UI\n * to render above all other DOM content.\n */\nconst overlayStyles: Partial<CSSStyleDeclaration> = {\n display: 'none',\n position: 'fixed',\n top: '0',\n right: '0',\n width: '100%',\n height: '100%',\n borderRadius: '0',\n border: 'none',\n // necessary for iOS Safari\n opacity: '0',\n // necessary for iOS 17 and earlier\n zIndex: '-1',\n};\n\n/**\n * Apply iframe styles to the given element.\n * @param elem - An element to apply styles using CSSOM.\n */\nfunction applyOverlayStyles(elem: HTMLElement) {\n for (const [cssProperty, value] of Object.entries(overlayStyles)) {\n (elem.style as any)[cssProperty as any] = value;\n }\n}\n\n/**\n * Checks if the given query params are associated with an active `<iframe>`\n * instance.\n *\n * @param parameters - The unique, encoded query parameters to check for\n * duplicates against.\n */\nfunction checkForSameSrcInstances(parameters: string) {\n const iframes: HTMLIFrameElement[] = [].slice.call(document.querySelectorAll('.magic-iframe'));\n return Boolean(iframes.find(iframe => iframe.src.includes(parameters)));\n}\n\n/**\n * View controller for the Magic `<iframe>` overlay.\n */\nexport class IframeController extends ViewController {\n private activeElement: any = null;\n private iframe!: Promise<HTMLIFrameElement>;\n private relayerSrc = createURL(`/send?params=${encodeURIComponent(this.parameters)}`, this.endpoint).href;\n\n /**\n * Initializes the underlying `<iframe>` element.\n * Initializes the underlying `Window.onmessage` event listener.\n */\n protected init() {\n (this as any).test = 'hello';\n this.iframe = new Promise(resolve => {\n const onload = () => {\n if (!checkForSameSrcInstances(encodeURIComponent(this.parameters))) {\n const iframe = document.createElement('iframe');\n iframe.classList.add('magic-iframe');\n iframe.dataset.magicIframeLabel = createURL(this.endpoint).host;\n iframe.title = 'Secure Modal';\n iframe.src = this.relayerSrc;\n iframe.allow = 'clipboard-read; clipboard-write';\n applyOverlayStyles(iframe);\n document.body.appendChild(iframe);\n resolve(iframe);\n } else {\n createDuplicateIframeWarning().log();\n }\n };\n\n // Check DOM state and load...\n if (['loaded', 'interactive', 'complete'].includes(document.readyState)) {\n onload();\n } else {\n // ...or check load events to load\n window.addEventListener('load', onload, false);\n }\n });\n\n this.iframe.then(iframe => {\n if (iframe instanceof HTMLIFrameElement) {\n iframe.addEventListener('load', async () => {\n this.heartbeatDebounce();\n });\n }\n });\n\n window.addEventListener('message', (event: MessageEvent) => {\n if (event.origin === this.endpoint && event.data.msgType) {\n if (event.data.msgType.includes(MagicIncomingWindowMessage.MAGIC_PONG)) {\n // Mark the Pong time\n this.lastPongTime = Date.now();\n }\n\n if (event.data && this.messageHandlers.size) {\n // If the response object is undefined, we ensure it's at least an\n // empty object before passing to the event listener.\n event.data.response = event.data.response ?? {};\n this.stopHeartBeat();\n for (const handler of this.messageHandlers.values()) {\n handler(event);\n }\n }\n }\n });\n\n window.addEventListener('beforeunload', () => {\n this.stopHeartBeat();\n });\n }\n\n protected async showOverlay() {\n const iframe = await this.iframe;\n iframe.style.display = 'block';\n iframe.style.zIndex = '2147483647';\n iframe.style.opacity = '1';\n this.activeElement = document.activeElement;\n iframe.focus();\n }\n\n protected async hideOverlay() {\n const iframe = await this.iframe;\n iframe.style.display = 'none';\n iframe.style.zIndex = '-1';\n iframe.style.opacity = '0';\n if (this.activeElement?.focus) this.activeElement.focus();\n this.activeElement = null;\n }\n\n protected async _post(data: any) {\n const iframe = await this.iframe;\n if (iframe && iframe.contentWindow) {\n iframe.contentWindow.postMessage(data, this.endpoint);\n } else {\n throw createModalNotReadyError();\n }\n }\n\n protected async checkRelayerExistsInDOM() {\n const iframe = await this.iframe;\n\n // Check iframe reference\n if (!iframe || !iframe.contentWindow) {\n return false;\n }\n\n // Check if the iframe is already in the DOM\n const iframes: HTMLIFrameElement[] = [].slice.call(document.querySelectorAll('.magic-iframe'));\n return Boolean(iframes.find(iframe => iframe.src.includes(encodeURIComponent(this.parameters))));\n }\n\n async reloadRelayer() {\n const iframe = await this.iframe;\n\n // Reset HeartBeat\n this.stopHeartBeat();\n\n if (!iframe) {\n this.init();\n console.warn('Magic SDK: Modal lost, re-initiating');\n return;\n }\n\n if (!iframe.contentWindow) {\n document.body.appendChild(iframe);\n console.warn('Magic SDK: Modal did not append in the iframe, re-initiating');\n return;\n }\n\n if (iframe) {\n // if iframe exists reload the iframe source\n iframe.src = this.relayerSrc;\n }\n }\n}\n","import { Extension } from '@magic-sdk/commons';\nimport { AlgorandConfig, AlgorandPayloadMethod } from './types';\n\nexport class AlgorandExtension extends Extension.Internal<'algod', any> {\n name = 'algod' as const;\n config: any = {};\n\n constructor(public algorandConfig: AlgorandConfig) {\n super();\n\n this.config = {\n rpcUrl: algorandConfig.rpcUrl,\n chainType: 'ALGOD',\n };\n }\n\n public async signTransaction(txn: any) {\n return this.request(this.utils.createJsonRpcRequestPayload(AlgorandPayloadMethod.AlgorandSignTransaction, txn));\n }\n\n public async signBid(txn: any) {\n return this.request(this.utils.createJsonRpcRequestPayload(AlgorandPayloadMethod.AlgorandSignBid, txn));\n }\n\n public async getWallet() {\n return this.request(this.utils.createJsonRpcRequestPayload(AlgorandPayloadMethod.AlgorandGetWallet, []));\n }\n\n public async signGroupTransaction(txns: any[]) {\n return this.request(\n this.utils.createJsonRpcRequestPayload(AlgorandPayloadMethod.AlgorandSignGroupTransaction, txns),\n );\n }\n\n public async signGroupTransactionV2(txns: any) {\n return this.request(\n this.utils.createJsonRpcRequestPayload(AlgorandPayloadMethod.AlgorandSignGroupTransactionV2, txns),\n );\n }\n}\n","(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n var i, r = new Float64Array(16);\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n gf1 = gf([1]),\n _121665 = gf([0xdb41, 1]),\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n x[i] = (h >> 24) & 0xff;\n x[i+1] = (h >> 16) & 0xff;\n x[i+2] = (h >> 8) & 0xff;\n x[i+3] = h & 0xff;\n x[i+4] = (l >> 24) & 0xff;\n x[i+5] = (l >> 16) & 0xff;\n x[i+6] = (l >> 8) & 0xff;\n x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i,d = 0;\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n x0 = x0 + j0 | 0;\n x1 = x1 + j1 | 0;\n x2 = x2 + j2 | 0;\n x3 = x3 + j3 | 0;\n x4 = x4 + j4 | 0;\n x5 = x5 + j5 | 0;\n x6 = x6 + j6 | 0;\n x7 = x7 + j7 | 0;\n x8 = x8 + j8 | 0;\n x9 = x9 + j9 | 0;\n x10 = x10 + j10 | 0;\n x11 = x11 + j11 | 0;\n x12 = x12 + j12 | 0;\n x13 = x13 + j13 | 0;\n x14 = x14 + j14 | 0;\n x15 = x15 + j15 | 0;\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x1 >>> 0 & 0xff;\n o[ 5] = x1 >>> 8 & 0xff;\n o[ 6] = x1 >>> 16 & 0xff;\n o[ 7] = x1 >>> 24 & 0xff;\n\n o[ 8] = x2 >>> 0 & 0xff;\n o[ 9] = x2 >>> 8 & 0xff;\n o[10] = x2 >>> 16 & 0xff;\n o[11] = x2 >>> 24 & 0xff;\n\n o[12] = x3 >>> 0 & 0xff;\n o[13] = x3 >>> 8 & 0xff;\n o[14] = x3 >>> 16 & 0xff;\n o[15] = x3 >>> 24 & 0xff;\n\n o[16] = x4 >>> 0 & 0xff;\n o[17] = x4 >>> 8 & 0xff;\n o[18] = x4 >>> 16 & 0xff;\n o[19] = x4 >>> 24 & 0xff;\n\n o[20] = x5 >>> 0 & 0xff;\n o[21] = x5 >>> 8 & 0xff;\n o[22] = x5 >>> 16 & 0xff;\n o[23] = x5 >>> 24 & 0xff;\n\n o[24] = x6 >>> 0 & 0xff;\n o[25] = x6 >>> 8 & 0xff;\n o[26] = x6 >>> 16 & 0xff;\n o[27] = x6 >>> 24 & 0xff;\n\n o[28] = x7 >>> 0 & 0xff;\n o[29] = x7 >>> 8 & 0xff;\n o[30] = x7 >>> 16 & 0xff;\n o[31] = x7 >>> 24 & 0xff;\n\n o[32] = x8 >>> 0 & 0xff;\n o[33] = x8 >>> 8 & 0xff;\n o[34] = x8 >>> 16 & 0xff;\n o[35] = x8 >>> 24 & 0xff;\n\n o[36] = x9 >>> 0 & 0xff;\n o[37] = x9 >>> 8 & 0xff;\n o[38] = x9 >>> 16 & 0xff;\n o[39] = x9 >>> 24 & 0xff;\n\n o[40] = x10 >>> 0 & 0xff;\n o[41] = x10 >>> 8 & 0xff;\n o[42] = x10 >>> 16 & 0xff;\n o[43] = x10 >>> 24 & 0xff;\n\n o[44] = x11 >>> 0 & 0xff;\n o[45] = x11 >>> 8 & 0xff;\n o[46] = x11 >>> 16 & 0xff;\n o[47] = x11 >>> 24 & 0xff;\n\n o[48] = x12 >>> 0 & 0xff;\n o[49] = x12 >>> 8 & 0xff;\n o[50] = x12 >>> 16 & 0xff;\n o[51] = x12 >>> 24 & 0xff;\n\n o[52] = x13 >>> 0 & 0xff;\n o[53] = x13 >>> 8 & 0xff;\n o[54] = x13 >>> 16 & 0xff;\n o[55] = x13 >>> 24 & 0xff;\n\n o[56] = x14 >>> 0 & 0xff;\n o[57] = x14 >>> 8 & 0xff;\n o[58] = x14 >>> 16 & 0xff;\n o[59] = x14 >>> 24 & 0xff;\n\n o[60] = x15 >>> 0 & 0xff;\n o[61] = x15 >>> 8 & 0xff;\n o[62] = x15 >>> 16 & 0xff;\n o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x5 >>> 0 & 0xff;\n o[ 5] = x5 >>> 8 & 0xff;\n o[ 6] = x5 >>> 16 & 0xff;\n o[ 7] = x5 >>> 24 & 0xff;\n\n o[ 8] = x10 >>> 0 & 0xff;\n o[ 9] = x10 >>> 8 & 0xff;\n o[10] = x10 >>> 16 & 0xff;\n o[11] = x10 >>> 24 & 0xff;\n\n o[12] = x15 >>> 0 & 0xff;\n o[13] = x15 >>> 8 & 0xff;\n o[14] = x15 >>> 16 & 0xff;\n o[15] = x15 >>> 24 & 0xff;\n\n o[16] = x6 >>> 0 & 0xff;\n o[17] = x6 >>> 8 & 0xff;\n o[18] = x6 >>> 16 & 0xff;\n o[19] = x6 >>> 24 & 0xff;\n\n o[20] = x7 >>> 0 & 0xff;\n o[21] = x7 >>> 8 & 0xff;\n o[22] = x7 >>> 16 & 0xff;\n o[23] = x7 >>> 24 & 0xff;\n\n o[24] = x8 >>> 0 & 0xff;\n o[25] = x8 >>> 8 & 0xff;\n o[26] = x8 >>> 16 & 0xff;\n o[27] = x8 >>> 24 & 0xff;\n\n o[28] = x9 >>> 0 & 0xff;\n o[29] = x9 >>> 8 & 0xff;\n o[30] = x9 >>> 16 & 0xff;\n o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n this.buffer = new Uint8Array(16);\n this.r = new Uint16Array(10);\n this.h = new Uint16Array(10);\n this.pad = new Uint16Array(8);\n this.leftover = 0;\n this.fin = 0;\n\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = ((t7 >>> 5)) & 0x007f;\n\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n var hibit = this.fin ? 0 : (1 << 11);\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += (c * 5);\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n var i, want;\n\n if (this.leftover) {\n want = (16 - this.leftover);\n if (want > bytes)\n want = bytes;\n for (i = 0; i < want; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16)\n return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n this.leftover += bytes;\n }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x,0,m,mpos,n,k);\n return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c,0,m,0,d,n,k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x,0,32,n,k);\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n crypto_stream_xor(m,0,c,0,d,n,k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r, a) {\n var i;\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b-1);\n for (var i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction neq25519(a, b) {\n var c = new Uint8Array(32), d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n var d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if(a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if(a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80), r, i;\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n unpack25519(x,p);\n for (i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n for (i=254; i>=0; --i) {\n r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n for (i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n randombytes(x, 32);\n return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n var s = new Uint8Array(32);\n crypto_scalarmult(s, x, y);\n return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n var wh = new Int32Array(16), wl = new Int32Array(16),\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n th, tl, i, j, h, l, a, b, c, d;\n\n var ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n var pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma1\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // K\n h = K[i*2];\n l = K[i*2+1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // w\n h = wh[i%16];\n l = wl[i%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = c & 0xffff | d << 16;\n tl = a & 0xffff | b << 16;\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma0\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i%16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = wh[(j+9)%16];\n l = wl[(j+9)%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma0\n th = wh[(j+1)%16];\n tl = wl[(j+1)%16];\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma1\n th = wh[(j+14)%16];\n tl = wl[(j+14)%16];\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out, m, n) {\n var hh = new Int32Array(8),\n hl = new Int32Array(8),\n x = new Uint8Array(256),\n i, b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\n x[n] = 128;\n\n n = 256-128*(n<112?1:0);\n x[n-9] = 0;\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n return 0;\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n var i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i/8)|0] >> (i&7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n var d = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i+1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64), i;\n for (i = 0; i < 64; i++) x[i] = r[i];\n for (i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n+32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i+j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i;\n var t = new Uint8Array(32), h = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n return n;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n crypto_secretbox_NONCEBYTES = 24,\n crypto_secretbox_ZEROBYTES = 32,\n crypto_secretbox_BOXZEROBYTES = 16,\n crypto_scalarmult_BYTES = 32,\n crypto_scalarmult_SCALARBYTES = 32,\n crypto_box_PUBLICKEYBYTES = 32,\n crypto_box_SECRETKEYBYTES = 32,\n crypto_box_BEFORENMBYTES = 32,\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n crypto_sign_BYTES = 64,\n crypto_sign_PUBLICKEYBYTES = 32,\n crypto_sign_SECRETKEYBYTES = 64,\n crypto_sign_SEEDBYTES = 32,\n crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n crypto_core_hsalsa20: crypto_core_hsalsa20,\n crypto_stream_xor: crypto_stream_xor,\n crypto_stream: crypto_stream,\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n crypto_stream_salsa20: crypto_stream_salsa20,\n crypto_onetimeauth: crypto_onetimeauth,\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n crypto_verify_16: crypto_verify_16,\n crypto_verify_32: crypto_verify_32,\n crypto_secretbox: crypto_secretbox,\n crypto_secretbox_open: crypto_secretbox_open,\n crypto_scalarmult: crypto_scalarmult,\n crypto_scalarmult_base: crypto_scalarmult_base,\n crypto_box_beforenm: crypto_box_beforenm,\n crypto_box_afternm: crypto_box_afternm,\n crypto_box: crypto_box,\n crypto_box_open: crypto_box_open,\n crypto_box_keypair: crypto_box_keypair,\n crypto_hash: crypto_hash,\n crypto_sign: crypto_sign,\n crypto_sign_keypair: crypto_sign_keypair,\n crypto_sign_open: crypto_sign_open,\n\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n crypto_sign_BYTES: crypto_sign_BYTES,\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n crypto_hash_BYTES: crypto_hash_BYTES,\n\n gf: gf,\n D: D,\n L: L,\n pack25519: pack25519,\n unpack25519: unpack25519,\n M: M,\n A: A,\n S: S,\n Z: Z,\n pow2523: pow2523,\n add: add,\n set25519: set25519,\n modL: modL,\n scalarmult: scalarmult,\n scalarbase: scalarbase,\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n for (var i = 0; i < arguments.length; i++) {\n if (!(arguments[i] instanceof Uint8Array))\n throw new TypeError('unexpected type, use Uint8Array');\n }\n}\n\nfunction cleanup(arr) {\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.randomBytes = function(n) {\n var b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return null;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n};\n\nnacl.scalarMult.base = function(n) {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n checkArrayTypes(publicKey, secretKey);\n checkBoxLengths(publicKey, secretKey);\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n crypto_box_beforenm(k, publicKey, secretKey);\n return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n crypto_box_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n crypto_scalarmult_base(pk, secretKey);\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var tmp = new Uint8Array(signedMsg.length);\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n var m = new Uint8Array(mlen);\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n var signedMsg = nacl.sign(msg, secretKey);\n var sig = new Uint8Array(crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES)\n throw new Error('bad signature size');\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error('bad seed size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n checkArrayTypes(msg);\n var h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n randombytes = fn;\n};\n\n(function() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n if (crypto && crypto.getRandomValues) {\n // Browsers.\n var QUOTA = 65536;\n nacl.setPRNG(function(x, n) {\n var i, v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n } else if (typeof require !== 'undefined') {\n // Node.js.\n crypto = require('crypto');\n if (crypto && crypto.randomBytes) {\n nacl.setPRNG(function(x, n) {\n var i, v = crypto.randomBytes(n);\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n }\n }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n","export { LogLevel } from './logger'\nexport { WalletManager, WalletManagerConfig, WalletManagerOptions } from './manager'\nexport {\n AlgodConfig,\n NetworkConfig,\n NetworkConfigBuilder,\n NetworkId,\n DEFAULT_NETWORK_CONFIG\n} from './network'\nexport { State, WalletState, ManagerStatus, DEFAULT_STATE } from './store'\nexport { StorageAdapter } from './storage'\nexport {\n SecureKeyContainer,\n zeroMemory,\n zeroString,\n withSecureKey,\n withSecureKeySync\n} from './secure-key'\nexport { webpackFallback } from './webpack'\nexport * from './wallets'\n","export enum LogLevel {\n DEBUG,\n INFO,\n WARN,\n ERROR\n}\n\nexport class Logger {\n private static instance: Logger | null = null\n private level: LogLevel\n private isClient: boolean\n\n private constructor() {\n this.level = LogLevel.WARN\n this.isClient = typeof window !== 'undefined'\n }\n\n public static getInstance(): Logger {\n if (!Logger.instance) {\n Logger.instance = new Logger()\n }\n return Logger.instance\n }\n\n public static setLevel(level: LogLevel): void {\n Logger.getInstance().level = level\n }\n\n private log(level: LogLevel, scope: string | undefined, message: string, ...args: any[]): void {\n if (level >= this.level && this.isClient) {\n const formattedMessage = scope ? `[${scope}] ${message}` : message\n switch (level) {\n case LogLevel.DEBUG:\n case LogLevel.INFO:\n console.info(formattedMessage, ...args)\n break\n case LogLevel.WARN:\n console.warn(formattedMessage, ...args)\n break\n case LogLevel.ERROR:\n console.error(formattedMessage, ...args)\n break\n }\n }\n }\n\n public createScopedLogger(scope: string) {\n return {\n debug: (message: string, ...args: any[]) => this.log(LogLevel.DEBUG, scope, message, ...args),\n info: (message: string, ...args: any[]) => this.log(LogLevel.INFO, scope, message, ...args),\n warn: (message: string, ...args: any[]) => this.log(LogLevel.WARN, scope, message, ...args),\n error: (message: string, ...args: any[]) => this.log(LogLevel.ERROR, scope, message, ...args)\n }\n }\n\n public debug(message: string, ...args: any[]): void {\n this.log(LogLevel.DEBUG, undefined, message, ...args)\n }\n\n public info(message: string, ...args: any[]): void {\n this.log(LogLevel.INFO, undefined, message, ...args)\n }\n\n public warn(message: string, ...args: any[]): void {\n this.log(LogLevel.WARN, undefined, message, ...args)\n }\n\n public error(message: string, ...args: any[]): void {\n this.log(LogLevel.ERROR, undefined, message, ...args)\n }\n\n // For testing purposes\n public setIsClient(isClient: boolean): void {\n this.isClient = isClient\n }\n}\n\nexport const logger = Logger.getInstance()\n","import { Store } from '@tanstack/store'\nimport algosdk from 'algosdk'\nimport { Logger, LogLevel, logger } from 'src/logger'\nimport {\n createNetworkConfig,\n isNetworkConfig,\n NetworkId,\n type AlgodConfig,\n type NetworkConfig\n} from 'src/network'\nimport { StorageAdapter } from 'src/storage'\nimport {\n DEFAULT_STATE,\n isValidPersistedState,\n LOCAL_STORAGE_KEY,\n removeWallet,\n setActiveNetwork,\n setActiveWallet,\n type State,\n type ManagerStatus,\n type PersistedState\n} from 'src/store'\nimport { createWalletMap } from 'src/utils'\nimport type { BaseWallet } from 'src/wallets/base'\nimport { resolveSkin } from 'src/wallets/skins'\nimport {\n WalletId,\n type SupportedWallet,\n type UIHooks,\n type WalletAccount,\n type WalletConfigMap,\n type WalletIdConfig,\n type WalletKey,\n type WalletMetadata,\n type WalletOptions\n} from 'src/wallets/types'\n\nexport interface WalletManagerOptions {\n resetNetwork?: boolean\n debug?: boolean\n logLevel?: LogLevel\n}\n\nexport interface WalletManagerConfig {\n wallets?: SupportedWallet[]\n networks?: Record<string, NetworkConfig>\n defaultNetwork?: string\n options?: WalletManagerOptions\n}\n\nexport class WalletManager {\n public _clients: Map<WalletKey, BaseWallet> = new Map()\n private baseNetworkConfig: Record<string, NetworkConfig>\n private _uiHooks: UIHooks = {}\n public store: Store<State>\n public subscribe: (callback: (state: State) => void) => () => void\n public options: { resetNetwork: boolean }\n\n private logger: ReturnType<typeof logger.createScopedLogger>\n\n constructor({\n wallets = [],\n networks,\n defaultNetwork = 'testnet',\n options = {}\n }: WalletManagerConfig = {}) {\n // Initialize scoped logger\n this.logger = this.initializeLogger(options)\n\n this.logger.debug('Initializing WalletManager with config:', {\n wallets,\n networks,\n defaultNetwork,\n options\n })\n\n // Load persisted state from local storage\n const persistedState = this.loadPersistedState()\n\n // Store the base network config from `networks` (or created default)\n this.baseNetworkConfig = networks || createNetworkConfig()\n\n // Initialize network config\n const networkConfig = this.initNetworkConfig(this.baseNetworkConfig, persistedState)\n\n // Initialize options\n this.options = { resetNetwork: options.resetNetwork || false }\n\n // Set active network\n const activeNetwork = this.options.resetNetwork\n ? defaultNetwork\n : persistedState?.activeNetwork || defaultNetwork\n\n // Validate active network exists in config\n if (!networkConfig[activeNetwork]) {\n throw new Error(`Network \"${activeNetwork}\" not found in network configuration`)\n }\n\n // Create Algod client for active network\n const algodClient = this.createAlgodClient(networkConfig[activeNetwork].algod)\n\n // Create initial state\n const initialState: State = {\n ...DEFAULT_STATE,\n ...persistedState,\n networkConfig,\n activeNetwork,\n algodClient\n }\n\n // Create store\n this.store = new Store<State>(initialState, {\n onUpdate: () => this.savePersistedState()\n })\n\n // Save persisted state immediately\n this.savePersistedState()\n\n // Subscribe to store updates\n this.subscribe = (callback: (state: State) => void): (() => void) => {\n const unsubscribe = this.store.subscribe(() => {\n callback(this.store.state)\n })\n\n return unsubscribe\n }\n\n // Initialize wallets\n this.initializeWallets(wallets)\n }\n\n // ---------- Logging ----------------------------------------------- //\n\n private initializeLogger(\n options: WalletManagerOptions\n ): ReturnType<typeof logger.createScopedLogger> {\n const logLevel = this.determineLogLevel(options)\n Logger.setLevel(logLevel)\n return logger.createScopedLogger('WalletManager')\n }\n\n private determineLogLevel(options: WalletManagerOptions): LogLevel {\n if (options?.debug) {\n return LogLevel.DEBUG\n }\n return options?.logLevel !== undefined ? options.logLevel : LogLevel.WARN\n }\n\n // ---------- Store ------------------------------------------------- //\n\n public get algodClient(): algosdk.Algodv2 {\n return this.store.state.algodClient\n }\n\n public set algodClient(algodClient: algosdk.Algodv2) {\n this.store.setState((state) => ({\n ...state,\n algodClient\n }))\n }\n\n private loadPersistedState(): PersistedState | null {\n try {\n const serializedState = StorageAdapter.getItem(LOCAL_STORAGE_KEY)\n if (serializedState === null) {\n return null\n }\n const parsedState = JSON.parse(serializedState)\n if (!isValidPersistedState(parsedState)) {\n this.logger.warn('Parsed state:', parsedState)\n throw new Error('Persisted state is invalid')\n }\n return parsedState\n } catch (error: any) {\n this.logger.error(`Could not load state from local storage: ${error.message}`)\n return null\n }\n }\n\n private savePersistedState(): void {\n try {\n const { wallets, activeWallet, activeNetwork, networkConfig } = this.store.state\n const persistedState: PersistedState = {\n wallets,\n activeWallet,\n activeNetwork,\n customNetworkConfigs: {}\n }\n\n // Compare current network config with base config to find user customizations\n for (const [networkId, currentConfig] of Object.entries(networkConfig)) {\n const baseNetworkConfig = this.baseNetworkConfig[networkId]\n if (!baseNetworkConfig) continue\n\n // Check if there are any differences from base config\n const customizations: Partial<NetworkConfig> = {}\n let hasCustomizations = false\n\n // Compare algod configuration\n if (JSON.stringify(currentConfig.algod) !== JSON.stringify(baseNetworkConfig.algod)) {\n customizations.algod = currentConfig.algod\n hasCustomizations = true\n }\n\n // If there are customizations, add them to the persisted state\n if (hasCustomizations) {\n persistedState.customNetworkConfigs = {\n ...(persistedState.customNetworkConfigs || {}),\n [networkId]: customizations\n }\n }\n }\n\n const serializedState = JSON.stringify(persistedState)\n StorageAdapter.setItem(LOCAL_STORAGE_KEY, serializedState)\n } catch (error) {\n this.logger.error('Could not save state to local storage:', error)\n }\n }\n\n // ---------- Status ------------------------------------------------ //\n\n public get status(): ManagerStatus {\n return this.store.state.managerStatus\n }\n\n public get isReady(): boolean {\n return this.store.state.managerStatus === 'ready'\n }\n\n // ---------- Wallets ----------------------------------------------- //\n\n /**\n * Derive the wallet key from wallet config.\n * For WalletConnect with a skin option, returns 'walletconnect:skinId'.\n * For other wallets, returns the wallet ID.\n */\n private deriveWalletKey<T extends keyof WalletConfigMap>(\n walletId: T,\n walletOptions?: WalletOptions<T>\n ): WalletKey {\n // Check if this is a WalletConnect config with a skin option\n if (walletId === WalletId.WALLETCONNECT && walletOptions) {\n const options = walletOptions as WalletOptions<WalletId.WALLETCONNECT>\n if (options.skin) {\n const skin = resolveSkin(options.skin)\n if (skin) {\n return `walletconnect:${skin.id}`\n }\n }\n }\n return walletId\n }\n\n private initializeWallets<T extends keyof WalletConfigMap>(\n walletsConfig: Array<T | WalletIdConfig<T>>\n ) {\n this.logger.info('Initializing wallets...')\n\n for (const walletConfig of walletsConfig) {\n let walletId: T\n let walletOptions: WalletOptions<T> | undefined\n let walletMetadata: Partial<WalletMetadata> | undefined\n\n // Parse wallet config\n if (typeof walletConfig === 'string') {\n walletId = walletConfig\n } else {\n const { id, options, metadata } = walletConfig\n walletId = id\n walletOptions = options\n walletMetadata = metadata\n }\n\n // Derive wallet key (handles skin-based composite keys)\n const walletKey = this.deriveWalletKey(walletId, walletOptions)\n\n // Check for duplicate wallet keys\n if (this._clients.has(walletKey)) {\n this.logger.warn(`Duplicate wallet key: ${walletKey}. Skipping...`)\n continue\n }\n\n // Get wallet class\n const walletMap = createWalletMap()\n const WalletClass = walletMap[walletId]\n if (!WalletClass) {\n this.logger.error(`Wallet not found: ${walletId}`)\n continue\n }\n\n // Initialize wallet\n const walletInstance = new WalletClass({\n id: walletId,\n metadata: walletMetadata,\n options: walletOptions as any,\n getAlgodClient: this.getAlgodClient,\n store: this.store,\n subscribe: this.subscribe,\n managerUIHooks: this._uiHooks\n })\n\n this._clients.set(walletKey, walletInstance)\n this.logger.info(`✅ Initialized ${walletKey}`)\n }\n\n const state = this.store.state\n\n // Check if connected wallets are still valid\n const connectedWallets = Object.keys(state.wallets) as WalletKey[]\n for (const walletKey of connectedWallets) {\n if (!this._clients.has(walletKey)) {\n this.logger.warn(`Connected wallet not found: ${walletKey}`)\n removeWallet(this.store, { walletId: walletKey })\n }\n }\n\n // Check if active wallet is still valid\n if (state.activeWallet && !this._clients.has(state.activeWallet)) {\n this.logger.warn(`Active wallet not found: ${state.activeWallet}`)\n setActiveWallet(this.store, { walletId: null })\n }\n }\n\n public get wallets(): BaseWallet[] {\n return [...this._clients.values()]\n }\n\n public getWallet(walletKey: WalletKey): BaseWallet | undefined {\n return this._clients.get(walletKey)\n }\n\n public async resumeSessions(): Promise<void> {\n try {\n const promises = this.wallets.map((wallet) => wallet?.resumeSession())\n await Promise.all(promises)\n } finally {\n this.store.setState((state) => ({\n ...state,\n managerStatus: 'ready'\n }))\n }\n }\n\n public async disconnect(): Promise<void> {\n const promises = this.wallets\n .filter((wallet) => wallet.isConnected)\n .map((wallet) => wallet?.disconnect())\n\n await Promise.all(promises)\n }\n\n // ---------- UI Hooks ----------------------------------------------- //\n\n public registerUIHook<K extends keyof UIHooks>(name: K, callback: UIHooks[K]): void {\n this._uiHooks[name] = callback\n }\n\n public unregisterUIHook(name: keyof UIHooks): void {\n delete this._uiHooks[name]\n }\n\n // ---------- Network ----------------------------------------------- //\n\n private initNetworkConfig(\n baseConfig: Record<string, NetworkConfig>,\n persistedState?: PersistedState | null\n ): Record<string, NetworkConfig> {\n this.logger.info('Initializing network configuration...')\n\n // Use provided persisted state for custom configurations\n const customConfigs = persistedState?.customNetworkConfigs || {}\n\n // Merge base config with custom overrides\n const config: Record<string, NetworkConfig> = {}\n for (const [networkId, baseNetworkConfig] of Object.entries(baseConfig)) {\n const customNetworkConfig = customConfigs[networkId]\n config[networkId] = {\n ...baseNetworkConfig,\n ...customNetworkConfig,\n // Ensure algod config is also deeply merged\n algod: {\n ...baseNetworkConfig.algod,\n ...(customNetworkConfig?.algod || {})\n }\n }\n }\n\n // Validate network configurations\n for (const [id, network] of Object.entries(config)) {\n if (!isNetworkConfig(network)) {\n throw new Error(`Invalid network configuration for \"${id}\"`)\n }\n }\n\n this.logger.debug('Network configuration:', config)\n return config\n }\n\n private createAlgodClient(config: AlgodConfig): algosdk.Algodv2 {\n this.logger.info(`Creating new Algodv2 client...`)\n\n const { token = '', baseServer, port = '', headers = {} } = config\n return new algosdk.Algodv2(token, baseServer, port, headers)\n }\n\n public getAlgodClient = (): algosdk.Algodv2 => {\n return this.algodClient\n }\n\n public setActiveNetwork = async (networkId: NetworkId | string): Promise<void> => {\n if (this.activeNetwork === networkId) {\n return\n }\n\n if (!this.networkConfig[networkId]) {\n throw new Error(`Network \"${networkId}\" not found in network configuration`)\n }\n\n const algodClient = this.createAlgodClient(this.networkConfig[networkId].algod)\n setActiveNetwork(this.store, { networkId, algodClient })\n\n this.logger.info(`✅ Active network set to ${networkId}`)\n }\n\n public updateAlgodConfig(networkId: string, algodConfig: Partial<AlgodConfig>): void {\n // Verify network exists\n if (!this.networkConfig[networkId]) {\n throw new Error(`Network \"${networkId}\" not found in network configuration`)\n }\n\n // Create new config merging existing with updates\n const updatedConfig = {\n ...this.networkConfig[networkId],\n algod: {\n ...this.networkConfig[networkId].algod,\n ...algodConfig\n }\n }\n\n // Validate the new configuration\n if (!isNetworkConfig(updatedConfig)) {\n throw new Error('Invalid network configuration')\n }\n\n // Update the network config\n this.store.setState((state) => ({\n ...state,\n networkConfig: {\n ...state.networkConfig,\n [networkId]: updatedConfig\n }\n }))\n\n // If this is the active network, update the algod client\n if (this.activeNetwork === networkId) {\n this.algodClient = this.createAlgodClient(updatedConfig.algod)\n }\n\n // Save the updated configuration\n this.savePersistedState()\n\n this.logger.info(`✅ Updated algod configuration for ${networkId}`)\n }\n\n public resetNetworkConfig(networkId: string): void {\n // Verify network exists\n if (!this.baseNetworkConfig[networkId]) {\n throw new Error(`Network \"${networkId}\" not found in network configuration`)\n }\n\n // Reset to base configuration\n this.store.setState((state) => ({\n ...state,\n networkConfig: {\n ...state.networkConfig,\n [networkId]: { ...this.baseNetworkConfig[networkId] }\n }\n }))\n\n // If this is the active network, update the algod client\n if (this.activeNetwork === networkId) {\n this.algodClient = this.createAlgodClient(this.baseNetworkConfig[networkId].algod)\n }\n\n // Load current persisted state\n const persistedState = this.loadPersistedState()\n if (persistedState?.customNetworkConfigs) {\n // Remove the network's customizations\n delete persistedState.customNetworkConfigs[networkId]\n // Save the updated state\n StorageAdapter.setItem(LOCAL_STORAGE_KEY, JSON.stringify(persistedState))\n }\n\n this.logger.info(`✅ Reset network configuration for ${networkId}`)\n }\n\n public get activeNetwork(): string {\n return this.store.state.activeNetwork\n }\n\n public get networkConfig(): Record<string, NetworkConfig> {\n return this.store.state.networkConfig\n }\n\n public get activeNetworkConfig(): NetworkConfig {\n const { networkConfig, activeNetwork } = this.store.state\n return networkConfig[activeNetwork]\n }\n\n // ---------- Active Wallet ----------------------------------------- //\n\n public get activeWallet(): BaseWallet | null {\n const state = this.store.state\n const activeWallet = this.wallets.find((wallet) => wallet.walletKey === state.activeWallet)\n if (!activeWallet) {\n return null\n }\n\n return activeWallet\n }\n\n public get activeWalletAccounts(): WalletAccount[] | null {\n if (!this.activeWallet) {\n return null\n }\n return this.activeWallet.accounts\n }\n\n public get activeWalletAddresses(): string[] | null {\n if (!this.activeWallet) {\n return null\n }\n return this.activeWallet.accounts.map((account) => account.address)\n }\n\n public get activeAccount(): WalletAccount | null {\n if (!this.activeWallet) {\n return null\n }\n return this.activeWallet.activeAccount\n }\n\n public get activeAddress(): string | null {\n if (!this.activeAccount) {\n return null\n }\n return this.activeAccount.address\n }\n\n // ---------- Sign Transactions ------------------------------------- //\n\n public get signTransactions(): BaseWallet['signTransactions'] {\n if (!this.activeWallet) {\n this.logger.error('No active wallet found!')\n throw new Error('No active wallet found!')\n }\n return this.activeWallet.signTransactions\n }\n\n public get transactionSigner(): algosdk.TransactionSigner {\n if (!this.activeWallet) {\n this.logger.error('No active wallet found!')\n throw new Error('No active wallet found!')\n }\n return this.activeWallet.transactionSigner\n }\n}\n","import algosdk from 'algosdk'\n\nexport interface AlgodConfig {\n token: string | algosdk.AlgodTokenHeader | algosdk.CustomTokenHeader | algosdk.BaseHTTPClient\n baseServer: string\n port?: string | number\n headers?: Record<string, string>\n}\n\nexport interface NetworkConfig {\n algod: AlgodConfig\n genesisHash?: string\n genesisId?: string\n isTestnet?: boolean\n caipChainId?: string\n}\n\n// Default configurations\nexport const DEFAULT_NETWORK_CONFIG: Record<string, NetworkConfig> = {\n mainnet: {\n algod: {\n token: '',\n baseServer: 'https://mainnet-api.4160.nodely.dev',\n headers: {}\n },\n isTestnet: false,\n genesisHash: 'wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=',\n genesisId: 'mainnet-v1.0',\n caipChainId: 'algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73k'\n },\n testnet: {\n algod: {\n token: '',\n baseServer: 'https://testnet-api.4160.nodely.dev',\n headers: {}\n },\n isTestnet: true,\n genesisHash: 'SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=',\n genesisId: 'testnet-v1.0',\n caipChainId: 'algorand:SGO1GKSzyE7IEPItTxCByw9x8FmnrCDe'\n },\n betanet: {\n algod: {\n token: '',\n baseServer: 'https://betanet-api.4160.nodely.dev',\n headers: {}\n },\n isTestnet: true,\n genesisHash: 'mFgazF-2uRS1tMiL9dsj01hJGySEmPN2OvOTQHJ6iQg=',\n genesisId: 'betanet-v1.0',\n caipChainId: 'algorand:mFgazF-2uRS1tMiL9dsj01hJGySEmPN2'\n },\n fnet: {\n algod: {\n token: '',\n baseServer: 'https://fnet-api.4160.nodely.dev',\n headers: {}\n },\n isTestnet: true,\n genesisHash: 'kUt08LxeVAAGHnh4JoAoAMM9ql_hBwSoRrQQKWSVgxk=',\n genesisId: 'fnet-v1',\n caipChainId: 'algorand:kUt08LxeVAAGHnh4JoAoAMM9ql_hBwSo'\n },\n localnet: {\n algod: {\n token: 'a'.repeat(64),\n baseServer: 'http://localhost',\n port: 4001,\n headers: {}\n },\n isTestnet: true\n }\n}\n\n// Type for configuring default networks, excluding immutable identifiers\nexport type DefaultNetworkConfig = Omit<\n Partial<NetworkConfig>,\n 'genesisHash' | 'genesisId' | 'caipChainId'\n>\n\nexport class NetworkConfigBuilder {\n private networks: Map<string, NetworkConfig>\n\n constructor() {\n this.networks = new Map(Object.entries(DEFAULT_NETWORK_CONFIG))\n }\n\n // Methods to customize default networks\n mainnet(config: DefaultNetworkConfig) {\n this.networks.set('mainnet', {\n ...DEFAULT_NETWORK_CONFIG.mainnet,\n ...config,\n genesisHash: DEFAULT_NETWORK_CONFIG.mainnet.genesisHash!,\n genesisId: DEFAULT_NETWORK_CONFIG.mainnet.genesisId!,\n caipChainId: DEFAULT_NETWORK_CONFIG.mainnet.caipChainId!,\n algod: {\n ...DEFAULT_NETWORK_CONFIG.mainnet.algod,\n ...(config.algod || {})\n }\n })\n return this\n }\n\n testnet(config: DefaultNetworkConfig) {\n this.networks.set('testnet', {\n ...DEFAULT_NETWORK_CONFIG.testnet,\n ...config,\n genesisHash: DEFAULT_NETWORK_CONFIG.testnet.genesisHash!,\n genesisId: DEFAULT_NETWORK_CONFIG.testnet.genesisId!,\n caipChainId: DEFAULT_NETWORK_CONFIG.testnet.caipChainId!,\n algod: {\n ...DEFAULT_NETWORK_CONFIG.testnet.algod,\n ...(config.algod || {})\n }\n })\n return this\n }\n\n betanet(config: DefaultNetworkConfig) {\n this.networks.set('betanet', {\n ...DEFAULT_NETWORK_CONFIG.betanet,\n ...config,\n genesisHash: DEFAULT_NETWORK_CONFIG.betanet.genesisHash!,\n genesisId: DEFAULT_NETWORK_CONFIG.betanet.genesisId!,\n caipChainId: DEFAULT_NETWORK_CONFIG.betanet.caipChainId!,\n algod: {\n ...DEFAULT_NETWORK_CONFIG.betanet.algod,\n ...(config.algod || {})\n }\n })\n return this\n }\n\n fnet(config: DefaultNetworkConfig) {\n this.networks.set('fnet', {\n ...DEFAULT_NETWORK_CONFIG.fnet,\n ...config,\n genesisHash: DEFAULT_NETWORK_CONFIG.fnet.genesisHash!,\n genesisId: DEFAULT_NETWORK_CONFIG.fnet.genesisId!,\n caipChainId: DEFAULT_NETWORK_CONFIG.fnet.caipChainId!,\n algod: {\n ...DEFAULT_NETWORK_CONFIG.fnet.algod,\n ...(config.algod || {})\n }\n })\n return this\n }\n\n localnet(config: Partial<NetworkConfig>) {\n this.networks.set('localnet', {\n ...DEFAULT_NETWORK_CONFIG.localnet,\n ...config,\n algod: {\n ...DEFAULT_NETWORK_CONFIG.localnet.algod,\n ...(config.algod || {})\n }\n })\n return this\n }\n\n // Method to add custom networks (still needs full NetworkConfig)\n addNetwork(id: string, config: NetworkConfig) {\n if (DEFAULT_NETWORK_CONFIG[id]) {\n throw new Error(\n `Cannot add network with reserved id \"${id}\". Use the ${id}() method instead.`\n )\n }\n this.networks.set(id, config)\n return this\n }\n\n build() {\n return Object.fromEntries(this.networks)\n }\n}\n\n// Create a default builder with common presets\nexport const createNetworkConfig = () => new NetworkConfigBuilder().build()\n\n// Check if the algod token is valid\nfunction isValidToken(\n token: unknown\n): token is string | algosdk.AlgodTokenHeader | algosdk.CustomTokenHeader | algosdk.BaseHTTPClient {\n if (typeof token === 'string') return true\n if (typeof token !== 'object' || token === null) return false\n\n // Check if it's an AlgodTokenHeader\n if ('X-Algo-API-Token' in token && typeof token['X-Algo-API-Token'] === 'string') return true\n\n // Check if it's a BaseHTTPClient\n if ('get' in token && 'post' in token && 'delete' in token) return true\n\n // Check if it's a CustomTokenHeader (object with string values)\n return Object.values(token).every((value) => typeof value === 'string')\n}\n\n// Type guard for runtime validation\nexport function isNetworkConfig(config: unknown): config is NetworkConfig {\n if (typeof config !== 'object' || config === null) return false\n\n const { algod, isTestnet, genesisHash, genesisId, caipChainId } = config as NetworkConfig\n\n const isValidAlgod =\n typeof algod === 'object' &&\n algod !== null &&\n isValidToken(algod.token) &&\n typeof algod.baseServer === 'string'\n\n return (\n isValidAlgod &&\n (isTestnet === undefined || typeof isTestnet === 'boolean') &&\n (genesisHash === undefined || typeof genesisHash === 'string') &&\n (genesisId === undefined || typeof genesisId === 'string') &&\n (caipChainId === undefined || typeof caipChainId === 'string')\n )\n}\n\nexport enum NetworkId {\n MAINNET = 'mainnet',\n TESTNET = 'testnet',\n BETANET = 'betanet',\n FNET = 'fnet',\n LOCALNET = 'localnet'\n}\n","export class StorageAdapter {\n static getItem(key: string): string | null {\n if (typeof window === 'undefined') {\n return null\n }\n return localStorage.getItem(key)\n }\n\n static setItem(key: string, value: string): void {\n if (typeof window === 'undefined') {\n return\n }\n localStorage.setItem(key, value)\n }\n\n static removeItem(key: string): void {\n if (typeof window === 'undefined') {\n return\n }\n localStorage.removeItem(key)\n }\n}\n","import algosdk from 'algosdk'\nimport { logger } from 'src/logger'\nimport { DEFAULT_NETWORK_CONFIG, NetworkConfig, NetworkId } from 'src/network'\nimport { WalletId, type WalletAccount, type WalletKey } from 'src/wallets/types'\nimport type { Store } from '@tanstack/store'\n\nexport type WalletState = {\n accounts: WalletAccount[]\n activeAccount: WalletAccount | null\n}\n\nexport type WalletStateMap = Partial<Record<WalletKey, WalletState>>\n\nexport type ManagerStatus = 'initializing' | 'ready'\n\nexport interface State {\n wallets: WalletStateMap\n activeWallet: WalletKey | null\n activeNetwork: string\n algodClient: algosdk.Algodv2\n managerStatus: ManagerStatus\n networkConfig: Record<string, NetworkConfig>\n customNetworkConfigs: Record<string, Partial<NetworkConfig>>\n}\n\nexport const DEFAULT_STATE: State = {\n wallets: {},\n activeWallet: null,\n activeNetwork: 'testnet',\n algodClient: new algosdk.Algodv2('', 'https://testnet-api.4160.nodely.dev/'),\n managerStatus: 'initializing',\n networkConfig: DEFAULT_NETWORK_CONFIG,\n customNetworkConfigs: {}\n}\n\nexport type PersistedState = Omit<State, 'algodClient' | 'managerStatus' | 'networkConfig'>\n\nexport const LOCAL_STORAGE_KEY = '@txnlab/use-wallet:v4'\n\n// State mutations\n\nexport function addWallet(\n store: Store<State>,\n { walletId, wallet }: { walletId: WalletKey; wallet: WalletState }\n) {\n store.setState((state) => {\n const updatedWallets = {\n ...state.wallets,\n [walletId]: {\n accounts: wallet.accounts.map((account) => ({ ...account })),\n activeAccount: wallet.activeAccount ? { ...wallet.activeAccount } : null\n }\n }\n\n return {\n ...state,\n wallets: updatedWallets,\n activeWallet: walletId\n }\n })\n}\n\nexport function removeWallet(store: Store<State>, { walletId }: { walletId: WalletKey }) {\n store.setState((state) => {\n const updatedWallets = { ...state.wallets }\n delete updatedWallets[walletId]\n\n return {\n ...state,\n wallets: updatedWallets,\n activeWallet: state.activeWallet === walletId ? null : state.activeWallet\n }\n })\n}\n\nexport function setActiveWallet(store: Store<State>, { walletId }: { walletId: WalletKey | null }) {\n store.setState((state) => ({\n ...state,\n activeWallet: walletId\n }))\n}\n\nexport function setActiveAccount(\n store: Store<State>,\n { walletId, address }: { walletId: WalletKey; address: string }\n) {\n store.setState((state) => {\n const wallet = state.wallets[walletId]\n if (!wallet) {\n logger.warn(`Wallet with id \"${walletId}\" not found`)\n return state\n }\n\n const newActiveAccount = wallet.accounts.find((a) => a.address === address)\n if (!newActiveAccount) {\n logger.warn(`Account with address ${address} not found in wallet \"${walletId}\"`)\n return state\n }\n\n const updatedWallet = {\n ...wallet,\n accounts: wallet.accounts.map((account) => ({ ...account })),\n activeAccount: { ...newActiveAccount }\n }\n\n const updatedWallets = {\n ...state.wallets,\n [walletId]: updatedWallet\n }\n\n return {\n ...state,\n wallets: updatedWallets\n }\n })\n}\n\nexport function setAccounts(\n store: Store<State>,\n { walletId, accounts }: { walletId: WalletKey; accounts: WalletAccount[] }\n) {\n store.setState((state) => {\n const wallet = state.wallets[walletId]\n if (!wallet) {\n logger.warn(`Wallet with id \"${walletId}\" not found`)\n return state\n }\n\n const newAccounts = accounts.map((account) => ({ ...account }))\n\n const isActiveAccountConnected = newAccounts.some(\n (account) => account.address === wallet.activeAccount?.address\n )\n\n const newActiveAccount = isActiveAccountConnected\n ? { ...wallet.activeAccount! }\n : newAccounts[0] || null\n\n const updatedWallet = {\n ...wallet,\n accounts: newAccounts,\n activeAccount: newActiveAccount\n }\n\n const updatedWallets = {\n ...state.wallets,\n [walletId]: updatedWallet\n }\n\n return {\n ...state,\n wallets: updatedWallets\n }\n })\n}\n\nexport function setActiveNetwork(\n store: Store<State>,\n { networkId, algodClient }: { networkId: NetworkId | string; algodClient: algosdk.Algodv2 }\n) {\n store.setState((state) => ({\n ...state,\n activeNetwork: networkId,\n algodClient\n }))\n}\n\n// Type guards\n\nexport function isValidWalletId(walletId: any): walletId is WalletId {\n return Object.values(WalletId).includes(walletId)\n}\n\n/**\n * Check if a value is a valid WalletKey.\n * A WalletKey can be either:\n * - A standard WalletId enum value\n * - A composite string in the format 'walletconnect:skinId'\n */\nexport function isValidWalletKey(walletKey: any): walletKey is WalletKey {\n if (isValidWalletId(walletKey)) {\n return true\n }\n // Check for composite key format: walletconnect:skinId\n if (typeof walletKey === 'string' && walletKey.startsWith(`${WalletId.WALLETCONNECT}:`)) {\n const skinId = walletKey.slice(`${WalletId.WALLETCONNECT}:`.length)\n return skinId.length > 0\n }\n return false\n}\n\nexport function isValidWalletAccount(account: any): account is WalletAccount {\n return (\n typeof account === 'object' &&\n account !== null &&\n typeof account.name === 'string' &&\n typeof account.address === 'string'\n )\n}\n\nexport function isValidWalletState(wallet: any): wallet is WalletState {\n return (\n typeof wallet === 'object' &&\n wallet !== null &&\n Array.isArray(wallet.accounts) &&\n wallet.accounts.every(isValidWalletAccount) &&\n (wallet.activeAccount === null || isValidWalletAccount(wallet.activeAccount))\n )\n}\n\nexport function isValidPersistedState(state: unknown): state is PersistedState {\n return (\n typeof state === 'object' &&\n state !== null &&\n 'wallets' in state &&\n 'activeWallet' in state &&\n 'activeNetwork' in state &&\n (!('customNetworkConfigs' in state) ||\n (typeof state.customNetworkConfigs === 'object' && state.customNetworkConfigs !== null))\n )\n}\n","import { CustomWallet, CustomWalletOptions } from './custom'\nimport { DeflyWallet, type DeflyWalletConnectOptions } from './defly'\nimport { DeflyWebWallet } from './defly-web'\nimport { ExodusWallet, type ExodusOptions } from './exodus'\nimport { KibisisWallet } from './kibisis'\nimport { KmdWallet, type KmdOptions } from './kmd'\nimport { LuteConnectOptions, LuteWallet } from './lute'\nimport { MagicAuth, MagicAuthOptions } from './magic'\nimport { MetaMaskWallet, type MetaMaskWalletOptions } from './metamask'\nimport { MnemonicWallet, type MnemonicOptions } from './mnemonic'\nimport { PeraWallet, type PeraWalletConnectOptions } from './pera'\nimport { RainbowWallet, type RainbowWalletOptions } from './rainbow'\nimport { WalletConnect, type WalletConnectOptions } from './walletconnect'\nimport { Web3AuthWallet, type Web3AuthOptions } from './web3auth'\nimport { BiatecWallet } from './biatec'\nimport type { Store } from '@tanstack/store'\nimport type algosdk from 'algosdk'\nimport type { State } from 'src/store'\nimport { W3Wallet } from './w3wallet'\n\nexport enum WalletId {\n BIATEC = 'biatec',\n DEFLY = 'defly',\n DEFLY_WEB = 'defly-web',\n CUSTOM = 'custom',\n EXODUS = 'exodus',\n KIBISIS = 'kibisis',\n KMD = 'kmd',\n LUTE = 'lute',\n MAGIC = 'magic',\n METAMASK = 'metamask',\n MNEMONIC = 'mnemonic',\n PERA = 'pera',\n RAINBOW = 'rainbow',\n WALLETCONNECT = 'walletconnect',\n WEB3AUTH = 'web3auth',\n W3_WALLET = 'w3-wallet'\n}\n\n// ---------- WalletConnect Skins ---------- //\n\n/**\n * Metadata for a WalletConnect skin. Used to customize the appearance of\n * a WalletConnect-based wallet in the UI.\n */\nexport interface WalletConnectSkin {\n /** Unique identifier for the skin (e.g., 'biatec', 'voiwallet') */\n id: string\n /** Display name for the wallet */\n name: string\n /** Wallet icon as a data URI or URL */\n icon: string\n}\n\n/**\n * Skin option can be either:\n * - A string ID referencing a built-in skin (e.g., 'biatec')\n * - A full WalletConnectSkin object for custom skins\n */\nexport type WalletConnectSkinOption = string | WalletConnectSkin\n\n/**\n * Composite key type that can be either:\n * - A standard WalletId (for backward compatibility)\n * - A composite string for skinned WalletConnect instances (e.g., 'walletconnect:biatec')\n */\nexport type WalletKey = WalletId | `${WalletId.WALLETCONNECT}:${string}`\n\nexport type WalletMap = {\n [WalletId.BIATEC]: typeof BiatecWallet\n [WalletId.CUSTOM]: typeof CustomWallet\n [WalletId.DEFLY]: typeof DeflyWallet\n [WalletId.DEFLY_WEB]: typeof DeflyWebWallet\n [WalletId.EXODUS]: typeof ExodusWallet\n [WalletId.KIBISIS]: typeof KibisisWallet\n [WalletId.KMD]: typeof KmdWallet\n [WalletId.LUTE]: typeof LuteWallet\n [WalletId.MAGIC]: typeof MagicAuth\n [WalletId.METAMASK]: typeof MetaMaskWallet\n [WalletId.MNEMONIC]: typeof MnemonicWallet\n [WalletId.PERA]: typeof PeraWallet\n [WalletId.RAINBOW]: typeof RainbowWallet\n [WalletId.WALLETCONNECT]: typeof WalletConnect\n [WalletId.WEB3AUTH]: typeof Web3AuthWallet\n [WalletId.W3_WALLET]: typeof W3Wallet\n}\n\nexport type WalletOptionsMap = {\n [WalletId.BIATEC]: WalletConnectOptions\n [WalletId.CUSTOM]: CustomWalletOptions\n [WalletId.DEFLY]: DeflyWalletConnectOptions\n [WalletId.DEFLY_WEB]: Record<string, never>\n [WalletId.EXODUS]: ExodusOptions\n [WalletId.KIBISIS]: Record<string, never>\n [WalletId.KMD]: KmdOptions\n [WalletId.LUTE]: LuteConnectOptions\n [WalletId.MAGIC]: MagicAuthOptions\n [WalletId.METAMASK]: MetaMaskWalletOptions\n [WalletId.MNEMONIC]: MnemonicOptions\n [WalletId.PERA]: PeraWalletConnectOptions\n [WalletId.RAINBOW]: RainbowWalletOptions\n [WalletId.WALLETCONNECT]: WalletConnectOptions\n [WalletId.WEB3AUTH]: Web3AuthOptions\n [WalletId.W3_WALLET]: Record<string, never>\n}\n\nexport type SupportedWallet = WalletIdConfig<WalletId> | WalletId\n\nexport type WalletConfigMap = {\n [K in keyof WalletOptionsMap]: {\n options?: WalletOptionsMap[K]\n metadata?: Partial<WalletMetadata>\n }\n}\n\nexport type WalletOptions<T extends keyof WalletOptionsMap> = WalletOptionsMap[T]\n\nexport type WalletConfig<T extends keyof WalletConfigMap> = WalletConfigMap[T]\n\nexport type WalletIdConfig<T extends keyof WalletConfigMap> = {\n [K in T]: {\n id: K\n } & WalletConfigMap[K]\n}[T]\n\ntype NonEmptyArray<T> = [T, ...T[]]\n\nexport type SupportedWallets = NonEmptyArray<SupportedWallet>\n\nexport type WalletMetadata = {\n name: string\n icon: string\n isLiquid?: 'EVM'\n}\n\nexport type LiquidEvmMetadata = WalletMetadata & {\n isLiquid: 'EVM'\n}\n\nexport interface UIHooks {\n onBeforeSign?: (\n txnGroup: algosdk.Transaction[] | Uint8Array[],\n indexesToSign?: number[]\n ) => Promise<void>\n onAfterSign?: (success: boolean, errorMessage?: string) => void\n onConnect?: (evmAccount: { evmAddress: string; algorandAddress: string }) => void\n}\n\nexport interface BaseWalletConstructor {\n id: WalletId\n /** Optional wallet key override. Defaults to id. Used for skinned WalletConnect instances. */\n walletKey?: WalletKey\n metadata: Partial<WalletMetadata> | undefined\n getAlgodClient: () => algosdk.Algodv2\n store: Store<State>\n subscribe: (callback: (state: State) => void) => () => void\n managerUIHooks?: UIHooks\n}\n\nexport type WalletConstructor<T extends keyof WalletOptionsMap> = BaseWalletConstructor & {\n options?: WalletOptions<T>\n defaultMetadata?: WalletMetadata\n}\n\nexport type WalletAccount = {\n name: string\n address: string\n}\n\n// Transaction types\n\n/** @see https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0001.md#interface-multisigmetadata */\nexport interface MultisigMetadata {\n /**\n * Multisig version.\n */\n version: number\n\n /**\n * Multisig threshold value. Authorization requires a subset of signatures,\n * equal to or greater than the threshold value.\n */\n threshold: number\n\n /**\n * List of Algorand addresses of possible signers for this\n * multisig. Order is important.\n */\n addrs: string[]\n}\n\n/** @see https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0001.md#interface-wallettransaction */\nexport interface WalletTransaction {\n /**\n * Base64 encoding of the canonical msgpack encoding of a Transaction.\n */\n txn: string\n\n /**\n * Optional authorized address used to sign the transaction when the account\n * is rekeyed. Also called the signor/sgnr.\n */\n authAddr?: string\n\n /**\n * Multisig metadata used to sign the transaction\n */\n msig?: MultisigMetadata\n\n /**\n * Optional list of addresses that must sign the transactions\n */\n signers?: string[]\n\n /**\n * Optional base64 encoding of the canonical msgpack encoding of a\n * SignedTxn corresponding to txn, when signers=[]\n */\n stxn?: string\n\n /**\n * Optional message explaining the reason of the transaction\n */\n message?: string\n\n /**\n * Optional message explaining the reason of this group of transaction\n * Field only allowed in the first transaction of a group\n */\n groupMessage?: string\n}\n\n/** @see https://github.com/perawallet/connect/blob/1.3.4/src/util/model/peraWalletModels.ts */\nexport interface SignerTransaction {\n txn: algosdk.Transaction\n\n /**\n * Optional authorized address used to sign the transaction when\n * the account is rekeyed. Also called the signor/sgnr.\n */\n authAddr?: string\n\n /**\n * Optional list of addresses that must sign the transactions.\n * Wallet skips to sign this txn if signers is empty array.\n * If undefined, wallet tries to sign it.\n */\n signers?: string[]\n\n /**\n * Optional message explaining the reason of the transaction\n */\n message?: string\n}\n\nexport interface JsonRpcRequest<T = any> {\n id: number\n jsonrpc: string\n method: string\n params: T\n}\n\nexport class SignTxnsError extends Error {\n code: number\n data?: any\n\n constructor(message: string, code: number, data?: any) {\n super(message)\n this.name = 'SignTxnsError'\n this.code = code\n this.data = data\n }\n}\n\n// signData types\n\nexport interface Siwa {\n domain: string\n account_address: string\n uri: string\n version: string\n statement?: string\n nonce?: string\n 'issued-at'?: string\n 'expiration-time'?: string\n 'not-before'?: string\n 'request-id'?: string\n chain_id: '283'\n resources?: string[]\n type: 'ed25519'\n}\n\nexport class SignDataError extends Error {\n code: number\n data?: any\n\n constructor(message: string, code: number, data?: any) {\n super(message)\n this.name = 'SignDataError'\n this.code = code\n this.data = data\n }\n}\n\nexport interface SignData {\n data: string\n signer: Uint8Array\n domain: string\n authenticatorData: Uint8Array\n requestId?: string\n hdPath?: string\n signature?: Uint8Array\n}\n\nexport interface SignDataResponse extends SignData {\n signature: Uint8Array\n}\n\nexport enum ScopeType {\n UNKNOWN = -1,\n AUTH = 1\n}\n\nexport interface SignMetadata {\n scope: ScopeType\n encoding: string\n}\n","import algosdk from 'algosdk'\nimport { WalletId, type JsonRpcRequest, type WalletAccount, type WalletMap } from './wallets/types'\nimport { BiatecWallet } from './wallets/biatec'\nimport { CustomWallet } from './wallets/custom'\nimport { DeflyWallet } from './wallets/defly'\nimport { DeflyWebWallet } from './wallets/defly-web'\nimport { ExodusWallet } from './wallets/exodus'\nimport { KibisisWallet } from './wallets/kibisis'\nimport { KmdWallet } from './wallets/kmd'\nimport { LuteWallet } from './wallets/lute'\nimport { MagicAuth } from './wallets/magic'\nimport { MetaMaskWallet } from './wallets/metamask'\nimport { MnemonicWallet } from './wallets/mnemonic'\nimport { PeraWallet } from './wallets/pera'\nimport { RainbowWallet } from './wallets/rainbow'\nimport { WalletConnect } from './wallets/walletconnect'\nimport { Web3AuthWallet } from './wallets/web3auth'\nimport { W3Wallet } from './wallets/w3wallet'\n\nexport function createWalletMap(): WalletMap {\n return {\n [WalletId.BIATEC]: BiatecWallet,\n [WalletId.CUSTOM]: CustomWallet,\n [WalletId.DEFLY]: DeflyWallet,\n [WalletId.DEFLY_WEB]: DeflyWebWallet,\n [WalletId.EXODUS]: ExodusWallet,\n [WalletId.KIBISIS]: KibisisWallet,\n [WalletId.KMD]: KmdWallet,\n [WalletId.LUTE]: LuteWallet,\n [WalletId.MAGIC]: MagicAuth,\n [WalletId.METAMASK]: MetaMaskWallet,\n [WalletId.MNEMONIC]: MnemonicWallet,\n [WalletId.PERA]: PeraWallet,\n [WalletId.RAINBOW]: RainbowWallet,\n [WalletId.WALLETCONNECT]: WalletConnect,\n [WalletId.WEB3AUTH]: Web3AuthWallet,\n [WalletId.W3_WALLET]: W3Wallet\n }\n}\n\nexport function compareAccounts(accounts: WalletAccount[], compareTo: WalletAccount[]): boolean {\n const addresses = new Set(accounts.map((account) => account.address))\n const compareAddresses = new Set(compareTo.map((account) => account.address))\n\n if (addresses.size !== compareAddresses.size) {\n return false\n }\n\n // Check if every address in addresses is also in compareAddresses\n for (const address of addresses) {\n if (!compareAddresses.has(address)) {\n return false\n }\n }\n\n return true\n}\n\nexport function base64ToByteArray(blob: string): Uint8Array {\n return stringToByteArray(atob(blob))\n}\n\nexport function byteArrayToBase64(array: Uint8Array): string {\n return btoa(byteArrayToString(array))\n}\n\nexport function stringToByteArray(str: string): Uint8Array {\n const array = new Uint8Array(str.length)\n for (let i = 0; i < str.length; i++) {\n array[i] = str.charCodeAt(i)\n }\n return array\n}\n\nexport function byteArrayToString(array: Uint8Array): string {\n let result = ''\n for (let i = 0; i < array.length; i++) {\n result += String.fromCharCode(array[i])\n }\n return result\n}\n\nexport function isSignedTxn(txnObj: any): boolean {\n if (!txnObj || typeof txnObj !== 'object') return false\n if (!('sig' in txnObj && 'txn' in txnObj)) return false\n\n // Verify sig is a Uint8Array\n if (!(txnObj.sig instanceof Uint8Array)) return false\n\n // Verify txn is an object\n const txn = txnObj.txn\n if (!txn || typeof txn !== 'object') return false\n\n // Check for common transaction properties\n const hasRequiredProps = 'type' in txn && 'snd' in txn\n\n return hasRequiredProps\n}\n\nexport function isTransaction(item: any): item is algosdk.Transaction {\n return (\n item &&\n typeof item === 'object' &&\n 'sender' in item &&\n (item.sender instanceof algosdk.Address || typeof item.sender === 'string')\n )\n}\n\nexport function isTransactionArray(\n txnGroup: any\n): txnGroup is algosdk.Transaction[] | algosdk.Transaction[][] {\n if (!Array.isArray(txnGroup) || txnGroup.length === 0) {\n return false\n }\n\n if (isTransaction(txnGroup[0])) {\n return true\n }\n\n if (Array.isArray(txnGroup[0]) && txnGroup[0].length > 0 && isTransaction(txnGroup[0][0])) {\n return true\n }\n\n return false\n}\n\nexport function flattenTxnGroup<T>(txnGroup: T[]): T[] {\n if (!Array.isArray(txnGroup[0])) {\n return txnGroup\n }\n return (txnGroup as unknown as any[]).flat()\n}\n\nfunction getPayloadId(): number {\n const date = Date.now() * Math.pow(10, 3)\n const extra = Math.floor(Math.random() * Math.pow(10, 3))\n return date + extra\n}\n\nexport function formatJsonRpcRequest<T = any>(method: string, params: T): JsonRpcRequest<T> {\n return {\n id: getPayloadId(),\n jsonrpc: '2.0',\n method,\n params\n }\n}\n\n// @todo: remove\nexport function deepMerge(target: any, source: any): any {\n const isObject = (obj: any) => obj && typeof obj === 'object'\n\n if (!isObject(target) || !isObject(source)) {\n throw new Error('Target and source must be objects')\n }\n\n Object.keys(source).forEach((key) => {\n const targetValue = target[key]\n const sourceValue = source[key]\n\n if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\n target[key] = targetValue.concat(sourceValue)\n } else if (isObject(targetValue) && isObject(sourceValue)) {\n target[key] = deepMerge(Object.assign({}, targetValue), sourceValue)\n } else {\n target[key] = sourceValue\n }\n })\n\n return target\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, setAccounts, type State } from 'src/store'\nimport {\n base64ToByteArray,\n byteArrayToBase64,\n compareAccounts,\n flattenTxnGroup,\n formatJsonRpcRequest,\n isSignedTxn,\n isTransactionArray\n} from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport { resolveSkin } from 'src/wallets/skins'\nimport type { Store } from '@tanstack/store'\nimport type { WalletConnectModal, WalletConnectModalConfig } from '@walletconnect/modal'\nimport type SignClient from '@walletconnect/sign-client'\nimport type { SessionTypes, SignClientTypes } from '@walletconnect/types'\nimport type {\n WalletAccount,\n WalletConnectSkinOption,\n WalletConstructor,\n WalletId,\n WalletKey,\n WalletTransaction\n} from 'src/wallets/types'\n\ninterface SignClientOptions {\n projectId: string\n relayUrl?: string\n metadata?: SignClientTypes.Metadata\n}\n\ntype WalletConnectModalOptions = Pick<\n WalletConnectModalConfig,\n | 'enableExplorer'\n | 'explorerRecommendedWalletIds'\n | 'privacyPolicyUrl'\n | 'termsOfServiceUrl'\n | 'themeMode'\n | 'themeVariables'\n>\n\ntype WalletConnectBaseOptions = SignClientOptions & WalletConnectModalOptions\n\nexport interface WalletConnectOptions extends WalletConnectBaseOptions {\n /**\n * Optional skin to apply to this WalletConnect instance.\n * Can be either:\n * - A string ID referencing a built-in skin (e.g., 'biatec')\n * - A full skin object with id, name, and icon\n *\n * When a skin is applied, the wallet will use the skin's metadata\n * and a unique walletKey for state isolation.\n */\n skin?: WalletConnectSkinOption\n}\n\nexport type SignTxnsResponse = Array<Uint8Array | number[] | string | null | undefined>\n\nexport class SessionError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'SessionError'\n }\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 480 480\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"480\" height=\"480\" fill=\"#FFFFFF\" />\n <path fill=\"#3396FF\" d=\"M126.6,168c62.6-61.3,164.2-61.3,226.8,0l7.5,7.4c3.1,3.1,3.1,8,0,11.1l-25.8,25.2c-1.6,1.5-4.1,1.5-5.7,0l-10.4-10.2c-43.7-42.8-114.5-42.8-158.2,0l-11.1,10.9c-1.6,1.5-4.1,1.5-5.7,0l-25.8-25.2c-3.1-3.1-3.1-8,0-11.1L126.6,168zM406.7,220.2l22.9,22.5c3.1,3.1,3.1,8,0,11.1L326.2,355.1c-3.1,3.1-8.2,3.1-11.3,0l-73.4-71.9c-0.8-0.8-2.1-0.8-2.8,0l-73.4,71.9c-3.1,3.1-8.2,3.1-11.3,0L50.3,253.8c-3.1-3.1-3.1-8,0-11.1l22.9-22.5c3.1-3.1,8.2-3.1,11.3,0l73.4,71.9c0.8,0.8,2.1,0.8,2.8,0 l73.4-71.9c3.1-3.1,8.2-3.1,11.3,0l73.4,71.9c0.8,0.8,2.1,0.8,2.8,0l73.4-71.9C398.5,217.1,403.6,217.1,406.7,220.2L406.7,220.2z\" />\n</svg>\n`)}`\n\nexport class WalletConnect extends BaseWallet {\n private client: SignClient | null = null\n private options: SignClientOptions\n private modal: WalletConnectModal | null = null\n private modalOptions: WalletConnectModalOptions\n private session: SessionTypes.Struct | null = null\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options,\n metadata = {}\n }: WalletConstructor<WalletId.WALLETCONNECT>) {\n // Resolve skin from options (if provided)\n const skin = options?.skin ? resolveSkin(options.skin) : undefined\n\n // Derive walletKey: if skin is provided, use composite key 'walletconnect:skinId'\n const walletKey: WalletKey = skin ? `walletconnect:${skin.id}` : id\n\n // Build effective metadata: skin metadata -> user override\n const effectiveMetadata = skin ? { name: skin.name, icon: skin.icon, ...metadata } : metadata\n\n super({ id, walletKey, metadata: effectiveMetadata, getAlgodClient, store, subscribe })\n\n if (!options?.projectId) {\n this.logger.error('Missing required option: projectId')\n throw new Error('Missing required option: projectId')\n }\n\n const {\n projectId,\n relayUrl = 'wss://relay.walletconnect.com',\n metadata: metadataOptions,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n skin: _skinOption, // Extract skin to exclude from modalOptions\n ...modalOptions\n } = options\n\n const clientMetadata: SignClientTypes.Metadata = {\n ...this.getWindowMetadata(),\n ...metadataOptions\n }\n\n this.options = {\n projectId,\n relayUrl,\n metadata: clientMetadata\n }\n\n this.modalOptions = modalOptions\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'WalletConnect',\n icon: ICON\n }\n\n /**\n * Get metadata from the current window. This is adapted from the @walletconnect/utils\n * implementation, to avoid requiring the entire package as a dependency.\n * @see https://github.com/WalletConnect/walletconnect-utils/blob/master/browser/window-metadata/src/index.ts\n */\n private getWindowMetadata(): SignClientTypes.Metadata {\n let doc: Document\n let loc: Location\n\n const defaultMetadata = {\n name: '',\n description: '',\n url: '',\n icons: []\n }\n\n function getFromWindow<T>(name: string): T | undefined {\n let res: T | undefined\n if (typeof window !== 'undefined' && typeof (window as any)[name] !== 'undefined') {\n res = (window as any)[name]\n }\n return res\n }\n\n function getFromWindowOrThrow<T>(name: string): T {\n const res = getFromWindow<T>(name)\n if (!res) {\n throw new Error(`${name} is not defined in Window`)\n }\n return res\n }\n\n function getDocumentOrThrow(): Document {\n return getFromWindowOrThrow<Document>('document')\n }\n\n function getLocationOrThrow(): Location {\n return getFromWindowOrThrow<Location>('location')\n }\n\n try {\n doc = getDocumentOrThrow()\n loc = getLocationOrThrow()\n } catch (error) {\n this.logger.warn('Error getting window metadata:', error)\n return defaultMetadata\n }\n\n function getIcons(): string[] {\n const links: HTMLCollectionOf<HTMLLinkElement> = doc.getElementsByTagName('link')\n const icons: string[] = []\n\n for (let i = 0; i < links.length; i++) {\n const link: HTMLLinkElement = links[i]\n\n const rel: string | null = link.getAttribute('rel')\n if (rel) {\n if (rel.toLowerCase().indexOf('icon') > -1) {\n const href: string | null = link.getAttribute('href')\n\n if (href) {\n if (\n href.toLowerCase().indexOf('https:') === -1 &&\n href.toLowerCase().indexOf('http:') === -1 &&\n href.indexOf('//') !== 0\n ) {\n let absoluteHref: string = loc.protocol + '//' + loc.host\n\n if (href.indexOf('/') === 0) {\n absoluteHref += href\n } else {\n const path: string[] = loc.pathname.split('/')\n path.pop()\n const finalPath: string = path.join('/')\n absoluteHref += finalPath + '/' + href\n }\n\n icons.push(absoluteHref)\n } else if (href.indexOf('//') === 0) {\n const absoluteUrl: string = loc.protocol + href\n\n icons.push(absoluteUrl)\n } else {\n icons.push(href)\n }\n }\n }\n }\n }\n\n return icons\n }\n\n function getWindowMetadataOfAny(...args: string[]): string {\n const metaTags: HTMLCollectionOf<HTMLMetaElement> = doc.getElementsByTagName('meta')\n\n for (let i = 0; i < metaTags.length; i++) {\n const tag: HTMLMetaElement = metaTags[i]\n const attributes: Array<string | null> = ['itemprop', 'property', 'name']\n .map((target: string) => tag.getAttribute(target))\n .filter((attr: string | null) => {\n if (attr) {\n return args.includes(attr)\n }\n return false\n })\n\n if (attributes.length && attributes) {\n const content: string | null = tag.getAttribute('content')\n if (content) {\n return content\n }\n }\n }\n\n return ''\n }\n\n function getName(): string {\n let name: string = getWindowMetadataOfAny('name', 'og:site_name', 'og:title', 'twitter:title')\n\n if (!name) {\n name = doc.title\n }\n\n return name\n }\n\n function getDescription(): string {\n const description: string = getWindowMetadataOfAny(\n 'description',\n 'og:description',\n 'twitter:description',\n 'keywords'\n )\n\n return description\n }\n\n const name: string = getName()\n const description: string = getDescription()\n const url: string = loc.origin\n const icons: string[] = getIcons()\n\n const meta: SignClientTypes.Metadata = {\n description,\n url,\n icons,\n name\n }\n\n return meta\n }\n\n private async initializeClient(): Promise<SignClient> {\n this.logger.info('Initializing client...')\n const SignClient = (await import('@walletconnect/sign-client')).SignClient\n const client = await SignClient.init(this.options)\n\n client.on('session_event', (args) => {\n this.logger.info('EVENT: session_event', args)\n })\n\n client.on('session_update', ({ topic, params }) => {\n this.logger.info('EVENT: session_update', { topic, params })\n const { namespaces } = params\n const session = client.session.get(topic)\n const updatedSession = { ...session, namespaces }\n this.onSessionConnected(updatedSession)\n })\n\n client.on('session_delete', () => {\n this.logger.info('EVENT: session_delete')\n this.session = null\n })\n\n this.client = client\n this.logger.info('Client initialized')\n return client\n }\n\n private async initializeModal(): Promise<WalletConnectModal> {\n this.logger.info('Initializing modal...')\n const WalletConnectModal = (await import('@walletconnect/modal')).WalletConnectModal\n const modal = new WalletConnectModal({\n projectId: this.options.projectId,\n ...this.modalOptions\n })\n\n modal.subscribeModal((state) => this.logger.info(`Modal ${state.open ? 'open' : 'closed'}`))\n\n this.modal = modal\n this.logger.info('Modal initialized')\n return modal\n }\n\n private onSessionConnected(session: SessionTypes.Struct): WalletAccount[] {\n const caipAccounts = session.namespaces.algorand!.accounts\n\n if (!caipAccounts.length) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n // @todo: Validate format of CAIP-10 accounts\n\n // Filter duplicate accounts (same address, different chain)\n const accounts = [...new Set(caipAccounts.map((account) => account.split(':').pop()!))]\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const state = this.store.state\n const walletState = state.wallets[this.walletKey]\n\n if (!walletState) {\n const newWalletState: WalletState = {\n accounts: walletAccounts,\n activeAccount: walletAccounts[0]\n }\n\n addWallet(this.store, {\n walletId: this.walletKey,\n wallet: newWalletState\n })\n\n this.logger.info('Connected', newWalletState)\n } else {\n const match = compareAccounts(walletAccounts, walletState.accounts)\n\n if (!match) {\n this.logger.warn('Session accounts mismatch, updating accounts', {\n prev: walletState.accounts,\n current: walletAccounts\n })\n setAccounts(this.store, {\n walletId: this.walletKey,\n accounts: walletAccounts\n })\n }\n }\n\n this.session = session\n return walletAccounts\n }\n\n public get activeChainId(): string {\n const network = this.activeNetworkConfig\n if (!network?.caipChainId) {\n this.logger.warn(`No CAIP-2 chain ID found for network: ${this.activeNetwork}`)\n return ''\n }\n return network.caipChainId\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n this.logger.info('Connecting...')\n try {\n const client = this.client || (await this.initializeClient())\n const modal = this.modal || (await this.initializeModal())\n\n const requiredNamespaces = {\n algorand: {\n chains: [this.activeChainId],\n methods: ['algo_signTxn'],\n events: []\n }\n }\n\n const { uri, approval } = await client.connect({ requiredNamespaces })\n\n if (!uri) {\n this.logger.error('No URI found')\n throw new Error('No URI found')\n }\n\n await modal.openModal({ uri })\n\n const session = await approval()\n const walletAccounts = this.onSessionConnected(session)\n\n this.logger.info('Connected successfully')\n return walletAccounts\n } catch (error: any) {\n this.logger.error('Error connecting:', error.message)\n throw error\n } finally {\n this.modal?.closeModal()\n }\n }\n\n public disconnect = async (): Promise<void> => {\n this.logger.info('Disconnecting...')\n try {\n this.onDisconnect()\n if (this.client && this.session) {\n await this.client.disconnect({\n topic: this.session.topic,\n reason: {\n message: 'User disconnected.',\n code: 6000\n }\n })\n }\n this.logger.info('Disconnected')\n } catch (error: any) {\n this.logger.error('Error disconnecting:', error.message)\n throw error\n }\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.walletKey]\n\n // No session to resume\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n this.logger.info('Resuming session...')\n\n const client = this.client || (await this.initializeClient())\n\n if (client.session.length) {\n const lastKeyIndex = client.session.keys.length - 1\n const restoredSession = client.session.get(client.session.keys[lastKeyIndex])\n this.onSessionConnected(restoredSession)\n }\n this.logger.info('Session resumed successfully')\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n if (!this.session) {\n this.logger.error('No session found!')\n throw new SessionError('No session found!')\n }\n\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n\n let txnsToSign: WalletTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n this.logger.debug('Sending processed transactions to wallet...', [txnsToSign])\n\n // Format JSON-RPC request\n const request = formatJsonRpcRequest('algo_signTxn', [txnsToSign])\n\n // Sign transactions\n const signTxnsResult = await client.request<SignTxnsResponse>({\n chainId: this.activeChainId,\n topic: this.session.topic,\n request\n })\n\n this.logger.debug('Received signed transactions from wallet', signTxnsResult)\n\n // Filter out unsigned transactions, convert signed transactions to Uint8Array\n const signedTxns = signTxnsResult.reduce<Uint8Array[]>((acc, value) => {\n if (value) {\n let signedTxn: Uint8Array\n if (typeof value === 'string') {\n signedTxn = base64ToByteArray(value)\n } else if (value instanceof Uint8Array) {\n signedTxn = value\n } else if (Array.isArray(value)) {\n signedTxn = new Uint8Array(value)\n } else {\n // Log unexpected types for debugging\n this.logger.warn('Unexpected type in signTxnsResult', value)\n signedTxn = new Uint8Array()\n }\n acc.push(signedTxn)\n }\n return acc\n }, [])\n\n // ARC-0001 - Return null for unsigned transactions\n const result = txnsToSign.reduce<(Uint8Array | null)[]>((acc, txn) => {\n if (txn.signers && txn.signers.length == 0) {\n acc.push(null)\n } else {\n const signedTxn = signedTxns.shift()\n if (signedTxn) {\n acc.push(signedTxn)\n }\n }\n return acc\n }, [])\n\n this.logger.debug('Transactions signed successfully', result)\n return result\n } catch (error: any) {\n this.logger.error('Error signing transactions:', error.message)\n throw error\n }\n }\n}\n","import { logger } from 'src/logger'\nimport { NetworkConfig } from 'src/network'\nimport { StorageAdapter } from 'src/storage'\nimport { setActiveWallet, setActiveAccount, removeWallet, type State } from 'src/store'\nimport type { Store } from '@tanstack/store'\nimport type algosdk from 'algosdk'\nimport type {\n SignDataResponse,\n SignMetadata,\n UIHooks,\n WalletAccount,\n WalletConstructor,\n WalletId,\n WalletKey,\n WalletMetadata\n} from 'src/wallets/types'\n\ninterface WalletConstructorType {\n new (...args: any[]): BaseWallet\n defaultMetadata: WalletMetadata\n}\n\nexport abstract class BaseWallet {\n readonly id: WalletId\n /** Unique key for this wallet instance. Used for state storage and session isolation. */\n readonly walletKey: WalletKey\n readonly metadata: WalletMetadata\n\n protected store: Store<State>\n protected getAlgodClient: () => algosdk.Algodv2\n protected managerUIHooks: UIHooks\n\n public subscribe: (callback: (state: State) => void) => () => void\n\n protected logger: ReturnType<typeof logger.createScopedLogger>\n\n protected constructor({\n id,\n walletKey,\n metadata,\n store,\n subscribe,\n getAlgodClient,\n managerUIHooks\n }: WalletConstructor<WalletId>) {\n this.id = id\n this.walletKey = walletKey || id // Default to id for backward compatibility\n this.store = store\n this.subscribe = subscribe\n this.getAlgodClient = getAlgodClient\n this.managerUIHooks = managerUIHooks || {}\n\n const ctor = this.constructor as WalletConstructorType\n this.metadata = { ...ctor.defaultMetadata, ...metadata }\n\n // Initialize logger with a scope based on the wallet key\n this.logger = logger.createScopedLogger(`Wallet:${this.walletKey.toUpperCase()}`)\n }\n\n static defaultMetadata: WalletMetadata = { name: 'Base Wallet', icon: '' }\n\n // ---------- Public Methods ---------------------------------------- //\n\n public abstract connect(args?: Record<string, any>): Promise<WalletAccount[]>\n public abstract disconnect(): Promise<void>\n public abstract resumeSession(): Promise<void>\n\n public setActive = (): void => {\n this.logger.info(`Set active wallet: ${this.walletKey}`)\n setActiveWallet(this.store, { walletId: this.walletKey })\n }\n\n public setActiveAccount = (account: string): void => {\n this.logger.info(`Set active account: ${account}`)\n setActiveAccount(this.store, {\n walletId: this.walletKey,\n address: account\n })\n }\n\n public abstract signTransactions<T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]>\n\n public transactionSigner = async (\n txnGroup: algosdk.Transaction[],\n indexesToSign: number[]\n ): Promise<Uint8Array[]> => {\n const signTxnsResult = await this.signTransactions(txnGroup, indexesToSign)\n\n const signedTxns = signTxnsResult.reduce<Uint8Array[]>((acc, value) => {\n if (value !== null) {\n acc.push(value)\n }\n return acc\n }, [])\n\n return signedTxns\n }\n\n public canSignData = false\n\n public signData = async (_data: string, _metadata: SignMetadata): Promise<SignDataResponse> => {\n this.logger.error('Method not supported: signData')\n throw new Error('Method not supported: signData')\n }\n\n // ---------- Derived Properties ------------------------------------ //\n\n public get name(): string {\n return this.id.toUpperCase()\n }\n\n public get accounts(): WalletAccount[] {\n const state = this.store.state\n const walletState = state.wallets[this.walletKey]\n return walletState ? walletState.accounts : []\n }\n\n public get addresses(): string[] {\n return this.accounts.map((account) => account.address)\n }\n\n public get activeAccount(): WalletAccount | null {\n const state = this.store.state\n const walletState = state.wallets[this.walletKey]\n return walletState ? walletState.activeAccount : null\n }\n\n public get activeAddress(): string | null {\n return this.activeAccount?.address ?? null\n }\n\n public get activeNetwork(): string {\n const state = this.store.state\n return state.activeNetwork\n }\n\n public get isConnected(): boolean {\n const state = this.store.state\n const walletState = state.wallets[this.walletKey]\n return walletState ? walletState.accounts.length > 0 : false\n }\n\n public get isActive(): boolean {\n const state = this.store.state\n return state.activeWallet === this.walletKey\n }\n\n public get activeNetworkConfig(): NetworkConfig {\n const { networkConfig, activeNetwork } = this.store.state\n return networkConfig[activeNetwork]\n }\n\n // ---------- Protected Methods ------------------------------------- //\n\n protected onDisconnect = (): void => {\n this.logger.debug(`Removing wallet from store...`)\n removeWallet(this.store, { walletId: this.walletKey })\n }\n\n protected manageWalletConnectSession = (\n action: 'backup' | 'restore',\n targetWalletKey?: WalletKey\n ): void => {\n const key = targetWalletKey || this.walletKey\n if (action === 'backup') {\n const data = StorageAdapter.getItem('walletconnect')\n if (data) {\n StorageAdapter.setItem(`walletconnect-${key}`, data)\n StorageAdapter.removeItem('walletconnect')\n this.logger.debug(`Backed up WalletConnect session for ${key}`)\n }\n } else if (action === 'restore') {\n const data = StorageAdapter.getItem(`walletconnect-${key}`)\n if (data) {\n StorageAdapter.setItem('walletconnect', data)\n StorageAdapter.removeItem(`walletconnect-${key}`)\n this.logger.debug(`Restored WalletConnect session for ${key}`)\n }\n }\n }\n}\n","import type { WalletConnectSkin, WalletConnectSkinOption } from './types'\n\n// ---------- Built-in Skin Icons ---------- //\n\nconst VOI_WALLET_ICON = `data:image/svg+xml;base64,${btoa(`\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"322\" height=\"322\">\n <path fill=\"#32B1E8\" d=\"M131 19a42 42 0 0 1 15 8c18 12 36 26 50 43l2 3c26 29 41 64 47 102v2l1 20h-49v10l-42 4a70897 70897 0 0 0-78 7h-3l-18 1a804 804 0 0 0 55-186c16 8 29 33 39 48l-2-16-1-3c-3-14-9-27-15-40l-1-3Z\"/>\n <path fill=\"#1F3AB7\" d=\"M111 33c13 6 23 25 32 37l1 2 4 6 1 2c6 8 4 20 4 30v3c0 32-11 62-26 89h2c23-3 45-4 68-4v9l-42 4a70897 70897 0 0 0-78 7h-3l-18 1a804 804 0 0 0 55-186Z\"/>\n <path fill=\"#3C4856\" d=\"M267 214a2941 2941 0 0 0-12 14l-2 1-10 10-5 4-2 2a8522 8522 0 0 1-21 20c-6 7-11 9-20 10-7 0-12-1-17-6l-8-7-5-6a120 120 0 0 1-8-7l-2-2-4-1-10 7a4157 4157 0 0 1-15 14l-1 1c-5 5-9 6-16 6h-3a397 397 0 0 1-15 0c-14 0-14 0-19-3l-4-7a322 322 0 0 0-8-12l-2-3-8-15 65-7 15-1a47903 47903 0 0 1 122-11l2-1h13Z\"/>\n <path fill=\"#1B87DF\" d=\"M152 86v2l1 2 3 1 3 5 2 4 2 3 2 4c11 21 11 21 14 30l2 4v2l3 7 6 18 5 19 2 9h44v1h-3l-64 2h-3a526 526 0 0 0-44 3l4-9a190 190 0 0 0 21-94V86Z\"/>\n <path fill=\"#1A279D\" d=\"M139 71c5 1 5 1 7 4l2 3 2 3c5 9 3 20 3 29v3c0 32-11 62-26 89h2c23-3 45-4 68-4v9a798 798 0 0 1-92 7l2-2 1-5 5-9c8-16 14-32 19-49l2-8 2-14 1-1c3-18 2-37 2-55Z\"/>\n <path fill=\"#3D4856\" d=\"M151 261c4 1 6 3 8 5l3 3 3 5-4 1-1 19h-18v-20h-7l5-5 2-2 3-2 2-3 4-1Z\"/>\n <path fill=\"#2EB4EB\" d=\"m254 65 4 6c4 6 8 9 14 12v2l-2 1c-7 4-11 9-15 16l-5-7c-3-6-9-8-15-10l7-5c6-4 9-9 12-15Z\"/>\n <path fill=\"#2021AB\" d=\"M162 206h4c10 0 10 0 15 2v1a11602 11602 0 0 1-44 4h-4l-23 1v-1h9l1-3 8-1 3-1h9l2-1 5-1h15Z\"/>\n <path fill=\"#31B8EF\" d=\"M280 50c3 1 3 1 5 4s4 5 8 7l-5 5-6 7-5-5-7-6 6-5 4-7Z\"/>\n <path fill=\"#2DC1F2\" d=\"m255 35 8 9-6 7c-5-1-6-3-9-6l7-10Z\"/>\n <path fill=\"#2F3A48\" d=\"M157 266c3 1 6 3 8 6v2l-4 1-1 19h-18v-18h1v7l1 4 1 4h7l7 1v-12l-1-3v-7l-1-4Z\"/>\n <path fill=\"#233143\" d=\"M157 266c3 1 6 3 8 6v2l-4 1-1 19h-1v-13l-1-4v-6l-1-5Z\"/>\n <path fill=\"#2A2DB3\" d=\"m179 207 2 2-9 1h-7l-4-2c4-4 13-2 18-1Z\"/>\n <path fill=\"#3864CC\" d=\"m104 69 2 6-1 2v3l-1 2-1 2-1 6-2 1 4-22Z\"/>\n <path fill=\"#1F2DAB\" d=\"m77 166 3 1-1 8-5 1c1-4 1-7 3-10Z\"/>\n <path fill=\"#2651C8\" d=\"M98 95c3 3 3 3 3 6v2l-3 1v2h-2l2-11Z\"/>\n <path fill=\"#383F59\" d=\"m267 214-3 5-1-3-9 1 1-2 12-1Z\"/>\n <path fill=\"#184FCF\" d=\"m111 33 4 2-1 2c-2 3-3 5-3 9l-2-1 2-12Z\"/>\n <path fill=\"#1D25A8\" d=\"M71 182h1v8l-4 2c1-7 1-7 3-10Z\"/>\n <path fill=\"#31BBF6\" d=\"m254 65 4 8-3-1-1-2-1 2h-2l3-7Z\"/>\n <path fill=\"#1E78DC\" d=\"m142 168 2 3-2 5-1 2-3 3 1-5 1-3 2-5Z\"/>\n <path fill=\"#42CDF8\" d=\"m255 35 4 4h-2l-7 3 5-7Z\"/>\n <path fill=\"#25B4EC\" d=\"M148 59h4l-2 8c-2-2-2-2-2-5v-3Z\"/>\n <path fill=\"#2024AA\" d=\"m63 200 2 2-1 4-3 2 2-8Z\"/>\n <path fill=\"#32BEFA\" d=\"m280 50 3 1-1 4-3 1 1-6Z\"/>\n</svg>\n`)}`\n\nconst BIATEC_ICON = `data:image/svg+xml;base64,${btoa(`\n<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 200 180\"><path d=\"M94.27 151.629c-.861-.526-1.51-1.37-1.83-2.386-.197-.62-.18-.627 1.082-.437.705.105 1.6.356 1.988.557.696.36 1.815 1.876 1.815 2.459 0 .486-2.166.348-3.054-.193m23.953-.263c-.788-.419-2.095-2.123-2.108-2.75-.01-.433 2.467-.182 3.403.345.955.536 2.148 1.97 2.148 2.582 0 .503-2.397.38-3.443-.177m-9.024-1.165c-1.567-1.193-2.38-2.74-2.55-4.849-.075-.933-.054-1.697.045-1.697.866 0 2.714 1.67 3.439 3.107.398.789.657 3.888.351 4.195-.07.07-.648-.27-1.285-.756m-8.906-1.354c-.63-.684-1.21-1.648-1.387-2.305-.318-1.18-.136-3.416.278-3.416.555 0 2.108 1.697 2.505 2.737.472 1.237.457 3.905-.023 4.063-.16.053-.777-.433-1.373-1.08m-6.805-1.775c-2.764-.612-5.223-1.425-5.357-1.772-.08-.21.169-1.027.555-1.814s.701-1.469.701-1.515c0-.047-.803.067-1.786.253-.982.185-1.857.256-1.944.157-.088-.1-.365-.715-.618-1.367-.252-.652-.858-1.729-1.345-2.393-1.293-1.76-5.285-5.526-7.272-6.858-3.826-2.564-4.96-3.855-4.667-5.316.08-.402.692-1.574 1.359-2.606 1.65-2.551 2.51-4.472 2.512-5.62.002-.571-.364-1.69-.901-2.758l-.905-1.796.706-.532c1.936-1.46 4.649-4.916 4.205-5.36-.06-.06-.846.72-1.745 1.732-3.553 3.997-7.814 6.463-16.014 9.27-5.324 1.823-5.853 2.06-7.183 3.228-1.555 1.365-1.962 2.502-2.531 7.063-.284 2.275-.706 4.79-.937 5.591-.231.8-.403 2.17-.382 3.043.032 1.346-.157 2.06-1.248 4.698-1.498 3.622-1.068 3.708-4.138-.827l-2.036-3.008.747-.784c.411-.43 1.075-.978 1.475-1.216.955-.568.919-.922-.236-2.331-.53-.647-.917-1.209-.86-1.25s.43-.277.83-.526c1.788-1.12 2.7-4.727 2.987-11.822.214-5.274.595-6.46 2.195-6.83 6.634-1.535 7.58-1.98 8.618-4.066.926-1.858.9-3.701-.121-8.475-.87-4.072-1.047-7.21-.516-9.223.606-2.303 3.759-7.433 5.667-9.221.376-.353.684-.729.684-.835 0-.254-3.325-2.697-4.448-3.268-.482-.245-1.455-.45-2.163-.456-3.892-.03-6.628 1.877-8.722 6.08-.603 1.212-1.582 2.73-2.176 3.374-2.733 2.965-8.602 4.09-12.666 2.43l-.913-.374 1.323-.05c1.422-.054 3.498-.94 3.944-1.683.414-.69.076-.79-1.06-.314-1.443.605-4.075.597-5.039-.015-1.259-.8-2.23-1.81-2.795-2.908l-.535-1.042 1.243 1.095c1.51 1.328 2.691 1.752 4.425 1.585 1.506-.145 2.523-.851 1.65-1.147-3.195-1.08-5.834-3.078-7.07-5.35-.809-1.485-1.513-3.982-1.504-5.334l.006-.936.42.854c.232.47.941 1.333 1.576 1.918l1.155 1.064 2.189-.012 2.188-.011-1.012-.535c-.975-.514-3.353-2.766-3.353-3.175 0-.11.506.079 1.124.418 1.282.703 3.888 1.32 4.21.996.12-.118-.204-.612-.718-1.097-.513-.484-1.17-1.344-1.46-1.911l-.525-1.03 1.174.895c2.02 1.542 3.883 1.506 6.342-.123.69-.457 1.218-.863 1.175-.903s-.989.227-2.103.594c-1.87.618-2.11.64-3.151.305-1.284-.415-2.023-1.273-2.25-2.613l-.158-.926.486.595c1.07 1.31 2.652 1.255 6.363-.224 1.132-.451 2.892-1.036 3.91-1.3 2.732-.706 1.561-.926-2.298-.43-1.778.228-3.27.376-3.318.329-.047-.047.662-.415 1.575-.818 2.002-.883 4.78-1.152 6.858-.663 1.817.427 2.555.81 4.032 2.087 1.151.997 3.654 2.156 4.605 2.133.595-.015-2.96-3.395-4.552-4.328-1.639-.96-4.11-1.542-6.107-1.438-.92.049-1.627.016-1.571-.073.242-.388 3.44-.825 5.203-.71 4.048.265 6.96 2.546 10.902 8.537 2.553 3.883 4.234 5.67 6.137 6.524l1.092.49 2.215-1.027c4.747-2.2 8.797-2.518 16.097-1.26 2.25.387 4.717.704 5.482.704h1.39l.074 3.203.074 3.203.894-1.113c.88-1.096.894-1.152.846-3.516l-.049-2.402-1.61-1.721c-4.14-4.425-4.335-6.536-1.135-12.213 2.744-4.87 2.704-4.41.813-9.32-.883-2.292-1.696-4.167-1.807-4.167-.339 0-.205 4 .196 5.821.716 3.256.435 4.822-1.006 5.603-.371.2-2.144.33-4.904.36-3.6.036-4.348-.022-4.473-.348-.087-.227.102-.582.451-.845.53-.4.563-.53.274-1.09-.18-.35-.692-1.022-1.137-1.493s-.734-.933-.64-1.026c.093-.094 1.072-.036 2.175.128 3.023.45 3.76.398 4.211-.297.4-.615 2.887-9.725 2.704-9.907-.196-.196-1.55 1.62-2.759 3.7-1.782 3.068-3.14 3.895-6.379 3.889-2.485-.005-5.43-1.098-8.658-3.213-1.439-.943-3.02-1.855-3.514-2.027-1.524-.531-3.75-.392-5.163.324l-1.26.638.567-.603c.892-.95 3.048-2.004 4.432-2.167 1.94-.23 3.3.283 5.786 2.18 2.39 1.823 3.163 2.225 4.28 2.225.6 0 .497-.12-.745-.872-.792-.48-2.416-1.598-3.609-2.486-2.658-1.978-4.119-2.58-5.831-2.4l-1.26.132.926-.39c.667-.281 1.609-.36 3.373-.284 1.346.059 2.448.077 2.448.04 0-.278-2.537-1.455-3.71-1.722-.89-.202-1.231-.365-.884-.421.312-.051 1.86.225 3.44.614 2.564.63 3.167.687 5.602.525 5.536-.369 7.032-1.144 9.218-4.774l1.433-2.382-1.224 1.323c-.673.728-1.779 1.928-2.457 2.666-.677.739-1.53 1.417-1.893 1.508l-.662.165.61-.503c.334-.277 1.088-1.491 1.675-2.698 1.772-3.648 3.228-4.779 6.772-5.257 3.522-.476 4.797-.791 5.421-1.342.332-.293.429-.44.215-.329-.213.112-1.94.277-3.836.367-2.955.14-3.666.263-4.97.86-1.632.749-4.092 2.893-4.996 4.356-.764 1.236-.923.905-.224-.465 1.387-2.718 4.685-4.945 8.366-5.651l1.815-.349-1.058-.235c-.582-.13-1.952-.224-3.043-.209l-1.984.027 1.72-.82c1.427-.682 2.04-.822 3.611-.822 1.607 0 1.86-.06 1.679-.4-.539-1.005-1.377-1.452-2.69-1.432-.769.011-1.156-.067-.937-.19.534-.298 2.168-.34 4.169-.104 1.648.194 1.82.159 3.59-.733 1.023-.515 2.472-1.047 3.22-1.183 1.388-.253 3.607-.04 4.472.429.942.51 1.958 1.825 2.095 2.712.116.746 0 1.052-.671 1.777-.752.813-.811 1.018-.811 2.82 0 1.706-.105 2.127-.85 3.424-.467.814-.973 1.476-1.124 1.473s-.797-.242-1.435-.532c-1.277-.579-1.714-.435-1.988.655-.115.46.045.84.605 1.44.42.448 1.621 2.237 2.671 3.975 1.883 3.116 1.905 3.175 1.585 4.146-.258.78-.258 1.56 0 3.73.179 1.51.253 3.031.166 3.38-.128.509.033.795.805 1.432 1.367 1.126 5.02 2.947 5.914 2.947 1.268 0 1.588.247 1.588 1.227 0 1.057-.642 2.742-1.045 2.742-.153 0-.278-.298-.278-.662 0-.558-.123-.661-.793-.661-.436 0-2.162-.467-3.836-1.036l-3.044-1.036v1.788c0 .984-.077 3.057-.172 4.608l-.173 2.82h3.015l-.133.86c-.073.472-.206 2.11-.295 3.637-.373 6.42-.634 7.203-4.207 12.65-4.119 6.278-4.635 7.984-3.493 11.548.37 1.158.647 2.133.613 2.167-.246.246-2.569-1.19-3.783-2.34-2.616-2.473-2.922-3.975-1.146-5.619.954-.882 1.054-1.087.892-1.828-.417-1.91-.553-1.976-1-.482-.232.777-.693 1.849-1.024 2.382-.526.846-.603 1.318-.603 3.705v2.736l3.175 1.022c1.746.562 3.446 1.028 3.777 1.034.583.012.59-.012.194-.776-.224-.434-.479-1.307-.566-1.939-.208-1.523.53-3.065 3.905-8.159 4.537-6.845 5.478-9.25 5.681-14.513.07-1.82.19-3.93.267-4.692.137-1.353.17-1.398 1.379-1.933 2.27-1.004 4.245-3.717 6.253-8.589.526-1.274.459-1.204-1.891 1.985-1.019 1.382-2.13 2.751-2.47 3.042-.604.516-.603.506.048-.397.938-1.299 1.216-2.144 1.685-5.107.663-4.193 1.699-6.255 4.604-9.16 3.639-3.638 9.47-6.348 13.7-6.365.635-.003 1.201-.155 1.322-.356.117-.192 1.105-.92 2.196-1.615 1.092-.696 2.252-1.511 2.579-1.812.327-.3.66-.48.74-.4.081.081-.038.942-.263 1.914s-.41 1.88-.41 2.016c0 .37 1.393.3 1.992-.102.287-.192 1.296-.62 2.241-.953s1.998-.78 2.338-.994c.34-.215.665-.345.722-.288.302.302-1.982 3.526-2.927 4.132l-1.152.74c-.277.179 1.202 3.732 1.975 4.745.674.882.862 1.347.742 1.825-.089.354.045 1.273.296 2.044.645 1.98 2.913 6.751 3.698 7.779.808 1.06.82 1.416.075 2.363-.32.408-.648 1.225-.728 1.816-.118.879-.279 1.12-.89 1.335-1.457.512-2.298-.449-2.94-3.358-.113-.512-.325-.728-.715-.728-.634 0-.619.099.398 2.514.368.873.572 1.685.453 1.804-.12.119-.679.178-1.244.132-1.006-.082-1.03-.108-1.165-1.29-.11-.958-.407-1.515-1.444-2.716-1.28-1.483-1.523-1.617-3.974-2.186-.436-.102-1.235-.406-1.776-.677l-.981-.491-.311 1.124c-.462 1.668-.381 7.592.14 10.35.244 1.29.926 3.552 1.516 5.027 1.864 4.655 1.933 4.98 1.924 9.031-.006 2.853-.112 3.972-.461 4.87-.25.641-.415 1.204-.367 1.252.047.047 2.935.203 6.419.347 4.2.174 6.786.397 7.679.664 1.433.429 2.955 1.341 3.328 1.995.125.219 1.292 3.718 2.594 7.777 2.56 7.978 2.515 7.613 1.142 9.263-.582.7-.623.918-.458 2.455l.18 1.686-1.685 1.59c-2.476 2.335-2.487 2.338-2.833.702l-.825-3.894c-.497-2.344-.503-2.535-.09-2.844.245-.182.75-.332 1.121-.335 1.259-.007 1.444-.36.672-1.277l-.7-.833.461-1.209c.403-1.054.421-1.428.146-2.924-.856-4.647-3.463-7.755-6.516-7.769-1.198-.006-5.626.726-6.143 1.015-.419.235 1.36 2.035 4.026 4.073 1.954 1.494 2.487 2.265 2.708 3.918.115.858-.031 1.278-.963 2.753-1.122 1.776-2.596 4.941-4.015 8.62-.437 1.133-1.048 2.383-1.358 2.777-.546.695-.623.712-2.434.544-1.51-.14-2.034-.085-2.726.287-.933.503-1.032.488-5.234-.754l-1.852-.547 1.058-.93c2.452-2.155 4.96-4.035 5.375-4.028.245.004.743.417 1.107.919.364.5.74.914.835.918.336.014 2.673-2.777 3.423-4.09.928-1.622 1.429-3.721 1.19-4.992-.414-2.208-2.105-3.2-8.836-5.183-4.604-1.356-5.44-1.637-6.837-2.3-.81-.384-.92-.36-3.047.664-2.593 1.248-5.507 2.251-8.665 2.983-3.304.766-9.686.95-12.988.376-3.227-.562-7.639-2.035-9.626-3.214-.856-.508-1.618-.862-1.693-.787-.15.15 1.12 2.079 1.665 2.53.271.226.239.732-.166 2.586-1.245 5.713-2.66 8.612-7.189 14.73-2.852 3.852-3.402 5.685-2.327 7.762.66 1.274 9.278 9.763 11.016 10.85.797.498 1.576 1.26 1.929 1.889.496.883 2.158 5.275 2.158 5.704 0 .2-1.577.111-2.779-.154m46.76-1.68c-2.98-1.107-5.348-3.111-7.054-5.97-1.025-1.72-2.16-4.428-1.946-4.643.229-.229 3.039.644 4.916 1.527 3.417 1.608 6.275 5.198 6.594 8.283.178 1.723.063 1.76-2.51.803m-70.399.107c-2.923-.4-6.887-2.043-7.56-3.132-.23-.371 1.693-1.772 3.683-2.683 4.119-1.887 9.22-1.779 13.075.277 1.637.873 4.347 2.943 4.307 3.29-.014.122-.895.499-1.957.837-4.06 1.29-8.482 1.831-11.548 1.411m51.264-1.55c-1.687-.66-3.315-1.831-4.87-3.503l-1.323-1.421 2.116-.183c3.467-.298 6.424.354 8.757 1.932 1.096.742 2.753 2.456 2.753 2.848 0 .859-5.46 1.099-7.433.326m38.521-1.26c-3.84-.798-6.966-2.331-9.705-4.761-2.156-1.913-3.179-2.512-5.08-2.978-1.478-.362-3.339-1.249-3.339-1.591 0-.318 2.824-.81 5.689-.991 7.046-.446 13.549 2.741 16.133 7.908.513 1.024.932 2.025.932 2.224 0 .277-.479.354-2.05.33-1.128-.016-2.289-.08-2.58-.14m-61.217-2.076c-1.35-.421-2.52-1.449-3.238-2.845l-.51-.992h1.178c1.479 0 2.46.365 3.42 1.273.65.615 1.762 2.392 1.762 2.817 0 .255-1.426.117-2.612-.253m5.45-1.504c-1.583-1.153-2.396-3.509-1.878-5.442.192-.715.563-.742 1.334-.098 1.18.986 1.673 2.177 1.674 4.051 0 .974-.09 1.826-.2 1.895-.112.068-.53-.114-.93-.406m-26.254-1.075a150 150 0 0 0-3.968-1.97l-2.382-1.138 1.21-.001c2.527-.002 4.928 1.203 6.339 3.185.306.43.52.777.473.77-.046-.007-.799-.388-1.672-.845zm-14.354-3.608c-.764-.264-1.631-.699-1.927-.966-.59-.534-1.695-2.22-1.542-2.352.053-.045.573-.192 1.155-.325 1.324-.303 1.45-.925.662-3.265-.306-.908-.503-1.705-.438-1.77.066-.066.637.018 1.27.187.95.253 1.683.849 4.194 3.411 2.483 2.534 3.286 3.19 4.366 3.566.727.253 1.62.587 1.984.742l.662.28-.662.199c-.779.234-6.102.794-7.42.782-.503-.005-1.54-.225-2.304-.489m104.313-.83c-1.528-.484-4.719-2.704-4.75-3.303-.006-.145.88-.42 1.972-.61 2.368-.414 4.676-.11 6.582.864 1.41.721 3.082 2.35 2.83 2.756-.55.891-4.237 1.054-6.634.294m-56.58-.117c-2.06-.734-3.35-2.65-3.345-4.961.006-2.304.15-2.574 1.279-2.397 1.516.239 3.013.83 3.677 1.455l.609.572 1.523-1.507c.838-.829 1.593-1.507 1.679-1.507.085 0 .362.735.614 1.633.94 3.35-.383 5.974-3.431 6.806-1.302.356-1.35.354-2.605-.094m-75.315-.698c-6.533-.942-11.018-2.967-14.552-6.571-1.972-2.01-3.175-3.81-2.8-4.186.109-.109 1.32-.239 2.693-.29 5.235-.192 9.266 1.449 13.22 5.381 2.097 2.085 5.101 5.853 4.838 6.068-.05.041-1.58-.14-3.4-.402m97.327-1.25c4.267-5.096 8.959-7.442 13.334-6.666.982.174 1.84.405 1.906.513.198.32-1.54 2.713-2.834 3.904-2.314 2.13-5.42 3.148-10.492 3.438l-3.055.175zm17.502-.559c0-.646 1.702-5.318 2.447-6.715 1.472-2.762 4.84-5.965 5.538-5.267.161.161.234 1.18.176 2.481-.114 2.603-.705 4.023-2.51 6.03-1.524 1.695-5.651 4.23-5.651 3.471m8.04-1.157c3.728-2.356 7.725-5.133 8.864-6.158 1.353-1.218 1.403-1.24.984-.43-1.093 2.113-4.85 5.104-7.93 6.31-1.734.68-2.798.834-1.919.278m2.457-4.828c-.243-.511-.443-1.383-.443-1.937 0-1.018.973-3.223 1.5-3.399.368-.123 1.146 1.814 1.146 2.853 0 .855-.78 2.6-1.39 3.105-.298.247-.456.127-.813-.622m11.343.373c-1.157-.135-2.15-.292-2.206-.348-.16-.16 1.966-2.017 3.71-3.24 2.387-1.673 4.54-2.317 7.745-2.316 2.182 0 2.874.104 3.949.596l1.303.595-.907.936c-2.935 3.03-7.986 4.433-13.594 3.777m-135.543-5.98c-3.17-5.953-3.802-11.809-1.769-16.407.766-1.73 2.408-4.033 2.878-4.033.185 0 .7.685 1.142 1.522 2.02 3.82 2.643 8.569 1.708 13.03-.515 2.454-2.383 7.938-2.705 7.938-.089 0-.653-.923-1.254-2.05m131.543-.026c-2.11-1.55-3.023-3.093-3.023-5.108 0-1.215.77-3.056 1.587-3.796.494-.447.574-.438 1.965.243 1.713.838 2.676 1.892 3.072 3.363.464 1.725-.257 3.872-1.791 5.328l-.771.733zm-142.341-2.392c-.955-.434-3.028-2.462-3.028-2.963 0-.106.589-.273 1.309-.372 2.032-.28 3.923.381 5.269 1.84.602.654 1.095 1.295 1.095 1.426 0 .289-1.308.57-2.613.562-.527-.003-1.442-.225-2.032-.493m134.927-3.139c1.218-3.954 1.471-13.59.477-18.203a57 57 0 0 0-1.472-5.291c-1.025-3-1.187-3.508-1.031-3.229.06.11.227.199.369.199s.185-.12.095-.265-.099-.265-.019-.265c.285 0 2.284 4.27 2.94 6.28.942 2.884 1.488 6.584 1.481 10.037-.008 4.205-.63 7.156-2.126 10.088-.577 1.13-.974 1.491-.714.65m15.622-.53c.096-.4.694-1.798 1.33-3.108 1.78-3.673 4.396-6.043 7.61-6.899 2.261-.602 2.412-.555 2.244.699-.39 2.903-3.348 6.413-6.971 8.27-.455.233-1.63.726-2.608 1.094l-1.78.67zm-150.592-3.621c-5.551-2.683-8.865-5.295-11.436-9.013-2.092-3.028-3.72-7.066-3.72-9.231 0-.636.089-.69 1.135-.69 2.913 0 6.796 1.74 9.585 4.296 3.283 3.008 5.033 6.073 6.587 11.534 1.15 4.043 1.263 4.544 1.02 4.54-.111 0-1.539-.647-3.17-1.436m145.075.485c-.092-.241-.309-1.552-.48-2.914-.562-4.443.43-8.183 2.772-10.456.58-.562 1.164-1.022 1.3-1.022.405 0 1.01 1.75 1.186 3.43.324 3.1-.9 6.63-3.421 9.872-.926 1.19-1.226 1.431-1.357 1.09m-6.353-7.675c.34-1.413.908-2.21 1.957-2.745 1.55-.792 1.96-.718 1.754.314-.326 1.628-1.397 2.695-3.034 3.022-.84.168-.856.154-.677-.591m18.432-2.084c-.473-.206-.857-.469-.854-.585.01-.368 1.945-1.592 2.816-1.781.461-.1 1.34-.047 1.952.118l1.114.3-.882.909c-.764.789-2.17 1.45-3.022 1.422-.145-.005-.651-.178-1.124-.383m-4.19-2.014c.437-5.243 1.85-8.992 4.434-11.754 1.589-1.698 4.011-3.172 5.51-3.353.608-.073.669.016.745 1.087.125 1.742-.655 4.812-1.81 7.117-1.233 2.466-3.244 4.75-6.16 7-3.185 2.457-2.932 2.466-2.719-.097M164.535 96.2c.011-.601.996-2.432 1.613-2.997.74-.68 1.86-1.142 2.764-1.142.74 0 .783.213.287 1.402-.328.784-2.05 2.558-2.496 2.573-.105.004-.636.11-1.182.237-.703.163-.99.142-.986-.073M39.38 92.511l-1.19-.287 1.894-.184c2.429-.237 4.211-.836 5.755-1.933 1.705-1.212 2.43-2.3 3.187-4.777.358-1.173 1.027-2.644 1.487-3.27.855-1.16 1.328-1.354.772-.315-.17.317-.42 1.753-.555 3.191s-.371 2.944-.524 3.347c-1.29 3.39-6.255 5.33-10.826 4.228m132.353-3.022c-1.37-3.004-1.722-4.62-1.596-7.322.12-2.584.663-4.209 1.984-5.941l.698-.915.593.689c1.538 1.787 2.37 6.366 1.72 9.457-.375 1.79-1.903 5.61-2.293 5.734-.158.05-.656-.715-1.106-1.702m6.655.323c.094-.582.245-3.618.336-6.747.16-5.514-.097-11.175-.726-16.007-.66-5.078-2.584-11.438-4.788-15.834-.572-1.142-.914-1.998-.76-1.903.154.096.28.02.28-.17 0-.608 1.905 2.465 3.056 4.93 3.19 6.83 5.492 18.482 5.039 25.5-.219 3.379-.79 6.78-1.52 9.04-.672 2.084-1.164 2.722-.917 1.191m-5.129-39.936c0-.065-.119-.19-.264-.28s-.265-.038-.265.116.12.28.265.28.264-.052.264-.116M21.39 87.46c-6.885-6.262-9.634-10.983-10.312-17.71-.218-2.153.098-6.211.514-6.628.377-.377 2.86.757 4.714 2.153 4.287 3.228 7.128 8.67 7.976 15.276.349 2.717.746 9.923.547 9.92-.073-.001-1.62-1.356-3.44-3.01m141.818 1.495c.002-1.223.51-2.654 1.254-3.539.681-.81 2.635-1.902 2.999-1.677.248.154-.193 2.347-.65 3.224-.523 1.007-1.444 1.82-2.616 2.31l-.989.413zm19.715-9.65c.101-.48.414-1.25.694-1.712.53-.872 2.361-1.937 3.331-1.937.515 0 .537.075.29.992-.432 1.599-1.891 2.901-3.749 3.347-.733.176-.746.16-.566-.69m-1.078-4.864c-.434-3.474.426-7.949 2.004-10.427.992-1.557 3.308-3.704 3.996-3.704.79 0 1.023 5.098.34 7.427-.775 2.639-3.22 6.102-5.41 7.661l-.744.53zM27.106 70.74c-.83-2.163.852-9.285 3.442-14.577 3.414-6.977 9.876-14.173 15.518-17.28 1.338-.736 1.306-.696-.732.921-3.554 2.82-6.93 6.51-9.617 10.514-2.78 4.142-4.184 7.582-5.825 14.274-.593 2.419-1.273 4.885-1.512 5.482-.446 1.116-.991 1.401-1.274.666m148.415-4.429c-3.31-1.775-5.714-4.87-6.05-7.787-.123-1.073-.097-1.124.573-1.122 1.742.006 4.537 2.38 5.833 4.954.468.928 1.437 4.572 1.263 4.746-.028.028-.757-.328-1.62-.79M24.465 63.817c-1.392-2.767-2.046-5.175-2.208-8.138-.16-2.924.292-6.48.823-6.48.632 0 2.73 1.536 3.654 2.676 1.65 2.036 2.173 3.325 2.185 5.393.01 1.729-.094 2.069-1.554 5.094-.86 1.782-1.663 3.24-1.783 3.24s-.623-.803-1.117-1.785m155.049-4.47c-.602-3.045-.356-5.571.757-7.767.795-1.57 2.708-3.351 3.137-2.921.187.187.302 1.33.302 3 0 2.617-.03 2.756-1.001 4.573-.551 1.03-1.462 2.322-2.024 2.871l-1.022.998zm-68.432-2.831c0-.451.748-1.115 1.521-1.35.762-.233.743.064-.061.978-.678.77-1.46.969-1.46.372M33.59 54.752c1.046-1.877 3.42-4.082 5.433-5.045 1.457-.699 2.23-.892 3.93-.982 2.15-.115 3.863.18 4.728.812.444.324.393.442-.74 1.701-1.47 1.635-3.438 2.97-5.575 3.778-1.242.47-2.33.63-4.998.735l-3.41.135zm76.965.194c0-.802 1.282-2.19 2.17-2.35.969-.176 1.534.041 1.534.587 0 .382-.305.583-1.245.82-.685.172-1.518.608-1.852.968l-.607.655zm57.018-.605c-.437-.225-.965-.578-1.173-.783-.327-.323-.22-.446.794-.905 1.314-.597 2.774-.659 4.347-.184 1.386.417 1.347.95-.122 1.69-1.377.695-2.73.76-3.846.182m-58.306-1.16c.174-.5.815-1.406 1.424-2.015.918-.918 1.368-1.152 2.637-1.37 1.42-.246 2.024-.224 3.048.107.8.26-.765 1.148-2.022 1.148-1.584 0-2.915.6-4.27 1.928l-1.133 1.109zm65.577-2.87c-.75-1.497-.906-2.129-1.001-4.048-.094-1.886-.02-2.485.431-3.506.3-.677.655-1.231.79-1.231.33 0 1.475 1.777 1.856 2.883.497 1.442.383 4.31-.236 5.965-.3.803-.638 1.517-.75 1.586-.11.069-.602-.673-1.09-1.649m-65.359.239c.662-1.25 2.453-2.918 3.604-3.357 1.384-.53 4.318-.42 5.512.206l.757.397-.576.403c-.45.315-1.084.374-2.904.27-2.854-.163-3.938.155-5.54 1.625-.876.802-1.1.922-.853.456m-79.602-1.036c-1.895-1.894-2.474-3.183-2.62-5.824-.066-1.211-.008-2.314.128-2.45.332-.332 2.019.945 2.831 2.145.348.513.825 1.5 1.06 2.192.47 1.384.581 4.818.164 5.076-.144.089-.848-.423-1.563-1.139m78.698-.58c.528-1.848 2.227-3.934 3.94-4.841 1.648-.872 4.113-.74 7.331.392l2.55.897-.936.614c-.919.602-.967.606-2.55.2-2.732-.698-3.209-.739-5.014-.424-2.025.352-3.826 1.419-4.84 2.865-.543.777-.635.833-.481.297m54.957-.028c-.619-.306-1.125-.665-1.125-.797 0-.133.387-.477.86-.765 1.455-.887 4.475-.65 6.244.49l.621.401-1.15.602c-1.547.81-3.894.84-5.45.07m-113.51-5.029c-.621-.307-1.376-.872-1.677-1.255l-.548-.696.883-.372c2.07-.872 5.296-.261 6.675 1.263.498.55.494.556-.662 1.08-1.52.69-3.253.682-4.672-.02m69.126-.293c-2.905-1.128-5.647-1.179-7.871-.147-.837.388-1.522.665-1.522.615 0-.292 2.738-1.751 3.95-2.106 1.796-.525 4.726-.535 6.634-.023 1.759.472 3.564.489 4.61.043.696-.298.59-.32-1.07-.226-1.83.103-1.852.096-3.683-1.16-1.013-.694-2.318-1.413-2.9-1.596l-1.058-.333.988-.018c.544-.01 2.135.28 3.535.644 2.6.675 4.605.856 4.605.415 0-.347-1.479-1.36-2.616-1.791-.935-.355-.915-.361.9-.261 2.1.115 3.862.79 4.957 1.899.72.729.727.73.727.13 0-.934-1.81-2.484-3.47-2.973-1.732-.51-.9-.598.957-.102 2.68.716 5.39 2.515 6.21 4.124.295.578.537 1.15.537 1.273 0 .122-1.102.361-2.448.532s-3.511.671-4.812 1.112c-3.03 1.027-4.41 1.017-7.16-.05m-83.06-2.246c-.331-4.672.95-8.655 3.622-11.257l1.343-1.308.418.754c.31.56.419 1.506.419 3.664 0 2.803-.036 2.984-.958 4.895-.887 1.84-3.687 5.524-4.365 5.745-.197.064-.358-.772-.48-2.493m125.87-.33c-.464-.283-1.05-.829-1.301-1.212-.556-.848-.22-1.17 1.221-1.176 1.652-.007 4.104 1.78 3.588 2.615-.3.486-2.579.34-3.507-.227m-104.922-.902c-1.831-.683-4.166-2.965-3.74-3.655.203-.328 3.603-.26 4.628.093.494.17 1.341.6 1.882.955 1.055.692 2.477 2.374 2.223 2.628-.352.353-4.033.337-4.993-.021m.993-5.296c-.727-.191-2.034-.56-2.902-.82l-1.58-.473.898-.75c2.53-2.112 6.92-3.595 9.62-3.25 1.876.239 3.85 1.003 4.937 1.91l.907.758-1.14.825c-1.943 1.409-3.805 1.977-6.771 2.068-1.607.05-3.165-.056-3.969-.268\" style=\"fill:teal;stroke-width:.264583\"></path></svg>\n`)}`\n\n// ---------- Built-in Skins Registry ---------- //\n\n/**\n * Built-in skins that ship with the library.\n * PRs to add new WalletConnect-compatible wallets should add entries here.\n */\nexport const BUILTIN_SKINS: Record<string, WalletConnectSkin> = {\n biatec: {\n id: 'biatec',\n name: 'Biatec Wallet',\n icon: BIATEC_ICON\n },\n voiwallet: {\n id: 'voiwallet',\n name: 'Voi Wallet',\n icon: VOI_WALLET_ICON\n }\n}\n\n// ---------- Custom Skins Registry (Runtime) ---------- //\n\n/**\n * Runtime registry for custom skins added by developers.\n * Use `registerSkin()` to add custom skins.\n */\nconst customSkins = new Map<string, WalletConnectSkin>()\n\n/**\n * Register a custom WalletConnect skin at runtime.\n * This allows developers to add their own wallet skins without PRing the library.\n *\n * @param skin - The skin definition to register\n * @throws Error if attempting to override a built-in skin\n *\n * @example\n * ```typescript\n * import { registerSkin } from '@txnlab/use-wallet'\n *\n * registerSkin({\n * id: 'mywallet',\n * name: 'My Custom Wallet',\n * icon: 'data:image/svg+xml;base64,...'\n * })\n * ```\n */\nexport function registerSkin(skin: WalletConnectSkin): void {\n if (BUILTIN_SKINS[skin.id]) {\n throw new Error(`Cannot override built-in skin: ${skin.id}`)\n }\n customSkins.set(skin.id, skin)\n}\n\n/**\n * Get a skin by its ID from either built-in or custom registries.\n *\n * @param skinId - The skin identifier\n * @returns The skin definition, or undefined if not found\n */\nexport function getSkin(skinId: string): WalletConnectSkin | undefined {\n return BUILTIN_SKINS[skinId] || customSkins.get(skinId)\n}\n\n/**\n * Resolve a skin option to a full WalletConnectSkin object.\n *\n * If the option is a string, looks up the skin in the registries.\n * If the option is a full skin object, registers it as a custom skin and returns it.\n *\n * @param skinOption - Either a skin ID string or a full skin definition\n * @returns The resolved skin, or undefined if not found (when string ID provided)\n */\nexport function resolveSkin(skinOption: WalletConnectSkinOption): WalletConnectSkin | undefined {\n if (typeof skinOption === 'string') {\n return getSkin(skinOption)\n }\n\n // If it's a full skin definition, register it as a custom skin\n if (!BUILTIN_SKINS[skinOption.id]) {\n customSkins.set(skinOption.id, skinOption)\n }\n return skinOption\n}\n","import { logger } from 'src/logger'\nimport { WalletConnect } from './walletconnect'\nimport type { WalletConstructor, WalletId } from './types'\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 200 180\"><path d=\"M94.27 151.629c-.861-.526-1.51-1.37-1.83-2.386-.197-.62-.18-.627 1.082-.437.705.105 1.6.356 1.988.557.696.36 1.815 1.876 1.815 2.459 0 .486-2.166.348-3.054-.193m23.953-.263c-.788-.419-2.095-2.123-2.108-2.75-.01-.433 2.467-.182 3.403.345.955.536 2.148 1.97 2.148 2.582 0 .503-2.397.38-3.443-.177m-9.024-1.165c-1.567-1.193-2.38-2.74-2.55-4.849-.075-.933-.054-1.697.045-1.697.866 0 2.714 1.67 3.439 3.107.398.789.657 3.888.351 4.195-.07.07-.648-.27-1.285-.756m-8.906-1.354c-.63-.684-1.21-1.648-1.387-2.305-.318-1.18-.136-3.416.278-3.416.555 0 2.108 1.697 2.505 2.737.472 1.237.457 3.905-.023 4.063-.16.053-.777-.433-1.373-1.08m-6.805-1.775c-2.764-.612-5.223-1.425-5.357-1.772-.08-.21.169-1.027.555-1.814s.701-1.469.701-1.515c0-.047-.803.067-1.786.253-.982.185-1.857.256-1.944.157-.088-.1-.365-.715-.618-1.367-.252-.652-.858-1.729-1.345-2.393-1.293-1.76-5.285-5.526-7.272-6.858-3.826-2.564-4.96-3.855-4.667-5.316.08-.402.692-1.574 1.359-2.606 1.65-2.551 2.51-4.472 2.512-5.62.002-.571-.364-1.69-.901-2.758l-.905-1.796.706-.532c1.936-1.46 4.649-4.916 4.205-5.36-.06-.06-.846.72-1.745 1.732-3.553 3.997-7.814 6.463-16.014 9.27-5.324 1.823-5.853 2.06-7.183 3.228-1.555 1.365-1.962 2.502-2.531 7.063-.284 2.275-.706 4.79-.937 5.591-.231.8-.403 2.17-.382 3.043.032 1.346-.157 2.06-1.248 4.698-1.498 3.622-1.068 3.708-4.138-.827l-2.036-3.008.747-.784c.411-.43 1.075-.978 1.475-1.216.955-.568.919-.922-.236-2.331-.53-.647-.917-1.209-.86-1.25s.43-.277.83-.526c1.788-1.12 2.7-4.727 2.987-11.822.214-5.274.595-6.46 2.195-6.83 6.634-1.535 7.58-1.98 8.618-4.066.926-1.858.9-3.701-.121-8.475-.87-4.072-1.047-7.21-.516-9.223.606-2.303 3.759-7.433 5.667-9.221.376-.353.684-.729.684-.835 0-.254-3.325-2.697-4.448-3.268-.482-.245-1.455-.45-2.163-.456-3.892-.03-6.628 1.877-8.722 6.08-.603 1.212-1.582 2.73-2.176 3.374-2.733 2.965-8.602 4.09-12.666 2.43l-.913-.374 1.323-.05c1.422-.054 3.498-.94 3.944-1.683.414-.69.076-.79-1.06-.314-1.443.605-4.075.597-5.039-.015-1.259-.8-2.23-1.81-2.795-2.908l-.535-1.042 1.243 1.095c1.51 1.328 2.691 1.752 4.425 1.585 1.506-.145 2.523-.851 1.65-1.147-3.195-1.08-5.834-3.078-7.07-5.35-.809-1.485-1.513-3.982-1.504-5.334l.006-.936.42.854c.232.47.941 1.333 1.576 1.918l1.155 1.064 2.189-.012 2.188-.011-1.012-.535c-.975-.514-3.353-2.766-3.353-3.175 0-.11.506.079 1.124.418 1.282.703 3.888 1.32 4.21.996.12-.118-.204-.612-.718-1.097-.513-.484-1.17-1.344-1.46-1.911l-.525-1.03 1.174.895c2.02 1.542 3.883 1.506 6.342-.123.69-.457 1.218-.863 1.175-.903s-.989.227-2.103.594c-1.87.618-2.11.64-3.151.305-1.284-.415-2.023-1.273-2.25-2.613l-.158-.926.486.595c1.07 1.31 2.652 1.255 6.363-.224 1.132-.451 2.892-1.036 3.91-1.3 2.732-.706 1.561-.926-2.298-.43-1.778.228-3.27.376-3.318.329-.047-.047.662-.415 1.575-.818 2.002-.883 4.78-1.152 6.858-.663 1.817.427 2.555.81 4.032 2.087 1.151.997 3.654 2.156 4.605 2.133.595-.015-2.96-3.395-4.552-4.328-1.639-.96-4.11-1.542-6.107-1.438-.92.049-1.627.016-1.571-.073.242-.388 3.44-.825 5.203-.71 4.048.265 6.96 2.546 10.902 8.537 2.553 3.883 4.234 5.67 6.137 6.524l1.092.49 2.215-1.027c4.747-2.2 8.797-2.518 16.097-1.26 2.25.387 4.717.704 5.482.704h1.39l.074 3.203.074 3.203.894-1.113c.88-1.096.894-1.152.846-3.516l-.049-2.402-1.61-1.721c-4.14-4.425-4.335-6.536-1.135-12.213 2.744-4.87 2.704-4.41.813-9.32-.883-2.292-1.696-4.167-1.807-4.167-.339 0-.205 4 .196 5.821.716 3.256.435 4.822-1.006 5.603-.371.2-2.144.33-4.904.36-3.6.036-4.348-.022-4.473-.348-.087-.227.102-.582.451-.845.53-.4.563-.53.274-1.09-.18-.35-.692-1.022-1.137-1.493s-.734-.933-.64-1.026c.093-.094 1.072-.036 2.175.128 3.023.45 3.76.398 4.211-.297.4-.615 2.887-9.725 2.704-9.907-.196-.196-1.55 1.62-2.759 3.7-1.782 3.068-3.14 3.895-6.379 3.889-2.485-.005-5.43-1.098-8.658-3.213-1.439-.943-3.02-1.855-3.514-2.027-1.524-.531-3.75-.392-5.163.324l-1.26.638.567-.603c.892-.95 3.048-2.004 4.432-2.167 1.94-.23 3.3.283 5.786 2.18 2.39 1.823 3.163 2.225 4.28 2.225.6 0 .497-.12-.745-.872-.792-.48-2.416-1.598-3.609-2.486-2.658-1.978-4.119-2.58-5.831-2.4l-1.26.132.926-.39c.667-.281 1.609-.36 3.373-.284 1.346.059 2.448.077 2.448.04 0-.278-2.537-1.455-3.71-1.722-.89-.202-1.231-.365-.884-.421.312-.051 1.86.225 3.44.614 2.564.63 3.167.687 5.602.525 5.536-.369 7.032-1.144 9.218-4.774l1.433-2.382-1.224 1.323c-.673.728-1.779 1.928-2.457 2.666-.677.739-1.53 1.417-1.893 1.508l-.662.165.61-.503c.334-.277 1.088-1.491 1.675-2.698 1.772-3.648 3.228-4.779 6.772-5.257 3.522-.476 4.797-.791 5.421-1.342.332-.293.429-.44.215-.329-.213.112-1.94.277-3.836.367-2.955.14-3.666.263-4.97.86-1.632.749-4.092 2.893-4.996 4.356-.764 1.236-.923.905-.224-.465 1.387-2.718 4.685-4.945 8.366-5.651l1.815-.349-1.058-.235c-.582-.13-1.952-.224-3.043-.209l-1.984.027 1.72-.82c1.427-.682 2.04-.822 3.611-.822 1.607 0 1.86-.06 1.679-.4-.539-1.005-1.377-1.452-2.69-1.432-.769.011-1.156-.067-.937-.19.534-.298 2.168-.34 4.169-.104 1.648.194 1.82.159 3.59-.733 1.023-.515 2.472-1.047 3.22-1.183 1.388-.253 3.607-.04 4.472.429.942.51 1.958 1.825 2.095 2.712.116.746 0 1.052-.671 1.777-.752.813-.811 1.018-.811 2.82 0 1.706-.105 2.127-.85 3.424-.467.814-.973 1.476-1.124 1.473s-.797-.242-1.435-.532c-1.277-.579-1.714-.435-1.988.655-.115.46.045.84.605 1.44.42.448 1.621 2.237 2.671 3.975 1.883 3.116 1.905 3.175 1.585 4.146-.258.78-.258 1.56 0 3.73.179 1.51.253 3.031.166 3.38-.128.509.033.795.805 1.432 1.367 1.126 5.02 2.947 5.914 2.947 1.268 0 1.588.247 1.588 1.227 0 1.057-.642 2.742-1.045 2.742-.153 0-.278-.298-.278-.662 0-.558-.123-.661-.793-.661-.436 0-2.162-.467-3.836-1.036l-3.044-1.036v1.788c0 .984-.077 3.057-.172 4.608l-.173 2.82h3.015l-.133.86c-.073.472-.206 2.11-.295 3.637-.373 6.42-.634 7.203-4.207 12.65-4.119 6.278-4.635 7.984-3.493 11.548.37 1.158.647 2.133.613 2.167-.246.246-2.569-1.19-3.783-2.34-2.616-2.473-2.922-3.975-1.146-5.619.954-.882 1.054-1.087.892-1.828-.417-1.91-.553-1.976-1-.482-.232.777-.693 1.849-1.024 2.382-.526.846-.603 1.318-.603 3.705v2.736l3.175 1.022c1.746.562 3.446 1.028 3.777 1.034.583.012.59-.012.194-.776-.224-.434-.479-1.307-.566-1.939-.208-1.523.53-3.065 3.905-8.159 4.537-6.845 5.478-9.25 5.681-14.513.07-1.82.19-3.93.267-4.692.137-1.353.17-1.398 1.379-1.933 2.27-1.004 4.245-3.717 6.253-8.589.526-1.274.459-1.204-1.891 1.985-1.019 1.382-2.13 2.751-2.47 3.042-.604.516-.603.506.048-.397.938-1.299 1.216-2.144 1.685-5.107.663-4.193 1.699-6.255 4.604-9.16 3.639-3.638 9.47-6.348 13.7-6.365.635-.003 1.201-.155 1.322-.356.117-.192 1.105-.92 2.196-1.615 1.092-.696 2.252-1.511 2.579-1.812.327-.3.66-.48.74-.4.081.081-.038.942-.263 1.914s-.41 1.88-.41 2.016c0 .37 1.393.3 1.992-.102.287-.192 1.296-.62 2.241-.953s1.998-.78 2.338-.994c.34-.215.665-.345.722-.288.302.302-1.982 3.526-2.927 4.132l-1.152.74c-.277.179 1.202 3.732 1.975 4.745.674.882.862 1.347.742 1.825-.089.354.045 1.273.296 2.044.645 1.98 2.913 6.751 3.698 7.779.808 1.06.82 1.416.075 2.363-.32.408-.648 1.225-.728 1.816-.118.879-.279 1.12-.89 1.335-1.457.512-2.298-.449-2.94-3.358-.113-.512-.325-.728-.715-.728-.634 0-.619.099.398 2.514.368.873.572 1.685.453 1.804-.12.119-.679.178-1.244.132-1.006-.082-1.03-.108-1.165-1.29-.11-.958-.407-1.515-1.444-2.716-1.28-1.483-1.523-1.617-3.974-2.186-.436-.102-1.235-.406-1.776-.677l-.981-.491-.311 1.124c-.462 1.668-.381 7.592.14 10.35.244 1.29.926 3.552 1.516 5.027 1.864 4.655 1.933 4.98 1.924 9.031-.006 2.853-.112 3.972-.461 4.87-.25.641-.415 1.204-.367 1.252.047.047 2.935.203 6.419.347 4.2.174 6.786.397 7.679.664 1.433.429 2.955 1.341 3.328 1.995.125.219 1.292 3.718 2.594 7.777 2.56 7.978 2.515 7.613 1.142 9.263-.582.7-.623.918-.458 2.455l.18 1.686-1.685 1.59c-2.476 2.335-2.487 2.338-2.833.702l-.825-3.894c-.497-2.344-.503-2.535-.09-2.844.245-.182.75-.332 1.121-.335 1.259-.007 1.444-.36.672-1.277l-.7-.833.461-1.209c.403-1.054.421-1.428.146-2.924-.856-4.647-3.463-7.755-6.516-7.769-1.198-.006-5.626.726-6.143 1.015-.419.235 1.36 2.035 4.026 4.073 1.954 1.494 2.487 2.265 2.708 3.918.115.858-.031 1.278-.963 2.753-1.122 1.776-2.596 4.941-4.015 8.62-.437 1.133-1.048 2.383-1.358 2.777-.546.695-.623.712-2.434.544-1.51-.14-2.034-.085-2.726.287-.933.503-1.032.488-5.234-.754l-1.852-.547 1.058-.93c2.452-2.155 4.96-4.035 5.375-4.028.245.004.743.417 1.107.919.364.5.74.914.835.918.336.014 2.673-2.777 3.423-4.09.928-1.622 1.429-3.721 1.19-4.992-.414-2.208-2.105-3.2-8.836-5.183-4.604-1.356-5.44-1.637-6.837-2.3-.81-.384-.92-.36-3.047.664-2.593 1.248-5.507 2.251-8.665 2.983-3.304.766-9.686.95-12.988.376-3.227-.562-7.639-2.035-9.626-3.214-.856-.508-1.618-.862-1.693-.787-.15.15 1.12 2.079 1.665 2.53.271.226.239.732-.166 2.586-1.245 5.713-2.66 8.612-7.189 14.73-2.852 3.852-3.402 5.685-2.327 7.762.66 1.274 9.278 9.763 11.016 10.85.797.498 1.576 1.26 1.929 1.889.496.883 2.158 5.275 2.158 5.704 0 .2-1.577.111-2.779-.154m46.76-1.68c-2.98-1.107-5.348-3.111-7.054-5.97-1.025-1.72-2.16-4.428-1.946-4.643.229-.229 3.039.644 4.916 1.527 3.417 1.608 6.275 5.198 6.594 8.283.178 1.723.063 1.76-2.51.803m-70.399.107c-2.923-.4-6.887-2.043-7.56-3.132-.23-.371 1.693-1.772 3.683-2.683 4.119-1.887 9.22-1.779 13.075.277 1.637.873 4.347 2.943 4.307 3.29-.014.122-.895.499-1.957.837-4.06 1.29-8.482 1.831-11.548 1.411m51.264-1.55c-1.687-.66-3.315-1.831-4.87-3.503l-1.323-1.421 2.116-.183c3.467-.298 6.424.354 8.757 1.932 1.096.742 2.753 2.456 2.753 2.848 0 .859-5.46 1.099-7.433.326m38.521-1.26c-3.84-.798-6.966-2.331-9.705-4.761-2.156-1.913-3.179-2.512-5.08-2.978-1.478-.362-3.339-1.249-3.339-1.591 0-.318 2.824-.81 5.689-.991 7.046-.446 13.549 2.741 16.133 7.908.513 1.024.932 2.025.932 2.224 0 .277-.479.354-2.05.33-1.128-.016-2.289-.08-2.58-.14m-61.217-2.076c-1.35-.421-2.52-1.449-3.238-2.845l-.51-.992h1.178c1.479 0 2.46.365 3.42 1.273.65.615 1.762 2.392 1.762 2.817 0 .255-1.426.117-2.612-.253m5.45-1.504c-1.583-1.153-2.396-3.509-1.878-5.442.192-.715.563-.742 1.334-.098 1.18.986 1.673 2.177 1.674 4.051 0 .974-.09 1.826-.2 1.895-.112.068-.53-.114-.93-.406m-26.254-1.075a150 150 0 0 0-3.968-1.97l-2.382-1.138 1.21-.001c2.527-.002 4.928 1.203 6.339 3.185.306.43.52.777.473.77-.046-.007-.799-.388-1.672-.845zm-14.354-3.608c-.764-.264-1.631-.699-1.927-.966-.59-.534-1.695-2.22-1.542-2.352.053-.045.573-.192 1.155-.325 1.324-.303 1.45-.925.662-3.265-.306-.908-.503-1.705-.438-1.77.066-.066.637.018 1.27.187.95.253 1.683.849 4.194 3.411 2.483 2.534 3.286 3.19 4.366 3.566.727.253 1.62.587 1.984.742l.662.28-.662.199c-.779.234-6.102.794-7.42.782-.503-.005-1.54-.225-2.304-.489m104.313-.83c-1.528-.484-4.719-2.704-4.75-3.303-.006-.145.88-.42 1.972-.61 2.368-.414 4.676-.11 6.582.864 1.41.721 3.082 2.35 2.83 2.756-.55.891-4.237 1.054-6.634.294m-56.58-.117c-2.06-.734-3.35-2.65-3.345-4.961.006-2.304.15-2.574 1.279-2.397 1.516.239 3.013.83 3.677 1.455l.609.572 1.523-1.507c.838-.829 1.593-1.507 1.679-1.507.085 0 .362.735.614 1.633.94 3.35-.383 5.974-3.431 6.806-1.302.356-1.35.354-2.605-.094m-75.315-.698c-6.533-.942-11.018-2.967-14.552-6.571-1.972-2.01-3.175-3.81-2.8-4.186.109-.109 1.32-.239 2.693-.29 5.235-.192 9.266 1.449 13.22 5.381 2.097 2.085 5.101 5.853 4.838 6.068-.05.041-1.58-.14-3.4-.402m97.327-1.25c4.267-5.096 8.959-7.442 13.334-6.666.982.174 1.84.405 1.906.513.198.32-1.54 2.713-2.834 3.904-2.314 2.13-5.42 3.148-10.492 3.438l-3.055.175zm17.502-.559c0-.646 1.702-5.318 2.447-6.715 1.472-2.762 4.84-5.965 5.538-5.267.161.161.234 1.18.176 2.481-.114 2.603-.705 4.023-2.51 6.03-1.524 1.695-5.651 4.23-5.651 3.471m8.04-1.157c3.728-2.356 7.725-5.133 8.864-6.158 1.353-1.218 1.403-1.24.984-.43-1.093 2.113-4.85 5.104-7.93 6.31-1.734.68-2.798.834-1.919.278m2.457-4.828c-.243-.511-.443-1.383-.443-1.937 0-1.018.973-3.223 1.5-3.399.368-.123 1.146 1.814 1.146 2.853 0 .855-.78 2.6-1.39 3.105-.298.247-.456.127-.813-.622m11.343.373c-1.157-.135-2.15-.292-2.206-.348-.16-.16 1.966-2.017 3.71-3.24 2.387-1.673 4.54-2.317 7.745-2.316 2.182 0 2.874.104 3.949.596l1.303.595-.907.936c-2.935 3.03-7.986 4.433-13.594 3.777m-135.543-5.98c-3.17-5.953-3.802-11.809-1.769-16.407.766-1.73 2.408-4.033 2.878-4.033.185 0 .7.685 1.142 1.522 2.02 3.82 2.643 8.569 1.708 13.03-.515 2.454-2.383 7.938-2.705 7.938-.089 0-.653-.923-1.254-2.05m131.543-.026c-2.11-1.55-3.023-3.093-3.023-5.108 0-1.215.77-3.056 1.587-3.796.494-.447.574-.438 1.965.243 1.713.838 2.676 1.892 3.072 3.363.464 1.725-.257 3.872-1.791 5.328l-.771.733zm-142.341-2.392c-.955-.434-3.028-2.462-3.028-2.963 0-.106.589-.273 1.309-.372 2.032-.28 3.923.381 5.269 1.84.602.654 1.095 1.295 1.095 1.426 0 .289-1.308.57-2.613.562-.527-.003-1.442-.225-2.032-.493m134.927-3.139c1.218-3.954 1.471-13.59.477-18.203a57 57 0 0 0-1.472-5.291c-1.025-3-1.187-3.508-1.031-3.229.06.11.227.199.369.199s.185-.12.095-.265-.099-.265-.019-.265c.285 0 2.284 4.27 2.94 6.28.942 2.884 1.488 6.584 1.481 10.037-.008 4.205-.63 7.156-2.126 10.088-.577 1.13-.974 1.491-.714.65m15.622-.53c.096-.4.694-1.798 1.33-3.108 1.78-3.673 4.396-6.043 7.61-6.899 2.261-.602 2.412-.555 2.244.699-.39 2.903-3.348 6.413-6.971 8.27-.455.233-1.63.726-2.608 1.094l-1.78.67zm-150.592-3.621c-5.551-2.683-8.865-5.295-11.436-9.013-2.092-3.028-3.72-7.066-3.72-9.231 0-.636.089-.69 1.135-.69 2.913 0 6.796 1.74 9.585 4.296 3.283 3.008 5.033 6.073 6.587 11.534 1.15 4.043 1.263 4.544 1.02 4.54-.111 0-1.539-.647-3.17-1.436m145.075.485c-.092-.241-.309-1.552-.48-2.914-.562-4.443.43-8.183 2.772-10.456.58-.562 1.164-1.022 1.3-1.022.405 0 1.01 1.75 1.186 3.43.324 3.1-.9 6.63-3.421 9.872-.926 1.19-1.226 1.431-1.357 1.09m-6.353-7.675c.34-1.413.908-2.21 1.957-2.745 1.55-.792 1.96-.718 1.754.314-.326 1.628-1.397 2.695-3.034 3.022-.84.168-.856.154-.677-.591m18.432-2.084c-.473-.206-.857-.469-.854-.585.01-.368 1.945-1.592 2.816-1.781.461-.1 1.34-.047 1.952.118l1.114.3-.882.909c-.764.789-2.17 1.45-3.022 1.422-.145-.005-.651-.178-1.124-.383m-4.19-2.014c.437-5.243 1.85-8.992 4.434-11.754 1.589-1.698 4.011-3.172 5.51-3.353.608-.073.669.016.745 1.087.125 1.742-.655 4.812-1.81 7.117-1.233 2.466-3.244 4.75-6.16 7-3.185 2.457-2.932 2.466-2.719-.097M164.535 96.2c.011-.601.996-2.432 1.613-2.997.74-.68 1.86-1.142 2.764-1.142.74 0 .783.213.287 1.402-.328.784-2.05 2.558-2.496 2.573-.105.004-.636.11-1.182.237-.703.163-.99.142-.986-.073M39.38 92.511l-1.19-.287 1.894-.184c2.429-.237 4.211-.836 5.755-1.933 1.705-1.212 2.43-2.3 3.187-4.777.358-1.173 1.027-2.644 1.487-3.27.855-1.16 1.328-1.354.772-.315-.17.317-.42 1.753-.555 3.191s-.371 2.944-.524 3.347c-1.29 3.39-6.255 5.33-10.826 4.228m132.353-3.022c-1.37-3.004-1.722-4.62-1.596-7.322.12-2.584.663-4.209 1.984-5.941l.698-.915.593.689c1.538 1.787 2.37 6.366 1.72 9.457-.375 1.79-1.903 5.61-2.293 5.734-.158.05-.656-.715-1.106-1.702m6.655.323c.094-.582.245-3.618.336-6.747.16-5.514-.097-11.175-.726-16.007-.66-5.078-2.584-11.438-4.788-15.834-.572-1.142-.914-1.998-.76-1.903.154.096.28.02.28-.17 0-.608 1.905 2.465 3.056 4.93 3.19 6.83 5.492 18.482 5.039 25.5-.219 3.379-.79 6.78-1.52 9.04-.672 2.084-1.164 2.722-.917 1.191m-5.129-39.936c0-.065-.119-.19-.264-.28s-.265-.038-.265.116.12.28.265.28.264-.052.264-.116M21.39 87.46c-6.885-6.262-9.634-10.983-10.312-17.71-.218-2.153.098-6.211.514-6.628.377-.377 2.86.757 4.714 2.153 4.287 3.228 7.128 8.67 7.976 15.276.349 2.717.746 9.923.547 9.92-.073-.001-1.62-1.356-3.44-3.01m141.818 1.495c.002-1.223.51-2.654 1.254-3.539.681-.81 2.635-1.902 2.999-1.677.248.154-.193 2.347-.65 3.224-.523 1.007-1.444 1.82-2.616 2.31l-.989.413zm19.715-9.65c.101-.48.414-1.25.694-1.712.53-.872 2.361-1.937 3.331-1.937.515 0 .537.075.29.992-.432 1.599-1.891 2.901-3.749 3.347-.733.176-.746.16-.566-.69m-1.078-4.864c-.434-3.474.426-7.949 2.004-10.427.992-1.557 3.308-3.704 3.996-3.704.79 0 1.023 5.098.34 7.427-.775 2.639-3.22 6.102-5.41 7.661l-.744.53zM27.106 70.74c-.83-2.163.852-9.285 3.442-14.577 3.414-6.977 9.876-14.173 15.518-17.28 1.338-.736 1.306-.696-.732.921-3.554 2.82-6.93 6.51-9.617 10.514-2.78 4.142-4.184 7.582-5.825 14.274-.593 2.419-1.273 4.885-1.512 5.482-.446 1.116-.991 1.401-1.274.666m148.415-4.429c-3.31-1.775-5.714-4.87-6.05-7.787-.123-1.073-.097-1.124.573-1.122 1.742.006 4.537 2.38 5.833 4.954.468.928 1.437 4.572 1.263 4.746-.028.028-.757-.328-1.62-.79M24.465 63.817c-1.392-2.767-2.046-5.175-2.208-8.138-.16-2.924.292-6.48.823-6.48.632 0 2.73 1.536 3.654 2.676 1.65 2.036 2.173 3.325 2.185 5.393.01 1.729-.094 2.069-1.554 5.094-.86 1.782-1.663 3.24-1.783 3.24s-.623-.803-1.117-1.785m155.049-4.47c-.602-3.045-.356-5.571.757-7.767.795-1.57 2.708-3.351 3.137-2.921.187.187.302 1.33.302 3 0 2.617-.03 2.756-1.001 4.573-.551 1.03-1.462 2.322-2.024 2.871l-1.022.998zm-68.432-2.831c0-.451.748-1.115 1.521-1.35.762-.233.743.064-.061.978-.678.77-1.46.969-1.46.372M33.59 54.752c1.046-1.877 3.42-4.082 5.433-5.045 1.457-.699 2.23-.892 3.93-.982 2.15-.115 3.863.18 4.728.812.444.324.393.442-.74 1.701-1.47 1.635-3.438 2.97-5.575 3.778-1.242.47-2.33.63-4.998.735l-3.41.135zm76.965.194c0-.802 1.282-2.19 2.17-2.35.969-.176 1.534.041 1.534.587 0 .382-.305.583-1.245.82-.685.172-1.518.608-1.852.968l-.607.655zm57.018-.605c-.437-.225-.965-.578-1.173-.783-.327-.323-.22-.446.794-.905 1.314-.597 2.774-.659 4.347-.184 1.386.417 1.347.95-.122 1.69-1.377.695-2.73.76-3.846.182m-58.306-1.16c.174-.5.815-1.406 1.424-2.015.918-.918 1.368-1.152 2.637-1.37 1.42-.246 2.024-.224 3.048.107.8.26-.765 1.148-2.022 1.148-1.584 0-2.915.6-4.27 1.928l-1.133 1.109zm65.577-2.87c-.75-1.497-.906-2.129-1.001-4.048-.094-1.886-.02-2.485.431-3.506.3-.677.655-1.231.79-1.231.33 0 1.475 1.777 1.856 2.883.497 1.442.383 4.31-.236 5.965-.3.803-.638 1.517-.75 1.586-.11.069-.602-.673-1.09-1.649m-65.359.239c.662-1.25 2.453-2.918 3.604-3.357 1.384-.53 4.318-.42 5.512.206l.757.397-.576.403c-.45.315-1.084.374-2.904.27-2.854-.163-3.938.155-5.54 1.625-.876.802-1.1.922-.853.456m-79.602-1.036c-1.895-1.894-2.474-3.183-2.62-5.824-.066-1.211-.008-2.314.128-2.45.332-.332 2.019.945 2.831 2.145.348.513.825 1.5 1.06 2.192.47 1.384.581 4.818.164 5.076-.144.089-.848-.423-1.563-1.139m78.698-.58c.528-1.848 2.227-3.934 3.94-4.841 1.648-.872 4.113-.74 7.331.392l2.55.897-.936.614c-.919.602-.967.606-2.55.2-2.732-.698-3.209-.739-5.014-.424-2.025.352-3.826 1.419-4.84 2.865-.543.777-.635.833-.481.297m54.957-.028c-.619-.306-1.125-.665-1.125-.797 0-.133.387-.477.86-.765 1.455-.887 4.475-.65 6.244.49l.621.401-1.15.602c-1.547.81-3.894.84-5.45.07m-113.51-5.029c-.621-.307-1.376-.872-1.677-1.255l-.548-.696.883-.372c2.07-.872 5.296-.261 6.675 1.263.498.55.494.556-.662 1.08-1.52.69-3.253.682-4.672-.02m69.126-.293c-2.905-1.128-5.647-1.179-7.871-.147-.837.388-1.522.665-1.522.615 0-.292 2.738-1.751 3.95-2.106 1.796-.525 4.726-.535 6.634-.023 1.759.472 3.564.489 4.61.043.696-.298.59-.32-1.07-.226-1.83.103-1.852.096-3.683-1.16-1.013-.694-2.318-1.413-2.9-1.596l-1.058-.333.988-.018c.544-.01 2.135.28 3.535.644 2.6.675 4.605.856 4.605.415 0-.347-1.479-1.36-2.616-1.791-.935-.355-.915-.361.9-.261 2.1.115 3.862.79 4.957 1.899.72.729.727.73.727.13 0-.934-1.81-2.484-3.47-2.973-1.732-.51-.9-.598.957-.102 2.68.716 5.39 2.515 6.21 4.124.295.578.537 1.15.537 1.273 0 .122-1.102.361-2.448.532s-3.511.671-4.812 1.112c-3.03 1.027-4.41 1.017-7.16-.05m-83.06-2.246c-.331-4.672.95-8.655 3.622-11.257l1.343-1.308.418.754c.31.56.419 1.506.419 3.664 0 2.803-.036 2.984-.958 4.895-.887 1.84-3.687 5.524-4.365 5.745-.197.064-.358-.772-.48-2.493m125.87-.33c-.464-.283-1.05-.829-1.301-1.212-.556-.848-.22-1.17 1.221-1.176 1.652-.007 4.104 1.78 3.588 2.615-.3.486-2.579.34-3.507-.227m-104.922-.902c-1.831-.683-4.166-2.965-3.74-3.655.203-.328 3.603-.26 4.628.093.494.17 1.341.6 1.882.955 1.055.692 2.477 2.374 2.223 2.628-.352.353-4.033.337-4.993-.021m.993-5.296c-.727-.191-2.034-.56-2.902-.82l-1.58-.473.898-.75c2.53-2.112 6.92-3.595 9.62-3.25 1.876.239 3.85 1.003 4.937 1.91l.907.758-1.14.825c-1.943 1.409-3.805 1.977-6.771 2.068-1.607.05-3.165-.056-3.969-.268\" style=\"fill:teal;stroke-width:.264583\"></path></svg>\n`)}`\n\n/**\n * @deprecated BiatecWallet is deprecated and will be removed in v5.\n * Use WalletConnect with the 'biatec' skin instead:\n *\n * ```typescript\n * { id: WalletId.WALLETCONNECT, options: { projectId: '...', skin: 'biatec' } }\n * ```\n */\nexport class BiatecWallet extends WalletConnect {\n private static deprecationWarningShown = false\n\n constructor(args: WalletConstructor<WalletId.BIATEC>) {\n super(args as WalletConstructor<WalletId.WALLETCONNECT>)\n\n // Show deprecation warning once\n if (!BiatecWallet.deprecationWarningShown) {\n BiatecWallet.deprecationWarningShown = true\n logger.warn(\n 'BiatecWallet is deprecated and will be removed in v5. ' +\n \"Use WalletConnect with the 'biatec' skin instead: \" +\n \"{ id: WalletId.WALLETCONNECT, options: { projectId: '...', skin: 'biatec' } }\"\n )\n }\n }\n\n static defaultMetadata = {\n name: 'BiatecWallet',\n icon: ICON\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, setAccounts, type State } from 'src/store'\nimport { compareAccounts } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type {\n SignDataResponse,\n SignMetadata,\n WalletAccount,\n WalletConstructor,\n WalletId\n} from 'src/wallets/types'\n\nexport type CustomProvider = {\n connect(args?: Record<string, any>): Promise<WalletAccount[]>\n disconnect?(): Promise<void>\n resumeSession?(): Promise<WalletAccount[] | void>\n signTransactions?<T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]>\n transactionSigner?(\n txnGroup: algosdk.Transaction[],\n indexesToSign: number[]\n ): Promise<Uint8Array[]>\n signData?(data: string, metadata: SignMetadata): Promise<SignDataResponse>\n}\n\nexport interface CustomWalletOptions {\n provider: CustomProvider\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"24\" height=\"24\" fill=\"#525252\" />\n</svg>\n`)}`\n\nexport class CustomWallet extends BaseWallet {\n private provider: CustomProvider\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options,\n metadata = {}\n }: WalletConstructor<WalletId.CUSTOM>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n if (!options?.provider) {\n this.logger.error('Missing required option: provider')\n throw new Error('Missing required option: provider')\n }\n this.provider = options.provider\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Custom',\n icon: ICON\n }\n\n public connect = async (args?: Record<string, any>): Promise<WalletAccount[]> => {\n this.logger.info('Connecting...')\n try {\n if (!this.provider.connect) {\n this.logger.error('Method not supported: connect')\n throw new Error('Method not supported: connect')\n }\n\n const walletAccounts = await this.provider.connect(args)\n\n if (walletAccounts.length === 0) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n this.logger.info('✅ Connected.', walletState)\n return walletAccounts\n } catch (error: any) {\n this.logger.error('Error connecting:', error.message || error)\n throw error\n }\n }\n\n public disconnect = async (): Promise<void> => {\n this.logger.info('Disconnecting...')\n this.onDisconnect()\n await this.provider.disconnect?.()\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n this.logger.info('Resuming session...')\n\n const result = await this.provider.resumeSession?.()\n\n if (Array.isArray(result)) {\n const walletAccounts = result\n\n if (walletAccounts.length === 0) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n const match = compareAccounts(walletAccounts, walletState.accounts)\n\n if (!match) {\n this.logger.warn('Session accounts mismatch, updating accounts', {\n prev: walletState.accounts,\n current: walletAccounts\n })\n setAccounts(this.store, {\n walletId: this.id,\n accounts: walletAccounts\n })\n }\n }\n this.logger.info('Session resumed.')\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n throw error\n }\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n if (!this.provider.signTransactions) {\n this.logger.error('Method not supported: signTransactions')\n throw new Error('Method not supported: signTransactions')\n }\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n return await this.provider.signTransactions(txnGroup, indexesToSign)\n }\n\n public transactionSigner = async (\n txnGroup: algosdk.Transaction[],\n indexesToSign: number[]\n ): Promise<Uint8Array[]> => {\n if (!this.provider.transactionSigner) {\n this.logger.error('Method not supported: transactionSigner')\n throw new Error('Method not supported: transactionSigner')\n }\n this.logger.debug('Transaction signer called...', { txnGroup, indexesToSign })\n return await this.provider.transactionSigner(txnGroup, indexesToSign)\n }\n\n public signData = async (data: string, metadata: SignMetadata): Promise<SignDataResponse> => {\n if (!this.provider.signData) {\n this.logger.error('Method not supported: signData')\n throw new Error('Method not supported: signData')\n }\n this.logger.debug('Signing data...', { data, metadata })\n return await this.provider.signData(data, metadata)\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, setAccounts, setActiveWallet, type State } from 'src/store'\nimport { compareAccounts, flattenTxnGroup, isSignedTxn, isTransactionArray } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport { WalletId } from 'src/wallets/types'\nimport type { DeflyWalletConnect } from '@blockshake/defly-connect'\nimport type { Store } from '@tanstack/store'\nimport type { SignerTransaction, WalletAccount, WalletConstructor } from 'src/wallets/types'\n\nexport interface DeflyWalletConnectOptions {\n bridge?: string\n shouldShowSignTxnToast?: boolean\n chainId?: 416001 | 416002 | 416003 | 4160\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 1024 1024\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"1024\" height=\"1024\" />\n <path fill=\"#FFFFFF\" d=\"M779.9,684.4L512,230L244.1,684.4L512,529.5L779.9,684.4z\" />\n <path fill=\"#FFFFFF\" d=\"M733.1,730L512,613.5L290.9,730L512,658L733.1,730z\" />\n</svg>\n`)}`\n\nexport class DeflyWallet extends BaseWallet {\n private client: DeflyWalletConnect | null = null\n private options: DeflyWalletConnectOptions\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options = {},\n metadata = {}\n }: WalletConstructor<WalletId.DEFLY>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n this.options = options\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Defly',\n icon: ICON\n }\n\n private async initializeClient(): Promise<DeflyWalletConnect> {\n this.logger.info('Initializing client...')\n const { DeflyWalletConnect } = await import('@blockshake/defly-connect')\n const client = new DeflyWalletConnect(this.options)\n this.client = client\n this.logger.info('Client initialized')\n return client\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n this.logger.info('Connecting...')\n const currentActiveWallet = this.store.state.activeWallet\n if (currentActiveWallet && currentActiveWallet !== this.id) {\n this.manageWalletConnectSession('backup', currentActiveWallet)\n }\n const client = this.client || (await this.initializeClient())\n const accounts = await client.connect()\n\n // Listen for disconnect event\n client.connector?.on('disconnect', this.onDisconnect)\n\n if (accounts.length === 0) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n this.logger.info('✅ Connected.', walletState)\n return walletAccounts\n }\n\n public disconnect = async (): Promise<void> => {\n this.logger.info('Disconnecting...')\n const client = this.client || (await this.initializeClient())\n\n const currentActiveWallet = this.store.state.activeWallet\n if (currentActiveWallet && currentActiveWallet !== this.id) {\n this.manageWalletConnectSession('backup', currentActiveWallet)\n this.manageWalletConnectSession('restore', this.id)\n await client.disconnect()\n // Wait for the disconnect to complete (race condition)\n await new Promise((resolve) => setTimeout(resolve, 500))\n this.manageWalletConnectSession('restore', currentActiveWallet)\n } else {\n await client.disconnect()\n }\n\n this.onDisconnect()\n this.logger.info('Disconnected')\n }\n\n public setActive = (): void => {\n this.logger.info(`Set active wallet: ${this.id}`)\n const currentActiveWallet = this.store.state.activeWallet\n if (currentActiveWallet && currentActiveWallet === WalletId.PERA) {\n this.manageWalletConnectSession('backup', currentActiveWallet)\n }\n this.manageWalletConnectSession('restore')\n setActiveWallet(this.store, { walletId: this.id })\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n // If Pera is active, skip reconnectSession for Defly\n if (state.activeWallet === WalletId.PERA) {\n this.logger.info('Skipping reconnectSession for Defly (inactive)')\n return\n }\n\n this.logger.info('Resuming session...')\n\n const client = this.client || (await this.initializeClient())\n const accounts = await client.reconnectSession()\n\n if (accounts.length === 0) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const match = compareAccounts(walletAccounts, walletState.accounts)\n\n if (!match) {\n this.logger.warn('Session accounts mismatch, updating accounts', {\n prev: walletState.accounts,\n current: walletAccounts\n })\n setAccounts(this.store, {\n walletId: this.id,\n accounts: walletAccounts\n })\n }\n this.logger.info('Session resumed')\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): SignerTransaction[] {\n const txnsToSign: SignerTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn })\n } else {\n txnsToSign.push({ txn, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): SignerTransaction[] {\n const txnsToSign: SignerTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn })\n } else {\n txnsToSign.push({ txn, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n let txnsToSign: SignerTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n this.logger.debug('Sending processed transactions to wallet...', [txnsToSign])\n\n // Sign transactions\n const signedTxns = await client.signTransaction([txnsToSign])\n this.logger.debug('Received signed transactions from wallet', signedTxns)\n\n // ARC-0001 - Return null for unsigned transactions\n const result = txnsToSign.reduce<(Uint8Array | null)[]>((acc, txn) => {\n if (txn.signers && txn.signers.length == 0) {\n acc.push(null)\n } else {\n const signedTxn = signedTxns.shift()\n if (signedTxn) {\n acc.push(signedTxn)\n }\n }\n return acc\n }, [])\n\n this.logger.debug('Transactions signed successfully', result)\n return result\n } catch (error: any) {\n this.logger.error('Error signing transactions:', error.message)\n throw error\n }\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, setAccounts } from 'src/store'\nimport {\n base64ToByteArray,\n byteArrayToBase64,\n compareAccounts,\n flattenTxnGroup,\n isSignedTxn,\n isTransactionArray\n} from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport { WalletId, type WalletAccount, type WalletConstructor } from 'src/wallets/types'\nimport type AVMWebProviderSDK from '@agoralabs-sh/avm-web-provider'\n\nexport function isAVMWebProviderSDKError(error: any): error is AVMWebProviderSDK.BaseARC0027Error {\n return typeof error === 'object' && 'code' in error && 'message' in error\n}\n\nexport abstract class AVMProvider extends BaseWallet {\n public avmWebClient: AVMWebProviderSDK.AVMWebClient | null = null\n protected avmWebProviderSDK: typeof AVMWebProviderSDK | null = null\n protected providerId: string\n\n constructor(args: WalletConstructor<WalletId> & { providerId: string }) {\n super(args)\n this.providerId = args.providerId\n }\n\n protected async _initializeAVMWebProviderSDK(): Promise<typeof AVMWebProviderSDK> {\n if (!this.avmWebProviderSDK) {\n this.logger.info('Initializing @agoralabs-sh/avm-web-provider...')\n\n const module = await import('@agoralabs-sh/avm-web-provider')\n this.avmWebProviderSDK = module.default ? module.default : module\n\n if (!this.avmWebProviderSDK) {\n throw new Error(\n 'Failed to initialize, the @agoralabs-sh/avm-web-provider SDK was not provided'\n )\n }\n\n if (!this.avmWebProviderSDK.AVMWebClient) {\n throw new Error(\n 'Failed to initialize, AVMWebClient missing from @agoralabs-sh/avm-web-provider SDK'\n )\n }\n this.logger.info('@agoralabs-sh/avm-web-provider SDK initialized')\n }\n\n return this.avmWebProviderSDK\n }\n\n protected async _initializeAVMWebClient(): Promise<AVMWebProviderSDK.AVMWebClient> {\n const avmWebProviderSDK = await this._initializeAVMWebProviderSDK()\n\n if (!avmWebProviderSDK.AVMWebClient) {\n throw new Error('Failed to initialize, AVMWebClient not found')\n }\n\n if (!this.avmWebClient) {\n this.logger.info('Initializing new AVM Web Client...')\n this.avmWebClient = avmWebProviderSDK.AVMWebClient.init()\n this.logger.info('AVM Web Client initialized')\n }\n\n return this.avmWebClient\n }\n\n protected async _getGenesisHash(): Promise<string> {\n // First try to get from network config\n const network = this.activeNetworkConfig\n if (network.genesisHash) {\n return network.genesisHash\n }\n\n // Fallback to API request\n const algodClient = this.getAlgodClient()\n const version = await algodClient.versionsCheck().do()\n return algosdk.bytesToBase64(version.genesisHashB64)\n }\n\n protected _mapAVMWebProviderAccountToWalletAccounts(\n accounts: AVMWebProviderSDK.IAccount[]\n ): WalletAccount[] {\n return accounts.map(({ address, name }, idx) => ({\n name: name || `[${this.metadata.name}] Account ${idx + 1}`,\n address\n }))\n }\n\n protected processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): AVMWebProviderSDK.IARC0001Transaction[] {\n const txnsToSign: AVMWebProviderSDK.IARC0001Transaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n protected processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): AVMWebProviderSDK.IARC0001Transaction[] {\n const txnsToSign: AVMWebProviderSDK.IARC0001Transaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n /**\n * Abstract methods\n * These methods must be implemented by specific wallet providers\n */\n protected abstract _enable(): Promise<AVMWebProviderSDK.IEnableResult>\n protected abstract _disable(): Promise<AVMWebProviderSDK.IDisableResult>\n protected abstract _signTransactions(\n txns: AVMWebProviderSDK.IARC0001Transaction[]\n ): Promise<AVMWebProviderSDK.ISignTransactionsResult>\n\n /**\n * Common methods\n * These methods can be overridden by specific wallet providers if needed\n */\n public async connect(): Promise<WalletAccount[]> {\n try {\n this.logger.info('Connecting...')\n const result = await this._enable()\n this.logger.info(`Successfully connected on network \"${result.genesisId}\"`)\n\n const walletAccounts = this._mapAVMWebProviderAccountToWalletAccounts(result.accounts)\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount: walletAccounts[0]\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n this.logger.info('✅ Connected.', walletState)\n return walletAccounts\n } catch (error: any) {\n this.logger.error(\n 'Error connecting: ',\n isAVMWebProviderSDKError(error) ? `${error.message} (code: ${error.code})` : error.message\n )\n throw error\n }\n }\n\n public async disconnect(): Promise<void> {\n try {\n this.logger.info('Disconnecting...')\n this.onDisconnect()\n\n const result = await this._disable()\n\n this.logger.info(\n `Successfully disconnected${result.sessionIds && result.sessionIds.length ? ` sessions [${result.sessionIds.join(',')}]` : ''} on network \"${result.genesisId}\"`\n )\n } catch (error: any) {\n this.logger.error(\n 'Error disconnecting: ',\n isAVMWebProviderSDKError(error) ? `${error.message} (code: ${error.code})` : error.message\n )\n throw error\n }\n }\n\n public async resumeSession(): Promise<void> {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n try {\n this.logger.info('Resuming session...')\n\n const result = await this._enable()\n\n if (result.accounts.length === 0) {\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = this._mapAVMWebProviderAccountToWalletAccounts(result.accounts)\n const match = compareAccounts(walletAccounts, walletState.accounts)\n\n if (!match) {\n this.logger.warn('Session accounts mismatch, updating accounts', {\n prev: walletState.accounts,\n current: walletAccounts\n })\n\n setAccounts(this.store, {\n walletId: this.id,\n accounts: walletAccounts\n })\n }\n this.logger.info('Session resumed successfully')\n } catch (error: any) {\n this.logger.error(\n 'Error resuming session: ',\n isAVMWebProviderSDKError(error) ? `${error.message} (code: ${error.code})` : error.message\n )\n this.onDisconnect()\n throw error\n }\n }\n\n public async signTransactions<T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> {\n try {\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n let txnsToSign: AVMWebProviderSDK.IARC0001Transaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n this.logger.debug('Sending processed transactions to wallet...', txnsToSign)\n\n // Sign transactions\n const signTxnsResult = await this._signTransactions(txnsToSign)\n this.logger.debug('Received signed transactions from wallet', signTxnsResult)\n\n // Convert base64 to Uint8Array\n const result = signTxnsResult.stxns.map((value) => {\n if (value === null) {\n return null\n }\n return base64ToByteArray(value)\n })\n\n this.logger.debug('Transactions signed successfully', result)\n return result\n } catch (error: any) {\n this.logger.error(\n 'Error signing transactions: ',\n isAVMWebProviderSDKError(error) ? `${error.message} (code: ${error.code})` : error.message\n )\n throw error\n }\n }\n}\n","import { AVMProvider } from 'src/wallets/avm-web-provider'\nimport { WalletId, type WalletConstructor } from 'src/wallets/types'\nimport type AVMWebProviderSDK from '@agoralabs-sh/avm-web-provider'\n\nexport const DEFLY_WEB_PROVIDER_ID = '95426e60-5f2e-49e9-b912-c488577be962'\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 1024 1024\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"1024\" height=\"1024\" />\n <path fill=\"#FFFFFF\" d=\"M779.9,684.4L512,230L244.1,684.4L512,529.5L779.9,684.4z\" />\n <path fill=\"#FFFFFF\" d=\"M733.1,730L512,613.5L290.9,730L512,658L733.1,730z\" />\n</svg>\n`)}`\n\nexport class DeflyWebWallet extends AVMProvider {\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n metadata = {}\n }: WalletConstructor<WalletId.DEFLY_WEB>) {\n super({\n id,\n metadata,\n getAlgodClient,\n store,\n subscribe,\n providerId: DEFLY_WEB_PROVIDER_ID\n })\n }\n\n static defaultMetadata = {\n name: 'Defly Web Wallet',\n icon: ICON\n }\n\n /**\n * Calls the \"enable\" method on the provider. This method will timeout after 3 minutes.\n * @returns {Promise<AVMWebProviderSDK.IEnableResult>} a promise that resolves to the result.\n * @protected\n * @throws {MethodCanceledError} if the method was cancelled by the user.\n * @throws {MethodNotSupportedError} if the method is not supported for the configured network.\n * @throws {MethodTimedOutError} if the method timed out by lack of response (>= 3 minutes).\n * @throws {NetworkNotSupportedError} if the network is not supported for the configured network.\n * @throws {UnknownError} if the response result is empty.\n */\n protected async _enable(): Promise<AVMWebProviderSDK.IEnableResult> {\n const {\n ARC0027MethodEnum,\n ARC0027MethodTimedOutError,\n ARC0027UnknownError,\n DEFAULT_REQUEST_TIMEOUT\n } = await this._initializeAVMWebProviderSDK()\n const avmWebClient = await this._initializeAVMWebClient()\n const genesisHash = await this._getGenesisHash()\n\n return new Promise<AVMWebProviderSDK.IEnableResult>((resolve, reject) => {\n const timerId = window.setTimeout(() => {\n // remove the listener\n avmWebClient.removeListener(listenerId)\n reject(\n new ARC0027MethodTimedOutError({\n method: ARC0027MethodEnum.Enable,\n message: `no response from provider \"${this.metadata.name}\"`,\n providerId: DEFLY_WEB_PROVIDER_ID\n })\n )\n }, DEFAULT_REQUEST_TIMEOUT)\n const listenerId = avmWebClient.onEnable(({ error, method, result }) => {\n // remove the listener, it is not needed\n avmWebClient.removeListener(listenerId)\n\n // remove the timeout\n window.clearTimeout(timerId)\n\n if (error) {\n return reject(error)\n }\n\n if (!result) {\n return reject(\n new ARC0027UnknownError({\n message: `received response, but \"${method}\" request details were empty for provider \"${this.metadata.name}\"`,\n providerId: DEFLY_WEB_PROVIDER_ID\n })\n )\n }\n\n return resolve(result)\n })\n\n // send the request\n avmWebClient.enable({\n genesisHash,\n providerId: DEFLY_WEB_PROVIDER_ID\n })\n })\n }\n\n /**\n * Calls the \"disable\" method on the provider. This method will timeout after 0.75 seconds.\n * @returns {Promise<AVMWebProviderSDK.IDisableResult>} a promise that resolves to the result.\n * @protected\n * @throws {MethodNotSupportedError} if the method is not supported for the configured network.\n * @throws {MethodTimedOutError} if the method timed out by lack of response (>= 3 minutes).\n * @throws {NetworkNotSupportedError} if the network is not supported for the configured network.\n * @throws {UnknownError} if the response result is empty.\n */\n protected async _disable(): Promise<AVMWebProviderSDK.IDisableResult> {\n const {\n ARC0027MethodEnum,\n ARC0027MethodTimedOutError,\n ARC0027UnknownError,\n LOWER_REQUEST_TIMEOUT\n } = await this._initializeAVMWebProviderSDK()\n const avmWebClient = await this._initializeAVMWebClient()\n const genesisHash = await this._getGenesisHash()\n\n return new Promise<AVMWebProviderSDK.IDisableResult>((resolve, reject) => {\n const timerId = window.setTimeout(() => {\n // remove the listener\n avmWebClient.removeListener(listenerId)\n reject(\n new ARC0027MethodTimedOutError({\n method: ARC0027MethodEnum.Disable,\n message: `no response from provider \"${this.metadata.name}\"`,\n providerId: DEFLY_WEB_PROVIDER_ID\n })\n )\n }, LOWER_REQUEST_TIMEOUT)\n const listenerId = avmWebClient.onDisable(({ error, method, result }) => {\n // remove the listener, it is not needed\n avmWebClient.removeListener(listenerId)\n\n // remove the timeout\n window.clearTimeout(timerId)\n\n if (error) {\n return reject(error)\n }\n\n if (!result) {\n return reject(\n new ARC0027UnknownError({\n message: `received response, but \"${method}\" request details were empty for provider \"${this.metadata.name}\"`,\n providerId: DEFLY_WEB_PROVIDER_ID\n })\n )\n }\n\n this.logger.debug('Disable successful', { result })\n return resolve(result)\n })\n\n this.logger.debug('Sending disable request...', { genesisHash })\n avmWebClient.disable({\n genesisHash,\n providerId: DEFLY_WEB_PROVIDER_ID\n })\n })\n }\n\n /**\n * Calls the \"signTransactions\" method to sign the supplied ARC-0001 transactions. This method will timeout after 3\n * minutes.\n * @returns {Promise<AVMWebProviderSDK.ISignTransactionsResult>} a promise that resolves to the result.\n * @protected\n * @throws {InvalidInputError} if computed group ID for the txns does not match the assigned group ID.\n * @throws {InvalidGroupIdError} if the unsigned txns is malformed or not conforming to ARC-0001.\n * @throws {MethodCanceledError} if the method was cancelled by the user.\n * @throws {MethodNotSupportedError} if the method is not supported for the configured network.\n * @throws {MethodTimedOutError} if the method timed out by lack of response (>= 3 minutes).\n * @throws {NetworkNotSupportedError} if the network is not supported for the configured network.\n * @throws {UnauthorizedSignerError} if a signer in the request is not authorized by the provider.\n * @throws {UnknownError} if the response result is empty.\n */\n protected async _signTransactions(\n txns: AVMWebProviderSDK.IARC0001Transaction[]\n ): Promise<AVMWebProviderSDK.ISignTransactionsResult> {\n const {\n ARC0027MethodEnum,\n ARC0027MethodTimedOutError,\n ARC0027UnknownError,\n DEFAULT_REQUEST_TIMEOUT\n } = await this._initializeAVMWebProviderSDK()\n const avmWebClient = await this._initializeAVMWebClient()\n\n return new Promise<AVMWebProviderSDK.ISignTransactionsResult>((resolve, reject) => {\n const timerId = window.setTimeout(() => {\n // remove the listener\n avmWebClient.removeListener(listenerId)\n reject(\n new ARC0027MethodTimedOutError({\n method: ARC0027MethodEnum.SignTransactions,\n message: `no response from provider \"${this.metadata.name}\"`,\n providerId: DEFLY_WEB_PROVIDER_ID\n })\n )\n }, DEFAULT_REQUEST_TIMEOUT)\n const listenerId = avmWebClient.onSignTransactions(({ error, method, result }) => {\n // remove the listener, it is not needed\n avmWebClient.removeListener(listenerId)\n\n // remove the timeout\n window.clearTimeout(timerId)\n\n if (error) {\n return reject(error)\n }\n\n if (!result) {\n return reject(\n new ARC0027UnknownError({\n message: `received response, but \"${method}\" request details were empty for provider \"${this.metadata.name}\"`,\n providerId: DEFLY_WEB_PROVIDER_ID\n })\n )\n }\n\n this.logger.debug('Sign transactions successful', { result })\n return resolve(result)\n })\n\n this.logger.debug('Sending sign transactions request...', { txns })\n avmWebClient.signTransactions({\n txns,\n providerId: DEFLY_WEB_PROVIDER_ID\n })\n })\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, type State } from 'src/store'\nimport {\n base64ToByteArray,\n byteArrayToBase64,\n flattenTxnGroup,\n isSignedTxn,\n isTransactionArray\n} from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type {\n WalletAccount,\n WalletConstructor,\n WalletId,\n WalletTransaction\n} from 'src/wallets/types'\n\n/** @see https://docs.exodus.com/api-reference/algorand-provider-arc-api/ */\n\ninterface EnableNetworkOpts {\n genesisID?: string\n genesisHash?: string\n}\n\ninterface EnableAccountsOpts {\n accounts?: string[]\n}\n\nexport type ExodusOptions = EnableNetworkOpts & EnableAccountsOpts\n\ninterface EnableNetworkResult {\n genesisID: string\n genesisHash: string\n}\n\ninterface EnableAccountsResult {\n accounts: string[]\n}\n\nexport type EnableResult = EnableNetworkResult & EnableAccountsResult\n\nexport type SignTxnsResult = (string | null)[]\n\nexport interface Exodus {\n isConnected: boolean\n address: string | null\n enable: (options?: ExodusOptions) => Promise<EnableResult>\n signTxns: (transactions: WalletTransaction[]) => Promise<SignTxnsResult>\n}\n\nexport type WindowExtended = { algorand: Exodus } & Window & typeof globalThis\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 300 300\" xmlns=\"http://www.w3.org/2000/svg\">\n <linearGradient id=\"grad1\" gradientUnits=\"userSpaceOnUse\" x1=\"246.603\" y1=\"9.2212\" x2=\"174.158\" y2=\"308.5426\" gradientTransform=\"matrix(1 0 0 -1 0 302)\">\n <stop offset=\"0\" stop-color=\"#0B46F9\" />\n <stop offset=\"1\" stop-color=\"#BBFBE0\" />\n </linearGradient>\n <path fill=\"url(#grad1)\" d=\"M274.7,93.9L166.6,23v39.6l69.4,45.1l-8.2,25.8h-61.2v32.9h61.2l8.2,25.8l-69.4,45.1V277l108.2-70.7L257,150.1L274.7,93.9z\" />\n \n <linearGradient id=\"grad2\" gradientUnits=\"userSpaceOnUse\" x1=\"129.3516\" y1=\"-19.1573\" x2=\"56.9066\" y2=\"280.1641\" gradientTransform=\"matrix(1 0 0 -1 0 302)\">\n <stop offset=\"0\" stop-color=\"#0B46F9\" />\n <stop offset=\"1\" stop-color=\"#BBFBE0\" />\n </linearGradient>\n <path fill=\"url(#grad2)\" d=\"M72.5,166.4h61v-32.9H72.2l-7.9-25.8l69.2-45.1V23L25.3,93.9L43,150.1l-17.7,56.2L133.7,277v-39.6l-69.4-45.1L72.5,166.4z\" />\n \n <mask id=\"mask1\" maskUnits=\"userSpaceOnUse\" x=\"25.4\" y=\"23\" width=\"247.6\" height=\"254\">\n <path fill=\"url(#grad1)\" d=\"M274.7,93.9L166.6,23v39.6l69.4,45.1l-8.2,25.8h-61.2v32.9h61.2l8.2,25.8l-69.4,45.1V277l108.2-70.7L257,150.1L274.7,93.9z\" />\n <path fill=\"url(#grad2)\" d=\"M72.5,166.4h61v-32.9H72.2l-7.9-25.8l69.2-45.1V23L25.3,93.9L43,150.1l-17.7,56.2L133.7,277v-39.6l-69.4-45.1L72.5,166.4z\" />\n </mask>\n \n <linearGradient id=\"grad3\" gradientUnits=\"userSpaceOnUse\" x1=\"46.4662\" y1=\"228.7554\" x2=\"171.8638\" y2=\"135.1039\" gradientTransform=\"matrix(1 0 0 -1 0 302)\">\n <stop offset=\"0.1198\" stop-color=\"#8952FF\" stop-opacity=\"0.87\" />\n <stop offset=\"1\" stop-color=\"#DABDFF\" stop-opacity=\"0\" />\n </linearGradient>\n <rect x=\"25.4\" y=\"23\" width=\"247.6\" height=\"254\" fill=\"url(#grad3)\" mask=\"url(#mask1)\" />\n</svg>\n`)}`\n\nexport class ExodusWallet extends BaseWallet {\n private client: Exodus | null = null\n private options: ExodusOptions\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options = {},\n metadata = {}\n }: WalletConstructor<WalletId.EXODUS>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n this.options = options\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Exodus',\n icon: ICON\n }\n\n private async initializeClient(): Promise<Exodus> {\n this.logger.info('Initializing client...')\n if (typeof window === 'undefined' || (window as WindowExtended).algorand === undefined) {\n this.logger.error('Exodus is not available.')\n throw new Error('Exodus is not available.')\n }\n const client = (window as WindowExtended).algorand\n this.client = client\n this.logger.info('Client initialized')\n return client\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n this.logger.info('Connecting...')\n const client = this.client || (await this.initializeClient())\n const { accounts } = await client.enable(this.options)\n\n if (accounts.length === 0) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n this.logger.info('✅ Connected.', walletState)\n return walletAccounts\n }\n\n public disconnect = async (): Promise<void> => {\n this.logger.info('Disconnecting...')\n this.onDisconnect()\n this.logger.info('Disconnected.')\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n this.logger.info('Resuming session...')\n const client = await this.initializeClient()\n\n if (!client.isConnected) {\n this.logger.error('Exodus is not connected.')\n throw new Error('Exodus is not connected.')\n }\n this.logger.info('Session resumed')\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n let txnsToSign: WalletTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n this.logger.debug('Sending processed transactions to wallet...', txnsToSign)\n\n // Sign transactions\n const signTxnsResult = await client.signTxns(txnsToSign)\n this.logger.debug('Received signed transactions from wallet', signTxnsResult)\n\n // Convert base64 to Uint8Array\n const result = signTxnsResult.map((value) => {\n if (value === null) {\n return null\n }\n return base64ToByteArray(value)\n })\n\n this.logger.debug('Transactions signed successfully', result)\n return result\n } catch (error: any) {\n this.logger.error('Error signing transactions:', error.message)\n throw error\n }\n }\n}\n","import { AVMProvider } from 'src/wallets/avm-web-provider'\nimport { WalletId, type WalletConstructor } from 'src/wallets/types'\nimport type AVMWebProviderSDK from '@agoralabs-sh/avm-web-provider'\n\nexport const KIBISIS_AVM_WEB_PROVIDER_ID = 'f6d1c86b-4493-42fb-b88d-a62407b4cdf6'\n\nexport const ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 480 480\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect fill=\"#801C96\" width=\"480\" height=\"480\" />\n <path fill=\"#FFFFFF\" d=\"M393.5,223.2c0-7.3-0.6-14.6-1.6-21.6c-0.9-6.5-2.3-12.8-4-18.9c-18-64.9-77.4-112.5-148-112.5c-70.6,0-130,47.6-148,112.5c-1.7,6.2-3,12.5-4,19c-1,7.1-1.6,14.3-1.6,21.6h0v85.5h19.7v-85.5c0-7.2,0.6-14.4,1.8-21.4c14,1.1,27.6,4.3,40.5,9.5c15.9,6.4,30.3,15.6,42.6,27.3c12.3,11.7,22,25.4,28.7,40.6c6.9,15.6,10.5,32.2,10.5,49.2v81.4h0.1h19.6h0.1v-81.5c0.1-17.1,3.6-33.7,10.5-49.2c6.7-15.2,16.4-28.8,28.7-40.6c4.2-4,8.6-7.7,13.2-11.1v132.2h19.7V223.2h0c0-2.5-0.1-5-0.4-7.4c3.3-1.6,6.6-3.1,10-4.5c12.9-5.2,26.4-8.4,40.4-9.5c1.2,7,1.7,14.2,1.8,21.4v85.5h19.7L393.5,223.2L393.5,223.2z M240.1,277.3c-11.6-29.3-32.7-54.1-59.8-71c2.9-10,8.2-19.1,15.8-26.6c11.8-11.8,27.4-18.2,44-18.2s32.3,6.5,44,18.2c4.1,4.1,7.5,8.7,10.3,13.6c5.6-3.4,11.4-6.4,17.4-9.2c-14-25.2-40.9-42.3-71.8-42.3c-35.9,0-66.3,23-77.5,55.1c-15.5-7.1-32.5-11.8-50.4-13.5c1.3-4,2.7-7.9,4.3-11.8c6.7-15.9,16.4-30.3,28.7-42.6s26.6-22,42.6-28.7c16.5-7,34-10.5,52.1-10.5s35.6,3.5,52.1,10.5c15.9,6.7,30.3,16.4,42.6,28.7s22,26.6,28.7,42.6c1.6,3.9,3.1,7.8,4.3,11.8C309,189.2,260.1,226.5,240.1,277.3z\" />\n <path fill=\"#FFFFFF\" d=\"M158.1,359.8h19.7V245.5c-6.1-5.4-12.7-10-19.7-14V359.8z\" />\n</svg>\n`)}`\n\nexport class KibisisWallet extends AVMProvider {\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n metadata = {}\n }: WalletConstructor<WalletId.KIBISIS>) {\n super({\n id,\n metadata,\n getAlgodClient,\n store,\n subscribe,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n }\n\n static defaultMetadata = {\n name: 'Kibisis',\n icon: ICON\n }\n\n /**\n * Calls the \"enable\" method on the provider. This method will timeout after 3 minutes.\n * @returns {Promise<AVMWebProviderSDK.IEnableResult>} a promise that resolves to the result.\n * @protected\n * @throws {MethodCanceledError} if the method was cancelled by the user.\n * @throws {MethodNotSupportedError} if the method is not supported for the configured network.\n * @throws {MethodTimedOutError} if the method timed out by lack of response (>= 3 minutes).\n * @throws {NetworkNotSupportedError} if the network is not supported for the configured network.\n * @throws {UnknownError} if the response result is empty.\n */\n protected async _enable(): Promise<AVMWebProviderSDK.IEnableResult> {\n const {\n ARC0027MethodEnum,\n ARC0027MethodTimedOutError,\n ARC0027UnknownError,\n DEFAULT_REQUEST_TIMEOUT\n } = await this._initializeAVMWebProviderSDK()\n const avmWebClient = await this._initializeAVMWebClient()\n const genesisHash = await this._getGenesisHash()\n\n return new Promise<AVMWebProviderSDK.IEnableResult>((resolve, reject) => {\n const timerId = window.setTimeout(() => {\n // remove the listener\n avmWebClient.removeListener(listenerId)\n reject(\n new ARC0027MethodTimedOutError({\n method: ARC0027MethodEnum.Enable,\n message: `no response from provider \"${this.metadata.name}\"`,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n )\n }, DEFAULT_REQUEST_TIMEOUT)\n const listenerId = avmWebClient.onEnable(({ error, method, result }) => {\n // remove the listener, it is not needed\n avmWebClient.removeListener(listenerId)\n\n // remove the timeout\n window.clearTimeout(timerId)\n\n if (error) {\n return reject(error)\n }\n\n if (!result) {\n return reject(\n new ARC0027UnknownError({\n message: `received response, but \"${method}\" request details were empty for provider \"${this.metadata.name}\"`,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n )\n }\n\n return resolve(result)\n })\n\n // send the request\n avmWebClient.enable({\n genesisHash,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n })\n }\n\n /**\n * Calls the \"disable\" method on the provider. This method will timeout after 0.75 seconds.\n * @returns {Promise<AVMWebProviderSDK.IDisableResult>} a promise that resolves to the result.\n * @protected\n * @throws {MethodNotSupportedError} if the method is not supported for the configured network.\n * @throws {MethodTimedOutError} if the method timed out by lack of response (>= 3 minutes).\n * @throws {NetworkNotSupportedError} if the network is not supported for the configured network.\n * @throws {UnknownError} if the response result is empty.\n */\n protected async _disable(): Promise<AVMWebProviderSDK.IDisableResult> {\n const {\n ARC0027MethodEnum,\n ARC0027MethodTimedOutError,\n ARC0027UnknownError,\n LOWER_REQUEST_TIMEOUT\n } = await this._initializeAVMWebProviderSDK()\n const avmWebClient = await this._initializeAVMWebClient()\n const genesisHash = await this._getGenesisHash()\n\n return new Promise<AVMWebProviderSDK.IDisableResult>((resolve, reject) => {\n const timerId = window.setTimeout(() => {\n // remove the listener\n avmWebClient.removeListener(listenerId)\n reject(\n new ARC0027MethodTimedOutError({\n method: ARC0027MethodEnum.Disable,\n message: `no response from provider \"${this.metadata.name}\"`,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n )\n }, LOWER_REQUEST_TIMEOUT)\n const listenerId = avmWebClient.onDisable(({ error, method, result }) => {\n // remove the listener, it is not needed\n avmWebClient.removeListener(listenerId)\n\n // remove the timeout\n window.clearTimeout(timerId)\n\n if (error) {\n return reject(error)\n }\n\n if (!result) {\n return reject(\n new ARC0027UnknownError({\n message: `received response, but \"${method}\" request details were empty for provider \"${this.metadata.name}\"`,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n )\n }\n\n this.logger.debug('Disable successful', { result })\n return resolve(result)\n })\n\n this.logger.debug('Sending disable request...', { genesisHash })\n avmWebClient.disable({\n genesisHash,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n })\n }\n\n /**\n * Calls the \"signTransactions\" method to sign the supplied ARC-0001 transactions. This method will timeout after 3\n * minutes.\n * @returns {Promise<AVMWebProviderSDK.ISignTransactionsResult>} a promise that resolves to the result.\n * @protected\n * @throws {InvalidInputError} if computed group ID for the txns does not match the assigned group ID.\n * @throws {InvalidGroupIdError} if the unsigned txns is malformed or not conforming to ARC-0001.\n * @throws {MethodCanceledError} if the method was cancelled by the user.\n * @throws {MethodNotSupportedError} if the method is not supported for the configured network.\n * @throws {MethodTimedOutError} if the method timed out by lack of response (>= 3 minutes).\n * @throws {NetworkNotSupportedError} if the network is not supported for the configured network.\n * @throws {UnauthorizedSignerError} if a signer in the request is not authorized by the provider.\n * @throws {UnknownError} if the response result is empty.\n */\n protected async _signTransactions(\n txns: AVMWebProviderSDK.IARC0001Transaction[]\n ): Promise<AVMWebProviderSDK.ISignTransactionsResult> {\n const {\n ARC0027MethodEnum,\n ARC0027MethodTimedOutError,\n ARC0027UnknownError,\n DEFAULT_REQUEST_TIMEOUT\n } = await this._initializeAVMWebProviderSDK()\n const avmWebClient = await this._initializeAVMWebClient()\n\n return new Promise<AVMWebProviderSDK.ISignTransactionsResult>((resolve, reject) => {\n const timerId = window.setTimeout(() => {\n // remove the listener\n avmWebClient.removeListener(listenerId)\n reject(\n new ARC0027MethodTimedOutError({\n method: ARC0027MethodEnum.SignTransactions,\n message: `no response from provider \"${this.metadata.name}\"`,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n )\n }, DEFAULT_REQUEST_TIMEOUT)\n const listenerId = avmWebClient.onSignTransactions(({ error, method, result }) => {\n // remove the listener, it is not needed\n avmWebClient.removeListener(listenerId)\n\n // remove the timeout\n window.clearTimeout(timerId)\n\n if (error) {\n return reject(error)\n }\n\n if (!result) {\n return reject(\n new ARC0027UnknownError({\n message: `received response, but \"${method}\" request details were empty for provider \"${this.metadata.name}\"`,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n )\n }\n\n this.logger.debug('Sign transactions successful', { result })\n return resolve(result)\n })\n\n this.logger.debug('Sending sign transactions request...', { txns })\n avmWebClient.signTransactions({\n txns,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n })\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, type State } from 'src/store'\nimport { flattenTxnGroup, isSignedTxn, isTransactionArray } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type { WalletAccount, WalletConstructor, WalletId } from 'src/wallets/types'\n\ninterface KmdConstructor {\n token: string | algosdk.KMDTokenHeader | algosdk.CustomTokenHeader\n baseServer?: string\n port?: string | number\n headers?: Record<string, string>\n promptForPassword: () => Promise<string>\n}\n\nexport type KmdOptions = Partial<Pick<KmdConstructor, 'token' | 'promptForPassword'>> &\n Omit<KmdConstructor, 'token' | 'promptForPassword'> & {\n wallet?: string\n }\n\ninterface KmdWalletRecord {\n id: string\n name: string\n driver_name?: string\n driver_version?: number\n mnemonic_ux?: boolean\n supported_txs?: Array<any>\n}\n\ninterface ListWalletsResponse {\n wallets: KmdWalletRecord[]\n message?: string\n error?: boolean\n}\n\ninterface InitWalletHandleResponse {\n wallet_handle_token: string\n message?: string\n error?: boolean\n}\n\ninterface ListKeysResponse {\n addresses: string[]\n message?: string\n error?: boolean\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 400 400\" xmlns=\"http://www.w3.org/2000/svg\">\n <linearGradient id=\"algokitGradient\" gradientUnits=\"userSpaceOnUse\" x1=\"0\" y1=\"400\" x2=\"400\" y2=\"0\">\n <stop offset=\"0\" style=\"stop-color:#31D8EE\"/>\n <stop offset=\"1\" style=\"stop-color:#01DC94\"/>\n </linearGradient>\n <rect fill=\"url(#algokitGradient)\" width=\"400\" height=\"400\" />\n <path fill=\"#FFFFFF\" d=\"M309.2,309.3H275l-22.2-82.7l-47.9,82.7h-38.3l73.9-128l-11.9-44.5l-99.6,172.6H90.8L217.1,90.6 h33.5l14.7,54.3h34.6l-23.6,41L309.2,309.3z\" />\n</svg>\n`)}`\n\nexport class KmdWallet extends BaseWallet {\n private client: algosdk.Kmd | null = null\n private options: KmdConstructor\n private walletName: string\n private walletId: string = ''\n private password: string | null = null\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options,\n metadata = {}\n }: WalletConstructor<WalletId.KMD>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n\n const {\n token = 'a'.repeat(64),\n baseServer = 'http://127.0.0.1',\n port = 4002,\n wallet = 'unencrypted-default-wallet',\n promptForPassword = () => Promise.resolve(prompt('KMD password') || '')\n } = options || {}\n\n this.options = { token, baseServer, port, promptForPassword }\n this.walletName = wallet\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'KMD',\n icon: ICON\n }\n\n private async initializeClient(): Promise<algosdk.Kmd> {\n this.logger.info('Initializing client...')\n const { token, baseServer, port } = this.options\n const client = new algosdk.Kmd(token, baseServer, port)\n this.client = client\n this.logger.info('Client initialized')\n return client\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n this.logger.info('Connecting...')\n if (!this.client) {\n await this.initializeClient()\n }\n\n try {\n // Get token and fetch accounts\n const token = await this.fetchToken()\n const accounts = await this.fetchAccounts(token)\n\n if (accounts.length === 0) {\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n // Release token\n await this.releaseToken(token)\n\n this.logger.info('✅ Connected.', walletState)\n return walletAccounts\n } catch (error: any) {\n this.logger.error('Error connecting:', error.message)\n throw error\n }\n }\n\n public disconnect = async (): Promise<void> => {\n this.logger.info('Disconnecting...')\n this.onDisconnect()\n this.logger.info('Disconnected.')\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n this.logger.info('Resuming session...')\n await this.initializeClient()\n this.logger.info('Session resumed')\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): algosdk.Transaction[] {\n const txnsToSign: algosdk.Transaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push(txn)\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): algosdk.Transaction[] {\n const txnsToSign: algosdk.Transaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push(txn)\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n let txnsToSign: algosdk.Transaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n // Get token and password\n const token = await this.fetchToken()\n const password = await this.getPassword()\n\n const client = this.client || (await this.initializeClient())\n\n this.logger.debug('Sending processed transactions to wallet...', txnsToSign)\n\n // Sign transactions\n const signedTxns = await Promise.all(\n txnsToSign.map((txn) => client.signTransaction(token, password, txn))\n )\n\n this.logger.debug('Received signed transactions from wallet', signedTxns)\n\n // Release token\n await this.releaseToken(token)\n\n this.logger.debug('Transactions signed successfully', signedTxns)\n return signedTxns\n } catch (error: any) {\n this.logger.error('Error signing transactions:', error.message)\n throw error\n }\n }\n\n private async fetchWalletId(): Promise<string> {\n this.logger.debug('Fetching wallet data...', { walletName: this.walletName })\n const client = this.client || (await this.initializeClient())\n\n const { wallets }: ListWalletsResponse = await client.listWallets()\n const wallet = wallets.find((wallet: KmdWalletRecord) => wallet.name === this.walletName)\n\n if (!wallet) {\n this.logger.error(`Wallet \"${this.walletName}\" not found!`)\n throw new Error(`Wallet \"${this.walletName}\" not found!`)\n }\n\n this.walletId = wallet.id\n this.logger.debug('Wallet data fetched successfully', { walletId: this.walletId })\n return wallet.id\n }\n\n private async fetchToken(): Promise<string> {\n this.logger.debug('Fetching token...', { walletId: this.walletId })\n const client = this.client || (await this.initializeClient())\n\n const walletId = this.walletId || (await this.fetchWalletId())\n const password = await this.getPassword()\n\n const { wallet_handle_token }: InitWalletHandleResponse = await client.initWalletHandle(\n walletId,\n password\n )\n this.logger.debug('Token fetched successfully')\n return wallet_handle_token\n }\n\n private async releaseToken(token: string): Promise<void> {\n this.logger.debug('Releasing token...')\n const client = this.client || (await this.initializeClient())\n await client.releaseWalletHandle(token)\n this.logger.debug('Token released successfully')\n }\n\n private async getPassword(): Promise<string> {\n if (this.password !== null) {\n return this.password\n }\n const password = await this.options.promptForPassword()\n this.password = password\n return password\n }\n\n private async fetchAccounts(token: string): Promise<string[]> {\n this.logger.debug('Fetching accounts...')\n const client = this.client || (await this.initializeClient())\n const { addresses }: ListKeysResponse = await client.listKeys(token)\n this.logger.debug('Accounts fetched successfully', { addresses })\n return addresses\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, type State } from 'src/store'\nimport { byteArrayToBase64, flattenTxnGroup, isSignedTxn, isTransactionArray } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type LuteConnect from 'lute-connect'\nimport {\n SignDataError as ISignDataError,\n type SignTxnsError as ISignTxnsError,\n type WalletTransaction\n} from 'lute-connect'\nimport {\n SignDataError,\n SignDataResponse,\n SignMetadata,\n SignTxnsError,\n type WalletAccount,\n type WalletConstructor,\n type WalletId\n} from 'src/wallets/types'\n\nexport interface LuteConnectOptions {\n siteName?: string\n}\n\nfunction isSignTxnsError(error: any): error is ISignTxnsError {\n return error instanceof Error && 'code' in error\n}\n\nfunction isSignDataError(error: any): error is ISignDataError {\n return error instanceof Error && 'code' in error\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 400 400\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill=\"#AB47BC\" d=\"M283.7,263.6c-0.6,0-1.3-0.1-1.8-0.4c-0.6-0.3-1.1-0.8-1.5-1.3c-0.4-0.6-0.7-1.3-0.8-2 c-0.1-0.8-0.1-1.7,0.1-2.5c0.2-0.9,0.6-1.8,1.2-2.6c0.6-0.8,1.4-1.7,2.2-2.3c0.9-0.7,2.1-1.2,3.2-1.6c1.2-0.4,2.7-0.5,4-0.5 c1.4,0,3,0.3,4.4,0.8c1.5,0.5,3.1,1.4,4.3,2.3c1.4,1,2.8,2.4,3.8,3.7c1.1,1.5,2.1,3.3,2.8,5.1c0.7,1.9,1.2,4.1,1.3,6.1 c0.2,2.1,0,4.6-0.4,6.7c-0.5,2.2-1.4,4.7-2.4,6.7c-1.1,2.1-2.8,4.4-4.4,6.2c-1.8,1.9-4.1,3.7-6.3,5c-2.3,1.4-5.2,2.6-7.9,3.3 c-2.8,0.7-6.1,1.1-8.9,1.1c-3,0-6.5-0.6-9.3-1.4c-3-0.9-6.4-2.4-9.1-4c-2.8-1.7-5.8-4.2-8-6.6c-2.3-2.5-4.6-5.8-6.2-8.9 c-1.7-3.2-3.1-7.1-3.8-10.7c-0.8-3.7-1.1-8-0.9-11.8c0.2-3.9,1.1-8.3,2.3-12c1.3-3.8,3.4-8.1,5.7-11.4c2.3-3.5,5.6-7.1,8.8-9.9 c3.3-2.8,7.5-5.6,11.5-7.5c4.1-1.9,9-3.5,13.5-4.3c4.6-0.8,10-1.1,14.6-0.7c4.8,0.4,10.2,1.6,14.7,3.3c4.7,1.7,9.7,4.4,13.8,7.3 c4.2,3,8.5,7,11.7,10.9c3.3,4.1,6.5,9.2,8.7,14c2.2,4.9,4,10.9,4.9,16.3c0.9,5.5,1,11.9,0.4,17.5c-0.6,5.7-2.2,12.1-4.3,17.4 c-2.1,5.5-5.4,11.4-8.9,16.1c-3.6,4.8-8.4,9.8-13.1,13.6c-4.8,3.8-11,7.5-16.6,9.9c-5.8,2.5-12.8,4.5-19.1,5.4 c-6.4,0.9-13.9,1-20.3,0.2c-6.6-0.8-14-2.7-20.1-5.2c-6.3-2.5-13.1-6.4-18.5-10.5c-5.5-4.2-11.2-9.8-15.4-15.3 c-4.3-5.6-8.4-12.7-11.2-19.2c-2.8-6.7-4.9-14.7-5.9-21.9c-0.9-5.9-2.8-12.6-5.2-18.1c-2.3-5.4-5.9-11.2-9.5-15.8 c-3.6-4.5-8.3-9-13-12.4c-4.5-3.3-10.1-6.4-15.3-8.3c-5-1.9-11.1-3.4-16.5-3.9c-5.2-0.5-11.3-0.3-16.5,0.5c-5,0.8-10.7,2.6-15.3,4.7 c-4.5,2.1-9.4,5.1-13.2,8.3c-3.7,3.1-7.5,7.2-10.2,11.1c-2.7,3.8-5.2,8.6-6.7,13c-1.5,4.2-2.6,9.3-3,13.8c-0.3,4.3-0.1,9.4,0.7,13.7 c0.8,4.1,2.3,8.8,4.2,12.5c1.8,3.6,4.4,7.6,7.1,10.6c2.6,2.9,6,5.9,9.3,8.1c3.1,2.1,7.1,4,10.6,5.1c3.4,1.1,7.5,1.9,11.1,2 c3.5,0.2,7.4-0.2,10.8-1c3.2-0.7,6.8-2.1,9.7-3.6c2.8-1.5,5.7-3.6,8-5.8c2.2-2.1,4.3-4.8,5.9-7.4c1.5-2.5,2.8-5.5,3.5-8.3 c0.7-2.6,1.1-5.7,1.1-8.5c0-2.6-0.5-5.5-1.2-8c-0.7-2.3-1.8-4.9-3.1-6.9c-1.2-1.9-2.9-3.9-4.6-5.4c-1.6-1.4-3.6-2.8-5.5-3.7 c-1.8-0.9-4-1.6-5.9-1.9c-1.8-0.3-3.9-0.4-5.8-0.1c-1.7,0.2-3.6,0.7-5.1,1.4c-1.4,0.6-2.9,1.6-4.1,2.6c-1.1,0.9-2.1,2.2-2.9,3.4 c-0.7,1.1-1.2,2.5-1.5,3.7c-0.3,1.1-0.4,2.4-0.3,3.6c0.1,1,0.4,2.2,0.8,3.1c0.4,0.8,1,1.7,1.6,2.3c0.6,0.5,1.3,1,2.1,1.3 c0.6,0.2,1.5,0.4,2.1,0.3c0.6-0.1,1.3-0.3,1.8-0.6c0.5-0.3,1-0.8,1.2-1.4c0.3-0.5,0.7-1,1.2-1.4c0.5-0.3,1.2-0.6,1.8-0.6 c0.7-0.1,1.5,0.1,2.1,0.3c0.7,0.3,1.5,0.8,2.1,1.3c0.6,0.6,1.3,1.5,1.6,2.3c0.4,0.9,0.7,2.1,0.8,3.1c0.1,1.1,0,2.5-0.3,3.6 c-0.3,1.2-0.9,2.6-1.5,3.7c-0.7,1.2-1.8,2.4-2.9,3.4c-1.2,1-2.7,2-4.1,2.6c-1.5,0.7-3.4,1.2-5.1,1.4c-1.8,0.2-4,0.2-5.8-0.1 c-2-0.3-4.1-1-5.9-1.9c-1.9-0.9-4-2.3-5.5-3.7c-1.7-1.5-3.4-3.5-4.6-5.4c-1.3-2-2.4-4.6-3.1-6.9c-0.7-2.5-1.2-5.4-1.2-8 c0-2.7,0.4-5.8,1.1-8.5c0.7-2.8,2-5.8,3.5-8.3c1.5-2.6,3.7-5.3,5.9-7.4c2.3-2.2,5.2-4.3,8-5.8c2.9-1.6,6.5-2.9,9.7-3.6 c3.4-0.8,7.4-1.1,10.8-1c3.6,0.2,7.7,0.9,11.1,2c3.6,1.2,7.5,3.1,10.6,5.1c3.3,2.1,6.7,5.1,9.3,8.1c2.7,3,5.3,7,7.1,10.6 c1.8,3.8,3.4,8.4,4.2,12.5c0.8,4.3,1.1,9.3,0.7,13.7c-0.4,4.5-1.5,9.6-3,13.8c-1.6,4.4-4.1,9.2-6.7,13c-2.8,3.9-6.5,8-10.2,11.1 c-3.8,3.2-8.7,6.2-13.2,8.3c-4.6,2.1-10.3,3.8-15.3,4.7c-5.2,0.9-11.3,1-16.5,0.5c-5.4-0.5-11.5-2-16.5-3.9 c-5.2-2-10.8-5.1-15.3-8.3c-4.6-3.4-9.4-7.9-13-12.4c-3.7-4.6-7.2-10.4-9.5-15.8c-2.4-5.5-4.3-12.2-5.2-18.1 c-0.9-6.1-1-13.2-0.3-19.3c0.7-6.3,2.5-13.4,4.9-19.2c2.4-6,6.1-12.5,10-17.7c4-5.3,9.3-10.7,14.6-14.8c5.3-4.2,12.1-8.1,18.3-10.7 c6.4-2.7,14.1-4.8,21-5.7c7-1,15.2-1,22.2-0.1c7.2,0.9,15.2,3.1,21.9,5.8c5.6,2.2,12.3,3.9,18.3,4.6c5.8,0.7,12.6,0.5,18.4-0.4 c5.6-0.9,12-2.7,17.2-5c5.1-2.3,10.6-5.6,14.9-9.1c4.2-3.4,8.5-8,11.7-12.3c3.1-4.3,6-9.6,7.8-14.5c1.8-4.8,3.1-10.5,3.6-15.6 c0.5-4.9,0.3-10.7-0.6-15.6c-0.8-4.7-2.5-10.1-4.5-14.4c-2-4.2-4.9-8.8-7.9-12.3c-2.9-3.4-6.8-6.9-10.5-9.5 c-3.6-2.5-8.1-4.8-12.2-6.2c-4-1.4-8.7-2.4-12.9-2.7c-4-0.3-8.7,0-12.7,0.8c-3.8,0.8-8.1,2.2-11.6,4c-3.4,1.7-7,4.1-9.7,6.6 c-2.7,2.4-5.4,5.6-7.3,8.6c-1.9,2.9-3.6,6.5-4.6,9.8c-1,3.2-1.6,6.9-1.7,10.2c-0.1,3.2,0.3,6.8,1,9.9c0.7,2.9,2,6.2,3.5,8.8 c1.4,2.5,3.4,5.1,5.4,7.2c1.9,1.9,4.4,3.8,6.8,5.2c2.2,1.3,5,2.4,7.5,3c2.3,0.6,5.1,0.9,7.6,0.8c2.3-0.1,4.9-0.5,7-1.3 c2-0.7,4.2-1.7,6-2.9c1.6-1.1,3.3-2.7,4.6-4.2c1.2-1.4,2.3-3.2,3-4.9c0.7-1.6,1.2-3.5,1.3-5.1c0.2-1.5,0.1-3.3-0.2-4.9 c-0.3-1.4-0.8-2.9-1.5-4.2c-0.6-1.1-1.5-2.3-2.4-3.2c-0.8-0.8-1.9-1.5-3-2c-0.9-0.4-2.1-0.7-3.1-0.8c-0.9-0.1-1.9,0-2.8,0.3 c-0.7,0.2-1.6,0.6-2.2,1.1c-0.5,0.4-1,1.1-1.3,1.7c-0.3,0.6-0.4,1.3-0.4,1.9c0,0.6,0.2,1.2,0.6,1.7c0.3,0.5,0.5,1.2,0.6,1.7 c0,0.6-0.1,1.3-0.4,1.9c-0.3,0.6-0.8,1.3-1.3,1.7c-0.6,0.5-1.4,0.9-2.2,1.1c-0.9,0.3-1.9,0.3-2.8,0.3c-1-0.1-2.2-0.4-3.1-0.8 c-1-0.5-2.1-1.2-3-2c-0.9-0.9-1.8-2.1-2.4-3.2c-0.7-1.2-1.2-2.8-1.5-4.2c-0.3-1.5-0.4-3.3-0.2-4.9c0.2-1.7,0.7-3.6,1.3-5.1 c0.7-1.7,1.8-3.5,3-4.9c1.3-1.5,3-3.1,4.6-4.2c1.8-1.2,4-2.3,6-2.9c2.2-0.7,4.8-1.2,7-1.3c2.4-0.1,5.2,0.2,7.6,0.8 c2.5,0.6,5.3,1.7,7.5,3c2.4,1.3,4.9,3.2,6.8,5.2c2,2,4,4.7,5.4,7.2c1.5,2.6,2.7,5.9,3.5,8.8c0.8,3.1,1.1,6.7,1,9.9 c-0.1,3.3-0.7,7.1-1.7,10.2c-1,3.3-2.7,6.9-4.6,9.8c-1.9,3-4.7,6.2-7.3,8.6c-2.8,2.5-6.4,5-9.7,6.6c-3.5,1.8-7.8,3.2-11.6,4 c-4,0.8-8.7,1.1-12.7,0.8c-4.2-0.3-9-1.3-12.9-2.7c-4.1-1.4-8.6-3.7-12.2-6.2c-3.7-2.6-7.6-6.1-10.5-9.5c-3-3.6-5.9-8.1-7.9-12.3 c-2-4.4-3.7-9.7-4.5-14.4c-0.8-4.9-1.1-10.6-0.6-15.6c0.5-5.1,1.8-10.8,3.6-15.6c1.8-4.9,4.7-10.3,7.8-14.5 c3.2-4.4,7.5-8.9,11.7-12.3c4.3-3.5,9.8-6.9,14.9-9.1c5.2-2.3,11.6-4.2,17.2-5c5.8-0.9,12.6-1,18.4-0.4c6,0.7,12.7,2.4,18.3,4.6 c5.7,2.3,12,5.7,16.9,9.4c5.1,3.8,10.3,8.9,14.2,13.8c4,5.1,7.8,11.5,10.3,17.5c2.6,6.1,4.6,13.5,5.5,20c0.9,6.7,1,14.5,0.1,21.2 c-0.9,6.9-2.9,14.6-5.5,21c-2.7,6.5-6.8,13.6-11,19.3c-4.4,5.7-10.3,11.7-16,16c-4.7,3.7-9.5,8.7-13.1,13.6 c-3.5,4.7-6.8,10.7-8.9,16.1c-2.1,5.3-3.6,11.7-4.3,17.4c-0.6,5.5-0.4,12,0.4,17.5c0.9,5.3,2.6,11.3,4.9,16.3c2.2,4.8,5.4,10,8.7,14 c3.2,3.9,7.6,8,11.7,10.9c4,2.9,9.1,5.6,13.8,7.3c4.5,1.7,9.9,2.9,14.7,3.3c4.6,0.4,10,0.2,14.6-0.7c4.4-0.8,9.4-2.4,13.5-4.3 c3.9-1.9,8.2-4.6,11.5-7.5c3.2-2.7,6.4-6.4,8.8-9.9c2.3-3.4,4.4-7.6,5.7-11.4c1.2-3.7,2.1-8.1,2.3-12c0.2-3.7-0.1-8.1-0.9-11.8 c-0.8-3.5-2.2-7.5-3.8-10.7c-1.6-3.1-3.9-6.3-6.2-8.9c-2.2-2.4-5.2-4.9-8-6.6c-2.7-1.7-6-3.2-9.1-4c-2.9-0.8-6.3-1.4-9.3-1.4 c-2.9,0-6.2,0.4-8.9,1.1c-2.6,0.7-5.5,1.9-7.9,3.3c-2.2,1.3-4.5,3.2-6.3,5c-1.7,1.8-3.3,4-4.4,6.2c-1.1,2-2,4.5-2.4,6.7 c-0.4,2.1-0.6,4.5-0.4,6.7c0.2,2,0.6,4.2,1.3,6.1c0.6,1.7,1.7,3.6,2.8,5.1c1,1.3,2.4,2.7,3.8,3.7c1.3,0.9,2.8,1.8,4.3,2.3 c1.3,0.5,2.9,0.8,4.4,0.8c1.3,0,2.7-0.1,4-0.5c1.1-0.3,2.3-0.9,3.2-1.6c0.8-0.6,1.7-1.4,2.2-2.3c0.5-0.7,0.9-1.7,1.2-2.6 c0.2-0.8,0.2-1.7,0.1-2.5c-0.1-0.7-0.4-1.4-0.8-2c-0.4-0.5-0.9-1-1.5-1.3C285,263.7,284.3,263.6,283.7,263.6L283.7,263.6z\" />\n</svg>\n`)}`\n\nexport class LuteWallet extends BaseWallet {\n private client: LuteConnect | null = null\n private options: LuteConnectOptions\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options = {},\n metadata = {}\n }: WalletConstructor<WalletId.LUTE>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n this.options = options\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Lute',\n icon: ICON\n }\n\n private async initializeClient(): Promise<LuteConnect> {\n this.logger.info('Initializing client...')\n const module = await import('lute-connect')\n const LuteConnect = module.default\n\n const client = new LuteConnect(this.options?.siteName)\n this.client = client\n this.logger.info('Client initialized')\n return client\n }\n\n private async getGenesisId(): Promise<string> {\n const network = this.activeNetworkConfig\n if (network.genesisId) {\n return network.genesisId\n }\n\n const algodClient = this.getAlgodClient()\n const genesisStr = await algodClient.genesis().do()\n const genesis = algosdk.parseJSON(genesisStr, {\n intDecoding: algosdk.IntDecoding.MIXED\n })\n return `${genesis.network}-${genesis.id}`\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n this.logger.info('Connecting...')\n const client = this.client || (await this.initializeClient())\n const genesisId = await this.getGenesisId()\n const accounts = await client.connect(genesisId)\n\n if (accounts.length === 0) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n this.logger.info('Connected successfully', walletState)\n return walletAccounts\n }\n\n public disconnect = async (): Promise<void> => {\n this.onDisconnect()\n this.logger.info('Disconnected')\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n this.logger.info('Resuming session...')\n await this.initializeClient()\n this.logger.info('Session resumed successfully')\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n let txnsToSign: WalletTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n this.logger.debug('Sending processed transactions to wallet...', txnsToSign)\n\n // Sign transactions\n const signTxnsResult = await client.signTxns(txnsToSign)\n\n this.logger.debug('Transactions signed successfully', signTxnsResult)\n return signTxnsResult\n } catch (error) {\n if (isSignTxnsError(error)) {\n this.logger.error('Error signing transactions:', error.message, `(code: ${error.code})`)\n throw new SignTxnsError(error.message, error.code)\n }\n this.logger.error('Unknown error signing transactions:', error)\n throw error\n }\n }\n\n public canSignData = true\n\n public signData = async (data: string, metadata: SignMetadata): Promise<SignDataResponse> => {\n try {\n this.logger.debug('Signing data...', { data, metadata })\n\n const client = this.client || (await this.initializeClient())\n\n // Sign data\n const signDataResult = await client.signData(data, metadata)\n\n this.logger.debug('Data signed successfully', signDataResult)\n return signDataResult\n } catch (error) {\n if (isSignDataError(error)) {\n this.logger.error('Error signing data:', error.message, `(code: ${error.code})`)\n throw new SignDataError(error.message, error.code)\n }\n this.logger.error('Unknown error signing data:', error)\n throw error\n }\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, setAccounts, type State } from 'src/store'\nimport {\n base64ToByteArray,\n byteArrayToBase64,\n flattenTxnGroup,\n isSignedTxn,\n isTransactionArray\n} from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type { InstanceWithExtensions, SDKBase } from '@magic-sdk/provider'\nimport type { AlgorandExtension } from '@magic-ext/algorand'\nimport type { MagicUserMetadata } from 'magic-sdk'\nimport type {\n WalletAccount,\n WalletConstructor,\n WalletId,\n WalletTransaction\n} from 'src/wallets/types'\n\n/** @see https://magic.link/docs/blockchains/other-chains/other/algorand */\n\nexport interface MagicAuthOptions {\n apiKey?: string\n}\n\nexport type MagicAuthClient = InstanceWithExtensions<\n SDKBase,\n {\n algorand: AlgorandExtension\n }\n>\n\n// @todo: export after switching to namespace exports (collides with Exodus.SignTxnsResult)\ntype SignTxnsResult = (string | undefined)[]\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 47 47\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill=\"#6851FF\" d=\"M 23.960861 1.80769 C 25.835077 4.103153 27.902216 6.23489 30.137539 8.178169 C 28.647968 13.009323 27.846092 18.142094 27.846092 23.462154 C 27.846092 28.782307 28.648062 33.915169 30.13763 38.746368 C 27.902216 40.689724 25.835077 42.821476 23.960861 45.116985 C 22.086554 42.821476 20.019415 40.689632 17.783998 38.746368 C 19.273476 33.915169 20.075445 28.7824 20.075445 23.462337 C 20.075445 18.142277 19.273476 13.009506 17.783998 8.178318 C 20.019415 6.235001 22.086554 4.10321 23.960861 1.80769 Z M 13.511427 35.406403 C 11.145139 33.747814 8.633816 32.282063 6.000269 31.031937 C 6.730776 28.637476 7.123754 26.095783 7.123754 23.462429 C 7.123754 20.828892 6.730762 18.287201 6.000235 15.892738 C 8.633816 14.642616 11.145175 13.176861 13.511501 11.518276 C 14.416311 15.352554 14.895074 19.351414 14.895074 23.462154 C 14.895074 27.572985 14.416283 31.571938 13.511427 35.406403 Z M 33.027046 23.462337 C 33.027046 27.572985 33.505753 31.571846 34.410553 35.406124 C 36.776859 33.747631 39.288094 32.281876 41.921539 31.031845 C 41.191017 28.637384 40.798061 26.095692 40.798061 23.462246 C 40.798061 20.8288 41.191017 18.287201 41.921539 15.89283 C 39.288094 14.642708 36.776768 13.177048 34.410553 11.518555 C 33.505753 15.352831 33.027046 19.351692 33.027046 23.462337 Z\" />\n</svg>\n`)}`\n\nexport class MagicAuth extends BaseWallet {\n private client: MagicAuthClient | null = null\n private options: MagicAuthOptions\n\n protected store: Store<State>\n public userInfo: MagicUserMetadata | null = null\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options,\n metadata = {}\n }: WalletConstructor<WalletId.MAGIC>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n if (!options?.apiKey) {\n this.logger.error('Missing required option: apiKey')\n throw new Error('Missing required option: apiKey')\n }\n this.options = options\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Magic',\n icon: ICON\n }\n\n private async initializeClient(): Promise<MagicAuthClient> {\n this.logger.info('Initializing client...')\n const Magic = (await import('magic-sdk')).Magic\n const AlgorandExtension = (await import('@magic-ext/algorand')).AlgorandExtension\n const client = new Magic(this.options.apiKey as string, {\n extensions: {\n algorand: new AlgorandExtension({\n rpcUrl: ''\n })\n }\n })\n this.client = client\n this.logger.info('Client initialized')\n return client\n }\n\n public connect = async (args?: Record<string, any>): Promise<WalletAccount[]> => {\n this.logger.info('Connecting...')\n if (!args?.email || typeof args.email !== 'string') {\n this.logger.error('Magic Link provider requires an email (string) to connect')\n throw new Error('Magic Link provider requires an email (string) to connect')\n }\n\n const { email } = args\n\n const client = this.client || (await this.initializeClient())\n\n this.logger.info(`Logging in ${email}...`)\n await client.auth.loginWithMagicLink({ email })\n\n const userInfo = await client.user.getInfo()\n\n if (!userInfo) {\n this.logger.error('User info not found!')\n throw new Error('User info not found!')\n }\n\n if (!userInfo.publicAddress) {\n this.logger.error('No account found!')\n throw new Error('No account found!')\n }\n\n this.userInfo = userInfo\n\n this.logger.info('Login successful', userInfo)\n const walletAccount: WalletAccount = {\n name: userInfo.email ?? 'Magic Wallet 1',\n address: userInfo.publicAddress\n }\n\n const walletState: WalletState = {\n accounts: [walletAccount],\n activeAccount: walletAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n this.logger.info('Connected successfully', walletState)\n return [walletAccount]\n }\n\n public disconnect = async (): Promise<void> => {\n this.logger.info('Disconnecting...')\n this.onDisconnect()\n const client = this.client || (await this.initializeClient())\n this.logger.info(`Logging out ${this.userInfo?.email || 'user'}...`)\n await client.user.logout()\n this.logger.info('Disconnected')\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n this.logger.info('Resuming session...')\n const client = this.client || (await this.initializeClient())\n const isLoggedIn = await client.user.isLoggedIn()\n\n if (!isLoggedIn) {\n this.logger.warn('Not logged in, please reconnect...')\n this.onDisconnect()\n return\n }\n\n const userInfo = await client.user.getInfo()\n\n if (!userInfo) {\n await client.user.logout()\n this.logger.error('User info not found!')\n throw new Error('User info not found!')\n }\n\n if (!userInfo.publicAddress) {\n await client.user.logout()\n this.logger.error('No account found!')\n throw new Error('No account found!')\n }\n\n this.userInfo = userInfo\n\n const walletAccount: WalletAccount = {\n name: userInfo.email ?? `${this.metadata.name} Account 1`,\n address: userInfo.publicAddress\n }\n\n const storedAccount = walletState.accounts[0]\n\n const { name, address } = walletAccount\n const { name: storedName, address: storedAddress } = storedAccount\n\n const match = name === storedName && address === storedAddress\n\n if (!match) {\n this.logger.warn('Session account mismatch, updating account', {\n prev: storedAccount,\n current: walletAccount\n })\n setAccounts(this.store, {\n walletId: this.id,\n accounts: [walletAccount]\n })\n }\n this.logger.info('Session resumed successfully')\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n let txnsToSign: WalletTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n this.logger.debug('Sending processed transactions to wallet...', txnsToSign)\n\n // Sign transactions\n const signTxnsResult = (await client.algorand.signGroupTransactionV2(\n txnsToSign\n )) as SignTxnsResult\n\n this.logger.debug('Received signed transactions from wallet', signTxnsResult)\n\n // Convert base64 to Uint8Array, undefined to null\n const result = signTxnsResult.map((value) => {\n if (value === undefined) {\n return null\n }\n return base64ToByteArray(value)\n })\n\n this.logger.debug('Transactions signed successfully', result)\n return result\n } catch (error: any) {\n this.logger.error('Error signing transactions:', error.message)\n throw error\n }\n }\n}\n","import algosdk from 'algosdk'\nimport { compareAccounts, flattenTxnGroup, isSignedTxn, isTransactionArray } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type { LiquidEvmMetadata, WalletAccount, WalletConstructor } from 'src/wallets/types'\nimport type { AlgorandClient } from '@algorandfoundation/algokit-utils'\nimport type { LiquidEvmSdk, SignTypedDataParams } from 'liquid-accounts-evm'\nimport type { State } from 'src/store'\n\ninterface EvmAccount {\n evmAddress: string\n algorandAddress: string\n}\n\nexport interface LiquidEvmOptions {\n uiHooks?: {\n onConnect?: (evmAccount: EvmAccount) => void\n onBeforeSign?: (\n txnGroup: algosdk.Transaction[] | Uint8Array[],\n indexesToSign?: number[]\n ) => Promise<void>\n onAfterSign?: (success: boolean, errorMessage?: string) => void\n }\n}\n\n/**\n * Abstract base class for EVM-based wallets that use the Liquid Accounts system\n * to derive Algorand addresses from EVM addresses.\n *\n * This class provides common functionality for:\n * - Initializing the Liquid EVM SDK\n * - Deriving Algorand accounts from EVM addresses\n * - Signing Algorand transactions using EVM signatures\n * - Managing the mapping between EVM and Algorand addresses\n *\n * Subclasses must implement provider-specific methods:\n * - initializeProvider(): Initialize the specific EVM wallet SDK/provider\n * - getProvider(): Get the EVM provider instance\n * - signWithProvider(): Sign a message with the specific EVM wallet\n */\nexport abstract class LiquidEvmBaseWallet extends BaseWallet {\n protected liquidEvmSdk: LiquidEvmSdk | null = null\n protected algorandClient: AlgorandClient | null = null\n protected evmAddressMap: Map<string, string> = new Map() // algorandAddress -> evmAddress\n protected options: LiquidEvmOptions\n protected store: Store<State>\n\n constructor(params: WalletConstructor<any>) {\n super(params)\n this.options = params.options || {}\n this.store = params.store\n }\n\n /**\n * Default metadata for Liquid EVM wallets.\n * Subclasses MUST override this with their own metadata including isLiquid: \"EVM\"\n */\n static defaultMetadata: LiquidEvmMetadata\n\n /**\n * Typed metadata accessor that guarantees isLiquid: \"EVM\" is present\n */\n declare readonly metadata: LiquidEvmMetadata\n\n /**\n * Initialize the provider-specific SDK or connection.\n * Called during connect/resume to set up the wallet.\n */\n protected abstract initializeProvider(): Promise<void>\n\n /**\n * Get the EVM provider instance.\n * This should return the provider object that can make eth_* RPC calls.\n */\n protected abstract getProvider(): Promise<any>\n\n /**\n * Sign EIP-712 typed data with the specific EVM wallet provider.\n * @param typedData - The EIP-712 typed data (domain, types, primaryType, message)\n * @param evmAddress - The EVM address to sign with\n * @returns The signature as a hex string (with 0x prefix)\n */\n protected abstract signWithProvider(typedData: SignTypedDataParams, evmAddress: string): Promise<string>\n\n /**\n * Ensure the wallet is on the Algorand chain (4160).\n * Queries the current chain first, and only switches/adds if needed.\n */\n protected async ensureAlgorandChain(): Promise<void> {\n const provider = await this.getProvider()\n const { ALGORAND_CHAIN_ID_HEX, ALGORAND_EVM_CHAIN_CONFIG } = await import('liquid-accounts-evm')\n\n const currentChainId = (await provider.request({ method: 'eth_chainId' })) as string\n\n if (currentChainId === ALGORAND_CHAIN_ID_HEX) {\n return\n }\n\n this.logger.info(`Wrong chain (${currentChainId}), switching to Algorand (${ALGORAND_CHAIN_ID_HEX})...`)\n\n try {\n await provider.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: ALGORAND_CHAIN_ID_HEX }]\n })\n } catch (switchError: any) {\n // 4902 = chain not added to wallet\n if (switchError.code === 4902) {\n this.logger.info('Algorand chain not found, adding it...')\n await provider.request({\n method: 'wallet_addEthereumChain',\n params: [ALGORAND_EVM_CHAIN_CONFIG]\n })\n } else {\n throw switchError\n }\n }\n }\n\n /**\n * Initialize the Liquid EVM SDK for deriving Algorand addresses\n */\n protected async initializeEvmSdk(): Promise<LiquidEvmSdk> {\n if (!this.liquidEvmSdk) {\n this.logger.info('Initializing Liquid EVM SDK...')\n\n if (!this.algorandClient) {\n const { AlgorandClient } = await import('@algorandfoundation/algokit-utils')\n const algodClient = this.getAlgodClient()\n this.algorandClient = AlgorandClient.fromClients({\n algod: algodClient\n })\n }\n\n const { LiquidEvmSdk } = await import('liquid-accounts-evm')\n this.liquidEvmSdk = new LiquidEvmSdk({ algorand: this.algorandClient })\n\n this.logger.info('Liquid EVM SDK initialized')\n }\n return this.liquidEvmSdk\n }\n\n /**\n * Derive Algorand accounts from EVM addresses\n */\n protected async deriveAlgorandAccounts(evmAddresses: string[]): Promise<WalletAccount[]> {\n const liquidEvmSdk = await this.initializeEvmSdk()\n const walletAccounts: WalletAccount[] = []\n\n for (let i = 0; i < evmAddresses.length; i++) {\n const evmAddress = evmAddresses[i]\n const algorandAddress = await liquidEvmSdk.getAddress({ evmAddress })\n\n this.evmAddressMap.set(algorandAddress, evmAddress)\n\n walletAccounts.push({\n name: `${this.metadata.name} ${evmAddress}`,\n address: algorandAddress\n })\n }\n\n return walletAccounts\n }\n\n /**\n * Convert bytes to hex string with 0x prefix\n */\n protected bytesToHex(bytes: Uint8Array): string {\n return (\n '0x' +\n Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')\n )\n }\n\n /**\n * Process transaction group to extract transactions that need signing\n */\n protected processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): algosdk.Transaction[] {\n const txnsToSign: algosdk.Transaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push(txn)\n }\n })\n\n return txnsToSign\n }\n\n /**\n * Process encoded transaction group to extract transactions that need signing\n */\n protected processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): algosdk.Transaction[] {\n const txnsToSign: algosdk.Transaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push(txn)\n }\n })\n\n return txnsToSign\n }\n\n /**\n * Sign Algorand transactions using EVM wallet signatures\n */\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n\n const evmSdk = await this.initializeEvmSdk()\n let flatTxns: algosdk.Transaction[] = []\n\n if (isTransactionArray(txnGroup)) {\n flatTxns = flattenTxnGroup(txnGroup)\n } else {\n const flatEncoded: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n flatTxns = flatEncoded.map((txnBuffer) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n return isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n })\n }\n\n const txnsToSign = isTransactionArray(txnGroup)\n ? this.processTxns(flatTxns, indexesToSign)\n : this.processEncodedTxns(flattenTxnGroup(txnGroup as Uint8Array[]), indexesToSign)\n\n if (txnsToSign.length === 0) {\n this.logger.debug('No transactions to sign')\n return flatTxns.map(() => null)\n }\n\n // Get the EVM address (all txns should be from the same wallet account)\n const firstTxn = txnsToSign[0]\n const algorandAddress = firstTxn.sender.toString()\n const evmAddress = this.evmAddressMap.get(algorandAddress)\n\n if (!evmAddress) {\n throw new Error(`No EVM address found for Algorand address: ${algorandAddress}`)\n }\n\n const onBeforeSign = this.options.uiHooks?.onBeforeSign ?? this.managerUIHooks?.onBeforeSign\n if (onBeforeSign) {\n this.logger.debug('Running onBeforeSign hook', { txnGroup, indexesToSign })\n await onBeforeSign(txnGroup as algosdk.Transaction[] | Uint8Array[], indexesToSign)\n }\n\n // Ensure we're on the Algorand chain before requesting signatures\n await this.ensureAlgorandChain()\n\n // Sign all transactions in one call to avoid multiple wallet prompts\n const signedBlobs = await evmSdk.signTxn({\n evmAddress,\n txns: flatTxns,\n signMessage: (typedData) => this.signWithProvider(typedData, evmAddress)\n })\n\n const onAfterSign = this.options.uiHooks?.onAfterSign ?? this.managerUIHooks?.onAfterSign\n if (onAfterSign) {\n this.logger.debug('Running onAfterSign hook')\n try {\n onAfterSign(true)\n } catch (e) {}\n }\n\n // Build result array - use signed txns where we should sign, null otherwise\n const result: (Uint8Array | null)[] = flatTxns.map((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n return signedBlobs[index]\n }\n return null\n })\n\n this.logger.debug('Transactions signed successfully', result)\n return result\n } catch (error: any) {\n try {\n const onAfterSignCleanup =\n this.options.uiHooks?.onAfterSign ?? this.managerUIHooks?.onAfterSign\n onAfterSignCleanup?.(false, error.message)\n } catch (e) {}\n this.logger.error('Error signing transactions:', error.message)\n throw error\n }\n }\n\n /**\n * Helper to compare and update accounts if needed during session resume\n */\n protected async resumeWithAccounts(\n evmAddresses: string[],\n setAccountsFn: (accounts: WalletAccount[]) => void\n ): Promise<void> {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n const walletAccounts = await this.deriveAlgorandAccounts(evmAddresses)\n const match = compareAccounts(walletAccounts, walletState.accounts)\n\n if (!match) {\n this.logger.warn('Session accounts mismatch, updating accounts', {\n prev: walletState.accounts,\n current: walletAccounts\n })\n setAccountsFn(walletAccounts)\n }\n\n this.logger.info('Session resumed')\n }\n\n protected notifyConnect(evmAddress: string, algorandAddress: string): void {\n const onConnect = this.options.uiHooks?.onConnect ?? this.managerUIHooks?.onConnect\n if (onConnect) {\n onConnect({ evmAddress, algorandAddress })\n }\n }\n}\n","import { WalletState, addWallet, setAccounts } from 'src/store'\nimport { LiquidEvmBaseWallet, LiquidEvmOptions } from 'src/wallets/liquid-evm-base'\nimport { WalletId } from 'src/wallets/types'\nimport type { MetaMaskSDK } from '@metamask/sdk'\nimport type { SDKProvider } from '@metamask/sdk'\nimport type { WalletAccount, WalletConstructor } from 'src/wallets/types'\n\nexport interface MetaMaskWalletOptions extends LiquidEvmOptions {\n dappMetadata?: {\n name?: string\n url?: string\n iconUrl?: string\n }\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n\t viewBox=\"0 0 142 136.878\" style=\"enable-background:new 0 0 142 136.878;\" xml:space=\"preserve\">\n<path style=\"fill:#FF5C16;\" d=\"M132.682,132.192l-30.583-9.106l-23.063,13.787l-16.092-0.007l-23.077-13.78l-30.569,9.106L0,100.801\n\tl9.299-34.839L0,36.507L9.299,0l47.766,28.538h27.85L132.682,0l9.299,36.507l-9.299,29.455l9.299,34.839L132.682,132.192\n\tL132.682,132.192z\"/>\n<path style=\"fill:#FF5C16;\" d=\"M9.305,0l47.767,28.558l-1.899,19.599L9.305,0z M39.875,100.814l21.017,16.01l-21.017,6.261\n\tC39.875,123.085,39.875,100.814,39.875,100.814z M59.212,74.345l-4.039-26.174L29.317,65.97l-0.014-0.007v0.013l0.08,18.321\n\tl10.485-9.951L59.212,74.345L59.212,74.345z M132.682,0L84.915,28.558l1.893,19.599L132.682,0z M102.113,100.814l-21.018,16.01\n\tl21.018,6.261V100.814z M112.678,65.975h0.007H112.678v-0.013l-0.006,0.007L86.815,48.171l-4.039,26.174h19.336l10.492,9.95\n\tC112.604,84.295,112.678,65.975,112.678,65.975z\"/>\n<path style=\"fill:#E34807;\" d=\"M39.868,123.085l-30.569,9.106L0,100.814h39.868C39.868,100.814,39.868,123.085,39.868,123.085z\n\t M59.205,74.338l5.839,37.84l-8.093-21.04L29.37,84.295l10.491-9.956h19.344L59.205,74.338z M102.112,123.085l30.57,9.106\n\tl9.299-31.378h-39.869C102.112,100.814,102.112,123.085,102.112,123.085z M82.776,74.338l-5.839,37.84l8.092-21.04l27.583-6.843\n\tl-10.498-9.956H82.776V74.338z\"/>\n<path style=\"fill:#FF8D5D;\" d=\"M0,100.801l9.299-34.839h19.997l0.073,18.327l27.584,6.843l8.092,21.039l-4.16,4.633l-21.017-16.01H0\n\tV100.801z M141.981,100.801l-9.299-34.839h-19.998l-0.073,18.327l-27.582,6.843l-8.093,21.039l4.159,4.633l21.018-16.01h39.868\n\tV100.801z M84.915,28.538h-27.85l-1.891,19.599l9.872,64.013h11.891l9.878-64.013L84.915,28.538z\"/>\n<path style=\"fill:#661800;\" d=\"M9.299,0L0,36.507l9.299,29.455h19.997l25.87-17.804L9.299,0z M53.426,81.938h-9.059l-4.932,4.835\n\tl17.524,4.344l-3.533-9.186V81.938z M132.682,0l9.299,36.507l-9.299,29.455h-19.998L86.815,48.158L132.682,0z M88.568,81.938h9.072\n\tl4.932,4.841l-17.544,4.353l3.54-9.201V81.938z M79.029,124.385l2.067-7.567l-4.16-4.633h-11.9l-4.159,4.633l2.066,7.567\"/>\n<path style=\"fill:#C0C4CD;\" d=\"M79.029,124.384v12.495H62.945v-12.495L79.029,124.384L79.029,124.384z\"/>\n<path style=\"fill:#E7EBF6;\" d=\"M39.875,123.072l23.083,13.8v-12.495l-2.067-7.566C60.891,116.811,39.875,123.072,39.875,123.072z\n\t M102.113,123.072l-23.084,13.8v-12.495l2.067-7.566C81.096,116.811,102.113,123.072,102.113,123.072z\"/>\n</svg>\n`)}`\n\nexport class MetaMaskWallet extends LiquidEvmBaseWallet {\n private metamaskSdk: MetaMaskSDK | null = null\n private provider: SDKProvider | null = null\n protected options: MetaMaskWalletOptions\n\n constructor(params: WalletConstructor<WalletId.METAMASK>) {\n super(params)\n this.options = params.options || {}\n }\n\n static defaultMetadata = {\n name: 'MetaMask',\n icon: ICON,\n isLiquid: 'EVM' as const\n }\n\n protected async initializeProvider(): Promise<void> {\n if (!this.metamaskSdk) {\n this.logger.info('Initializing MetaMask SDK...')\n const { MetaMaskSDK } = await import('@metamask/sdk')\n\n this.metamaskSdk = new MetaMaskSDK({\n dappMetadata: {\n name: this.options.dappMetadata?.name || 'Algorand dApp',\n url: this.options.dappMetadata?.url || (typeof window !== 'undefined' ? window.location.href : ''),\n ...(this.options.dappMetadata?.iconUrl && { iconUrl: this.options.dappMetadata.iconUrl })\n }\n })\n\n this.logger.info('MetaMask SDK initialized')\n }\n }\n\n protected async getProvider(): Promise<SDKProvider> {\n if (!this.provider) {\n await this.initializeProvider()\n this.provider = this.metamaskSdk!.getProvider() || null\n\n if (!this.provider) {\n throw new Error('MetaMask provider not available. Please install MetaMask.')\n }\n }\n return this.provider\n }\n\n protected async signWithProvider(typedData: import('liquid-accounts-evm').SignTypedDataParams, evmAddress: string): Promise<string> {\n const provider = await this.getProvider()\n\n return await provider.request({\n method: 'eth_signTypedData_v4',\n params: [evmAddress, JSON.stringify(typedData)]\n }) as string\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n this.logger.info('Connecting...')\n\n await this.initializeProvider()\n await this.initializeEvmSdk()\n\n const provider = await this.getProvider()\n\n const evmAddresses = await provider.request({\n method: 'eth_requestAccounts'\n }) as string[]\n\n if (evmAddresses.length === 0) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n this.logger.info(`Connected to ${evmAddresses.length} EVM account(s)`)\n\n const walletAccounts = await this.deriveAlgorandAccounts(evmAddresses)\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n this.logger.info('✅ Connected.', walletState)\n\n this.notifyConnect(evmAddresses[0], activeAccount.address)\n return walletAccounts\n }\n\n public disconnect = async (): Promise<void> => {\n this.logger.info('Disconnecting...')\n\n if (this.metamaskSdk) {\n // Sends TERMINATE message to MetaMask Mobile, clears \".sdk-comm\" channel config\n // from localStorage, and generates a new channelId so the next connect()\n // shows a fresh QR code instead of resuming the old session.\n // The SDK instance is kept alive — it resets itself internally and the docs\n // confirm eth_requestAccounts works again after terminate(). Nulling the SDK\n // here causes getProvider() to fail on reconnect due to module-level state\n // conflicts with re-instantiation.\n await this.metamaskSdk.terminate()\n }\n\n this.provider = null\n this.evmAddressMap.clear()\n this.onDisconnect()\n\n this.logger.info('Disconnected')\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n this.logger.info('Resuming session...')\n\n await this.initializeProvider()\n await this.initializeEvmSdk()\n\n const provider = await this.getProvider()\n\n const evmAddresses = await provider.request({\n method: 'eth_accounts'\n }) as string[]\n\n if (evmAddresses.length === 0) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n await this.resumeWithAccounts(evmAddresses, (accounts) => {\n setAccounts(this.store, {\n walletId: this.id,\n accounts\n })\n })\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n this.onDisconnect()\n throw error\n }\n }\n\n\n}\n","import algosdk from 'algosdk'\nimport { StorageAdapter } from 'src/storage'\nimport { LOCAL_STORAGE_KEY, WalletState, addWallet, type State } from 'src/store'\nimport { flattenTxnGroup, isSignedTxn, isTransactionArray } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type { WalletAccount, WalletConstructor, WalletId } from 'src/wallets/types'\n\ninterface MnemonicConstructor {\n persistToStorage?: boolean\n promptForMnemonic: () => Promise<string | null>\n}\n\nexport type MnemonicOptions = Partial<Pick<MnemonicConstructor, 'promptForMnemonic'>> &\n Omit<MnemonicConstructor, 'promptForMnemonic'>\n\nexport const LOCAL_STORAGE_MNEMONIC_KEY = `${LOCAL_STORAGE_KEY}_mnemonic`\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 400 400\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect fill=\"#525252\" width=\"400\" height=\"400\" />\n <path fill=\"#FFFFFF\" d=\"M309.2,309.3H275l-22.2-82.7l-47.9,82.7h-38.3l73.9-128l-11.9-44.5l-99.6,172.6H90.8L217.1,90.6 h33.5l14.7,54.3h34.6l-23.6,41L309.2,309.3z\" />\n</svg>\n`)}`\n\nexport class MnemonicWallet extends BaseWallet {\n private account: algosdk.Account | null = null\n private options: MnemonicConstructor\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options,\n metadata = {}\n }: WalletConstructor<WalletId.MNEMONIC>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n\n const {\n persistToStorage = false,\n promptForMnemonic = () => Promise.resolve(prompt('Enter 25-word mnemonic passphrase:'))\n } = options || {}\n this.options = { persistToStorage, promptForMnemonic }\n\n this.store = store\n\n if (this.options.persistToStorage) {\n this.logger.warn(\n 'Persisting mnemonics to storage is insecure. Any private key mnemonics used should never hold real Algos (i.e., on MainNet). Use with caution!'\n )\n }\n }\n\n static defaultMetadata = {\n name: 'Mnemonic',\n icon: ICON\n }\n\n private loadMnemonicFromStorage(): string | null {\n return StorageAdapter.getItem(LOCAL_STORAGE_MNEMONIC_KEY)\n }\n\n private saveMnemonicToStorage(mnemonic: string): void {\n StorageAdapter.setItem(LOCAL_STORAGE_MNEMONIC_KEY, mnemonic)\n }\n\n private removeMnemonicFromStorage(): void {\n StorageAdapter.removeItem(LOCAL_STORAGE_MNEMONIC_KEY)\n }\n\n private checkMainnet(): void {\n try {\n const network = this.activeNetworkConfig\n if (!network.isTestnet) {\n this.logger.warn(\n 'The Mnemonic wallet provider is insecure and intended for testing only. Any private key mnemonics used should never hold real Algos (i.e., on MainNet).'\n )\n throw new Error('Production network detected. Aborting.')\n }\n } catch (error) {\n this.disconnect()\n throw error\n }\n }\n\n private async initializeAccount(): Promise<algosdk.Account> {\n let mnemonic = this.loadMnemonicFromStorage()\n if (!mnemonic) {\n mnemonic = await this.options.promptForMnemonic()\n if (!mnemonic) {\n this.account = null\n this.logger.error('No mnemonic provided')\n throw new Error('No mnemonic provided')\n }\n\n if (this.options.persistToStorage) {\n this.logger.warn('Mnemonic saved to localStorage.')\n this.saveMnemonicToStorage(mnemonic)\n }\n }\n\n const account = algosdk.mnemonicToSecretKey(mnemonic)\n this.account = account\n return account\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n // Throw error if MainNet is active\n this.checkMainnet()\n\n this.logger.info('Connecting...')\n const account = await this.initializeAccount()\n\n const walletAccount = {\n name: `${this.metadata.name} Account`,\n address: account.addr.toString()\n }\n\n const walletState: WalletState = {\n accounts: [walletAccount],\n activeAccount: walletAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n this.logger.info('Connected successfully', walletState)\n return [walletAccount]\n }\n\n public disconnect = async (): Promise<void> => {\n this.logger.info('Disconnecting...')\n this.onDisconnect()\n this.account = null\n this.removeMnemonicFromStorage()\n this.logger.info('Disconnected')\n }\n\n public resumeSession = async (): Promise<void> => {\n // Throw error if MainNet is active\n this.checkMainnet()\n\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n this.logger.info('Resuming session...')\n\n // If persisting to storage is enabled, then resume session\n if (this.options.persistToStorage) {\n try {\n await this.initializeAccount()\n this.logger.info('Session resumed successfully')\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n this.disconnect()\n throw error\n }\n } else {\n // Otherwise, do not resume session, disconnect instead\n this.logger.info('No session to resume, disconnecting...')\n this.disconnect()\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): algosdk.Transaction[] {\n const txnsToSign: algosdk.Transaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = signer === this.account!.addr.toString()\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push(txn)\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): algosdk.Transaction[] {\n const txnsToSign: algosdk.Transaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && signer === this.account!.addr.toString()\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push(txn)\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n // Throw error if MainNet is active\n this.checkMainnet()\n\n try {\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n let txnsToSign: algosdk.Transaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n // Sign transactions\n const signedTxns = txnsToSign.map((txn) => txn.signTxn(this.account!.sk))\n this.logger.debug('Transactions signed successfully', { signedTxns })\n return signedTxns\n } catch (error: any) {\n this.logger.error('Error signing transactions:', error.message)\n throw error\n }\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, setAccounts, setActiveWallet, type State } from 'src/store'\nimport { compareAccounts, flattenTxnGroup, isSignedTxn, isTransactionArray } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport { WalletId } from 'src/wallets/types'\nimport type { PeraWalletConnect } from '@perawallet/connect'\nimport type { Store } from '@tanstack/store'\nimport type { SignerTransaction, WalletAccount, WalletConstructor } from 'src/wallets/types'\n\nexport interface PeraWalletConnectOptions {\n bridge?: string\n shouldShowSignTxnToast?: boolean\n chainId?: 416001 | 416002 | 416003 | 4160\n compactMode?: boolean\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 200 200\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect fill=\"#FFEE55\" width=\"200\" height=\"200\" />\n <path fill=\"#1C1C1C\" d=\"M106.1,64.3c2.2,9.1,1.5,17-1.7,17.8c-3.1,0.8-7.4-6-9.6-15c-2.2-9.1-1.5-17,1.7-17.8 C99.6,48.5,103.9,55.2,106.1,64.3z\" />\n <path fill=\"#1C1C1C\" d=\"M142.2,72.1c-4.8-5.1-14.5-3.7-21.6,3.1c-7,6.9-8.8,16.6-4,21.7c4.8,5.1,14.5,3.7,21.6-3.1 C145.3,86.9,147.1,77.2,142.2,72.1z\" />\n <path fill=\"#1C1C1C\" d=\"M103.7,150.8c3.1-0.8,3.7-9.2,1.4-18.8c-2.3-9.6-6.7-16.8-9.8-16c-3.1,0.8-3.7,9.2-1.4,18.8 C96.2,144.3,100.6,151.5,103.7,150.8z\" />\n <path fill=\"#1C1C1C\" d=\"M72.1,76.8c9,2.6,15.5,7.3,14.6,10.3c-0.9,3.1-8.9,3.4-17.8,0.8s-15.5-7.3-14.6-10.3 C55.1,74.5,63.1,74.1,72.1,76.8z\" />\n <path fill=\"#1C1C1C\" d=\"M130.2,111.5c9.5,2.8,16.5,7.6,15.6,10.6c-0.9,3.1-9.3,3.3-18.8,0.5c-9.5-2.8-16.5-7.6-15.6-10.6 C112.2,108.9,120.7,108.7,130.2,111.5z\" />\n <path fill=\"#1C1C1C\" d=\"M82.1,105c-2.2-2.3-9.5,1-16.3,7.5c-6.8,6.4-10.4,13.5-8.2,15.8c2.2,2.3,9.5-1,16.3-7.5 C80.7,114.4,84.3,107.3,82.1,105z\" />\n</svg>\n`)}`\n\nexport class PeraWallet extends BaseWallet {\n private client: PeraWalletConnect | null = null\n private options: PeraWalletConnectOptions\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options = {},\n metadata = {}\n }: WalletConstructor<WalletId.PERA>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n this.options = options\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Pera',\n icon: ICON\n }\n\n private async initializeClient(): Promise<PeraWalletConnect> {\n this.logger.info('Initializing client...')\n const { PeraWalletConnect } = await import('@perawallet/connect')\n const client = new PeraWalletConnect(this.options)\n this.client = client\n this.logger.info('Client initialized')\n return client\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n this.logger.info('Connecting...')\n const currentActiveWallet = this.store.state.activeWallet\n if (currentActiveWallet && currentActiveWallet !== this.id) {\n this.manageWalletConnectSession('backup', currentActiveWallet)\n }\n const client = this.client || (await this.initializeClient())\n const accounts = await client.connect()\n\n // Listen for disconnect event\n client.connector?.on('disconnect', this.onDisconnect)\n\n if (accounts.length === 0) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n this.logger.info('Connected successfully', walletState)\n return walletAccounts\n }\n\n public disconnect = async (): Promise<void> => {\n this.logger.info('Disconnecting...')\n const client = this.client || (await this.initializeClient())\n\n const currentActiveWallet = this.store.state.activeWallet\n if (currentActiveWallet && currentActiveWallet !== this.id) {\n this.manageWalletConnectSession('backup', currentActiveWallet)\n this.manageWalletConnectSession('restore', this.id)\n await client.disconnect()\n // Wait for the disconnect to complete (race condition)\n await new Promise((resolve) => setTimeout(resolve, 500))\n this.manageWalletConnectSession('restore', currentActiveWallet)\n } else {\n await client.disconnect()\n }\n\n this.onDisconnect()\n this.logger.info('Disconnected')\n }\n\n public setActive = (): void => {\n this.logger.info(`Set active wallet: ${this.id}`)\n const currentActiveWallet = this.store.state.activeWallet\n if (currentActiveWallet && currentActiveWallet === WalletId.DEFLY) {\n this.manageWalletConnectSession('backup', currentActiveWallet)\n }\n this.manageWalletConnectSession('restore')\n setActiveWallet(this.store, { walletId: this.id })\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // Check for Pera Discover browser and auto-connect if no other wallet is active\n if (typeof window !== 'undefined' && window.navigator) {\n const isPeraDiscover = window.navigator.userAgent.includes('pera')\n if (isPeraDiscover && !walletState && !state.activeWallet) {\n this.logger.info('Pera Discover browser detected, attempting auto-connect...')\n try {\n await this.connect()\n this.logger.info('Auto-connect successful')\n return\n } catch (error: any) {\n this.logger.warn('Auto-connect failed:', error.message)\n }\n }\n }\n\n // No session to resume\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n // If Defly is active, skip reconnectSession for Pera\n if (state.activeWallet === WalletId.DEFLY) {\n this.logger.info('Skipping reconnectSession for Pera (inactive)')\n return\n }\n\n this.logger.info('Resuming session...')\n\n const client = this.client || (await this.initializeClient())\n const accounts = await client.reconnectSession()\n\n if (accounts.length === 0) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const match = compareAccounts(walletAccounts, walletState.accounts)\n\n if (!match) {\n this.logger.warn('Session accounts mismatch, updating accounts', {\n prev: walletState.accounts,\n current: walletAccounts\n })\n setAccounts(this.store, {\n walletId: this.id,\n accounts: walletAccounts\n })\n }\n this.logger.info('Session resumed successfully')\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): SignerTransaction[] {\n const txnsToSign: SignerTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn })\n } else {\n txnsToSign.push({ txn, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): SignerTransaction[] {\n const txnsToSign: SignerTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn })\n } else {\n txnsToSign.push({ txn, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n let txnsToSign: SignerTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n this.logger.debug('Sending processed transactions to wallet...', [txnsToSign])\n\n // Sign transactions\n const signedTxns = await client.signTransaction([txnsToSign])\n this.logger.debug('Received signed transactions from wallet', signedTxns)\n\n // ARC-0001 - Return null for unsigned transactions\n const result = txnsToSign.reduce<(Uint8Array | null)[]>((acc, txn) => {\n if (txn.signers && txn.signers.length == 0) {\n acc.push(null)\n } else {\n const signedTxn = signedTxns.shift()\n if (signedTxn) {\n acc.push(signedTxn)\n }\n }\n return acc\n }, [])\n\n this.logger.debug('Transactions signed successfully', result)\n return result\n } catch (error: any) {\n this.logger.error('Error signing transactions:', error.message)\n throw error\n }\n }\n}\n","import LuteConnect from 'lute-connect'\nimport { WalletState, addWallet, setAccounts } from 'src/store'\nimport { LiquidEvmBaseWallet, LiquidEvmOptions } from 'src/wallets/liquid-evm-base'\nimport { WalletId } from 'src/wallets/types'\nimport type { WalletAccount, WalletConstructor } from 'src/wallets/types'\nimport type { EIP1193Provider } from 'viem'\n\nexport interface RainbowWalletOptions extends LiquidEvmOptions {\n dappMetadata?: {\n name?: string\n url?: string\n iconUrl?: string\n }\n}\n\n// Rainbow wallet icon\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg width=\"120\" height=\"120\" viewBox=\"0 0 120 120\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"120\" height=\"120\" rx=\"60\" fill=\"url(#paint0_linear)\"/>\n <path d=\"M60 85C74.9117 85 87 72.9117 87 58C87 43.0883 74.9117 31 60 31C45.0883 31 33 43.0883 33 58C33 72.9117 45.0883 85 60 85Z\" fill=\"white\"/>\n <path d=\"M60 77C70.4934 77 79 68.4934 79 58C79 47.5066 70.4934 39 60 39C49.5066 39 41 47.5066 41 58C41 68.4934 49.5066 77 60 77Z\" fill=\"url(#paint1_linear)\"/>\n <defs>\n <linearGradient id=\"paint0_linear\" x1=\"0\" y1=\"0\" x2=\"120\" y2=\"120\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#174299\"/>\n <stop offset=\"1\" stop-color=\"#001E59\"/>\n </linearGradient>\n <linearGradient id=\"paint1_linear\" x1=\"41\" y1=\"39\" x2=\"79\" y2=\"77\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#FF4444\"/>\n <stop offset=\"0.2\" stop-color=\"#FF8844\"/>\n <stop offset=\"0.4\" stop-color=\"#FFDD00\"/>\n <stop offset=\"0.6\" stop-color=\"#44FF44\"/>\n <stop offset=\"0.8\" stop-color=\"#0088FF\"/>\n <stop offset=\"1\" stop-color=\"#8844FF\"/>\n </linearGradient>\n </defs>\n</svg>\n`)}`\n\nexport class RainbowWallet extends LiquidEvmBaseWallet {\n private provider: EIP1193Provider | null = null\n protected options: RainbowWalletOptions\n\n constructor(params: WalletConstructor<WalletId.RAINBOW>) {\n super(params)\n this.options = params.options || {}\n }\n\n static defaultMetadata = {\n name: 'Rainbow',\n icon: ICON,\n isLiquid: 'EVM' as const\n }\n\n protected async initializeProvider(): Promise<void> {\n if (typeof window === 'undefined') {\n throw new Error('Rainbow wallet only works in browser environment')\n }\n\n // Rainbow can be:\n // 1. Browser extension injecting window.rainbow or into window.ethereum.providers\n // 2. Mobile wallet connected via WalletConnect\n\n const windowEth = (window as any).ethereum\n\n // Check for Rainbow browser extension\n if ((window as any).rainbow) {\n this.logger.info('Found Rainbow browser extension at window.rainbow')\n return\n }\n\n if (windowEth?.providers && Array.isArray(windowEth.providers)) {\n const rainbowProvider = windowEth.providers.find((p: any) => p.isRainbow)\n if (rainbowProvider) {\n this.logger.info('Found Rainbow in providers array')\n return\n }\n }\n\n if (windowEth?.isRainbow) {\n this.logger.info('Found Rainbow as the primary provider')\n return\n }\n\n // If not found as extension, user might need to connect via QR code for mobile\n this.logger.warn('Rainbow extension not detected. Note: Rainbow mobile app requires WalletConnect.')\n }\n\n protected async getProvider(): Promise<EIP1193Provider> {\n if (!this.provider) {\n await this.initializeProvider()\n\n const windowEth = (window as any).ethereum\n\n // Try to get Rainbow-specific provider\n if ((window as any).rainbow) {\n this.provider = (window as any).rainbow\n } else if (windowEth?.providers && Array.isArray(windowEth.providers)) {\n const rainbowProvider = windowEth.providers.find((p: any) => p.isRainbow)\n if (rainbowProvider) {\n this.provider = rainbowProvider\n }\n } else if (windowEth?.isRainbow) {\n this.provider = windowEth\n }\n\n if (!this.provider) {\n throw new Error('Rainbow wallet not available. Please install Rainbow browser extension or use WalletConnect for mobile.')\n }\n }\n return this.provider\n }\n\n protected async signWithProvider(typedData: import('liquid-accounts-evm').SignTypedDataParams, evmAddress: string): Promise<string> {\n const provider = await this.getProvider()\n\n try {\n return await provider.request({\n method: 'eth_signTypedData_v4',\n params: [evmAddress, JSON.stringify(typedData)]\n } as any) as string\n } catch (error: any) {\n if (error.code === 4001) {\n throw new Error('User rejected the signing request')\n }\n throw error\n }\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n this.logger.info('Connecting...')\n\n await this.initializeProvider()\n await this.initializeEvmSdk()\n\n const provider = await this.getProvider()\n\n try {\n // Request wallet connection\n this.logger.info('Requesting Rainbow wallet connection...')\n const evmAddresses = await provider.request({\n method: 'eth_requestAccounts'\n }) as string[]\n\n if (evmAddresses.length === 0) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n this.logger.info(`Connected to ${evmAddresses.length} EVM account(s)`)\n\n const walletAccounts = await this.deriveAlgorandAccounts(evmAddresses)\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n this.logger.info('✅ Connected.', walletState)\n this.notifyConnect(evmAddresses[0], activeAccount.address)\n return walletAccounts\n } catch (error: any) {\n this.logger.error('Error connecting:', error.message)\n throw error\n }\n }\n\n public disconnect = async (): Promise<void> => {\n this.logger.info('Disconnecting...')\n\n // Clear provider reference to ensure fresh provider retrieval on reconnect\n this.provider = null\n this.evmAddressMap.clear()\n this.onDisconnect()\n\n this.logger.info('Disconnected')\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n this.logger.info('Resuming session...')\n\n await this.initializeProvider()\n await this.initializeEvmSdk()\n\n const provider = await this.getProvider()\n\n const evmAddresses = await provider.request({\n method: 'eth_accounts'\n }) as string[]\n\n if (evmAddresses.length === 0) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n await this.resumeWithAccounts(evmAddresses, (accounts) => {\n setAccounts(this.store, {\n walletId: this.id,\n accounts\n })\n })\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n this.onDisconnect()\n throw error\n }\n }\n}\n","/**\n * Web3Auth Wallet Provider for Algorand\n *\n * SECURITY CONSIDERATIONS:\n * - Web3Auth exposes the raw private key for non-EVM chains like Algorand\n * - This implementation uses SecureKeyContainer to minimize key exposure\n * - Keys are never persisted to localStorage or any storage\n * - Keys are cleared from memory immediately after signing operations\n * - Session resumption requires re-authentication (keys are not cached)\n *\n * @see https://web3auth.io/docs\n */\n\nimport algosdk from 'algosdk'\nimport { SecureKeyContainer, zeroMemory, deriveAlgorandAccountFromEd25519 } from 'src/secure-key'\nimport { StorageAdapter } from 'src/storage'\nimport { LOCAL_STORAGE_KEY, WalletState, addWallet, type State } from 'src/store'\nimport { flattenTxnGroup, isSignedTxn, isTransactionArray } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type { WalletAccount, WalletConstructor, WalletId } from 'src/wallets/types'\n\nconst LOCAL_STORAGE_WEB3AUTH_KEY = `${LOCAL_STORAGE_KEY}:web3auth`\n\n/** Metadata persisted to localStorage for Web3Auth session restoration */\ninterface Web3AuthMetadata {\n /** Whether the session was established using Single Factor Auth (SFA) vs modal */\n usingSFA: boolean\n}\n\n// Type definitions for Web3Auth (to avoid requiring the package at compile time)\n// These are minimal type definitions that match the actual Web3Auth API\ninterface IWeb3AuthProvider {\n request<T>(args: { method: string; params?: unknown }): Promise<T>\n}\n\ninterface IWeb3AuthUserInfo {\n email?: string\n name?: string\n profileImage?: string\n verifier?: string\n verifierId?: string\n typeOfLogin?: string\n aggregateVerifier?: string\n}\n\ninterface IWeb3AuthModal {\n initModal(): Promise<void>\n connect(): Promise<IWeb3AuthProvider | null>\n logout(): Promise<void>\n connected: boolean\n provider: IWeb3AuthProvider | null\n getUserInfo(): Promise<Partial<IWeb3AuthUserInfo>>\n}\n\n// Single Factor Auth SDK interface (for custom JWT auth)\ninterface IWeb3AuthSFA {\n init(): Promise<void>\n connect(params: {\n verifier: string\n verifierId: string\n idToken: string\n }): Promise<IWeb3AuthProvider | null>\n logout(): Promise<void>\n connected: boolean\n provider: IWeb3AuthProvider | null\n}\n\n/**\n * Parameters for custom authentication (e.g., Firebase, custom JWT)\n */\nexport interface Web3AuthCustomAuth {\n /**\n * Custom verifier name configured in Web3Auth dashboard\n */\n verifier: string\n\n /**\n * User identifier (e.g., email, Firebase UID)\n */\n verifierId: string\n\n /**\n * JWT token from your authentication provider (e.g., Firebase ID token)\n */\n idToken: string\n}\n\n/**\n * Credentials returned by getAuthCredentials callback\n */\nexport interface Web3AuthCredentials {\n /**\n * JWT token from your authentication provider (e.g., Firebase ID token)\n */\n idToken: string\n\n /**\n * User identifier (e.g., email, Firebase UID)\n */\n verifierId: string\n\n /**\n * Custom verifier name (optional, uses options.verifier if not provided)\n */\n verifier?: string\n}\n\n/**\n * Web3Auth configuration options\n */\nexport interface Web3AuthOptions {\n /**\n * Web3Auth Client ID from the dashboard\n * @see https://dashboard.web3auth.io\n */\n clientId: string\n\n /**\n * Web3Auth network (mainnet, testnet, sapphire_mainnet, sapphire_devnet, cyan, aqua)\n * @default 'sapphire_mainnet'\n */\n web3AuthNetwork?: 'mainnet' | 'testnet' | 'sapphire_mainnet' | 'sapphire_devnet' | 'cyan' | 'aqua'\n\n /**\n * Login provider to use (google, facebook, twitter, discord, etc.)\n * If not specified, the Web3Auth modal will be shown\n */\n loginProvider?:\n | 'google'\n | 'facebook'\n | 'twitter'\n | 'discord'\n | 'reddit'\n | 'twitch'\n | 'apple'\n | 'line'\n | 'github'\n | 'kakao'\n | 'linkedin'\n | 'weibo'\n | 'wechat'\n | 'email_passwordless'\n | 'sms_passwordless'\n\n /**\n * Login hint for email_passwordless or sms_passwordless\n */\n loginHint?: string\n\n /**\n * UI configuration for the Web3Auth modal\n */\n uiConfig?: {\n appName?: string\n appUrl?: string\n logoLight?: string\n logoDark?: string\n defaultLanguage?: string\n mode?: 'light' | 'dark' | 'auto'\n theme?: Record<string, string>\n }\n\n /**\n * Whether to use the popup flow instead of redirect\n * @default true\n */\n usePopup?: boolean\n\n /**\n * Default verifier name for custom authentication.\n * When set, connect() can be called with just { idToken, verifierId }\n */\n verifier?: string\n\n /**\n * Callback to get fresh authentication credentials when session expires.\n * Required for automatic re-authentication with Single Factor Auth (SFA).\n *\n * If not provided and the session expires, signTransactions() will throw\n * an error requiring the user to call connect() with fresh credentials.\n *\n * @example\n * ```typescript\n * getAuthCredentials: async () => {\n * const user = firebase.auth().currentUser\n * if (!user) throw new Error('Not logged in')\n * const idToken = await user.getIdToken(true)\n * return { idToken, verifierId: user.email || user.uid }\n * }\n * ```\n */\n getAuthCredentials?: () => Promise<Web3AuthCredentials>\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 40 40\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect fill=\"#0364FF\" width=\"40\" height=\"40\" rx=\"8\"/>\n <path fill=\"#FFFFFF\" d=\"M20 8c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12S26.627 8 20 8zm0 21.6c-5.302 0-9.6-4.298-9.6-9.6S14.698 10.4 20 10.4s9.6 4.298 9.6 9.6-4.298 9.6-9.6 9.6zm0-16.8c-3.976 0-7.2 3.224-7.2 7.2s3.224 7.2 7.2 7.2 7.2-3.224 7.2-7.2-3.224-7.2-7.2-7.2zm0 12c-2.651 0-4.8-2.149-4.8-4.8s2.149-4.8 4.8-4.8 4.8 2.149 4.8 4.8-2.149 4.8-4.8 4.8z\"/>\n</svg>\n`)}`\n\nexport class Web3AuthWallet extends BaseWallet {\n private web3auth: IWeb3AuthModal | null = null\n private web3authSFA: IWeb3AuthSFA | null = null\n private options: Web3AuthOptions\n private userInfo: Partial<IWeb3AuthUserInfo> | null = null\n\n /**\n * SECURITY: We store only the address, NEVER the private key.\n * Keys are fetched fresh from Web3Auth and immediately cleared after use.\n */\n private _address: string | null = null\n\n /** Track which SDK is currently in use */\n private usingSFA: boolean = false\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options,\n metadata = {}\n }: WalletConstructor<WalletId.WEB3AUTH>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n\n if (!options?.clientId) {\n this.logger.error('Missing required option: clientId')\n throw new Error('Missing required option: clientId')\n }\n\n this.options = {\n web3AuthNetwork: 'sapphire_mainnet',\n usePopup: true,\n ...options\n }\n this.store = store\n }\n\n private loadMetadata(): Web3AuthMetadata | null {\n const data = StorageAdapter.getItem(LOCAL_STORAGE_WEB3AUTH_KEY)\n if (!data) return null\n try {\n return JSON.parse(data) as Web3AuthMetadata\n } catch {\n return null\n }\n }\n\n private saveMetadata(): void {\n const metadata: Web3AuthMetadata = { usingSFA: this.usingSFA }\n StorageAdapter.setItem(LOCAL_STORAGE_WEB3AUTH_KEY, JSON.stringify(metadata))\n }\n\n private clearMetadata(): void {\n StorageAdapter.removeItem(LOCAL_STORAGE_WEB3AUTH_KEY)\n }\n\n static defaultMetadata = {\n name: 'Web3Auth',\n icon: ICON\n }\n\n /**\n * Initialize the Web3Auth client\n */\n private async initializeClient(): Promise<IWeb3AuthModal> {\n this.logger.info('Initializing Web3Auth client...')\n\n // Dynamic import to avoid bundling Web3Auth for users who don't need it\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let Web3Auth: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let CHAIN_NAMESPACES: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let WEB3AUTH_NETWORK: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let CommonPrivateKeyProvider: any\n\n try {\n // Dynamic imports - these are optional peer dependencies\n const modal = await import('@web3auth/modal')\n Web3Auth = modal.Web3Auth\n const base = await import('@web3auth/base')\n CHAIN_NAMESPACES = base.CHAIN_NAMESPACES\n WEB3AUTH_NETWORK = base.WEB3AUTH_NETWORK\n const baseProvider = await import('@web3auth/base-provider')\n CommonPrivateKeyProvider = baseProvider.CommonPrivateKeyProvider\n } catch (error) {\n this.logger.error(\n 'Failed to load Web3Auth. Make sure @web3auth/modal, @web3auth/base, and @web3auth/base-provider are installed.',\n error\n )\n throw new Error(\n 'Web3Auth packages not found. Please install @web3auth/modal, @web3auth/base, and @web3auth/base-provider'\n )\n }\n\n const chainConfig = {\n chainNamespace: CHAIN_NAMESPACES.OTHER,\n chainId: 'algorand',\n rpcTarget: 'https://mainnet-api.algonode.cloud', // Required by Web3Auth, not actually used for signing\n displayName: 'Algorand',\n blockExplorerUrl: 'https://lora.algokit.io/mainnet',\n ticker: 'ALGO',\n tickerName: 'Algorand'\n }\n\n const networkMap: Record<string, string> = {\n mainnet: WEB3AUTH_NETWORK.MAINNET,\n testnet: WEB3AUTH_NETWORK.TESTNET,\n sapphire_mainnet: WEB3AUTH_NETWORK.SAPPHIRE_MAINNET,\n sapphire_devnet: WEB3AUTH_NETWORK.SAPPHIRE_DEVNET,\n cyan: WEB3AUTH_NETWORK.CYAN,\n aqua: WEB3AUTH_NETWORK.AQUA\n }\n\n // Create private key provider for non-EVM chains (required in Web3Auth v9)\n const privateKeyProvider = new CommonPrivateKeyProvider({\n config: { chainConfig }\n })\n\n const web3auth = new Web3Auth({\n clientId: this.options.clientId,\n web3AuthNetwork: networkMap[this.options.web3AuthNetwork || 'sapphire_mainnet'] as any,\n privateKeyProvider,\n uiConfig: this.options.uiConfig\n })\n\n await web3auth.initModal()\n this.web3auth = web3auth\n this.logger.info('Web3Auth client initialized')\n\n return web3auth\n }\n\n /**\n * Initialize the Web3Auth Single Factor Auth client for custom JWT authentication\n */\n private async initializeSFAClient(): Promise<IWeb3AuthSFA> {\n this.logger.info('Initializing Web3Auth Single Factor Auth client...')\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let Web3Auth: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let WEB3AUTH_NETWORK: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let CommonPrivateKeyProvider: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let CHAIN_NAMESPACES: any\n\n try {\n // Dynamic imports - these are optional peer dependencies\n const sfa = await import('@web3auth/single-factor-auth')\n Web3Auth = sfa.Web3Auth\n const base = await import('@web3auth/base')\n WEB3AUTH_NETWORK = base.WEB3AUTH_NETWORK\n CHAIN_NAMESPACES = base.CHAIN_NAMESPACES\n const baseProvider = await import('@web3auth/base-provider')\n CommonPrivateKeyProvider = baseProvider.CommonPrivateKeyProvider\n } catch {\n this.logger.error(\n 'Failed to load Web3Auth SFA. Make sure @web3auth/single-factor-auth, @web3auth/base, and @web3auth/base-provider are installed.'\n )\n throw new Error(\n 'Web3Auth SFA packages not found. Please install @web3auth/single-factor-auth, @web3auth/base, and @web3auth/base-provider'\n )\n }\n\n const chainConfig = {\n chainNamespace: CHAIN_NAMESPACES.OTHER,\n chainId: 'algorand',\n rpcTarget: 'https://mainnet-api.algonode.cloud', // Required by Web3Auth, not actually used for signing\n displayName: 'Algorand',\n blockExplorerUrl: 'https://lora.algokit.io/mainnet',\n ticker: 'ALGO',\n tickerName: 'Algorand'\n }\n\n const networkMap: Record<string, string> = {\n mainnet: WEB3AUTH_NETWORK.MAINNET,\n testnet: WEB3AUTH_NETWORK.TESTNET,\n sapphire_mainnet: WEB3AUTH_NETWORK.SAPPHIRE_MAINNET,\n sapphire_devnet: WEB3AUTH_NETWORK.SAPPHIRE_DEVNET,\n cyan: WEB3AUTH_NETWORK.CYAN,\n aqua: WEB3AUTH_NETWORK.AQUA\n }\n\n // Create private key provider for non-EVM chains\n const privateKeyProvider = new CommonPrivateKeyProvider({\n config: { chainConfig }\n })\n\n const web3authSFA = new Web3Auth({\n clientId: this.options.clientId,\n web3AuthNetwork: networkMap[this.options.web3AuthNetwork || 'sapphire_mainnet'] as any,\n privateKeyProvider\n })\n\n await web3authSFA.init()\n this.web3authSFA = web3authSFA\n this.logger.info('Web3Auth SFA client initialized')\n\n return web3authSFA\n }\n\n /**\n * SECURITY: Fetch the private key from Web3Auth and return it in a SecureKeyContainer.\n * The caller MUST call container.clear() when done.\n *\n * @returns SecureKeyContainer holding the private key\n */\n private async getSecureKey(): Promise<SecureKeyContainer> {\n // Get the provider from either the modal SDK or SFA SDK\n const provider = this.usingSFA ? this.web3authSFA?.provider : this.web3auth?.provider\n\n if (!provider) {\n throw new Error('Web3Auth not connected')\n }\n\n this.logger.debug('Fetching private key from Web3Auth...')\n\n // Request the private key from Web3Auth\n // For non-EVM chains, Web3Auth returns the raw ed25519 private key\n const privateKeyHex = await provider.request<string>({\n method: 'private_key'\n })\n\n if (!privateKeyHex || typeof privateKeyHex !== 'string') {\n throw new Error('Failed to retrieve private key from Web3Auth')\n }\n\n // Convert hex string to Uint8Array\n const privateKeyBytes = this.hexToBytes(privateKeyHex)\n\n // SECURITY: Immediately clear the hex string from our scope\n // (The original string may still exist in Web3Auth's scope)\n\n // Wrap in SecureKeyContainer for safe handling\n const container = new SecureKeyContainer(privateKeyBytes)\n\n // SECURITY: Zero the local copy now that it's in the container\n zeroMemory(privateKeyBytes)\n\n this.logger.debug('Private key retrieved and secured')\n return container\n }\n\n /**\n * Convert a hex string to Uint8Array\n */\n private hexToBytes(hex: string): Uint8Array {\n // Remove 0x prefix if present\n const cleanHex = hex.startsWith('0x') ? hex.slice(2) : hex\n const bytes = new Uint8Array(cleanHex.length / 2)\n for (let i = 0; i < cleanHex.length; i += 2) {\n bytes[i / 2] = parseInt(cleanHex.slice(i, i + 2), 16)\n }\n return bytes\n }\n\n /**\n * Connect to Web3Auth\n *\n * @param args - Optional connection arguments\n * @param args.idToken - JWT token for custom authentication (e.g., Firebase ID token)\n * @param args.verifierId - User identifier for custom authentication (e.g., email, uid)\n * @param args.verifier - Custom verifier name (uses options.verifier if not provided)\n *\n * @example\n * // Standard modal connection\n * await wallet.connect()\n *\n * @example\n * // Custom authentication with Firebase\n * await wallet.connect({\n * idToken: firebaseIdToken,\n * verifierId: user.email,\n * verifier: 'my-firebase-verifier'\n * })\n */\n public connect = async (args?: {\n idToken?: string\n verifierId?: string\n verifier?: string\n }): Promise<WalletAccount[]> => {\n this.logger.info('Connecting to Web3Auth...')\n\n try {\n let provider: IWeb3AuthProvider | null\n\n // Check if custom authentication params are provided\n const idToken = args?.idToken\n const verifierId = args?.verifierId\n const verifier = args?.verifier || this.options.verifier\n\n if (idToken && verifierId) {\n // Custom authentication flow using Single Factor Auth (e.g., Firebase)\n if (!verifier) {\n throw new Error(\n 'Custom authentication requires a verifier. Provide it in connect() args or options.verifier'\n )\n }\n\n this.logger.info('Connecting with custom authentication (SFA)...', { verifier, verifierId })\n\n // Initialize the SFA client\n const web3authSFA = this.web3authSFA || (await this.initializeSFAClient())\n\n // If already connected, logout first to allow reconnection with potentially different credentials\n if (web3authSFA.connected) {\n this.logger.debug('SFA already connected, logging out first...')\n try {\n await web3authSFA.logout()\n } catch {\n // Ignore logout errors\n }\n }\n\n // Connect using Single Factor Auth - no modal, direct connection\n provider = await web3authSFA.connect({\n verifier,\n verifierId,\n idToken\n })\n\n this.usingSFA = true\n\n // SFA doesn't provide getUserInfo, use verifierId as display name\n this.userInfo = { email: verifierId }\n } else {\n // Standard modal connection\n const web3auth = this.web3auth || (await this.initializeClient())\n provider = await web3auth.connect()\n\n this.usingSFA = false\n\n // Get user info for display purposes (modal SDK only)\n this.userInfo = await web3auth.getUserInfo()\n this.logger.debug('User info retrieved', { email: this.userInfo.email })\n }\n\n if (!provider) {\n throw new Error('Failed to connect to Web3Auth')\n }\n\n // SECURITY: Get the key, derive the address, and immediately clear the key\n const keyContainer = await this.getSecureKey()\n\n try {\n const address = await keyContainer.useKey(async (secretKey) => {\n const account = await deriveAlgorandAccountFromEd25519(secretKey)\n // SECURITY: Zero the derived account's secret key immediately\n const addr = account.addr\n zeroMemory(account.sk)\n return addr\n })\n\n this._address = address\n } finally {\n // SECURITY: Always clear the key container\n keyContainer.clear()\n }\n\n const walletAccount: WalletAccount = {\n name: this.userInfo.name || this.userInfo.email || `${this.metadata.name} Account`,\n address: this._address\n }\n\n const walletState: WalletState = {\n accounts: [walletAccount],\n activeAccount: walletAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n // Save metadata only after successful connection\n this.saveMetadata()\n\n this.logger.info('Connected successfully', { address: this._address })\n return [walletAccount]\n } catch (error: any) {\n this.logger.error('Error connecting to Web3Auth:', error.message)\n throw error\n }\n }\n\n /**\n * Disconnect from Web3Auth\n */\n public disconnect = async (): Promise<void> => {\n this.logger.info('Disconnecting from Web3Auth...')\n\n try {\n if (this.usingSFA && this.web3authSFA?.connected) {\n await this.web3authSFA.logout()\n } else if (this.web3auth?.connected) {\n await this.web3auth.logout()\n }\n } catch (error: any) {\n this.logger.warn('Error during Web3Auth logout:', error.message)\n }\n\n // Clear local state\n this._address = null\n this.userInfo = null\n this.usingSFA = false\n this.clearMetadata()\n this.onDisconnect()\n\n this.logger.info('Disconnected')\n }\n\n /**\n * Resume session from cached state\n *\n * LAZY AUTHENTICATION: We do NOT connect to Web3Auth here.\n * We simply restore the cached address from localStorage.\n * Web3Auth connection is deferred until signTransactions() is called.\n */\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n const storedAccount = walletState.accounts[0]\n\n if (!storedAccount?.address) {\n this.logger.warn('No address found in cached session')\n this.onDisconnect()\n return\n }\n\n // Just restore the cached address - don't initialize Web3Auth\n this._address = storedAccount.address\n this.userInfo = { name: storedAccount.name }\n\n // Restore usingSFA flag from metadata\n const metadata = this.loadMetadata()\n if (metadata) {\n this.usingSFA = metadata.usingSFA\n }\n\n this.logger.info('Session restored from cache (lazy mode)', { address: this._address })\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n this.onDisconnect()\n throw error\n }\n }\n\n /**\n * Check if Web3Auth is currently connected with a valid session\n */\n private isWeb3AuthConnected(): boolean {\n if (this.usingSFA) {\n return Boolean(this.web3authSFA?.connected && this.web3authSFA?.provider)\n }\n return Boolean(this.web3auth?.connected && this.web3auth?.provider)\n }\n\n /**\n * Ensure Web3Auth is connected and ready for signing.\n * Re-authenticates if the session has expired.\n *\n * This is called lazily when signTransactions() is invoked,\n */\n private async ensureConnected(): Promise<void> {\n if (this.isWeb3AuthConnected()) {\n this.logger.debug('Web3Auth session still valid')\n return\n }\n\n this.logger.info('Web3Auth session expired or not initialized, re-authenticating...')\n\n if (this.usingSFA) {\n await this.reconnectSFA()\n } else {\n await this.reconnectModal()\n }\n }\n\n /**\n * Re-authenticate using Single Factor Auth (Firebase, custom JWT)\n *\n * Requires getAuthCredentials callback to be configured in options.\n * If the callback returns credentials for a different user, this will\n * disconnect the current wallet (the user logged out and back in as someone else).\n */\n private async reconnectSFA(): Promise<void> {\n if (!this.options.getAuthCredentials) {\n this.logger.error('Cannot re-authenticate: getAuthCredentials callback not configured')\n throw new Error(\n 'Web3Auth session expired. Configure getAuthCredentials option for automatic re-auth, ' +\n 'or call disconnect() and connect() with fresh credentials.'\n )\n }\n\n this.logger.info('Getting fresh credentials for SFA re-authentication...')\n\n let credentials: Web3AuthCredentials\n try {\n credentials = await this.options.getAuthCredentials()\n } catch (error: any) {\n // User is no longer authenticated with the identity provider (e.g., logged out of Firebase)\n this.logger.warn('Failed to get auth credentials, user may have logged out:', error.message)\n this.onDisconnect()\n throw new Error('Authentication provider session expired. Please log in again.')\n }\n\n // Initialize SFA client if needed\n const web3authSFA = this.web3authSFA || (await this.initializeSFAClient())\n\n // Logout first if still connected (stale session)\n if (web3authSFA.connected) {\n try {\n await web3authSFA.logout()\n } catch {\n // Ignore logout errors\n }\n }\n\n const verifier = credentials.verifier || this.options.verifier\n if (!verifier) {\n throw new Error('No verifier configured for SFA authentication')\n }\n\n // Connect with fresh credentials\n const provider = await web3authSFA.connect({\n verifier,\n verifierId: credentials.verifierId,\n idToken: credentials.idToken\n })\n\n if (!provider) {\n throw new Error('Failed to re-authenticate with Web3Auth SFA')\n }\n\n this.usingSFA = true\n this.saveMetadata()\n\n // Verify we got the same address (same user)\n await this.verifyAddressMatch()\n }\n\n /**\n * Re-authenticate using the Web3Auth modal\n *\n * Shows the Web3Auth login modal for the user to authenticate again.\n * If they log in as a different user, this will disconnect the current wallet.\n */\n private async reconnectModal(): Promise<void> {\n this.logger.info('Showing Web3Auth modal for re-authentication...')\n\n const web3auth = this.web3auth || (await this.initializeClient())\n\n // Logout first if still connected (stale session)\n if (web3auth.connected) {\n try {\n await web3auth.logout()\n } catch {\n // Ignore logout errors\n }\n }\n\n const provider = await web3auth.connect()\n\n if (!provider) {\n throw new Error('Re-authentication cancelled or failed')\n }\n\n this.usingSFA = false\n this.saveMetadata()\n\n // Get updated user info\n this.userInfo = await web3auth.getUserInfo()\n\n // Verify we got the same address (same user)\n await this.verifyAddressMatch()\n }\n\n /**\n * Verify that the current Web3Auth session matches the cached address.\n *\n * If the address doesn't match (user logged in as someone else),\n * this disconnects the wallet entirely - it's a different identity.\n */\n private async verifyAddressMatch(): Promise<void> {\n const keyContainer = await this.getSecureKey()\n\n try {\n const currentAddress = await keyContainer.useKey(async (secretKey) => {\n const account = await deriveAlgorandAccountFromEd25519(secretKey)\n const addr = account.addr\n zeroMemory(account.sk)\n return addr\n })\n\n if (currentAddress !== this._address) {\n this.logger.warn('Re-authenticated as different user, disconnecting wallet', {\n expected: this._address,\n actual: currentAddress\n })\n\n // Different user = different wallet. Full disconnect required.\n this.onDisconnect()\n\n throw new Error(\n `Re-authenticated as a different account. Expected ${this._address}, got ${currentAddress}. ` +\n 'Please connect again with the correct account.'\n )\n }\n\n this.logger.info('Address verified, session restored')\n } finally {\n keyContainer.clear()\n }\n }\n\n /**\n * Process transactions for signing\n */\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): algosdk.Transaction[] {\n const txnsToSign: algosdk.Transaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = signer === this._address\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push(txn)\n }\n })\n\n return txnsToSign\n }\n\n /**\n * Process encoded transactions for signing\n */\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): algosdk.Transaction[] {\n const txnsToSign: algosdk.Transaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && signer === this._address\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push(txn)\n }\n })\n\n return txnsToSign\n }\n\n /**\n * Sign transactions\n *\n * LAZY AUTHENTICATION: If the Web3Auth session has expired, this will\n * automatically re-authenticate before signing.\n *\n * SECURITY: The private key is fetched fresh, used for signing,\n * and immediately cleared from memory. The key is never stored\n * between signing operations.\n */\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n\n // Ensure Web3Auth is connected (re-authenticates if session expired)\n await this.ensureConnected()\n\n let txnsToSign: algosdk.Transaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n if (txnsToSign.length === 0) {\n this.logger.debug('No transactions to sign')\n return []\n }\n\n // SECURITY: Fetch key, sign, and immediately clear\n const keyContainer = await this.getSecureKey()\n let signedTxns: Uint8Array[] = []\n\n try {\n signedTxns = await keyContainer.useKey(async (secretKey) => {\n const account = await deriveAlgorandAccountFromEd25519(secretKey)\n\n try {\n // Sign all transactions\n const signed = txnsToSign.map((txn) => txn.signTxn(account.sk))\n return signed\n } finally {\n // SECURITY: Always zero the account's secret key\n zeroMemory(account.sk)\n }\n })\n } finally {\n // SECURITY: Always clear the key container\n keyContainer.clear()\n }\n\n this.logger.debug('Transactions signed successfully', { count: signedTxns.length })\n return signedTxns\n } catch (error: any) {\n this.logger.error('Error signing transactions:', error.message)\n throw error\n }\n }\n}\n","/**\n * Secure key handling utilities for managing sensitive cryptographic material.\n *\n * These utilities provide defense-in-depth for private key handling:\n * 1. Memory zeroing - Overwrites key material before releasing references\n * 2. Scoped key access - Keys are only available within controlled callbacks\n * 3. Automatic cleanup - Keys are cleared after use via try/finally patterns\n * 4. No persistence - Keys are never stored to disk/localStorage\n */\n\nimport { logger } from 'src/logger'\n\nconst secureLogger = logger.createScopedLogger('SecureKey')\n\n/**\n * Securely zeros out a Uint8Array by overwriting all bytes with zeros.\n * This helps prevent key material from lingering in memory.\n *\n * Note: JavaScript doesn't guarantee immediate memory clearing due to GC,\n * but this provides defense-in-depth by:\n * 1. Overwriting the buffer contents immediately\n * 2. Reducing the window where key material is accessible\n * 3. Preventing accidental key leakage through references\n */\nexport function zeroMemory(buffer: Uint8Array): void {\n if (!buffer || buffer.length === 0) return\n\n try {\n // Use crypto.getRandomValues first to prevent compiler optimizations\n // from removing the zeroing operation\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\n crypto.getRandomValues(buffer)\n }\n // Then zero out the buffer\n buffer.fill(0)\n } catch {\n // Fallback: manual zeroing if crypto is unavailable\n for (let i = 0; i < buffer.length; i++) {\n buffer[i] = 0\n }\n }\n}\n\n/**\n * Securely zeros out a string by creating a mutable copy and clearing it.\n * Returns an empty string. The original string in memory may still exist\n * due to string immutability in JS, but this clears any mutable references.\n */\nexport function zeroString(str: string): string {\n if (!str) return ''\n\n // Convert to array, zero it, and discard\n const arr = new Uint8Array(str.length)\n for (let i = 0; i < str.length; i++) {\n arr[i] = str.charCodeAt(i)\n }\n zeroMemory(arr)\n\n return ''\n}\n\n/**\n * A secure container for holding private key material.\n * Provides controlled access and automatic cleanup.\n */\nexport class SecureKeyContainer {\n private _secretKey: Uint8Array | null = null\n private _isCleared: boolean = false\n\n constructor(secretKey: Uint8Array) {\n // Create a copy to ensure we own the memory\n this._secretKey = new Uint8Array(secretKey)\n // Immediately zero the source if caller passes ownership\n // (caller should still zero their copy)\n }\n\n /**\n * Check if the key has been cleared\n */\n get isCleared(): boolean {\n return this._isCleared\n }\n\n /**\n * Execute a callback with access to the secret key.\n * The key is automatically cleared if an error occurs.\n */\n async useKey<T>(callback: (secretKey: Uint8Array) => Promise<T>): Promise<T> {\n if (this._isCleared || !this._secretKey) {\n throw new Error('SecureKeyContainer: Key has been cleared')\n }\n\n try {\n return await callback(this._secretKey)\n } catch (error) {\n // On error, clear immediately to prevent leakage\n this.clear()\n throw error\n }\n }\n\n /**\n * Execute a synchronous callback with access to the secret key.\n */\n useKeySync<T>(callback: (secretKey: Uint8Array) => T): T {\n if (this._isCleared || !this._secretKey) {\n throw new Error('SecureKeyContainer: Key has been cleared')\n }\n\n try {\n return callback(this._secretKey)\n } catch (error) {\n this.clear()\n throw error\n }\n }\n\n /**\n * Securely clear the key from memory.\n * This should be called when the key is no longer needed.\n */\n clear(): void {\n if (this._secretKey && !this._isCleared) {\n zeroMemory(this._secretKey)\n this._secretKey = null\n this._isCleared = true\n secureLogger.debug('Key material cleared from memory')\n }\n }\n}\n\n/**\n * Execute a function with a temporary secret key that is automatically\n * cleared after the function completes (success or error).\n *\n * This is the preferred pattern for one-time key operations.\n */\nexport async function withSecureKey<T>(\n secretKey: Uint8Array,\n callback: (container: SecureKeyContainer) => Promise<T>\n): Promise<T> {\n const container = new SecureKeyContainer(secretKey)\n\n try {\n return await callback(container)\n } finally {\n container.clear()\n }\n}\n\n/**\n * Synchronous version of withSecureKey for non-async operations.\n */\nexport function withSecureKeySync<T>(\n secretKey: Uint8Array,\n callback: (container: SecureKeyContainer) => T\n): T {\n const container = new SecureKeyContainer(secretKey)\n\n try {\n return callback(container)\n } finally {\n container.clear()\n }\n}\n\n/**\n * Derive an Algorand account from an ed25519 private key seed.\n * The input key should be 32 bytes (seed).\n *\n * SECURITY: The returned account contains a secret key reference.\n * The caller is responsible for zeroing account.sk after use.\n */\nexport async function deriveAlgorandAccountFromEd25519(\n ed25519Seed: Uint8Array\n): Promise<{ addr: string; sk: Uint8Array }> {\n // Web3Auth returns a 32-byte ed25519 seed (private key)\n // We need to derive the full 64-byte secret key and the Algorand address\n\n if (ed25519Seed.length !== 32) {\n throw new Error(`Invalid ed25519 seed length: expected 32 bytes, got ${ed25519Seed.length}`)\n }\n\n // Use tweetnacl directly for ed25519 key derivation\n // This is the same library algosdk uses internally but this approach avoids the seed to 25-word mnemonic conversion\n // and then mnemonic to secret key. Because strings in JS are immutable, this avoids a dangerous security issue of\n // not being able to securely erase the mnemonics.\n const nacl = await import('tweetnacl')\n const algosdk = await import('algosdk')\n\n // Create a nacl keypair from the seed\n // tweetnacl's sign.keyPair.fromSeed returns: { publicKey, secretKey }\n // where secretKey is 64 bytes: seed (32) + publicKey (32)\n const keyPair = nacl.sign.keyPair.fromSeed(ed25519Seed)\n\n // Derive the Algorand address from the public key\n const address = algosdk.encodeAddress(keyPair.publicKey)\n\n return {\n addr: address,\n sk: keyPair.secretKey\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, type State } from 'src/store'\nimport {\n base64ToByteArray,\n byteArrayToBase64,\n flattenTxnGroup,\n isSignedTxn,\n isTransactionArray\n} from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type {\n WalletAccount,\n WalletConstructor,\n WalletId,\n WalletTransaction\n} from 'src/wallets/types'\n\nexport interface W3WalletProvider {\n isConnected: () => Promise<boolean>\n account: () => Promise<WalletAccount>\n signTxns: (transactions: WalletTransaction[]) => Promise<(string | null)[]>\n}\n\ntype WindowExtended = { w3walletAlgorand: W3WalletProvider } & Window & typeof globalThis\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg width=\"860\" height=\"860\" viewBox=\"0 0 860 860\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"860\" height=\"860\" rx=\"30\" fill=\"#151923\"/>\n <path d=\"M766 207L496.627 623.406C463.521 675.336 382.014 652.248 382.014 590.941V432.568L260.638 623.28C227.559 675.255 146 652.186 146 590.854V274.844H234.646V499.761L356.022 309.049C389.101 257.074 470.66 280.143 470.66 341.475V499.978L660.146 207L766 207Z\" fill=\"#4BB7D1\"/>\n</svg>\n`)}`\n\nexport class W3Wallet extends BaseWallet {\n private client: W3WalletProvider | null = null\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n metadata = {}\n }: WalletConstructor<WalletId.W3_WALLET>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'W3 Wallet',\n icon: ICON\n }\n\n private async initializeClient(): Promise<W3WalletProvider> {\n this.logger.info('Initializing client...')\n if (\n typeof window === 'undefined' ||\n (window as WindowExtended).w3walletAlgorand === undefined\n ) {\n this.logger.error('W3 Wallet is not available.')\n throw new Error('W3 Wallet is not available.')\n }\n const client = (window as WindowExtended).w3walletAlgorand\n this.client = client\n this.logger.info('Client initialized')\n return client\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n this.logger.info('Connecting...')\n const client = this.client || (await this.initializeClient())\n\n const activeAccount = await client.account()\n\n const walletState: WalletState = {\n accounts: [activeAccount],\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n this.logger.info('✅ Connected.', walletState)\n return [activeAccount]\n }\n\n public disconnect = async (): Promise<void> => {\n this.logger.info('Disconnecting...')\n this.onDisconnect()\n this.logger.info('Disconnected.')\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n this.logger.info('Resuming session...')\n const client = await this.initializeClient()\n const isConnected = await client.isConnected()\n\n if (!isConnected) {\n this.logger.error('W3 Wallet is not connected.')\n throw new Error('W3 Wallet is not connected.')\n }\n this.logger.info('Session resumed')\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n let txnsToSign: WalletTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n this.logger.debug('Sending processed transactions to wallet...', txnsToSign)\n\n // Sign transactions\n const signTxnsResult = await client.signTxns(txnsToSign)\n this.logger.debug('Received signed transactions from wallet', signTxnsResult)\n\n // Convert base64 to Uint8Array\n const result = signTxnsResult.map((value) => {\n if (value === null) {\n return null\n }\n return base64ToByteArray(value)\n })\n\n this.logger.debug('Transactions signed successfully', result)\n return result\n } catch (error: any) {\n this.logger.error('Error signing transactions:', error.message)\n throw error\n }\n }\n}\n","/**\n * Fallback configuration for Webpack to handle optional wallet dependencies.\n * This allows applications to build without these packages installed,\n * enabling users to include only the wallet packages they need.\n * Each package is set to 'false', which means Webpack will provide an empty module\n * if the package is not found, preventing build errors for unused wallets.\n */\nexport const webpackFallback = {\n '@agoralabs-sh/avm-web-provider': false,\n '@blockshake/defly-connect': false,\n '@magic-ext/algorand': false,\n '@perawallet/connect': false,\n '@walletconnect/modal': false,\n '@walletconnect/sign-client': false,\n '@web3auth/base': false,\n '@web3auth/base-provider': false,\n '@web3auth/modal': false,\n '@web3auth/single-factor-auth': false,\n 'lute-connect': false,\n 'magic-sdk': false\n}\n"],"mappings":"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ACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,MACtC;AAEA,e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","names":["SDKErrorCode","SDKWarningCode","RPCErrorCode","LocalStorageKeys","ThirdPartyWalletEvents","MagicPayloadMethod","routeToMagicMethods","MagicIncomingWindowMessage","MagicOutgoingWindowMessage","DeepLinkPage","LoginWithMagicLinkEventEmit","LoginWithMagicLinkEventOnReceived","LoginWithEmailOTPEventEmit","LoginWithSmsOTPEventEmit","LoginWithSmsOTPEventOnReceived","LoginWithEmailOTPEventOnReceived","DeviceVerificationEventEmit","DeviceVerificationEventOnReceived","RecencyCheckEventEmit","RecencyCheckEventOnReceived","UpdateEmailEventEmit","UpdateEmailEventOnReceived","AuthEventOnReceived","FarcasterLoginEventEmit","EnableMFAEventOnReceived","EnableMFAEventEmit","DisableMFAEventOnReceived","DisableMFAEventEmit","EthChainType","UserEventsEmit","UserEventsOnReceived","RecoveryFactorEventOnReceived","RecoveryFactorEventEmit","RecoveryMethodType","RecoverAccountEventOnReceived","RecoverAccountEventEmit","NftCheckoutIntermediaryEvents","WalletEventOnReceived","UiEventsEmit","createCommonjsModule","e","r","percentToByte","p","byteToPercent","b","btoaUTF8","str","atobUTF8","encodeJSON","options","decodeJSON","queryString","isUndefined","value","isNull","isNil","isJsonRpcResponsePayload","isJsonRpcErrorCode","RPCErrorCode","isEmpty","key","createSDK","SDKBaseCtor","environment","SDKEnvironment","createMissingApiKeyError","MagicSDKError","SDKErrorCode","createModalNotReadyError","createMalformedResponseError","createExtensionNotInitializedError","member","createIncompatibleExtensionsError","extensions","msg","ext","compat","createInvalidArgumentError","ordinalSuffix","i","iAdjusted","j","k","createDuplicateIframeWarning","MagicSDKWarning","SDKWarningCode","createSynchronousWeb3MethodWarning","createReactNativeEndpointConfigurationWarning","createDeprecationWarning","method","removalVersions","useInstead","removalVersion","useInsteadSuffix","message","createIntGenerator","index","getPayloadId","intGenerator","proxyLocalForageMethod","args","lf","uuid","u","uid","isWebCryptoSupported","hasCrypto","hasSubtleCrypto","clearKeys","removeItem","STORE_KEY_PUBLIC_JWK","STORE_KEY_PRIVATE_KEY","createJwt","publicJwk","getPublicKey","subtle","privateJwk","getItem","claims","jws","strToUrlBase64","data","strToUint8","sigType","ALGO_NAME","sig","uint8ToUrlBase64","generateWCKP","kp","EC_GEN_PARAMS","jwkPublicKey","setItem","binToUrlBase64","utf8ToBinaryString","bin","_","p1","uint8","code","markPayloadAsPreprocessed","payload","payloadPreprocessedSymbol","isPayloadPreprocessed","standardizeJsonRpcRequestPayload","createJsonRpcRequestPayload","params","createTypedEmitter","emitter","TypedEmitter","source","isPromiEvent","promiEventBrand","createPromiEvent","executor","promise","createPromise","createBoundEmitterMethod","createChainingEmitterMethod","thenSymbol","catchSymbol","finallySymbol","createChainingPromiseMethod","nextPromise","promiEvent","result","resolved","err","UserEventsOnReceived","UserEventsEmit","resolve","reject","isMajorVersionAtLeast","version","majorVersion","major","clearDeviceShares","keysToRemove","iterate","iterationNumber","DEVICE_SHARE_KEY","arrayBufferToBase64","buffer","binary","bytes","len","base64ToArrayBuffer","base64","binaryString","getOrCreateInitVector","crypto","existingIv","INITIALIZATION_VECTOR_KEY","getOrCreateEncryptionKey","existingKey","ENCRYPTION_KEY_KEY","ALGO_LENGTH","encryptAndPersistDeviceShare","deviceShareBase64","networkHash","iv","encryptionKey","decodedDeviceShare","encryptedData","encryptedDeviceShare","getDecryptedDeviceShare","ab","createURL","url","base","checkExtensionCompat","satisfies","coerce","getNetworkHash","apiKey","network","extConfig","prepareExtensions","incompatibleExtensions","name","getRequestPayloadFromBatch","requestPayload","id","standardizeResponse","event","requestPayloadResolved","response","JsonRpcResponse","createMagicRequest","msgType","rt","jwt","request","decryptedDeviceShare","persistMagicEventRefreshToken","debounce","func","delay","timeoutId","getPrototypeChain","instance","currentProto","protos","BaseModule","require_eventemitter3","MAX_SAFE_INTEGER$1","constants","debug","debug_1","re_1","numeric","compareIdentifiers$1","rcompareIdentifiers","identifiers","MAX_LENGTH$1","MAX_SAFE_INTEGER","re$4","t$4","compareIdentifiers","SemVer","compare","compare_1","eq","eq_1","neq","neq_1","gt","gt_1","gte","gte_1","lt","lt_1","lte","lte_1","cmp","cmp_1","ANY","Comparator","re$3","t$3","Range","re$2","t$2","comparatorTrimReplace","tildeTrimReplace","caretTrimReplace","isSatisfiable","parseComparator","isX","replaceTildes","replaceTilde","replaceCarets","replaceCaret","replaceXRanges","replaceXRange","replaceStars","replaceGTE0","hyphenReplace","testSet","MAX_LENGTH","re$1","t$1","parse","parse_1","re","t","sdkNameToEnvName","MagicRPCError","MagicExtensionError","MagicExtensionWarning","storage_exports","clear","length","keys","ALGO_CURVE","import_eventemitter3","ProductConsolidationMethodRemovalVersions","AuthModule","UserModule","WalletModule","ThirdPartyWalletsModule","RPCProviderModule","NFTModule","SDKBase","SECOND","MINUTE","PING_INTERVAL","INITIAL_HEARTBEAT_DELAY","ViewController","sdkAccessFields","BaseExtension","InternalExtension","Extension","__commonJSMin","exports","module","has","prefix","Events","EE","fn","context","once","addListener","listener","evt","clearEvent","EventEmitter","names","events","handlers","l","ee","listeners","a1","a2","a3","a4","a5","a","n","_SemVer","s","_Comparator","o","_Range","E","c","$","h","_MagicSDKError","rawMessage","_MagicRPCError","sourceError","codeNormalized","_MagicExtensionError","__export","_JsonRpcResponse","responseOrPayload","error","sdk","routeToMagicMethods","responsePromise","MagicOutgoingWindowMessage","res","cleanupEvents","MagicIncomingWindowMessage","eventType","payloadId","MagicPayloadMethod","configuration","isRNMobilePackage","email","showUI","redirectURI","overrides","lifespan","phoneNumber","handle","LoginWithSmsOTPEventEmit","otp","deviceCheckUI","DeviceVerificationEventEmit","LoginWithEmailOTPEventEmit","mfa","recoveryCode","credentialOrQueryString","credentialResolved","urlWithoutQuery","RecencyCheckEventEmit","UpdateEmailEventEmit","newEmail","cachedIsLoggedIn","isLoggedInResponse","scope","RecoveryFactorEventEmit","phone_number","RecoverAccountEventEmit","callback","EnableMFAEventEmit","totp","DisableMFAEventEmit","loggedOut","loginRequestPayload","loginRequest","config","address","transaction","LocalStorageKeys","provider","walletStatus","unsubscribeFromProviderEvents","status","walletType","userAddress","onRequestComplete","standardizedPayload","batchResponse","finalPayload","payloadOrMethod","onRequestCompleteOrParams","warning","testModePrefix","isThirdPartyWalletConnected","NftCheckoutIntermediaryEvents","rawTransaction","hash","_SDKBase","defaultEndpoint","controller","endpoint","parameters","batchData","batchIds","acknowledgeResponse","removeEventListener","deviceShare","removeResponseListener","handler","boundHandler","unsubscribe","firstPing","sendPing","allSources","prop","allDescriptors","sourceIndex","x","isPrototypeField","descriptor","init_es","applyOverlayStyles","elem","cssProperty","value","overlayStyles","checkForSameSrcInstances","parameters","iframe","require_localforage","er","import_localforage","memoryDriver","IframeController","Magic","init_es","__commonJSMin","exports","module","f","g","define","e","t","n","r","s","o","u","a","__require","i","l","_dereq_","global","Mutation","scheduleDrain","called","observer","nextTick","element","channel","scriptEl","draining","queue","oldQueue","len","immediate","task","INTERNAL","handlers","REJECTED","FULFILLED","PENDING","Promise","resolver","safelyResolveThenable","onRejected","onFulfilled","promise","unwrap","QueueItem","func","returnValue","self","result","tryCatch","getThen","thenable","error","obj","then","onError","onSuccess","tryToUnwrap","out","resolve","reject","reason","all","iterable","values","resolved","allResolver","resolveFromAll","outValue","race","response","_typeof","_classCallCheck","instance","Constructor","getIDB","idb","isIndexedDBValid","isSafari","hasFetch","createBlob","parts","properties","Builder","builder","Promise$1","executeCallback","callback","executeTwoCallbacks","errorCallback","normalizeKey","key","getCallback","DETECT_BLOB_SUPPORT_STORE","supportsBlobs","dbContexts","toString","READ_ONLY","READ_WRITE","_binStringToArrayBuffer","bin","length","buf","arr","_checkBlobSupportWithoutCaching","txn","blob","matchedChrome","matchedEdge","_checkBlobSupport","_deferReadiness","dbInfo","dbContext","deferredOperation","_advanceReadiness","_rejectReadiness","err","_getConnection","upgradeNeeded","createDbContext","dbArgs","openreq","db","ex","_getOriginalConnection","_getUpgradedConnection","_isUpgradeNeeded","defaultVersion","isNewStore","isDowngrade","isUpgrade","incVersion","_encodeBlob","reader","base64","_decodeBlob","encodedBlob","arrayBuff","_isEncodedBlob","_fullyReady","_tryReconnect","forages","forage","createTransaction","mode","retries","tx","_initStorage","options","initPromises","ignoreErrors","j","k","getItem","transaction","store","req","iterate","iterator","iterationNumber","cursor","setItem","blobSupport","removeItem","clear","advanced","keys","dropInstance","currentConfig","isCurrentDb","dbPromise","newVersion","dropObjectPromise","_forage2","dropDBPromise","_forage","asyncStorage","isWebSQLValid","BASE_CHARS","BLOB_TYPE_PREFIX","BLOB_TYPE_PREFIX_REGEX","SERIALIZED_MARKER","SERIALIZED_MARKER_LENGTH","TYPE_ARRAYBUFFER","TYPE_BLOB","TYPE_INT8ARRAY","TYPE_UINT8ARRAY","TYPE_UINT8CLAMPEDARRAY","TYPE_INT16ARRAY","TYPE_INT32ARRAY","TYPE_UINT16ARRAY","TYPE_UINT32ARRAY","TYPE_FLOAT32ARRAY","TYPE_FLOAT64ARRAY","TYPE_SERIALIZED_MARKER_LENGTH","toString$1","stringToBuffer","serializedString","bufferLength","p","encoded1","encoded2","encoded3","encoded4","buffer","bytes","bufferToString","base64String","serialize","valueType","marker","fileReader","str","deserialize","type","blobType","matcher","localforageSerializer","createDbTable","_initStorage$1","dbInfoPromise","tryExecuteSql","sqlStatement","args","results","getItem$1","iterate$1","rows","item","_setItem","retriesLeft","originalValue","sqlError","setItem$1","removeItem$1","clear$1","length$1","key$1","keys$1","getAllStoreNames","storeNames","dropInstance$1","operationInfo","dropTable","storeName","operations","webSQLStorage","isLocalStorageValid","_getKeyPrefix","defaultConfig","keyPrefix","checkIfLocalStorageThrows","localStorageTestKey","_isLocalStorageUsable","_initStorage$2","clear$2","getItem$2","iterate$2","keyPrefixLength","key$2","keys$2","itemKey","length$2","removeItem$2","setItem$2","dropInstance$2","localStorageWrapper","sameValue","x","y","includes","array","searchElement","isArray","arg","DefinedDrivers","DriverSupport","DefaultDrivers","DefaultDriverOrder","OptionalDriverMethods","LibraryMethods","DefaultConfig","callWhenReady","localForageInstance","libraryMethod","_args","extend","_key","LocalForage","driverTypeKey","driver","driverName","driverObject","complianceError","driverMethods","driverMethodName","isRequired","configureMissingMethods","methodNotImplementedFactory","methodName","_i","_len","optionalDriverMethod","setDriverSupport","support","getDriverPromise","serializerPromise","drivers","supportedDrivers","setDriverToConfig","extendSelfWithDriver","initDriver","currentDriverIndex","driverPromiseLoop","oldDriverSetDone","libraryMethodsAndProperties","localforage_js","Je","me","_","_driver","O","v","clone","e_1","_a","temp","_b","__values","_c","e_1_1","getKeyPrefix","dropInstanceCommon","_this","normaliseKey","serialiser","stores","Store","kp","idx","opts","_options","_cb","outPromise","key$","keys$","value$","_support","oe","re","h","A","E","N","H","X","Q","ee","$e","qe","ViewController","createURL","onload","createDuplicateIframeWarning","event","MagicIncomingWindowMessage","handler","data","createModalNotReadyError","createSDK","SDKBase","lf","pe","localForage","Te","es_exports","r","AlgorandExtension","init_es","Extension","algorandConfig","txn","txns","exports","module","r","D","D2","X","Y","I","x","h","y","p","k","x2","u","m","b","z","sn","h2","r2","r3","r4","r5","r6","r7","r8","r9","g","f","v","q","j","A","Z","M","b2","b3","S","K","L","crypto","ICON","LogLevel","import_store","import_algosdk","NetworkId","WalletId","ScopeType","algosdk","import_algosdk","import_algosdk","name","icons","description","algosdk","ICON","ICON","import_algosdk","ICON","algosdk","import_algosdk","module","algosdk","ICON","import_algosdk","ICON","algosdk","ICON","import_algosdk","ICON","algosdk","wallet","import_algosdk","ICON","module","algosdk","import_algosdk","ICON","algosdk","import_algosdk","b","algosdk","ICON","import_algosdk","ICON","algosdk","import_algosdk","ICON","algosdk","ICON","p","import_algosdk","algosdk","ICON","algosdk","import_algosdk","ICON","algosdk","algosdk","algosdk"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/@magic-sdk+types@24.22.0/node_modules/@magic-sdk/types/src/core/exception-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.22.0/node_modules/@magic-sdk/types/src/core/json-rpc-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.22.0/node_modules/@magic-sdk/types/src/core/message-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.22.0/node_modules/@magic-sdk/types/src/core/deep-link-pages.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.22.0/node_modules/@magic-sdk/types/src/modules/auth-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.22.0/node_modules/@magic-sdk/types/src/modules/rpc-provider-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.22.0/node_modules/@magic-sdk/types/src/modules/user-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.22.0/node_modules/@magic-sdk/types/src/modules/nft-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.22.0/node_modules/@magic-sdk/types/src/modules/wallet-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.22.0/node_modules/@magic-sdk/types/src/modules/common-types.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/node_modules/eventemitter3/index.js","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/semver.js","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/base64-json.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/core/sdk-exceptions.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/type-guards.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/core/sdk-environment.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/auth.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/base-module.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/core/json-rpc.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/get-payload-id.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/storage.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/uuid.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/web-crypto.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/promise-tools.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/events.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/version-check.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/user.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/device-share-web-crypto.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/url.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/wallet.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/third-party-wallets.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/rpc-provider.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/nft.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/core/sdk.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/core/view-controller.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/view-controller-utils.ts","../../../node_modules/.pnpm/@magic-sdk+provider@29.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/base-extension.ts","../../../node_modules/.pnpm/@magic-sdk+commons@25.4.2_@magic-sdk+provider@29.5.0_localforage@1.10.0__@magic-sdk+types@24.22.0/node_modules/@magic-sdk/commons/src/index.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/magic-sdk/node_modules/localforage/dist/localforage.js","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/src/_driver.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/node_modules/localforage-driver-commons/_bundle/fesm5.js","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/src/Store.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/src/_initStorage.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/src/clear.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/src/dropInstance.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/src/getItem.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/src/iterate.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/src/key.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/src/keys.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/src/length.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/src/removeItem.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/src/setItem.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/src/index.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/magic-sdk/src/index.ts","../../../node_modules/.pnpm/magic-sdk@29.4.2/node_modules/magic-sdk/src/iframe-controller.ts","../../../node_modules/.pnpm/@magic-ext+algorand@24.4.2/node_modules/@magic-ext/algorand/src/index.ts","../../../node_modules/.pnpm/tweetnacl@1.0.3/node_modules/tweetnacl/nacl-fast.js","../src/index.ts","../src/logger.ts","../src/manager.ts","../src/network.ts","../src/storage.ts","../src/store.ts","../src/wallets/types.ts","../src/utils.ts","../src/wallets/walletconnect.ts","../src/wallets/base.ts","../src/wallets/skins.ts","../src/wallets/biatec.ts","../src/wallets/custom.ts","../src/wallets/defly.ts","../src/wallets/avm-web-provider.ts","../src/wallets/defly-web.ts","../src/wallets/exodus.ts","../src/wallets/kibisis.ts","../src/wallets/kmd.ts","../src/wallets/lute.ts","../src/wallets/magic.ts","../src/wallets/liquid-evm-base.ts","../src/wallets/metamask.ts","../src/wallets/mnemonic.ts","../src/wallets/pera.ts","../src/wallets/rainbow.ts","../src/wallets/web3auth.ts","../src/secure-key.ts","../src/wallets/w3wallet.ts","../src/webpack.ts"],"sourcesContent":["export enum SDKErrorCode {\n MissingApiKey = 'MISSING_API_KEY',\n ModalNotReady = 'MODAL_NOT_READY',\n ConnectionLost = 'CONNECTION_WAS_LOST',\n MalformedResponse = 'MALFORMED_RESPONSE',\n InvalidArgument = 'INVALID_ARGUMENT',\n ExtensionNotInitialized = 'EXTENSION_NOT_INITIALIZED',\n IncompatibleExtensions = 'INCOMPATIBLE_EXTENSIONS',\n}\n\nexport enum SDKWarningCode {\n SyncWeb3Method = 'SYNC_WEB3_METHOD',\n DuplicateIframe = 'DUPLICATE_IFRAME',\n ReactNativeEndpointConfiguration = 'REACT_NATIVE_ENDPOINT_CONFIGURATION',\n DeprecationNotice = 'DEPRECATION_NOTICE',\n ProductAnnouncement = 'ANNOUNCEMENT',\n}\n\nexport enum RPCErrorCode {\n // Standard JSON RPC 2.0 Error Codes\n ParseError = -32700,\n InvalidRequest = -32600,\n MethodNotFound = -32601,\n InvalidParams = -32602,\n InternalError = -32603,\n\n // Custom RPC Error Codes\n MagicLinkFailedVerification = -10000,\n MagicLinkExpired = -10001,\n MagicLinkRateLimited = -10002,\n MagicLinkInvalidRedirectURL = -10006,\n UserAlreadyLoggedIn = -10003,\n UpdateEmailFailed = -10004,\n UserRequestEditEmail = -10005,\n InactiveRecipient = -10010,\n AccessDeniedToUser = -10011,\n RedirectLoginComplete = -10015,\n DpopInvalidated = -10019,\n}\n\nexport type ErrorCode = SDKErrorCode | RPCErrorCode;\nexport type WarningCode = SDKWarningCode;\n","import { RPCErrorCode } from './exception-types';\n\n// --- Request interfaces\n\nexport interface JsonRpcRequestPayload<TParams = any> {\n jsonrpc: string;\n id: string | number | null;\n method: string;\n params?: TParams;\n}\n\nexport interface JsonRpcRequestCallback {\n /** Callback executed upon JSON RPC response. */\n (err: JsonRpcError | null, result?: JsonRpcResponsePayload | null): void;\n}\n\nexport interface JsonRpcBatchRequestCallback {\n /** Callback executed upon JSON RPC response. */\n (err: JsonRpcError | null, result?: (JsonRpcResponsePayload | null)[] | null): void;\n}\n\n// --- Response interfaces\n\nexport interface JsonRpcError {\n message: string;\n code: RPCErrorCode;\n data?: any;\n}\n\nexport interface JsonRpcResponsePayload<ResultType = any> {\n jsonrpc: string;\n id: string | number | null;\n result?: ResultType | null;\n error?: JsonRpcError | null;\n}\n\nexport interface UserInfo {\n email?: string;\n}\n\nexport type ShowUIPromiEvents = {\n disconnect: () => void;\n};\n\nexport interface WalletInfo {\n walletType: string;\n}\n\nexport interface RequestUserInfoScope {\n scope?: {\n email?: 'required' | 'optional';\n };\n}\n\nexport enum LocalStorageKeys {\n PROVIDER = 'magic_3pw_provider',\n ADDRESS = 'magic_3pw_address',\n CHAIN_ID = 'magic_3pw_chainId',\n}\n\nexport enum ThirdPartyWalletEvents {\n WalletConnected = 'wallet_connected',\n WalletRejected = 'wallet_rejected',\n Web3ModalSelected = 'web3modal_selected',\n}\n\nexport interface ConnectWithUIOptions {\n autoPromptThirdPartyWallets?: boolean;\n}\n\nexport type ConnectWithUiEvents = {\n 'id-token-created': (params: { idToken: string }) => void;\n} & { [key in ThirdPartyWalletEvents]: () => void };\n\n// --- Payload methods\n\n/**\n * Enum of JSON RPC methods for interacting with the Magic SDK authentication\n * relayer.\n */\nexport enum MagicPayloadMethod {\n LoginWithSms = 'magic_auth_login_with_sms',\n LoginWithEmailOTP = 'magic_auth_login_with_email_otp',\n LoginWithMagicLink = 'magic_auth_login_with_magic_link',\n LoginWithCredential = 'magic_auth_login_with_credential',\n SetAuthorizationToken = 'magic_auth_set_authorization_token',\n GetIdToken = 'magic_auth_get_id_token',\n GenerateIdToken = 'magic_auth_generate_id_token',\n GetMetadata = 'magic_auth_get_metadata',\n IsLoggedIn = 'magic_is_logged_in',\n Logout = 'magic_auth_logout',\n UpdateEmail = 'magic_auth_update_email',\n UserSettings = 'magic_auth_settings',\n UserSettingsTestMode = 'magic_auth_settings_testing_mode',\n LoginWithSmsTestMode = 'magic_auth_login_with_sms_testing_mode',\n LoginWithEmailOTPTestMode = 'magic_auth_login_with_email_otp_testing_mode',\n LoginWithMagicLinkTestMode = 'magic_login_with_magic_link_testing_mode',\n LoginWithCredentialTestMode = 'magic_auth_login_with_credential_testing_mode',\n GetIdTokenTestMode = 'magic_auth_get_id_token_testing_mode',\n GenerateIdTokenTestMode = 'magic_auth_generate_id_token_testing_mode',\n GetMetadataTestMode = 'magic_auth_get_metadata_testing_mode',\n IsLoggedInTestMode = 'magic_auth_is_logged_in_testing_mode',\n LogoutTestMode = 'magic_auth_logout_testing_mode',\n UpdateEmailTestMode = 'magic_auth_update_email_testing_mode',\n IntermediaryEvent = 'magic_intermediary_event',\n RequestAccounts = 'eth_requestAccounts',\n GetInfo = 'magic_get_info',\n ShowUI = 'magic_wallet',\n NFTPurchase = 'magic_nft_purchase',\n NFTCheckout = 'magic_nft_checkout',\n NFTTransfer = 'magic_nft_transfer',\n RequestUserInfoWithUI = 'mc_request_user_info',\n Disconnect = 'mc_disconnect',\n // UpdatePhoneNumber = 'magic_auth_update_phone_number',\n // UpdatePhoneNumberTestMode = 'magic_auth_update_phone_number_testing_mode',\n RecoverAccount = 'magic_auth_recover_account',\n RecoverAccountTestMode = 'magic_auth_recover_account_testing_mode',\n MagicBoxHeartBeat = 'magic_box_heart_beat',\n AutoConnect = 'mc_auto_connect',\n Login = 'mc_login',\n EncryptV1 = 'magic_auth_encrypt_v1',\n DecryptV1 = 'magic_auth_decrypt_v1',\n ShowNFTs = 'magic_show_nfts',\n ShowOnRamp = 'magic_show_fiat_onramp',\n ShowSendTokensUI = 'magic_show_send_tokens_ui',\n ShowAddress = 'magic_show_address',\n ShowBalances = 'magic_show_balances',\n SendGaslessTransaction = 'eth_sendGaslessTransaction',\n RevealPK = 'magic_reveal_key',\n EnableMFA = 'magic_auth_enable_mfa_flow',\n DisableMFA = 'magic_auth_disable_mfa_flow',\n GetMultichainPublicAddress = 'magic_get_multichain_public_address',\n}\n\n// Methods to not route if connected to third party wallet\nexport const routeToMagicMethods = [\n MagicPayloadMethod.IntermediaryEvent,\n MagicPayloadMethod.NFTCheckout,\n MagicPayloadMethod.Login,\n];\n","import { JsonRpcResponsePayload, JsonRpcError, JsonRpcRequestPayload } from './json-rpc-types';\n\nexport enum MagicIncomingWindowMessage {\n MAGIC_HANDLE_RESPONSE = 'MAGIC_HANDLE_RESPONSE',\n MAGIC_OVERLAY_READY = 'MAGIC_OVERLAY_READY',\n MAGIC_SHOW_OVERLAY = 'MAGIC_SHOW_OVERLAY',\n MAGIC_HIDE_OVERLAY = 'MAGIC_HIDE_OVERLAY',\n MAGIC_HANDLE_EVENT = 'MAGIC_HANDLE_EVENT',\n MAGIC_MG_BOX_SEND_RECEIPT = 'MAGIC_MG_BOX_SEND_RECEIPT',\n MAGIC_SEND_PRODUCT_ANNOUNCEMENT = 'MAGIC_SEND_PRODUCT_ANNOUNCEMENT',\n MAGIC_PONG = 'MAGIC_PONG',\n MAGIC_POPUP_RESPONSE = 'MAGIC_POPUP_RESPONSE',\n MAGIC_POPUP_OAUTH_VERIFY_RESPONSE = 'MAGIC_POPUP_OAUTH_VERIFY_RESPONSE',\n}\n\nexport enum MagicOutgoingWindowMessage {\n MAGIC_HANDLE_REQUEST = 'MAGIC_HANDLE_REQUEST',\n MAGIC_PING = 'MAGIC_PING',\n}\n\n/** The shape of responding window message datas from the Magic iframe context. */\nexport interface MagicMessageRequest {\n msgType: string;\n payload: JsonRpcRequestPayload | JsonRpcRequestPayload[];\n rt?: string;\n jwt?: string;\n deviceShare?: string;\n}\n\n/** The shape of responding window message datas from the Magic iframe context. */\nexport interface MagicMessageResponse<ResultType = any> {\n msgType: string;\n response: Partial<JsonRpcError> & Partial<JsonRpcResponsePayload<ResultType>>;\n rt?: string;\n deviceShare?: string;\n}\n\n/** The expected message event returned by the Magic iframe context. */\nexport interface MagicMessageEvent extends Partial<MessageEvent> {\n data: MagicMessageResponse;\n}\n","export enum DeepLinkPage {\n UpdateEmail = 'update-email',\n MFA = 'mfa',\n Recovery = 'recovery',\n}\n","import { WalletEventOnReceived } from './wallet-types';\n\nexport interface LoginWithMagicLinkConfiguration {\n /**\n * The email address of the user attempting to login.\n */\n email: string;\n\n /**\n * When `true`, a pre-built modal interface will show to the user, directing\n * them to check their email for the \"magic link\" to complete their\n * authentication.\n */\n showUI?: boolean;\n\n /**\n * You can optionally provide a redirect URI that will be followed at the end\n * of the magic link flow. Don't forget to invoke\n * `magic.auth.loginWithCredential()` to complete the login from the route you\n * configure here.\n */\n redirectURI?: string;\n\n /**\n * Enterprise users with a custom SMTP can create custom email templates\n * from their dashboard. The default Magic loginWithMagicLink email will be\n * overridden when a variation is passed here.\n */\n overrides?: {\n variation?: string;\n };\n\n /**\n * The number of seconds until the generated Decenteralized ID token will expire.\n */\n lifespan?: number;\n}\n\nexport interface LoginWithSmsConfiguration {\n /**\n * Specify the phone number of the user attempting to login.\n */\n phoneNumber: string;\n\n /**\n * When `true`, a pre-built modal interface will show to the user, directing\n * them to check their SMS for the one time passcode (OTP) to complete their\n * authentication.\n *\n * When `false`, developers will be able to implement their own custom UI to\n * continue the SMS OTP flow.\n */\n showUI?: boolean;\n\n /*\n * The number of seconds until the generated Decenteralized ID token will expire.\n */\n lifespan?: number;\n}\nexport interface LoginWithEmailOTPConfiguration {\n /**\n * Specify the email address of the user attempting to login.\n */\n email: string;\n\n /**\n * When `true`, a pre-built modal interface will show to the user, directing\n * them to check their email for the one time passcode (OTP) to complete their\n * authentication.\n *\n * When `false`, developers will be able to implement their own custom UI to\n * continue the email OTP flow.\n */\n showUI?: boolean;\n\n /**\n * Device Unrecognized UI will enforce showing up to secure user's login\n *\n * When set to true (default), an improved device recognition UI will be displayed to the user,\n * prompting them to verify their login by checking their email for device approval. This feature\n * enhances authentication security.\n *\n * This param will only be affect if showUI is false. When set to false,\n * developers have the flexibility to implement their own customized UI to\n * handle device check events, providing a more tailored user experience.\n */\n deviceCheckUI?: boolean;\n\n /**\n * Enterprise users with a custom SMTP can create custom email templates\n * from their dashboard. The default Magic loginWithOTP email will be\n * overridden when a variation is passed here.\n */\n overrides?: {\n variation?: string;\n };\n\n /**\n * The number of seconds until the generated Decenteralized ID token will expire.\n */\n lifespan?: number;\n}\n\nexport interface LoginWithCredentialConfiguration {\n /**\n * A credential token or a valid query string (prefixed with ? or #)\n */\n credentialOrQueryString?: string;\n\n /**\n * The number of seconds until the generated Decenteralized ID token will expire.\n */\n lifespan?: number;\n}\n\nexport interface EnableMFAConfiguration {\n /**\n * When `true`, a pre-built modal interface will show to the user, directing\n * them to enable MFA usign Google Authenticator app.\n *\n * When `false`, developers will be able to implement their own custom UI to\n * continue the enable MFA flow.\n */\n showUI?: boolean;\n}\n\nexport interface DisableMFAConfiguration {\n /**\n * When `true`, a pre-built modal interface will show to the user, directing\n * them to disable MFA.\n *\n * When `false`, developers will be able to implement their own custom UI to\n * continue the disable MFA flow.\n */\n showUI?: boolean;\n}\n\n/**\n * Auth Events Enum\n */\nexport enum LoginWithMagicLinkEventEmit {\n Retry = 'retry',\n}\n\nexport enum LoginWithMagicLinkEventOnReceived {\n EmailSent = 'email-sent',\n EmailNotDeliverable = 'email-not-deliverable',\n}\n\nexport enum LoginWithEmailOTPEventEmit {\n VerifyEmailOtp = 'verify-email-otp',\n VerifyMFACode = 'verify-mfa-code',\n LostDevice = 'lost-device',\n VerifyRecoveryCode = 'verify-recovery-code',\n Cancel = 'cancel',\n}\n\nexport enum LoginWithSmsOTPEventEmit {\n VerifySmsOtp = 'verify-sms-otp',\n Cancel = 'cancel',\n Retry = 'retry',\n}\n\nexport enum LoginWithSmsOTPEventOnReceived {\n SmsOTPSent = 'sms-otp-sent',\n InvalidSmsOtp = 'invalid-sms-otp',\n ExpiredSmsOtp = 'expired-sms-otp',\n}\n\nexport enum LoginWithEmailOTPEventOnReceived {\n EmailOTPSent = 'email-otp-sent',\n InvalidEmailOtp = 'invalid-email-otp',\n InvalidMfaOtp = 'invalid-mfa-otp',\n ExpiredEmailOtp = 'expired-email-otp',\n MfaSentHandle = 'mfa-sent-handle',\n RecoveryCodeSentHandle = 'recovery-code-sent-handle',\n InvalidRecoveryCode = 'invalid-recovery-code',\n RecoveryCodeSuccess = 'recovery-code-success',\n LoginThrottled = 'login-throttled',\n}\n\nexport enum DeviceVerificationEventEmit {\n Retry = 'device-retry',\n}\n\nexport enum DeviceVerificationEventOnReceived {\n DeviceApproved = 'device-approved',\n DeviceNeedsApproval = 'device-needs-approval',\n DeviceVerificationLinkExpired = 'device-verification-link-expired',\n DeviceVerificationEmailSent = 'device-verification-email-sent',\n}\n\nexport enum RecencyCheckEventEmit {\n Retry = 'Recency/auth-factor-retry',\n Cancel = 'Recency/auth-factor-verification-cancel',\n VerifyEmailOtp = 'Recency/auth-factor-verify-email-otp',\n VerifyMFACode = 'Recency/verify-mfa-code',\n}\n\nexport enum RecencyCheckEventOnReceived {\n PrimaryAuthFactorNeedsVerification = 'Recency/auth-factor-needs-verification',\n PrimaryAuthFactorVerified = 'Recency/auth-factor-verified',\n InvalidEmailOtp = 'Recency/auth-factor-invalid-email-otp',\n EmailExpired = 'Recency/auth-factor-verification-email-expired',\n EmailSent = 'Recency/auth-factor-verification-email-sent',\n EmailNotDeliverable = 'Recency/auth-factor-verification-email-not-deliverable',\n}\n\nexport enum UpdateEmailEventEmit {\n RetryWithNewEmail = 'UpdateEmail/retry-with-new-email',\n Cancel = 'UpdateEmail/new-email-verification-cancel',\n VerifyEmailOtp = 'UpdateEmail/new-email-verify-otp',\n}\n\nexport enum UpdateEmailEventOnReceived {\n NewAuthFactorNeedsVerification = 'UpdateEmail/new-email-needs-verification',\n EmailUpdated = 'UpdateEmail/email-updated',\n InvalidEmailOtp = 'UpdateEmail/new-email-invalid-email-otp',\n EmailExpired = 'UpdateEmail/new-email-verification-email-expired',\n EmailSent = 'UpdateEmail/new-email-verification-email-sent',\n EmailNotDeliverable = 'UpdateEmail/new-email-verification-email-not-deliverable',\n InvalidEmail = 'UpdateEmail/new-email-invalid',\n EmailAlreadyExists = 'UpdateEmail/new-email-already-exists',\n}\n\nexport enum AuthEventOnReceived {\n IDTokenCreated = 'Auth/id-token-created',\n}\n\nexport enum FarcasterLoginEventEmit {\n Cancel = 'Farcaster/cancel',\n}\n\nexport enum EnableMFAEventOnReceived {\n MFASecretGenerated = 'mfa-secret-generated',\n InvalidMFAOtp = 'invalid-mfa-otp',\n MFARecoveryCodes = 'mfa-recovery-codes',\n}\nexport enum EnableMFAEventEmit {\n VerifyMFACode = 'verify-mfa-code',\n Cancel = 'cancel-mfa-setup',\n}\n\nexport enum DisableMFAEventOnReceived {\n MFACodeRequested = 'mfa-code-requested',\n InvalidMFAOtp = 'invalid-mfa-otp',\n InvalidRecoveryCode = 'invalid-recovery-code',\n}\n\nexport enum DisableMFAEventEmit {\n VerifyMFACode = 'verify-mfa-code',\n LostDevice = 'lost-device',\n Cancel = 'cancel-mfa-disable',\n}\n\n/**\n * EventHandlers\n */\nexport type LoginWithMagicLinkEventHandlers = {\n // Event Received\n [LoginWithMagicLinkEventOnReceived.EmailSent]: () => void;\n [LoginWithMagicLinkEventOnReceived.EmailNotDeliverable]: () => void;\n\n // Event sent\n [LoginWithMagicLinkEventEmit.Retry]: () => void;\n} & DeviceVerificationEventHandlers;\n\nexport type LoginWithSmsOTPEventHandlers = {\n // Event sent\n [LoginWithSmsOTPEventEmit.VerifySmsOtp]: (otp: string) => void;\n [LoginWithSmsOTPEventEmit.Cancel]: () => void;\n [LoginWithSmsOTPEventEmit.Retry]: () => void;\n\n // Event received\n [LoginWithSmsOTPEventOnReceived.SmsOTPSent]: () => void;\n [LoginWithSmsOTPEventOnReceived.InvalidSmsOtp]: () => void;\n [LoginWithSmsOTPEventOnReceived.ExpiredSmsOtp]: () => void;\n} & DeviceVerificationEventHandlers;\n\nexport type LoginWithEmailOTPEventHandlers = {\n // Event Received\n [LoginWithEmailOTPEventOnReceived.EmailOTPSent]: () => void;\n [LoginWithEmailOTPEventOnReceived.LoginThrottled]: () => void;\n [LoginWithEmailOTPEventOnReceived.InvalidEmailOtp]: () => void;\n [LoginWithEmailOTPEventOnReceived.InvalidMfaOtp]: () => void;\n [LoginWithEmailOTPEventOnReceived.ExpiredEmailOtp]: () => void;\n [LoginWithEmailOTPEventOnReceived.MfaSentHandle]: () => void;\n [LoginWithEmailOTPEventOnReceived.RecoveryCodeSentHandle]: () => void;\n [LoginWithEmailOTPEventOnReceived.InvalidRecoveryCode]: () => void;\n [LoginWithEmailOTPEventOnReceived.RecoveryCodeSuccess]: () => void;\n [AuthEventOnReceived.IDTokenCreated]: (idToken: string) => void;\n [WalletEventOnReceived.WalletInfoFetched]: () => void;\n\n // Event sent\n [LoginWithEmailOTPEventEmit.VerifyEmailOtp]: (otp: string) => void;\n [LoginWithEmailOTPEventEmit.VerifyMFACode]: (mfa: string) => void;\n [LoginWithEmailOTPEventEmit.LostDevice]: () => void;\n [LoginWithEmailOTPEventEmit.VerifyRecoveryCode]: (recoveryCode: string) => void;\n [LoginWithEmailOTPEventEmit.Cancel]: () => void;\n} & DeviceVerificationEventHandlers;\n\ntype DeviceVerificationEventHandlers = {\n // Event Received\n [DeviceVerificationEventOnReceived.DeviceNeedsApproval]: () => void;\n [DeviceVerificationEventOnReceived.DeviceVerificationEmailSent]: () => void;\n [DeviceVerificationEventOnReceived.DeviceVerificationLinkExpired]: () => void;\n [DeviceVerificationEventOnReceived.DeviceApproved]: () => void;\n\n // Event sent\n [DeviceVerificationEventEmit.Retry]: () => void;\n};\n\n/**\n * Update Email\n */\n\nexport type RecencyCheckEventHandlers = {\n [RecencyCheckEventOnReceived.PrimaryAuthFactorNeedsVerification]: () => void;\n [RecencyCheckEventOnReceived.PrimaryAuthFactorVerified]: () => void;\n [RecencyCheckEventOnReceived.InvalidEmailOtp]: () => void;\n [RecencyCheckEventOnReceived.EmailNotDeliverable]: () => void;\n [RecencyCheckEventOnReceived.EmailExpired]: () => void;\n [RecencyCheckEventOnReceived.EmailSent]: () => void;\n\n [RecencyCheckEventEmit.Cancel]: () => void;\n [RecencyCheckEventEmit.Retry]: () => void;\n [RecencyCheckEventEmit.VerifyEmailOtp]: (otp: string) => void;\n [RecencyCheckEventEmit.VerifyMFACode]: (mfa: string) => void;\n};\n\nexport type UpdateEmailEventHandlers = {\n [UpdateEmailEventOnReceived.NewAuthFactorNeedsVerification]: () => void;\n [UpdateEmailEventOnReceived.EmailUpdated]: () => void;\n [UpdateEmailEventOnReceived.InvalidEmailOtp]: () => void;\n [UpdateEmailEventOnReceived.EmailNotDeliverable]: () => void;\n [UpdateEmailEventOnReceived.EmailExpired]: () => void;\n [UpdateEmailEventOnReceived.EmailSent]: () => void;\n [UpdateEmailEventOnReceived.InvalidEmail]: () => void;\n [UpdateEmailEventOnReceived.EmailAlreadyExists]: () => void;\n\n [UpdateEmailEventEmit.Cancel]: () => void;\n [UpdateEmailEventEmit.RetryWithNewEmail]: (email?: string) => void;\n [UpdateEmailEventEmit.VerifyEmailOtp]: (otp: string) => void;\n} & RecencyCheckEventHandlers;\n\n/**\n * Enable MFA\n */\n\nexport type EnableMFAEventHandlers = {\n // Event Received\n [EnableMFAEventOnReceived.MFASecretGenerated]: ({ QRCode, key }: { QRCode: string; key: string }) => void;\n [EnableMFAEventOnReceived.InvalidMFAOtp]: ({ errorCode }: { errorCode: string }) => void;\n [EnableMFAEventOnReceived.MFARecoveryCodes]: ({ recoveryCode }: { recoveryCode: string }) => void;\n\n // Event sent\n [EnableMFAEventEmit.VerifyMFACode]: (totp: string) => void;\n [EnableMFAEventEmit.Cancel]: () => void;\n};\n\n/**\n * Disable MFA\n */\n\nexport type DisableMFAEventHandlers = {\n // Event Received\n [DisableMFAEventOnReceived.MFACodeRequested]: () => void;\n [DisableMFAEventOnReceived.InvalidMFAOtp]: ({ errorCode }: { errorCode: string }) => void;\n [DisableMFAEventOnReceived.InvalidRecoveryCode]: () => void;\n\n // Event sent\n [DisableMFAEventEmit.VerifyMFACode]: (totp: string) => void;\n [DisableMFAEventEmit.LostDevice]: (recoveryCode: string) => void;\n [DisableMFAEventEmit.Cancel]: () => void;\n};\n","export type EthNetworkName = 'mainnet' | 'goerli' | 'sepolia';\n\nexport enum EthChainType {\n Harmony = 'HARMONY',\n}\n\nexport interface CustomNodeConfiguration {\n rpcUrl: string;\n chainId?: number;\n chainType?: EthChainType;\n}\n\nexport type EthNetworkConfiguration = EthNetworkName | CustomNodeConfiguration;\n\nexport type ProviderEnableEvents = {\n 'id-token-created': (params: { idToken: string }) => void;\n};\n","import { RecencyCheckEventHandlers } from './auth-types';\nimport { DeepLinkPage } from '../core/deep-link-pages';\n\nexport interface GetIdTokenConfiguration {\n /**\n * The number of seconds until the generated ID token will expire.\n */\n lifespan?: number;\n}\n\nexport interface GenerateIdTokenConfiguration extends GetIdTokenConfiguration {\n /**\n * An optional piece of data to sign with the token. Note, however, that the\n * unsigned data _will not_ be encoded in the token, only an encrypted\n * signature of the data.\n */\n attachment?: string;\n}\n\nexport enum UserEventsEmit {\n ClosedByUser = 'closed-by-user',\n}\n\nexport enum UserEventsOnReceived {\n ClosedByUser = 'closed-by-user-on-received',\n}\n\nexport interface MagicUserMetadata {\n issuer: string | null;\n publicAddress: string | null;\n email: string | null;\n phoneNumber: string | null;\n isMfaEnabled: boolean;\n recoveryFactors: [RecoveryFactor] | [];\n walletType: string;\n firstLoginAt: string | null;\n}\n\nexport enum RecoveryFactorEventOnReceived {\n EnterNewPhoneNumber = 'enter-new-phone-number',\n EnterOtpCode = 'enter-otp-code',\n RecoveryFactorAlreadyExists = 'recovery-factor-already-exists',\n MalformedPhoneNumber = 'malformed-phone-number',\n InvalidOtpCode = 'invalid-otp-code',\n RecoveryFactorUpdated = 'recovery-factor-updated',\n RecoveryFactorDeleted = 'recovery-factor-deleted',\n}\n\nexport enum RecoveryFactorEventEmit {\n SendNewPhoneNumber = 'send-new-phone-number',\n SendOtpCode = 'send-otp-code',\n Cancel = 'cancel',\n StartEditPhoneNumber = 'start-edit-phone-number',\n}\n\ntype RecoveryFactor = {\n type: RecoveryMethodType;\n value: string;\n};\n\nexport type RecoveryFactorEventHandlers = {\n // Event Received\n [RecoveryFactorEventEmit.SendNewPhoneNumber]: (phone_number: string) => void;\n [RecoveryFactorEventEmit.SendOtpCode]: (otp: string) => void;\n [RecoveryFactorEventEmit.StartEditPhoneNumber]: () => void;\n [RecoveryFactorEventEmit.Cancel]: () => void;\n\n // Event sent\n [RecoveryFactorEventOnReceived.EnterNewPhoneNumber]: () => void;\n [RecoveryFactorEventOnReceived.EnterOtpCode]: () => void;\n [RecoveryFactorEventOnReceived.RecoveryFactorAlreadyExists]: () => void;\n [RecoveryFactorEventOnReceived.MalformedPhoneNumber]: () => void;\n [RecoveryFactorEventOnReceived.InvalidOtpCode]: () => void;\n [RecoveryFactorEventOnReceived.RecoveryFactorUpdated]: (updatedFactor: { type: string, value: string }) => void;\n [RecoveryFactorEventOnReceived.RecoveryFactorDeleted]: () => void;\n} & RecencyCheckEventHandlers;\n\nexport enum RecoveryMethodType {\n PhoneNumber = 'phone_number',\n}\n\nexport interface UpdateEmailConfiguration {\n /**\n * The new email address to update to\n */\n email: string;\n\n /**\n * When `true`, a pre-built pending modal interface will\n * guide the user to check their new, followed by old emails\n * for confirmation emails.\n */\n showUI?: boolean;\n}\n\nexport interface UpdateWebAuthnInfoConfiguration {\n /**\n * WebAuthn info id\n */\n id: string;\n\n /**\n * nickname that user attempts to update to the webauth device associate to the id.\n */\n nickname: string;\n}\n\nexport interface RecoverAccountConfiguration {\n /**\n * The email to recover\n */\n email: string;\n showUI: boolean;\n}\n\nexport interface ShowSettingsConfiguration {\n /**\n * deep linking destination\n */\n page: DeepLinkPage;\n showUI?: boolean;\n}\n\nexport enum RecoverAccountEventOnReceived {\n SmsOtpSent = 'sms-otp-sent',\n LoginThrottled = 'login-throttled',\n InvalidSmsOtp = 'invalid-sms-otp',\n SmsVerified = 'sms-verified',\n AccountRecovered = 'account-recovered',\n UpdateEmailRequired = 'update-email-required',\n}\n\nexport enum RecoverAccountEventEmit {\n Cancel = 'cancel',\n VerifyOtp = 'verify-otp-code',\n ResendSms = 'resend-sms-otp',\n UpdateEmail = 'update-email',\n}\n\nexport type RecoverAccountEventHandlers = {\n // Event Received\n [RecoverAccountEventEmit.Cancel]: () => void;\n [RecoverAccountEventEmit.VerifyOtp]: (otp: string) => void;\n [RecoverAccountEventEmit.ResendSms]: () => void;\n [RecoverAccountEventEmit.UpdateEmail]: (email: string) => void;\n\n // Event sent\n [RecoverAccountEventOnReceived.SmsOtpSent]: ({ phoneNumber }: { phoneNumber: string }) => void;\n [RecoverAccountEventOnReceived.LoginThrottled]: (error: string) => void;\n [RecoverAccountEventOnReceived.InvalidSmsOtp]: ({\n errorMessage,\n errorCode,\n }: {\n errorMessage: string;\n errorCode: string;\n }) => void;\n [RecoverAccountEventOnReceived.SmsVerified]: () => void;\n [RecoverAccountEventOnReceived.AccountRecovered]: () => void;\n [RecoverAccountEventOnReceived.UpdateEmailRequired]: () => void;\n};\n","export type NFTResponseStatus = 'cancelled' | 'pending' | 'processed' | 'declined' | 'expired';\n\nexport type NFTResponse = {\n status: NFTResponseStatus;\n};\n\nexport interface NFTPurchaseRequest {\n nft: {\n name: string;\n imageUrl: string;\n blockchainNftId: string;\n contractAddress: string;\n network: string;\n platform: string;\n type: string;\n };\n identityPrefill: {\n firstName: string;\n lastName: string;\n dateOfBirth: string; // YYYY-MM-DD\n emailAddress: string;\n phone: string;\n address: {\n street1: string;\n street2: string;\n city: string;\n regionCode: string;\n postalCode: string;\n countryCode: string;\n };\n };\n}\n\nexport type NFTPurchaseResponse = NFTResponse & {\n errorMessage?: string;\n};\n\nexport interface NFTCheckoutRequest {\n // given by magic / found in the developer dashboard in future\n contractId: string;\n // in contract, if ERC1155… for ERC721, use token ID = 0\n tokenId: string;\n name: string;\n imageUrl: string;\n quantity?: number; // default is 1\n walletAddress?: string; // default is user's wallet address\n // If enabled, the user will be able to pay with crypto. the default is false\n isCryptoCheckoutEnabled?: boolean;\n walletProvider?: 'magic' | 'web3modal';\n}\n\nexport type NFTCheckoutResponse = NFTResponse;\n\nexport type NFTCheckoutEvents = {\n disconnect: () => void;\n 'nft-checkout-initiated': (rawTransaction: string) => void;\n};\n\nexport interface NFTTransferRequest {\n tokenId: string;\n contractAddress: string;\n quantity?: number;\n recipient?: string;\n}\n\nexport type NFTTransferResponse = NFTResponse;\n\nexport enum NftCheckoutIntermediaryEvents {\n Success = 'nft-checkout-success',\n Failure = 'nft-checkout-failure',\n Initiated = 'nft-checkout-initiated',\n Disconnect = 'disconnect',\n}\n\nexport type NftCheckoutEventHandler = {\n [NftCheckoutIntermediaryEvents.Initiated]: (rawTransaction: string) => void;\n [NftCheckoutIntermediaryEvents.Success]: (signedTransaction: string) => void;\n [NftCheckoutIntermediaryEvents.Failure]: () => void;\n};\n","export type GasApiResponse = {\n request_id: string;\n state: string;\n success: boolean;\n};\n\nexport type AccessListEntry = { address: string; storageKeys: Array<string> };\n\n/**\n * An ordered collection of [[AccessList]] entries.\n */\nexport type AccessList = Array<AccessListEntry>;\n\nexport interface GaslessTransactionRequest {\n /**\n * The transaction type.\n */\n type?: number;\n\n /**\n * The target of the transaction.\n */\n to?: string;\n\n /**\n * The sender of the transaction.\n */\n from?: string;\n\n /**\n * The nonce of the transaction, used to prevent replay attacks.\n */\n\n nonce?: number;\n\n /**\n * The maximum amount of gas to allow this transaction to consime.\n */\n gasLimit?: bigint;\n\n /**\n * The gas price to use for legacy transactions or transactions on\n * legacy networks.\n *\n * Most of the time the ``max*FeePerGas`` is preferred.\n */\n gasPrice?: bigint;\n\n /**\n * The [[link-eip-1559]] maximum priority fee to pay per gas.\n */\n maxPriorityFeePerGas?: bigint;\n\n /**\n * The [[link-eip-1559]] maximum total fee to pay per gas. The actual\n * value used is protocol enforced to be the block's base fee.\n */\n maxFeePerGas?: bigint;\n\n /**\n * The transaction data.\n */\n data?: string;\n\n /**\n * The transaction value (in wei).\n */\n value?: bigint;\n\n /**\n * The chain ID for the network this transaction is valid on.\n */\n chainId?: bigint;\n\n /**\n * The [[link-eip-2930]] access list. Storage slots included in the access\n * list are //warmed// by pre-loading them, so their initial cost to\n * fetch is guaranteed, but then each additional access is cheaper.\n */\n accessList?: AccessList;\n\n /**\n * A custom object, which can be passed along for network-specific\n * values.\n */\n customData?: any;\n}\n\nexport enum WalletEventOnReceived {\n WalletInfoFetched = 'Wallet/wallet-info-fetched',\n}\n","export enum UiEventsEmit {\n CloseMagicWindow = 'close-magic-window',\n}\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","/* eslint-disable */\n/* istanbul ignore file */\n\n// DO NOT CHANGE THIS FILE.\n//\n// We have to bundle `semver` ourselves due to a long-standing cyclic dependency\n// which causes Rollup to break the `satisfies` function.\n//\n// See:\n// - https://github.com/magiclabs/magic-js/issues/198\n// - https://github.com/rollup/plugins/issues/879\n// - https://github.com/npm/node-semver/issues/318\n// - https://github.com/npm/node-semver/issues/381\n\nfunction createCommonjsModule(e){const r={exports:{}};return e(r,r.exports),r.exports}const SEMVER_SPEC_VERSION=\"2.0.0\",MAX_LENGTH$2=256,MAX_SAFE_INTEGER$1=Number.MAX_SAFE_INTEGER||9007199254740991,MAX_SAFE_COMPONENT_LENGTH=16,constants={SEMVER_SPEC_VERSION:\"2.0.0\",MAX_LENGTH:256,MAX_SAFE_INTEGER:MAX_SAFE_INTEGER$1,MAX_SAFE_COMPONENT_LENGTH:16},debug=\"object\"==typeof process&&process.env&&process.env.NODE_DEBUG&&/\\bsemver\\b/i.test(process.env.NODE_DEBUG)?(...e)=>console.error(\"SEMVER\",...e):()=>{},debug_1=debug,re_1=createCommonjsModule(function(e,r){const{MAX_SAFE_COMPONENT_LENGTH:t}=constants,s=(r=e.exports={}).re=[],i=r.src=[],o=r.t={};let a=0;const n=(e,r,t)=>{const n=a++;debug_1(n,r),o[e]=n,i[n]=r,s[n]=new RegExp(r,t?\"g\":void 0)};n(\"NUMERICIDENTIFIER\",\"0|[1-9]\\\\d*\"),n(\"NUMERICIDENTIFIERLOOSE\",\"[0-9]+\"),n(\"NONNUMERICIDENTIFIER\",\"\\\\d*[a-zA-Z-][a-zA-Z0-9-]*\"),n(\"MAINVERSION\",`(${i[o.NUMERICIDENTIFIER]})\\\\.`+`(${i[o.NUMERICIDENTIFIER]})\\\\.`+`(${i[o.NUMERICIDENTIFIER]})`),n(\"MAINVERSIONLOOSE\",`(${i[o.NUMERICIDENTIFIERLOOSE]})\\\\.`+`(${i[o.NUMERICIDENTIFIERLOOSE]})\\\\.`+`(${i[o.NUMERICIDENTIFIERLOOSE]})`),n(\"PRERELEASEIDENTIFIER\",`(?:${i[o.NUMERICIDENTIFIER]}|${i[o.NONNUMERICIDENTIFIER]})`),n(\"PRERELEASEIDENTIFIERLOOSE\",`(?:${i[o.NUMERICIDENTIFIERLOOSE]}|${i[o.NONNUMERICIDENTIFIER]})`),n(\"PRERELEASE\",`(?:-(${i[o.PRERELEASEIDENTIFIER]}(?:\\\\.${i[o.PRERELEASEIDENTIFIER]})*))`),n(\"PRERELEASELOOSE\",`(?:-?(${i[o.PRERELEASEIDENTIFIERLOOSE]}(?:\\\\.${i[o.PRERELEASEIDENTIFIERLOOSE]})*))`),n(\"BUILDIDENTIFIER\",\"[0-9A-Za-z-]+\"),n(\"BUILD\",`(?:\\\\+(${i[o.BUILDIDENTIFIER]}(?:\\\\.${i[o.BUILDIDENTIFIER]})*))`),n(\"FULLPLAIN\",`v?${i[o.MAINVERSION]}${i[o.PRERELEASE]}?${i[o.BUILD]}?`),n(\"FULL\",`^${i[o.FULLPLAIN]}$`),n(\"LOOSEPLAIN\",`[v=\\\\s]*${i[o.MAINVERSIONLOOSE]}${i[o.PRERELEASELOOSE]}?${i[o.BUILD]}?`),n(\"LOOSE\",`^${i[o.LOOSEPLAIN]}$`),n(\"GTLT\",\"((?:<|>)?=?)\"),n(\"XRANGEIDENTIFIERLOOSE\",`${i[o.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`),n(\"XRANGEIDENTIFIER\",`${i[o.NUMERICIDENTIFIER]}|x|X|\\\\*`),n(\"XRANGEPLAIN\",`[v=\\\\s]*(${i[o.XRANGEIDENTIFIER]})`+`(?:\\\\.(${i[o.XRANGEIDENTIFIER]})`+`(?:\\\\.(${i[o.XRANGEIDENTIFIER]})`+`(?:${i[o.PRERELEASE]})?${i[o.BUILD]}?`+\")?)?\"),n(\"XRANGEPLAINLOOSE\",`[v=\\\\s]*(${i[o.XRANGEIDENTIFIERLOOSE]})`+`(?:\\\\.(${i[o.XRANGEIDENTIFIERLOOSE]})`+`(?:\\\\.(${i[o.XRANGEIDENTIFIERLOOSE]})`+`(?:${i[o.PRERELEASELOOSE]})?${i[o.BUILD]}?`+\")?)?\"),n(\"XRANGE\",`^${i[o.GTLT]}\\\\s*${i[o.XRANGEPLAIN]}$`),n(\"XRANGELOOSE\",`^${i[o.GTLT]}\\\\s*${i[o.XRANGEPLAINLOOSE]}$`),n(\"COERCE\",`(^|[^\\\\d])(\\\\d{1,${t}})`+`(?:\\\\.(\\\\d{1,${t}}))?`+`(?:\\\\.(\\\\d{1,${t}}))?`+\"(?:$|[^\\\\d])\"),n(\"COERCERTL\",i[o.COERCE],!0),n(\"LONETILDE\",\"(?:~>?)\"),n(\"TILDETRIM\",`(\\\\s*)${i[o.LONETILDE]}\\\\s+`,!0),r.tildeTrimReplace=\"$1~\",n(\"TILDE\",`^${i[o.LONETILDE]}${i[o.XRANGEPLAIN]}$`),n(\"TILDELOOSE\",`^${i[o.LONETILDE]}${i[o.XRANGEPLAINLOOSE]}$`),n(\"LONECARET\",\"(?:\\\\^)\"),n(\"CARETTRIM\",`(\\\\s*)${i[o.LONECARET]}\\\\s+`,!0),r.caretTrimReplace=\"$1^\",n(\"CARET\",`^${i[o.LONECARET]}${i[o.XRANGEPLAIN]}$`),n(\"CARETLOOSE\",`^${i[o.LONECARET]}${i[o.XRANGEPLAINLOOSE]}$`),n(\"COMPARATORLOOSE\",`^${i[o.GTLT]}\\\\s*(${i[o.LOOSEPLAIN]})$|^$`),n(\"COMPARATOR\",`^${i[o.GTLT]}\\\\s*(${i[o.FULLPLAIN]})$|^$`),n(\"COMPARATORTRIM\",`(\\\\s*)${i[o.GTLT]}\\\\s*(${i[o.LOOSEPLAIN]}|${i[o.XRANGEPLAIN]})`,!0),r.comparatorTrimReplace=\"$1$2$3\",n(\"HYPHENRANGE\",`^\\\\s*(${i[o.XRANGEPLAIN]})`+\"\\\\s+-\\\\s+\"+`(${i[o.XRANGEPLAIN]})`+\"\\\\s*$\"),n(\"HYPHENRANGELOOSE\",`^\\\\s*(${i[o.XRANGEPLAINLOOSE]})`+\"\\\\s+-\\\\s+\"+`(${i[o.XRANGEPLAINLOOSE]})`+\"\\\\s*$\"),n(\"STAR\",\"(<|>)?=?\\\\s*\\\\*\"),n(\"GTE0\",\"^\\\\s*>=\\\\s*0.0.0\\\\s*$\"),n(\"GTE0PRE\",\"^\\\\s*>=\\\\s*0.0.0-0\\\\s*$\")}),numeric=/^[0-9]+$/,compareIdentifiers$1=(e,r)=>{const t=numeric.test(e),s=numeric.test(r);return t&&s&&(e=+e,r=+r),e===r?0:t&&!s?-1:s&&!t?1:e<r?-1:1},rcompareIdentifiers=(e,r)=>compareIdentifiers$1(r,e),identifiers={compareIdentifiers:compareIdentifiers$1,rcompareIdentifiers:rcompareIdentifiers},{MAX_LENGTH:MAX_LENGTH$1,MAX_SAFE_INTEGER:MAX_SAFE_INTEGER}=constants,{re:re$4,t:t$4}=re_1,{compareIdentifiers:compareIdentifiers}=identifiers;class SemVer{constructor(e,r){if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof SemVer){if(e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease)return e;e=e.version}else if(\"string\"!=typeof e)throw new TypeError(`Invalid Version: ${e}`);if(e.length>MAX_LENGTH$1)throw new TypeError(`version is longer than ${MAX_LENGTH$1} characters`);debug_1(\"SemVer\",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;const t=e.trim().match(r.loose?re$4[t$4.LOOSE]:re$4[t$4.FULL]);if(!t)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+t[1],this.minor=+t[2],this.patch=+t[3],this.major>MAX_SAFE_INTEGER||this.major<0)throw new TypeError(\"Invalid major version\");if(this.minor>MAX_SAFE_INTEGER||this.minor<0)throw new TypeError(\"Invalid minor version\");if(this.patch>MAX_SAFE_INTEGER||this.patch<0)throw new TypeError(\"Invalid patch version\");t[4]?this.prerelease=t[4].split(\".\").map(e=>{if(/^[0-9]+$/.test(e)){const r=+e;if(r>=0&&r<MAX_SAFE_INTEGER)return r}return e}):this.prerelease=[],this.build=t[5]?t[5].split(\".\"):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(\".\")}`),this.version}toString(){return this.version}compare(e){if(debug_1(\"SemVer.compare\",this.version,this.options,e),!(e instanceof SemVer)){if(\"string\"==typeof e&&e===this.version)return 0;e=new SemVer(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){return e instanceof SemVer||(e=new SemVer(e,this.options)),compareIdentifiers(this.major,e.major)||compareIdentifiers(this.minor,e.minor)||compareIdentifiers(this.patch,e.patch)}comparePre(e){if(e instanceof SemVer||(e=new SemVer(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let r=0;do{const t=this.prerelease[r],s=e.prerelease[r];if(debug_1(\"prerelease compare\",r,t,s),void 0===t&&void 0===s)return 0;if(void 0===s)return 1;if(void 0===t)return-1;if(t!==s)return compareIdentifiers(t,s)}while(++r)}compareBuild(e){e instanceof SemVer||(e=new SemVer(e,this.options));let r=0;do{const t=this.build[r],s=e.build[r];if(debug_1(\"prerelease compare\",r,t,s),void 0===t&&void 0===s)return 0;if(void 0===s)return 1;if(void 0===t)return-1;if(t!==s)return compareIdentifiers(t,s)}while(++r)}inc(e,r){switch(e){case\"premajor\":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc(\"pre\",r);break;case\"preminor\":this.prerelease.length=0,this.patch=0,this.minor++,this.inc(\"pre\",r);break;case\"prepatch\":this.prerelease.length=0,this.inc(\"patch\",r),this.inc(\"pre\",r);break;case\"prerelease\":0===this.prerelease.length&&this.inc(\"patch\",r),this.inc(\"pre\",r);break;case\"major\":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case\"minor\":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case\"patch\":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case\"pre\":if(0===this.prerelease.length)this.prerelease=[0];else{let e=this.prerelease.length;for(;--e>=0;)\"number\"==typeof this.prerelease[e]&&(this.prerelease[e]++,e=-2);-1===e&&this.prerelease.push(0)}r&&(this.prerelease[0]===r?isNaN(this.prerelease[1])&&(this.prerelease=[r,0]):this.prerelease=[r,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}}const compare=(e,r,t)=>new SemVer(e,t).compare(new SemVer(r,t)),compare_1=compare,eq=(e,r,t)=>0===compare_1(e,r,t),eq_1=eq,neq=(e,r,t)=>0!==compare_1(e,r,t),neq_1=neq,gt=(e,r,t)=>compare_1(e,r,t)>0,gt_1=gt,gte=(e,r,t)=>compare_1(e,r,t)>=0,gte_1=gte,lt=(e,r,t)=>compare_1(e,r,t)<0,lt_1=lt,lte=(e,r,t)=>compare_1(e,r,t)<=0,lte_1=lte,cmp=(e,r,t,s)=>{switch(r){case\"===\":return\"object\"==typeof e&&(e=e.version),\"object\"==typeof t&&(t=t.version),e===t;case\"!==\":return\"object\"==typeof e&&(e=e.version),\"object\"==typeof t&&(t=t.version),e!==t;case\"\":case\"=\":case\"==\":return eq_1(e,t,s);case\"!=\":return neq_1(e,t,s);case\">\":return gt_1(e,t,s);case\">=\":return gte_1(e,t,s);case\"<\":return lt_1(e,t,s);case\"<=\":return lte_1(e,t,s);default:throw new TypeError(`Invalid operator: ${r}`)}},cmp_1=cmp,ANY=Symbol(\"SemVer ANY\");class Comparator{static get ANY(){return ANY}constructor(e,r){if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof Comparator){if(e.loose===!!r.loose)return e;e=e.value}debug_1(\"comparator\",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===ANY?this.value=\"\":this.value=this.operator+this.semver.version,debug_1(\"comp\",this)}parse(e){const r=this.options.loose?re$3[t$3.COMPARATORLOOSE]:re$3[t$3.COMPARATOR],t=e.match(r);if(!t)throw new TypeError(`Invalid comparator: ${e}`);this.operator=void 0!==t[1]?t[1]:\"\",\"=\"===this.operator&&(this.operator=\"\"),t[2]?this.semver=new SemVer(t[2],this.options.loose):this.semver=ANY}toString(){return this.value}test(e){if(debug_1(\"Comparator.test\",e,this.options.loose),this.semver===ANY||e===ANY)return!0;if(\"string\"==typeof e)try{e=new SemVer(e,this.options)}catch(e){return!1}return cmp_1(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof Comparator))throw new TypeError(\"a Comparator is required\");if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),\"\"===this.operator)return\"\"===this.value||new Range(e.value,r).test(this.value);if(\"\"===e.operator)return\"\"===e.value||new Range(this.value,r).test(e.semver);const t=!(\">=\"!==this.operator&&\">\"!==this.operator||\">=\"!==e.operator&&\">\"!==e.operator),s=!(\"<=\"!==this.operator&&\"<\"!==this.operator||\"<=\"!==e.operator&&\"<\"!==e.operator),i=this.semver.version===e.semver.version,o=!(\">=\"!==this.operator&&\"<=\"!==this.operator||\">=\"!==e.operator&&\"<=\"!==e.operator),a=cmp_1(this.semver,\"<\",e.semver,r)&&(\">=\"===this.operator||\">\"===this.operator)&&(\"<=\"===e.operator||\"<\"===e.operator),n=cmp_1(this.semver,\">\",e.semver,r)&&(\"<=\"===this.operator||\"<\"===this.operator)&&(\">=\"===e.operator||\">\"===e.operator);return t||s||i&&o||a||n}}const{re:re$3,t:t$3}=re_1;class Range{constructor(e,r){if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof Range)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new Range(e.raw,r);if(e instanceof Comparator)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e,this.set=e.split(/\\s*\\|\\|\\s*/).map(e=>this.parseRange(e.trim())).filter(e=>e.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);this.format()}format(){return this.range=this.set.map(e=>e.join(\" \").trim()).join(\"||\").trim(),this.range}toString(){return this.range}parseRange(e){const{loose:r}=this.options;e=e.trim();const t=r?re$2[t$2.HYPHENRANGELOOSE]:re$2[t$2.HYPHENRANGE];e=e.replace(t,hyphenReplace(this.options.includePrerelease)),debug_1(\"hyphen replace\",e),e=e.replace(re$2[t$2.COMPARATORTRIM],comparatorTrimReplace),debug_1(\"comparator trim\",e,re$2[t$2.COMPARATORTRIM]),e=(e=(e=e.replace(re$2[t$2.TILDETRIM],tildeTrimReplace)).replace(re$2[t$2.CARETTRIM],caretTrimReplace)).split(/\\s+/).join(\" \");const s=r?re$2[t$2.COMPARATORLOOSE]:re$2[t$2.COMPARATOR];return e.split(\" \").map(e=>parseComparator(e,this.options)).join(\" \").split(/\\s+/).map(e=>replaceGTE0(e,this.options)).filter(this.options.loose?e=>!!e.match(s):()=>!0).map(e=>new Comparator(e,this.options))}intersects(e,r){if(!(e instanceof Range))throw new TypeError(\"a Range is required\");return this.set.some(t=>isSatisfiable(t,r)&&e.set.some(e=>isSatisfiable(e,r)&&t.every(t=>e.every(e=>t.intersects(e,r)))))}test(e){if(!e)return!1;if(\"string\"==typeof e)try{e=new SemVer(e,this.options)}catch(e){return!1}for(let r=0;r<this.set.length;r++)if(testSet(this.set[r],e,this.options))return!0;return!1}}const{re:re$2,t:t$2,comparatorTrimReplace:comparatorTrimReplace,tildeTrimReplace:tildeTrimReplace,caretTrimReplace:caretTrimReplace}=re_1,isSatisfiable=(e,r)=>{let t=!0;const s=e.slice();let i=s.pop();for(;t&&s.length;)t=s.every(e=>i.intersects(e,r)),i=s.pop();return t},parseComparator=(e,r)=>(debug_1(\"comp\",e,r),e=replaceCarets(e,r),debug_1(\"caret\",e),e=replaceTildes(e,r),debug_1(\"tildes\",e),e=replaceXRanges(e,r),debug_1(\"xrange\",e),e=replaceStars(e,r),debug_1(\"stars\",e),e),isX=e=>!e||\"x\"===e.toLowerCase()||\"*\"===e,replaceTildes=(e,r)=>e.trim().split(/\\s+/).map(e=>replaceTilde(e,r)).join(\" \"),replaceTilde=(e,r)=>{const t=r.loose?re$2[t$2.TILDELOOSE]:re$2[t$2.TILDE];return e.replace(t,(r,t,s,i,o)=>{let a;return debug_1(\"tilde\",e,r,t,s,i,o),isX(t)?a=\"\":isX(s)?a=`>=${t}.0.0 <${+t+1}.0.0-0`:isX(i)?a=`>=${t}.${s}.0 <${t}.${+s+1}.0-0`:o?(debug_1(\"replaceTilde pr\",o),a=`>=${t}.${s}.${i}-${o} <${t}.${+s+1}.0-0`):a=`>=${t}.${s}.${i} <${t}.${+s+1}.0-0`,debug_1(\"tilde return\",a),a})},replaceCarets=(e,r)=>e.trim().split(/\\s+/).map(e=>replaceCaret(e,r)).join(\" \"),replaceCaret=(e,r)=>{debug_1(\"caret\",e,r);const t=r.loose?re$2[t$2.CARETLOOSE]:re$2[t$2.CARET],s=r.includePrerelease?\"-0\":\"\";return e.replace(t,(r,t,i,o,a)=>{let n;return debug_1(\"caret\",e,r,t,i,o,a),isX(t)?n=\"\":isX(i)?n=`>=${t}.0.0${s} <${+t+1}.0.0-0`:isX(o)?n=\"0\"===t?`>=${t}.${i}.0${s} <${t}.${+i+1}.0-0`:`>=${t}.${i}.0${s} <${+t+1}.0.0-0`:a?(debug_1(\"replaceCaret pr\",a),n=\"0\"===t?\"0\"===i?`>=${t}.${i}.${o}-${a} <${t}.${i}.${+o+1}-0`:`>=${t}.${i}.${o}-${a} <${t}.${+i+1}.0-0`:`>=${t}.${i}.${o}-${a} <${+t+1}.0.0-0`):(debug_1(\"no pr\"),n=\"0\"===t?\"0\"===i?`>=${t}.${i}.${o}${s} <${t}.${i}.${+o+1}-0`:`>=${t}.${i}.${o}${s} <${t}.${+i+1}.0-0`:`>=${t}.${i}.${o} <${+t+1}.0.0-0`),debug_1(\"caret return\",n),n})},replaceXRanges=(e,r)=>(debug_1(\"replaceXRanges\",e,r),e.split(/\\s+/).map(e=>replaceXRange(e,r)).join(\" \")),replaceXRange=(e,r)=>{e=e.trim();const t=r.loose?re$2[t$2.XRANGELOOSE]:re$2[t$2.XRANGE];return e.replace(t,(t,s,i,o,a,n)=>{debug_1(\"xRange\",e,t,s,i,o,a,n);const E=isX(i),p=E||isX(o),l=p||isX(a),c=l;return\"=\"===s&&c&&(s=\"\"),n=r.includePrerelease?\"-0\":\"\",E?t=\">\"===s||\"<\"===s?\"<0.0.0-0\":\"*\":s&&c?(p&&(o=0),a=0,\">\"===s?(s=\">=\",p?(i=+i+1,o=0,a=0):(o=+o+1,a=0)):\"<=\"===s&&(s=\"<\",p?i=+i+1:o=+o+1),\"<\"===s&&(n=\"-0\"),t=`${s+i}.${o}.${a}${n}`):p?t=`>=${i}.0.0${n} <${+i+1}.0.0-0`:l&&(t=`>=${i}.${o}.0${n} <${i}.${+o+1}.0-0`),debug_1(\"xRange return\",t),t})},replaceStars=(e,r)=>(debug_1(\"replaceStars\",e,r),e.trim().replace(re$2[t$2.STAR],\"\")),replaceGTE0=(e,r)=>(debug_1(\"replaceGTE0\",e,r),e.trim().replace(re$2[r.includePrerelease?t$2.GTE0PRE:t$2.GTE0],\"\")),hyphenReplace=e=>(r,t,s,i,o,a,n,E,p,l,c,$,h)=>`${t=isX(s)?\"\":isX(i)?`>=${s}.0.0${e?\"-0\":\"\"}`:isX(o)?`>=${s}.${i}.0${e?\"-0\":\"\"}`:a?`>=${t}`:`>=${t}${e?\"-0\":\"\"}`} ${E=isX(p)?\"\":isX(l)?`<${+p+1}.0.0-0`:isX(c)?`<${p}.${+l+1}.0-0`:$?`<=${p}.${l}.${c}-${$}`:e?`<${p}.${l}.${+c+1}-0`:`<=${E}`}`.trim(),testSet=(e,r,t)=>{for(let t=0;t<e.length;t++)if(!e[t].test(r))return!1;if(r.prerelease.length&&!t.includePrerelease){for(let t=0;t<e.length;t++)if(debug_1(e[t].semver),e[t].semver!==Comparator.ANY&&e[t].semver.prerelease.length>0){const s=e[t].semver;if(s.major===r.major&&s.minor===r.minor&&s.patch===r.patch)return!0}return!1}return!0};export const satisfies=(e,r,t)=>{try{r=new Range(r,t)}catch(e){return!1}return r.test(e)};const satisfies_1=satisfies,{MAX_LENGTH:MAX_LENGTH}=constants,{re:re$1,t:t$1}=re_1,parse=(e,r)=>{if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof SemVer)return e;if(\"string\"!=typeof e)return null;if(e.length>MAX_LENGTH)return null;if(!(r.loose?re$1[t$1.LOOSE]:re$1[t$1.FULL]).test(e))return null;try{return new SemVer(e,r)}catch(e){return null}},parse_1=parse,{re:re,t:t}=re_1;export const coerce=(e,r)=>{if(e instanceof SemVer)return e;if(\"number\"==typeof e&&(e=String(e)),\"string\"!=typeof e)return null;let s=null;if((r=r||{}).rtl){let r;for(;(r=re[t.COERCERTL].exec(e))&&(!s||s.index+s[0].length!==e.length);)s&&r.index+r[0].length===s.index+s[0].length||(s=r),re[t.COERCERTL].lastIndex=r.index+r[1].length+r[2].length;re[t.COERCERTL].lastIndex=-1}else s=e.match(re[t.COERCE]);return null===s?null:parse_1(`${s[2]}.${s[3]||\"0\"}.${s[4]||\"0\"}`,r)};\n","function percentToByte(p: string) {\n return String.fromCharCode(parseInt(p.slice(1), 16));\n}\n\nfunction byteToPercent(b: string) {\n return `%${`00${b.charCodeAt(0).toString(16)}`.slice(-2)}`;\n}\n\n/**\n * Encodes a Base64 string. Safe for UTF-8 characters.\n * Original source is from the `universal-base64` NPM package.\n *\n * @source https://github.com/blakeembrey/universal-base64/blob/master/src/browser.ts\n */\nfunction btoaUTF8(str: string): string {\n return btoa(encodeURIComponent(str).replace(/%[0-9A-F]{2}/g, percentToByte));\n}\n\n/**\n * Decodes a Base64 string. Safe for UTF-8 characters.\n * Original source is from the `universal-base64` NPM package.\n *\n * @source https://github.com/blakeembrey/universal-base64/blob/master/src/browser.ts\n */\nfunction atobUTF8(str: string): string {\n return decodeURIComponent(Array.from(atob(str), byteToPercent).join(''));\n}\n\n/**\n * Given a JSON-serializable object, encode as a Base64 string.\n */\nexport function encodeJSON<T>(options: T): string {\n return btoaUTF8(JSON.stringify(options));\n}\n\n/**\n * Given a Base64 JSON string, decode a JavaScript object.\n */\nexport function decodeJSON<T>(queryString: string): T {\n return JSON.parse(atobUTF8(queryString));\n}\n","import { JsonRpcError, RPCErrorCode, SDKErrorCode, SDKWarningCode } from '@magic-sdk/types';\nimport { isJsonRpcErrorCode } from '../util/type-guards';\nimport { SDKEnvironment } from './sdk-environment';\nimport { BaseExtension } from '../modules/base-extension';\n\n// --- Error/warning classes\n\n/**\n * This error type represents internal SDK errors. This could be developer\n * mistakes (or Magic's mistakes), or execution errors unrelated to standard\n * JavaScript exceptions.\n */\nexport class MagicSDKError extends Error {\n __proto__ = Error;\n\n constructor(\n public code: SDKErrorCode,\n public rawMessage: string,\n ) {\n super(`Magic SDK Error: [${code}] ${rawMessage}`);\n Object.setPrototypeOf(this, MagicSDKError.prototype);\n }\n}\n\n/**\n * This error type communicates exceptions that occur during execution in the\n * Magic `<iframe>` context.\n */\nexport class MagicRPCError extends Error {\n __proto__ = Error;\n\n public code: RPCErrorCode | number;\n public rawMessage: string;\n public data: any;\n\n constructor(sourceError?: JsonRpcError | null) {\n super();\n\n const codeNormalized = Number(sourceError?.code);\n this.rawMessage = sourceError?.message || 'Internal error';\n this.code = isJsonRpcErrorCode(codeNormalized) ? codeNormalized : RPCErrorCode.InternalError;\n this.message = `Magic RPC Error: [${this.code}] ${this.rawMessage}`;\n this.data = sourceError?.data || undefined;\n\n Object.setPrototypeOf(this, MagicRPCError.prototype);\n }\n}\n\n/**\n * In contrast to `SDKError` objects, this \"warning\" type communicates important\n * context that does not rise to the level of an exception. These should be\n * logged rather than thrown.\n */\nexport class MagicSDKWarning {\n public message: string;\n\n constructor(\n public code: SDKWarningCode,\n public rawMessage: string,\n ) {\n this.message = `Magic SDK Warning: [${code}] ${rawMessage}`;\n }\n\n /**\n * Logs this warning to the console.\n */\n public log() {\n console.warn(this.message);\n }\n}\n\n/**\n * This error type is reserved for communicating errors that arise during\n * execution of Magic SDK Extension methods. Compare this to the `SDKError`\n * type, specifically in context of Extensions.\n */\nexport class MagicExtensionError<TData = any> extends Error {\n __proto__ = Error;\n\n constructor(\n ext: BaseExtension<string>,\n public code: string | number,\n public rawMessage: string,\n public data: TData,\n ) {\n super(`Magic Extension Error (${ext.name}): [${code}] ${rawMessage}`);\n Object.setPrototypeOf(this, MagicExtensionError.prototype);\n }\n}\n\n/**\n * In contrast to `MagicExtensionError` objects, this \"warning\" type\n * communicates important context that does not rise to the level of an\n * exception. These should be logged rather than thrown.\n */\nexport class MagicExtensionWarning {\n public message: string;\n\n constructor(\n ext: BaseExtension<string>,\n public code: string | number,\n public rawMessage: string,\n ) {\n this.message = `Magic Extension Warning (${ext.name}): [${code}] ${rawMessage}`;\n }\n\n /**\n * Logs this warning to the console.\n */\n public log() {\n console.warn(this.message);\n }\n}\n\n// --- SDK error factories\n\nexport function createMissingApiKeyError() {\n return new MagicSDKError(\n SDKErrorCode.MissingApiKey,\n 'Please provide an API key that you acquired from the Magic developer dashboard.',\n );\n}\n\nexport function createModalNotReadyError() {\n return new MagicSDKError(SDKErrorCode.ModalNotReady, 'Modal is not ready');\n}\n\nexport function createMalformedResponseError() {\n return new MagicSDKError(SDKErrorCode.MalformedResponse, 'Response from the Magic iframe is malformed.');\n}\n\nexport function createExtensionNotInitializedError(member: string) {\n return new MagicSDKError(\n SDKErrorCode.ExtensionNotInitialized,\n `Extensions must be initialized with a Magic SDK instance before \\`Extension.${member}\\` can be accessed. Do not invoke \\`Extension.${member}\\` inside an extension constructor.`,\n );\n}\n\nexport function createIncompatibleExtensionsError(extensions: BaseExtension<string>[]) {\n let msg = `Some extensions are incompatible with \\`${SDKEnvironment.sdkName}@${SDKEnvironment.version}\\`:`;\n\n extensions\n .filter(ext => typeof ext.compat !== 'undefined' && ext.compat !== null)\n .forEach(ext => {\n const compat = ext.compat![SDKEnvironment.sdkName];\n\n /* istanbul ignore else */\n if (typeof compat === 'string') {\n msg += `\\n - Extension \\`${ext.name}\\` supports version(s) \\`${compat}\\``;\n } else if (!compat) {\n msg += `\\n - Extension \\`${ext.name}\\` does not support ${SDKEnvironment.platform} environments.`;\n }\n\n // Else case is irrelevant here\n // (we filter out extensions with missing `compat` field)\n });\n\n return new MagicSDKError(SDKErrorCode.IncompatibleExtensions, msg);\n}\n\nexport function createInvalidArgumentError(options: {\n procedure: string;\n argument: number;\n expected: string;\n received: string;\n}) {\n /**\n * Parses the argument index (given by `argument`) to attach the correct ordinal suffix.\n * (i.e.: 1st, 2nd, 3rd, 4th, etc.)\n */\n const ordinalSuffix = (i: number) => {\n const iAdjusted = i + 1; // Argument is zero-indexed.\n const j = iAdjusted % 10;\n const k = iAdjusted % 100;\n if (j === 1 && k !== 11) return `${iAdjusted}st`;\n if (j === 2 && k !== 12) return `${iAdjusted}nd`;\n if (j === 3 && k !== 13) return `${iAdjusted}rd`;\n return `${iAdjusted}th`;\n };\n\n return new MagicSDKError(\n SDKErrorCode.InvalidArgument,\n `Invalid ${ordinalSuffix(options.argument)} argument given to \\`${options.procedure}\\`.\\n` +\n ` Expected: \\`${options.expected}\\`\\n` +\n ` Received: \\`${options.received}\\``,\n );\n}\n\n// --- SDK warning factories\n\nexport function createDuplicateIframeWarning() {\n return new MagicSDKWarning(SDKWarningCode.DuplicateIframe, 'Duplicate iframes found.');\n}\n\nexport function createSynchronousWeb3MethodWarning() {\n return new MagicSDKWarning(\n SDKWarningCode.SyncWeb3Method,\n 'Non-async web3 methods are deprecated in web3 > 1.0 and are not supported by the Magic web3 provider. Please use an async method instead.',\n );\n}\n\nexport function createReactNativeEndpointConfigurationWarning() {\n return new MagicSDKWarning(\n SDKWarningCode.ReactNativeEndpointConfiguration,\n `CUSTOM DOMAINS ARE NOT SUPPORTED WHEN USING MAGIC SDK WITH REACT NATIVE! The \\`endpoint\\` parameter SHOULD NOT be provided. The Magic \\`<iframe>\\` is automatically wrapped by a WebView pointed at \\`${SDKEnvironment.defaultEndpoint}\\`. Changing this default behavior will lead to unexpected results and potentially security-threatening bugs.`,\n );\n}\n\nexport function createDeprecationWarning(options: {\n method: string;\n removalVersions: {\n [P in\n | 'magic-sdk'\n | '@magic-sdk/react-native'\n | '@magic-sdk/react-native-bare'\n | '@magic-sdk/react-native-expo']: string;\n };\n useInstead?: string;\n}) {\n const { method, removalVersions, useInstead } = options;\n\n const removalVersion = removalVersions[SDKEnvironment.sdkName];\n const useInsteadSuffix = useInstead ? ` Use \\`${useInstead}\\` instead.` : '';\n const message = `\\`${method}\\` will be removed from \\`${SDKEnvironment.sdkName}\\` in version \\`${removalVersion}\\`.${useInsteadSuffix}`;\n\n return new MagicSDKWarning(SDKWarningCode.DeprecationNotice, message);\n}\n","/**\n * This file contains our type guards.\n *\n * Type guards are a feature of TypeScript which narrow the type signature of\n * intersection types (types that can be one thing or another).\n *\n * @see\n * https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-guards-and-differentiating-types\n */\n\nimport { JsonRpcRequestPayload, JsonRpcResponsePayload, MagicPayloadMethod, RPCErrorCode } from '@magic-sdk/types';\n\n/**\n * Assert `value` is `undefined`.\n */\nfunction isUndefined(value: any): value is undefined {\n return typeof value === 'undefined';\n}\n\n/**\n * Assert `value` is `null`.\n */\nfunction isNull(value: any): value is null {\n return value === null;\n}\n\n/**\n * Assert `value` is `null` or `undefined`.\n */\nfunction isNil(value: any): value is null | undefined {\n return isNull(value) || isUndefined(value);\n}\n\n/**\n * Assert `value` is a `JsonRpcRequestPayload` object.\n */\nexport function isJsonRpcRequestPayload(value?: JsonRpcRequestPayload): value is JsonRpcRequestPayload {\n if (isNil(value)) return false;\n return (\n !isUndefined(value.jsonrpc) && !isUndefined(value.id) && !isUndefined(value.method) && !isUndefined(value.params)\n );\n}\n\n/**\n * Assert `value` is a `JsonRpcResponsePayload` object.\n */\nexport function isJsonRpcResponsePayload(value: any): value is JsonRpcResponsePayload {\n if (isNil(value)) return false;\n return (\n !isUndefined(value.jsonrpc) && !isUndefined(value.id) && (!isUndefined(value.result) || !isUndefined(value.error))\n );\n}\n\n/**\n * Assert `value` is a Magic SDK payload method identifier.\n */\nexport function isMagicPayloadMethod(value?: any): value is MagicPayloadMethod {\n if (isNil(value)) return false;\n return typeof value === 'string' && Object.values(MagicPayloadMethod).includes(value as any);\n}\n\n/**\n * Assert `value` is an expected JSON RPC error code.\n */\nexport function isJsonRpcErrorCode(value?: any): value is RPCErrorCode {\n if (isNil(value)) return false;\n return typeof value === 'number' && Object.values(RPCErrorCode).includes(value);\n}\n\n/**\n * Assert `value` is an empty, plain object.\n */\nexport function isEmpty(value?: any): value is {} {\n if (!value) return true;\n\n for (const key in value) {\n /* istanbul ignore else */\n if (Object.hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n\n return true;\n}\n","import type localForage from 'localforage';\nimport type { ViewController } from './view-controller';\nimport type { SDKBase } from './sdk';\nimport type { WithExtensions } from '../modules/base-extension';\n\ntype ConstructorOf<C> = { new (...args: any[]): C };\n\n/**\n * A structure containing details about the current environment.\n * This is guaranteed to be populated before the SDK is instantiated.\n */\nexport interface SDKEnvironment {\n sdkName: 'magic-sdk' | '@magic-sdk/react-native' | '@magic-sdk/react-native-bare' | '@magic-sdk/react-native-expo';\n version: string;\n platform: 'web' | 'react-native';\n defaultEndpoint: string;\n ViewController: ConstructorOf<ViewController>;\n configureStorage: () => Promise<typeof localForage>;\n bundleId?: string | null;\n}\n\nexport const SDKEnvironment: SDKEnvironment = {} as any;\n\nexport function createSDK<SDK extends SDKBase>(\n SDKBaseCtor: ConstructorOf<SDK>,\n environment: SDKEnvironment,\n): WithExtensions<SDK> {\n Object.assign(SDKEnvironment, environment);\n return SDKBaseCtor as any;\n}\n\nexport const sdkNameToEnvName = {\n 'magic-sdk': 'magic-sdk' as const,\n '@magic-sdk/react-native': 'magic-sdk-rn' as const,\n '@magic-sdk/react-native-bare': 'magic-sdk-rn-bare' as const,\n '@magic-sdk/react-native-expo': 'magic-sdk-rn-expo' as const,\n};\n","import {\n MagicPayloadMethod,\n LoginWithMagicLinkConfiguration,\n LoginWithSmsConfiguration,\n LoginWithEmailOTPConfiguration,\n LoginWithEmailOTPEventHandlers,\n LoginWithMagicLinkEventHandlers,\n UpdateEmailConfiguration,\n DeviceVerificationEventEmit,\n LoginWithEmailOTPEventEmit,\n UpdateEmailEventHandlers,\n UpdateEmailEventEmit,\n RecencyCheckEventEmit,\n LoginWithSmsOTPEventEmit,\n LoginWithSmsOTPEventHandlers,\n LoginWithCredentialConfiguration,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { createJsonRpcRequestPayload } from '../core/json-rpc';\nimport { SDKEnvironment } from '../core/sdk-environment';\nimport { isMajorVersionAtLeast } from '../util/version-check';\nimport { createDeprecationWarning } from '../core/sdk-exceptions';\n\nexport const ProductConsolidationMethodRemovalVersions = {\n 'magic-sdk': 'v18.0.0',\n '@magic-sdk/react-native': 'v14.0.0',\n '@magic-sdk/react-native-bare': 'v19.0.0',\n '@magic-sdk/react-native-expo': 'v19.0.0',\n};\n\nexport class AuthModule extends BaseModule {\n /**\n * Initiate the \"magic link\" login flow for a user. If the flow is successful,\n * this method will return a Decentralized ID token (with a default lifespan\n * of 15 minutes).\n */\n public loginWithMagicLink(configuration: LoginWithMagicLinkConfiguration) {\n const isRNMobilePackage =\n SDKEnvironment.sdkName === '@magic-sdk/react-native' ||\n SDKEnvironment.sdkName === '@magic-sdk/react-native-bare' ||\n SDKEnvironment.sdkName === '@magic-sdk/react-native-expo';\n\n // RN SDK major version is greater than or equal to v19\n if (isRNMobilePackage && isMajorVersionAtLeast(SDKEnvironment.version, 19)) {\n throw new Error(\n 'loginWithMagicLink() is deprecated for this package, please utilize a passcode method like loginWithSMS or loginWithEmailOTP instead.',\n );\n } else if (isRNMobilePackage) {\n // RN SDK major version is less than v19\n createDeprecationWarning({\n method: 'auth.loginWithMagicLink()',\n removalVersions: ProductConsolidationMethodRemovalVersions,\n useInstead: 'auth.loginWithEmailOTP()',\n }).log();\n }\n\n const { email, showUI = true, redirectURI, overrides, lifespan } = configuration;\n\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LoginWithMagicLinkTestMode : MagicPayloadMethod.LoginWithMagicLink,\n [{ email, showUI, redirectURI, overrides, lifespan }],\n );\n return this.request<string | null, LoginWithMagicLinkEventHandlers>(requestPayload);\n }\n\n /**\n * Initiate an SMS login flow for a user. If successful,\n * this method will return a Decenteralized ID token (with a default lifespan\n * of 15 minutes)\n */\n public loginWithSMS(configuration: LoginWithSmsConfiguration) {\n const { phoneNumber, showUI = true, lifespan } = configuration;\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LoginWithSmsTestMode : MagicPayloadMethod.LoginWithSms,\n [{ phoneNumber, showUI, lifespan }],\n );\n\n const handle = this.request<string | null, LoginWithSmsOTPEventHandlers>(requestPayload);\n\n if (!showUI && handle) {\n handle.on(LoginWithSmsOTPEventEmit.VerifySmsOtp, (otp: string) => {\n this.createIntermediaryEvent(LoginWithSmsOTPEventEmit.VerifySmsOtp, requestPayload.id as string)(otp);\n });\n\n handle.on(LoginWithSmsOTPEventEmit.Cancel, () => {\n this.createIntermediaryEvent(LoginWithSmsOTPEventEmit.Cancel, requestPayload.id as string)();\n });\n }\n\n return handle;\n }\n\n /**\n * Initiate an Email with OTP login flow for a user. If successful,\n * this method will return a Decenteralized ID token (with a default lifespan\n * of 15 minutes)\n */\n public loginWithEmailOTP(configuration: LoginWithEmailOTPConfiguration) {\n const { email, showUI, deviceCheckUI, overrides, lifespan } = configuration;\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LoginWithEmailOTPTestMode : MagicPayloadMethod.LoginWithEmailOTP,\n [{ email, showUI, deviceCheckUI, overrides, lifespan }],\n );\n const handle = this.request<string | null, LoginWithEmailOTPEventHandlers>(requestPayload);\n if (!deviceCheckUI && handle) {\n handle.on(DeviceVerificationEventEmit.Retry, () => {\n this.createIntermediaryEvent(DeviceVerificationEventEmit.Retry, requestPayload.id as any)();\n });\n }\n if (!showUI && handle) {\n handle.on(LoginWithEmailOTPEventEmit.VerifyEmailOtp, (otp: string) => {\n this.createIntermediaryEvent(LoginWithEmailOTPEventEmit.VerifyEmailOtp, requestPayload.id as any)(otp);\n });\n handle.on(LoginWithEmailOTPEventEmit.VerifyMFACode, (mfa: string) => {\n this.createIntermediaryEvent(LoginWithEmailOTPEventEmit.VerifyMFACode, requestPayload.id as string)(mfa);\n });\n handle.on(LoginWithEmailOTPEventEmit.LostDevice, () => {\n this.createIntermediaryEvent(LoginWithEmailOTPEventEmit.LostDevice, requestPayload.id as string)();\n });\n handle.on(LoginWithEmailOTPEventEmit.VerifyRecoveryCode, (recoveryCode: string) => {\n this.createIntermediaryEvent(\n LoginWithEmailOTPEventEmit.VerifyRecoveryCode,\n requestPayload.id as string,\n )(recoveryCode);\n });\n handle.on(LoginWithEmailOTPEventEmit.Cancel, () => {\n this.createIntermediaryEvent(LoginWithEmailOTPEventEmit.Cancel, requestPayload.id as any)();\n });\n }\n\n return handle;\n }\n\n /**\n * Log a user in with a special one-time-use credential token. This is\n * currently used during magic link flows with a configured redirect to\n * hydrate the user session at the end of the flow. If the flow is successful,\n * this method will return a Decentralized ID token (with a default lifespan\n * of 15 minutes).\n *\n * If no argument is provided, a credential is automatically parsed from\n * `window.location.search`.\n */\n public loginWithCredential(configuration?: LoginWithCredentialConfiguration) {\n const { credentialOrQueryString, lifespan } = configuration || {};\n let credentialResolved = credentialOrQueryString ?? '';\n\n if (!credentialOrQueryString && SDKEnvironment.platform === 'web') {\n credentialResolved = window.location.search;\n\n // Remove the query from the redirect callback as a precaution.\n const urlWithoutQuery = window.location.origin + window.location.pathname;\n window.history.replaceState(null, '', urlWithoutQuery);\n }\n\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LoginWithCredentialTestMode : MagicPayloadMethod.LoginWithCredential,\n [credentialResolved, lifespan],\n );\n\n return this.request<string | null>(requestPayload);\n }\n\n // Custom Auth\n public setAuthorizationToken(jwt: string) {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.SetAuthorizationToken, [{ jwt }]);\n return this.request<boolean>(requestPayload);\n }\n\n public updateEmailWithUI(configuration: UpdateEmailConfiguration) {\n const { email, showUI = true } = configuration;\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.UpdateEmailTestMode : MagicPayloadMethod.UpdateEmail,\n [{ email, showUI }],\n );\n\n const handle = this.request<string | null, UpdateEmailEventHandlers>(requestPayload);\n\n if (!showUI) {\n handle.on(RecencyCheckEventEmit.Retry, () => {\n this.createIntermediaryEvent(RecencyCheckEventEmit.Retry, requestPayload.id as any)();\n });\n handle.on(RecencyCheckEventEmit.Cancel, () => {\n this.createIntermediaryEvent(RecencyCheckEventEmit.Cancel, requestPayload.id as any)();\n });\n handle.on(RecencyCheckEventEmit.VerifyEmailOtp, (otp: string) => {\n this.createIntermediaryEvent(RecencyCheckEventEmit.VerifyEmailOtp, requestPayload.id as string)(otp);\n });\n handle.on(RecencyCheckEventEmit.VerifyMFACode, (mfa: string) => {\n this.createIntermediaryEvent(RecencyCheckEventEmit.VerifyMFACode, requestPayload.id as string)(mfa);\n });\n handle.on(UpdateEmailEventEmit.RetryWithNewEmail, (newEmail?) => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.RetryWithNewEmail, requestPayload.id as any)(newEmail);\n });\n handle.on(UpdateEmailEventEmit.Cancel, () => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.Cancel, requestPayload.id as any)();\n });\n handle.on(UpdateEmailEventEmit.VerifyEmailOtp, (otp: string) => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.VerifyEmailOtp, requestPayload.id as any)(otp);\n });\n }\n return handle;\n }\n}\n","import {\n JsonRpcRequestPayload,\n MagicOutgoingWindowMessage,\n MagicIncomingWindowMessage,\n MagicPayloadMethod,\n IntermediaryEvents,\n routeToMagicMethods,\n} from '@magic-sdk/types';\nimport { createMalformedResponseError, MagicRPCError } from '../core/sdk-exceptions';\nimport type { SDKBase } from '../core/sdk';\nimport { createJsonRpcRequestPayload, standardizeJsonRpcRequestPayload } from '../core/json-rpc';\nimport { createPromiEvent } from '../util/promise-tools';\nimport type { ViewController } from '../core/view-controller';\nimport type { EventsDefinition } from '../util/events';\n\nexport class BaseModule {\n constructor(protected sdk: SDKBase) {}\n\n /**\n * The `ViewController` for the SDK instance registered to this module.\n */\n protected get overlay(): ViewController {\n return (this.sdk as any).overlay;\n }\n\n /**\n * Emits promisified requests to the Magic `<iframe>` context.\n */\n protected request<ResultType = any, Events extends EventsDefinition = void>(payload: Partial<JsonRpcRequestPayload>) {\n if (this.sdk.thirdPartyWallets.isConnected && !routeToMagicMethods.includes(payload.method as MagicPayloadMethod)) {\n const promiEvent = createPromiEvent<ResultType, Events>((resolve, reject) => {\n this.sdk.thirdPartyWallets.requestOverride(payload).then(resolve).catch(reject);\n });\n return promiEvent;\n }\n\n const responsePromise = this.overlay.post<ResultType>(\n MagicOutgoingWindowMessage.MAGIC_HANDLE_REQUEST,\n standardizeJsonRpcRequestPayload(payload),\n );\n\n // PromiEvent-ify the response.\n const promiEvent = createPromiEvent<ResultType, Events>((resolve, reject) => {\n responsePromise\n .then(res => {\n cleanupEvents();\n if (res.hasError) reject(new MagicRPCError(res.payload.error));\n else if (res.hasResult) resolve(res.payload.result as ResultType);\n else throw createMalformedResponseError();\n })\n .catch(err => {\n cleanupEvents();\n reject(err);\n });\n });\n\n // Listen for events from the `<iframe>` associated with the current payload\n // and emit those to `PromiEvent` subscribers.\n const cleanupEvents = this.overlay.on(MagicIncomingWindowMessage.MAGIC_HANDLE_EVENT, evt => {\n const { response } = evt.data;\n\n if (response.id === payload.id && response.result?.event) {\n const { event, params = [] } = response.result;\n promiEvent.emit(event, ...params);\n }\n });\n\n return promiEvent;\n }\n\n // Creates an intermediary event which takes a typed event and a payload ID\n protected createIntermediaryEvent<T = Function>(eventType: IntermediaryEvents, payloadId: string) {\n const e = (args: any) => {\n const res = createJsonRpcRequestPayload(MagicPayloadMethod.IntermediaryEvent, [{ payloadId, eventType, args }]);\n this.request(res);\n };\n return e as unknown as T;\n }\n}\n","import { JsonRpcRequestPayload, JsonRpcResponsePayload, JsonRpcError, RPCErrorCode } from '@magic-sdk/types';\nimport { isJsonRpcResponsePayload } from '../util/type-guards';\nimport { getPayloadId } from '../util/get-payload-id';\nimport { clearKeys } from '../util/web-crypto';\n\nconst payloadPreprocessedSymbol = Symbol('Payload pre-processed by Magic SDK');\n\n/**\n * To avoid \"pre-processing\" a payload more than once (and needlessly\n * incrementing our payload ID generator), we attach a symbol to detect a\n * payloads we've already visited.\n */\nfunction markPayloadAsPreprocessed<T extends Partial<JsonRpcRequestPayload>>(payload: T): T {\n Object.defineProperty(payload, payloadPreprocessedSymbol, {\n value: true,\n enumerable: false,\n });\n\n return payload;\n}\n\n/**\n * Returns `true` if the payload has been visited by our \"pre-processing,\" in\n * `standardizeJsonRpcRequestPayload(...)`.\n */\nfunction isPayloadPreprocessed<T extends Partial<JsonRpcRequestPayload>>(payload: T) {\n return !!(payload as any)[payloadPreprocessedSymbol];\n}\n\n/**\n * Returns a full `JsonRpcRequestPayload` from a potentially incomplete payload\n * object. This method mutates the given `payload` to preserve compatibility\n * with external libraries that perform their own `JsonRpcRequestPayload.id`\n * check to associate responses (such as `web3`).\n *\n * This function is no-op if the payload has already been processed before.\n */\nexport function standardizeJsonRpcRequestPayload(payload: Partial<JsonRpcRequestPayload>) {\n if (!isPayloadPreprocessed(payload)) {\n payload.jsonrpc = payload.jsonrpc ?? '2.0';\n payload.id = getPayloadId();\n payload.method = payload.method ?? 'noop';\n payload.params = payload.params ?? [];\n\n markPayloadAsPreprocessed(payload);\n }\n\n return payload as JsonRpcRequestPayload;\n}\n\n/**\n * Build a valid JSON RPC payload for emitting to the Magic SDK iframe relayer.\n */\nexport function createJsonRpcRequestPayload(method: string, params: any[] = []): JsonRpcRequestPayload {\n return markPayloadAsPreprocessed({\n params,\n method,\n jsonrpc: '2.0',\n id: getPayloadId(),\n });\n}\n\n/**\n * Formats and standardizes a JSON RPC 2.0 response from a number of potential\n * sources.\n */\nexport class JsonRpcResponse<ResultType = any> {\n private readonly _jsonrpc: string;\n private readonly _id: string | number | null;\n private _result?: ResultType | null;\n private _error?: JsonRpcError | null;\n\n constructor(responsePayload: JsonRpcResponsePayload);\n constructor(response: JsonRpcResponse<ResultType>);\n constructor(requestPayload: JsonRpcRequestPayload);\n constructor(responseOrPayload: JsonRpcResponsePayload | JsonRpcResponse<ResultType> | JsonRpcRequestPayload) {\n if (responseOrPayload instanceof JsonRpcResponse) {\n this._jsonrpc = responseOrPayload.payload.jsonrpc;\n this._id = responseOrPayload.payload.id;\n this._result = responseOrPayload.payload.result;\n this._error = responseOrPayload.payload.error;\n } else if (isJsonRpcResponsePayload(responseOrPayload)) {\n this._jsonrpc = responseOrPayload.jsonrpc;\n this._id = responseOrPayload.id;\n this._result = responseOrPayload.result;\n this._error = responseOrPayload.error;\n } else {\n this._jsonrpc = responseOrPayload.jsonrpc;\n this._id = responseOrPayload.id;\n this._result = undefined;\n this._error = undefined;\n }\n }\n\n public applyError(error?: JsonRpcError | null) {\n this._error = error;\n return this;\n }\n\n public applyResult(result?: ResultType | null) {\n this._result = result;\n return this;\n }\n\n public get hasError() {\n // Handle DPOP error and rotate new keys\n if (this._error?.code === RPCErrorCode.DpopInvalidated) {\n clearKeys();\n }\n return typeof this._error !== 'undefined' && this._error !== null;\n }\n\n public get hasResult() {\n return typeof this._result !== 'undefined';\n }\n\n public get payload(): JsonRpcResponsePayload {\n return {\n jsonrpc: this._jsonrpc,\n id: this._id,\n result: this._result,\n error: this._error,\n };\n }\n}\n","function* createIntGenerator(): Generator<number, number, void> {\n let index = 0;\n\n while (true) {\n /* istanbul ignore next */\n if (index < Number.MAX_SAFE_INTEGER) yield ++index;\n else index = 0;\n }\n}\n\nconst intGenerator = createIntGenerator();\n\n/**\n * Get an integer ID for attaching to a JSON RPC request payload.\n */\nexport function getPayloadId(): number {\n return intGenerator.next().value;\n}\n","import { SDKEnvironment } from '../core/sdk-environment';\n\n/* global LocalForage LocalForageDbMethods */\nlet lf: LocalForage;\n\n/**\n * Proxies `localforage` methods with strong-typing.\n */\nfunction proxyLocalForageMethod<TMethod extends keyof LocalForageDbMethods>(method: TMethod): LocalForage[TMethod] {\n return async (...args: any[]) => {\n /* istanbul ignore else */\n if (!lf) lf = await SDKEnvironment.configureStorage();\n await lf.ready();\n return (lf[method] as any)(...args);\n };\n}\n\nexport const getItem = proxyLocalForageMethod('getItem');\nexport const setItem = proxyLocalForageMethod('setItem');\nexport const removeItem = proxyLocalForageMethod('removeItem');\nexport const clear = proxyLocalForageMethod('clear');\nexport const length = proxyLocalForageMethod('length');\nexport const key = proxyLocalForageMethod('key');\nexport const keys = proxyLocalForageMethod('keys');\nexport const iterate = proxyLocalForageMethod('iterate');\n","export function uuid() {\n const u = window.crypto.getRandomValues(new Uint8Array(16));\n\n // set the version bit to v4\n u[6] = (u[6] & 0x0f) | 0x40;\n\n // set the variant bit to \"don't care\" (yes, the RFC\n // calls it that)\n u[8] = (u[8] & 0xbf) | 0x80;\n\n // hex encode them and add the dashes\n let uid = '';\n uid += u[0].toString(16);\n uid += u[1].toString(16);\n uid += u[2].toString(16);\n uid += u[3].toString(16);\n uid += '-';\n\n uid += u[4].toString(16);\n uid += u[5].toString(16);\n uid += '-';\n\n uid += u[6].toString(16);\n uid += u[7].toString(16);\n uid += '-';\n\n uid += u[8].toString(16);\n uid += u[9].toString(16);\n uid += '-';\n\n uid += u[10].toString(16);\n uid += u[11].toString(16);\n uid += u[12].toString(16);\n uid += u[13].toString(16);\n uid += u[14].toString(16);\n uid += u[15].toString(16);\n\n return uid;\n}\n","import { setItem, getItem, removeItem } from './storage';\nimport { uuid } from './uuid';\n\nexport const STORE_KEY_PRIVATE_KEY = 'STORE_KEY_PRIVATE_KEY';\nexport const STORE_KEY_PUBLIC_JWK = 'STORE_KEY_PUBLIC_JWK';\nconst ALGO_NAME = 'ECDSA';\nconst ALGO_CURVE = 'P-256';\n\nconst EC_GEN_PARAMS: EcKeyGenParams = {\n name: ALGO_NAME,\n namedCurve: ALGO_CURVE,\n};\n\nexport function isWebCryptoSupported() {\n const hasCrypto = typeof window !== 'undefined' && !!(window.crypto as any);\n const hasSubtleCrypto = hasCrypto && !!(window.crypto.subtle as any);\n\n return hasCrypto && hasSubtleCrypto;\n}\n\nexport function clearKeys() {\n removeItem(STORE_KEY_PUBLIC_JWK);\n removeItem(STORE_KEY_PRIVATE_KEY);\n}\n\nexport async function createJwt() {\n // will return undefined is webcrypto is not supported\n const publicJwk = await getPublicKey();\n\n if (!publicJwk) {\n console.info('unable to create public key or webcrypto is unsupported');\n return undefined;\n }\n\n const { subtle } = window.crypto;\n const privateJwk = await getItem<CryptoKey>(STORE_KEY_PRIVATE_KEY);\n\n if (!privateJwk || !subtle) {\n console.info('unable to find private key or webcrypto unsupported');\n return undefined;\n }\n\n const claims = {\n iat: Math.floor(new Date().getTime() / 1000),\n jti: uuid(),\n };\n\n const headers = {\n typ: 'dpop+jwt',\n alg: 'ES256',\n jwk: publicJwk,\n };\n\n const jws = {\n protected: strToUrlBase64(JSON.stringify(headers)),\n claims: strToUrlBase64(JSON.stringify(claims)),\n };\n\n const data = strToUint8(`${jws.protected}.${jws.claims}`);\n const sigType = { name: ALGO_NAME, hash: { name: 'SHA-256' } };\n\n const sig = uint8ToUrlBase64(new Uint8Array(await subtle.sign(sigType, privateJwk, data)));\n return `${jws.protected}.${jws.claims}.${sig}`;\n}\n\nasync function getPublicKey() {\n if (!isWebCryptoSupported()) {\n console.info('webcrypto is not supported');\n return undefined;\n }\n\n if (!(await getItem(STORE_KEY_PUBLIC_JWK))) {\n await generateWCKP();\n }\n\n return getItem(STORE_KEY_PUBLIC_JWK) as JsonWebKey;\n}\n\nasync function generateWCKP() {\n // to avoid a nasty babel bug we have to hoist this above the await ourselves\n // https://github.com/rpetrich/babel-plugin-transform-async-to-promises/issues/20\n const { subtle } = window.crypto;\n const kp = await subtle.generateKey(\n EC_GEN_PARAMS,\n false, // need to export the public key, while keep private key non-extractable\n ['sign'],\n );\n\n const jwkPublicKey = await subtle.exportKey('jwk', kp.publicKey!);\n\n // persist keys\n await setItem(STORE_KEY_PRIVATE_KEY, kp.privateKey!);\n // persist the jwk public key since it needs to be exported anyways\n await setItem(STORE_KEY_PUBLIC_JWK, jwkPublicKey);\n}\n\nfunction strToUrlBase64(str: string) {\n return binToUrlBase64(utf8ToBinaryString(str));\n}\n\nfunction strToUint8(str: string) {\n return new TextEncoder().encode(str);\n}\n\nfunction binToUrlBase64(bin: string) {\n return btoa(bin).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+/g, '');\n}\n\nfunction utf8ToBinaryString(str: string) {\n const escstr = encodeURIComponent(str);\n // replaces any uri escape sequence, such as %0A,\n // with binary escape, such as 0x0A\n return escstr.replace(/%([0-9A-F]{2})/g, (_, p1) => String.fromCharCode(parseInt(p1, 16)));\n}\n\nfunction uint8ToUrlBase64(uint8: Uint8Array) {\n let bin = '';\n uint8.forEach(code => {\n bin += String.fromCharCode(code);\n });\n return binToUrlBase64(bin);\n}\n","import { UserEventsEmit, UserEventsOnReceived } from '@magic-sdk/types';\nimport { TypedEmitter, EventsDefinition, createTypedEmitter } from './events';\n\n/**\n * Extends `Promise` with a polymorphic `this` type to accommodate arbitrary\n * `Promise` API extensions.\n */\ninterface ExtendedPromise<T> extends Promise<T> {\n then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null,\n ): ExtendedPromise<TResult1 | TResult2> & this;\n\n catch<TResult = never>(\n onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null,\n ): ExtendedPromise<T | TResult> & this;\n\n finally(onfinally?: (() => void) | undefined | null): ExtendedPromise<T> & this;\n}\n\n/**\n * A `Promise` and `EventEmitter` all in one!\n */\nexport type PromiEvent<TResult, TEvents extends EventsDefinition = void> = ExtendedPromise<TResult> &\n TypedEmitter<TEvents extends void ? DefaultEvents<TResult> : TEvents & DefaultEvents<TResult>>;\n\n/**\n * Default events attached to every `PromiEvent`.\n */\ntype DefaultEvents<TResult> = {\n done: (result: TResult) => void;\n error: (reason: any) => void;\n settled: () => void;\n [UserEventsEmit.ClosedByUser]: () => void;\n};\n\n/**\n * A `Promise` executor with can be optionally asynchronous.\n */\ntype AsyncPromiseExecutor<TResult> = (\n resolve: (value: TResult | PromiseLike<TResult>) => void,\n reject: (reason?: any) => void,\n) => void | Promise<void>;\n\nconst promiEventBrand = Symbol('isPromiEvent');\n\n/**\n * Returns `true` if the given `value` is a `PromiEvent`.\n */\nexport function isPromiEvent(value: any): value is PromiEvent<any> {\n return !!value[promiEventBrand];\n}\n\n/**\n * Create a native JavaScript `Promise` overloaded with strongly-typed methods\n * from `EventEmitter`.\n */\nexport function createPromiEvent<TResult, TEvents extends EventsDefinition = void>(\n executor: AsyncPromiseExecutor<TResult>,\n): PromiEvent<TResult, TEvents extends void ? DefaultEvents<TResult> : TEvents & DefaultEvents<TResult>> {\n const promise = createPromise(executor);\n const { createBoundEmitterMethod, createChainingEmitterMethod } = createTypedEmitter<\n TEvents & DefaultEvents<TResult>\n >();\n\n // We save the original `Promise` methods to the following symbols so we can\n // access them internally.\n const thenSymbol = Symbol('Promise.then');\n const catchSymbol = Symbol('Promise.catch');\n const finallySymbol = Symbol('Promise.finally');\n\n /**\n * Ensures the next object in the `PromiEvent` chain is overloaded with\n * `EventEmitter` methods.\n */\n const createChainingPromiseMethod =\n (method: typeof thenSymbol | typeof catchSymbol | typeof finallySymbol, source: Promise<any>) =>\n (...args: any[]) => {\n const nextPromise = (source as any)[method].apply(source, args);\n return promiEvent(nextPromise);\n };\n\n /**\n * Builds a `PromiEvent` by assigning `EventEmitter` methods to a native\n * `Promise` object.\n */\n const promiEvent = (source: any) => {\n return Object.assign(source, {\n [promiEventBrand]: true,\n\n [thenSymbol]: source[thenSymbol] || source.then,\n [catchSymbol]: source[catchSymbol] || source.catch,\n [finallySymbol]: source[finallySymbol] || source.finally,\n\n then: createChainingPromiseMethod(thenSymbol, source),\n catch: createChainingPromiseMethod(catchSymbol, source),\n finally: createChainingPromiseMethod(finallySymbol, source),\n\n on: createChainingEmitterMethod('on', source),\n once: createChainingEmitterMethod('once', source),\n addListener: createChainingEmitterMethod('addListener', source),\n\n off: createChainingEmitterMethod('off', source),\n removeListener: createChainingEmitterMethod('removeListener', source),\n removeAllListeners: createChainingEmitterMethod('removeAllListeners', source),\n\n emit: createBoundEmitterMethod('emit'),\n eventNames: createBoundEmitterMethod('eventNames'),\n listeners: createBoundEmitterMethod('listeners'),\n listenerCount: createBoundEmitterMethod('listenerCount'),\n });\n };\n\n const result = promiEvent(\n promise.then(\n (resolved) => {\n // Emit default completion events and resolve result.\n result.emit('done', resolved);\n result.emit('settled');\n return resolved;\n },\n\n (err) => {\n // Emit default error events and re-throw.\n result.emit('error', err);\n result.emit('settled');\n throw err;\n },\n ),\n );\n\n result.on(UserEventsOnReceived.ClosedByUser, () => {\n result.emit(UserEventsEmit.ClosedByUser);\n });\n return result;\n}\n\n/**\n * Creates a `Promise` with an **async executor** that automatically catches\n * errors occurring within the executor. Nesting promises in this way is usually\n * deemed an _anti-pattern_, but it's useful and clean when promisifying the\n * event-based code that's inherent to JSON RPC.\n *\n * So, here we solve the issue of nested promises by ensuring that no errors\n * mistakenly go unhandled!\n */\nexport function createPromise<TResult>(executor: AsyncPromiseExecutor<TResult>) {\n return new Promise<TResult>((resolve, reject) => {\n const result = executor(resolve, reject);\n Promise.resolve(result).catch(reject);\n });\n}\n","import EventEmitter from 'eventemitter3';\n\nexport type EventsDefinition = { [K in string | symbol]: (...args: any[]) => void } | void;\n\n/**\n * An extension of `EventEmitter` (provided by `eventemitter3`) with an adjusted\n * type interface that supports the unique structure of Magic SDK modules.\n */\nexport class TypedEmitter<Events extends EventsDefinition = void> extends EventEmitter<\n Events extends void ? string | symbol : Events\n> {}\n\ntype ChainingMethods = 'on' | 'once' | 'addListener' | 'off' | 'removeListener' | 'removeAllListeners';\ntype NonChainingMethods = 'emit' | 'eventNames' | 'listeners' | 'listenerCount';\n\ntype ReplaceReturnType<T extends (...a: any) => any, TNewReturn> = (...a: Parameters<T>) => TNewReturn;\n\n/**\n * Creates a `TypedEmitter` instance and returns helper functions for easily\n * mixing `TypedEmitter` methods into other objects.\n */\nexport function createTypedEmitter<Events extends EventsDefinition = void>() {\n const emitter = new TypedEmitter<Events>();\n\n const createChainingEmitterMethod = <T1 extends ChainingMethods, T2>(\n method: T1,\n source: T2,\n ): ReplaceReturnType<TypedEmitter[T1], T2> => {\n return (...args: any[]) => {\n (emitter as any)[method].apply(emitter, args);\n return source;\n };\n };\n\n const createBoundEmitterMethod = <T extends NonChainingMethods>(method: T): TypedEmitter[T] => {\n return (...args: any[]) => {\n return (emitter as any)[method].apply(emitter, args);\n };\n };\n\n return {\n emitter,\n createChainingEmitterMethod,\n createBoundEmitterMethod,\n };\n}\n","export function isMajorVersionAtLeast(version: string, majorVersion: number): boolean {\n // Split the version string into major, minor, and patch versions\n const [major] = version.split('.').map(Number);\n\n // Check if the major version is at least the required major version\n return major >= majorVersion;\n}\n","import {\n GetIdTokenConfiguration,\n MagicPayloadMethod,\n MagicUserMetadata,\n GenerateIdTokenConfiguration,\n UserInfo,\n RequestUserInfoScope,\n RecoverAccountConfiguration,\n ShowSettingsConfiguration,\n EnableMFAConfiguration,\n EnableMFAEventEmit,\n EnableMFAEventHandlers,\n DisableMFAConfiguration,\n DisableMFAEventHandlers,\n DisableMFAEventEmit,\n RecencyCheckEventEmit,\n RecoveryFactorEventHandlers,\n RecoveryFactorEventEmit,\n RecoverAccountEventHandlers,\n RecoverAccountEventEmit,\n UpdateEmailEventHandlers,\n UpdateEmailEventEmit,\n} from '@magic-sdk/types';\nimport { getItem, setItem, removeItem } from '../util/storage';\nimport { BaseModule } from './base-module';\nimport { createJsonRpcRequestPayload } from '../core/json-rpc';\nimport { clearDeviceShares } from '../util/device-share-web-crypto';\nimport { createPromiEvent } from '../util';\n\ntype UserLoggedOutCallback = (loggedOut: boolean) => void;\n\nexport class UserModule extends BaseModule {\n public getIdToken(configuration?: GetIdTokenConfiguration) {\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.GetIdTokenTestMode : MagicPayloadMethod.GetIdToken,\n [configuration],\n );\n return this.request<string>(requestPayload);\n }\n\n public generateIdToken(configuration?: GenerateIdTokenConfiguration) {\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.GenerateIdTokenTestMode : MagicPayloadMethod.GenerateIdToken,\n [configuration],\n );\n return this.request<string>(requestPayload);\n }\n\n public getInfo() {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.GetInfo, []);\n return this.request<MagicUserMetadata>(requestPayload);\n }\n\n public isLoggedIn() {\n return createPromiEvent<boolean, any>(async (resolve, reject) => {\n try {\n let cachedIsLoggedIn = false;\n if (this.sdk.useStorageCache) {\n cachedIsLoggedIn = (await getItem(this.localForageIsLoggedInKey)) === 'true';\n\n // if isLoggedIn is true on storage, optimistically resolve with true\n // if it is false, we use `usr.isLoggedIn` as the source of truth.\n if (cachedIsLoggedIn) {\n resolve(true);\n }\n }\n\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.IsLoggedInTestMode : MagicPayloadMethod.IsLoggedIn,\n );\n const isLoggedInResponse = await this.request<boolean>(requestPayload);\n if (this.sdk.useStorageCache) {\n if (isLoggedInResponse) {\n setItem(this.localForageIsLoggedInKey, true);\n } else {\n removeItem(this.localForageIsLoggedInKey);\n }\n if (cachedIsLoggedIn && !isLoggedInResponse) {\n this.emitUserLoggedOut(true);\n }\n }\n resolve(isLoggedInResponse);\n } catch (err) {\n reject(err);\n }\n });\n }\n\n public logout() {\n removeItem(this.localForageIsLoggedInKey);\n clearDeviceShares();\n\n return createPromiEvent<boolean, any>(async (resolve, reject) => {\n try {\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LogoutTestMode : MagicPayloadMethod.Logout,\n );\n const response = await this.request<boolean>(requestPayload);\n if (this.sdk.useStorageCache) {\n this.emitUserLoggedOut(response);\n }\n resolve(response);\n } catch (err) {\n reject(err);\n }\n });\n }\n\n /* Request email address from logged in user */\n public requestInfoWithUI(scope?: RequestUserInfoScope) {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.RequestUserInfoWithUI, scope ? [scope] : []);\n return this.request<UserInfo>(requestPayload);\n }\n\n public showSettings(configuration?: ShowSettingsConfiguration) {\n const { showUI = true } = configuration || {};\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.UserSettingsTestMode : MagicPayloadMethod.UserSettings,\n [configuration],\n );\n const handle = this.request<string | null, RecoveryFactorEventHandlers>(requestPayload);\n if (!showUI && handle) {\n handle.on(RecoveryFactorEventEmit.SendNewPhoneNumber, (phone_number: string) => {\n this.createIntermediaryEvent(\n RecoveryFactorEventEmit.SendNewPhoneNumber,\n requestPayload.id as string,\n )(phone_number);\n });\n handle.on(RecoveryFactorEventEmit.SendOtpCode, (otp: string) => {\n this.createIntermediaryEvent(RecoveryFactorEventEmit.SendOtpCode, requestPayload.id as string)(otp);\n });\n handle.on(RecoveryFactorEventEmit.StartEditPhoneNumber, () => {\n this.createIntermediaryEvent(RecoveryFactorEventEmit.StartEditPhoneNumber, requestPayload.id as string)();\n });\n handle.on(RecoveryFactorEventEmit.Cancel, () => {\n this.createIntermediaryEvent(RecoveryFactorEventEmit.Cancel, requestPayload.id as string)();\n });\n handle.on(RecencyCheckEventEmit.VerifyEmailOtp, (otp: string) => {\n this.createIntermediaryEvent(RecencyCheckEventEmit.VerifyEmailOtp, requestPayload.id as string)(otp);\n });\n }\n return handle;\n }\n\n public recoverAccount(configuration: RecoverAccountConfiguration) {\n const { email, showUI } = configuration;\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.RecoverAccountTestMode : MagicPayloadMethod.RecoverAccount,\n [{ email, showUI }],\n );\n const handle = this.request<string | boolean | null, RecoverAccountEventHandlers & UpdateEmailEventHandlers>(\n requestPayload,\n );\n\n if (!showUI && handle) {\n handle.on(RecoverAccountEventEmit.Cancel, () => {\n this.createIntermediaryEvent(RecoverAccountEventEmit.Cancel, requestPayload.id as string)();\n });\n handle.on(RecoverAccountEventEmit.ResendSms, () => {\n this.createIntermediaryEvent(RecoverAccountEventEmit.ResendSms, requestPayload.id as string)();\n });\n handle.on(RecoverAccountEventEmit.VerifyOtp, (otp: string) => {\n this.createIntermediaryEvent(RecoverAccountEventEmit.VerifyOtp, requestPayload.id as string)(otp);\n });\n handle.on(RecoverAccountEventEmit.UpdateEmail, (newEmail: string) => {\n this.createIntermediaryEvent(RecoverAccountEventEmit.UpdateEmail, requestPayload.id as string)(newEmail);\n });\n\n handle.on(UpdateEmailEventEmit.Cancel, () => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.Cancel, requestPayload.id as string)();\n });\n handle.on(UpdateEmailEventEmit.RetryWithNewEmail, (newEmail?) => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.RetryWithNewEmail, requestPayload.id as string)(newEmail);\n });\n\n handle.on(UpdateEmailEventEmit.VerifyEmailOtp, (otp: string) => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.VerifyEmailOtp, requestPayload.id as string)(otp);\n });\n }\n\n return handle;\n }\n\n public revealPrivateKey() {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.RevealPK);\n return this.request<boolean>(requestPayload);\n }\n\n public onUserLoggedOut(callback: UserLoggedOutCallback): void {\n this.userLoggedOutCallbacks.push(callback);\n }\n\n public enableMFA(configuration: EnableMFAConfiguration) {\n const { showUI = true } = configuration;\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.EnableMFA, [{ showUI }]);\n const handle = this.request<string | boolean | null, EnableMFAEventHandlers>(requestPayload);\n\n if (!showUI && handle) {\n handle.on(EnableMFAEventEmit.VerifyMFACode, (totp: string) => {\n this.createIntermediaryEvent(EnableMFAEventEmit.VerifyMFACode, requestPayload.id as string)(totp);\n });\n\n handle.on(EnableMFAEventEmit.Cancel, () => {\n this.createIntermediaryEvent(EnableMFAEventEmit.Cancel, requestPayload.id as string)();\n });\n }\n return handle;\n }\n\n public disableMFA(configuration: DisableMFAConfiguration) {\n const { showUI = true } = configuration;\n\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.DisableMFA, [{ showUI }]);\n const handle = this.request<string | boolean | null, DisableMFAEventHandlers>(requestPayload);\n\n if (!showUI && handle) {\n handle.on(DisableMFAEventEmit.VerifyMFACode, (totp: string) => {\n this.createIntermediaryEvent(DisableMFAEventEmit.VerifyMFACode, requestPayload.id as string)(totp);\n });\n\n handle.on(DisableMFAEventEmit.LostDevice, (recoveryCode: string) => {\n this.createIntermediaryEvent(DisableMFAEventEmit.LostDevice, requestPayload.id as string)(recoveryCode);\n });\n\n handle.on(DisableMFAEventEmit.Cancel, () => {\n this.createIntermediaryEvent(DisableMFAEventEmit.Cancel, requestPayload.id as string)();\n });\n }\n return handle;\n }\n\n // Private members\n private emitUserLoggedOut(loggedOut: boolean): void {\n this.userLoggedOutCallbacks.forEach(callback => {\n callback(loggedOut);\n });\n }\n\n private localForageIsLoggedInKey = 'magic_auth_is_logged_in';\n private userLoggedOutCallbacks: UserLoggedOutCallback[] = [];\n}\n","import { getItem, iterate, removeItem, setItem } from './storage';\nimport { isWebCryptoSupported } from './web-crypto';\n\nexport const DEVICE_SHARE_KEY = 'ds';\nexport const ENCRYPTION_KEY_KEY = 'ek';\nexport const INITIALIZATION_VECTOR_KEY = 'iv';\n\nconst ALGO_NAME = 'AES-GCM'; // for encryption\nconst ALGO_LENGTH = 256;\n\nexport async function clearDeviceShares() {\n const keysToRemove: string[] = [];\n await iterate((value, key, iterationNumber) => {\n if (key.startsWith(`${DEVICE_SHARE_KEY}_`)) {\n keysToRemove.push(key);\n }\n });\n for (const key of keysToRemove) {\n await removeItem(key);\n }\n}\n\nfunction arrayBufferToBase64(buffer: ArrayBuffer) {\n let binary = '';\n const bytes = new Uint8Array(buffer);\n const len = bytes.byteLength;\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n}\n\nexport function base64ToArrayBuffer(base64: string) {\n const binaryString = window.atob(base64);\n const len = binaryString.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes.buffer;\n}\n\nasync function getOrCreateInitVector() {\n if (!isWebCryptoSupported()) {\n console.info('webcrypto is not supported');\n return undefined;\n }\n const { crypto } = window;\n const existingIv = (await getItem(INITIALIZATION_VECTOR_KEY)) as Uint8Array;\n if (existingIv) {\n return existingIv;\n }\n\n const iv = crypto.getRandomValues(new Uint8Array(12)); // 12 bytes for AES-GCM\n return iv;\n}\n\nasync function getOrCreateEncryptionKey() {\n if (!isWebCryptoSupported()) {\n console.info('webcrypto is not supported');\n return undefined;\n }\n const { subtle } = window.crypto;\n const existingKey = (await getItem(ENCRYPTION_KEY_KEY)) as CryptoKey;\n if (existingKey) {\n return existingKey;\n }\n\n const key = await subtle.generateKey(\n { name: ALGO_NAME, length: ALGO_LENGTH },\n false, // non-extractable\n ['encrypt', 'decrypt'],\n );\n return key;\n}\n\nexport async function encryptAndPersistDeviceShare(deviceShareBase64: string, networkHash: string): Promise<void> {\n const iv = await getOrCreateInitVector();\n const encryptionKey = await getOrCreateEncryptionKey();\n\n if (!iv || !encryptionKey || !deviceShareBase64) {\n return;\n }\n const decodedDeviceShare = base64ToArrayBuffer(deviceShareBase64);\n\n const { subtle } = window.crypto;\n\n const encryptedData = await subtle.encrypt(\n {\n name: ALGO_NAME,\n iv,\n },\n encryptionKey,\n decodedDeviceShare,\n );\n\n // The encrypted device share we store is a base64 encoded string representation\n // of the magic kms encrypted client share encrypted with webcrypto\n const encryptedDeviceShare = arrayBufferToBase64(encryptedData);\n\n await setItem(`${DEVICE_SHARE_KEY}_${networkHash}`, encryptedDeviceShare);\n await setItem(ENCRYPTION_KEY_KEY, encryptionKey);\n await setItem(INITIALIZATION_VECTOR_KEY, iv);\n}\n\nexport async function getDecryptedDeviceShare(networkHash: string): Promise<string | undefined> {\n const encryptedDeviceShare = await getItem<string>(`${DEVICE_SHARE_KEY}_${networkHash}`);\n const iv = (await getItem(INITIALIZATION_VECTOR_KEY)) as Uint8Array; // use existing encryption key and initialization vector\n const encryptionKey = (await getItem(ENCRYPTION_KEY_KEY)) as CryptoKey;\n\n if (!iv || !encryptedDeviceShare || !encryptionKey || !isWebCryptoSupported()) {\n return undefined;\n }\n\n const { subtle } = window.crypto;\n const ab = await subtle.decrypt({ name: ALGO_NAME, iv }, encryptionKey, base64ToArrayBuffer(encryptedDeviceShare));\n\n return arrayBufferToBase64(ab);\n}\n","/**\n * Builds a `URL` object safely.\n */\nexport function createURL(url: string, base?: string): URL {\n // Safari raises an error if `undefined` is given to the second argument of\n // the `URL` constructor.\n return base ? new URL(url, base) : new URL(url);\n}\n","import {\n GasApiResponse,\n MagicPayloadMethod,\n GaslessTransactionRequest,\n ConnectWithUIOptions,\n ConnectWithUiEvents,\n ShowUIPromiEvents,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { createJsonRpcRequestPayload } from '../core/json-rpc';\nimport { createPromiEvent } from '../util';\n\ntype ShowUiConfig = {\n onramperParams?: { [key: string]: string };\n};\n\nexport class WalletModule extends BaseModule {\n /* Prompt Magic's Login Form */\n public connectWithUI(options?: ConnectWithUIOptions) {\n const promiEvent = createPromiEvent<string[], ConnectWithUiEvents>(async (resolve, reject) => {\n try {\n const loginRequestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.Login, [\n {\n enabledWallets: this.sdk.thirdPartyWallets.enabledWallets,\n ...options,\n },\n ]);\n\n const loginRequest = this.request<string[], ConnectWithUiEvents>(loginRequestPayload);\n\n this.sdk.thirdPartyWallets.eventListeners.forEach(({ event, callback }) => {\n loginRequest.on(event, () => callback(loginRequestPayload.id as string));\n });\n\n loginRequest.on('id-token-created' as any, (params: { idToken: string }) => {\n promiEvent.emit('id-token-created', params);\n });\n\n const result = await loginRequest;\n if ((result as any).error) reject(result);\n resolve(result);\n } catch (error) {\n reject(error);\n }\n });\n return promiEvent;\n }\n\n /* Prompt Magic's Wallet UI (not available for users logged in with third party wallets) */\n public showUI(config?: ShowUiConfig) {\n return this.request<boolean, ShowUIPromiEvents>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowUI, [config]));\n }\n\n public showAddress() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowAddress));\n }\n\n public showSendTokensUI() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowSendTokensUI));\n }\n\n public showOnRamp() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowOnRamp));\n }\n\n public showNFTs() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowNFTs));\n }\n\n public showBalances() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowBalances));\n }\n\n public sendGaslessTransaction(address: string, transaction: GaslessTransactionRequest) {\n return this.request<GasApiResponse>(\n createJsonRpcRequestPayload(MagicPayloadMethod.SendGaslessTransaction, [address, transaction]),\n );\n }\n}\n","import {\n JsonRpcRequestPayload,\n LocalStorageKeys,\n MagicPayloadMethod,\n MagicUserMetadata,\n ThirdPartyWalletEvents,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { PromiEvent, createPromiEvent } from '../util';\n\nexport class ThirdPartyWalletsModule extends BaseModule {\n public eventListeners: { event: ThirdPartyWalletEvents; callback: (payloadId: string) => Promise<void> }[] = [];\n public enabledWallets: Record<string, boolean> = {};\n public isConnected = false;\n\n public resetThirdPartyWalletState() {\n localStorage.removeItem(LocalStorageKeys.PROVIDER);\n localStorage.removeItem(LocalStorageKeys.ADDRESS);\n localStorage.removeItem(LocalStorageKeys.CHAIN_ID);\n this.isConnected = false;\n }\n\n public requestOverride(payload: Partial<JsonRpcRequestPayload>) {\n // Handle method overrides if login/getInfo/isLoggedIn/logout\n if (payload.method === MagicPayloadMethod.Login) {\n this.resetThirdPartyWalletState();\n return super.request(payload);\n }\n if (payload.method === MagicPayloadMethod.GetInfo) {\n return this.getInfo(payload);\n }\n if (payload.method === MagicPayloadMethod.IsLoggedIn) {\n return this.isLoggedIn(payload);\n }\n if (payload.method === MagicPayloadMethod.Logout) {\n return this.logout(payload);\n }\n // Route all other requests to 3pw provider\n switch (localStorage.getItem(LocalStorageKeys.PROVIDER)) {\n case 'web3modal':\n return this.web3modalRequest(payload);\n // Fallback to default request\n default:\n this.resetThirdPartyWalletState();\n return super.request(payload);\n }\n }\n\n /* Core Method Overrides */\n\n private isLoggedIn(payload: Partial<JsonRpcRequestPayload>): PromiEvent<boolean> {\n switch (localStorage.getItem(LocalStorageKeys.PROVIDER)) {\n case 'web3modal':\n return this.web3modalIsLoggedIn();\n default:\n this.resetThirdPartyWalletState();\n return super.request(payload);\n }\n }\n\n private getInfo(payload: Partial<JsonRpcRequestPayload>): PromiEvent<MagicUserMetadata> {\n switch (localStorage.getItem(LocalStorageKeys.PROVIDER)) {\n case 'web3modal':\n return this.web3modalGetInfo();\n default:\n this.resetThirdPartyWalletState();\n return super.request(payload);\n }\n }\n\n private logout(payload: Partial<JsonRpcRequestPayload>): PromiEvent<boolean> {\n const provider = localStorage.getItem(LocalStorageKeys.PROVIDER);\n this.resetThirdPartyWalletState();\n switch (provider) {\n case 'web3modal': {\n return this.web3modalLogout();\n }\n default:\n return super.request(payload);\n }\n }\n\n /* Web3Modal Methods */\n\n private web3modalRequest(payload: Partial<JsonRpcRequestPayload>) {\n return createPromiEvent<unknown>((resolve, reject) => {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n this.sdk.web3modal.modal.getWalletProvider().request(payload).then(resolve).catch(reject);\n });\n }\n\n private web3modalIsLoggedIn() {\n return createPromiEvent<boolean>(resolve => {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n const walletStatus = this.sdk.web3modal.modal.getStatus();\n if (walletStatus === 'connected') {\n resolve(true);\n }\n if (walletStatus === 'disconnected') {\n this.resetThirdPartyWalletState();\n resolve(false);\n }\n if (walletStatus === 'reconnecting') {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n const unsubscribeFromProviderEvents = this.sdk.web3modal.modal.subscribeProvider(({ status }) => {\n if (status === 'connected') {\n unsubscribeFromProviderEvents();\n resolve(true);\n }\n if (status === 'disconnected') {\n unsubscribeFromProviderEvents();\n this.resetThirdPartyWalletState();\n resolve(false);\n }\n });\n }\n });\n }\n\n private formatWeb3modalGetInfoResponse() {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n const walletType = this.sdk.web3modal.modal.getWalletInfo()?.name;\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n const userAddress = this.sdk.web3modal.modal.getAddress();\n return {\n publicAddress: userAddress as string,\n email: null,\n issuer: `did:ethr:${userAddress}`,\n phoneNumber: null,\n isMfaEnabled: false,\n recoveryFactors: [] as [],\n walletType: walletType || 'web3modal',\n firstLoginAt: null,\n };\n }\n\n private web3modalGetInfo() {\n return createPromiEvent<MagicUserMetadata>((resolve, reject) => {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n const walletStatus = this.sdk.web3modal.modal.getStatus();\n if (walletStatus === 'connected') {\n resolve(this.formatWeb3modalGetInfoResponse());\n }\n\n if (walletStatus === 'disconnected') {\n this.resetThirdPartyWalletState();\n reject('Magic RPC Error: [-32603] Internal error: User denied account access.');\n }\n\n if (walletStatus === 'reconnecting') {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n const unsubscribeFromProviderEvents = this.sdk.web3modal.modal.subscribeProvider(({ status }) => {\n if (status === 'connected') {\n unsubscribeFromProviderEvents();\n resolve(this.formatWeb3modalGetInfoResponse());\n }\n if (status === 'disconnected') {\n unsubscribeFromProviderEvents();\n this.resetThirdPartyWalletState();\n reject('Magic RPC Error: [-32603] Internal error: User denied account access.');\n }\n });\n }\n });\n }\n\n private web3modalLogout(): PromiEvent<boolean> {\n return createPromiEvent<boolean>(async resolve => {\n try {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n await this.sdk.web3modal.modal.disconnect();\n } catch (error) {\n console.error(error);\n }\n resolve(true);\n });\n }\n}\n","import {\n JsonRpcRequestPayload,\n JsonRpcRequestCallback,\n MagicOutgoingWindowMessage,\n JsonRpcBatchRequestCallback,\n JsonRpcResponsePayload,\n ProviderEnableEvents,\n MagicPayloadMethod,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { createInvalidArgumentError, MagicRPCError, createSynchronousWeb3MethodWarning } from '../core/sdk-exceptions';\nimport { createJsonRpcRequestPayload, standardizeJsonRpcRequestPayload, JsonRpcResponse } from '../core/json-rpc';\nimport { PromiEvent } from '../util/promise-tools';\nimport { createTypedEmitter, EventsDefinition, TypedEmitter } from '../util/events';\n\nconst { createBoundEmitterMethod, createChainingEmitterMethod } = createTypedEmitter();\n\n/** */\nexport class RPCProviderModule extends BaseModule implements TypedEmitter {\n // Implements EIP 1193:\n // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1193.md\n\n public readonly isMagic = true;\n\n public sendAsync(payload: Partial<JsonRpcRequestPayload>, onRequestComplete: JsonRpcRequestCallback): void;\n public sendAsync(payload: Partial<JsonRpcRequestPayload>[], onRequestComplete: JsonRpcBatchRequestCallback): void;\n public sendAsync(\n payload: Partial<JsonRpcRequestPayload> | Partial<JsonRpcRequestPayload>[],\n onRequestComplete: JsonRpcRequestCallback | JsonRpcBatchRequestCallback,\n ): void;\n\n public sendAsync(\n payload: Partial<JsonRpcRequestPayload> | Partial<JsonRpcRequestPayload>[],\n onRequestComplete: JsonRpcRequestCallback | JsonRpcBatchRequestCallback,\n ): void {\n if (!onRequestComplete) {\n throw createInvalidArgumentError({\n procedure: 'Magic.rpcProvider.sendAsync',\n argument: 1,\n expected: 'function',\n received: onRequestComplete === null ? 'null' : typeof onRequestComplete,\n });\n }\n\n if (Array.isArray(payload)) {\n this.overlay\n .post(\n MagicOutgoingWindowMessage.MAGIC_HANDLE_REQUEST,\n payload.map(p => {\n const standardizedPayload = standardizeJsonRpcRequestPayload(p);\n this.prefixPayloadMethodForTestMode(standardizedPayload);\n return standardizedPayload;\n }),\n )\n .then(batchResponse => {\n (onRequestComplete as JsonRpcBatchRequestCallback)(\n null,\n batchResponse.map(response => ({\n ...response.payload,\n error: response.hasError ? new MagicRPCError(response.payload.error) : null,\n })),\n );\n });\n } else {\n const finalPayload = standardizeJsonRpcRequestPayload(payload);\n this.prefixPayloadMethodForTestMode(finalPayload);\n this.overlay.post(MagicOutgoingWindowMessage.MAGIC_HANDLE_REQUEST, finalPayload).then(response => {\n (onRequestComplete as JsonRpcRequestCallback)(\n response.hasError ? new MagicRPCError(response.payload.error) : null,\n response.payload,\n );\n });\n }\n }\n\n public send<ResultType = any>(method: string, params?: any[]): PromiEvent<ResultType>;\n public send(\n payload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n onRequestComplete: JsonRpcRequestCallback,\n ): void;\n public send<ResultType>(payload: JsonRpcRequestPayload, none: void): JsonRpcResponsePayload<ResultType>;\n\n public send<ResultType = any>(\n payloadOrMethod: string | JsonRpcRequestPayload | JsonRpcRequestPayload[],\n onRequestCompleteOrParams: JsonRpcRequestCallback | any[] | void,\n ): PromiEvent<ResultType> | JsonRpcResponsePayload<ResultType> | void {\n // Case #1\n // Web3 >= 1.0.0-beta.38 calls `send` with method and parameters.\n if (typeof payloadOrMethod === 'string') {\n const payload = createJsonRpcRequestPayload(\n payloadOrMethod,\n Array.isArray(onRequestCompleteOrParams) ? onRequestCompleteOrParams : [],\n );\n return this.request(payload) as any;\n }\n\n // Case #2\n // Web3 <= 1.0.0-beta.37 uses `send` with a callback for async queries.\n if (Array.isArray(payloadOrMethod) || !!onRequestCompleteOrParams) {\n this.sendAsync(payloadOrMethod, onRequestCompleteOrParams as any);\n return;\n }\n\n // Case #3\n // Legacy synchronous methods (unsupported).\n const warning = createSynchronousWeb3MethodWarning();\n warning.log();\n return new JsonRpcResponse(payloadOrMethod).applyError({\n code: -32603,\n message: warning.rawMessage,\n }).payload;\n }\n\n public enable() {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.Login);\n return this.request<string[], ProviderEnableEvents>(requestPayload);\n }\n\n /**\n * Here, we wrap `BaseModule.request` with an additional check\n * to determine if the RPC method requires a test-mode prefix.\n */\n protected request<ResultType = any, Events extends EventsDefinition = void>(payload: Partial<JsonRpcRequestPayload>) {\n this.prefixPayloadMethodForTestMode(payload);\n return super.request<ResultType, Events>(payload);\n }\n\n /**\n * Prefixes Ethereum RPC methods with a `testMode` identifier. This is done so\n * that Magic's <iframe> can handle signing methods using test-specific keys.\n */\n private prefixPayloadMethodForTestMode(payload: Partial<JsonRpcRequestPayload>) {\n const testModePrefix = 'testMode/eth/';\n\n // In test mode, we prefix all RPC methods with `test/` so that the\n // Magic <iframe> can handle them without requiring network calls.\n if (this.sdk.testMode) {\n payload.method = `${testModePrefix}${payload.method}`;\n }\n }\n\n public on = createChainingEmitterMethod('on', this);\n public once = createChainingEmitterMethod('once', this);\n public addListener = createChainingEmitterMethod('addListener', this);\n\n public off = createChainingEmitterMethod('off', this);\n public removeListener = createChainingEmitterMethod('removeListener', this);\n public removeAllListeners = createChainingEmitterMethod('removeAllListeners', this);\n\n public emit = createBoundEmitterMethod('emit');\n public eventNames = createBoundEmitterMethod('eventNames');\n public listeners = createBoundEmitterMethod('listeners');\n public listenerCount = createBoundEmitterMethod('listenerCount');\n}\n","import {\n MagicPayloadMethod,\n NFTCheckoutRequest,\n NFTCheckoutResponse,\n NFTCheckoutEvents,\n NFTPurchaseRequest,\n NFTPurchaseResponse,\n NFTTransferRequest,\n NFTTransferResponse,\n NftCheckoutIntermediaryEvents,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { createJsonRpcRequestPayload } from '../core/json-rpc';\n\nexport class NFTModule extends BaseModule {\n /* Start an NFT Purchase flow with Sardine */\n public purchase(options: NFTPurchaseRequest) {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.NFTPurchase, [options]);\n return this.request<NFTPurchaseResponse>(requestPayload);\n }\n\n /* Start an NFT Checkout flow with Paypal */\n public checkout(options: NFTCheckoutRequest) {\n const isThirdPartyWalletConnected = this.sdk.thirdPartyWallets.isConnected;\n\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.NFTCheckout, [\n {\n ...options,\n walletProvider: isThirdPartyWalletConnected ? 'web3modal' : 'magic',\n },\n ]);\n const promiEvent = this.request<NFTCheckoutResponse, NFTCheckoutEvents>(requestPayload);\n\n if (isThirdPartyWalletConnected) {\n promiEvent.on(NftCheckoutIntermediaryEvents.Initiated, async (rawTransaction) => {\n try {\n const hash = await this.request({\n method: 'eth_sendTransaction',\n params: [rawTransaction],\n });\n this.createIntermediaryEvent(NftCheckoutIntermediaryEvents.Success, requestPayload.id as string)(hash);\n } catch (error) {\n this.createIntermediaryEvent(NftCheckoutIntermediaryEvents.Failure, requestPayload.id as string)();\n }\n });\n promiEvent.on(NftCheckoutIntermediaryEvents.Disconnect, () => {\n this.sdk.thirdPartyWallets.resetThirdPartyWalletState();\n promiEvent.emit('disconnect');\n });\n }\n return promiEvent;\n }\n\n /* Start an NFT Transfer flow */\n public transfer(options: NFTTransferRequest) {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.NFTTransfer, [options]);\n return this.request<NFTTransferResponse>(requestPayload);\n }\n}\n","import { EthNetworkConfiguration, QueryParameters, SupportedLocale } from '@magic-sdk/types';\nimport { coerce, satisfies } from '../util/semver';\nimport { encodeJSON } from '../util/base64-json';\nimport {\n createMissingApiKeyError,\n createReactNativeEndpointConfigurationWarning,\n createIncompatibleExtensionsError,\n} from './sdk-exceptions';\nimport { AuthModule } from '../modules/auth';\nimport { UserModule } from '../modules/user';\nimport { WalletModule } from '../modules/wallet';\nimport { ThirdPartyWalletsModule } from '../modules/third-party-wallets';\nimport { RPCProviderModule } from '../modules/rpc-provider';\nimport { ViewController } from './view-controller';\nimport { createURL } from '../util/url';\nimport { BaseExtension } from '../modules/base-extension';\nimport { isEmpty } from '../util/type-guards';\nimport { SDKEnvironment, sdkNameToEnvName } from './sdk-environment';\nimport { NFTModule } from '../modules/nft';\n\n/**\n * Checks if the given `ext` is compatible with the platform & version of Magic\n * SDK currently in use.\n */\nfunction checkExtensionCompat(ext: BaseExtension<string>) {\n if (ext.compat && ext.compat[SDKEnvironment.sdkName] != null) {\n return typeof ext.compat[SDKEnvironment.sdkName] === 'string'\n ? satisfies(coerce(SDKEnvironment.version), ext.compat[SDKEnvironment.sdkName] as string)\n : !!ext.compat[SDKEnvironment.sdkName];\n }\n\n // To gracefully support older extensions, we assume\n // compatibility when the `compat` field is missing.\n return true;\n}\n\n/**\n * Generates a network hash of the SDK instance for persisting network specific\n * information on multichain setups\n */\nfunction getNetworkHash(apiKey: string, network?: EthNetworkConfiguration, extConfig?: any) {\n if (!network && !extConfig) {\n return `${apiKey}_eth_mainnet`;\n }\n if (extConfig) {\n return `${apiKey}_${JSON.stringify(extConfig)}`;\n }\n if (network) {\n if (typeof network === 'string') {\n return `${apiKey}_eth_${network}`;\n }\n // Custom network, not necessarily eth.\n return `${apiKey}_${network.rpcUrl}_${network.chainId}_${network.chainType}`;\n }\n return `${apiKey}_unknown`;\n}\n\n/**\n * Initializes SDK extensions, checks for platform/version compatibility issues,\n * then consolidates any global configurations provided by those extensions.\n */\nfunction prepareExtensions(this: SDKBase, options?: MagicSDKAdditionalConfiguration): Record<string, any> {\n const extensions: BaseExtension<string>[] | { [key: string]: BaseExtension<string> } = options?.extensions ?? [];\n const extConfig: any = {};\n const incompatibleExtensions: BaseExtension<string>[] = [];\n\n if (Array.isArray(extensions)) {\n extensions.forEach(ext => {\n if (checkExtensionCompat(ext)) {\n ext.init(this);\n if (ext.name) {\n // Only apply extensions with a known, defined `name` parameter.\n (this as any)[ext.name] = ext;\n }\n if (!isEmpty(ext.config)) extConfig[ext.name] = ext.config;\n } else {\n incompatibleExtensions.push(ext);\n }\n });\n } else {\n Object.keys(extensions).forEach(name => {\n if (checkExtensionCompat(extensions[name])) {\n extensions[name].init(this);\n const ext = extensions[name];\n (this as any)[name] = ext;\n if (!isEmpty(ext.config)) extConfig[extensions[name].name] = ext.config;\n } else {\n incompatibleExtensions.push(extensions[name]);\n }\n });\n }\n\n if (incompatibleExtensions.length) {\n throw createIncompatibleExtensionsError(incompatibleExtensions);\n }\n\n return extConfig;\n}\n\nexport type MagicSDKExtensionsOption<TCustomExtName extends string = string> =\n | BaseExtension<string>[]\n | { [P in TCustomExtName]: BaseExtension<string> };\n\nexport interface MagicSDKAdditionalConfiguration<\n TCustomExtName extends string = string,\n TExt extends MagicSDKExtensionsOption<TCustomExtName> = any,\n> {\n endpoint?: string;\n locale?: SupportedLocale;\n network?: EthNetworkConfiguration;\n extensions?: TExt;\n testMode?: boolean;\n deferPreload?: boolean;\n useStorageCache?: boolean;\n meta?: any; // Generic field for clients to add metadata\n authConfig?: { skipDIDToken: boolean }; // Skip DID Token generation\n}\n\nexport class SDKBase {\n private static readonly __overlays__: Map<string, ViewController> = new Map();\n\n protected readonly endpoint: string;\n protected readonly parameters: string;\n protected readonly networkHash: string;\n public readonly testMode: boolean;\n public readonly useStorageCache: boolean;\n\n /**\n * Contains methods for starting a Magic SDK authentication flow.\n */\n public readonly auth: AuthModule;\n\n /**\n * Contains methods for interacting with user data, checking login\n * status, generating cryptographically-secure ID tokens, and more.\n */\n public readonly user: UserModule;\n\n /**\n * Contains methods previously under the `ConnectExtension`, including\n * login, show wallet UI, request user info, and more.\n */\n public readonly wallet: WalletModule;\n\n /**\n * Contains methods for interacting with NFTs, including purchase.\n */\n public readonly nft: NFTModule;\n\n /**\n * Contains internal methods for third-party wallets.\n */\n public thirdPartyWallets: ThirdPartyWalletsModule;\n\n /**\n * Contains a Web3-compliant provider. Pass this module to your Web3/Ethers\n * instance for automatic compatibility with Ethereum methods.\n */\n public readonly rpcProvider: RPCProviderModule;\n\n /**\n * Creates an instance of Magic SDK.\n */\n constructor(\n public readonly apiKey: string,\n options?: MagicSDKAdditionalConfiguration,\n ) {\n if (!apiKey) throw createMissingApiKeyError();\n\n if (SDKEnvironment.platform === 'react-native' && options?.endpoint) {\n createReactNativeEndpointConfigurationWarning().log();\n }\n\n const { defaultEndpoint, version } = SDKEnvironment;\n this.testMode = !!options?.testMode;\n this.useStorageCache = !!options?.useStorageCache;\n this.endpoint = createURL(options?.endpoint ?? defaultEndpoint).origin;\n\n // Prepare built-in modules\n this.auth = new AuthModule(this);\n this.user = new UserModule(this);\n this.wallet = new WalletModule(this);\n this.nft = new NFTModule(this);\n this.thirdPartyWallets = new ThirdPartyWalletsModule(this);\n this.rpcProvider = new RPCProviderModule(this) as any;\n\n // Prepare extensions\n const extConfig: any = prepareExtensions.call(this, options);\n\n // Encode parameters as base64-JSON\n this.parameters = encodeJSON<QueryParameters>({\n API_KEY: this.apiKey,\n DOMAIN_ORIGIN: typeof window !== 'undefined' && window?.location ? window?.location.origin : '',\n ETH_NETWORK: options?.network,\n host: createURL(this.endpoint).host,\n sdk: sdkNameToEnvName[SDKEnvironment.sdkName],\n version,\n ext: isEmpty(extConfig) ? undefined : extConfig,\n locale: options?.locale || 'en_US',\n authConfig: options?.authConfig ? { ...options.authConfig } : undefined,\n ...(SDKEnvironment.bundleId ? { bundleId: SDKEnvironment.bundleId } : {}),\n meta: options?.meta,\n });\n this.networkHash = getNetworkHash(this.apiKey, options?.network, isEmpty(extConfig) ? undefined : extConfig);\n if (!options?.deferPreload) this.preload();\n }\n\n /**\n * Represents the view controller associated with this `MagicSDK` instance.\n */\n protected get overlay(): ViewController {\n if (!SDKBase.__overlays__.has(this.parameters)) {\n const controller = new SDKEnvironment.ViewController(this.endpoint, this.parameters, this.networkHash);\n\n // @ts-ignore - We don't want to expose this method to the user, but we\n // need to invoke in here so that the `ViewController` is ready for use.\n controller.init();\n\n SDKBase.__overlays__.set(this.parameters, controller);\n }\n\n return SDKBase.__overlays__.get(this.parameters)!;\n }\n\n /**\n * Preloads the Magic view, allowing for faster initial requests in browser\n * environments. Awaiting the returned promise will signal when the Magic view\n * has completed loading and is ready for requests.\n */\n public async preload() {\n await this.overlay.waitForReady();\n }\n}\n","import {\n MagicIncomingWindowMessage,\n MagicOutgoingWindowMessage,\n JsonRpcRequestPayload,\n MagicMessageEvent,\n MagicMessageRequest,\n SDKWarningCode,\n} from '@magic-sdk/types';\nimport { JsonRpcResponse } from './json-rpc';\nimport { createPromise } from '../util/promise-tools';\nimport { MagicSDKWarning, createModalNotReadyError } from './sdk-exceptions';\nimport { clearDeviceShares, encryptAndPersistDeviceShare } from '../util/device-share-web-crypto';\nimport {\n createMagicRequest,\n persistMagicEventRefreshToken,\n standardizeResponse,\n debounce,\n} from '../util/view-controller-utils';\n\ninterface RemoveEventListenerFunction {\n (): void;\n}\n\nconst SECOND = 1000;\nconst MINUTE = 60 * SECOND;\nconst PING_INTERVAL = 5 * MINUTE; // 5 minutes\nconst INITIAL_HEARTBEAT_DELAY = 60 * MINUTE; // 1 hour\n\nexport abstract class ViewController {\n public isReadyForRequest = false;\n protected readonly messageHandlers = new Set<(event: MagicMessageEvent) => any>();\n protected isConnectedToInternet = true;\n protected lastPongTime: null | number = null;\n protected heartbeatIntervalTimer: ReturnType<typeof setInterval> | null = null;\n /* istanbul ignore next */\n protected heartbeatDebounce = debounce(() => {\n // Only do this for web now\n if (this.endpoint === 'https://auth.magic.link/') {\n this.heartBeatCheck();\n }\n }, INITIAL_HEARTBEAT_DELAY);\n\n /**\n * Create an instance of `ViewController`\n *\n * @param endpoint - The URL for the relevant iframe context.\n * @param parameters - The unique, encoded query parameters for the\n * relevant iframe context.\n * @param networkHash - The hash of the network that this sdk instance is connected to\n * for multi-chain scenarios\n */\n constructor(\n protected readonly endpoint: string,\n protected readonly parameters: string,\n protected readonly networkHash: string,\n ) {\n this.listen();\n }\n\n protected abstract init(): void;\n protected abstract _post(data: MagicMessageRequest): Promise<void>;\n protected abstract hideOverlay(): void;\n protected abstract showOverlay(): void;\n protected abstract checkRelayerExistsInDOM(): Promise<boolean>;\n protected abstract reloadRelayer(): Promise<void>;\n\n /**\n * Send a payload to the Magic `<iframe>` for processing and automatically\n * handle the acknowledging follow-up event(s).\n *\n * @param msgType - The type of message to encode with the data.\n * @param payload - The JSON RPC payload to emit via `window.postMessage`.\n */\n public async post<ResultType = any>(\n msgType: MagicOutgoingWindowMessage,\n payload: JsonRpcRequestPayload[],\n ): Promise<JsonRpcResponse<ResultType>[]>;\n\n public async post<ResultType = any>(\n msgType: MagicOutgoingWindowMessage,\n payload: JsonRpcRequestPayload,\n ): Promise<JsonRpcResponse<ResultType>>;\n\n public async post<ResultType = any>(\n msgType: MagicOutgoingWindowMessage,\n payload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n ): Promise<JsonRpcResponse<ResultType> | JsonRpcResponse<ResultType>[]> {\n return createPromise(async (resolve, reject) => {\n if (!this.isConnectedToInternet) {\n const error = createModalNotReadyError();\n reject(error);\n }\n\n if (!(await this.checkRelayerExistsInDOM())) {\n this.isReadyForRequest = false;\n await this.reloadRelayer();\n }\n\n if (!this.isReadyForRequest) {\n await this.waitForReady();\n }\n\n const batchData: JsonRpcResponse[] = [];\n const batchIds = Array.isArray(payload) ? payload.map(p => p.id) : [];\n const msg = await createMagicRequest(`${msgType}-${this.parameters}`, payload, this.networkHash);\n\n await this._post(msg);\n\n /**\n * Collect successful RPC responses and resolve.\n */\n const acknowledgeResponse = (removeEventListener: RemoveEventListenerFunction) => (event: MagicMessageEvent) => {\n const { id, response } = standardizeResponse(payload, event);\n persistMagicEventRefreshToken(event);\n if (response?.payload.error?.message === 'User denied account access.') {\n clearDeviceShares();\n } else if (event.data.deviceShare) {\n const { deviceShare } = event.data;\n encryptAndPersistDeviceShare(deviceShare, this.networkHash);\n }\n if (id && response && Array.isArray(payload) && batchIds.includes(id)) {\n batchData.push(response);\n\n // For batch requests, we wait for all responses before resolving.\n if (batchData.length === payload.length) {\n removeEventListener();\n resolve(batchData);\n }\n } else if (id && response && !Array.isArray(payload) && id === payload.id) {\n removeEventListener();\n resolve(response);\n }\n };\n\n // Listen for and handle responses.\n const removeResponseListener = this.on(\n MagicIncomingWindowMessage.MAGIC_HANDLE_RESPONSE,\n acknowledgeResponse(() => removeResponseListener()),\n );\n });\n }\n\n /**\n * Listen for events received with the given `msgType`.\n *\n * @param msgType - The `msgType` encoded with the event data.\n * @param handler - A handler function to execute on each event received.\n * @return A `void` function to remove the attached event.\n */\n public on(\n msgType: MagicIncomingWindowMessage,\n handler: (this: Window, event: MagicMessageEvent) => any,\n ): RemoveEventListenerFunction {\n const boundHandler = handler.bind(window);\n\n // We cannot effectively cover this function because it never gets reference\n // by value. The functionality of this callback is tested within\n // `initMessageListener`.\n /* istanbul ignore next */\n const listener = (event: MagicMessageEvent) => {\n if (event.data.msgType === `${msgType}-${this.parameters}`) boundHandler(event);\n };\n\n this.messageHandlers.add(listener);\n return () => this.messageHandlers.delete(listener);\n }\n\n waitForReady() {\n return new Promise<void>(resolve => {\n const unsubscribe = this.on(MagicIncomingWindowMessage.MAGIC_OVERLAY_READY, () => {\n this.isReadyForRequest = true;\n resolve();\n unsubscribe();\n });\n });\n }\n\n /**\n * Listen for messages sent from the underlying Magic `<WebView>`.\n */\n private listen() {\n this.on(MagicIncomingWindowMessage.MAGIC_HIDE_OVERLAY, () => {\n this.hideOverlay();\n });\n\n this.on(MagicIncomingWindowMessage.MAGIC_SHOW_OVERLAY, () => {\n this.showOverlay();\n });\n\n this.on(MagicIncomingWindowMessage.MAGIC_SEND_PRODUCT_ANNOUNCEMENT, (event: MagicMessageEvent) => {\n if (event.data.response.result.product_announcement) {\n new MagicSDKWarning(SDKWarningCode.ProductAnnouncement, event.data.response.result.product_announcement).log();\n }\n });\n }\n\n /**\n * Sends periodic pings to check the connection.\n * If no pong is received or it’s stale, the iframe is reloaded.\n */\n /* istanbul ignore next */\n private heartBeatCheck() {\n let firstPing = true;\n\n // Helper function to send a ping message.\n const sendPing = async () => {\n const message = {\n msgType: `${MagicOutgoingWindowMessage.MAGIC_PING}-${this.parameters}`,\n payload: [],\n };\n await this._post(message);\n };\n\n this.heartbeatIntervalTimer = setInterval(async () => {\n // If no pong has ever been received.\n if (!this.lastPongTime) {\n if (!firstPing) {\n // On subsequent ping with no previous pong response, reload the iframe.\n this.reloadRelayer();\n firstPing = true;\n return;\n }\n } else {\n // If we have a pong, check how long ago it was received.\n const timeSinceLastPong = Date.now() - this.lastPongTime;\n if (timeSinceLastPong > PING_INTERVAL * 2) {\n // If the pong is too stale, reload the iframe.\n this.reloadRelayer();\n firstPing = true;\n return;\n }\n }\n\n // Send a new ping message and update the counter.\n await sendPing();\n firstPing = false;\n }, PING_INTERVAL);\n }\n\n // Debounce revival mechanism\n // Kill any existing PingPong interval\n /* istanbul ignore next */\n protected stopHeartBeat() {\n this.heartbeatDebounce();\n this.lastPongTime = null;\n\n if (this.heartbeatIntervalTimer) {\n clearInterval(this.heartbeatIntervalTimer);\n this.heartbeatIntervalTimer = null;\n }\n }\n}\n","import { JsonRpcResponse } from '../core/json-rpc';\nimport { JsonRpcRequestPayload, MagicMessageEvent } from '@magic-sdk/types';\nimport { getItem, setItem } from './storage';\nimport { SDKEnvironment } from '../core/sdk-environment';\nimport { getDecryptedDeviceShare } from './device-share-web-crypto';\nimport { createJwt } from './web-crypto';\n\ninterface StandardizedResponse {\n id?: string | number;\n response?: JsonRpcResponse;\n}\n\ninterface StandardizedMagicRequest {\n msgType: string;\n payload: JsonRpcRequestPayload | JsonRpcRequestPayload[];\n jwt?: string;\n rt?: string;\n deviceShare?: string;\n}\n\n/**\n * Get the originating payload from a batch request using the specified `id`.\n */\nexport function getRequestPayloadFromBatch(\n requestPayload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n id?: string | number | null,\n): JsonRpcRequestPayload | undefined {\n return id && Array.isArray(requestPayload)\n ? requestPayload.find(p => p.id === id)\n : (requestPayload as JsonRpcRequestPayload);\n}\n\n/**\n * Ensures the incoming response follows the expected schema and parses for a\n * JSON RPC payload ID.\n */\nexport function standardizeResponse(\n requestPayload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n event: MagicMessageEvent,\n): StandardizedResponse {\n const id = event.data.response?.id;\n const requestPayloadResolved = getRequestPayloadFromBatch(requestPayload, id);\n\n if (id && requestPayloadResolved) {\n // Build a standardized response object\n const response = new JsonRpcResponse(requestPayloadResolved)\n .applyResult(event.data.response.result)\n .applyError(event.data.response.error);\n\n return { id, response };\n }\n\n return {};\n}\n\nexport async function createMagicRequest(\n msgType: string,\n payload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n networkHash: string,\n) {\n const rt = await getItem<string>('rt');\n let jwt;\n\n // only for webcrypto platforms\n if (SDKEnvironment.platform === 'web') {\n try {\n jwt = (await getItem<string>('jwt')) ?? (await createJwt());\n } catch (e) {\n console.error('webcrypto error', e);\n }\n }\n\n const request: StandardizedMagicRequest = { msgType, payload };\n\n if (jwt) {\n request.jwt = jwt;\n }\n if (jwt && rt) {\n request.rt = rt;\n }\n\n // Grab the device share if it exists for the network\n const decryptedDeviceShare = await getDecryptedDeviceShare(networkHash);\n if (decryptedDeviceShare) {\n request.deviceShare = decryptedDeviceShare;\n }\n\n return request;\n}\n\nexport async function persistMagicEventRefreshToken(event: MagicMessageEvent) {\n if (!event.data.rt) {\n return;\n }\n\n await setItem('rt', event.data.rt);\n}\n\nexport function debounce<T extends (...args: unknown[]) => void>(func: T, delay: number) {\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n return function (...args: Parameters<T>): void {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n timeoutId = setTimeout(() => {\n func(...args);\n }, delay);\n };\n}\n","import { createJsonRpcRequestPayload, standardizeJsonRpcRequestPayload } from '../core/json-rpc';\nimport { BaseModule } from './base-module';\nimport { SDKBase, MagicSDKAdditionalConfiguration, MagicSDKExtensionsOption } from '../core/sdk';\nimport { createExtensionNotInitializedError, MagicExtensionError, MagicExtensionWarning } from '../core/sdk-exceptions';\nimport { createPromiEvent, encodeJSON, decodeJSON, storage, isPromiEvent } from '../util';\nimport { MagicPayloadMethod } from '@magic-sdk/types';\n\nconst sdkAccessFields = ['request', 'overlay', 'sdk'];\n\n/**\n * From the `BaseExtension`-derived instance, get the prototype\n * chain up to and including the `BaseModule` class.\n */\nfunction getPrototypeChain<T extends BaseExtension<string>>(instance: T) {\n let currentProto = Object.getPrototypeOf(instance);\n const protos = [currentProto];\n\n while (currentProto !== BaseModule.prototype) {\n currentProto = Object.getPrototypeOf(currentProto);\n protos.push(currentProto);\n }\n\n return protos;\n}\n\nexport abstract class BaseExtension<TName extends string, TConfig extends any = any> extends BaseModule {\n /**\n * A structure describing the platform and version compatibility of this\n * extension.\n */\n compat?: {\n 'magic-sdk': boolean | string;\n '@magic-sdk/react-native': boolean | string;\n '@magic-sdk/react-native-bare': boolean | string;\n '@magic-sdk/react-native-expo': boolean | string;\n };\n\n public abstract readonly name: TName;\n public abstract readonly config: TConfig;\n\n private __sdk_access_field_descriptors__ = new Map<\n string,\n { descriptor: PropertyDescriptor; isPrototypeField: boolean }\n >();\n private __is_initialized__ = false;\n\n protected utils = {\n createPromiEvent,\n isPromiEvent,\n encodeJSON,\n decodeJSON,\n createJsonRpcRequestPayload,\n standardizeJsonRpcRequestPayload,\n storage,\n };\n\n constructor() {\n super(undefined as any);\n\n // Disallow SDK access before initialization...\n\n const allSources = [this, ...getPrototypeChain(this)];\n\n sdkAccessFields.forEach(prop => {\n const allDescriptors = allSources.map(source => Object.getOwnPropertyDescriptor(source, prop));\n const sourceIndex = allDescriptors.findIndex(x => Boolean(x));\n const isPrototypeField = sourceIndex > 0;\n const descriptor = allDescriptors[sourceIndex];\n\n /* istanbul ignore else */\n if (descriptor) {\n this.__sdk_access_field_descriptors__.set(prop, { descriptor, isPrototypeField });\n\n Object.defineProperty(this, prop, {\n configurable: true,\n get: () => {\n throw createExtensionNotInitializedError(prop);\n },\n });\n }\n });\n }\n\n /**\n * Registers a Magic SDK instance with this Extension.\n *\n * @internal\n */\n public init(sdk: SDKBase) {\n if (this.__is_initialized__) return;\n\n // Replace original property descriptors\n // for SDK access fields post-initialization.\n sdkAccessFields.forEach(prop => {\n /* istanbul ignore else */\n if (this.__sdk_access_field_descriptors__.has(prop)) {\n const { descriptor, isPrototypeField } = this.__sdk_access_field_descriptors__.get(prop)!;\n\n if (isPrototypeField) {\n // For prototype fields, we just need the `delete` operator so that\n // the instance will fallback to the prototype chain itself.\n delete this[prop as keyof this];\n } else {\n Object.defineProperty(this, prop, descriptor);\n }\n }\n });\n\n this.sdk = sdk;\n this.__is_initialized__ = true;\n }\n\n /**\n * Creates a deprecation warning wrapped with a native Magic SDK warning type.\n * Best practice is to warn users of upcoming deprecations at least one major\n * version before the change is implemented. You can use this method to\n * communicate deprecations in a manner consistent with Magic SDK core code.\n */\n protected createDeprecationWarning(options: {\n method: string;\n removalVersion: string;\n useInstead?: string;\n }): MagicExtensionWarning {\n const { method, removalVersion, useInstead } = options;\n\n const useInsteadSuffix = useInstead ? ` Use \\`${useInstead}\\` instead.` : '';\n const message = `\\`${method}\\` will be removed from this Extension in version \\`${removalVersion}\\`.${useInsteadSuffix}`;\n return new MagicExtensionWarning(this, 'DEPRECATION_NOTICE', message);\n }\n\n /**\n * Creates a warning wrapped with a native Magic SDK warning type. This\n * maintains consistency in warning messaging for consumers of Magic SDK and\n * this Extension.\n */\n protected createWarning(code: string | number, message: string): MagicExtensionWarning {\n return new MagicExtensionWarning(this, code, message);\n }\n\n /**\n * Creates an error wrapped with a native Magic SDK error type. This maintains\n * consistency in error handling for consumers of Magic SDK and this\n * Extension.\n */\n protected createError<TData = any>(code: string | number, message: string, data: TData): MagicExtensionError<TData> {\n return new MagicExtensionError<TData>(this, code, message, data);\n }\n}\n\nabstract class InternalExtension<TName extends string, TConfig extends any = any> extends BaseExtension<TName> {\n public abstract readonly config: TConfig;\n}\n\n/**\n * A base class representing \"extensions\" to the core Magic JS APIs. Extensions\n * enable new functionality by composing Magic endpoints methods together.\n */\nexport class Extension {\n /**\n * This is a special constructor used to mark \"official\" extensions. These\n * extensions are designed for special interaction with the Magic iframe using\n * custom JSON RPC methods, business logic, and global configurations. This is\n * intended for internal-use only (and provides no useful advantage to\n * open-source extension developers over the regular `Extension` class).\n *\n * @internal\n */\n public static Internal = InternalExtension;\n}\n\n/**\n * Base class for multi-chain extensions, extracting getPublicAddress logic.\n */\nexport abstract class MultichainExtension<TName extends string, TConfig extends any = any> extends InternalExtension<\n TName,\n TConfig\n> {\n public readonly chain: string;\n constructor(public readonly config: TConfig) {\n super();\n this.chain = (config as any).chainType;\n }\n\n public async getPublicAddress<ResultType = any>(): Promise<ResultType> {\n return this.request(\n this.utils.createJsonRpcRequestPayload(MagicPayloadMethod.GetMultichainPublicAddress, [{ chain: this.chain }]),\n );\n }\n}\n\n/**\n * These fields are exposed on the `Extension` type,\n * but should be hidden from the public interface.\n */\ntype HiddenExtensionFields = 'name' | 'init' | 'config' | 'compat';\n\n/**\n * Gets the type contained in an array type.\n */\ntype UnwrapArray<T extends any[]> = T extends Array<infer P> ? P : never;\n\n/**\n * Create a union type of Extension names from an\n * array of Extension types given by `TExt`.\n */\ntype ExtensionNames<TExt extends BaseExtension<string>[]> =\n UnwrapArray<TExt> extends BaseExtension<infer R> ? R : never;\n\n/**\n * From the literal Extension name type given by `TExtName`,\n * extract a dictionary of Extension types.\n */\ntype GetExtensionFromName<TExt extends BaseExtension<string>[], TExtName extends string> = {\n [P in TExtName]: Extract<UnwrapArray<TExt>, BaseExtension<TExtName>>;\n}[TExtName];\n\n/**\n * Wraps a Magic SDK constructor with the necessary type\n * information to support a strongly-typed `Extension` interface.\n */\nexport type WithExtensions<SDK extends SDKBase> = {\n new <TCustomExtName extends string, TExt extends MagicSDKExtensionsOption<TCustomExtName>>(\n apiKey: string,\n options?: MagicSDKAdditionalConfiguration<TCustomExtName, TExt>,\n ): InstanceWithExtensions<SDK, TExt>;\n};\n\nexport type InstanceWithExtensions<SDK extends SDKBase, TExt extends MagicSDKExtensionsOption> = SDK & {\n [P in Exclude<\n TExt extends BaseExtension<string>[] ? ExtensionNames<TExt> : keyof TExt,\n number\n >]: TExt extends BaseExtension<string>[]\n ? Omit<GetExtensionFromName<TExt, P>, HiddenExtensionFields>\n : TExt extends {\n [P in Exclude<\n TExt extends BaseExtension<string>[] ? ExtensionNames<TExt> : keyof TExt,\n number\n >]: BaseExtension<string>;\n }\n ? Omit<TExt[P], HiddenExtensionFields>\n : never;\n};\n","// Only re-export modules & types that are intended\n// for the public API from this file.\n\nexport {\n Extension,\n MagicSDKError as SDKError,\n MagicExtensionError as ExtensionError,\n MagicExtensionWarning as ExtensionWarning,\n MagicRPCError as RPCError,\n MagicSDKWarning as SDKWarning,\n isPromiEvent,\n} from '@magic-sdk/provider';\n\nexport type { MagicSDKAdditionalConfiguration, MagicSDKExtensionsOption, PromiEvent } from '@magic-sdk/provider';\n\nexport * from '@magic-sdk/types';\n","/*!\n localForage -- Offline Storage, Improved\n Version 1.10.0\n https://localforage.github.io/localForage\n (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\n{\n if (Mutation) {\n var called = 0;\n var observer = new Mutation(nextTick);\n var element = global.document.createTextNode('');\n observer.observe(element, {\n characterData: true\n });\n scheduleDrain = function () {\n element.data = (called = ++called % 2);\n };\n } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n var channel = new global.MessageChannel();\n channel.port1.onmessage = nextTick;\n scheduleDrain = function () {\n channel.port2.postMessage(0);\n };\n } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n scheduleDrain = function () {\n\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n var promise = new this.constructor(INTERNAL);\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n}\n\nhandlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n return self;\n};\nhandlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n return self;\n};\n\nfunction getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n function onError(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n if (result.status === 'error') {\n onError(result.value);\n }\n}\n\nfunction tryCatch(func, value) {\n var out = {};\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n if (value instanceof this) {\n return value;\n }\n return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n return promise;\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n function resolveFromAll(outValue) {\n values[i] = outValue;\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n return promise;\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n try {\n if (typeof indexedDB !== 'undefined') {\n return indexedDB;\n }\n if (typeof webkitIndexedDB !== 'undefined') {\n return webkitIndexedDB;\n }\n if (typeof mozIndexedDB !== 'undefined') {\n return mozIndexedDB;\n }\n if (typeof OIndexedDB !== 'undefined') {\n return OIndexedDB;\n }\n if (typeof msIndexedDB !== 'undefined') {\n return msIndexedDB;\n }\n } catch (e) {\n return;\n }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n try {\n // Initialize IndexedDB; fall back to vendor-prefixed versions\n // if needed.\n if (!idb || !idb.open) {\n return false;\n }\n // We mimic PouchDB here;\n //\n // We test for openDatabase because IE Mobile identifies itself\n // as Safari. Oh the lulz...\n var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n // Safari <10.1 does not meet our requirements for IDB support\n // (see: https://github.com/pouchdb/pouchdb/issues/5572).\n // Safari 10.1 shipped with fetch, we can use that to detect it.\n // Note: this creates issues with `window.fetch` polyfills and\n // overrides; see:\n // https://github.com/localForage/localForage/issues/856\n return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n // See: https://github.com/mozilla/localForage/issues/128\n // See: https://github.com/mozilla/localForage/issues/272\n typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n // In the \"nopromises\" build this will just throw if you don't have\n // a global promise object, but it would throw anyway later.\n _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n if (typeof callback === 'function') {\n promise.then(callback);\n }\n\n if (typeof errorCallback === 'function') {\n promise[\"catch\"](errorCallback);\n }\n}\n\nfunction normalizeKey(key) {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n return key;\n}\n\nfunction getCallback() {\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n return new Promise$1(function (resolve) {\n var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n var blob = createBlob(['']);\n txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n\n txn.oncomplete = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n };\n })[\"catch\"](function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction _checkBlobSupport(idb) {\n if (typeof supportsBlobs === 'boolean') {\n return Promise$1.resolve(supportsBlobs);\n }\n return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n supportsBlobs = value;\n return supportsBlobs;\n });\n}\n\nfunction _deferReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Create a deferred object representing the current database operation.\n var deferredOperation = {};\n\n deferredOperation.promise = new Promise$1(function (resolve, reject) {\n deferredOperation.resolve = resolve;\n deferredOperation.reject = reject;\n });\n\n // Enqueue the deferred operation.\n dbContext.deferredOperations.push(deferredOperation);\n\n // Chain its promise to the database readiness.\n if (!dbContext.dbReady) {\n dbContext.dbReady = deferredOperation.promise;\n } else {\n dbContext.dbReady = dbContext.dbReady.then(function () {\n return deferredOperation.promise;\n });\n }\n}\n\nfunction _advanceReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Resolve its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.resolve();\n return deferredOperation.promise;\n }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Reject its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.reject(err);\n return deferredOperation.promise;\n }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n return new Promise$1(function (resolve, reject) {\n dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n if (dbInfo.db) {\n if (upgradeNeeded) {\n _deferReadiness(dbInfo);\n dbInfo.db.close();\n } else {\n return resolve(dbInfo.db);\n }\n }\n\n var dbArgs = [dbInfo.name];\n\n if (upgradeNeeded) {\n dbArgs.push(dbInfo.version);\n }\n\n var openreq = idb.open.apply(idb, dbArgs);\n\n if (upgradeNeeded) {\n openreq.onupgradeneeded = function (e) {\n var db = openreq.result;\n try {\n db.createObjectStore(dbInfo.storeName);\n if (e.oldVersion <= 1) {\n // Added when support for blob shims was added\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n }\n } catch (ex) {\n if (ex.name === 'ConstraintError') {\n console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n } else {\n throw ex;\n }\n }\n };\n }\n\n openreq.onerror = function (e) {\n e.preventDefault();\n reject(openreq.error);\n };\n\n openreq.onsuccess = function () {\n var db = openreq.result;\n db.onversionchange = function (e) {\n // Triggered when the database is modified (e.g. adding an objectStore) or\n // deleted (even when initiated by other sessions in different tabs).\n // Closing the connection here prevents those operations from being blocked.\n // If the database is accessed again later by this instance, the connection\n // will be reopened or the database recreated as needed.\n e.target.close();\n };\n resolve(db);\n _advanceReadiness(dbInfo);\n };\n });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n if (!dbInfo.db) {\n return true;\n }\n\n var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n var isDowngrade = dbInfo.version < dbInfo.db.version;\n var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n if (isDowngrade) {\n // If the version is not the default one\n // then warn for impossible downgrade.\n if (dbInfo.version !== defaultVersion) {\n console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n }\n // Align the versions to prevent errors.\n dbInfo.version = dbInfo.db.version;\n }\n\n if (isUpgrade || isNewStore) {\n // If the store is new then increment the version (if needed).\n // This will trigger an \"upgradeneeded\" event which is required\n // for creating a store.\n if (isNewStore) {\n var incVersion = dbInfo.db.version + 1;\n if (incVersion > dbInfo.version) {\n dbInfo.version = incVersion;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n return new Promise$1(function (resolve, reject) {\n var reader = new FileReader();\n reader.onerror = reject;\n reader.onloadend = function (e) {\n var base64 = btoa(e.target.result || '');\n resolve({\n __local_forage_encoded_blob: true,\n data: base64,\n type: blob.type\n });\n };\n reader.readAsBinaryString(blob);\n });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n var self = this;\n\n var promise = self._initReady().then(function () {\n var dbContext = dbContexts[self._dbInfo.name];\n\n if (dbContext && dbContext.dbReady) {\n return dbContext.dbReady;\n }\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n _deferReadiness(dbInfo);\n\n var dbContext = dbContexts[dbInfo.name];\n var forages = dbContext.forages;\n\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n if (forage._dbInfo.db) {\n forage._dbInfo.db.close();\n forage._dbInfo.db = null;\n }\n }\n dbInfo.db = null;\n\n return _getOriginalConnection(dbInfo).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n // store the latest db reference\n // in case the db was upgraded\n dbInfo.db = dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n })[\"catch\"](function (err) {\n _rejectReadiness(dbInfo, err);\n throw err;\n });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n if (retries === undefined) {\n retries = 1;\n }\n\n try {\n var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n callback(null, tx);\n } catch (err) {\n if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n return Promise$1.resolve().then(function () {\n if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n // increase the db version, to create the new ObjectStore\n if (dbInfo.db) {\n dbInfo.version = dbInfo.db.version + 1;\n }\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n }).then(function () {\n return _tryReconnect(dbInfo).then(function () {\n createTransaction(dbInfo, mode, callback, retries - 1);\n });\n })[\"catch\"](callback);\n }\n\n callback(err);\n }\n}\n\nfunction createDbContext() {\n return {\n // Running localForages sharing a database.\n forages: [],\n // Shared database.\n db: null,\n // Database readiness (promise).\n dbReady: null,\n // Deferred operations on the database.\n deferredOperations: []\n };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n // Get the current context of the database;\n var dbContext = dbContexts[dbInfo.name];\n\n // ...or create a new context.\n if (!dbContext) {\n dbContext = createDbContext();\n // Register the new context in the global container.\n dbContexts[dbInfo.name] = dbContext;\n }\n\n // Register itself as a running localForage in the current context.\n dbContext.forages.push(self);\n\n // Replace the default `ready()` function with the specialized one.\n if (!self._initReady) {\n self._initReady = self.ready;\n self.ready = _fullyReady;\n }\n\n // Create an array of initialization states of the related localForages.\n var initPromises = [];\n\n function ignoreErrors() {\n // Don't handle errors here,\n // just makes sure related localForages aren't pending.\n return Promise$1.resolve();\n }\n\n for (var j = 0; j < dbContext.forages.length; j++) {\n var forage = dbContext.forages[j];\n if (forage !== self) {\n // Don't wait for itself...\n initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n }\n }\n\n // Take a snapshot of the related localForages.\n var forages = dbContext.forages.slice(0);\n\n // Initialize the connection process only when\n // all the related localForages aren't pending.\n return Promise$1.all(initPromises).then(function () {\n dbInfo.db = dbContext.db;\n // Get the connection or open a new one without upgrade.\n return _getOriginalConnection(dbInfo);\n }).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n dbInfo.db = dbContext.db = db;\n self._dbInfo = dbInfo;\n // Share the final connection amongst related localForages.\n for (var k = 0; k < forages.length; k++) {\n var forage = forages[k];\n if (forage !== self) {\n // Self is already up-to-date.\n forage._dbInfo.db = dbInfo.db;\n forage._dbInfo.version = dbInfo.version;\n }\n }\n });\n}\n\nfunction getItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.get(key);\n\n req.onsuccess = function () {\n var value = req.result;\n if (value === undefined) {\n value = null;\n }\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n resolve(value);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openCursor();\n var iterationNumber = 1;\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (cursor) {\n var value = cursor.value;\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n var result = iterator(value, cursor.key, iterationNumber++);\n\n // when the iterator callback returns any\n // (non-`undefined`) value, then we stop\n // the iteration immediately\n if (result !== void 0) {\n resolve(result);\n } else {\n cursor[\"continue\"]();\n }\n } else {\n resolve();\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n\nfunction setItem(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n var dbInfo;\n self.ready().then(function () {\n dbInfo = self._dbInfo;\n if (toString.call(value) === '[object Blob]') {\n return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n if (blobSupport) {\n return value;\n }\n return _encodeBlob(value);\n });\n }\n return value;\n }).then(function (value) {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n\n // The reason we don't _save_ null is because IE 10 does\n // not support saving the `null` type in IndexedDB. How\n // ironic, given the bug below!\n // See: https://github.com/mozilla/localForage/issues/161\n if (value === null) {\n value = undefined;\n }\n\n var req = store.put(value, key);\n\n transaction.oncomplete = function () {\n // Cast to undefined so the value passed to\n // callback/promise is the same as what one would get out\n // of `getItem()` later. This leads to some weirdness\n // (setItem('foo', undefined) will return `null`), but\n // it's not my fault localStorage is our baseline and that\n // it's weird.\n if (value === undefined) {\n value = null;\n }\n\n resolve(value);\n };\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction removeItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n // We use a Grunt task to make this safe for IE and some\n // versions of Android (including those used by Cordova).\n // Normally IE won't like `.delete()` and will insist on\n // using `['delete']()`, but we have a build step that\n // fixes this for us now.\n var req = store[\"delete\"](key);\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onerror = function () {\n reject(req.error);\n };\n\n // The request will be also be aborted if we've exceeded our storage\n // space.\n transaction.onabort = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction clear(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.clear();\n\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction length(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.count();\n\n req.onsuccess = function () {\n resolve(req.result);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction key(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n if (n < 0) {\n resolve(null);\n\n return;\n }\n\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var advanced = false;\n var req = store.openKeyCursor();\n\n req.onsuccess = function () {\n var cursor = req.result;\n if (!cursor) {\n // this means there weren't enough keys\n resolve(null);\n\n return;\n }\n\n if (n === 0) {\n // We have the first key, return it if that's what they\n // wanted.\n resolve(cursor.key);\n } else {\n if (!advanced) {\n // Otherwise, ask the cursor to skip ahead n\n // records.\n advanced = true;\n cursor.advance(n);\n } else {\n // When we get here, we've got the nth key.\n resolve(cursor.key);\n }\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openKeyCursor();\n var keys = [];\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (!cursor) {\n resolve(keys);\n return;\n }\n\n keys.push(cursor.key);\n cursor[\"continue\"]();\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n return db;\n });\n\n if (!options.storeName) {\n promise = dbPromise.then(function (db) {\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n }\n\n var dropDBPromise = new Promise$1(function (resolve, reject) {\n var req = idb.deleteDatabase(options.name);\n\n req.onerror = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n reject(req.error);\n };\n\n req.onblocked = function () {\n // Closing all open connections in onversionchange handler should prevent this situation, but if\n // we do get here, it just means the request remains pending - eventually it will succeed or error\n console.warn('dropInstance blocked for database \"' + options.name + '\" until all open connections are closed');\n };\n\n req.onsuccess = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n resolve(db);\n };\n });\n\n return dropDBPromise.then(function (db) {\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n var _forage = forages[i];\n _advanceReadiness(_forage._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n } else {\n promise = dbPromise.then(function (db) {\n if (!db.objectStoreNames.contains(options.storeName)) {\n return;\n }\n\n var newVersion = db.version + 1;\n\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n forage._dbInfo.version = newVersion;\n }\n\n var dropObjectPromise = new Promise$1(function (resolve, reject) {\n var req = idb.open(options.name, newVersion);\n\n req.onerror = function (err) {\n var db = req.result;\n db.close();\n reject(err);\n };\n\n req.onupgradeneeded = function () {\n var db = req.result;\n db.deleteObjectStore(options.storeName);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n db.close();\n resolve(db);\n };\n });\n\n return dropObjectPromise.then(function (db) {\n dbContext.db = db;\n for (var j = 0; j < forages.length; j++) {\n var _forage2 = forages[j];\n _forage2._dbInfo.db = db;\n _advanceReadiness(_forage2._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n }\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar asyncStorage = {\n _driver: 'asyncStorage',\n _initStorage: _initStorage,\n _support: isIndexedDBValid(),\n iterate: iterate,\n getItem: getItem,\n setItem: setItem,\n removeItem: removeItem,\n clear: clear,\n length: length,\n key: key,\n keys: keys,\n dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n var i;\n var p = 0;\n var encoded1, encoded2, encoded3, encoded4;\n\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n /*jslint bitwise: true */\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n var i;\n\n for (i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += BASE_CHARS[bytes[i] >> 2];\n base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n base64String += BASE_CHARS[bytes[i + 2] & 63];\n }\n\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n } else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n\n return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString$1.call(value);\n }\n\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n //\n // TODO: See why those tests fail and use a better solution.\n if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer;\n var marker = SERIALIZED_MARKER;\n\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += TYPE_ARRAYBUFFER;\n } else {\n buffer = value.buffer;\n\n if (valueType === '[object Int8Array]') {\n marker += TYPE_INT8ARRAY;\n } else if (valueType === '[object Uint8Array]') {\n marker += TYPE_UINT8ARRAY;\n } else if (valueType === '[object Uint8ClampedArray]') {\n marker += TYPE_UINT8CLAMPEDARRAY;\n } else if (valueType === '[object Int16Array]') {\n marker += TYPE_INT16ARRAY;\n } else if (valueType === '[object Uint16Array]') {\n marker += TYPE_UINT16ARRAY;\n } else if (valueType === '[object Int32Array]') {\n marker += TYPE_INT32ARRAY;\n } else if (valueType === '[object Uint32Array]') {\n marker += TYPE_UINT32ARRAY;\n } else if (valueType === '[object Float32Array]') {\n marker += TYPE_FLOAT32ARRAY;\n } else if (valueType === '[object Float64Array]') {\n marker += TYPE_FLOAT64ARRAY;\n } else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n\n callback(marker + bufferToString(buffer));\n } else if (valueType === '[object Blob]') {\n // Conver the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n };\n\n fileReader.readAsArrayBuffer(value);\n } else {\n try {\n callback(JSON.stringify(value));\n } catch (e) {\n console.error(\"Couldn't convert value into a JSON string: \", value);\n\n callback(null, e);\n }\n }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n return JSON.parse(value);\n }\n\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case TYPE_ARRAYBUFFER:\n return buffer;\n case TYPE_BLOB:\n return createBlob([buffer], { type: blobType });\n case TYPE_INT8ARRAY:\n return new Int8Array(buffer);\n case TYPE_UINT8ARRAY:\n return new Uint8Array(buffer);\n case TYPE_UINT8CLAMPEDARRAY:\n return new Uint8ClampedArray(buffer);\n case TYPE_INT16ARRAY:\n return new Int16Array(buffer);\n case TYPE_UINT16ARRAY:\n return new Uint16Array(buffer);\n case TYPE_INT32ARRAY:\n return new Int32Array(buffer);\n case TYPE_UINT32ARRAY:\n return new Uint32Array(buffer);\n case TYPE_FLOAT32ARRAY:\n return new Float32Array(buffer);\n case TYPE_FLOAT64ARRAY:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nvar localforageSerializer = {\n serialize: serialize,\n deserialize: deserialize,\n stringToBuffer: stringToBuffer,\n bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n }\n }\n\n var dbInfoPromise = new Promise$1(function (resolve, reject) {\n // Open the database; the openDatabase API will automatically\n // create it for us if it doesn't exist.\n try {\n dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n } catch (e) {\n return reject(e);\n }\n\n // Create our key/value table if it doesn't exist.\n dbInfo.db.transaction(function (t) {\n createDbTable(t, dbInfo, function () {\n self._dbInfo = dbInfo;\n resolve();\n }, function (t, error) {\n reject(error);\n });\n }, reject);\n });\n\n dbInfo.serializer = localforageSerializer;\n return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n t.executeSql(sqlStatement, args, callback, function (t, error) {\n if (error.code === error.SYNTAX_ERR) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n if (!results.rows.length) {\n // if the table is missing (was deleted)\n // re-create it table and retry\n createDbTable(t, dbInfo, function () {\n t.executeSql(sqlStatement, args, callback, errorCallback);\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).value : null;\n\n // Check to see if this is serialized content we need to\n // unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n var rows = results.rows;\n var length = rows.length;\n\n for (var i = 0; i < length; i++) {\n var item = rows.item(i);\n var result = item.value;\n\n // Check to see if this is serialized content\n // we need to unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n result = iterator(result, item.key, i + 1);\n\n // void(0) prevents problems with redefinition\n // of `undefined`.\n if (result !== void 0) {\n resolve(result);\n return;\n }\n }\n\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n // The localStorage API doesn't return undefined values in an\n // \"expected\" way, so undefined is always cast to null in all\n // drivers. See: https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n resolve(originalValue);\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n // The transaction failed; check\n // to see if it's a quota error.\n if (sqlError.code === sqlError.QUOTA_ERR) {\n // We reject the callback outright for now, but\n // it's worth trying to re-run the transaction.\n // Even if the user accepts the prompt to use\n // more storage on Safari, this error will\n // be called.\n //\n // Try to re-run the transaction.\n if (retriesLeft > 0) {\n resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n return;\n }\n reject(sqlError);\n }\n });\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n // Ahhh, SQL makes this one soooooo easy.\n tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n var result = results.rows.item(0).c;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).key : null;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n var keys = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n keys.push(results.rows.item(i).key);\n }\n\n resolve(keys);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n return new Promise$1(function (resolve, reject) {\n db.transaction(function (t) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n var storeNames = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n storeNames.push(results.rows.item(i).name);\n }\n\n resolve({\n db: db,\n storeNames: storeNames\n });\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n}\n\nfunction dropInstance$1(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n var db;\n if (options.name === currentConfig.name) {\n // use the db reference of the current instance\n db = self._dbInfo.db;\n } else {\n db = openDatabase(options.name, '', '', 0);\n }\n\n if (!options.storeName) {\n // drop all database tables\n resolve(getAllStoreNames(db));\n } else {\n resolve({\n db: db,\n storeNames: [options.storeName]\n });\n }\n }).then(function (operationInfo) {\n return new Promise$1(function (resolve, reject) {\n operationInfo.db.transaction(function (t) {\n function dropTable(storeName) {\n return new Promise$1(function (resolve, reject) {\n t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n }\n\n var operations = [];\n for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n operations.push(dropTable(operationInfo.storeNames[i]));\n }\n\n Promise$1.all(operations).then(function () {\n resolve();\n })[\"catch\"](function (e) {\n reject(e);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar webSQLStorage = {\n _driver: 'webSQLStorage',\n _initStorage: _initStorage$1,\n _support: isWebSQLValid(),\n iterate: iterate$1,\n getItem: getItem$1,\n setItem: setItem$1,\n removeItem: removeItem$1,\n clear: clear$1,\n length: length$1,\n key: key$1,\n keys: keys$1,\n dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n try {\n return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n // in IE8 typeof localStorage.setItem === 'object'\n !!localStorage.setItem;\n } catch (e) {\n return false;\n }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n var keyPrefix = options.name + '/';\n\n if (options.storeName !== defaultConfig.storeName) {\n keyPrefix += options.storeName + '/';\n }\n return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n var localStorageTestKey = '_localforage_support_test';\n\n try {\n localStorage.setItem(localStorageTestKey, true);\n localStorage.removeItem(localStorageTestKey);\n\n return false;\n } catch (e) {\n return true;\n }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n var self = this;\n var dbInfo = {};\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n if (!_isLocalStorageUsable()) {\n return Promise$1.reject();\n }\n\n self._dbInfo = dbInfo;\n dbInfo.serializer = localforageSerializer;\n\n return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var keyPrefix = self._dbInfo.keyPrefix;\n\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the key\n // is likely undefined and we'll pass it straight to the\n // callback.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n var self = this;\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var keyPrefix = dbInfo.keyPrefix;\n var keyPrefixLength = keyPrefix.length;\n var length = localStorage.length;\n\n // We use a dedicated iterator instead of the `i` variable below\n // so other keys we fetch in localStorage aren't counted in\n // the `iterationNumber` argument passed to the `iterate()`\n // callback.\n //\n // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n var iterationNumber = 1;\n\n for (var i = 0; i < length; i++) {\n var key = localStorage.key(i);\n if (key.indexOf(keyPrefix) !== 0) {\n continue;\n }\n var value = localStorage.getItem(key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n if (value !== void 0) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result;\n try {\n result = localStorage.key(n);\n } catch (error) {\n result = null;\n }\n\n // Remove the prefix from the key, if a key is found.\n if (result) {\n result = result.substring(dbInfo.keyPrefix.length);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var length = localStorage.length;\n var keys = [];\n\n for (var i = 0; i < length; i++) {\n var itemKey = localStorage.key(i);\n if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n }\n }\n\n return keys;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n var self = this;\n var promise = self.keys().then(function (keys) {\n return keys.length;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n localStorage.removeItem(dbInfo.keyPrefix + key);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n // Convert undefined values to null.\n // https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n return new Promise$1(function (resolve, reject) {\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n try {\n localStorage.setItem(dbInfo.keyPrefix + key, value);\n resolve(originalValue);\n } catch (e) {\n // localStorage capacity exceeded.\n // TODO: Make this a specific error/event.\n if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n reject(e);\n }\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n var currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n if (!options.storeName) {\n resolve(options.name + '/');\n } else {\n resolve(_getKeyPrefix(options, self._defaultConfig));\n }\n }).then(function (keyPrefix) {\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar localStorageWrapper = {\n _driver: 'localStorageWrapper',\n _initStorage: _initStorage$2,\n _support: isLocalStorageValid(),\n iterate: iterate$2,\n getItem: getItem$2,\n setItem: setItem$2,\n removeItem: removeItem$2,\n clear: clear$2,\n length: length$2,\n key: key$2,\n keys: keys$2,\n dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n var len = array.length;\n var i = 0;\n while (i < len) {\n if (sameValue(array[i], searchElement)) {\n return true;\n }\n i++;\n }\n\n return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n INDEXEDDB: asyncStorage,\n WEBSQL: webSQLStorage,\n LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n description: '',\n driver: DefaultDriverOrder.slice(),\n name: 'localforage',\n // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n // we can use without a prompt.\n size: 4980736,\n storeName: 'keyvaluepairs',\n version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n localForageInstance[libraryMethod] = function () {\n var _args = arguments;\n return localForageInstance.ready().then(function () {\n return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n });\n };\n}\n\nfunction extend() {\n for (var i = 1; i < arguments.length; i++) {\n var arg = arguments[i];\n\n if (arg) {\n for (var _key in arg) {\n if (arg.hasOwnProperty(_key)) {\n if (isArray(arg[_key])) {\n arguments[0][_key] = arg[_key].slice();\n } else {\n arguments[0][_key] = arg[_key];\n }\n }\n }\n }\n }\n\n return arguments[0];\n}\n\nvar LocalForage = function () {\n function LocalForage(options) {\n _classCallCheck(this, LocalForage);\n\n for (var driverTypeKey in DefaultDrivers) {\n if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n var driver = DefaultDrivers[driverTypeKey];\n var driverName = driver._driver;\n this[driverTypeKey] = driverName;\n\n if (!DefinedDrivers[driverName]) {\n // we don't need to wait for the promise,\n // since the default drivers can be defined\n // in a blocking manner\n this.defineDriver(driver);\n }\n }\n }\n\n this._defaultConfig = extend({}, DefaultConfig);\n this._config = extend({}, this._defaultConfig, options);\n this._driverSet = null;\n this._initDriver = null;\n this._ready = false;\n this._dbInfo = null;\n\n this._wrapLibraryMethodsWithReady();\n this.setDriver(this._config.driver)[\"catch\"](function () {});\n }\n\n // Set any config values for localForage; can be called anytime before\n // the first API call (e.g. `getItem`, `setItem`).\n // We loop through options so we don't overwrite existing config\n // values.\n\n\n LocalForage.prototype.config = function config(options) {\n // If the options argument is an object, we use it to set values.\n // Otherwise, we return either a specified config value or all\n // config values.\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n // If localforage is ready and fully initialized, we can't set\n // any new configuration values. Instead, we return an error.\n if (this._ready) {\n return new Error(\"Can't call config() after localforage \" + 'has been used.');\n }\n\n for (var i in options) {\n if (i === 'storeName') {\n options[i] = options[i].replace(/\\W/g, '_');\n }\n\n if (i === 'version' && typeof options[i] !== 'number') {\n return new Error('Database version must be a number.');\n }\n\n this._config[i] = options[i];\n }\n\n // after all config options are set and\n // the driver option is used, try setting it\n if ('driver' in options && options.driver) {\n return this.setDriver(this._config.driver);\n }\n\n return true;\n } else if (typeof options === 'string') {\n return this._config[options];\n } else {\n return this._config;\n }\n };\n\n // Used to define a custom driver, shared across all instances of\n // localForage.\n\n\n LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n var promise = new Promise$1(function (resolve, reject) {\n try {\n var driverName = driverObject._driver;\n var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n // A driver name should be defined and not overlap with the\n // library-defined, default drivers.\n if (!driverObject._driver) {\n reject(complianceError);\n return;\n }\n\n var driverMethods = LibraryMethods.concat('_initStorage');\n for (var i = 0, len = driverMethods.length; i < len; i++) {\n var driverMethodName = driverMethods[i];\n\n // when the property is there,\n // it should be a method even when optional\n var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n reject(complianceError);\n return;\n }\n }\n\n var configureMissingMethods = function configureMissingMethods() {\n var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n return function () {\n var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n var promise = Promise$1.reject(error);\n executeCallback(promise, arguments[arguments.length - 1]);\n return promise;\n };\n };\n\n for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n var optionalDriverMethod = OptionalDriverMethods[_i];\n if (!driverObject[optionalDriverMethod]) {\n driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n }\n }\n };\n\n configureMissingMethods();\n\n var setDriverSupport = function setDriverSupport(support) {\n if (DefinedDrivers[driverName]) {\n console.info('Redefining LocalForage driver: ' + driverName);\n }\n DefinedDrivers[driverName] = driverObject;\n DriverSupport[driverName] = support;\n // don't use a then, so that we can define\n // drivers that have simple _support methods\n // in a blocking manner\n resolve();\n };\n\n if ('_support' in driverObject) {\n if (driverObject._support && typeof driverObject._support === 'function') {\n driverObject._support().then(setDriverSupport, reject);\n } else {\n setDriverSupport(!!driverObject._support);\n }\n } else {\n setDriverSupport(true);\n }\n } catch (e) {\n reject(e);\n }\n });\n\n executeTwoCallbacks(promise, callback, errorCallback);\n return promise;\n };\n\n LocalForage.prototype.driver = function driver() {\n return this._driver || null;\n };\n\n LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n return getDriverPromise;\n };\n\n LocalForage.prototype.getSerializer = function getSerializer(callback) {\n var serializerPromise = Promise$1.resolve(localforageSerializer);\n executeTwoCallbacks(serializerPromise, callback);\n return serializerPromise;\n };\n\n LocalForage.prototype.ready = function ready(callback) {\n var self = this;\n\n var promise = self._driverSet.then(function () {\n if (self._ready === null) {\n self._ready = self._initDriver();\n }\n\n return self._ready;\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n };\n\n LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n var self = this;\n\n if (!isArray(drivers)) {\n drivers = [drivers];\n }\n\n var supportedDrivers = this._getSupportedDrivers(drivers);\n\n function setDriverToConfig() {\n self._config.driver = self.driver();\n }\n\n function extendSelfWithDriver(driver) {\n self._extend(driver);\n setDriverToConfig();\n\n self._ready = self._initStorage(self._config);\n return self._ready;\n }\n\n function initDriver(supportedDrivers) {\n return function () {\n var currentDriverIndex = 0;\n\n function driverPromiseLoop() {\n while (currentDriverIndex < supportedDrivers.length) {\n var driverName = supportedDrivers[currentDriverIndex];\n currentDriverIndex++;\n\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n }\n\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n }\n\n return driverPromiseLoop();\n };\n }\n\n // There might be a driver initialization in progress\n // so wait for it to finish in order to avoid a possible\n // race condition to set _dbInfo\n var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n return Promise$1.resolve();\n }) : Promise$1.resolve();\n\n this._driverSet = oldDriverSetDone.then(function () {\n var driverName = supportedDrivers[0];\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(function (driver) {\n self._driver = driver._driver;\n setDriverToConfig();\n self._wrapLibraryMethodsWithReady();\n self._initDriver = initDriver(supportedDrivers);\n });\n })[\"catch\"](function () {\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n });\n\n executeTwoCallbacks(this._driverSet, callback, errorCallback);\n return this._driverSet;\n };\n\n LocalForage.prototype.supports = function supports(driverName) {\n return !!DriverSupport[driverName];\n };\n\n LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n extend(this, libraryMethodsAndProperties);\n };\n\n LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n var supportedDrivers = [];\n for (var i = 0, len = drivers.length; i < len; i++) {\n var driverName = drivers[i];\n if (this.supports(driverName)) {\n supportedDrivers.push(driverName);\n }\n }\n return supportedDrivers;\n };\n\n LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n // Add a stub for each driver API method that delays the call to the\n // corresponding driver method until localForage is ready. These stubs\n // will be replaced by the driver methods as soon as the driver is\n // loaded, so there is no performance impact.\n for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n callWhenReady(this, LibraryMethods[i]);\n }\n };\n\n LocalForage.prototype.createInstance = function createInstance(options) {\n return new LocalForage(options);\n };\n\n return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n","export const _driver = 'localforage-driver-memory';\n","/*!\nMIT License\n\nCopyright (c) 2018 Arturas Molcanovas <a.molcanovas@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n*/\n\n\nimport { __values } from 'tslib';\n\n/**\n * Abstracts constructing a Blob object, so it also works in older\n * browsers that don't support the native Blob constructor. (i.e.\n * old QtWebKit versions, at least).\n * Abstracts constructing a Blob object, so it also works in older\n * browsers that don't support the native Blob constructor. (i.e.\n * old QtWebKit versions, at least).\n *\n * @param parts\n * @param properties\n */\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n }\n catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n //tslint:disable-next-line:variable-name\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder\n : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder\n : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder\n : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\nvar SERIALIZED_MARKER_LENGTH = \"__lfsc__:\" /* SERIALIZED_MARKER */.length;\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + \"arbf\" /* TYPE_ARRAYBUFFER */.length;\n//tslint:disable:no-magic-numbers no-bitwise prefer-switch no-unbound-method\nvar toString = Object.prototype.toString;\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n for (var i = 0, p = 0; i < len; i += 4) {\n var encoded1 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */.indexOf(serializedString[i]);\n var encoded2 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */.indexOf(serializedString[i + 1]);\n var encoded3 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */.indexOf(serializedString[i + 2]);\n var encoded4 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */.indexOf(serializedString[i + 3]);\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return buffer;\n}\n/**\n * Converts a buffer to a string to store, serialized, in the backend\n * storage library.\n */\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n for (var i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */[bytes[i] >> 2];\n base64String += \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64String +=\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64String += \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */[bytes[i + 2] & 63];\n }\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n }\n else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n return base64String;\n}\n/**\n * Serialize a value, afterwards executing a callback (which usually\n * instructs the `setItem()` callback/promise to be executed). This is how\n * we store binary data with localStorage.\n * @param value\n * @param callback\n */\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString.call(value);\n }\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n if (value && (valueType === '[object ArrayBuffer]' ||\n (value.buffer && toString.call(value.buffer) === '[object ArrayBuffer]'))) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer = void 0;\n var marker = \"__lfsc__:\" /* SERIALIZED_MARKER */;\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += \"arbf\" /* TYPE_ARRAYBUFFER */;\n }\n else {\n buffer = value.buffer;\n if (valueType === '[object Int8Array]') {\n marker += \"si08\" /* TYPE_INT8ARRAY */;\n }\n else if (valueType === '[object Uint8Array]') {\n marker += \"ui08\" /* TYPE_UINT8ARRAY */;\n }\n else if (valueType === '[object Uint8ClampedArray]') {\n marker += \"uic8\" /* TYPE_UINT8CLAMPEDARRAY */;\n }\n else if (valueType === '[object Int16Array]') {\n marker += \"si16\" /* TYPE_INT16ARRAY */;\n }\n else if (valueType === '[object Uint16Array]') {\n marker += \"ur16\" /* TYPE_UINT16ARRAY */;\n }\n else if (valueType === '[object Int32Array]') {\n marker += \"si32\" /* TYPE_INT32ARRAY */;\n }\n else if (valueType === '[object Uint32Array]') {\n marker += \"ui32\" /* TYPE_UINT32ARRAY */;\n }\n else if (valueType === '[object Float32Array]') {\n marker += \"fl32\" /* TYPE_FLOAT32ARRAY */;\n }\n else if (valueType === '[object Float64Array]') {\n marker += \"fl64\" /* TYPE_FLOAT64ARRAY */;\n }\n else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n callback(marker + bufferToString(buffer));\n }\n else if (valueType === '[object Blob]') {\n // Convert the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n //tslint:disable-next-line:restrict-plus-operands\n var str = \"~~local_forage_type~\" /* BLOB_TYPE_PREFIX */ + value.type + \"~\" + bufferToString(this.result);\n callback(\"__lfsc__:\" /* SERIALIZED_MARKER */ + \"blob\" /* TYPE_BLOB */ + str);\n };\n fileReader.readAsArrayBuffer(value);\n }\n else {\n try {\n callback(JSON.stringify(value));\n }\n catch (e) {\n console.error('Couldn\\'t convert value into a JSON string: ', value);\n callback(null, e);\n }\n }\n}\n/**\n * Deserialize data we've inserted into a value column/field. We place\n * special markers into our strings to mark them as encoded; this isn't\n * as nice as a meta field, but it's the only sane thing we can do whilst\n * keeping localStorage support intact.\n *\n * Oftentimes this will just deserialize JSON content, but if we have a\n * special marker (SERIALIZED_MARKER, defined above), we will extract\n * some kind of arraybuffer/binary data/typed array out of the string.\n * @param value\n */\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== \"__lfsc__:\" /* SERIALIZED_MARKER */) {\n return JSON.parse(value);\n }\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === \"blob\" /* TYPE_BLOB */ && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case \"arbf\" /* TYPE_ARRAYBUFFER */:\n return buffer;\n case \"blob\" /* TYPE_BLOB */:\n return createBlob([buffer], { type: blobType });\n case \"si08\" /* TYPE_INT8ARRAY */:\n return new Int8Array(buffer);\n case \"ui08\" /* TYPE_UINT8ARRAY */:\n return new Uint8Array(buffer);\n case \"uic8\" /* TYPE_UINT8CLAMPEDARRAY */:\n return new Uint8ClampedArray(buffer);\n case \"si16\" /* TYPE_INT16ARRAY */:\n return new Int16Array(buffer);\n case \"ur16\" /* TYPE_UINT16ARRAY */:\n return new Uint16Array(buffer);\n case \"si32\" /* TYPE_INT32ARRAY */:\n return new Int32Array(buffer);\n case \"ui32\" /* TYPE_UINT32ARRAY */:\n return new Uint32Array(buffer);\n case \"fl32\" /* TYPE_FLOAT32ARRAY */:\n return new Float32Array(buffer);\n case \"fl64\" /* TYPE_FLOAT64ARRAY */:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nfunction clone(obj) {\n var e_1, _a;\n if (obj === null || typeof (obj) !== 'object' || 'isActiveClone' in obj) {\n return obj;\n }\n var temp = obj instanceof Date ? new Date(obj) : (obj.constructor());\n try {\n for (var _b = __values(Object.keys(obj)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n obj['isActiveClone'] = null;\n temp[key] = clone(obj[key]);\n delete obj['isActiveClone'];\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return temp;\n}\n\nfunction getKeyPrefix(options, defaultConfig) {\n return (options.name || defaultConfig.name) + \"/\" + (options.storeName || defaultConfig.storeName) + \"/\";\n}\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction getCallback() {\n var _args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n _args[_i] = arguments[_i];\n }\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n}\n\n//tslint:disable-next-line:no-ignored-initial-value\nfunction dropInstanceCommon(options, callback) {\n var _this = this;\n callback = getCallback.apply(this, arguments);\n options = (typeof options !== 'function' && options) || {};\n if (!options.name) {\n var currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n var promise;\n if (!options.name) {\n promise = Promise.reject('Invalid arguments');\n }\n else {\n promise = new Promise(function (resolve) {\n if (!options.storeName) {\n resolve(options.name + \"/\");\n }\n else {\n resolve(getKeyPrefix(options, _this._defaultConfig));\n }\n });\n }\n return { promise: promise, callback: callback };\n}\n\nfunction normaliseKey(key) {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + \" used as a key, but it is not a string.\");\n key = String(key);\n }\n return key;\n}\n\nvar serialiser = {\n bufferToString: bufferToString,\n deserialize: deserialize,\n serialize: serialize,\n stringToBuffer: stringToBuffer\n};\n\nexport { serialiser, clone, getKeyPrefix, executeCallback, getCallback, dropInstanceCommon, normaliseKey };\n//# sourceMappingURL=fesm5.js.map\n","const stores: { [store: string]: Store } = {};\n\n/** @internal */\nexport class Store {\n\n private data: { [k: string]: any } = {};\n\n private constructor(private readonly kp: string) {\n }\n\n public static resolve(kp: string): Store {\n if (!stores[kp]) {\n stores[kp] = new Store(kp);\n }\n\n return stores[kp];\n }\n\n public clear(): void {\n this.data = {};\n }\n\n public drop(): void {\n this.clear();\n delete stores[this.kp];\n }\n\n public get(key: string): any {\n return this.data[key];\n }\n\n public key(idx: number): string {\n return this.keys()[idx];\n }\n\n public keys(): string[] {\n return Object.keys(this.data);\n }\n\n public rm(k: string): void {\n delete this.data[k];\n }\n\n public set(k: string, v: any): void {\n this.data[k] = v;\n }\n}\n","import {clone, getKeyPrefix, LocalForageOptions, serialiser} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function _initStorage(this: any, options?: LocalForageOptions): any {\n const opts = options ? clone(options) : {};\n const kp = getKeyPrefix(opts, this._defaultConfig);\n const store = Store.resolve(kp);\n\n this._dbInfo = opts;\n this._dbInfo.serializer = serialiser;\n this._dbInfo.keyPrefix = kp;\n this._dbInfo.mStore = store;\n\n return Promise.resolve();\n}\n","import {executeCallback} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function clear(this: any, callback?: (err: any) => void): Promise<void> {\n const promise = this.ready().then(() => {\n (<Store>this._dbInfo.mStore).clear();\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {dropInstanceCommon, executeCallback} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function dropInstance(this: any, _options: any, _cb?: any) {\n const {promise, callback} = dropInstanceCommon.apply(this, <any>arguments);\n\n const outPromise = (<Promise<string>>promise).then<void>(keyPrefix => {\n Store.resolve(keyPrefix).drop();\n });\n\n executeCallback(outPromise, callback);\n\n return promise;\n}\n","import {executeCallback, normaliseKey} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function getItem(this: any, key$: string, callback?: any) {\n key$ = normaliseKey(key$);\n\n const promise = this.ready().then(() => {\n const result = (<Store>this._dbInfo.mStore).get(key$);\n\n // Deserialise if the result is not null or undefined\n return result == null ? null : this._dbInfo.serializer.deserialize(result); //tslint:disable-line:triple-equals\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {executeCallback} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function iterate(this: any, iterator: any, callback?: any) {\n const promise = this.ready().then(() => {\n const store = (<Store>this._dbInfo.mStore);\n const keys = store.keys();\n\n for (let i = 0; i < keys.length; i++) {\n let value = store.get(keys[i]);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = this._dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, keys[i], i + 1);\n\n if (value !== undefined) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {executeCallback} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function key(this: any, idx: number, callback?: any) {\n const promise = this.ready().then(() => {\n let result: any;\n try {\n result = (<Store>this._dbInfo.mStore).key(idx);\n\n if (result === undefined) {\n result = null;\n }\n } catch {\n result = null;\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {executeCallback} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function keys(this: any, callback?: any) {\n const promise = this.ready().then(() => {\n return (<Store>this._dbInfo.mStore).keys();\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {executeCallback} from 'localforage-driver-commons';\n\nexport function length(this: any, callback?: any) {\n const promise = this.keys().then((keys$: any[]) => keys$.length);\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {executeCallback, normaliseKey} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function removeItem(this: any, key$: string, callback?: any) {\n key$ = normaliseKey(key$);\n\n const promise = this.ready().then(() => {\n (<Store>this._dbInfo.mStore).rm(key$);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {executeCallback, normaliseKey} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function setItem(this: any, key$: string, value: any, callback?: any) {\n key$ = normaliseKey(key$);\n\n const promise = this.ready().then(() => {\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n const originalValue = value;\n\n return new Promise<any>((resolve, reject) => {\n this._dbInfo.serializer.serialize(value, (value$: string, error: Error) => {\n if (error) {\n reject(error);\n } else {\n try {\n (<Store>this._dbInfo.mStore).set(key$, value$);\n resolve(originalValue);\n } catch (e) {\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","export const _support = true;\nexport {_driver} from './_driver';\nexport {_initStorage} from './_initStorage';\nexport {clear} from './clear';\nexport {dropInstance} from './dropInstance';\nexport {getItem} from './getItem';\nexport {iterate} from './iterate';\nexport {key} from './key';\nexport {keys} from './keys';\nexport {length} from './length';\nexport {removeItem} from './removeItem';\nexport {setItem} from './setItem';\n","/* istanbul ignore file */\n// Deprecate test API key in v7.0.0\n\nimport { SDKBase, createSDK, InstanceWithExtensions, MagicSDKExtensionsOption } from '@magic-sdk/provider';\nimport localForage from 'localforage';\nimport * as memoryDriver from 'localforage-driver-memory';\nimport { IframeController } from './iframe-controller';\n\nexport * from '@magic-sdk/commons';\n\nexport const Magic = createSDK(SDKBase, {\n platform: 'web',\n sdkName: 'magic-sdk',\n version: process.env.WEB_VERSION!,\n defaultEndpoint: 'https://auth.magic.link/',\n ViewController: IframeController,\n configureStorage: async () => {\n const lf = localForage.createInstance({\n name: 'MagicAuthLocalStorageDB',\n storeName: 'MagicAuthLocalStorage',\n });\n\n await lf.defineDriver(memoryDriver);\n await lf.setDriver([localForage.INDEXEDDB, localForage.LOCALSTORAGE, memoryDriver._driver]);\n\n return lf;\n },\n});\n\nexport type Magic<T extends MagicSDKExtensionsOption<any> = MagicSDKExtensionsOption> = InstanceWithExtensions<\n SDKBase,\n T\n>;\n","import { createDuplicateIframeWarning, createModalNotReadyError, createURL, ViewController } from '@magic-sdk/provider';\nimport { MagicIncomingWindowMessage } from '@magic-sdk/types';\n\n/**\n * Magic `<iframe>` overlay styles. These base styles enable `<iframe>` UI\n * to render above all other DOM content.\n */\nconst overlayStyles: Partial<CSSStyleDeclaration> = {\n display: 'none',\n position: 'fixed',\n top: '0',\n right: '0',\n width: '100%',\n height: '100%',\n borderRadius: '0',\n border: 'none',\n // necessary for iOS Safari\n opacity: '0',\n // necessary for iOS 17 and earlier\n zIndex: '-1',\n};\n\n/**\n * Apply iframe styles to the given element.\n * @param elem - An element to apply styles using CSSOM.\n */\nfunction applyOverlayStyles(elem: HTMLElement) {\n for (const [cssProperty, value] of Object.entries(overlayStyles)) {\n (elem.style as any)[cssProperty as any] = value;\n }\n}\n\n/**\n * Checks if the given query params are associated with an active `<iframe>`\n * instance.\n *\n * @param parameters - The unique, encoded query parameters to check for\n * duplicates against.\n */\nfunction checkForSameSrcInstances(parameters: string) {\n const iframes: HTMLIFrameElement[] = [].slice.call(document.querySelectorAll('.magic-iframe'));\n return Boolean(iframes.find(iframe => iframe.src.includes(parameters)));\n}\n\n/**\n * View controller for the Magic `<iframe>` overlay.\n */\nexport class IframeController extends ViewController {\n private activeElement: any = null;\n private iframe!: Promise<HTMLIFrameElement>;\n private relayerSrc = createURL(`/send?params=${encodeURIComponent(this.parameters)}`, this.endpoint).href;\n\n /**\n * Initializes the underlying `<iframe>` element.\n * Initializes the underlying `Window.onmessage` event listener.\n */\n protected init() {\n (this as any).test = 'hello';\n this.iframe = new Promise(resolve => {\n const onload = () => {\n if (!checkForSameSrcInstances(encodeURIComponent(this.parameters))) {\n const iframe = document.createElement('iframe');\n iframe.classList.add('magic-iframe');\n iframe.dataset.magicIframeLabel = createURL(this.endpoint).host;\n iframe.title = 'Secure Modal';\n iframe.src = this.relayerSrc;\n iframe.allow = 'clipboard-read; clipboard-write';\n applyOverlayStyles(iframe);\n document.body.appendChild(iframe);\n resolve(iframe);\n } else {\n createDuplicateIframeWarning().log();\n }\n };\n\n // Check DOM state and load...\n if (['loaded', 'interactive', 'complete'].includes(document.readyState)) {\n onload();\n } else {\n // ...or check load events to load\n window.addEventListener('load', onload, false);\n }\n });\n\n this.iframe.then(iframe => {\n if (iframe instanceof HTMLIFrameElement) {\n iframe.addEventListener('load', async () => {\n this.heartbeatDebounce();\n });\n }\n });\n\n window.addEventListener('message', (event: MessageEvent) => {\n if (event.origin === this.endpoint && event.data.msgType) {\n if (event.data.msgType.includes(MagicIncomingWindowMessage.MAGIC_PONG)) {\n // Mark the Pong time\n this.lastPongTime = Date.now();\n }\n\n if (event.data && this.messageHandlers.size) {\n // If the response object is undefined, we ensure it's at least an\n // empty object before passing to the event listener.\n event.data.response = event.data.response ?? {};\n this.stopHeartBeat();\n for (const handler of this.messageHandlers.values()) {\n handler(event);\n }\n }\n }\n });\n\n window.addEventListener('beforeunload', () => {\n this.stopHeartBeat();\n });\n }\n\n protected async showOverlay() {\n const iframe = await this.iframe;\n iframe.style.display = 'block';\n iframe.style.zIndex = '2147483647';\n iframe.style.opacity = '1';\n this.activeElement = document.activeElement;\n iframe.focus();\n }\n\n protected async hideOverlay() {\n const iframe = await this.iframe;\n iframe.style.display = 'none';\n iframe.style.zIndex = '-1';\n iframe.style.opacity = '0';\n if (this.activeElement?.focus) this.activeElement.focus();\n this.activeElement = null;\n }\n\n protected async _post(data: any) {\n const iframe = await this.iframe;\n if (iframe && iframe.contentWindow) {\n iframe.contentWindow.postMessage(data, this.endpoint);\n } else {\n throw createModalNotReadyError();\n }\n }\n\n protected async checkRelayerExistsInDOM() {\n const iframe = await this.iframe;\n\n // Check iframe reference\n if (!iframe || !iframe.contentWindow) {\n return false;\n }\n\n // Check if the iframe is already in the DOM\n const iframes: HTMLIFrameElement[] = [].slice.call(document.querySelectorAll('.magic-iframe'));\n return Boolean(iframes.find(iframe => iframe.src.includes(encodeURIComponent(this.parameters))));\n }\n\n async reloadRelayer() {\n const iframe = await this.iframe;\n\n // Reset HeartBeat\n this.stopHeartBeat();\n\n if (!iframe) {\n this.init();\n console.warn('Magic SDK: Modal lost, re-initiating');\n return;\n }\n\n if (!iframe.contentWindow) {\n document.body.appendChild(iframe);\n console.warn('Magic SDK: Modal did not append in the iframe, re-initiating');\n return;\n }\n\n if (iframe) {\n // if iframe exists reload the iframe source\n iframe.src = this.relayerSrc;\n }\n }\n}\n","import { Extension } from '@magic-sdk/commons';\nimport { AlgorandConfig, AlgorandPayloadMethod } from './types';\n\nexport class AlgorandExtension extends Extension.Internal<'algod', any> {\n name = 'algod' as const;\n config: any = {};\n\n constructor(public algorandConfig: AlgorandConfig) {\n super();\n\n this.config = {\n rpcUrl: algorandConfig.rpcUrl,\n chainType: 'ALGOD',\n };\n }\n\n public async signTransaction(txn: any) {\n return this.request(this.utils.createJsonRpcRequestPayload(AlgorandPayloadMethod.AlgorandSignTransaction, txn));\n }\n\n public async signBid(txn: any) {\n return this.request(this.utils.createJsonRpcRequestPayload(AlgorandPayloadMethod.AlgorandSignBid, txn));\n }\n\n public async getWallet() {\n return this.request(this.utils.createJsonRpcRequestPayload(AlgorandPayloadMethod.AlgorandGetWallet, []));\n }\n\n public async signGroupTransaction(txns: any[]) {\n return this.request(\n this.utils.createJsonRpcRequestPayload(AlgorandPayloadMethod.AlgorandSignGroupTransaction, txns),\n );\n }\n\n public async signGroupTransactionV2(txns: any) {\n return this.request(\n this.utils.createJsonRpcRequestPayload(AlgorandPayloadMethod.AlgorandSignGroupTransactionV2, txns),\n );\n }\n}\n","(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n var i, r = new Float64Array(16);\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n gf1 = gf([1]),\n _121665 = gf([0xdb41, 1]),\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n x[i] = (h >> 24) & 0xff;\n x[i+1] = (h >> 16) & 0xff;\n x[i+2] = (h >> 8) & 0xff;\n x[i+3] = h & 0xff;\n x[i+4] = (l >> 24) & 0xff;\n x[i+5] = (l >> 16) & 0xff;\n x[i+6] = (l >> 8) & 0xff;\n x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i,d = 0;\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n x0 = x0 + j0 | 0;\n x1 = x1 + j1 | 0;\n x2 = x2 + j2 | 0;\n x3 = x3 + j3 | 0;\n x4 = x4 + j4 | 0;\n x5 = x5 + j5 | 0;\n x6 = x6 + j6 | 0;\n x7 = x7 + j7 | 0;\n x8 = x8 + j8 | 0;\n x9 = x9 + j9 | 0;\n x10 = x10 + j10 | 0;\n x11 = x11 + j11 | 0;\n x12 = x12 + j12 | 0;\n x13 = x13 + j13 | 0;\n x14 = x14 + j14 | 0;\n x15 = x15 + j15 | 0;\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x1 >>> 0 & 0xff;\n o[ 5] = x1 >>> 8 & 0xff;\n o[ 6] = x1 >>> 16 & 0xff;\n o[ 7] = x1 >>> 24 & 0xff;\n\n o[ 8] = x2 >>> 0 & 0xff;\n o[ 9] = x2 >>> 8 & 0xff;\n o[10] = x2 >>> 16 & 0xff;\n o[11] = x2 >>> 24 & 0xff;\n\n o[12] = x3 >>> 0 & 0xff;\n o[13] = x3 >>> 8 & 0xff;\n o[14] = x3 >>> 16 & 0xff;\n o[15] = x3 >>> 24 & 0xff;\n\n o[16] = x4 >>> 0 & 0xff;\n o[17] = x4 >>> 8 & 0xff;\n o[18] = x4 >>> 16 & 0xff;\n o[19] = x4 >>> 24 & 0xff;\n\n o[20] = x5 >>> 0 & 0xff;\n o[21] = x5 >>> 8 & 0xff;\n o[22] = x5 >>> 16 & 0xff;\n o[23] = x5 >>> 24 & 0xff;\n\n o[24] = x6 >>> 0 & 0xff;\n o[25] = x6 >>> 8 & 0xff;\n o[26] = x6 >>> 16 & 0xff;\n o[27] = x6 >>> 24 & 0xff;\n\n o[28] = x7 >>> 0 & 0xff;\n o[29] = x7 >>> 8 & 0xff;\n o[30] = x7 >>> 16 & 0xff;\n o[31] = x7 >>> 24 & 0xff;\n\n o[32] = x8 >>> 0 & 0xff;\n o[33] = x8 >>> 8 & 0xff;\n o[34] = x8 >>> 16 & 0xff;\n o[35] = x8 >>> 24 & 0xff;\n\n o[36] = x9 >>> 0 & 0xff;\n o[37] = x9 >>> 8 & 0xff;\n o[38] = x9 >>> 16 & 0xff;\n o[39] = x9 >>> 24 & 0xff;\n\n o[40] = x10 >>> 0 & 0xff;\n o[41] = x10 >>> 8 & 0xff;\n o[42] = x10 >>> 16 & 0xff;\n o[43] = x10 >>> 24 & 0xff;\n\n o[44] = x11 >>> 0 & 0xff;\n o[45] = x11 >>> 8 & 0xff;\n o[46] = x11 >>> 16 & 0xff;\n o[47] = x11 >>> 24 & 0xff;\n\n o[48] = x12 >>> 0 & 0xff;\n o[49] = x12 >>> 8 & 0xff;\n o[50] = x12 >>> 16 & 0xff;\n o[51] = x12 >>> 24 & 0xff;\n\n o[52] = x13 >>> 0 & 0xff;\n o[53] = x13 >>> 8 & 0xff;\n o[54] = x13 >>> 16 & 0xff;\n o[55] = x13 >>> 24 & 0xff;\n\n o[56] = x14 >>> 0 & 0xff;\n o[57] = x14 >>> 8 & 0xff;\n o[58] = x14 >>> 16 & 0xff;\n o[59] = x14 >>> 24 & 0xff;\n\n o[60] = x15 >>> 0 & 0xff;\n o[61] = x15 >>> 8 & 0xff;\n o[62] = x15 >>> 16 & 0xff;\n o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x5 >>> 0 & 0xff;\n o[ 5] = x5 >>> 8 & 0xff;\n o[ 6] = x5 >>> 16 & 0xff;\n o[ 7] = x5 >>> 24 & 0xff;\n\n o[ 8] = x10 >>> 0 & 0xff;\n o[ 9] = x10 >>> 8 & 0xff;\n o[10] = x10 >>> 16 & 0xff;\n o[11] = x10 >>> 24 & 0xff;\n\n o[12] = x15 >>> 0 & 0xff;\n o[13] = x15 >>> 8 & 0xff;\n o[14] = x15 >>> 16 & 0xff;\n o[15] = x15 >>> 24 & 0xff;\n\n o[16] = x6 >>> 0 & 0xff;\n o[17] = x6 >>> 8 & 0xff;\n o[18] = x6 >>> 16 & 0xff;\n o[19] = x6 >>> 24 & 0xff;\n\n o[20] = x7 >>> 0 & 0xff;\n o[21] = x7 >>> 8 & 0xff;\n o[22] = x7 >>> 16 & 0xff;\n o[23] = x7 >>> 24 & 0xff;\n\n o[24] = x8 >>> 0 & 0xff;\n o[25] = x8 >>> 8 & 0xff;\n o[26] = x8 >>> 16 & 0xff;\n o[27] = x8 >>> 24 & 0xff;\n\n o[28] = x9 >>> 0 & 0xff;\n o[29] = x9 >>> 8 & 0xff;\n o[30] = x9 >>> 16 & 0xff;\n o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n this.buffer = new Uint8Array(16);\n this.r = new Uint16Array(10);\n this.h = new Uint16Array(10);\n this.pad = new Uint16Array(8);\n this.leftover = 0;\n this.fin = 0;\n\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = ((t7 >>> 5)) & 0x007f;\n\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n var hibit = this.fin ? 0 : (1 << 11);\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += (c * 5);\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n var i, want;\n\n if (this.leftover) {\n want = (16 - this.leftover);\n if (want > bytes)\n want = bytes;\n for (i = 0; i < want; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16)\n return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n this.leftover += bytes;\n }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x,0,m,mpos,n,k);\n return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c,0,m,0,d,n,k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x,0,32,n,k);\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n crypto_stream_xor(m,0,c,0,d,n,k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r, a) {\n var i;\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b-1);\n for (var i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction neq25519(a, b) {\n var c = new Uint8Array(32), d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n var d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if(a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if(a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80), r, i;\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n unpack25519(x,p);\n for (i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n for (i=254; i>=0; --i) {\n r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n for (i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n randombytes(x, 32);\n return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n var s = new Uint8Array(32);\n crypto_scalarmult(s, x, y);\n return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n var wh = new Int32Array(16), wl = new Int32Array(16),\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n th, tl, i, j, h, l, a, b, c, d;\n\n var ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n var pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma1\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // K\n h = K[i*2];\n l = K[i*2+1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // w\n h = wh[i%16];\n l = wl[i%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = c & 0xffff | d << 16;\n tl = a & 0xffff | b << 16;\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma0\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i%16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = wh[(j+9)%16];\n l = wl[(j+9)%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma0\n th = wh[(j+1)%16];\n tl = wl[(j+1)%16];\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma1\n th = wh[(j+14)%16];\n tl = wl[(j+14)%16];\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out, m, n) {\n var hh = new Int32Array(8),\n hl = new Int32Array(8),\n x = new Uint8Array(256),\n i, b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\n x[n] = 128;\n\n n = 256-128*(n<112?1:0);\n x[n-9] = 0;\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n return 0;\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n var i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i/8)|0] >> (i&7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n var d = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i+1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64), i;\n for (i = 0; i < 64; i++) x[i] = r[i];\n for (i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n+32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i+j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i;\n var t = new Uint8Array(32), h = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n return n;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n crypto_secretbox_NONCEBYTES = 24,\n crypto_secretbox_ZEROBYTES = 32,\n crypto_secretbox_BOXZEROBYTES = 16,\n crypto_scalarmult_BYTES = 32,\n crypto_scalarmult_SCALARBYTES = 32,\n crypto_box_PUBLICKEYBYTES = 32,\n crypto_box_SECRETKEYBYTES = 32,\n crypto_box_BEFORENMBYTES = 32,\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n crypto_sign_BYTES = 64,\n crypto_sign_PUBLICKEYBYTES = 32,\n crypto_sign_SECRETKEYBYTES = 64,\n crypto_sign_SEEDBYTES = 32,\n crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n crypto_core_hsalsa20: crypto_core_hsalsa20,\n crypto_stream_xor: crypto_stream_xor,\n crypto_stream: crypto_stream,\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n crypto_stream_salsa20: crypto_stream_salsa20,\n crypto_onetimeauth: crypto_onetimeauth,\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n crypto_verify_16: crypto_verify_16,\n crypto_verify_32: crypto_verify_32,\n crypto_secretbox: crypto_secretbox,\n crypto_secretbox_open: crypto_secretbox_open,\n crypto_scalarmult: crypto_scalarmult,\n crypto_scalarmult_base: crypto_scalarmult_base,\n crypto_box_beforenm: crypto_box_beforenm,\n crypto_box_afternm: crypto_box_afternm,\n crypto_box: crypto_box,\n crypto_box_open: crypto_box_open,\n crypto_box_keypair: crypto_box_keypair,\n crypto_hash: crypto_hash,\n crypto_sign: crypto_sign,\n crypto_sign_keypair: crypto_sign_keypair,\n crypto_sign_open: crypto_sign_open,\n\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n crypto_sign_BYTES: crypto_sign_BYTES,\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n crypto_hash_BYTES: crypto_hash_BYTES,\n\n gf: gf,\n D: D,\n L: L,\n pack25519: pack25519,\n unpack25519: unpack25519,\n M: M,\n A: A,\n S: S,\n Z: Z,\n pow2523: pow2523,\n add: add,\n set25519: set25519,\n modL: modL,\n scalarmult: scalarmult,\n scalarbase: scalarbase,\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n for (var i = 0; i < arguments.length; i++) {\n if (!(arguments[i] instanceof Uint8Array))\n throw new TypeError('unexpected type, use Uint8Array');\n }\n}\n\nfunction cleanup(arr) {\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.randomBytes = function(n) {\n var b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return null;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n};\n\nnacl.scalarMult.base = function(n) {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n checkArrayTypes(publicKey, secretKey);\n checkBoxLengths(publicKey, secretKey);\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n crypto_box_beforenm(k, publicKey, secretKey);\n return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n crypto_box_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n crypto_scalarmult_base(pk, secretKey);\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var tmp = new Uint8Array(signedMsg.length);\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n var m = new Uint8Array(mlen);\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n var signedMsg = nacl.sign(msg, secretKey);\n var sig = new Uint8Array(crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES)\n throw new Error('bad signature size');\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error('bad seed size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n checkArrayTypes(msg);\n var h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n randombytes = fn;\n};\n\n(function() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n if (crypto && crypto.getRandomValues) {\n // Browsers.\n var QUOTA = 65536;\n nacl.setPRNG(function(x, n) {\n var i, v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n } else if (typeof require !== 'undefined') {\n // Node.js.\n crypto = require('crypto');\n if (crypto && crypto.randomBytes) {\n nacl.setPRNG(function(x, n) {\n var i, v = crypto.randomBytes(n);\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n }\n }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n","export { LogLevel } from './logger'\nexport { WalletManager, WalletManagerConfig, WalletManagerOptions } from './manager'\nexport {\n AlgodConfig,\n NetworkConfig,\n NetworkConfigBuilder,\n NetworkId,\n DEFAULT_NETWORK_CONFIG\n} from './network'\nexport { State, WalletState, ManagerStatus, DEFAULT_STATE } from './store'\nexport { StorageAdapter } from './storage'\nexport {\n SecureKeyContainer,\n zeroMemory,\n zeroString,\n withSecureKey,\n withSecureKeySync\n} from './secure-key'\nexport { webpackFallback } from './webpack'\nexport * from './wallets'\n","export enum LogLevel {\n DEBUG,\n INFO,\n WARN,\n ERROR\n}\n\nexport class Logger {\n private static instance: Logger | null = null\n private level: LogLevel\n private isClient: boolean\n\n private constructor() {\n this.level = LogLevel.WARN\n this.isClient = typeof window !== 'undefined'\n }\n\n public static getInstance(): Logger {\n if (!Logger.instance) {\n Logger.instance = new Logger()\n }\n return Logger.instance\n }\n\n public static setLevel(level: LogLevel): void {\n Logger.getInstance().level = level\n }\n\n private log(level: LogLevel, scope: string | undefined, message: string, ...args: any[]): void {\n if (level >= this.level && this.isClient) {\n const formattedMessage = scope ? `[${scope}] ${message}` : message\n switch (level) {\n case LogLevel.DEBUG:\n case LogLevel.INFO:\n console.info(formattedMessage, ...args)\n break\n case LogLevel.WARN:\n console.warn(formattedMessage, ...args)\n break\n case LogLevel.ERROR:\n console.error(formattedMessage, ...args)\n break\n }\n }\n }\n\n public createScopedLogger(scope: string) {\n return {\n debug: (message: string, ...args: any[]) => this.log(LogLevel.DEBUG, scope, message, ...args),\n info: (message: string, ...args: any[]) => this.log(LogLevel.INFO, scope, message, ...args),\n warn: (message: string, ...args: any[]) => this.log(LogLevel.WARN, scope, message, ...args),\n error: (message: string, ...args: any[]) => this.log(LogLevel.ERROR, scope, message, ...args)\n }\n }\n\n public debug(message: string, ...args: any[]): void {\n this.log(LogLevel.DEBUG, undefined, message, ...args)\n }\n\n public info(message: string, ...args: any[]): void {\n this.log(LogLevel.INFO, undefined, message, ...args)\n }\n\n public warn(message: string, ...args: any[]): void {\n this.log(LogLevel.WARN, undefined, message, ...args)\n }\n\n public error(message: string, ...args: any[]): void {\n this.log(LogLevel.ERROR, undefined, message, ...args)\n }\n\n // For testing purposes\n public setIsClient(isClient: boolean): void {\n this.isClient = isClient\n }\n}\n\nexport const logger = Logger.getInstance()\n","import { Store } from '@tanstack/store'\nimport algosdk from 'algosdk'\nimport { Logger, LogLevel, logger } from 'src/logger'\nimport {\n createNetworkConfig,\n isNetworkConfig,\n NetworkId,\n type AlgodConfig,\n type NetworkConfig\n} from 'src/network'\nimport { StorageAdapter } from 'src/storage'\nimport {\n DEFAULT_STATE,\n isValidPersistedState,\n LOCAL_STORAGE_KEY,\n removeWallet,\n setActiveNetwork,\n setActiveWallet,\n type State,\n type ManagerStatus,\n type PersistedState\n} from 'src/store'\nimport { createWalletMap } from 'src/utils'\nimport type { BaseWallet } from 'src/wallets/base'\nimport { resolveSkin } from 'src/wallets/skins'\nimport {\n WalletId,\n type SupportedWallet,\n type UIHooks,\n type WalletAccount,\n type WalletConfigMap,\n type WalletIdConfig,\n type WalletKey,\n type WalletMetadata,\n type WalletOptions\n} from 'src/wallets/types'\n\nexport interface WalletManagerOptions {\n resetNetwork?: boolean\n debug?: boolean\n logLevel?: LogLevel\n}\n\nexport interface WalletManagerConfig {\n wallets?: SupportedWallet[]\n networks?: Record<string, NetworkConfig>\n defaultNetwork?: string\n options?: WalletManagerOptions\n}\n\nexport class WalletManager {\n public _clients: Map<WalletKey, BaseWallet> = new Map()\n private baseNetworkConfig: Record<string, NetworkConfig>\n private _uiHooks: UIHooks = {}\n public store: Store<State>\n public subscribe: (callback: (state: State) => void) => () => void\n public options: { resetNetwork: boolean }\n\n private logger: ReturnType<typeof logger.createScopedLogger>\n\n constructor({\n wallets = [],\n networks,\n defaultNetwork = 'testnet',\n options = {}\n }: WalletManagerConfig = {}) {\n // Initialize scoped logger\n this.logger = this.initializeLogger(options)\n\n this.logger.debug('Initializing WalletManager with config:', {\n wallets,\n networks,\n defaultNetwork,\n options\n })\n\n // Load persisted state from local storage\n const persistedState = this.loadPersistedState()\n\n // Store the base network config from `networks` (or created default)\n this.baseNetworkConfig = networks || createNetworkConfig()\n\n // Initialize network config\n const networkConfig = this.initNetworkConfig(this.baseNetworkConfig, persistedState)\n\n // Initialize options\n this.options = { resetNetwork: options.resetNetwork || false }\n\n // Set active network\n const activeNetwork = this.options.resetNetwork\n ? defaultNetwork\n : persistedState?.activeNetwork || defaultNetwork\n\n // Validate active network exists in config\n if (!networkConfig[activeNetwork]) {\n throw new Error(`Network \"${activeNetwork}\" not found in network configuration`)\n }\n\n // Create Algod client for active network\n const algodClient = this.createAlgodClient(networkConfig[activeNetwork].algod)\n\n // Create initial state\n const initialState: State = {\n ...DEFAULT_STATE,\n ...persistedState,\n networkConfig,\n activeNetwork,\n algodClient\n }\n\n // Create store\n this.store = new Store<State>(initialState, {\n onUpdate: () => this.savePersistedState()\n })\n\n // Save persisted state immediately\n this.savePersistedState()\n\n // Subscribe to store updates\n this.subscribe = (callback: (state: State) => void): (() => void) => {\n const unsubscribe = this.store.subscribe(() => {\n callback(this.store.state)\n })\n\n return unsubscribe\n }\n\n // Initialize wallets\n this.initializeWallets(wallets)\n }\n\n // ---------- Logging ----------------------------------------------- //\n\n private initializeLogger(\n options: WalletManagerOptions\n ): ReturnType<typeof logger.createScopedLogger> {\n const logLevel = this.determineLogLevel(options)\n Logger.setLevel(logLevel)\n return logger.createScopedLogger('WalletManager')\n }\n\n private determineLogLevel(options: WalletManagerOptions): LogLevel {\n if (options?.debug) {\n return LogLevel.DEBUG\n }\n return options?.logLevel !== undefined ? options.logLevel : LogLevel.WARN\n }\n\n // ---------- Store ------------------------------------------------- //\n\n public get algodClient(): algosdk.Algodv2 {\n return this.store.state.algodClient\n }\n\n public set algodClient(algodClient: algosdk.Algodv2) {\n this.store.setState((state) => ({\n ...state,\n algodClient\n }))\n }\n\n private loadPersistedState(): PersistedState | null {\n try {\n const serializedState = StorageAdapter.getItem(LOCAL_STORAGE_KEY)\n if (serializedState === null) {\n return null\n }\n const parsedState = JSON.parse(serializedState)\n if (!isValidPersistedState(parsedState)) {\n this.logger.warn('Parsed state:', parsedState)\n throw new Error('Persisted state is invalid')\n }\n return parsedState\n } catch (error: any) {\n this.logger.error(`Could not load state from local storage: ${error.message}`)\n return null\n }\n }\n\n private savePersistedState(): void {\n try {\n const { wallets, activeWallet, activeNetwork, networkConfig } = this.store.state\n const persistedState: PersistedState = {\n wallets,\n activeWallet,\n activeNetwork,\n customNetworkConfigs: {}\n }\n\n // Compare current network config with base config to find user customizations\n for (const [networkId, currentConfig] of Object.entries(networkConfig)) {\n const baseNetworkConfig = this.baseNetworkConfig[networkId]\n if (!baseNetworkConfig) continue\n\n // Check if there are any differences from base config\n const customizations: Partial<NetworkConfig> = {}\n let hasCustomizations = false\n\n // Compare algod configuration\n if (JSON.stringify(currentConfig.algod) !== JSON.stringify(baseNetworkConfig.algod)) {\n customizations.algod = currentConfig.algod\n hasCustomizations = true\n }\n\n // If there are customizations, add them to the persisted state\n if (hasCustomizations) {\n persistedState.customNetworkConfigs = {\n ...(persistedState.customNetworkConfigs || {}),\n [networkId]: customizations\n }\n }\n }\n\n const serializedState = JSON.stringify(persistedState)\n StorageAdapter.setItem(LOCAL_STORAGE_KEY, serializedState)\n } catch (error) {\n this.logger.error('Could not save state to local storage:', error)\n }\n }\n\n // ---------- Status ------------------------------------------------ //\n\n public get status(): ManagerStatus {\n return this.store.state.managerStatus\n }\n\n public get isReady(): boolean {\n return this.store.state.managerStatus === 'ready'\n }\n\n // ---------- Wallets ----------------------------------------------- //\n\n /**\n * Derive the wallet key from wallet config.\n * For WalletConnect with a skin option, returns 'walletconnect:skinId'.\n * For other wallets, returns the wallet ID.\n */\n private deriveWalletKey<T extends keyof WalletConfigMap>(\n walletId: T,\n walletOptions?: WalletOptions<T>\n ): WalletKey {\n // Check if this is a WalletConnect config with a skin option\n if (walletId === WalletId.WALLETCONNECT && walletOptions) {\n const options = walletOptions as WalletOptions<WalletId.WALLETCONNECT>\n if (options.skin) {\n const skin = resolveSkin(options.skin)\n if (skin) {\n return `walletconnect:${skin.id}`\n }\n }\n }\n return walletId\n }\n\n private initializeWallets<T extends keyof WalletConfigMap>(\n walletsConfig: Array<T | WalletIdConfig<T>>\n ) {\n this.logger.info('Initializing wallets...')\n\n for (const walletConfig of walletsConfig) {\n let walletId: T\n let walletOptions: WalletOptions<T> | undefined\n let walletMetadata: Partial<WalletMetadata> | undefined\n\n // Parse wallet config\n if (typeof walletConfig === 'string') {\n walletId = walletConfig\n } else {\n const { id, options, metadata } = walletConfig\n walletId = id\n walletOptions = options\n walletMetadata = metadata\n }\n\n // Derive wallet key (handles skin-based composite keys)\n const walletKey = this.deriveWalletKey(walletId, walletOptions)\n\n // Check for duplicate wallet keys\n if (this._clients.has(walletKey)) {\n this.logger.warn(`Duplicate wallet key: ${walletKey}. Skipping...`)\n continue\n }\n\n // Get wallet class\n const walletMap = createWalletMap()\n const WalletClass = walletMap[walletId]\n if (!WalletClass) {\n this.logger.error(`Wallet not found: ${walletId}`)\n continue\n }\n\n // Initialize wallet\n const walletInstance = new WalletClass({\n id: walletId,\n metadata: walletMetadata,\n options: walletOptions as any,\n getAlgodClient: this.getAlgodClient,\n store: this.store,\n subscribe: this.subscribe,\n managerUIHooks: this._uiHooks\n })\n\n this._clients.set(walletKey, walletInstance)\n this.logger.info(`✅ Initialized ${walletKey}`)\n }\n\n const state = this.store.state\n\n // Check if connected wallets are still valid\n const connectedWallets = Object.keys(state.wallets) as WalletKey[]\n for (const walletKey of connectedWallets) {\n if (!this._clients.has(walletKey)) {\n this.logger.warn(`Connected wallet not found: ${walletKey}`)\n removeWallet(this.store, { walletId: walletKey })\n }\n }\n\n // Check if active wallet is still valid\n if (state.activeWallet && !this._clients.has(state.activeWallet)) {\n this.logger.warn(`Active wallet not found: ${state.activeWallet}`)\n setActiveWallet(this.store, { walletId: null })\n }\n }\n\n public get wallets(): BaseWallet[] {\n return [...this._clients.values()]\n }\n\n public getWallet(walletKey: WalletKey): BaseWallet | undefined {\n return this._clients.get(walletKey)\n }\n\n public async resumeSessions(): Promise<void> {\n try {\n const promises = this.wallets.map((wallet) => wallet?.resumeSession())\n await Promise.all(promises)\n } finally {\n this.store.setState((state) => ({\n ...state,\n managerStatus: 'ready'\n }))\n }\n }\n\n public async disconnect(): Promise<void> {\n const promises = this.wallets\n .filter((wallet) => wallet.isConnected)\n .map((wallet) => wallet?.disconnect())\n\n await Promise.all(promises)\n }\n\n // ---------- UI Hooks ----------------------------------------------- //\n\n public registerUIHook<K extends keyof UIHooks>(name: K, callback: UIHooks[K]): void {\n this._uiHooks[name] = callback\n }\n\n public unregisterUIHook(name: keyof UIHooks): void {\n delete this._uiHooks[name]\n }\n\n // ---------- Network ----------------------------------------------- //\n\n private initNetworkConfig(\n baseConfig: Record<string, NetworkConfig>,\n persistedState?: PersistedState | null\n ): Record<string, NetworkConfig> {\n this.logger.info('Initializing network configuration...')\n\n // Use provided persisted state for custom configurations\n const customConfigs = persistedState?.customNetworkConfigs || {}\n\n // Merge base config with custom overrides\n const config: Record<string, NetworkConfig> = {}\n for (const [networkId, baseNetworkConfig] of Object.entries(baseConfig)) {\n const customNetworkConfig = customConfigs[networkId]\n config[networkId] = {\n ...baseNetworkConfig,\n ...customNetworkConfig,\n // Ensure algod config is also deeply merged\n algod: {\n ...baseNetworkConfig.algod,\n ...(customNetworkConfig?.algod || {})\n }\n }\n }\n\n // Validate network configurations\n for (const [id, network] of Object.entries(config)) {\n if (!isNetworkConfig(network)) {\n throw new Error(`Invalid network configuration for \"${id}\"`)\n }\n }\n\n this.logger.debug('Network configuration:', config)\n return config\n }\n\n private createAlgodClient(config: AlgodConfig): algosdk.Algodv2 {\n this.logger.info(`Creating new Algodv2 client...`)\n\n const { token = '', baseServer, port = '', headers = {} } = config\n return new algosdk.Algodv2(token, baseServer, port, headers)\n }\n\n public getAlgodClient = (): algosdk.Algodv2 => {\n return this.algodClient\n }\n\n public setActiveNetwork = async (networkId: NetworkId | string): Promise<void> => {\n if (this.activeNetwork === networkId) {\n return\n }\n\n if (!this.networkConfig[networkId]) {\n throw new Error(`Network \"${networkId}\" not found in network configuration`)\n }\n\n const algodClient = this.createAlgodClient(this.networkConfig[networkId].algod)\n setActiveNetwork(this.store, { networkId, algodClient })\n\n this.logger.info(`✅ Active network set to ${networkId}`)\n }\n\n public updateAlgodConfig(networkId: string, algodConfig: Partial<AlgodConfig>): void {\n // Verify network exists\n if (!this.networkConfig[networkId]) {\n throw new Error(`Network \"${networkId}\" not found in network configuration`)\n }\n\n // Create new config merging existing with updates\n const updatedConfig = {\n ...this.networkConfig[networkId],\n algod: {\n ...this.networkConfig[networkId].algod,\n ...algodConfig\n }\n }\n\n // Validate the new configuration\n if (!isNetworkConfig(updatedConfig)) {\n throw new Error('Invalid network configuration')\n }\n\n // Update the network config\n this.store.setState((state) => ({\n ...state,\n networkConfig: {\n ...state.networkConfig,\n [networkId]: updatedConfig\n }\n }))\n\n // If this is the active network, update the algod client\n if (this.activeNetwork === networkId) {\n this.algodClient = this.createAlgodClient(updatedConfig.algod)\n }\n\n // Save the updated configuration\n this.savePersistedState()\n\n this.logger.info(`✅ Updated algod configuration for ${networkId}`)\n }\n\n public resetNetworkConfig(networkId: string): void {\n // Verify network exists\n if (!this.baseNetworkConfig[networkId]) {\n throw new Error(`Network \"${networkId}\" not found in network configuration`)\n }\n\n // Reset to base configuration\n this.store.setState((state) => ({\n ...state,\n networkConfig: {\n ...state.networkConfig,\n [networkId]: { ...this.baseNetworkConfig[networkId] }\n }\n }))\n\n // If this is the active network, update the algod client\n if (this.activeNetwork === networkId) {\n this.algodClient = this.createAlgodClient(this.baseNetworkConfig[networkId].algod)\n }\n\n // Load current persisted state\n const persistedState = this.loadPersistedState()\n if (persistedState?.customNetworkConfigs) {\n // Remove the network's customizations\n delete persistedState.customNetworkConfigs[networkId]\n // Save the updated state\n StorageAdapter.setItem(LOCAL_STORAGE_KEY, JSON.stringify(persistedState))\n }\n\n this.logger.info(`✅ Reset network configuration for ${networkId}`)\n }\n\n public get activeNetwork(): string {\n return this.store.state.activeNetwork\n }\n\n public get networkConfig(): Record<string, NetworkConfig> {\n return this.store.state.networkConfig\n }\n\n public get activeNetworkConfig(): NetworkConfig {\n const { networkConfig, activeNetwork } = this.store.state\n return networkConfig[activeNetwork]\n }\n\n // ---------- Active Wallet ----------------------------------------- //\n\n public get activeWallet(): BaseWallet | null {\n const state = this.store.state\n const activeWallet = this.wallets.find((wallet) => wallet.walletKey === state.activeWallet)\n if (!activeWallet) {\n return null\n }\n\n return activeWallet\n }\n\n public get activeWalletAccounts(): WalletAccount[] | null {\n if (!this.activeWallet) {\n return null\n }\n return this.activeWallet.accounts\n }\n\n public get activeWalletAddresses(): string[] | null {\n if (!this.activeWallet) {\n return null\n }\n return this.activeWallet.accounts.map((account) => account.address)\n }\n\n public get activeAccount(): WalletAccount | null {\n if (!this.activeWallet) {\n return null\n }\n return this.activeWallet.activeAccount\n }\n\n public get activeAddress(): string | null {\n if (!this.activeAccount) {\n return null\n }\n return this.activeAccount.address\n }\n\n // ---------- Sign Transactions ------------------------------------- //\n\n public get signTransactions(): BaseWallet['signTransactions'] {\n if (!this.activeWallet) {\n this.logger.error('No active wallet found!')\n throw new Error('No active wallet found!')\n }\n return this.activeWallet.signTransactions\n }\n\n public get transactionSigner(): algosdk.TransactionSigner {\n if (!this.activeWallet) {\n this.logger.error('No active wallet found!')\n throw new Error('No active wallet found!')\n }\n return this.activeWallet.transactionSigner\n }\n}\n","import algosdk from 'algosdk'\n\nexport interface AlgodConfig {\n token: string | algosdk.AlgodTokenHeader | algosdk.CustomTokenHeader | algosdk.BaseHTTPClient\n baseServer: string\n port?: string | number\n headers?: Record<string, string>\n}\n\nexport interface NetworkConfig {\n algod: AlgodConfig\n genesisHash?: string\n genesisId?: string\n isTestnet?: boolean\n caipChainId?: string\n}\n\n// Default configurations\nexport const DEFAULT_NETWORK_CONFIG: Record<string, NetworkConfig> = {\n mainnet: {\n algod: {\n token: '',\n baseServer: 'https://mainnet-api.4160.nodely.dev',\n headers: {}\n },\n isTestnet: false,\n genesisHash: 'wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=',\n genesisId: 'mainnet-v1.0',\n caipChainId: 'algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73k'\n },\n testnet: {\n algod: {\n token: '',\n baseServer: 'https://testnet-api.4160.nodely.dev',\n headers: {}\n },\n isTestnet: true,\n genesisHash: 'SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=',\n genesisId: 'testnet-v1.0',\n caipChainId: 'algorand:SGO1GKSzyE7IEPItTxCByw9x8FmnrCDe'\n },\n betanet: {\n algod: {\n token: '',\n baseServer: 'https://betanet-api.4160.nodely.dev',\n headers: {}\n },\n isTestnet: true,\n genesisHash: 'mFgazF-2uRS1tMiL9dsj01hJGySEmPN2OvOTQHJ6iQg=',\n genesisId: 'betanet-v1.0',\n caipChainId: 'algorand:mFgazF-2uRS1tMiL9dsj01hJGySEmPN2'\n },\n fnet: {\n algod: {\n token: '',\n baseServer: 'https://fnet-api.4160.nodely.dev',\n headers: {}\n },\n isTestnet: true,\n genesisHash: 'kUt08LxeVAAGHnh4JoAoAMM9ql_hBwSoRrQQKWSVgxk=',\n genesisId: 'fnet-v1',\n caipChainId: 'algorand:kUt08LxeVAAGHnh4JoAoAMM9ql_hBwSo'\n },\n localnet: {\n algod: {\n token: 'a'.repeat(64),\n baseServer: 'http://localhost',\n port: 4001,\n headers: {}\n },\n isTestnet: true\n }\n}\n\n// Type for configuring default networks, excluding immutable identifiers\nexport type DefaultNetworkConfig = Omit<\n Partial<NetworkConfig>,\n 'genesisHash' | 'genesisId' | 'caipChainId'\n>\n\nexport class NetworkConfigBuilder {\n private networks: Map<string, NetworkConfig>\n\n constructor() {\n this.networks = new Map(Object.entries(DEFAULT_NETWORK_CONFIG))\n }\n\n // Methods to customize default networks\n mainnet(config: DefaultNetworkConfig) {\n this.networks.set('mainnet', {\n ...DEFAULT_NETWORK_CONFIG.mainnet,\n ...config,\n genesisHash: DEFAULT_NETWORK_CONFIG.mainnet.genesisHash!,\n genesisId: DEFAULT_NETWORK_CONFIG.mainnet.genesisId!,\n caipChainId: DEFAULT_NETWORK_CONFIG.mainnet.caipChainId!,\n algod: {\n ...DEFAULT_NETWORK_CONFIG.mainnet.algod,\n ...(config.algod || {})\n }\n })\n return this\n }\n\n testnet(config: DefaultNetworkConfig) {\n this.networks.set('testnet', {\n ...DEFAULT_NETWORK_CONFIG.testnet,\n ...config,\n genesisHash: DEFAULT_NETWORK_CONFIG.testnet.genesisHash!,\n genesisId: DEFAULT_NETWORK_CONFIG.testnet.genesisId!,\n caipChainId: DEFAULT_NETWORK_CONFIG.testnet.caipChainId!,\n algod: {\n ...DEFAULT_NETWORK_CONFIG.testnet.algod,\n ...(config.algod || {})\n }\n })\n return this\n }\n\n betanet(config: DefaultNetworkConfig) {\n this.networks.set('betanet', {\n ...DEFAULT_NETWORK_CONFIG.betanet,\n ...config,\n genesisHash: DEFAULT_NETWORK_CONFIG.betanet.genesisHash!,\n genesisId: DEFAULT_NETWORK_CONFIG.betanet.genesisId!,\n caipChainId: DEFAULT_NETWORK_CONFIG.betanet.caipChainId!,\n algod: {\n ...DEFAULT_NETWORK_CONFIG.betanet.algod,\n ...(config.algod || {})\n }\n })\n return this\n }\n\n fnet(config: DefaultNetworkConfig) {\n this.networks.set('fnet', {\n ...DEFAULT_NETWORK_CONFIG.fnet,\n ...config,\n genesisHash: DEFAULT_NETWORK_CONFIG.fnet.genesisHash!,\n genesisId: DEFAULT_NETWORK_CONFIG.fnet.genesisId!,\n caipChainId: DEFAULT_NETWORK_CONFIG.fnet.caipChainId!,\n algod: {\n ...DEFAULT_NETWORK_CONFIG.fnet.algod,\n ...(config.algod || {})\n }\n })\n return this\n }\n\n localnet(config: Partial<NetworkConfig>) {\n this.networks.set('localnet', {\n ...DEFAULT_NETWORK_CONFIG.localnet,\n ...config,\n algod: {\n ...DEFAULT_NETWORK_CONFIG.localnet.algod,\n ...(config.algod || {})\n }\n })\n return this\n }\n\n // Method to add custom networks (still needs full NetworkConfig)\n addNetwork(id: string, config: NetworkConfig) {\n if (DEFAULT_NETWORK_CONFIG[id]) {\n throw new Error(\n `Cannot add network with reserved id \"${id}\". Use the ${id}() method instead.`\n )\n }\n this.networks.set(id, config)\n return this\n }\n\n build() {\n return Object.fromEntries(this.networks)\n }\n}\n\n// Create a default builder with common presets\nexport const createNetworkConfig = () => new NetworkConfigBuilder().build()\n\n// Check if the algod token is valid\nfunction isValidToken(\n token: unknown\n): token is string | algosdk.AlgodTokenHeader | algosdk.CustomTokenHeader | algosdk.BaseHTTPClient {\n if (typeof token === 'string') return true\n if (typeof token !== 'object' || token === null) return false\n\n // Check if it's an AlgodTokenHeader\n if ('X-Algo-API-Token' in token && typeof token['X-Algo-API-Token'] === 'string') return true\n\n // Check if it's a BaseHTTPClient\n if ('get' in token && 'post' in token && 'delete' in token) return true\n\n // Check if it's a CustomTokenHeader (object with string values)\n return Object.values(token).every((value) => typeof value === 'string')\n}\n\n// Type guard for runtime validation\nexport function isNetworkConfig(config: unknown): config is NetworkConfig {\n if (typeof config !== 'object' || config === null) return false\n\n const { algod, isTestnet, genesisHash, genesisId, caipChainId } = config as NetworkConfig\n\n const isValidAlgod =\n typeof algod === 'object' &&\n algod !== null &&\n isValidToken(algod.token) &&\n typeof algod.baseServer === 'string'\n\n return (\n isValidAlgod &&\n (isTestnet === undefined || typeof isTestnet === 'boolean') &&\n (genesisHash === undefined || typeof genesisHash === 'string') &&\n (genesisId === undefined || typeof genesisId === 'string') &&\n (caipChainId === undefined || typeof caipChainId === 'string')\n )\n}\n\nexport enum NetworkId {\n MAINNET = 'mainnet',\n TESTNET = 'testnet',\n BETANET = 'betanet',\n FNET = 'fnet',\n LOCALNET = 'localnet'\n}\n","export class StorageAdapter {\n static getItem(key: string): string | null {\n if (typeof window === 'undefined') {\n return null\n }\n return localStorage.getItem(key)\n }\n\n static setItem(key: string, value: string): void {\n if (typeof window === 'undefined') {\n return\n }\n localStorage.setItem(key, value)\n }\n\n static removeItem(key: string): void {\n if (typeof window === 'undefined') {\n return\n }\n localStorage.removeItem(key)\n }\n}\n","import algosdk from 'algosdk'\nimport { logger } from 'src/logger'\nimport { DEFAULT_NETWORK_CONFIG, NetworkConfig, NetworkId } from 'src/network'\nimport { WalletId, type WalletAccount, type WalletKey } from 'src/wallets/types'\nimport type { Store } from '@tanstack/store'\n\nexport type WalletState = {\n accounts: WalletAccount[]\n activeAccount: WalletAccount | null\n}\n\nexport type WalletStateMap = Partial<Record<WalletKey, WalletState>>\n\nexport type ManagerStatus = 'initializing' | 'ready'\n\nexport interface State {\n wallets: WalletStateMap\n activeWallet: WalletKey | null\n activeNetwork: string\n algodClient: algosdk.Algodv2\n managerStatus: ManagerStatus\n networkConfig: Record<string, NetworkConfig>\n customNetworkConfigs: Record<string, Partial<NetworkConfig>>\n}\n\nexport const DEFAULT_STATE: State = {\n wallets: {},\n activeWallet: null,\n activeNetwork: 'testnet',\n algodClient: new algosdk.Algodv2('', 'https://testnet-api.4160.nodely.dev/'),\n managerStatus: 'initializing',\n networkConfig: DEFAULT_NETWORK_CONFIG,\n customNetworkConfigs: {}\n}\n\nexport type PersistedState = Omit<State, 'algodClient' | 'managerStatus' | 'networkConfig'>\n\nexport const LOCAL_STORAGE_KEY = '@txnlab/use-wallet:v4'\n\n// State mutations\n\nexport function addWallet(\n store: Store<State>,\n { walletId, wallet }: { walletId: WalletKey; wallet: WalletState }\n) {\n store.setState((state) => {\n const updatedWallets = {\n ...state.wallets,\n [walletId]: {\n accounts: wallet.accounts.map((account) => ({ ...account })),\n activeAccount: wallet.activeAccount ? { ...wallet.activeAccount } : null\n }\n }\n\n return {\n ...state,\n wallets: updatedWallets,\n activeWallet: walletId\n }\n })\n}\n\nexport function removeWallet(store: Store<State>, { walletId }: { walletId: WalletKey }) {\n store.setState((state) => {\n const updatedWallets = { ...state.wallets }\n delete updatedWallets[walletId]\n\n return {\n ...state,\n wallets: updatedWallets,\n activeWallet: state.activeWallet === walletId ? null : state.activeWallet\n }\n })\n}\n\nexport function setActiveWallet(store: Store<State>, { walletId }: { walletId: WalletKey | null }) {\n store.setState((state) => ({\n ...state,\n activeWallet: walletId\n }))\n}\n\nexport function setActiveAccount(\n store: Store<State>,\n { walletId, address }: { walletId: WalletKey; address: string }\n) {\n store.setState((state) => {\n const wallet = state.wallets[walletId]\n if (!wallet) {\n logger.warn(`Wallet with id \"${walletId}\" not found`)\n return state\n }\n\n const newActiveAccount = wallet.accounts.find((a) => a.address === address)\n if (!newActiveAccount) {\n logger.warn(`Account with address ${address} not found in wallet \"${walletId}\"`)\n return state\n }\n\n const updatedWallet = {\n ...wallet,\n accounts: wallet.accounts.map((account) => ({ ...account })),\n activeAccount: { ...newActiveAccount }\n }\n\n const updatedWallets = {\n ...state.wallets,\n [walletId]: updatedWallet\n }\n\n return {\n ...state,\n wallets: updatedWallets\n }\n })\n}\n\nexport function setAccounts(\n store: Store<State>,\n { walletId, accounts }: { walletId: WalletKey; accounts: WalletAccount[] }\n) {\n store.setState((state) => {\n const wallet = state.wallets[walletId]\n if (!wallet) {\n logger.warn(`Wallet with id \"${walletId}\" not found`)\n return state\n }\n\n const newAccounts = accounts.map((account) => ({ ...account }))\n\n const isActiveAccountConnected = newAccounts.some(\n (account) => account.address === wallet.activeAccount?.address\n )\n\n const newActiveAccount = isActiveAccountConnected\n ? { ...wallet.activeAccount! }\n : newAccounts[0] || null\n\n const updatedWallet = {\n ...wallet,\n accounts: newAccounts,\n activeAccount: newActiveAccount\n }\n\n const updatedWallets = {\n ...state.wallets,\n [walletId]: updatedWallet\n }\n\n return {\n ...state,\n wallets: updatedWallets\n }\n })\n}\n\nexport function setActiveNetwork(\n store: Store<State>,\n { networkId, algodClient }: { networkId: NetworkId | string; algodClient: algosdk.Algodv2 }\n) {\n store.setState((state) => ({\n ...state,\n activeNetwork: networkId,\n algodClient\n }))\n}\n\n// Type guards\n\nexport function isValidWalletId(walletId: any): walletId is WalletId {\n return Object.values(WalletId).includes(walletId)\n}\n\n/**\n * Check if a value is a valid WalletKey.\n * A WalletKey can be either:\n * - A standard WalletId enum value\n * - A composite string in the format 'walletconnect:skinId'\n */\nexport function isValidWalletKey(walletKey: any): walletKey is WalletKey {\n if (isValidWalletId(walletKey)) {\n return true\n }\n // Check for composite key format: walletconnect:skinId\n if (typeof walletKey === 'string' && walletKey.startsWith(`${WalletId.WALLETCONNECT}:`)) {\n const skinId = walletKey.slice(`${WalletId.WALLETCONNECT}:`.length)\n return skinId.length > 0\n }\n return false\n}\n\nexport function isValidWalletAccount(account: any): account is WalletAccount {\n return (\n typeof account === 'object' &&\n account !== null &&\n typeof account.name === 'string' &&\n typeof account.address === 'string'\n )\n}\n\nexport function isValidWalletState(wallet: any): wallet is WalletState {\n return (\n typeof wallet === 'object' &&\n wallet !== null &&\n Array.isArray(wallet.accounts) &&\n wallet.accounts.every(isValidWalletAccount) &&\n (wallet.activeAccount === null || isValidWalletAccount(wallet.activeAccount))\n )\n}\n\nexport function isValidPersistedState(state: unknown): state is PersistedState {\n return (\n typeof state === 'object' &&\n state !== null &&\n 'wallets' in state &&\n 'activeWallet' in state &&\n 'activeNetwork' in state &&\n (!('customNetworkConfigs' in state) ||\n (typeof state.customNetworkConfigs === 'object' && state.customNetworkConfigs !== null))\n )\n}\n","import { CustomWallet, CustomWalletOptions } from './custom'\nimport { DeflyWallet, type DeflyWalletConnectOptions } from './defly'\nimport { DeflyWebWallet } from './defly-web'\nimport { ExodusWallet, type ExodusOptions } from './exodus'\nimport { KibisisWallet } from './kibisis'\nimport { KmdWallet, type KmdOptions } from './kmd'\nimport { LuteConnectOptions, LuteWallet } from './lute'\nimport { MagicAuth, MagicAuthOptions } from './magic'\nimport { MetaMaskWallet, type MetaMaskWalletOptions } from './metamask'\nimport { MnemonicWallet, type MnemonicOptions } from './mnemonic'\nimport { PeraWallet, type PeraWalletConnectOptions } from './pera'\nimport { RainbowWallet, type RainbowWalletOptions } from './rainbow'\nimport { WalletConnect, type WalletConnectOptions } from './walletconnect'\nimport { Web3AuthWallet, type Web3AuthOptions } from './web3auth'\nimport { BiatecWallet } from './biatec'\nimport type { Store } from '@tanstack/store'\nimport type algosdk from 'algosdk'\nimport type { State } from 'src/store'\nimport { W3Wallet } from './w3wallet'\n\nexport enum WalletId {\n BIATEC = 'biatec',\n DEFLY = 'defly',\n DEFLY_WEB = 'defly-web',\n CUSTOM = 'custom',\n EXODUS = 'exodus',\n KIBISIS = 'kibisis',\n KMD = 'kmd',\n LUTE = 'lute',\n MAGIC = 'magic',\n METAMASK = 'metamask',\n MNEMONIC = 'mnemonic',\n PERA = 'pera',\n RAINBOW = 'rainbow',\n WALLETCONNECT = 'walletconnect',\n WEB3AUTH = 'web3auth',\n W3_WALLET = 'w3-wallet'\n}\n\n// ---------- WalletConnect Skins ---------- //\n\n/**\n * Metadata for a WalletConnect skin. Used to customize the appearance of\n * a WalletConnect-based wallet in the UI.\n */\nexport interface WalletConnectSkin {\n /** Unique identifier for the skin (e.g., 'biatec', 'voiwallet') */\n id: string\n /** Display name for the wallet */\n name: string\n /** Wallet icon as a data URI or URL */\n icon: string\n}\n\n/**\n * Skin option can be either:\n * - A string ID referencing a built-in skin (e.g., 'biatec')\n * - A full WalletConnectSkin object for custom skins\n */\nexport type WalletConnectSkinOption = string | WalletConnectSkin\n\n/**\n * Composite key type that can be either:\n * - A standard WalletId (for backward compatibility)\n * - A composite string for skinned WalletConnect instances (e.g., 'walletconnect:biatec')\n */\nexport type WalletKey = WalletId | `${WalletId.WALLETCONNECT}:${string}`\n\nexport type WalletMap = {\n [WalletId.BIATEC]: typeof BiatecWallet\n [WalletId.CUSTOM]: typeof CustomWallet\n [WalletId.DEFLY]: typeof DeflyWallet\n [WalletId.DEFLY_WEB]: typeof DeflyWebWallet\n [WalletId.EXODUS]: typeof ExodusWallet\n [WalletId.KIBISIS]: typeof KibisisWallet\n [WalletId.KMD]: typeof KmdWallet\n [WalletId.LUTE]: typeof LuteWallet\n [WalletId.MAGIC]: typeof MagicAuth\n [WalletId.METAMASK]: typeof MetaMaskWallet\n [WalletId.MNEMONIC]: typeof MnemonicWallet\n [WalletId.PERA]: typeof PeraWallet\n [WalletId.RAINBOW]: typeof RainbowWallet\n [WalletId.WALLETCONNECT]: typeof WalletConnect\n [WalletId.WEB3AUTH]: typeof Web3AuthWallet\n [WalletId.W3_WALLET]: typeof W3Wallet\n}\n\nexport type WalletOptionsMap = {\n [WalletId.BIATEC]: WalletConnectOptions\n [WalletId.CUSTOM]: CustomWalletOptions\n [WalletId.DEFLY]: DeflyWalletConnectOptions\n [WalletId.DEFLY_WEB]: Record<string, never>\n [WalletId.EXODUS]: ExodusOptions\n [WalletId.KIBISIS]: Record<string, never>\n [WalletId.KMD]: KmdOptions\n [WalletId.LUTE]: LuteConnectOptions\n [WalletId.MAGIC]: MagicAuthOptions\n [WalletId.METAMASK]: MetaMaskWalletOptions\n [WalletId.MNEMONIC]: MnemonicOptions\n [WalletId.PERA]: PeraWalletConnectOptions\n [WalletId.RAINBOW]: RainbowWalletOptions\n [WalletId.WALLETCONNECT]: WalletConnectOptions\n [WalletId.WEB3AUTH]: Web3AuthOptions\n [WalletId.W3_WALLET]: Record<string, never>\n}\n\nexport type SupportedWallet = WalletIdConfig<WalletId> | WalletId\n\nexport type WalletConfigMap = {\n [K in keyof WalletOptionsMap]: {\n options?: WalletOptionsMap[K]\n metadata?: Partial<WalletMetadata>\n }\n}\n\nexport type WalletOptions<T extends keyof WalletOptionsMap> = WalletOptionsMap[T]\n\nexport type WalletConfig<T extends keyof WalletConfigMap> = WalletConfigMap[T]\n\nexport type WalletIdConfig<T extends keyof WalletConfigMap> = {\n [K in T]: {\n id: K\n } & WalletConfigMap[K]\n}[T]\n\ntype NonEmptyArray<T> = [T, ...T[]]\n\nexport type SupportedWallets = NonEmptyArray<SupportedWallet>\n\nexport type WalletMetadata = {\n name: string\n icon: string\n isLiquid?: 'EVM'\n}\n\nexport type LiquidEvmMetadata = WalletMetadata & {\n isLiquid: 'EVM'\n}\n\nexport interface UIHooks {\n onBeforeSign?: (\n txnGroup: algosdk.Transaction[] | Uint8Array[],\n indexesToSign?: number[]\n ) => Promise<void>\n onAfterSign?: (success: boolean, errorMessage?: string) => void\n onConnect?: (evmAccount: { evmAddress: string; algorandAddress: string }) => void\n}\n\nexport interface BaseWalletConstructor {\n id: WalletId\n /** Optional wallet key override. Defaults to id. Used for skinned WalletConnect instances. */\n walletKey?: WalletKey\n metadata: Partial<WalletMetadata> | undefined\n getAlgodClient: () => algosdk.Algodv2\n store: Store<State>\n subscribe: (callback: (state: State) => void) => () => void\n managerUIHooks?: UIHooks\n}\n\nexport type WalletConstructor<T extends keyof WalletOptionsMap> = BaseWalletConstructor & {\n options?: WalletOptions<T>\n defaultMetadata?: WalletMetadata\n}\n\nexport type WalletAccount = {\n name: string\n address: string\n}\n\n// Transaction types\n\n/** @see https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0001.md#interface-multisigmetadata */\nexport interface MultisigMetadata {\n /**\n * Multisig version.\n */\n version: number\n\n /**\n * Multisig threshold value. Authorization requires a subset of signatures,\n * equal to or greater than the threshold value.\n */\n threshold: number\n\n /**\n * List of Algorand addresses of possible signers for this\n * multisig. Order is important.\n */\n addrs: string[]\n}\n\n/** @see https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0001.md#interface-wallettransaction */\nexport interface WalletTransaction {\n /**\n * Base64 encoding of the canonical msgpack encoding of a Transaction.\n */\n txn: string\n\n /**\n * Optional authorized address used to sign the transaction when the account\n * is rekeyed. Also called the signor/sgnr.\n */\n authAddr?: string\n\n /**\n * Multisig metadata used to sign the transaction\n */\n msig?: MultisigMetadata\n\n /**\n * Optional list of addresses that must sign the transactions\n */\n signers?: string[]\n\n /**\n * Optional base64 encoding of the canonical msgpack encoding of a\n * SignedTxn corresponding to txn, when signers=[]\n */\n stxn?: string\n\n /**\n * Optional message explaining the reason of the transaction\n */\n message?: string\n\n /**\n * Optional message explaining the reason of this group of transaction\n * Field only allowed in the first transaction of a group\n */\n groupMessage?: string\n}\n\n/** @see https://github.com/perawallet/connect/blob/1.3.4/src/util/model/peraWalletModels.ts */\nexport interface SignerTransaction {\n txn: algosdk.Transaction\n\n /**\n * Optional authorized address used to sign the transaction when\n * the account is rekeyed. Also called the signor/sgnr.\n */\n authAddr?: string\n\n /**\n * Optional list of addresses that must sign the transactions.\n * Wallet skips to sign this txn if signers is empty array.\n * If undefined, wallet tries to sign it.\n */\n signers?: string[]\n\n /**\n * Optional message explaining the reason of the transaction\n */\n message?: string\n}\n\nexport interface JsonRpcRequest<T = any> {\n id: number\n jsonrpc: string\n method: string\n params: T\n}\n\nexport class SignTxnsError extends Error {\n code: number\n data?: any\n\n constructor(message: string, code: number, data?: any) {\n super(message)\n this.name = 'SignTxnsError'\n this.code = code\n this.data = data\n }\n}\n\n// signData types\n\nexport interface Siwa {\n domain: string\n account_address: string\n uri: string\n version: string\n statement?: string\n nonce?: string\n 'issued-at'?: string\n 'expiration-time'?: string\n 'not-before'?: string\n 'request-id'?: string\n chain_id: '283'\n resources?: string[]\n type: 'ed25519'\n}\n\nexport class SignDataError extends Error {\n code: number\n data?: any\n\n constructor(message: string, code: number, data?: any) {\n super(message)\n this.name = 'SignDataError'\n this.code = code\n this.data = data\n }\n}\n\nexport interface SignData {\n data: string\n signer: Uint8Array\n domain: string\n authenticatorData: Uint8Array\n requestId?: string\n hdPath?: string\n signature?: Uint8Array\n}\n\nexport interface SignDataResponse extends SignData {\n signature: Uint8Array\n}\n\nexport enum ScopeType {\n UNKNOWN = -1,\n AUTH = 1\n}\n\nexport interface SignMetadata {\n scope: ScopeType\n encoding: string\n}\n","import algosdk from 'algosdk'\nimport { WalletId, type JsonRpcRequest, type WalletAccount, type WalletMap } from './wallets/types'\nimport { BiatecWallet } from './wallets/biatec'\nimport { CustomWallet } from './wallets/custom'\nimport { DeflyWallet } from './wallets/defly'\nimport { DeflyWebWallet } from './wallets/defly-web'\nimport { ExodusWallet } from './wallets/exodus'\nimport { KibisisWallet } from './wallets/kibisis'\nimport { KmdWallet } from './wallets/kmd'\nimport { LuteWallet } from './wallets/lute'\nimport { MagicAuth } from './wallets/magic'\nimport { MetaMaskWallet } from './wallets/metamask'\nimport { MnemonicWallet } from './wallets/mnemonic'\nimport { PeraWallet } from './wallets/pera'\nimport { RainbowWallet } from './wallets/rainbow'\nimport { WalletConnect } from './wallets/walletconnect'\nimport { Web3AuthWallet } from './wallets/web3auth'\nimport { W3Wallet } from './wallets/w3wallet'\n\nexport function createWalletMap(): WalletMap {\n return {\n [WalletId.BIATEC]: BiatecWallet,\n [WalletId.CUSTOM]: CustomWallet,\n [WalletId.DEFLY]: DeflyWallet,\n [WalletId.DEFLY_WEB]: DeflyWebWallet,\n [WalletId.EXODUS]: ExodusWallet,\n [WalletId.KIBISIS]: KibisisWallet,\n [WalletId.KMD]: KmdWallet,\n [WalletId.LUTE]: LuteWallet,\n [WalletId.MAGIC]: MagicAuth,\n [WalletId.METAMASK]: MetaMaskWallet,\n [WalletId.MNEMONIC]: MnemonicWallet,\n [WalletId.PERA]: PeraWallet,\n [WalletId.RAINBOW]: RainbowWallet,\n [WalletId.WALLETCONNECT]: WalletConnect,\n [WalletId.WEB3AUTH]: Web3AuthWallet,\n [WalletId.W3_WALLET]: W3Wallet\n }\n}\n\nexport function compareAccounts(accounts: WalletAccount[], compareTo: WalletAccount[]): boolean {\n const addresses = new Set(accounts.map((account) => account.address))\n const compareAddresses = new Set(compareTo.map((account) => account.address))\n\n if (addresses.size !== compareAddresses.size) {\n return false\n }\n\n // Check if every address in addresses is also in compareAddresses\n for (const address of addresses) {\n if (!compareAddresses.has(address)) {\n return false\n }\n }\n\n return true\n}\n\nexport function base64ToByteArray(blob: string): Uint8Array {\n return stringToByteArray(atob(blob))\n}\n\nexport function byteArrayToBase64(array: Uint8Array): string {\n return btoa(byteArrayToString(array))\n}\n\nexport function stringToByteArray(str: string): Uint8Array {\n const array = new Uint8Array(str.length)\n for (let i = 0; i < str.length; i++) {\n array[i] = str.charCodeAt(i)\n }\n return array\n}\n\nexport function byteArrayToString(array: Uint8Array): string {\n let result = ''\n for (let i = 0; i < array.length; i++) {\n result += String.fromCharCode(array[i])\n }\n return result\n}\n\nexport function isSignedTxn(txnObj: any): boolean {\n if (!txnObj || typeof txnObj !== 'object') return false\n if (!('sig' in txnObj && 'txn' in txnObj)) return false\n\n // Verify sig is a Uint8Array\n if (!(txnObj.sig instanceof Uint8Array)) return false\n\n // Verify txn is an object\n const txn = txnObj.txn\n if (!txn || typeof txn !== 'object') return false\n\n // Check for common transaction properties\n const hasRequiredProps = 'type' in txn && 'snd' in txn\n\n return hasRequiredProps\n}\n\nexport function isTransaction(item: any): item is algosdk.Transaction {\n return (\n item &&\n typeof item === 'object' &&\n 'sender' in item &&\n (item.sender instanceof algosdk.Address || typeof item.sender === 'string')\n )\n}\n\nexport function isTransactionArray(\n txnGroup: any\n): txnGroup is algosdk.Transaction[] | algosdk.Transaction[][] {\n if (!Array.isArray(txnGroup) || txnGroup.length === 0) {\n return false\n }\n\n if (isTransaction(txnGroup[0])) {\n return true\n }\n\n if (Array.isArray(txnGroup[0]) && txnGroup[0].length > 0 && isTransaction(txnGroup[0][0])) {\n return true\n }\n\n return false\n}\n\nexport function flattenTxnGroup<T>(txnGroup: T[]): T[] {\n if (!Array.isArray(txnGroup[0])) {\n return txnGroup\n }\n return (txnGroup as unknown as any[]).flat()\n}\n\nfunction getPayloadId(): number {\n const date = Date.now() * Math.pow(10, 3)\n const extra = Math.floor(Math.random() * Math.pow(10, 3))\n return date + extra\n}\n\nexport function formatJsonRpcRequest<T = any>(method: string, params: T): JsonRpcRequest<T> {\n return {\n id: getPayloadId(),\n jsonrpc: '2.0',\n method,\n params\n }\n}\n\n// @todo: remove\nexport function deepMerge(target: any, source: any): any {\n const isObject = (obj: any) => obj && typeof obj === 'object'\n\n if (!isObject(target) || !isObject(source)) {\n throw new Error('Target and source must be objects')\n }\n\n Object.keys(source).forEach((key) => {\n const targetValue = target[key]\n const sourceValue = source[key]\n\n if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\n target[key] = targetValue.concat(sourceValue)\n } else if (isObject(targetValue) && isObject(sourceValue)) {\n target[key] = deepMerge(Object.assign({}, targetValue), sourceValue)\n } else {\n target[key] = sourceValue\n }\n })\n\n return target\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, setAccounts, type State } from 'src/store'\nimport {\n base64ToByteArray,\n byteArrayToBase64,\n compareAccounts,\n flattenTxnGroup,\n formatJsonRpcRequest,\n isSignedTxn,\n isTransactionArray\n} from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport { resolveSkin } from 'src/wallets/skins'\nimport type { Store } from '@tanstack/store'\nimport type { WalletConnectModal, WalletConnectModalConfig } from '@walletconnect/modal'\nimport type SignClient from '@walletconnect/sign-client'\nimport type { SessionTypes, SignClientTypes } from '@walletconnect/types'\nimport type {\n WalletAccount,\n WalletConnectSkinOption,\n WalletConstructor,\n WalletId,\n WalletKey,\n WalletTransaction\n} from 'src/wallets/types'\n\ninterface SignClientOptions {\n projectId: string\n relayUrl?: string\n metadata?: SignClientTypes.Metadata\n}\n\ntype WalletConnectModalOptions = Pick<\n WalletConnectModalConfig,\n | 'enableExplorer'\n | 'explorerRecommendedWalletIds'\n | 'privacyPolicyUrl'\n | 'termsOfServiceUrl'\n | 'themeMode'\n | 'themeVariables'\n>\n\ntype WalletConnectBaseOptions = SignClientOptions & WalletConnectModalOptions\n\nexport interface WalletConnectOptions extends WalletConnectBaseOptions {\n /**\n * Optional skin to apply to this WalletConnect instance.\n * Can be either:\n * - A string ID referencing a built-in skin (e.g., 'biatec')\n * - A full skin object with id, name, and icon\n *\n * When a skin is applied, the wallet will use the skin's metadata\n * and a unique walletKey for state isolation.\n */\n skin?: WalletConnectSkinOption\n}\n\nexport type SignTxnsResponse = Array<Uint8Array | number[] | string | null | undefined>\n\nexport class SessionError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'SessionError'\n }\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 480 480\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"480\" height=\"480\" fill=\"#FFFFFF\" />\n <path fill=\"#3396FF\" d=\"M126.6,168c62.6-61.3,164.2-61.3,226.8,0l7.5,7.4c3.1,3.1,3.1,8,0,11.1l-25.8,25.2c-1.6,1.5-4.1,1.5-5.7,0l-10.4-10.2c-43.7-42.8-114.5-42.8-158.2,0l-11.1,10.9c-1.6,1.5-4.1,1.5-5.7,0l-25.8-25.2c-3.1-3.1-3.1-8,0-11.1L126.6,168zM406.7,220.2l22.9,22.5c3.1,3.1,3.1,8,0,11.1L326.2,355.1c-3.1,3.1-8.2,3.1-11.3,0l-73.4-71.9c-0.8-0.8-2.1-0.8-2.8,0l-73.4,71.9c-3.1,3.1-8.2,3.1-11.3,0L50.3,253.8c-3.1-3.1-3.1-8,0-11.1l22.9-22.5c3.1-3.1,8.2-3.1,11.3,0l73.4,71.9c0.8,0.8,2.1,0.8,2.8,0 l73.4-71.9c3.1-3.1,8.2-3.1,11.3,0l73.4,71.9c0.8,0.8,2.1,0.8,2.8,0l73.4-71.9C398.5,217.1,403.6,217.1,406.7,220.2L406.7,220.2z\" />\n</svg>\n`)}`\n\nexport class WalletConnect extends BaseWallet {\n private client: SignClient | null = null\n private options: SignClientOptions\n private modal: WalletConnectModal | null = null\n private modalOptions: WalletConnectModalOptions\n private session: SessionTypes.Struct | null = null\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options,\n metadata = {}\n }: WalletConstructor<WalletId.WALLETCONNECT>) {\n // Resolve skin from options (if provided)\n const skin = options?.skin ? resolveSkin(options.skin) : undefined\n\n // Derive walletKey: if skin is provided, use composite key 'walletconnect:skinId'\n const walletKey: WalletKey = skin ? `walletconnect:${skin.id}` : id\n\n // Build effective metadata: skin metadata -> user override\n const effectiveMetadata = skin ? { name: skin.name, icon: skin.icon, ...metadata } : metadata\n\n super({ id, walletKey, metadata: effectiveMetadata, getAlgodClient, store, subscribe })\n\n if (!options?.projectId) {\n this.logger.error('Missing required option: projectId')\n throw new Error('Missing required option: projectId')\n }\n\n const {\n projectId,\n relayUrl = 'wss://relay.walletconnect.com',\n metadata: metadataOptions,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n skin: _skinOption, // Extract skin to exclude from modalOptions\n ...modalOptions\n } = options\n\n const clientMetadata: SignClientTypes.Metadata = {\n ...this.getWindowMetadata(),\n ...metadataOptions\n }\n\n this.options = {\n projectId,\n relayUrl,\n metadata: clientMetadata\n }\n\n this.modalOptions = modalOptions\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'WalletConnect',\n icon: ICON\n }\n\n /**\n * Get metadata from the current window. This is adapted from the @walletconnect/utils\n * implementation, to avoid requiring the entire package as a dependency.\n * @see https://github.com/WalletConnect/walletconnect-utils/blob/master/browser/window-metadata/src/index.ts\n */\n private getWindowMetadata(): SignClientTypes.Metadata {\n let doc: Document\n let loc: Location\n\n const defaultMetadata = {\n name: '',\n description: '',\n url: '',\n icons: []\n }\n\n function getFromWindow<T>(name: string): T | undefined {\n let res: T | undefined\n if (typeof window !== 'undefined' && typeof (window as any)[name] !== 'undefined') {\n res = (window as any)[name]\n }\n return res\n }\n\n function getFromWindowOrThrow<T>(name: string): T {\n const res = getFromWindow<T>(name)\n if (!res) {\n throw new Error(`${name} is not defined in Window`)\n }\n return res\n }\n\n function getDocumentOrThrow(): Document {\n return getFromWindowOrThrow<Document>('document')\n }\n\n function getLocationOrThrow(): Location {\n return getFromWindowOrThrow<Location>('location')\n }\n\n try {\n doc = getDocumentOrThrow()\n loc = getLocationOrThrow()\n } catch (error) {\n this.logger.warn('Error getting window metadata:', error)\n return defaultMetadata\n }\n\n function getIcons(): string[] {\n const links: HTMLCollectionOf<HTMLLinkElement> = doc.getElementsByTagName('link')\n const icons: string[] = []\n\n for (let i = 0; i < links.length; i++) {\n const link: HTMLLinkElement = links[i]\n\n const rel: string | null = link.getAttribute('rel')\n if (rel) {\n if (rel.toLowerCase().indexOf('icon') > -1) {\n const href: string | null = link.getAttribute('href')\n\n if (href) {\n if (\n href.toLowerCase().indexOf('https:') === -1 &&\n href.toLowerCase().indexOf('http:') === -1 &&\n href.indexOf('//') !== 0\n ) {\n let absoluteHref: string = loc.protocol + '//' + loc.host\n\n if (href.indexOf('/') === 0) {\n absoluteHref += href\n } else {\n const path: string[] = loc.pathname.split('/')\n path.pop()\n const finalPath: string = path.join('/')\n absoluteHref += finalPath + '/' + href\n }\n\n icons.push(absoluteHref)\n } else if (href.indexOf('//') === 0) {\n const absoluteUrl: string = loc.protocol + href\n\n icons.push(absoluteUrl)\n } else {\n icons.push(href)\n }\n }\n }\n }\n }\n\n return icons\n }\n\n function getWindowMetadataOfAny(...args: string[]): string {\n const metaTags: HTMLCollectionOf<HTMLMetaElement> = doc.getElementsByTagName('meta')\n\n for (let i = 0; i < metaTags.length; i++) {\n const tag: HTMLMetaElement = metaTags[i]\n const attributes: Array<string | null> = ['itemprop', 'property', 'name']\n .map((target: string) => tag.getAttribute(target))\n .filter((attr: string | null) => {\n if (attr) {\n return args.includes(attr)\n }\n return false\n })\n\n if (attributes.length && attributes) {\n const content: string | null = tag.getAttribute('content')\n if (content) {\n return content\n }\n }\n }\n\n return ''\n }\n\n function getName(): string {\n let name: string = getWindowMetadataOfAny('name', 'og:site_name', 'og:title', 'twitter:title')\n\n if (!name) {\n name = doc.title\n }\n\n return name\n }\n\n function getDescription(): string {\n const description: string = getWindowMetadataOfAny(\n 'description',\n 'og:description',\n 'twitter:description',\n 'keywords'\n )\n\n return description\n }\n\n const name: string = getName()\n const description: string = getDescription()\n const url: string = loc.origin\n const icons: string[] = getIcons()\n\n const meta: SignClientTypes.Metadata = {\n description,\n url,\n icons,\n name\n }\n\n return meta\n }\n\n private async initializeClient(): Promise<SignClient> {\n this.logger.info('Initializing client...')\n const SignClient = (await import('@walletconnect/sign-client')).SignClient\n const client = await SignClient.init(this.options)\n\n client.on('session_event', (args) => {\n this.logger.info('EVENT: session_event', args)\n })\n\n client.on('session_update', ({ topic, params }) => {\n this.logger.info('EVENT: session_update', { topic, params })\n const { namespaces } = params\n const session = client.session.get(topic)\n const updatedSession = { ...session, namespaces }\n this.onSessionConnected(updatedSession)\n })\n\n client.on('session_delete', () => {\n this.logger.info('EVENT: session_delete')\n this.session = null\n })\n\n this.client = client\n this.logger.info('Client initialized')\n return client\n }\n\n private async initializeModal(): Promise<WalletConnectModal> {\n this.logger.info('Initializing modal...')\n const WalletConnectModal = (await import('@walletconnect/modal')).WalletConnectModal\n const modal = new WalletConnectModal({\n projectId: this.options.projectId,\n ...this.modalOptions\n })\n\n modal.subscribeModal((state) => this.logger.info(`Modal ${state.open ? 'open' : 'closed'}`))\n\n this.modal = modal\n this.logger.info('Modal initialized')\n return modal\n }\n\n private onSessionConnected(session: SessionTypes.Struct): WalletAccount[] {\n const caipAccounts = session.namespaces.algorand!.accounts\n\n if (!caipAccounts.length) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n // @todo: Validate format of CAIP-10 accounts\n\n // Filter duplicate accounts (same address, different chain)\n const accounts = [...new Set(caipAccounts.map((account) => account.split(':').pop()!))]\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const state = this.store.state\n const walletState = state.wallets[this.walletKey]\n\n if (!walletState) {\n const newWalletState: WalletState = {\n accounts: walletAccounts,\n activeAccount: walletAccounts[0]\n }\n\n addWallet(this.store, {\n walletId: this.walletKey,\n wallet: newWalletState\n })\n\n this.logger.info('Connected', newWalletState)\n } else {\n const match = compareAccounts(walletAccounts, walletState.accounts)\n\n if (!match) {\n this.logger.warn('Session accounts mismatch, updating accounts', {\n prev: walletState.accounts,\n current: walletAccounts\n })\n setAccounts(this.store, {\n walletId: this.walletKey,\n accounts: walletAccounts\n })\n }\n }\n\n this.session = session\n return walletAccounts\n }\n\n public get activeChainId(): string {\n const network = this.activeNetworkConfig\n if (!network?.caipChainId) {\n this.logger.warn(`No CAIP-2 chain ID found for network: ${this.activeNetwork}`)\n return ''\n }\n return network.caipChainId\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n this.logger.info('Connecting...')\n try {\n const client = this.client || (await this.initializeClient())\n const modal = this.modal || (await this.initializeModal())\n\n const requiredNamespaces = {\n algorand: {\n chains: [this.activeChainId],\n methods: ['algo_signTxn'],\n events: []\n }\n }\n\n const { uri, approval } = await client.connect({ requiredNamespaces })\n\n if (!uri) {\n this.logger.error('No URI found')\n throw new Error('No URI found')\n }\n\n await modal.openModal({ uri })\n\n const session = await approval()\n const walletAccounts = this.onSessionConnected(session)\n\n this.logger.info('Connected successfully')\n return walletAccounts\n } catch (error: any) {\n this.logger.error('Error connecting:', error.message)\n throw error\n } finally {\n this.modal?.closeModal()\n }\n }\n\n public disconnect = async (): Promise<void> => {\n this.logger.info('Disconnecting...')\n try {\n this.onDisconnect()\n if (this.client && this.session) {\n await this.client.disconnect({\n topic: this.session.topic,\n reason: {\n message: 'User disconnected.',\n code: 6000\n }\n })\n }\n this.logger.info('Disconnected')\n } catch (error: any) {\n this.logger.error('Error disconnecting:', error.message)\n throw error\n }\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.walletKey]\n\n // No session to resume\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n this.logger.info('Resuming session...')\n\n const client = this.client || (await this.initializeClient())\n\n if (client.session.length) {\n const lastKeyIndex = client.session.keys.length - 1\n const restoredSession = client.session.get(client.session.keys[lastKeyIndex])\n this.onSessionConnected(restoredSession)\n }\n this.logger.info('Session resumed successfully')\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n if (!this.session) {\n this.logger.error('No session found!')\n throw new SessionError('No session found!')\n }\n\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n\n let txnsToSign: WalletTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n this.logger.debug('Sending processed transactions to wallet...', [txnsToSign])\n\n // Format JSON-RPC request\n const request = formatJsonRpcRequest('algo_signTxn', [txnsToSign])\n\n // Sign transactions\n const signTxnsResult = await client.request<SignTxnsResponse>({\n chainId: this.activeChainId,\n topic: this.session.topic,\n request\n })\n\n this.logger.debug('Received signed transactions from wallet', signTxnsResult)\n\n // Filter out unsigned transactions, convert signed transactions to Uint8Array\n const signedTxns = signTxnsResult.reduce<Uint8Array[]>((acc, value) => {\n if (value) {\n let signedTxn: Uint8Array\n if (typeof value === 'string') {\n signedTxn = base64ToByteArray(value)\n } else if (value instanceof Uint8Array) {\n signedTxn = value\n } else if (Array.isArray(value)) {\n signedTxn = new Uint8Array(value)\n } else {\n // Log unexpected types for debugging\n this.logger.warn('Unexpected type in signTxnsResult', value)\n signedTxn = new Uint8Array()\n }\n acc.push(signedTxn)\n }\n return acc\n }, [])\n\n // ARC-0001 - Return null for unsigned transactions\n const result = txnsToSign.reduce<(Uint8Array | null)[]>((acc, txn) => {\n if (txn.signers && txn.signers.length == 0) {\n acc.push(null)\n } else {\n const signedTxn = signedTxns.shift()\n if (signedTxn) {\n acc.push(signedTxn)\n }\n }\n return acc\n }, [])\n\n this.logger.debug('Transactions signed successfully', result)\n return result\n } catch (error: any) {\n this.logger.error('Error signing transactions:', error.message)\n throw error\n }\n }\n}\n","import { logger } from 'src/logger'\nimport { NetworkConfig } from 'src/network'\nimport { StorageAdapter } from 'src/storage'\nimport { setActiveWallet, setActiveAccount, removeWallet, type State } from 'src/store'\nimport type { Store } from '@tanstack/store'\nimport type algosdk from 'algosdk'\nimport type {\n SignDataResponse,\n SignMetadata,\n UIHooks,\n WalletAccount,\n WalletConstructor,\n WalletId,\n WalletKey,\n WalletMetadata\n} from 'src/wallets/types'\n\ninterface WalletConstructorType {\n new (...args: any[]): BaseWallet\n defaultMetadata: WalletMetadata\n}\n\nexport abstract class BaseWallet {\n readonly id: WalletId\n /** Unique key for this wallet instance. Used for state storage and session isolation. */\n readonly walletKey: WalletKey\n readonly metadata: WalletMetadata\n\n protected store: Store<State>\n protected getAlgodClient: () => algosdk.Algodv2\n protected managerUIHooks: UIHooks\n\n public subscribe: (callback: (state: State) => void) => () => void\n\n protected logger: ReturnType<typeof logger.createScopedLogger>\n\n protected constructor({\n id,\n walletKey,\n metadata,\n store,\n subscribe,\n getAlgodClient,\n managerUIHooks\n }: WalletConstructor<WalletId>) {\n this.id = id\n this.walletKey = walletKey || id // Default to id for backward compatibility\n this.store = store\n this.subscribe = subscribe\n this.getAlgodClient = getAlgodClient\n this.managerUIHooks = managerUIHooks || {}\n\n const ctor = this.constructor as WalletConstructorType\n this.metadata = { ...ctor.defaultMetadata, ...metadata }\n\n // Initialize logger with a scope based on the wallet key\n this.logger = logger.createScopedLogger(`Wallet:${this.walletKey.toUpperCase()}`)\n }\n\n static defaultMetadata: WalletMetadata = { name: 'Base Wallet', icon: '' }\n\n // ---------- Public Methods ---------------------------------------- //\n\n public abstract connect(args?: Record<string, any>): Promise<WalletAccount[]>\n public abstract disconnect(): Promise<void>\n public abstract resumeSession(): Promise<void>\n\n public setActive = (): void => {\n this.logger.info(`Set active wallet: ${this.walletKey}`)\n setActiveWallet(this.store, { walletId: this.walletKey })\n }\n\n public setActiveAccount = (account: string): void => {\n this.logger.info(`Set active account: ${account}`)\n setActiveAccount(this.store, {\n walletId: this.walletKey,\n address: account\n })\n }\n\n public abstract signTransactions<T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]>\n\n public transactionSigner = async (\n txnGroup: algosdk.Transaction[],\n indexesToSign: number[]\n ): Promise<Uint8Array[]> => {\n const signTxnsResult = await this.signTransactions(txnGroup, indexesToSign)\n\n const signedTxns = signTxnsResult.reduce<Uint8Array[]>((acc, value) => {\n if (value !== null) {\n acc.push(value)\n }\n return acc\n }, [])\n\n return signedTxns\n }\n\n public canSignData = false\n\n public signData = async (_data: string, _metadata: SignMetadata): Promise<SignDataResponse> => {\n this.logger.error('Method not supported: signData')\n throw new Error('Method not supported: signData')\n }\n\n // ---------- Derived Properties ------------------------------------ //\n\n public get name(): string {\n return this.id.toUpperCase()\n }\n\n public get accounts(): WalletAccount[] {\n const state = this.store.state\n const walletState = state.wallets[this.walletKey]\n return walletState ? walletState.accounts : []\n }\n\n public get addresses(): string[] {\n return this.accounts.map((account) => account.address)\n }\n\n public get activeAccount(): WalletAccount | null {\n const state = this.store.state\n const walletState = state.wallets[this.walletKey]\n return walletState ? walletState.activeAccount : null\n }\n\n public get activeAddress(): string | null {\n return this.activeAccount?.address ?? null\n }\n\n public get activeNetwork(): string {\n const state = this.store.state\n return state.activeNetwork\n }\n\n public get isConnected(): boolean {\n const state = this.store.state\n const walletState = state.wallets[this.walletKey]\n return walletState ? walletState.accounts.length > 0 : false\n }\n\n public get isActive(): boolean {\n const state = this.store.state\n return state.activeWallet === this.walletKey\n }\n\n public get activeNetworkConfig(): NetworkConfig {\n const { networkConfig, activeNetwork } = this.store.state\n return networkConfig[activeNetwork]\n }\n\n // ---------- Protected Methods ------------------------------------- //\n\n protected onDisconnect = (): void => {\n this.logger.debug(`Removing wallet from store...`)\n removeWallet(this.store, { walletId: this.walletKey })\n }\n\n protected manageWalletConnectSession = (\n action: 'backup' | 'restore',\n targetWalletKey?: WalletKey\n ): void => {\n const key = targetWalletKey || this.walletKey\n if (action === 'backup') {\n const data = StorageAdapter.getItem('walletconnect')\n if (data) {\n StorageAdapter.setItem(`walletconnect-${key}`, data)\n StorageAdapter.removeItem('walletconnect')\n this.logger.debug(`Backed up WalletConnect session for ${key}`)\n }\n } else if (action === 'restore') {\n const data = StorageAdapter.getItem(`walletconnect-${key}`)\n if (data) {\n StorageAdapter.setItem('walletconnect', data)\n StorageAdapter.removeItem(`walletconnect-${key}`)\n this.logger.debug(`Restored WalletConnect session for ${key}`)\n }\n }\n }\n}\n","import type { WalletConnectSkin, WalletConnectSkinOption } from './types'\n\n// ---------- Built-in Skin Icons ---------- //\n\nconst VOI_WALLET_ICON = `data:image/svg+xml;base64,${btoa(`\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"322\" height=\"322\">\n <path fill=\"#32B1E8\" d=\"M131 19a42 42 0 0 1 15 8c18 12 36 26 50 43l2 3c26 29 41 64 47 102v2l1 20h-49v10l-42 4a70897 70897 0 0 0-78 7h-3l-18 1a804 804 0 0 0 55-186c16 8 29 33 39 48l-2-16-1-3c-3-14-9-27-15-40l-1-3Z\"/>\n <path fill=\"#1F3AB7\" d=\"M111 33c13 6 23 25 32 37l1 2 4 6 1 2c6 8 4 20 4 30v3c0 32-11 62-26 89h2c23-3 45-4 68-4v9l-42 4a70897 70897 0 0 0-78 7h-3l-18 1a804 804 0 0 0 55-186Z\"/>\n <path fill=\"#3C4856\" d=\"M267 214a2941 2941 0 0 0-12 14l-2 1-10 10-5 4-2 2a8522 8522 0 0 1-21 20c-6 7-11 9-20 10-7 0-12-1-17-6l-8-7-5-6a120 120 0 0 1-8-7l-2-2-4-1-10 7a4157 4157 0 0 1-15 14l-1 1c-5 5-9 6-16 6h-3a397 397 0 0 1-15 0c-14 0-14 0-19-3l-4-7a322 322 0 0 0-8-12l-2-3-8-15 65-7 15-1a47903 47903 0 0 1 122-11l2-1h13Z\"/>\n <path fill=\"#1B87DF\" d=\"M152 86v2l1 2 3 1 3 5 2 4 2 3 2 4c11 21 11 21 14 30l2 4v2l3 7 6 18 5 19 2 9h44v1h-3l-64 2h-3a526 526 0 0 0-44 3l4-9a190 190 0 0 0 21-94V86Z\"/>\n <path fill=\"#1A279D\" d=\"M139 71c5 1 5 1 7 4l2 3 2 3c5 9 3 20 3 29v3c0 32-11 62-26 89h2c23-3 45-4 68-4v9a798 798 0 0 1-92 7l2-2 1-5 5-9c8-16 14-32 19-49l2-8 2-14 1-1c3-18 2-37 2-55Z\"/>\n <path fill=\"#3D4856\" d=\"M151 261c4 1 6 3 8 5l3 3 3 5-4 1-1 19h-18v-20h-7l5-5 2-2 3-2 2-3 4-1Z\"/>\n <path fill=\"#2EB4EB\" d=\"m254 65 4 6c4 6 8 9 14 12v2l-2 1c-7 4-11 9-15 16l-5-7c-3-6-9-8-15-10l7-5c6-4 9-9 12-15Z\"/>\n <path fill=\"#2021AB\" d=\"M162 206h4c10 0 10 0 15 2v1a11602 11602 0 0 1-44 4h-4l-23 1v-1h9l1-3 8-1 3-1h9l2-1 5-1h15Z\"/>\n <path fill=\"#31B8EF\" d=\"M280 50c3 1 3 1 5 4s4 5 8 7l-5 5-6 7-5-5-7-6 6-5 4-7Z\"/>\n <path fill=\"#2DC1F2\" d=\"m255 35 8 9-6 7c-5-1-6-3-9-6l7-10Z\"/>\n <path fill=\"#2F3A48\" d=\"M157 266c3 1 6 3 8 6v2l-4 1-1 19h-18v-18h1v7l1 4 1 4h7l7 1v-12l-1-3v-7l-1-4Z\"/>\n <path fill=\"#233143\" d=\"M157 266c3 1 6 3 8 6v2l-4 1-1 19h-1v-13l-1-4v-6l-1-5Z\"/>\n <path fill=\"#2A2DB3\" d=\"m179 207 2 2-9 1h-7l-4-2c4-4 13-2 18-1Z\"/>\n <path fill=\"#3864CC\" d=\"m104 69 2 6-1 2v3l-1 2-1 2-1 6-2 1 4-22Z\"/>\n <path fill=\"#1F2DAB\" d=\"m77 166 3 1-1 8-5 1c1-4 1-7 3-10Z\"/>\n <path fill=\"#2651C8\" d=\"M98 95c3 3 3 3 3 6v2l-3 1v2h-2l2-11Z\"/>\n <path fill=\"#383F59\" d=\"m267 214-3 5-1-3-9 1 1-2 12-1Z\"/>\n <path fill=\"#184FCF\" d=\"m111 33 4 2-1 2c-2 3-3 5-3 9l-2-1 2-12Z\"/>\n <path fill=\"#1D25A8\" d=\"M71 182h1v8l-4 2c1-7 1-7 3-10Z\"/>\n <path fill=\"#31BBF6\" d=\"m254 65 4 8-3-1-1-2-1 2h-2l3-7Z\"/>\n <path fill=\"#1E78DC\" d=\"m142 168 2 3-2 5-1 2-3 3 1-5 1-3 2-5Z\"/>\n <path fill=\"#42CDF8\" d=\"m255 35 4 4h-2l-7 3 5-7Z\"/>\n <path fill=\"#25B4EC\" d=\"M148 59h4l-2 8c-2-2-2-2-2-5v-3Z\"/>\n <path fill=\"#2024AA\" d=\"m63 200 2 2-1 4-3 2 2-8Z\"/>\n <path fill=\"#32BEFA\" d=\"m280 50 3 1-1 4-3 1 1-6Z\"/>\n</svg>\n`)}`\n\nconst BIATEC_ICON = `data:image/svg+xml;base64,${btoa(`\n<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 200 180\"><path d=\"M94.27 151.629c-.861-.526-1.51-1.37-1.83-2.386-.197-.62-.18-.627 1.082-.437.705.105 1.6.356 1.988.557.696.36 1.815 1.876 1.815 2.459 0 .486-2.166.348-3.054-.193m23.953-.263c-.788-.419-2.095-2.123-2.108-2.75-.01-.433 2.467-.182 3.403.345.955.536 2.148 1.97 2.148 2.582 0 .503-2.397.38-3.443-.177m-9.024-1.165c-1.567-1.193-2.38-2.74-2.55-4.849-.075-.933-.054-1.697.045-1.697.866 0 2.714 1.67 3.439 3.107.398.789.657 3.888.351 4.195-.07.07-.648-.27-1.285-.756m-8.906-1.354c-.63-.684-1.21-1.648-1.387-2.305-.318-1.18-.136-3.416.278-3.416.555 0 2.108 1.697 2.505 2.737.472 1.237.457 3.905-.023 4.063-.16.053-.777-.433-1.373-1.08m-6.805-1.775c-2.764-.612-5.223-1.425-5.357-1.772-.08-.21.169-1.027.555-1.814s.701-1.469.701-1.515c0-.047-.803.067-1.786.253-.982.185-1.857.256-1.944.157-.088-.1-.365-.715-.618-1.367-.252-.652-.858-1.729-1.345-2.393-1.293-1.76-5.285-5.526-7.272-6.858-3.826-2.564-4.96-3.855-4.667-5.316.08-.402.692-1.574 1.359-2.606 1.65-2.551 2.51-4.472 2.512-5.62.002-.571-.364-1.69-.901-2.758l-.905-1.796.706-.532c1.936-1.46 4.649-4.916 4.205-5.36-.06-.06-.846.72-1.745 1.732-3.553 3.997-7.814 6.463-16.014 9.27-5.324 1.823-5.853 2.06-7.183 3.228-1.555 1.365-1.962 2.502-2.531 7.063-.284 2.275-.706 4.79-.937 5.591-.231.8-.403 2.17-.382 3.043.032 1.346-.157 2.06-1.248 4.698-1.498 3.622-1.068 3.708-4.138-.827l-2.036-3.008.747-.784c.411-.43 1.075-.978 1.475-1.216.955-.568.919-.922-.236-2.331-.53-.647-.917-1.209-.86-1.25s.43-.277.83-.526c1.788-1.12 2.7-4.727 2.987-11.822.214-5.274.595-6.46 2.195-6.83 6.634-1.535 7.58-1.98 8.618-4.066.926-1.858.9-3.701-.121-8.475-.87-4.072-1.047-7.21-.516-9.223.606-2.303 3.759-7.433 5.667-9.221.376-.353.684-.729.684-.835 0-.254-3.325-2.697-4.448-3.268-.482-.245-1.455-.45-2.163-.456-3.892-.03-6.628 1.877-8.722 6.08-.603 1.212-1.582 2.73-2.176 3.374-2.733 2.965-8.602 4.09-12.666 2.43l-.913-.374 1.323-.05c1.422-.054 3.498-.94 3.944-1.683.414-.69.076-.79-1.06-.314-1.443.605-4.075.597-5.039-.015-1.259-.8-2.23-1.81-2.795-2.908l-.535-1.042 1.243 1.095c1.51 1.328 2.691 1.752 4.425 1.585 1.506-.145 2.523-.851 1.65-1.147-3.195-1.08-5.834-3.078-7.07-5.35-.809-1.485-1.513-3.982-1.504-5.334l.006-.936.42.854c.232.47.941 1.333 1.576 1.918l1.155 1.064 2.189-.012 2.188-.011-1.012-.535c-.975-.514-3.353-2.766-3.353-3.175 0-.11.506.079 1.124.418 1.282.703 3.888 1.32 4.21.996.12-.118-.204-.612-.718-1.097-.513-.484-1.17-1.344-1.46-1.911l-.525-1.03 1.174.895c2.02 1.542 3.883 1.506 6.342-.123.69-.457 1.218-.863 1.175-.903s-.989.227-2.103.594c-1.87.618-2.11.64-3.151.305-1.284-.415-2.023-1.273-2.25-2.613l-.158-.926.486.595c1.07 1.31 2.652 1.255 6.363-.224 1.132-.451 2.892-1.036 3.91-1.3 2.732-.706 1.561-.926-2.298-.43-1.778.228-3.27.376-3.318.329-.047-.047.662-.415 1.575-.818 2.002-.883 4.78-1.152 6.858-.663 1.817.427 2.555.81 4.032 2.087 1.151.997 3.654 2.156 4.605 2.133.595-.015-2.96-3.395-4.552-4.328-1.639-.96-4.11-1.542-6.107-1.438-.92.049-1.627.016-1.571-.073.242-.388 3.44-.825 5.203-.71 4.048.265 6.96 2.546 10.902 8.537 2.553 3.883 4.234 5.67 6.137 6.524l1.092.49 2.215-1.027c4.747-2.2 8.797-2.518 16.097-1.26 2.25.387 4.717.704 5.482.704h1.39l.074 3.203.074 3.203.894-1.113c.88-1.096.894-1.152.846-3.516l-.049-2.402-1.61-1.721c-4.14-4.425-4.335-6.536-1.135-12.213 2.744-4.87 2.704-4.41.813-9.32-.883-2.292-1.696-4.167-1.807-4.167-.339 0-.205 4 .196 5.821.716 3.256.435 4.822-1.006 5.603-.371.2-2.144.33-4.904.36-3.6.036-4.348-.022-4.473-.348-.087-.227.102-.582.451-.845.53-.4.563-.53.274-1.09-.18-.35-.692-1.022-1.137-1.493s-.734-.933-.64-1.026c.093-.094 1.072-.036 2.175.128 3.023.45 3.76.398 4.211-.297.4-.615 2.887-9.725 2.704-9.907-.196-.196-1.55 1.62-2.759 3.7-1.782 3.068-3.14 3.895-6.379 3.889-2.485-.005-5.43-1.098-8.658-3.213-1.439-.943-3.02-1.855-3.514-2.027-1.524-.531-3.75-.392-5.163.324l-1.26.638.567-.603c.892-.95 3.048-2.004 4.432-2.167 1.94-.23 3.3.283 5.786 2.18 2.39 1.823 3.163 2.225 4.28 2.225.6 0 .497-.12-.745-.872-.792-.48-2.416-1.598-3.609-2.486-2.658-1.978-4.119-2.58-5.831-2.4l-1.26.132.926-.39c.667-.281 1.609-.36 3.373-.284 1.346.059 2.448.077 2.448.04 0-.278-2.537-1.455-3.71-1.722-.89-.202-1.231-.365-.884-.421.312-.051 1.86.225 3.44.614 2.564.63 3.167.687 5.602.525 5.536-.369 7.032-1.144 9.218-4.774l1.433-2.382-1.224 1.323c-.673.728-1.779 1.928-2.457 2.666-.677.739-1.53 1.417-1.893 1.508l-.662.165.61-.503c.334-.277 1.088-1.491 1.675-2.698 1.772-3.648 3.228-4.779 6.772-5.257 3.522-.476 4.797-.791 5.421-1.342.332-.293.429-.44.215-.329-.213.112-1.94.277-3.836.367-2.955.14-3.666.263-4.97.86-1.632.749-4.092 2.893-4.996 4.356-.764 1.236-.923.905-.224-.465 1.387-2.718 4.685-4.945 8.366-5.651l1.815-.349-1.058-.235c-.582-.13-1.952-.224-3.043-.209l-1.984.027 1.72-.82c1.427-.682 2.04-.822 3.611-.822 1.607 0 1.86-.06 1.679-.4-.539-1.005-1.377-1.452-2.69-1.432-.769.011-1.156-.067-.937-.19.534-.298 2.168-.34 4.169-.104 1.648.194 1.82.159 3.59-.733 1.023-.515 2.472-1.047 3.22-1.183 1.388-.253 3.607-.04 4.472.429.942.51 1.958 1.825 2.095 2.712.116.746 0 1.052-.671 1.777-.752.813-.811 1.018-.811 2.82 0 1.706-.105 2.127-.85 3.424-.467.814-.973 1.476-1.124 1.473s-.797-.242-1.435-.532c-1.277-.579-1.714-.435-1.988.655-.115.46.045.84.605 1.44.42.448 1.621 2.237 2.671 3.975 1.883 3.116 1.905 3.175 1.585 4.146-.258.78-.258 1.56 0 3.73.179 1.51.253 3.031.166 3.38-.128.509.033.795.805 1.432 1.367 1.126 5.02 2.947 5.914 2.947 1.268 0 1.588.247 1.588 1.227 0 1.057-.642 2.742-1.045 2.742-.153 0-.278-.298-.278-.662 0-.558-.123-.661-.793-.661-.436 0-2.162-.467-3.836-1.036l-3.044-1.036v1.788c0 .984-.077 3.057-.172 4.608l-.173 2.82h3.015l-.133.86c-.073.472-.206 2.11-.295 3.637-.373 6.42-.634 7.203-4.207 12.65-4.119 6.278-4.635 7.984-3.493 11.548.37 1.158.647 2.133.613 2.167-.246.246-2.569-1.19-3.783-2.34-2.616-2.473-2.922-3.975-1.146-5.619.954-.882 1.054-1.087.892-1.828-.417-1.91-.553-1.976-1-.482-.232.777-.693 1.849-1.024 2.382-.526.846-.603 1.318-.603 3.705v2.736l3.175 1.022c1.746.562 3.446 1.028 3.777 1.034.583.012.59-.012.194-.776-.224-.434-.479-1.307-.566-1.939-.208-1.523.53-3.065 3.905-8.159 4.537-6.845 5.478-9.25 5.681-14.513.07-1.82.19-3.93.267-4.692.137-1.353.17-1.398 1.379-1.933 2.27-1.004 4.245-3.717 6.253-8.589.526-1.274.459-1.204-1.891 1.985-1.019 1.382-2.13 2.751-2.47 3.042-.604.516-.603.506.048-.397.938-1.299 1.216-2.144 1.685-5.107.663-4.193 1.699-6.255 4.604-9.16 3.639-3.638 9.47-6.348 13.7-6.365.635-.003 1.201-.155 1.322-.356.117-.192 1.105-.92 2.196-1.615 1.092-.696 2.252-1.511 2.579-1.812.327-.3.66-.48.74-.4.081.081-.038.942-.263 1.914s-.41 1.88-.41 2.016c0 .37 1.393.3 1.992-.102.287-.192 1.296-.62 2.241-.953s1.998-.78 2.338-.994c.34-.215.665-.345.722-.288.302.302-1.982 3.526-2.927 4.132l-1.152.74c-.277.179 1.202 3.732 1.975 4.745.674.882.862 1.347.742 1.825-.089.354.045 1.273.296 2.044.645 1.98 2.913 6.751 3.698 7.779.808 1.06.82 1.416.075 2.363-.32.408-.648 1.225-.728 1.816-.118.879-.279 1.12-.89 1.335-1.457.512-2.298-.449-2.94-3.358-.113-.512-.325-.728-.715-.728-.634 0-.619.099.398 2.514.368.873.572 1.685.453 1.804-.12.119-.679.178-1.244.132-1.006-.082-1.03-.108-1.165-1.29-.11-.958-.407-1.515-1.444-2.716-1.28-1.483-1.523-1.617-3.974-2.186-.436-.102-1.235-.406-1.776-.677l-.981-.491-.311 1.124c-.462 1.668-.381 7.592.14 10.35.244 1.29.926 3.552 1.516 5.027 1.864 4.655 1.933 4.98 1.924 9.031-.006 2.853-.112 3.972-.461 4.87-.25.641-.415 1.204-.367 1.252.047.047 2.935.203 6.419.347 4.2.174 6.786.397 7.679.664 1.433.429 2.955 1.341 3.328 1.995.125.219 1.292 3.718 2.594 7.777 2.56 7.978 2.515 7.613 1.142 9.263-.582.7-.623.918-.458 2.455l.18 1.686-1.685 1.59c-2.476 2.335-2.487 2.338-2.833.702l-.825-3.894c-.497-2.344-.503-2.535-.09-2.844.245-.182.75-.332 1.121-.335 1.259-.007 1.444-.36.672-1.277l-.7-.833.461-1.209c.403-1.054.421-1.428.146-2.924-.856-4.647-3.463-7.755-6.516-7.769-1.198-.006-5.626.726-6.143 1.015-.419.235 1.36 2.035 4.026 4.073 1.954 1.494 2.487 2.265 2.708 3.918.115.858-.031 1.278-.963 2.753-1.122 1.776-2.596 4.941-4.015 8.62-.437 1.133-1.048 2.383-1.358 2.777-.546.695-.623.712-2.434.544-1.51-.14-2.034-.085-2.726.287-.933.503-1.032.488-5.234-.754l-1.852-.547 1.058-.93c2.452-2.155 4.96-4.035 5.375-4.028.245.004.743.417 1.107.919.364.5.74.914.835.918.336.014 2.673-2.777 3.423-4.09.928-1.622 1.429-3.721 1.19-4.992-.414-2.208-2.105-3.2-8.836-5.183-4.604-1.356-5.44-1.637-6.837-2.3-.81-.384-.92-.36-3.047.664-2.593 1.248-5.507 2.251-8.665 2.983-3.304.766-9.686.95-12.988.376-3.227-.562-7.639-2.035-9.626-3.214-.856-.508-1.618-.862-1.693-.787-.15.15 1.12 2.079 1.665 2.53.271.226.239.732-.166 2.586-1.245 5.713-2.66 8.612-7.189 14.73-2.852 3.852-3.402 5.685-2.327 7.762.66 1.274 9.278 9.763 11.016 10.85.797.498 1.576 1.26 1.929 1.889.496.883 2.158 5.275 2.158 5.704 0 .2-1.577.111-2.779-.154m46.76-1.68c-2.98-1.107-5.348-3.111-7.054-5.97-1.025-1.72-2.16-4.428-1.946-4.643.229-.229 3.039.644 4.916 1.527 3.417 1.608 6.275 5.198 6.594 8.283.178 1.723.063 1.76-2.51.803m-70.399.107c-2.923-.4-6.887-2.043-7.56-3.132-.23-.371 1.693-1.772 3.683-2.683 4.119-1.887 9.22-1.779 13.075.277 1.637.873 4.347 2.943 4.307 3.29-.014.122-.895.499-1.957.837-4.06 1.29-8.482 1.831-11.548 1.411m51.264-1.55c-1.687-.66-3.315-1.831-4.87-3.503l-1.323-1.421 2.116-.183c3.467-.298 6.424.354 8.757 1.932 1.096.742 2.753 2.456 2.753 2.848 0 .859-5.46 1.099-7.433.326m38.521-1.26c-3.84-.798-6.966-2.331-9.705-4.761-2.156-1.913-3.179-2.512-5.08-2.978-1.478-.362-3.339-1.249-3.339-1.591 0-.318 2.824-.81 5.689-.991 7.046-.446 13.549 2.741 16.133 7.908.513 1.024.932 2.025.932 2.224 0 .277-.479.354-2.05.33-1.128-.016-2.289-.08-2.58-.14m-61.217-2.076c-1.35-.421-2.52-1.449-3.238-2.845l-.51-.992h1.178c1.479 0 2.46.365 3.42 1.273.65.615 1.762 2.392 1.762 2.817 0 .255-1.426.117-2.612-.253m5.45-1.504c-1.583-1.153-2.396-3.509-1.878-5.442.192-.715.563-.742 1.334-.098 1.18.986 1.673 2.177 1.674 4.051 0 .974-.09 1.826-.2 1.895-.112.068-.53-.114-.93-.406m-26.254-1.075a150 150 0 0 0-3.968-1.97l-2.382-1.138 1.21-.001c2.527-.002 4.928 1.203 6.339 3.185.306.43.52.777.473.77-.046-.007-.799-.388-1.672-.845zm-14.354-3.608c-.764-.264-1.631-.699-1.927-.966-.59-.534-1.695-2.22-1.542-2.352.053-.045.573-.192 1.155-.325 1.324-.303 1.45-.925.662-3.265-.306-.908-.503-1.705-.438-1.77.066-.066.637.018 1.27.187.95.253 1.683.849 4.194 3.411 2.483 2.534 3.286 3.19 4.366 3.566.727.253 1.62.587 1.984.742l.662.28-.662.199c-.779.234-6.102.794-7.42.782-.503-.005-1.54-.225-2.304-.489m104.313-.83c-1.528-.484-4.719-2.704-4.75-3.303-.006-.145.88-.42 1.972-.61 2.368-.414 4.676-.11 6.582.864 1.41.721 3.082 2.35 2.83 2.756-.55.891-4.237 1.054-6.634.294m-56.58-.117c-2.06-.734-3.35-2.65-3.345-4.961.006-2.304.15-2.574 1.279-2.397 1.516.239 3.013.83 3.677 1.455l.609.572 1.523-1.507c.838-.829 1.593-1.507 1.679-1.507.085 0 .362.735.614 1.633.94 3.35-.383 5.974-3.431 6.806-1.302.356-1.35.354-2.605-.094m-75.315-.698c-6.533-.942-11.018-2.967-14.552-6.571-1.972-2.01-3.175-3.81-2.8-4.186.109-.109 1.32-.239 2.693-.29 5.235-.192 9.266 1.449 13.22 5.381 2.097 2.085 5.101 5.853 4.838 6.068-.05.041-1.58-.14-3.4-.402m97.327-1.25c4.267-5.096 8.959-7.442 13.334-6.666.982.174 1.84.405 1.906.513.198.32-1.54 2.713-2.834 3.904-2.314 2.13-5.42 3.148-10.492 3.438l-3.055.175zm17.502-.559c0-.646 1.702-5.318 2.447-6.715 1.472-2.762 4.84-5.965 5.538-5.267.161.161.234 1.18.176 2.481-.114 2.603-.705 4.023-2.51 6.03-1.524 1.695-5.651 4.23-5.651 3.471m8.04-1.157c3.728-2.356 7.725-5.133 8.864-6.158 1.353-1.218 1.403-1.24.984-.43-1.093 2.113-4.85 5.104-7.93 6.31-1.734.68-2.798.834-1.919.278m2.457-4.828c-.243-.511-.443-1.383-.443-1.937 0-1.018.973-3.223 1.5-3.399.368-.123 1.146 1.814 1.146 2.853 0 .855-.78 2.6-1.39 3.105-.298.247-.456.127-.813-.622m11.343.373c-1.157-.135-2.15-.292-2.206-.348-.16-.16 1.966-2.017 3.71-3.24 2.387-1.673 4.54-2.317 7.745-2.316 2.182 0 2.874.104 3.949.596l1.303.595-.907.936c-2.935 3.03-7.986 4.433-13.594 3.777m-135.543-5.98c-3.17-5.953-3.802-11.809-1.769-16.407.766-1.73 2.408-4.033 2.878-4.033.185 0 .7.685 1.142 1.522 2.02 3.82 2.643 8.569 1.708 13.03-.515 2.454-2.383 7.938-2.705 7.938-.089 0-.653-.923-1.254-2.05m131.543-.026c-2.11-1.55-3.023-3.093-3.023-5.108 0-1.215.77-3.056 1.587-3.796.494-.447.574-.438 1.965.243 1.713.838 2.676 1.892 3.072 3.363.464 1.725-.257 3.872-1.791 5.328l-.771.733zm-142.341-2.392c-.955-.434-3.028-2.462-3.028-2.963 0-.106.589-.273 1.309-.372 2.032-.28 3.923.381 5.269 1.84.602.654 1.095 1.295 1.095 1.426 0 .289-1.308.57-2.613.562-.527-.003-1.442-.225-2.032-.493m134.927-3.139c1.218-3.954 1.471-13.59.477-18.203a57 57 0 0 0-1.472-5.291c-1.025-3-1.187-3.508-1.031-3.229.06.11.227.199.369.199s.185-.12.095-.265-.099-.265-.019-.265c.285 0 2.284 4.27 2.94 6.28.942 2.884 1.488 6.584 1.481 10.037-.008 4.205-.63 7.156-2.126 10.088-.577 1.13-.974 1.491-.714.65m15.622-.53c.096-.4.694-1.798 1.33-3.108 1.78-3.673 4.396-6.043 7.61-6.899 2.261-.602 2.412-.555 2.244.699-.39 2.903-3.348 6.413-6.971 8.27-.455.233-1.63.726-2.608 1.094l-1.78.67zm-150.592-3.621c-5.551-2.683-8.865-5.295-11.436-9.013-2.092-3.028-3.72-7.066-3.72-9.231 0-.636.089-.69 1.135-.69 2.913 0 6.796 1.74 9.585 4.296 3.283 3.008 5.033 6.073 6.587 11.534 1.15 4.043 1.263 4.544 1.02 4.54-.111 0-1.539-.647-3.17-1.436m145.075.485c-.092-.241-.309-1.552-.48-2.914-.562-4.443.43-8.183 2.772-10.456.58-.562 1.164-1.022 1.3-1.022.405 0 1.01 1.75 1.186 3.43.324 3.1-.9 6.63-3.421 9.872-.926 1.19-1.226 1.431-1.357 1.09m-6.353-7.675c.34-1.413.908-2.21 1.957-2.745 1.55-.792 1.96-.718 1.754.314-.326 1.628-1.397 2.695-3.034 3.022-.84.168-.856.154-.677-.591m18.432-2.084c-.473-.206-.857-.469-.854-.585.01-.368 1.945-1.592 2.816-1.781.461-.1 1.34-.047 1.952.118l1.114.3-.882.909c-.764.789-2.17 1.45-3.022 1.422-.145-.005-.651-.178-1.124-.383m-4.19-2.014c.437-5.243 1.85-8.992 4.434-11.754 1.589-1.698 4.011-3.172 5.51-3.353.608-.073.669.016.745 1.087.125 1.742-.655 4.812-1.81 7.117-1.233 2.466-3.244 4.75-6.16 7-3.185 2.457-2.932 2.466-2.719-.097M164.535 96.2c.011-.601.996-2.432 1.613-2.997.74-.68 1.86-1.142 2.764-1.142.74 0 .783.213.287 1.402-.328.784-2.05 2.558-2.496 2.573-.105.004-.636.11-1.182.237-.703.163-.99.142-.986-.073M39.38 92.511l-1.19-.287 1.894-.184c2.429-.237 4.211-.836 5.755-1.933 1.705-1.212 2.43-2.3 3.187-4.777.358-1.173 1.027-2.644 1.487-3.27.855-1.16 1.328-1.354.772-.315-.17.317-.42 1.753-.555 3.191s-.371 2.944-.524 3.347c-1.29 3.39-6.255 5.33-10.826 4.228m132.353-3.022c-1.37-3.004-1.722-4.62-1.596-7.322.12-2.584.663-4.209 1.984-5.941l.698-.915.593.689c1.538 1.787 2.37 6.366 1.72 9.457-.375 1.79-1.903 5.61-2.293 5.734-.158.05-.656-.715-1.106-1.702m6.655.323c.094-.582.245-3.618.336-6.747.16-5.514-.097-11.175-.726-16.007-.66-5.078-2.584-11.438-4.788-15.834-.572-1.142-.914-1.998-.76-1.903.154.096.28.02.28-.17 0-.608 1.905 2.465 3.056 4.93 3.19 6.83 5.492 18.482 5.039 25.5-.219 3.379-.79 6.78-1.52 9.04-.672 2.084-1.164 2.722-.917 1.191m-5.129-39.936c0-.065-.119-.19-.264-.28s-.265-.038-.265.116.12.28.265.28.264-.052.264-.116M21.39 87.46c-6.885-6.262-9.634-10.983-10.312-17.71-.218-2.153.098-6.211.514-6.628.377-.377 2.86.757 4.714 2.153 4.287 3.228 7.128 8.67 7.976 15.276.349 2.717.746 9.923.547 9.92-.073-.001-1.62-1.356-3.44-3.01m141.818 1.495c.002-1.223.51-2.654 1.254-3.539.681-.81 2.635-1.902 2.999-1.677.248.154-.193 2.347-.65 3.224-.523 1.007-1.444 1.82-2.616 2.31l-.989.413zm19.715-9.65c.101-.48.414-1.25.694-1.712.53-.872 2.361-1.937 3.331-1.937.515 0 .537.075.29.992-.432 1.599-1.891 2.901-3.749 3.347-.733.176-.746.16-.566-.69m-1.078-4.864c-.434-3.474.426-7.949 2.004-10.427.992-1.557 3.308-3.704 3.996-3.704.79 0 1.023 5.098.34 7.427-.775 2.639-3.22 6.102-5.41 7.661l-.744.53zM27.106 70.74c-.83-2.163.852-9.285 3.442-14.577 3.414-6.977 9.876-14.173 15.518-17.28 1.338-.736 1.306-.696-.732.921-3.554 2.82-6.93 6.51-9.617 10.514-2.78 4.142-4.184 7.582-5.825 14.274-.593 2.419-1.273 4.885-1.512 5.482-.446 1.116-.991 1.401-1.274.666m148.415-4.429c-3.31-1.775-5.714-4.87-6.05-7.787-.123-1.073-.097-1.124.573-1.122 1.742.006 4.537 2.38 5.833 4.954.468.928 1.437 4.572 1.263 4.746-.028.028-.757-.328-1.62-.79M24.465 63.817c-1.392-2.767-2.046-5.175-2.208-8.138-.16-2.924.292-6.48.823-6.48.632 0 2.73 1.536 3.654 2.676 1.65 2.036 2.173 3.325 2.185 5.393.01 1.729-.094 2.069-1.554 5.094-.86 1.782-1.663 3.24-1.783 3.24s-.623-.803-1.117-1.785m155.049-4.47c-.602-3.045-.356-5.571.757-7.767.795-1.57 2.708-3.351 3.137-2.921.187.187.302 1.33.302 3 0 2.617-.03 2.756-1.001 4.573-.551 1.03-1.462 2.322-2.024 2.871l-1.022.998zm-68.432-2.831c0-.451.748-1.115 1.521-1.35.762-.233.743.064-.061.978-.678.77-1.46.969-1.46.372M33.59 54.752c1.046-1.877 3.42-4.082 5.433-5.045 1.457-.699 2.23-.892 3.93-.982 2.15-.115 3.863.18 4.728.812.444.324.393.442-.74 1.701-1.47 1.635-3.438 2.97-5.575 3.778-1.242.47-2.33.63-4.998.735l-3.41.135zm76.965.194c0-.802 1.282-2.19 2.17-2.35.969-.176 1.534.041 1.534.587 0 .382-.305.583-1.245.82-.685.172-1.518.608-1.852.968l-.607.655zm57.018-.605c-.437-.225-.965-.578-1.173-.783-.327-.323-.22-.446.794-.905 1.314-.597 2.774-.659 4.347-.184 1.386.417 1.347.95-.122 1.69-1.377.695-2.73.76-3.846.182m-58.306-1.16c.174-.5.815-1.406 1.424-2.015.918-.918 1.368-1.152 2.637-1.37 1.42-.246 2.024-.224 3.048.107.8.26-.765 1.148-2.022 1.148-1.584 0-2.915.6-4.27 1.928l-1.133 1.109zm65.577-2.87c-.75-1.497-.906-2.129-1.001-4.048-.094-1.886-.02-2.485.431-3.506.3-.677.655-1.231.79-1.231.33 0 1.475 1.777 1.856 2.883.497 1.442.383 4.31-.236 5.965-.3.803-.638 1.517-.75 1.586-.11.069-.602-.673-1.09-1.649m-65.359.239c.662-1.25 2.453-2.918 3.604-3.357 1.384-.53 4.318-.42 5.512.206l.757.397-.576.403c-.45.315-1.084.374-2.904.27-2.854-.163-3.938.155-5.54 1.625-.876.802-1.1.922-.853.456m-79.602-1.036c-1.895-1.894-2.474-3.183-2.62-5.824-.066-1.211-.008-2.314.128-2.45.332-.332 2.019.945 2.831 2.145.348.513.825 1.5 1.06 2.192.47 1.384.581 4.818.164 5.076-.144.089-.848-.423-1.563-1.139m78.698-.58c.528-1.848 2.227-3.934 3.94-4.841 1.648-.872 4.113-.74 7.331.392l2.55.897-.936.614c-.919.602-.967.606-2.55.2-2.732-.698-3.209-.739-5.014-.424-2.025.352-3.826 1.419-4.84 2.865-.543.777-.635.833-.481.297m54.957-.028c-.619-.306-1.125-.665-1.125-.797 0-.133.387-.477.86-.765 1.455-.887 4.475-.65 6.244.49l.621.401-1.15.602c-1.547.81-3.894.84-5.45.07m-113.51-5.029c-.621-.307-1.376-.872-1.677-1.255l-.548-.696.883-.372c2.07-.872 5.296-.261 6.675 1.263.498.55.494.556-.662 1.08-1.52.69-3.253.682-4.672-.02m69.126-.293c-2.905-1.128-5.647-1.179-7.871-.147-.837.388-1.522.665-1.522.615 0-.292 2.738-1.751 3.95-2.106 1.796-.525 4.726-.535 6.634-.023 1.759.472 3.564.489 4.61.043.696-.298.59-.32-1.07-.226-1.83.103-1.852.096-3.683-1.16-1.013-.694-2.318-1.413-2.9-1.596l-1.058-.333.988-.018c.544-.01 2.135.28 3.535.644 2.6.675 4.605.856 4.605.415 0-.347-1.479-1.36-2.616-1.791-.935-.355-.915-.361.9-.261 2.1.115 3.862.79 4.957 1.899.72.729.727.73.727.13 0-.934-1.81-2.484-3.47-2.973-1.732-.51-.9-.598.957-.102 2.68.716 5.39 2.515 6.21 4.124.295.578.537 1.15.537 1.273 0 .122-1.102.361-2.448.532s-3.511.671-4.812 1.112c-3.03 1.027-4.41 1.017-7.16-.05m-83.06-2.246c-.331-4.672.95-8.655 3.622-11.257l1.343-1.308.418.754c.31.56.419 1.506.419 3.664 0 2.803-.036 2.984-.958 4.895-.887 1.84-3.687 5.524-4.365 5.745-.197.064-.358-.772-.48-2.493m125.87-.33c-.464-.283-1.05-.829-1.301-1.212-.556-.848-.22-1.17 1.221-1.176 1.652-.007 4.104 1.78 3.588 2.615-.3.486-2.579.34-3.507-.227m-104.922-.902c-1.831-.683-4.166-2.965-3.74-3.655.203-.328 3.603-.26 4.628.093.494.17 1.341.6 1.882.955 1.055.692 2.477 2.374 2.223 2.628-.352.353-4.033.337-4.993-.021m.993-5.296c-.727-.191-2.034-.56-2.902-.82l-1.58-.473.898-.75c2.53-2.112 6.92-3.595 9.62-3.25 1.876.239 3.85 1.003 4.937 1.91l.907.758-1.14.825c-1.943 1.409-3.805 1.977-6.771 2.068-1.607.05-3.165-.056-3.969-.268\" style=\"fill:teal;stroke-width:.264583\"></path></svg>\n`)}`\n\n// ---------- Built-in Skins Registry ---------- //\n\n/**\n * Built-in skins that ship with the library.\n * PRs to add new WalletConnect-compatible wallets should add entries here.\n */\nexport const BUILTIN_SKINS: Record<string, WalletConnectSkin> = {\n biatec: {\n id: 'biatec',\n name: 'Biatec Wallet',\n icon: BIATEC_ICON\n },\n voiwallet: {\n id: 'voiwallet',\n name: 'Voi Wallet',\n icon: VOI_WALLET_ICON\n }\n}\n\n// ---------- Custom Skins Registry (Runtime) ---------- //\n\n/**\n * Runtime registry for custom skins added by developers.\n * Use `registerSkin()` to add custom skins.\n */\nconst customSkins = new Map<string, WalletConnectSkin>()\n\n/**\n * Register a custom WalletConnect skin at runtime.\n * This allows developers to add their own wallet skins without PRing the library.\n *\n * @param skin - The skin definition to register\n * @throws Error if attempting to override a built-in skin\n *\n * @example\n * ```typescript\n * import { registerSkin } from '@d13co/use-wallet'\n *\n * registerSkin({\n * id: 'mywallet',\n * name: 'My Custom Wallet',\n * icon: 'data:image/svg+xml;base64,...'\n * })\n * ```\n */\nexport function registerSkin(skin: WalletConnectSkin): void {\n if (BUILTIN_SKINS[skin.id]) {\n throw new Error(`Cannot override built-in skin: ${skin.id}`)\n }\n customSkins.set(skin.id, skin)\n}\n\n/**\n * Get a skin by its ID from either built-in or custom registries.\n *\n * @param skinId - The skin identifier\n * @returns The skin definition, or undefined if not found\n */\nexport function getSkin(skinId: string): WalletConnectSkin | undefined {\n return BUILTIN_SKINS[skinId] || customSkins.get(skinId)\n}\n\n/**\n * Resolve a skin option to a full WalletConnectSkin object.\n *\n * If the option is a string, looks up the skin in the registries.\n * If the option is a full skin object, registers it as a custom skin and returns it.\n *\n * @param skinOption - Either a skin ID string or a full skin definition\n * @returns The resolved skin, or undefined if not found (when string ID provided)\n */\nexport function resolveSkin(skinOption: WalletConnectSkinOption): WalletConnectSkin | undefined {\n if (typeof skinOption === 'string') {\n return getSkin(skinOption)\n }\n\n // If it's a full skin definition, register it as a custom skin\n if (!BUILTIN_SKINS[skinOption.id]) {\n customSkins.set(skinOption.id, skinOption)\n }\n return skinOption\n}\n","import { logger } from 'src/logger'\nimport { WalletConnect } from './walletconnect'\nimport type { WalletConstructor, WalletId } from './types'\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 200 180\"><path d=\"M94.27 151.629c-.861-.526-1.51-1.37-1.83-2.386-.197-.62-.18-.627 1.082-.437.705.105 1.6.356 1.988.557.696.36 1.815 1.876 1.815 2.459 0 .486-2.166.348-3.054-.193m23.953-.263c-.788-.419-2.095-2.123-2.108-2.75-.01-.433 2.467-.182 3.403.345.955.536 2.148 1.97 2.148 2.582 0 .503-2.397.38-3.443-.177m-9.024-1.165c-1.567-1.193-2.38-2.74-2.55-4.849-.075-.933-.054-1.697.045-1.697.866 0 2.714 1.67 3.439 3.107.398.789.657 3.888.351 4.195-.07.07-.648-.27-1.285-.756m-8.906-1.354c-.63-.684-1.21-1.648-1.387-2.305-.318-1.18-.136-3.416.278-3.416.555 0 2.108 1.697 2.505 2.737.472 1.237.457 3.905-.023 4.063-.16.053-.777-.433-1.373-1.08m-6.805-1.775c-2.764-.612-5.223-1.425-5.357-1.772-.08-.21.169-1.027.555-1.814s.701-1.469.701-1.515c0-.047-.803.067-1.786.253-.982.185-1.857.256-1.944.157-.088-.1-.365-.715-.618-1.367-.252-.652-.858-1.729-1.345-2.393-1.293-1.76-5.285-5.526-7.272-6.858-3.826-2.564-4.96-3.855-4.667-5.316.08-.402.692-1.574 1.359-2.606 1.65-2.551 2.51-4.472 2.512-5.62.002-.571-.364-1.69-.901-2.758l-.905-1.796.706-.532c1.936-1.46 4.649-4.916 4.205-5.36-.06-.06-.846.72-1.745 1.732-3.553 3.997-7.814 6.463-16.014 9.27-5.324 1.823-5.853 2.06-7.183 3.228-1.555 1.365-1.962 2.502-2.531 7.063-.284 2.275-.706 4.79-.937 5.591-.231.8-.403 2.17-.382 3.043.032 1.346-.157 2.06-1.248 4.698-1.498 3.622-1.068 3.708-4.138-.827l-2.036-3.008.747-.784c.411-.43 1.075-.978 1.475-1.216.955-.568.919-.922-.236-2.331-.53-.647-.917-1.209-.86-1.25s.43-.277.83-.526c1.788-1.12 2.7-4.727 2.987-11.822.214-5.274.595-6.46 2.195-6.83 6.634-1.535 7.58-1.98 8.618-4.066.926-1.858.9-3.701-.121-8.475-.87-4.072-1.047-7.21-.516-9.223.606-2.303 3.759-7.433 5.667-9.221.376-.353.684-.729.684-.835 0-.254-3.325-2.697-4.448-3.268-.482-.245-1.455-.45-2.163-.456-3.892-.03-6.628 1.877-8.722 6.08-.603 1.212-1.582 2.73-2.176 3.374-2.733 2.965-8.602 4.09-12.666 2.43l-.913-.374 1.323-.05c1.422-.054 3.498-.94 3.944-1.683.414-.69.076-.79-1.06-.314-1.443.605-4.075.597-5.039-.015-1.259-.8-2.23-1.81-2.795-2.908l-.535-1.042 1.243 1.095c1.51 1.328 2.691 1.752 4.425 1.585 1.506-.145 2.523-.851 1.65-1.147-3.195-1.08-5.834-3.078-7.07-5.35-.809-1.485-1.513-3.982-1.504-5.334l.006-.936.42.854c.232.47.941 1.333 1.576 1.918l1.155 1.064 2.189-.012 2.188-.011-1.012-.535c-.975-.514-3.353-2.766-3.353-3.175 0-.11.506.079 1.124.418 1.282.703 3.888 1.32 4.21.996.12-.118-.204-.612-.718-1.097-.513-.484-1.17-1.344-1.46-1.911l-.525-1.03 1.174.895c2.02 1.542 3.883 1.506 6.342-.123.69-.457 1.218-.863 1.175-.903s-.989.227-2.103.594c-1.87.618-2.11.64-3.151.305-1.284-.415-2.023-1.273-2.25-2.613l-.158-.926.486.595c1.07 1.31 2.652 1.255 6.363-.224 1.132-.451 2.892-1.036 3.91-1.3 2.732-.706 1.561-.926-2.298-.43-1.778.228-3.27.376-3.318.329-.047-.047.662-.415 1.575-.818 2.002-.883 4.78-1.152 6.858-.663 1.817.427 2.555.81 4.032 2.087 1.151.997 3.654 2.156 4.605 2.133.595-.015-2.96-3.395-4.552-4.328-1.639-.96-4.11-1.542-6.107-1.438-.92.049-1.627.016-1.571-.073.242-.388 3.44-.825 5.203-.71 4.048.265 6.96 2.546 10.902 8.537 2.553 3.883 4.234 5.67 6.137 6.524l1.092.49 2.215-1.027c4.747-2.2 8.797-2.518 16.097-1.26 2.25.387 4.717.704 5.482.704h1.39l.074 3.203.074 3.203.894-1.113c.88-1.096.894-1.152.846-3.516l-.049-2.402-1.61-1.721c-4.14-4.425-4.335-6.536-1.135-12.213 2.744-4.87 2.704-4.41.813-9.32-.883-2.292-1.696-4.167-1.807-4.167-.339 0-.205 4 .196 5.821.716 3.256.435 4.822-1.006 5.603-.371.2-2.144.33-4.904.36-3.6.036-4.348-.022-4.473-.348-.087-.227.102-.582.451-.845.53-.4.563-.53.274-1.09-.18-.35-.692-1.022-1.137-1.493s-.734-.933-.64-1.026c.093-.094 1.072-.036 2.175.128 3.023.45 3.76.398 4.211-.297.4-.615 2.887-9.725 2.704-9.907-.196-.196-1.55 1.62-2.759 3.7-1.782 3.068-3.14 3.895-6.379 3.889-2.485-.005-5.43-1.098-8.658-3.213-1.439-.943-3.02-1.855-3.514-2.027-1.524-.531-3.75-.392-5.163.324l-1.26.638.567-.603c.892-.95 3.048-2.004 4.432-2.167 1.94-.23 3.3.283 5.786 2.18 2.39 1.823 3.163 2.225 4.28 2.225.6 0 .497-.12-.745-.872-.792-.48-2.416-1.598-3.609-2.486-2.658-1.978-4.119-2.58-5.831-2.4l-1.26.132.926-.39c.667-.281 1.609-.36 3.373-.284 1.346.059 2.448.077 2.448.04 0-.278-2.537-1.455-3.71-1.722-.89-.202-1.231-.365-.884-.421.312-.051 1.86.225 3.44.614 2.564.63 3.167.687 5.602.525 5.536-.369 7.032-1.144 9.218-4.774l1.433-2.382-1.224 1.323c-.673.728-1.779 1.928-2.457 2.666-.677.739-1.53 1.417-1.893 1.508l-.662.165.61-.503c.334-.277 1.088-1.491 1.675-2.698 1.772-3.648 3.228-4.779 6.772-5.257 3.522-.476 4.797-.791 5.421-1.342.332-.293.429-.44.215-.329-.213.112-1.94.277-3.836.367-2.955.14-3.666.263-4.97.86-1.632.749-4.092 2.893-4.996 4.356-.764 1.236-.923.905-.224-.465 1.387-2.718 4.685-4.945 8.366-5.651l1.815-.349-1.058-.235c-.582-.13-1.952-.224-3.043-.209l-1.984.027 1.72-.82c1.427-.682 2.04-.822 3.611-.822 1.607 0 1.86-.06 1.679-.4-.539-1.005-1.377-1.452-2.69-1.432-.769.011-1.156-.067-.937-.19.534-.298 2.168-.34 4.169-.104 1.648.194 1.82.159 3.59-.733 1.023-.515 2.472-1.047 3.22-1.183 1.388-.253 3.607-.04 4.472.429.942.51 1.958 1.825 2.095 2.712.116.746 0 1.052-.671 1.777-.752.813-.811 1.018-.811 2.82 0 1.706-.105 2.127-.85 3.424-.467.814-.973 1.476-1.124 1.473s-.797-.242-1.435-.532c-1.277-.579-1.714-.435-1.988.655-.115.46.045.84.605 1.44.42.448 1.621 2.237 2.671 3.975 1.883 3.116 1.905 3.175 1.585 4.146-.258.78-.258 1.56 0 3.73.179 1.51.253 3.031.166 3.38-.128.509.033.795.805 1.432 1.367 1.126 5.02 2.947 5.914 2.947 1.268 0 1.588.247 1.588 1.227 0 1.057-.642 2.742-1.045 2.742-.153 0-.278-.298-.278-.662 0-.558-.123-.661-.793-.661-.436 0-2.162-.467-3.836-1.036l-3.044-1.036v1.788c0 .984-.077 3.057-.172 4.608l-.173 2.82h3.015l-.133.86c-.073.472-.206 2.11-.295 3.637-.373 6.42-.634 7.203-4.207 12.65-4.119 6.278-4.635 7.984-3.493 11.548.37 1.158.647 2.133.613 2.167-.246.246-2.569-1.19-3.783-2.34-2.616-2.473-2.922-3.975-1.146-5.619.954-.882 1.054-1.087.892-1.828-.417-1.91-.553-1.976-1-.482-.232.777-.693 1.849-1.024 2.382-.526.846-.603 1.318-.603 3.705v2.736l3.175 1.022c1.746.562 3.446 1.028 3.777 1.034.583.012.59-.012.194-.776-.224-.434-.479-1.307-.566-1.939-.208-1.523.53-3.065 3.905-8.159 4.537-6.845 5.478-9.25 5.681-14.513.07-1.82.19-3.93.267-4.692.137-1.353.17-1.398 1.379-1.933 2.27-1.004 4.245-3.717 6.253-8.589.526-1.274.459-1.204-1.891 1.985-1.019 1.382-2.13 2.751-2.47 3.042-.604.516-.603.506.048-.397.938-1.299 1.216-2.144 1.685-5.107.663-4.193 1.699-6.255 4.604-9.16 3.639-3.638 9.47-6.348 13.7-6.365.635-.003 1.201-.155 1.322-.356.117-.192 1.105-.92 2.196-1.615 1.092-.696 2.252-1.511 2.579-1.812.327-.3.66-.48.74-.4.081.081-.038.942-.263 1.914s-.41 1.88-.41 2.016c0 .37 1.393.3 1.992-.102.287-.192 1.296-.62 2.241-.953s1.998-.78 2.338-.994c.34-.215.665-.345.722-.288.302.302-1.982 3.526-2.927 4.132l-1.152.74c-.277.179 1.202 3.732 1.975 4.745.674.882.862 1.347.742 1.825-.089.354.045 1.273.296 2.044.645 1.98 2.913 6.751 3.698 7.779.808 1.06.82 1.416.075 2.363-.32.408-.648 1.225-.728 1.816-.118.879-.279 1.12-.89 1.335-1.457.512-2.298-.449-2.94-3.358-.113-.512-.325-.728-.715-.728-.634 0-.619.099.398 2.514.368.873.572 1.685.453 1.804-.12.119-.679.178-1.244.132-1.006-.082-1.03-.108-1.165-1.29-.11-.958-.407-1.515-1.444-2.716-1.28-1.483-1.523-1.617-3.974-2.186-.436-.102-1.235-.406-1.776-.677l-.981-.491-.311 1.124c-.462 1.668-.381 7.592.14 10.35.244 1.29.926 3.552 1.516 5.027 1.864 4.655 1.933 4.98 1.924 9.031-.006 2.853-.112 3.972-.461 4.87-.25.641-.415 1.204-.367 1.252.047.047 2.935.203 6.419.347 4.2.174 6.786.397 7.679.664 1.433.429 2.955 1.341 3.328 1.995.125.219 1.292 3.718 2.594 7.777 2.56 7.978 2.515 7.613 1.142 9.263-.582.7-.623.918-.458 2.455l.18 1.686-1.685 1.59c-2.476 2.335-2.487 2.338-2.833.702l-.825-3.894c-.497-2.344-.503-2.535-.09-2.844.245-.182.75-.332 1.121-.335 1.259-.007 1.444-.36.672-1.277l-.7-.833.461-1.209c.403-1.054.421-1.428.146-2.924-.856-4.647-3.463-7.755-6.516-7.769-1.198-.006-5.626.726-6.143 1.015-.419.235 1.36 2.035 4.026 4.073 1.954 1.494 2.487 2.265 2.708 3.918.115.858-.031 1.278-.963 2.753-1.122 1.776-2.596 4.941-4.015 8.62-.437 1.133-1.048 2.383-1.358 2.777-.546.695-.623.712-2.434.544-1.51-.14-2.034-.085-2.726.287-.933.503-1.032.488-5.234-.754l-1.852-.547 1.058-.93c2.452-2.155 4.96-4.035 5.375-4.028.245.004.743.417 1.107.919.364.5.74.914.835.918.336.014 2.673-2.777 3.423-4.09.928-1.622 1.429-3.721 1.19-4.992-.414-2.208-2.105-3.2-8.836-5.183-4.604-1.356-5.44-1.637-6.837-2.3-.81-.384-.92-.36-3.047.664-2.593 1.248-5.507 2.251-8.665 2.983-3.304.766-9.686.95-12.988.376-3.227-.562-7.639-2.035-9.626-3.214-.856-.508-1.618-.862-1.693-.787-.15.15 1.12 2.079 1.665 2.53.271.226.239.732-.166 2.586-1.245 5.713-2.66 8.612-7.189 14.73-2.852 3.852-3.402 5.685-2.327 7.762.66 1.274 9.278 9.763 11.016 10.85.797.498 1.576 1.26 1.929 1.889.496.883 2.158 5.275 2.158 5.704 0 .2-1.577.111-2.779-.154m46.76-1.68c-2.98-1.107-5.348-3.111-7.054-5.97-1.025-1.72-2.16-4.428-1.946-4.643.229-.229 3.039.644 4.916 1.527 3.417 1.608 6.275 5.198 6.594 8.283.178 1.723.063 1.76-2.51.803m-70.399.107c-2.923-.4-6.887-2.043-7.56-3.132-.23-.371 1.693-1.772 3.683-2.683 4.119-1.887 9.22-1.779 13.075.277 1.637.873 4.347 2.943 4.307 3.29-.014.122-.895.499-1.957.837-4.06 1.29-8.482 1.831-11.548 1.411m51.264-1.55c-1.687-.66-3.315-1.831-4.87-3.503l-1.323-1.421 2.116-.183c3.467-.298 6.424.354 8.757 1.932 1.096.742 2.753 2.456 2.753 2.848 0 .859-5.46 1.099-7.433.326m38.521-1.26c-3.84-.798-6.966-2.331-9.705-4.761-2.156-1.913-3.179-2.512-5.08-2.978-1.478-.362-3.339-1.249-3.339-1.591 0-.318 2.824-.81 5.689-.991 7.046-.446 13.549 2.741 16.133 7.908.513 1.024.932 2.025.932 2.224 0 .277-.479.354-2.05.33-1.128-.016-2.289-.08-2.58-.14m-61.217-2.076c-1.35-.421-2.52-1.449-3.238-2.845l-.51-.992h1.178c1.479 0 2.46.365 3.42 1.273.65.615 1.762 2.392 1.762 2.817 0 .255-1.426.117-2.612-.253m5.45-1.504c-1.583-1.153-2.396-3.509-1.878-5.442.192-.715.563-.742 1.334-.098 1.18.986 1.673 2.177 1.674 4.051 0 .974-.09 1.826-.2 1.895-.112.068-.53-.114-.93-.406m-26.254-1.075a150 150 0 0 0-3.968-1.97l-2.382-1.138 1.21-.001c2.527-.002 4.928 1.203 6.339 3.185.306.43.52.777.473.77-.046-.007-.799-.388-1.672-.845zm-14.354-3.608c-.764-.264-1.631-.699-1.927-.966-.59-.534-1.695-2.22-1.542-2.352.053-.045.573-.192 1.155-.325 1.324-.303 1.45-.925.662-3.265-.306-.908-.503-1.705-.438-1.77.066-.066.637.018 1.27.187.95.253 1.683.849 4.194 3.411 2.483 2.534 3.286 3.19 4.366 3.566.727.253 1.62.587 1.984.742l.662.28-.662.199c-.779.234-6.102.794-7.42.782-.503-.005-1.54-.225-2.304-.489m104.313-.83c-1.528-.484-4.719-2.704-4.75-3.303-.006-.145.88-.42 1.972-.61 2.368-.414 4.676-.11 6.582.864 1.41.721 3.082 2.35 2.83 2.756-.55.891-4.237 1.054-6.634.294m-56.58-.117c-2.06-.734-3.35-2.65-3.345-4.961.006-2.304.15-2.574 1.279-2.397 1.516.239 3.013.83 3.677 1.455l.609.572 1.523-1.507c.838-.829 1.593-1.507 1.679-1.507.085 0 .362.735.614 1.633.94 3.35-.383 5.974-3.431 6.806-1.302.356-1.35.354-2.605-.094m-75.315-.698c-6.533-.942-11.018-2.967-14.552-6.571-1.972-2.01-3.175-3.81-2.8-4.186.109-.109 1.32-.239 2.693-.29 5.235-.192 9.266 1.449 13.22 5.381 2.097 2.085 5.101 5.853 4.838 6.068-.05.041-1.58-.14-3.4-.402m97.327-1.25c4.267-5.096 8.959-7.442 13.334-6.666.982.174 1.84.405 1.906.513.198.32-1.54 2.713-2.834 3.904-2.314 2.13-5.42 3.148-10.492 3.438l-3.055.175zm17.502-.559c0-.646 1.702-5.318 2.447-6.715 1.472-2.762 4.84-5.965 5.538-5.267.161.161.234 1.18.176 2.481-.114 2.603-.705 4.023-2.51 6.03-1.524 1.695-5.651 4.23-5.651 3.471m8.04-1.157c3.728-2.356 7.725-5.133 8.864-6.158 1.353-1.218 1.403-1.24.984-.43-1.093 2.113-4.85 5.104-7.93 6.31-1.734.68-2.798.834-1.919.278m2.457-4.828c-.243-.511-.443-1.383-.443-1.937 0-1.018.973-3.223 1.5-3.399.368-.123 1.146 1.814 1.146 2.853 0 .855-.78 2.6-1.39 3.105-.298.247-.456.127-.813-.622m11.343.373c-1.157-.135-2.15-.292-2.206-.348-.16-.16 1.966-2.017 3.71-3.24 2.387-1.673 4.54-2.317 7.745-2.316 2.182 0 2.874.104 3.949.596l1.303.595-.907.936c-2.935 3.03-7.986 4.433-13.594 3.777m-135.543-5.98c-3.17-5.953-3.802-11.809-1.769-16.407.766-1.73 2.408-4.033 2.878-4.033.185 0 .7.685 1.142 1.522 2.02 3.82 2.643 8.569 1.708 13.03-.515 2.454-2.383 7.938-2.705 7.938-.089 0-.653-.923-1.254-2.05m131.543-.026c-2.11-1.55-3.023-3.093-3.023-5.108 0-1.215.77-3.056 1.587-3.796.494-.447.574-.438 1.965.243 1.713.838 2.676 1.892 3.072 3.363.464 1.725-.257 3.872-1.791 5.328l-.771.733zm-142.341-2.392c-.955-.434-3.028-2.462-3.028-2.963 0-.106.589-.273 1.309-.372 2.032-.28 3.923.381 5.269 1.84.602.654 1.095 1.295 1.095 1.426 0 .289-1.308.57-2.613.562-.527-.003-1.442-.225-2.032-.493m134.927-3.139c1.218-3.954 1.471-13.59.477-18.203a57 57 0 0 0-1.472-5.291c-1.025-3-1.187-3.508-1.031-3.229.06.11.227.199.369.199s.185-.12.095-.265-.099-.265-.019-.265c.285 0 2.284 4.27 2.94 6.28.942 2.884 1.488 6.584 1.481 10.037-.008 4.205-.63 7.156-2.126 10.088-.577 1.13-.974 1.491-.714.65m15.622-.53c.096-.4.694-1.798 1.33-3.108 1.78-3.673 4.396-6.043 7.61-6.899 2.261-.602 2.412-.555 2.244.699-.39 2.903-3.348 6.413-6.971 8.27-.455.233-1.63.726-2.608 1.094l-1.78.67zm-150.592-3.621c-5.551-2.683-8.865-5.295-11.436-9.013-2.092-3.028-3.72-7.066-3.72-9.231 0-.636.089-.69 1.135-.69 2.913 0 6.796 1.74 9.585 4.296 3.283 3.008 5.033 6.073 6.587 11.534 1.15 4.043 1.263 4.544 1.02 4.54-.111 0-1.539-.647-3.17-1.436m145.075.485c-.092-.241-.309-1.552-.48-2.914-.562-4.443.43-8.183 2.772-10.456.58-.562 1.164-1.022 1.3-1.022.405 0 1.01 1.75 1.186 3.43.324 3.1-.9 6.63-3.421 9.872-.926 1.19-1.226 1.431-1.357 1.09m-6.353-7.675c.34-1.413.908-2.21 1.957-2.745 1.55-.792 1.96-.718 1.754.314-.326 1.628-1.397 2.695-3.034 3.022-.84.168-.856.154-.677-.591m18.432-2.084c-.473-.206-.857-.469-.854-.585.01-.368 1.945-1.592 2.816-1.781.461-.1 1.34-.047 1.952.118l1.114.3-.882.909c-.764.789-2.17 1.45-3.022 1.422-.145-.005-.651-.178-1.124-.383m-4.19-2.014c.437-5.243 1.85-8.992 4.434-11.754 1.589-1.698 4.011-3.172 5.51-3.353.608-.073.669.016.745 1.087.125 1.742-.655 4.812-1.81 7.117-1.233 2.466-3.244 4.75-6.16 7-3.185 2.457-2.932 2.466-2.719-.097M164.535 96.2c.011-.601.996-2.432 1.613-2.997.74-.68 1.86-1.142 2.764-1.142.74 0 .783.213.287 1.402-.328.784-2.05 2.558-2.496 2.573-.105.004-.636.11-1.182.237-.703.163-.99.142-.986-.073M39.38 92.511l-1.19-.287 1.894-.184c2.429-.237 4.211-.836 5.755-1.933 1.705-1.212 2.43-2.3 3.187-4.777.358-1.173 1.027-2.644 1.487-3.27.855-1.16 1.328-1.354.772-.315-.17.317-.42 1.753-.555 3.191s-.371 2.944-.524 3.347c-1.29 3.39-6.255 5.33-10.826 4.228m132.353-3.022c-1.37-3.004-1.722-4.62-1.596-7.322.12-2.584.663-4.209 1.984-5.941l.698-.915.593.689c1.538 1.787 2.37 6.366 1.72 9.457-.375 1.79-1.903 5.61-2.293 5.734-.158.05-.656-.715-1.106-1.702m6.655.323c.094-.582.245-3.618.336-6.747.16-5.514-.097-11.175-.726-16.007-.66-5.078-2.584-11.438-4.788-15.834-.572-1.142-.914-1.998-.76-1.903.154.096.28.02.28-.17 0-.608 1.905 2.465 3.056 4.93 3.19 6.83 5.492 18.482 5.039 25.5-.219 3.379-.79 6.78-1.52 9.04-.672 2.084-1.164 2.722-.917 1.191m-5.129-39.936c0-.065-.119-.19-.264-.28s-.265-.038-.265.116.12.28.265.28.264-.052.264-.116M21.39 87.46c-6.885-6.262-9.634-10.983-10.312-17.71-.218-2.153.098-6.211.514-6.628.377-.377 2.86.757 4.714 2.153 4.287 3.228 7.128 8.67 7.976 15.276.349 2.717.746 9.923.547 9.92-.073-.001-1.62-1.356-3.44-3.01m141.818 1.495c.002-1.223.51-2.654 1.254-3.539.681-.81 2.635-1.902 2.999-1.677.248.154-.193 2.347-.65 3.224-.523 1.007-1.444 1.82-2.616 2.31l-.989.413zm19.715-9.65c.101-.48.414-1.25.694-1.712.53-.872 2.361-1.937 3.331-1.937.515 0 .537.075.29.992-.432 1.599-1.891 2.901-3.749 3.347-.733.176-.746.16-.566-.69m-1.078-4.864c-.434-3.474.426-7.949 2.004-10.427.992-1.557 3.308-3.704 3.996-3.704.79 0 1.023 5.098.34 7.427-.775 2.639-3.22 6.102-5.41 7.661l-.744.53zM27.106 70.74c-.83-2.163.852-9.285 3.442-14.577 3.414-6.977 9.876-14.173 15.518-17.28 1.338-.736 1.306-.696-.732.921-3.554 2.82-6.93 6.51-9.617 10.514-2.78 4.142-4.184 7.582-5.825 14.274-.593 2.419-1.273 4.885-1.512 5.482-.446 1.116-.991 1.401-1.274.666m148.415-4.429c-3.31-1.775-5.714-4.87-6.05-7.787-.123-1.073-.097-1.124.573-1.122 1.742.006 4.537 2.38 5.833 4.954.468.928 1.437 4.572 1.263 4.746-.028.028-.757-.328-1.62-.79M24.465 63.817c-1.392-2.767-2.046-5.175-2.208-8.138-.16-2.924.292-6.48.823-6.48.632 0 2.73 1.536 3.654 2.676 1.65 2.036 2.173 3.325 2.185 5.393.01 1.729-.094 2.069-1.554 5.094-.86 1.782-1.663 3.24-1.783 3.24s-.623-.803-1.117-1.785m155.049-4.47c-.602-3.045-.356-5.571.757-7.767.795-1.57 2.708-3.351 3.137-2.921.187.187.302 1.33.302 3 0 2.617-.03 2.756-1.001 4.573-.551 1.03-1.462 2.322-2.024 2.871l-1.022.998zm-68.432-2.831c0-.451.748-1.115 1.521-1.35.762-.233.743.064-.061.978-.678.77-1.46.969-1.46.372M33.59 54.752c1.046-1.877 3.42-4.082 5.433-5.045 1.457-.699 2.23-.892 3.93-.982 2.15-.115 3.863.18 4.728.812.444.324.393.442-.74 1.701-1.47 1.635-3.438 2.97-5.575 3.778-1.242.47-2.33.63-4.998.735l-3.41.135zm76.965.194c0-.802 1.282-2.19 2.17-2.35.969-.176 1.534.041 1.534.587 0 .382-.305.583-1.245.82-.685.172-1.518.608-1.852.968l-.607.655zm57.018-.605c-.437-.225-.965-.578-1.173-.783-.327-.323-.22-.446.794-.905 1.314-.597 2.774-.659 4.347-.184 1.386.417 1.347.95-.122 1.69-1.377.695-2.73.76-3.846.182m-58.306-1.16c.174-.5.815-1.406 1.424-2.015.918-.918 1.368-1.152 2.637-1.37 1.42-.246 2.024-.224 3.048.107.8.26-.765 1.148-2.022 1.148-1.584 0-2.915.6-4.27 1.928l-1.133 1.109zm65.577-2.87c-.75-1.497-.906-2.129-1.001-4.048-.094-1.886-.02-2.485.431-3.506.3-.677.655-1.231.79-1.231.33 0 1.475 1.777 1.856 2.883.497 1.442.383 4.31-.236 5.965-.3.803-.638 1.517-.75 1.586-.11.069-.602-.673-1.09-1.649m-65.359.239c.662-1.25 2.453-2.918 3.604-3.357 1.384-.53 4.318-.42 5.512.206l.757.397-.576.403c-.45.315-1.084.374-2.904.27-2.854-.163-3.938.155-5.54 1.625-.876.802-1.1.922-.853.456m-79.602-1.036c-1.895-1.894-2.474-3.183-2.62-5.824-.066-1.211-.008-2.314.128-2.45.332-.332 2.019.945 2.831 2.145.348.513.825 1.5 1.06 2.192.47 1.384.581 4.818.164 5.076-.144.089-.848-.423-1.563-1.139m78.698-.58c.528-1.848 2.227-3.934 3.94-4.841 1.648-.872 4.113-.74 7.331.392l2.55.897-.936.614c-.919.602-.967.606-2.55.2-2.732-.698-3.209-.739-5.014-.424-2.025.352-3.826 1.419-4.84 2.865-.543.777-.635.833-.481.297m54.957-.028c-.619-.306-1.125-.665-1.125-.797 0-.133.387-.477.86-.765 1.455-.887 4.475-.65 6.244.49l.621.401-1.15.602c-1.547.81-3.894.84-5.45.07m-113.51-5.029c-.621-.307-1.376-.872-1.677-1.255l-.548-.696.883-.372c2.07-.872 5.296-.261 6.675 1.263.498.55.494.556-.662 1.08-1.52.69-3.253.682-4.672-.02m69.126-.293c-2.905-1.128-5.647-1.179-7.871-.147-.837.388-1.522.665-1.522.615 0-.292 2.738-1.751 3.95-2.106 1.796-.525 4.726-.535 6.634-.023 1.759.472 3.564.489 4.61.043.696-.298.59-.32-1.07-.226-1.83.103-1.852.096-3.683-1.16-1.013-.694-2.318-1.413-2.9-1.596l-1.058-.333.988-.018c.544-.01 2.135.28 3.535.644 2.6.675 4.605.856 4.605.415 0-.347-1.479-1.36-2.616-1.791-.935-.355-.915-.361.9-.261 2.1.115 3.862.79 4.957 1.899.72.729.727.73.727.13 0-.934-1.81-2.484-3.47-2.973-1.732-.51-.9-.598.957-.102 2.68.716 5.39 2.515 6.21 4.124.295.578.537 1.15.537 1.273 0 .122-1.102.361-2.448.532s-3.511.671-4.812 1.112c-3.03 1.027-4.41 1.017-7.16-.05m-83.06-2.246c-.331-4.672.95-8.655 3.622-11.257l1.343-1.308.418.754c.31.56.419 1.506.419 3.664 0 2.803-.036 2.984-.958 4.895-.887 1.84-3.687 5.524-4.365 5.745-.197.064-.358-.772-.48-2.493m125.87-.33c-.464-.283-1.05-.829-1.301-1.212-.556-.848-.22-1.17 1.221-1.176 1.652-.007 4.104 1.78 3.588 2.615-.3.486-2.579.34-3.507-.227m-104.922-.902c-1.831-.683-4.166-2.965-3.74-3.655.203-.328 3.603-.26 4.628.093.494.17 1.341.6 1.882.955 1.055.692 2.477 2.374 2.223 2.628-.352.353-4.033.337-4.993-.021m.993-5.296c-.727-.191-2.034-.56-2.902-.82l-1.58-.473.898-.75c2.53-2.112 6.92-3.595 9.62-3.25 1.876.239 3.85 1.003 4.937 1.91l.907.758-1.14.825c-1.943 1.409-3.805 1.977-6.771 2.068-1.607.05-3.165-.056-3.969-.268\" style=\"fill:teal;stroke-width:.264583\"></path></svg>\n`)}`\n\n/**\n * @deprecated BiatecWallet is deprecated and will be removed in v5.\n * Use WalletConnect with the 'biatec' skin instead:\n *\n * ```typescript\n * { id: WalletId.WALLETCONNECT, options: { projectId: '...', skin: 'biatec' } }\n * ```\n */\nexport class BiatecWallet extends WalletConnect {\n private static deprecationWarningShown = false\n\n constructor(args: WalletConstructor<WalletId.BIATEC>) {\n super(args as WalletConstructor<WalletId.WALLETCONNECT>)\n\n // Show deprecation warning once\n if (!BiatecWallet.deprecationWarningShown) {\n BiatecWallet.deprecationWarningShown = true\n logger.warn(\n 'BiatecWallet is deprecated and will be removed in v5. ' +\n \"Use WalletConnect with the 'biatec' skin instead: \" +\n \"{ id: WalletId.WALLETCONNECT, options: { projectId: '...', skin: 'biatec' } }\"\n )\n }\n }\n\n static defaultMetadata = {\n name: 'BiatecWallet',\n icon: ICON\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, setAccounts, type State } from 'src/store'\nimport { compareAccounts } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type {\n SignDataResponse,\n SignMetadata,\n WalletAccount,\n WalletConstructor,\n WalletId\n} from 'src/wallets/types'\n\nexport type CustomProvider = {\n connect(args?: Record<string, any>): Promise<WalletAccount[]>\n disconnect?(): Promise<void>\n resumeSession?(): Promise<WalletAccount[] | void>\n signTransactions?<T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]>\n transactionSigner?(\n txnGroup: algosdk.Transaction[],\n indexesToSign: number[]\n ): Promise<Uint8Array[]>\n signData?(data: string, metadata: SignMetadata): Promise<SignDataResponse>\n}\n\nexport interface CustomWalletOptions {\n provider: CustomProvider\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"24\" height=\"24\" fill=\"#525252\" />\n</svg>\n`)}`\n\nexport class CustomWallet extends BaseWallet {\n private provider: CustomProvider\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options,\n metadata = {}\n }: WalletConstructor<WalletId.CUSTOM>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n if (!options?.provider) {\n this.logger.error('Missing required option: provider')\n throw new Error('Missing required option: provider')\n }\n this.provider = options.provider\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Custom',\n icon: ICON\n }\n\n public connect = async (args?: Record<string, any>): Promise<WalletAccount[]> => {\n this.logger.info('Connecting...')\n try {\n if (!this.provider.connect) {\n this.logger.error('Method not supported: connect')\n throw new Error('Method not supported: connect')\n }\n\n const walletAccounts = await this.provider.connect(args)\n\n if (walletAccounts.length === 0) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n this.logger.info('✅ Connected.', walletState)\n return walletAccounts\n } catch (error: any) {\n this.logger.error('Error connecting:', error.message || error)\n throw error\n }\n }\n\n public disconnect = async (): Promise<void> => {\n this.logger.info('Disconnecting...')\n this.onDisconnect()\n await this.provider.disconnect?.()\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n this.logger.info('Resuming session...')\n\n const result = await this.provider.resumeSession?.()\n\n if (Array.isArray(result)) {\n const walletAccounts = result\n\n if (walletAccounts.length === 0) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n const match = compareAccounts(walletAccounts, walletState.accounts)\n\n if (!match) {\n this.logger.warn('Session accounts mismatch, updating accounts', {\n prev: walletState.accounts,\n current: walletAccounts\n })\n setAccounts(this.store, {\n walletId: this.id,\n accounts: walletAccounts\n })\n }\n }\n this.logger.info('Session resumed.')\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n throw error\n }\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n if (!this.provider.signTransactions) {\n this.logger.error('Method not supported: signTransactions')\n throw new Error('Method not supported: signTransactions')\n }\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n return await this.provider.signTransactions(txnGroup, indexesToSign)\n }\n\n public transactionSigner = async (\n txnGroup: algosdk.Transaction[],\n indexesToSign: number[]\n ): Promise<Uint8Array[]> => {\n if (!this.provider.transactionSigner) {\n this.logger.error('Method not supported: transactionSigner')\n throw new Error('Method not supported: transactionSigner')\n }\n this.logger.debug('Transaction signer called...', { txnGroup, indexesToSign })\n return await this.provider.transactionSigner(txnGroup, indexesToSign)\n }\n\n public signData = async (data: string, metadata: SignMetadata): Promise<SignDataResponse> => {\n if (!this.provider.signData) {\n this.logger.error('Method not supported: signData')\n throw new Error('Method not supported: signData')\n }\n this.logger.debug('Signing data...', { data, metadata })\n return await this.provider.signData(data, metadata)\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, setAccounts, setActiveWallet, type State } from 'src/store'\nimport { compareAccounts, flattenTxnGroup, isSignedTxn, isTransactionArray } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport { WalletId } from 'src/wallets/types'\nimport type { DeflyWalletConnect } from '@blockshake/defly-connect'\nimport type { Store } from '@tanstack/store'\nimport type { SignerTransaction, WalletAccount, WalletConstructor } from 'src/wallets/types'\n\nexport interface DeflyWalletConnectOptions {\n bridge?: string\n shouldShowSignTxnToast?: boolean\n chainId?: 416001 | 416002 | 416003 | 4160\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 1024 1024\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"1024\" height=\"1024\" />\n <path fill=\"#FFFFFF\" d=\"M779.9,684.4L512,230L244.1,684.4L512,529.5L779.9,684.4z\" />\n <path fill=\"#FFFFFF\" d=\"M733.1,730L512,613.5L290.9,730L512,658L733.1,730z\" />\n</svg>\n`)}`\n\nexport class DeflyWallet extends BaseWallet {\n private client: DeflyWalletConnect | null = null\n private options: DeflyWalletConnectOptions\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options = {},\n metadata = {}\n }: WalletConstructor<WalletId.DEFLY>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n this.options = options\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Defly',\n icon: ICON\n }\n\n private async initializeClient(): Promise<DeflyWalletConnect> {\n this.logger.info('Initializing client...')\n const { DeflyWalletConnect } = await import('@blockshake/defly-connect')\n const client = new DeflyWalletConnect(this.options)\n this.client = client\n this.logger.info('Client initialized')\n return client\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n this.logger.info('Connecting...')\n const currentActiveWallet = this.store.state.activeWallet\n if (currentActiveWallet && currentActiveWallet !== this.id) {\n this.manageWalletConnectSession('backup', currentActiveWallet)\n }\n const client = this.client || (await this.initializeClient())\n const accounts = await client.connect()\n\n // Listen for disconnect event\n client.connector?.on('disconnect', this.onDisconnect)\n\n if (accounts.length === 0) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n this.logger.info('✅ Connected.', walletState)\n return walletAccounts\n }\n\n public disconnect = async (): Promise<void> => {\n this.logger.info('Disconnecting...')\n const client = this.client || (await this.initializeClient())\n\n const currentActiveWallet = this.store.state.activeWallet\n if (currentActiveWallet && currentActiveWallet !== this.id) {\n this.manageWalletConnectSession('backup', currentActiveWallet)\n this.manageWalletConnectSession('restore', this.id)\n await client.disconnect()\n // Wait for the disconnect to complete (race condition)\n await new Promise((resolve) => setTimeout(resolve, 500))\n this.manageWalletConnectSession('restore', currentActiveWallet)\n } else {\n await client.disconnect()\n }\n\n this.onDisconnect()\n this.logger.info('Disconnected')\n }\n\n public setActive = (): void => {\n this.logger.info(`Set active wallet: ${this.id}`)\n const currentActiveWallet = this.store.state.activeWallet\n if (currentActiveWallet && currentActiveWallet === WalletId.PERA) {\n this.manageWalletConnectSession('backup', currentActiveWallet)\n }\n this.manageWalletConnectSession('restore')\n setActiveWallet(this.store, { walletId: this.id })\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n // If Pera is active, skip reconnectSession for Defly\n if (state.activeWallet === WalletId.PERA) {\n this.logger.info('Skipping reconnectSession for Defly (inactive)')\n return\n }\n\n this.logger.info('Resuming session...')\n\n const client = this.client || (await this.initializeClient())\n const accounts = await client.reconnectSession()\n\n if (accounts.length === 0) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const match = compareAccounts(walletAccounts, walletState.accounts)\n\n if (!match) {\n this.logger.warn('Session accounts mismatch, updating accounts', {\n prev: walletState.accounts,\n current: walletAccounts\n })\n setAccounts(this.store, {\n walletId: this.id,\n accounts: walletAccounts\n })\n }\n this.logger.info('Session resumed')\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): SignerTransaction[] {\n const txnsToSign: SignerTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn })\n } else {\n txnsToSign.push({ txn, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): SignerTransaction[] {\n const txnsToSign: SignerTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn })\n } else {\n txnsToSign.push({ txn, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n let txnsToSign: SignerTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n this.logger.debug('Sending processed transactions to wallet...', [txnsToSign])\n\n // Sign transactions\n const signedTxns = await client.signTransaction([txnsToSign])\n this.logger.debug('Received signed transactions from wallet', signedTxns)\n\n // ARC-0001 - Return null for unsigned transactions\n const result = txnsToSign.reduce<(Uint8Array | null)[]>((acc, txn) => {\n if (txn.signers && txn.signers.length == 0) {\n acc.push(null)\n } else {\n const signedTxn = signedTxns.shift()\n if (signedTxn) {\n acc.push(signedTxn)\n }\n }\n return acc\n }, [])\n\n this.logger.debug('Transactions signed successfully', result)\n return result\n } catch (error: any) {\n this.logger.error('Error signing transactions:', error.message)\n throw error\n }\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, setAccounts } from 'src/store'\nimport {\n base64ToByteArray,\n byteArrayToBase64,\n compareAccounts,\n flattenTxnGroup,\n isSignedTxn,\n isTransactionArray\n} from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport { WalletId, type WalletAccount, type WalletConstructor } from 'src/wallets/types'\nimport type AVMWebProviderSDK from '@agoralabs-sh/avm-web-provider'\n\nexport function isAVMWebProviderSDKError(error: any): error is AVMWebProviderSDK.BaseARC0027Error {\n return typeof error === 'object' && 'code' in error && 'message' in error\n}\n\nexport abstract class AVMProvider extends BaseWallet {\n public avmWebClient: AVMWebProviderSDK.AVMWebClient | null = null\n protected avmWebProviderSDK: typeof AVMWebProviderSDK | null = null\n protected providerId: string\n\n constructor(args: WalletConstructor<WalletId> & { providerId: string }) {\n super(args)\n this.providerId = args.providerId\n }\n\n protected async _initializeAVMWebProviderSDK(): Promise<typeof AVMWebProviderSDK> {\n if (!this.avmWebProviderSDK) {\n this.logger.info('Initializing @agoralabs-sh/avm-web-provider...')\n\n const module = await import('@agoralabs-sh/avm-web-provider')\n this.avmWebProviderSDK = module.default ? module.default : module\n\n if (!this.avmWebProviderSDK) {\n throw new Error(\n 'Failed to initialize, the @agoralabs-sh/avm-web-provider SDK was not provided'\n )\n }\n\n if (!this.avmWebProviderSDK.AVMWebClient) {\n throw new Error(\n 'Failed to initialize, AVMWebClient missing from @agoralabs-sh/avm-web-provider SDK'\n )\n }\n this.logger.info('@agoralabs-sh/avm-web-provider SDK initialized')\n }\n\n return this.avmWebProviderSDK\n }\n\n protected async _initializeAVMWebClient(): Promise<AVMWebProviderSDK.AVMWebClient> {\n const avmWebProviderSDK = await this._initializeAVMWebProviderSDK()\n\n if (!avmWebProviderSDK.AVMWebClient) {\n throw new Error('Failed to initialize, AVMWebClient not found')\n }\n\n if (!this.avmWebClient) {\n this.logger.info('Initializing new AVM Web Client...')\n this.avmWebClient = avmWebProviderSDK.AVMWebClient.init()\n this.logger.info('AVM Web Client initialized')\n }\n\n return this.avmWebClient\n }\n\n protected async _getGenesisHash(): Promise<string> {\n // First try to get from network config\n const network = this.activeNetworkConfig\n if (network.genesisHash) {\n return network.genesisHash\n }\n\n // Fallback to API request\n const algodClient = this.getAlgodClient()\n const version = await algodClient.versionsCheck().do()\n return algosdk.bytesToBase64(version.genesisHashB64)\n }\n\n protected _mapAVMWebProviderAccountToWalletAccounts(\n accounts: AVMWebProviderSDK.IAccount[]\n ): WalletAccount[] {\n return accounts.map(({ address, name }, idx) => ({\n name: name || `[${this.metadata.name}] Account ${idx + 1}`,\n address\n }))\n }\n\n protected processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): AVMWebProviderSDK.IARC0001Transaction[] {\n const txnsToSign: AVMWebProviderSDK.IARC0001Transaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n protected processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): AVMWebProviderSDK.IARC0001Transaction[] {\n const txnsToSign: AVMWebProviderSDK.IARC0001Transaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n /**\n * Abstract methods\n * These methods must be implemented by specific wallet providers\n */\n protected abstract _enable(): Promise<AVMWebProviderSDK.IEnableResult>\n protected abstract _disable(): Promise<AVMWebProviderSDK.IDisableResult>\n protected abstract _signTransactions(\n txns: AVMWebProviderSDK.IARC0001Transaction[]\n ): Promise<AVMWebProviderSDK.ISignTransactionsResult>\n\n /**\n * Common methods\n * These methods can be overridden by specific wallet providers if needed\n */\n public async connect(): Promise<WalletAccount[]> {\n try {\n this.logger.info('Connecting...')\n const result = await this._enable()\n this.logger.info(`Successfully connected on network \"${result.genesisId}\"`)\n\n const walletAccounts = this._mapAVMWebProviderAccountToWalletAccounts(result.accounts)\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount: walletAccounts[0]\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n this.logger.info('✅ Connected.', walletState)\n return walletAccounts\n } catch (error: any) {\n this.logger.error(\n 'Error connecting: ',\n isAVMWebProviderSDKError(error) ? `${error.message} (code: ${error.code})` : error.message\n )\n throw error\n }\n }\n\n public async disconnect(): Promise<void> {\n try {\n this.logger.info('Disconnecting...')\n this.onDisconnect()\n\n const result = await this._disable()\n\n this.logger.info(\n `Successfully disconnected${result.sessionIds && result.sessionIds.length ? ` sessions [${result.sessionIds.join(',')}]` : ''} on network \"${result.genesisId}\"`\n )\n } catch (error: any) {\n this.logger.error(\n 'Error disconnecting: ',\n isAVMWebProviderSDKError(error) ? `${error.message} (code: ${error.code})` : error.message\n )\n throw error\n }\n }\n\n public async resumeSession(): Promise<void> {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n try {\n this.logger.info('Resuming session...')\n\n const result = await this._enable()\n\n if (result.accounts.length === 0) {\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = this._mapAVMWebProviderAccountToWalletAccounts(result.accounts)\n const match = compareAccounts(walletAccounts, walletState.accounts)\n\n if (!match) {\n this.logger.warn('Session accounts mismatch, updating accounts', {\n prev: walletState.accounts,\n current: walletAccounts\n })\n\n setAccounts(this.store, {\n walletId: this.id,\n accounts: walletAccounts\n })\n }\n this.logger.info('Session resumed successfully')\n } catch (error: any) {\n this.logger.error(\n 'Error resuming session: ',\n isAVMWebProviderSDKError(error) ? `${error.message} (code: ${error.code})` : error.message\n )\n this.onDisconnect()\n throw error\n }\n }\n\n public async signTransactions<T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> {\n try {\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n let txnsToSign: AVMWebProviderSDK.IARC0001Transaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n this.logger.debug('Sending processed transactions to wallet...', txnsToSign)\n\n // Sign transactions\n const signTxnsResult = await this._signTransactions(txnsToSign)\n this.logger.debug('Received signed transactions from wallet', signTxnsResult)\n\n // Convert base64 to Uint8Array\n const result = signTxnsResult.stxns.map((value) => {\n if (value === null) {\n return null\n }\n return base64ToByteArray(value)\n })\n\n this.logger.debug('Transactions signed successfully', result)\n return result\n } catch (error: any) {\n this.logger.error(\n 'Error signing transactions: ',\n isAVMWebProviderSDKError(error) ? `${error.message} (code: ${error.code})` : error.message\n )\n throw error\n }\n }\n}\n","import { AVMProvider } from 'src/wallets/avm-web-provider'\nimport { WalletId, type WalletConstructor } from 'src/wallets/types'\nimport type AVMWebProviderSDK from '@agoralabs-sh/avm-web-provider'\n\nexport const DEFLY_WEB_PROVIDER_ID = '95426e60-5f2e-49e9-b912-c488577be962'\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 1024 1024\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"1024\" height=\"1024\" />\n <path fill=\"#FFFFFF\" d=\"M779.9,684.4L512,230L244.1,684.4L512,529.5L779.9,684.4z\" />\n <path fill=\"#FFFFFF\" d=\"M733.1,730L512,613.5L290.9,730L512,658L733.1,730z\" />\n</svg>\n`)}`\n\nexport class DeflyWebWallet extends AVMProvider {\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n metadata = {}\n }: WalletConstructor<WalletId.DEFLY_WEB>) {\n super({\n id,\n metadata,\n getAlgodClient,\n store,\n subscribe,\n providerId: DEFLY_WEB_PROVIDER_ID\n })\n }\n\n static defaultMetadata = {\n name: 'Defly Web Wallet',\n icon: ICON\n }\n\n /**\n * Calls the \"enable\" method on the provider. This method will timeout after 3 minutes.\n * @returns {Promise<AVMWebProviderSDK.IEnableResult>} a promise that resolves to the result.\n * @protected\n * @throws {MethodCanceledError} if the method was cancelled by the user.\n * @throws {MethodNotSupportedError} if the method is not supported for the configured network.\n * @throws {MethodTimedOutError} if the method timed out by lack of response (>= 3 minutes).\n * @throws {NetworkNotSupportedError} if the network is not supported for the configured network.\n * @throws {UnknownError} if the response result is empty.\n */\n protected async _enable(): Promise<AVMWebProviderSDK.IEnableResult> {\n const {\n ARC0027MethodEnum,\n ARC0027MethodTimedOutError,\n ARC0027UnknownError,\n DEFAULT_REQUEST_TIMEOUT\n } = await this._initializeAVMWebProviderSDK()\n const avmWebClient = await this._initializeAVMWebClient()\n const genesisHash = await this._getGenesisHash()\n\n return new Promise<AVMWebProviderSDK.IEnableResult>((resolve, reject) => {\n const timerId = window.setTimeout(() => {\n // remove the listener\n avmWebClient.removeListener(listenerId)\n reject(\n new ARC0027MethodTimedOutError({\n method: ARC0027MethodEnum.Enable,\n message: `no response from provider \"${this.metadata.name}\"`,\n providerId: DEFLY_WEB_PROVIDER_ID\n })\n )\n }, DEFAULT_REQUEST_TIMEOUT)\n const listenerId = avmWebClient.onEnable(({ error, method, result }) => {\n // remove the listener, it is not needed\n avmWebClient.removeListener(listenerId)\n\n // remove the timeout\n window.clearTimeout(timerId)\n\n if (error) {\n return reject(error)\n }\n\n if (!result) {\n return reject(\n new ARC0027UnknownError({\n message: `received response, but \"${method}\" request details were empty for provider \"${this.metadata.name}\"`,\n providerId: DEFLY_WEB_PROVIDER_ID\n })\n )\n }\n\n return resolve(result)\n })\n\n // send the request\n avmWebClient.enable({\n genesisHash,\n providerId: DEFLY_WEB_PROVIDER_ID\n })\n })\n }\n\n /**\n * Calls the \"disable\" method on the provider. This method will timeout after 0.75 seconds.\n * @returns {Promise<AVMWebProviderSDK.IDisableResult>} a promise that resolves to the result.\n * @protected\n * @throws {MethodNotSupportedError} if the method is not supported for the configured network.\n * @throws {MethodTimedOutError} if the method timed out by lack of response (>= 3 minutes).\n * @throws {NetworkNotSupportedError} if the network is not supported for the configured network.\n * @throws {UnknownError} if the response result is empty.\n */\n protected async _disable(): Promise<AVMWebProviderSDK.IDisableResult> {\n const {\n ARC0027MethodEnum,\n ARC0027MethodTimedOutError,\n ARC0027UnknownError,\n LOWER_REQUEST_TIMEOUT\n } = await this._initializeAVMWebProviderSDK()\n const avmWebClient = await this._initializeAVMWebClient()\n const genesisHash = await this._getGenesisHash()\n\n return new Promise<AVMWebProviderSDK.IDisableResult>((resolve, reject) => {\n const timerId = window.setTimeout(() => {\n // remove the listener\n avmWebClient.removeListener(listenerId)\n reject(\n new ARC0027MethodTimedOutError({\n method: ARC0027MethodEnum.Disable,\n message: `no response from provider \"${this.metadata.name}\"`,\n providerId: DEFLY_WEB_PROVIDER_ID\n })\n )\n }, LOWER_REQUEST_TIMEOUT)\n const listenerId = avmWebClient.onDisable(({ error, method, result }) => {\n // remove the listener, it is not needed\n avmWebClient.removeListener(listenerId)\n\n // remove the timeout\n window.clearTimeout(timerId)\n\n if (error) {\n return reject(error)\n }\n\n if (!result) {\n return reject(\n new ARC0027UnknownError({\n message: `received response, but \"${method}\" request details were empty for provider \"${this.metadata.name}\"`,\n providerId: DEFLY_WEB_PROVIDER_ID\n })\n )\n }\n\n this.logger.debug('Disable successful', { result })\n return resolve(result)\n })\n\n this.logger.debug('Sending disable request...', { genesisHash })\n avmWebClient.disable({\n genesisHash,\n providerId: DEFLY_WEB_PROVIDER_ID\n })\n })\n }\n\n /**\n * Calls the \"signTransactions\" method to sign the supplied ARC-0001 transactions. This method will timeout after 3\n * minutes.\n * @returns {Promise<AVMWebProviderSDK.ISignTransactionsResult>} a promise that resolves to the result.\n * @protected\n * @throws {InvalidInputError} if computed group ID for the txns does not match the assigned group ID.\n * @throws {InvalidGroupIdError} if the unsigned txns is malformed or not conforming to ARC-0001.\n * @throws {MethodCanceledError} if the method was cancelled by the user.\n * @throws {MethodNotSupportedError} if the method is not supported for the configured network.\n * @throws {MethodTimedOutError} if the method timed out by lack of response (>= 3 minutes).\n * @throws {NetworkNotSupportedError} if the network is not supported for the configured network.\n * @throws {UnauthorizedSignerError} if a signer in the request is not authorized by the provider.\n * @throws {UnknownError} if the response result is empty.\n */\n protected async _signTransactions(\n txns: AVMWebProviderSDK.IARC0001Transaction[]\n ): Promise<AVMWebProviderSDK.ISignTransactionsResult> {\n const {\n ARC0027MethodEnum,\n ARC0027MethodTimedOutError,\n ARC0027UnknownError,\n DEFAULT_REQUEST_TIMEOUT\n } = await this._initializeAVMWebProviderSDK()\n const avmWebClient = await this._initializeAVMWebClient()\n\n return new Promise<AVMWebProviderSDK.ISignTransactionsResult>((resolve, reject) => {\n const timerId = window.setTimeout(() => {\n // remove the listener\n avmWebClient.removeListener(listenerId)\n reject(\n new ARC0027MethodTimedOutError({\n method: ARC0027MethodEnum.SignTransactions,\n message: `no response from provider \"${this.metadata.name}\"`,\n providerId: DEFLY_WEB_PROVIDER_ID\n })\n )\n }, DEFAULT_REQUEST_TIMEOUT)\n const listenerId = avmWebClient.onSignTransactions(({ error, method, result }) => {\n // remove the listener, it is not needed\n avmWebClient.removeListener(listenerId)\n\n // remove the timeout\n window.clearTimeout(timerId)\n\n if (error) {\n return reject(error)\n }\n\n if (!result) {\n return reject(\n new ARC0027UnknownError({\n message: `received response, but \"${method}\" request details were empty for provider \"${this.metadata.name}\"`,\n providerId: DEFLY_WEB_PROVIDER_ID\n })\n )\n }\n\n this.logger.debug('Sign transactions successful', { result })\n return resolve(result)\n })\n\n this.logger.debug('Sending sign transactions request...', { txns })\n avmWebClient.signTransactions({\n txns,\n providerId: DEFLY_WEB_PROVIDER_ID\n })\n })\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, type State } from 'src/store'\nimport {\n base64ToByteArray,\n byteArrayToBase64,\n flattenTxnGroup,\n isSignedTxn,\n isTransactionArray\n} from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type {\n WalletAccount,\n WalletConstructor,\n WalletId,\n WalletTransaction\n} from 'src/wallets/types'\n\n/** @see https://docs.exodus.com/api-reference/algorand-provider-arc-api/ */\n\ninterface EnableNetworkOpts {\n genesisID?: string\n genesisHash?: string\n}\n\ninterface EnableAccountsOpts {\n accounts?: string[]\n}\n\nexport type ExodusOptions = EnableNetworkOpts & EnableAccountsOpts\n\ninterface EnableNetworkResult {\n genesisID: string\n genesisHash: string\n}\n\ninterface EnableAccountsResult {\n accounts: string[]\n}\n\nexport type EnableResult = EnableNetworkResult & EnableAccountsResult\n\nexport type SignTxnsResult = (string | null)[]\n\nexport interface Exodus {\n isConnected: boolean\n address: string | null\n enable: (options?: ExodusOptions) => Promise<EnableResult>\n signTxns: (transactions: WalletTransaction[]) => Promise<SignTxnsResult>\n}\n\nexport type WindowExtended = { algorand: Exodus } & Window & typeof globalThis\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 300 300\" xmlns=\"http://www.w3.org/2000/svg\">\n <linearGradient id=\"grad1\" gradientUnits=\"userSpaceOnUse\" x1=\"246.603\" y1=\"9.2212\" x2=\"174.158\" y2=\"308.5426\" gradientTransform=\"matrix(1 0 0 -1 0 302)\">\n <stop offset=\"0\" stop-color=\"#0B46F9\" />\n <stop offset=\"1\" stop-color=\"#BBFBE0\" />\n </linearGradient>\n <path fill=\"url(#grad1)\" d=\"M274.7,93.9L166.6,23v39.6l69.4,45.1l-8.2,25.8h-61.2v32.9h61.2l8.2,25.8l-69.4,45.1V277l108.2-70.7L257,150.1L274.7,93.9z\" />\n \n <linearGradient id=\"grad2\" gradientUnits=\"userSpaceOnUse\" x1=\"129.3516\" y1=\"-19.1573\" x2=\"56.9066\" y2=\"280.1641\" gradientTransform=\"matrix(1 0 0 -1 0 302)\">\n <stop offset=\"0\" stop-color=\"#0B46F9\" />\n <stop offset=\"1\" stop-color=\"#BBFBE0\" />\n </linearGradient>\n <path fill=\"url(#grad2)\" d=\"M72.5,166.4h61v-32.9H72.2l-7.9-25.8l69.2-45.1V23L25.3,93.9L43,150.1l-17.7,56.2L133.7,277v-39.6l-69.4-45.1L72.5,166.4z\" />\n \n <mask id=\"mask1\" maskUnits=\"userSpaceOnUse\" x=\"25.4\" y=\"23\" width=\"247.6\" height=\"254\">\n <path fill=\"url(#grad1)\" d=\"M274.7,93.9L166.6,23v39.6l69.4,45.1l-8.2,25.8h-61.2v32.9h61.2l8.2,25.8l-69.4,45.1V277l108.2-70.7L257,150.1L274.7,93.9z\" />\n <path fill=\"url(#grad2)\" d=\"M72.5,166.4h61v-32.9H72.2l-7.9-25.8l69.2-45.1V23L25.3,93.9L43,150.1l-17.7,56.2L133.7,277v-39.6l-69.4-45.1L72.5,166.4z\" />\n </mask>\n \n <linearGradient id=\"grad3\" gradientUnits=\"userSpaceOnUse\" x1=\"46.4662\" y1=\"228.7554\" x2=\"171.8638\" y2=\"135.1039\" gradientTransform=\"matrix(1 0 0 -1 0 302)\">\n <stop offset=\"0.1198\" stop-color=\"#8952FF\" stop-opacity=\"0.87\" />\n <stop offset=\"1\" stop-color=\"#DABDFF\" stop-opacity=\"0\" />\n </linearGradient>\n <rect x=\"25.4\" y=\"23\" width=\"247.6\" height=\"254\" fill=\"url(#grad3)\" mask=\"url(#mask1)\" />\n</svg>\n`)}`\n\nexport class ExodusWallet extends BaseWallet {\n private client: Exodus | null = null\n private options: ExodusOptions\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options = {},\n metadata = {}\n }: WalletConstructor<WalletId.EXODUS>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n this.options = options\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Exodus',\n icon: ICON\n }\n\n private async initializeClient(): Promise<Exodus> {\n this.logger.info('Initializing client...')\n if (typeof window === 'undefined' || (window as WindowExtended).algorand === undefined) {\n this.logger.error('Exodus is not available.')\n throw new Error('Exodus is not available.')\n }\n const client = (window as WindowExtended).algorand\n this.client = client\n this.logger.info('Client initialized')\n return client\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n this.logger.info('Connecting...')\n const client = this.client || (await this.initializeClient())\n const { accounts } = await client.enable(this.options)\n\n if (accounts.length === 0) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n this.logger.info('✅ Connected.', walletState)\n return walletAccounts\n }\n\n public disconnect = async (): Promise<void> => {\n this.logger.info('Disconnecting...')\n this.onDisconnect()\n this.logger.info('Disconnected.')\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n this.logger.info('Resuming session...')\n const client = await this.initializeClient()\n\n if (!client.isConnected) {\n this.logger.error('Exodus is not connected.')\n throw new Error('Exodus is not connected.')\n }\n this.logger.info('Session resumed')\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n let txnsToSign: WalletTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n this.logger.debug('Sending processed transactions to wallet...', txnsToSign)\n\n // Sign transactions\n const signTxnsResult = await client.signTxns(txnsToSign)\n this.logger.debug('Received signed transactions from wallet', signTxnsResult)\n\n // Convert base64 to Uint8Array\n const result = signTxnsResult.map((value) => {\n if (value === null) {\n return null\n }\n return base64ToByteArray(value)\n })\n\n this.logger.debug('Transactions signed successfully', result)\n return result\n } catch (error: any) {\n this.logger.error('Error signing transactions:', error.message)\n throw error\n }\n }\n}\n","import { AVMProvider } from 'src/wallets/avm-web-provider'\nimport { WalletId, type WalletConstructor } from 'src/wallets/types'\nimport type AVMWebProviderSDK from '@agoralabs-sh/avm-web-provider'\n\nexport const KIBISIS_AVM_WEB_PROVIDER_ID = 'f6d1c86b-4493-42fb-b88d-a62407b4cdf6'\n\nexport const ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 480 480\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect fill=\"#801C96\" width=\"480\" height=\"480\" />\n <path fill=\"#FFFFFF\" d=\"M393.5,223.2c0-7.3-0.6-14.6-1.6-21.6c-0.9-6.5-2.3-12.8-4-18.9c-18-64.9-77.4-112.5-148-112.5c-70.6,0-130,47.6-148,112.5c-1.7,6.2-3,12.5-4,19c-1,7.1-1.6,14.3-1.6,21.6h0v85.5h19.7v-85.5c0-7.2,0.6-14.4,1.8-21.4c14,1.1,27.6,4.3,40.5,9.5c15.9,6.4,30.3,15.6,42.6,27.3c12.3,11.7,22,25.4,28.7,40.6c6.9,15.6,10.5,32.2,10.5,49.2v81.4h0.1h19.6h0.1v-81.5c0.1-17.1,3.6-33.7,10.5-49.2c6.7-15.2,16.4-28.8,28.7-40.6c4.2-4,8.6-7.7,13.2-11.1v132.2h19.7V223.2h0c0-2.5-0.1-5-0.4-7.4c3.3-1.6,6.6-3.1,10-4.5c12.9-5.2,26.4-8.4,40.4-9.5c1.2,7,1.7,14.2,1.8,21.4v85.5h19.7L393.5,223.2L393.5,223.2z M240.1,277.3c-11.6-29.3-32.7-54.1-59.8-71c2.9-10,8.2-19.1,15.8-26.6c11.8-11.8,27.4-18.2,44-18.2s32.3,6.5,44,18.2c4.1,4.1,7.5,8.7,10.3,13.6c5.6-3.4,11.4-6.4,17.4-9.2c-14-25.2-40.9-42.3-71.8-42.3c-35.9,0-66.3,23-77.5,55.1c-15.5-7.1-32.5-11.8-50.4-13.5c1.3-4,2.7-7.9,4.3-11.8c6.7-15.9,16.4-30.3,28.7-42.6s26.6-22,42.6-28.7c16.5-7,34-10.5,52.1-10.5s35.6,3.5,52.1,10.5c15.9,6.7,30.3,16.4,42.6,28.7s22,26.6,28.7,42.6c1.6,3.9,3.1,7.8,4.3,11.8C309,189.2,260.1,226.5,240.1,277.3z\" />\n <path fill=\"#FFFFFF\" d=\"M158.1,359.8h19.7V245.5c-6.1-5.4-12.7-10-19.7-14V359.8z\" />\n</svg>\n`)}`\n\nexport class KibisisWallet extends AVMProvider {\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n metadata = {}\n }: WalletConstructor<WalletId.KIBISIS>) {\n super({\n id,\n metadata,\n getAlgodClient,\n store,\n subscribe,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n }\n\n static defaultMetadata = {\n name: 'Kibisis',\n icon: ICON\n }\n\n /**\n * Calls the \"enable\" method on the provider. This method will timeout after 3 minutes.\n * @returns {Promise<AVMWebProviderSDK.IEnableResult>} a promise that resolves to the result.\n * @protected\n * @throws {MethodCanceledError} if the method was cancelled by the user.\n * @throws {MethodNotSupportedError} if the method is not supported for the configured network.\n * @throws {MethodTimedOutError} if the method timed out by lack of response (>= 3 minutes).\n * @throws {NetworkNotSupportedError} if the network is not supported for the configured network.\n * @throws {UnknownError} if the response result is empty.\n */\n protected async _enable(): Promise<AVMWebProviderSDK.IEnableResult> {\n const {\n ARC0027MethodEnum,\n ARC0027MethodTimedOutError,\n ARC0027UnknownError,\n DEFAULT_REQUEST_TIMEOUT\n } = await this._initializeAVMWebProviderSDK()\n const avmWebClient = await this._initializeAVMWebClient()\n const genesisHash = await this._getGenesisHash()\n\n return new Promise<AVMWebProviderSDK.IEnableResult>((resolve, reject) => {\n const timerId = window.setTimeout(() => {\n // remove the listener\n avmWebClient.removeListener(listenerId)\n reject(\n new ARC0027MethodTimedOutError({\n method: ARC0027MethodEnum.Enable,\n message: `no response from provider \"${this.metadata.name}\"`,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n )\n }, DEFAULT_REQUEST_TIMEOUT)\n const listenerId = avmWebClient.onEnable(({ error, method, result }) => {\n // remove the listener, it is not needed\n avmWebClient.removeListener(listenerId)\n\n // remove the timeout\n window.clearTimeout(timerId)\n\n if (error) {\n return reject(error)\n }\n\n if (!result) {\n return reject(\n new ARC0027UnknownError({\n message: `received response, but \"${method}\" request details were empty for provider \"${this.metadata.name}\"`,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n )\n }\n\n return resolve(result)\n })\n\n // send the request\n avmWebClient.enable({\n genesisHash,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n })\n }\n\n /**\n * Calls the \"disable\" method on the provider. This method will timeout after 0.75 seconds.\n * @returns {Promise<AVMWebProviderSDK.IDisableResult>} a promise that resolves to the result.\n * @protected\n * @throws {MethodNotSupportedError} if the method is not supported for the configured network.\n * @throws {MethodTimedOutError} if the method timed out by lack of response (>= 3 minutes).\n * @throws {NetworkNotSupportedError} if the network is not supported for the configured network.\n * @throws {UnknownError} if the response result is empty.\n */\n protected async _disable(): Promise<AVMWebProviderSDK.IDisableResult> {\n const {\n ARC0027MethodEnum,\n ARC0027MethodTimedOutError,\n ARC0027UnknownError,\n LOWER_REQUEST_TIMEOUT\n } = await this._initializeAVMWebProviderSDK()\n const avmWebClient = await this._initializeAVMWebClient()\n const genesisHash = await this._getGenesisHash()\n\n return new Promise<AVMWebProviderSDK.IDisableResult>((resolve, reject) => {\n const timerId = window.setTimeout(() => {\n // remove the listener\n avmWebClient.removeListener(listenerId)\n reject(\n new ARC0027MethodTimedOutError({\n method: ARC0027MethodEnum.Disable,\n message: `no response from provider \"${this.metadata.name}\"`,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n )\n }, LOWER_REQUEST_TIMEOUT)\n const listenerId = avmWebClient.onDisable(({ error, method, result }) => {\n // remove the listener, it is not needed\n avmWebClient.removeListener(listenerId)\n\n // remove the timeout\n window.clearTimeout(timerId)\n\n if (error) {\n return reject(error)\n }\n\n if (!result) {\n return reject(\n new ARC0027UnknownError({\n message: `received response, but \"${method}\" request details were empty for provider \"${this.metadata.name}\"`,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n )\n }\n\n this.logger.debug('Disable successful', { result })\n return resolve(result)\n })\n\n this.logger.debug('Sending disable request...', { genesisHash })\n avmWebClient.disable({\n genesisHash,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n })\n }\n\n /**\n * Calls the \"signTransactions\" method to sign the supplied ARC-0001 transactions. This method will timeout after 3\n * minutes.\n * @returns {Promise<AVMWebProviderSDK.ISignTransactionsResult>} a promise that resolves to the result.\n * @protected\n * @throws {InvalidInputError} if computed group ID for the txns does not match the assigned group ID.\n * @throws {InvalidGroupIdError} if the unsigned txns is malformed or not conforming to ARC-0001.\n * @throws {MethodCanceledError} if the method was cancelled by the user.\n * @throws {MethodNotSupportedError} if the method is not supported for the configured network.\n * @throws {MethodTimedOutError} if the method timed out by lack of response (>= 3 minutes).\n * @throws {NetworkNotSupportedError} if the network is not supported for the configured network.\n * @throws {UnauthorizedSignerError} if a signer in the request is not authorized by the provider.\n * @throws {UnknownError} if the response result is empty.\n */\n protected async _signTransactions(\n txns: AVMWebProviderSDK.IARC0001Transaction[]\n ): Promise<AVMWebProviderSDK.ISignTransactionsResult> {\n const {\n ARC0027MethodEnum,\n ARC0027MethodTimedOutError,\n ARC0027UnknownError,\n DEFAULT_REQUEST_TIMEOUT\n } = await this._initializeAVMWebProviderSDK()\n const avmWebClient = await this._initializeAVMWebClient()\n\n return new Promise<AVMWebProviderSDK.ISignTransactionsResult>((resolve, reject) => {\n const timerId = window.setTimeout(() => {\n // remove the listener\n avmWebClient.removeListener(listenerId)\n reject(\n new ARC0027MethodTimedOutError({\n method: ARC0027MethodEnum.SignTransactions,\n message: `no response from provider \"${this.metadata.name}\"`,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n )\n }, DEFAULT_REQUEST_TIMEOUT)\n const listenerId = avmWebClient.onSignTransactions(({ error, method, result }) => {\n // remove the listener, it is not needed\n avmWebClient.removeListener(listenerId)\n\n // remove the timeout\n window.clearTimeout(timerId)\n\n if (error) {\n return reject(error)\n }\n\n if (!result) {\n return reject(\n new ARC0027UnknownError({\n message: `received response, but \"${method}\" request details were empty for provider \"${this.metadata.name}\"`,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n )\n }\n\n this.logger.debug('Sign transactions successful', { result })\n return resolve(result)\n })\n\n this.logger.debug('Sending sign transactions request...', { txns })\n avmWebClient.signTransactions({\n txns,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n })\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, type State } from 'src/store'\nimport { flattenTxnGroup, isSignedTxn, isTransactionArray } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type { WalletAccount, WalletConstructor, WalletId } from 'src/wallets/types'\n\ninterface KmdConstructor {\n token: string | algosdk.KMDTokenHeader | algosdk.CustomTokenHeader\n baseServer?: string\n port?: string | number\n headers?: Record<string, string>\n promptForPassword: () => Promise<string>\n}\n\nexport type KmdOptions = Partial<Pick<KmdConstructor, 'token' | 'promptForPassword'>> &\n Omit<KmdConstructor, 'token' | 'promptForPassword'> & {\n wallet?: string\n }\n\ninterface KmdWalletRecord {\n id: string\n name: string\n driver_name?: string\n driver_version?: number\n mnemonic_ux?: boolean\n supported_txs?: Array<any>\n}\n\ninterface ListWalletsResponse {\n wallets: KmdWalletRecord[]\n message?: string\n error?: boolean\n}\n\ninterface InitWalletHandleResponse {\n wallet_handle_token: string\n message?: string\n error?: boolean\n}\n\ninterface ListKeysResponse {\n addresses: string[]\n message?: string\n error?: boolean\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 400 400\" xmlns=\"http://www.w3.org/2000/svg\">\n <linearGradient id=\"algokitGradient\" gradientUnits=\"userSpaceOnUse\" x1=\"0\" y1=\"400\" x2=\"400\" y2=\"0\">\n <stop offset=\"0\" style=\"stop-color:#31D8EE\"/>\n <stop offset=\"1\" style=\"stop-color:#01DC94\"/>\n </linearGradient>\n <rect fill=\"url(#algokitGradient)\" width=\"400\" height=\"400\" />\n <path fill=\"#FFFFFF\" d=\"M309.2,309.3H275l-22.2-82.7l-47.9,82.7h-38.3l73.9-128l-11.9-44.5l-99.6,172.6H90.8L217.1,90.6 h33.5l14.7,54.3h34.6l-23.6,41L309.2,309.3z\" />\n</svg>\n`)}`\n\nexport class KmdWallet extends BaseWallet {\n private client: algosdk.Kmd | null = null\n private options: KmdConstructor\n private walletName: string\n private walletId: string = ''\n private password: string | null = null\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options,\n metadata = {}\n }: WalletConstructor<WalletId.KMD>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n\n const {\n token = 'a'.repeat(64),\n baseServer = 'http://127.0.0.1',\n port = 4002,\n wallet = 'unencrypted-default-wallet',\n promptForPassword = () => Promise.resolve(prompt('KMD password') || '')\n } = options || {}\n\n this.options = { token, baseServer, port, promptForPassword }\n this.walletName = wallet\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'KMD',\n icon: ICON\n }\n\n private async initializeClient(): Promise<algosdk.Kmd> {\n this.logger.info('Initializing client...')\n const { token, baseServer, port } = this.options\n const client = new algosdk.Kmd(token, baseServer, port)\n this.client = client\n this.logger.info('Client initialized')\n return client\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n this.logger.info('Connecting...')\n if (!this.client) {\n await this.initializeClient()\n }\n\n try {\n // Get token and fetch accounts\n const token = await this.fetchToken()\n const accounts = await this.fetchAccounts(token)\n\n if (accounts.length === 0) {\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n // Release token\n await this.releaseToken(token)\n\n this.logger.info('✅ Connected.', walletState)\n return walletAccounts\n } catch (error: any) {\n this.logger.error('Error connecting:', error.message)\n throw error\n }\n }\n\n public disconnect = async (): Promise<void> => {\n this.logger.info('Disconnecting...')\n this.onDisconnect()\n this.logger.info('Disconnected.')\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n this.logger.info('Resuming session...')\n await this.initializeClient()\n this.logger.info('Session resumed')\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): algosdk.Transaction[] {\n const txnsToSign: algosdk.Transaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push(txn)\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): algosdk.Transaction[] {\n const txnsToSign: algosdk.Transaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push(txn)\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n let txnsToSign: algosdk.Transaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n // Get token and password\n const token = await this.fetchToken()\n const password = await this.getPassword()\n\n const client = this.client || (await this.initializeClient())\n\n this.logger.debug('Sending processed transactions to wallet...', txnsToSign)\n\n // Sign transactions\n const signedTxns = await Promise.all(\n txnsToSign.map((txn) => client.signTransaction(token, password, txn))\n )\n\n this.logger.debug('Received signed transactions from wallet', signedTxns)\n\n // Release token\n await this.releaseToken(token)\n\n this.logger.debug('Transactions signed successfully', signedTxns)\n return signedTxns\n } catch (error: any) {\n this.logger.error('Error signing transactions:', error.message)\n throw error\n }\n }\n\n private async fetchWalletId(): Promise<string> {\n this.logger.debug('Fetching wallet data...', { walletName: this.walletName })\n const client = this.client || (await this.initializeClient())\n\n const { wallets }: ListWalletsResponse = await client.listWallets()\n const wallet = wallets.find((wallet: KmdWalletRecord) => wallet.name === this.walletName)\n\n if (!wallet) {\n this.logger.error(`Wallet \"${this.walletName}\" not found!`)\n throw new Error(`Wallet \"${this.walletName}\" not found!`)\n }\n\n this.walletId = wallet.id\n this.logger.debug('Wallet data fetched successfully', { walletId: this.walletId })\n return wallet.id\n }\n\n private async fetchToken(): Promise<string> {\n this.logger.debug('Fetching token...', { walletId: this.walletId })\n const client = this.client || (await this.initializeClient())\n\n const walletId = this.walletId || (await this.fetchWalletId())\n const password = await this.getPassword()\n\n const { wallet_handle_token }: InitWalletHandleResponse = await client.initWalletHandle(\n walletId,\n password\n )\n this.logger.debug('Token fetched successfully')\n return wallet_handle_token\n }\n\n private async releaseToken(token: string): Promise<void> {\n this.logger.debug('Releasing token...')\n const client = this.client || (await this.initializeClient())\n await client.releaseWalletHandle(token)\n this.logger.debug('Token released successfully')\n }\n\n private async getPassword(): Promise<string> {\n if (this.password !== null) {\n return this.password\n }\n const password = await this.options.promptForPassword()\n this.password = password\n return password\n }\n\n private async fetchAccounts(token: string): Promise<string[]> {\n this.logger.debug('Fetching accounts...')\n const client = this.client || (await this.initializeClient())\n const { addresses }: ListKeysResponse = await client.listKeys(token)\n this.logger.debug('Accounts fetched successfully', { addresses })\n return addresses\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, type State } from 'src/store'\nimport { byteArrayToBase64, flattenTxnGroup, isSignedTxn, isTransactionArray } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type LuteConnect from 'lute-connect'\nimport {\n SignDataError as ISignDataError,\n type SignTxnsError as ISignTxnsError,\n type WalletTransaction\n} from 'lute-connect'\nimport {\n SignDataError,\n SignDataResponse,\n SignMetadata,\n SignTxnsError,\n type WalletAccount,\n type WalletConstructor,\n type WalletId\n} from 'src/wallets/types'\n\nexport interface LuteConnectOptions {\n siteName?: string\n}\n\nfunction isSignTxnsError(error: any): error is ISignTxnsError {\n return error instanceof Error && 'code' in error\n}\n\nfunction isSignDataError(error: any): error is ISignDataError {\n return error instanceof Error && 'code' in error\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 400 400\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill=\"#AB47BC\" d=\"M283.7,263.6c-0.6,0-1.3-0.1-1.8-0.4c-0.6-0.3-1.1-0.8-1.5-1.3c-0.4-0.6-0.7-1.3-0.8-2 c-0.1-0.8-0.1-1.7,0.1-2.5c0.2-0.9,0.6-1.8,1.2-2.6c0.6-0.8,1.4-1.7,2.2-2.3c0.9-0.7,2.1-1.2,3.2-1.6c1.2-0.4,2.7-0.5,4-0.5 c1.4,0,3,0.3,4.4,0.8c1.5,0.5,3.1,1.4,4.3,2.3c1.4,1,2.8,2.4,3.8,3.7c1.1,1.5,2.1,3.3,2.8,5.1c0.7,1.9,1.2,4.1,1.3,6.1 c0.2,2.1,0,4.6-0.4,6.7c-0.5,2.2-1.4,4.7-2.4,6.7c-1.1,2.1-2.8,4.4-4.4,6.2c-1.8,1.9-4.1,3.7-6.3,5c-2.3,1.4-5.2,2.6-7.9,3.3 c-2.8,0.7-6.1,1.1-8.9,1.1c-3,0-6.5-0.6-9.3-1.4c-3-0.9-6.4-2.4-9.1-4c-2.8-1.7-5.8-4.2-8-6.6c-2.3-2.5-4.6-5.8-6.2-8.9 c-1.7-3.2-3.1-7.1-3.8-10.7c-0.8-3.7-1.1-8-0.9-11.8c0.2-3.9,1.1-8.3,2.3-12c1.3-3.8,3.4-8.1,5.7-11.4c2.3-3.5,5.6-7.1,8.8-9.9 c3.3-2.8,7.5-5.6,11.5-7.5c4.1-1.9,9-3.5,13.5-4.3c4.6-0.8,10-1.1,14.6-0.7c4.8,0.4,10.2,1.6,14.7,3.3c4.7,1.7,9.7,4.4,13.8,7.3 c4.2,3,8.5,7,11.7,10.9c3.3,4.1,6.5,9.2,8.7,14c2.2,4.9,4,10.9,4.9,16.3c0.9,5.5,1,11.9,0.4,17.5c-0.6,5.7-2.2,12.1-4.3,17.4 c-2.1,5.5-5.4,11.4-8.9,16.1c-3.6,4.8-8.4,9.8-13.1,13.6c-4.8,3.8-11,7.5-16.6,9.9c-5.8,2.5-12.8,4.5-19.1,5.4 c-6.4,0.9-13.9,1-20.3,0.2c-6.6-0.8-14-2.7-20.1-5.2c-6.3-2.5-13.1-6.4-18.5-10.5c-5.5-4.2-11.2-9.8-15.4-15.3 c-4.3-5.6-8.4-12.7-11.2-19.2c-2.8-6.7-4.9-14.7-5.9-21.9c-0.9-5.9-2.8-12.6-5.2-18.1c-2.3-5.4-5.9-11.2-9.5-15.8 c-3.6-4.5-8.3-9-13-12.4c-4.5-3.3-10.1-6.4-15.3-8.3c-5-1.9-11.1-3.4-16.5-3.9c-5.2-0.5-11.3-0.3-16.5,0.5c-5,0.8-10.7,2.6-15.3,4.7 c-4.5,2.1-9.4,5.1-13.2,8.3c-3.7,3.1-7.5,7.2-10.2,11.1c-2.7,3.8-5.2,8.6-6.7,13c-1.5,4.2-2.6,9.3-3,13.8c-0.3,4.3-0.1,9.4,0.7,13.7 c0.8,4.1,2.3,8.8,4.2,12.5c1.8,3.6,4.4,7.6,7.1,10.6c2.6,2.9,6,5.9,9.3,8.1c3.1,2.1,7.1,4,10.6,5.1c3.4,1.1,7.5,1.9,11.1,2 c3.5,0.2,7.4-0.2,10.8-1c3.2-0.7,6.8-2.1,9.7-3.6c2.8-1.5,5.7-3.6,8-5.8c2.2-2.1,4.3-4.8,5.9-7.4c1.5-2.5,2.8-5.5,3.5-8.3 c0.7-2.6,1.1-5.7,1.1-8.5c0-2.6-0.5-5.5-1.2-8c-0.7-2.3-1.8-4.9-3.1-6.9c-1.2-1.9-2.9-3.9-4.6-5.4c-1.6-1.4-3.6-2.8-5.5-3.7 c-1.8-0.9-4-1.6-5.9-1.9c-1.8-0.3-3.9-0.4-5.8-0.1c-1.7,0.2-3.6,0.7-5.1,1.4c-1.4,0.6-2.9,1.6-4.1,2.6c-1.1,0.9-2.1,2.2-2.9,3.4 c-0.7,1.1-1.2,2.5-1.5,3.7c-0.3,1.1-0.4,2.4-0.3,3.6c0.1,1,0.4,2.2,0.8,3.1c0.4,0.8,1,1.7,1.6,2.3c0.6,0.5,1.3,1,2.1,1.3 c0.6,0.2,1.5,0.4,2.1,0.3c0.6-0.1,1.3-0.3,1.8-0.6c0.5-0.3,1-0.8,1.2-1.4c0.3-0.5,0.7-1,1.2-1.4c0.5-0.3,1.2-0.6,1.8-0.6 c0.7-0.1,1.5,0.1,2.1,0.3c0.7,0.3,1.5,0.8,2.1,1.3c0.6,0.6,1.3,1.5,1.6,2.3c0.4,0.9,0.7,2.1,0.8,3.1c0.1,1.1,0,2.5-0.3,3.6 c-0.3,1.2-0.9,2.6-1.5,3.7c-0.7,1.2-1.8,2.4-2.9,3.4c-1.2,1-2.7,2-4.1,2.6c-1.5,0.7-3.4,1.2-5.1,1.4c-1.8,0.2-4,0.2-5.8-0.1 c-2-0.3-4.1-1-5.9-1.9c-1.9-0.9-4-2.3-5.5-3.7c-1.7-1.5-3.4-3.5-4.6-5.4c-1.3-2-2.4-4.6-3.1-6.9c-0.7-2.5-1.2-5.4-1.2-8 c0-2.7,0.4-5.8,1.1-8.5c0.7-2.8,2-5.8,3.5-8.3c1.5-2.6,3.7-5.3,5.9-7.4c2.3-2.2,5.2-4.3,8-5.8c2.9-1.6,6.5-2.9,9.7-3.6 c3.4-0.8,7.4-1.1,10.8-1c3.6,0.2,7.7,0.9,11.1,2c3.6,1.2,7.5,3.1,10.6,5.1c3.3,2.1,6.7,5.1,9.3,8.1c2.7,3,5.3,7,7.1,10.6 c1.8,3.8,3.4,8.4,4.2,12.5c0.8,4.3,1.1,9.3,0.7,13.7c-0.4,4.5-1.5,9.6-3,13.8c-1.6,4.4-4.1,9.2-6.7,13c-2.8,3.9-6.5,8-10.2,11.1 c-3.8,3.2-8.7,6.2-13.2,8.3c-4.6,2.1-10.3,3.8-15.3,4.7c-5.2,0.9-11.3,1-16.5,0.5c-5.4-0.5-11.5-2-16.5-3.9 c-5.2-2-10.8-5.1-15.3-8.3c-4.6-3.4-9.4-7.9-13-12.4c-3.7-4.6-7.2-10.4-9.5-15.8c-2.4-5.5-4.3-12.2-5.2-18.1 c-0.9-6.1-1-13.2-0.3-19.3c0.7-6.3,2.5-13.4,4.9-19.2c2.4-6,6.1-12.5,10-17.7c4-5.3,9.3-10.7,14.6-14.8c5.3-4.2,12.1-8.1,18.3-10.7 c6.4-2.7,14.1-4.8,21-5.7c7-1,15.2-1,22.2-0.1c7.2,0.9,15.2,3.1,21.9,5.8c5.6,2.2,12.3,3.9,18.3,4.6c5.8,0.7,12.6,0.5,18.4-0.4 c5.6-0.9,12-2.7,17.2-5c5.1-2.3,10.6-5.6,14.9-9.1c4.2-3.4,8.5-8,11.7-12.3c3.1-4.3,6-9.6,7.8-14.5c1.8-4.8,3.1-10.5,3.6-15.6 c0.5-4.9,0.3-10.7-0.6-15.6c-0.8-4.7-2.5-10.1-4.5-14.4c-2-4.2-4.9-8.8-7.9-12.3c-2.9-3.4-6.8-6.9-10.5-9.5 c-3.6-2.5-8.1-4.8-12.2-6.2c-4-1.4-8.7-2.4-12.9-2.7c-4-0.3-8.7,0-12.7,0.8c-3.8,0.8-8.1,2.2-11.6,4c-3.4,1.7-7,4.1-9.7,6.6 c-2.7,2.4-5.4,5.6-7.3,8.6c-1.9,2.9-3.6,6.5-4.6,9.8c-1,3.2-1.6,6.9-1.7,10.2c-0.1,3.2,0.3,6.8,1,9.9c0.7,2.9,2,6.2,3.5,8.8 c1.4,2.5,3.4,5.1,5.4,7.2c1.9,1.9,4.4,3.8,6.8,5.2c2.2,1.3,5,2.4,7.5,3c2.3,0.6,5.1,0.9,7.6,0.8c2.3-0.1,4.9-0.5,7-1.3 c2-0.7,4.2-1.7,6-2.9c1.6-1.1,3.3-2.7,4.6-4.2c1.2-1.4,2.3-3.2,3-4.9c0.7-1.6,1.2-3.5,1.3-5.1c0.2-1.5,0.1-3.3-0.2-4.9 c-0.3-1.4-0.8-2.9-1.5-4.2c-0.6-1.1-1.5-2.3-2.4-3.2c-0.8-0.8-1.9-1.5-3-2c-0.9-0.4-2.1-0.7-3.1-0.8c-0.9-0.1-1.9,0-2.8,0.3 c-0.7,0.2-1.6,0.6-2.2,1.1c-0.5,0.4-1,1.1-1.3,1.7c-0.3,0.6-0.4,1.3-0.4,1.9c0,0.6,0.2,1.2,0.6,1.7c0.3,0.5,0.5,1.2,0.6,1.7 c0,0.6-0.1,1.3-0.4,1.9c-0.3,0.6-0.8,1.3-1.3,1.7c-0.6,0.5-1.4,0.9-2.2,1.1c-0.9,0.3-1.9,0.3-2.8,0.3c-1-0.1-2.2-0.4-3.1-0.8 c-1-0.5-2.1-1.2-3-2c-0.9-0.9-1.8-2.1-2.4-3.2c-0.7-1.2-1.2-2.8-1.5-4.2c-0.3-1.5-0.4-3.3-0.2-4.9c0.2-1.7,0.7-3.6,1.3-5.1 c0.7-1.7,1.8-3.5,3-4.9c1.3-1.5,3-3.1,4.6-4.2c1.8-1.2,4-2.3,6-2.9c2.2-0.7,4.8-1.2,7-1.3c2.4-0.1,5.2,0.2,7.6,0.8 c2.5,0.6,5.3,1.7,7.5,3c2.4,1.3,4.9,3.2,6.8,5.2c2,2,4,4.7,5.4,7.2c1.5,2.6,2.7,5.9,3.5,8.8c0.8,3.1,1.1,6.7,1,9.9 c-0.1,3.3-0.7,7.1-1.7,10.2c-1,3.3-2.7,6.9-4.6,9.8c-1.9,3-4.7,6.2-7.3,8.6c-2.8,2.5-6.4,5-9.7,6.6c-3.5,1.8-7.8,3.2-11.6,4 c-4,0.8-8.7,1.1-12.7,0.8c-4.2-0.3-9-1.3-12.9-2.7c-4.1-1.4-8.6-3.7-12.2-6.2c-3.7-2.6-7.6-6.1-10.5-9.5c-3-3.6-5.9-8.1-7.9-12.3 c-2-4.4-3.7-9.7-4.5-14.4c-0.8-4.9-1.1-10.6-0.6-15.6c0.5-5.1,1.8-10.8,3.6-15.6c1.8-4.9,4.7-10.3,7.8-14.5 c3.2-4.4,7.5-8.9,11.7-12.3c4.3-3.5,9.8-6.9,14.9-9.1c5.2-2.3,11.6-4.2,17.2-5c5.8-0.9,12.6-1,18.4-0.4c6,0.7,12.7,2.4,18.3,4.6 c5.7,2.3,12,5.7,16.9,9.4c5.1,3.8,10.3,8.9,14.2,13.8c4,5.1,7.8,11.5,10.3,17.5c2.6,6.1,4.6,13.5,5.5,20c0.9,6.7,1,14.5,0.1,21.2 c-0.9,6.9-2.9,14.6-5.5,21c-2.7,6.5-6.8,13.6-11,19.3c-4.4,5.7-10.3,11.7-16,16c-4.7,3.7-9.5,8.7-13.1,13.6 c-3.5,4.7-6.8,10.7-8.9,16.1c-2.1,5.3-3.6,11.7-4.3,17.4c-0.6,5.5-0.4,12,0.4,17.5c0.9,5.3,2.6,11.3,4.9,16.3c2.2,4.8,5.4,10,8.7,14 c3.2,3.9,7.6,8,11.7,10.9c4,2.9,9.1,5.6,13.8,7.3c4.5,1.7,9.9,2.9,14.7,3.3c4.6,0.4,10,0.2,14.6-0.7c4.4-0.8,9.4-2.4,13.5-4.3 c3.9-1.9,8.2-4.6,11.5-7.5c3.2-2.7,6.4-6.4,8.8-9.9c2.3-3.4,4.4-7.6,5.7-11.4c1.2-3.7,2.1-8.1,2.3-12c0.2-3.7-0.1-8.1-0.9-11.8 c-0.8-3.5-2.2-7.5-3.8-10.7c-1.6-3.1-3.9-6.3-6.2-8.9c-2.2-2.4-5.2-4.9-8-6.6c-2.7-1.7-6-3.2-9.1-4c-2.9-0.8-6.3-1.4-9.3-1.4 c-2.9,0-6.2,0.4-8.9,1.1c-2.6,0.7-5.5,1.9-7.9,3.3c-2.2,1.3-4.5,3.2-6.3,5c-1.7,1.8-3.3,4-4.4,6.2c-1.1,2-2,4.5-2.4,6.7 c-0.4,2.1-0.6,4.5-0.4,6.7c0.2,2,0.6,4.2,1.3,6.1c0.6,1.7,1.7,3.6,2.8,5.1c1,1.3,2.4,2.7,3.8,3.7c1.3,0.9,2.8,1.8,4.3,2.3 c1.3,0.5,2.9,0.8,4.4,0.8c1.3,0,2.7-0.1,4-0.5c1.1-0.3,2.3-0.9,3.2-1.6c0.8-0.6,1.7-1.4,2.2-2.3c0.5-0.7,0.9-1.7,1.2-2.6 c0.2-0.8,0.2-1.7,0.1-2.5c-0.1-0.7-0.4-1.4-0.8-2c-0.4-0.5-0.9-1-1.5-1.3C285,263.7,284.3,263.6,283.7,263.6L283.7,263.6z\" />\n</svg>\n`)}`\n\nexport class LuteWallet extends BaseWallet {\n private client: LuteConnect | null = null\n private options: LuteConnectOptions\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options = {},\n metadata = {}\n }: WalletConstructor<WalletId.LUTE>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n this.options = options\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Lute',\n icon: ICON\n }\n\n private async initializeClient(): Promise<LuteConnect> {\n this.logger.info('Initializing client...')\n const module = await import('lute-connect')\n const LuteConnect = module.default\n\n const client = new LuteConnect(this.options?.siteName)\n this.client = client\n this.logger.info('Client initialized')\n return client\n }\n\n private async getGenesisId(): Promise<string> {\n const network = this.activeNetworkConfig\n if (network.genesisId) {\n return network.genesisId\n }\n\n const algodClient = this.getAlgodClient()\n const genesisStr = await algodClient.genesis().do()\n const genesis = algosdk.parseJSON(genesisStr, {\n intDecoding: algosdk.IntDecoding.MIXED\n })\n return `${genesis.network}-${genesis.id}`\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n this.logger.info('Connecting...')\n const client = this.client || (await this.initializeClient())\n const genesisId = await this.getGenesisId()\n const accounts = await client.connect(genesisId)\n\n if (accounts.length === 0) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n this.logger.info('Connected successfully', walletState)\n return walletAccounts\n }\n\n public disconnect = async (): Promise<void> => {\n this.onDisconnect()\n this.logger.info('Disconnected')\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n this.logger.info('Resuming session...')\n await this.initializeClient()\n this.logger.info('Session resumed successfully')\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n let txnsToSign: WalletTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n this.logger.debug('Sending processed transactions to wallet...', txnsToSign)\n\n // Sign transactions\n const signTxnsResult = await client.signTxns(txnsToSign)\n\n this.logger.debug('Transactions signed successfully', signTxnsResult)\n return signTxnsResult\n } catch (error) {\n if (isSignTxnsError(error)) {\n this.logger.error('Error signing transactions:', error.message, `(code: ${error.code})`)\n throw new SignTxnsError(error.message, error.code)\n }\n this.logger.error('Unknown error signing transactions:', error)\n throw error\n }\n }\n\n public canSignData = true\n\n public signData = async (data: string, metadata: SignMetadata): Promise<SignDataResponse> => {\n try {\n this.logger.debug('Signing data...', { data, metadata })\n\n const client = this.client || (await this.initializeClient())\n\n // Sign data\n const signDataResult = await client.signData(data, metadata)\n\n this.logger.debug('Data signed successfully', signDataResult)\n return signDataResult\n } catch (error) {\n if (isSignDataError(error)) {\n this.logger.error('Error signing data:', error.message, `(code: ${error.code})`)\n throw new SignDataError(error.message, error.code)\n }\n this.logger.error('Unknown error signing data:', error)\n throw error\n }\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, setAccounts, type State } from 'src/store'\nimport {\n base64ToByteArray,\n byteArrayToBase64,\n flattenTxnGroup,\n isSignedTxn,\n isTransactionArray\n} from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type { InstanceWithExtensions, SDKBase } from '@magic-sdk/provider'\nimport type { AlgorandExtension } from '@magic-ext/algorand'\nimport type { MagicUserMetadata } from 'magic-sdk'\nimport type {\n WalletAccount,\n WalletConstructor,\n WalletId,\n WalletTransaction\n} from 'src/wallets/types'\n\n/** @see https://magic.link/docs/blockchains/other-chains/other/algorand */\n\nexport interface MagicAuthOptions {\n apiKey?: string\n}\n\nexport type MagicAuthClient = InstanceWithExtensions<\n SDKBase,\n {\n algorand: AlgorandExtension\n }\n>\n\n// @todo: export after switching to namespace exports (collides with Exodus.SignTxnsResult)\ntype SignTxnsResult = (string | undefined)[]\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 47 47\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill=\"#6851FF\" d=\"M 23.960861 1.80769 C 25.835077 4.103153 27.902216 6.23489 30.137539 8.178169 C 28.647968 13.009323 27.846092 18.142094 27.846092 23.462154 C 27.846092 28.782307 28.648062 33.915169 30.13763 38.746368 C 27.902216 40.689724 25.835077 42.821476 23.960861 45.116985 C 22.086554 42.821476 20.019415 40.689632 17.783998 38.746368 C 19.273476 33.915169 20.075445 28.7824 20.075445 23.462337 C 20.075445 18.142277 19.273476 13.009506 17.783998 8.178318 C 20.019415 6.235001 22.086554 4.10321 23.960861 1.80769 Z M 13.511427 35.406403 C 11.145139 33.747814 8.633816 32.282063 6.000269 31.031937 C 6.730776 28.637476 7.123754 26.095783 7.123754 23.462429 C 7.123754 20.828892 6.730762 18.287201 6.000235 15.892738 C 8.633816 14.642616 11.145175 13.176861 13.511501 11.518276 C 14.416311 15.352554 14.895074 19.351414 14.895074 23.462154 C 14.895074 27.572985 14.416283 31.571938 13.511427 35.406403 Z M 33.027046 23.462337 C 33.027046 27.572985 33.505753 31.571846 34.410553 35.406124 C 36.776859 33.747631 39.288094 32.281876 41.921539 31.031845 C 41.191017 28.637384 40.798061 26.095692 40.798061 23.462246 C 40.798061 20.8288 41.191017 18.287201 41.921539 15.89283 C 39.288094 14.642708 36.776768 13.177048 34.410553 11.518555 C 33.505753 15.352831 33.027046 19.351692 33.027046 23.462337 Z\" />\n</svg>\n`)}`\n\nexport class MagicAuth extends BaseWallet {\n private client: MagicAuthClient | null = null\n private options: MagicAuthOptions\n\n protected store: Store<State>\n public userInfo: MagicUserMetadata | null = null\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options,\n metadata = {}\n }: WalletConstructor<WalletId.MAGIC>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n if (!options?.apiKey) {\n this.logger.error('Missing required option: apiKey')\n throw new Error('Missing required option: apiKey')\n }\n this.options = options\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Magic',\n icon: ICON\n }\n\n private async initializeClient(): Promise<MagicAuthClient> {\n this.logger.info('Initializing client...')\n const Magic = (await import('magic-sdk')).Magic\n const AlgorandExtension = (await import('@magic-ext/algorand')).AlgorandExtension\n const client = new Magic(this.options.apiKey as string, {\n extensions: {\n algorand: new AlgorandExtension({\n rpcUrl: ''\n })\n }\n })\n this.client = client\n this.logger.info('Client initialized')\n return client\n }\n\n public connect = async (args?: Record<string, any>): Promise<WalletAccount[]> => {\n this.logger.info('Connecting...')\n if (!args?.email || typeof args.email !== 'string') {\n this.logger.error('Magic Link provider requires an email (string) to connect')\n throw new Error('Magic Link provider requires an email (string) to connect')\n }\n\n const { email } = args\n\n const client = this.client || (await this.initializeClient())\n\n this.logger.info(`Logging in ${email}...`)\n await client.auth.loginWithMagicLink({ email })\n\n const userInfo = await client.user.getInfo()\n\n if (!userInfo) {\n this.logger.error('User info not found!')\n throw new Error('User info not found!')\n }\n\n if (!userInfo.publicAddress) {\n this.logger.error('No account found!')\n throw new Error('No account found!')\n }\n\n this.userInfo = userInfo\n\n this.logger.info('Login successful', userInfo)\n const walletAccount: WalletAccount = {\n name: userInfo.email ?? 'Magic Wallet 1',\n address: userInfo.publicAddress\n }\n\n const walletState: WalletState = {\n accounts: [walletAccount],\n activeAccount: walletAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n this.logger.info('Connected successfully', walletState)\n return [walletAccount]\n }\n\n public disconnect = async (): Promise<void> => {\n this.logger.info('Disconnecting...')\n this.onDisconnect()\n const client = this.client || (await this.initializeClient())\n this.logger.info(`Logging out ${this.userInfo?.email || 'user'}...`)\n await client.user.logout()\n this.logger.info('Disconnected')\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n this.logger.info('Resuming session...')\n const client = this.client || (await this.initializeClient())\n const isLoggedIn = await client.user.isLoggedIn()\n\n if (!isLoggedIn) {\n this.logger.warn('Not logged in, please reconnect...')\n this.onDisconnect()\n return\n }\n\n const userInfo = await client.user.getInfo()\n\n if (!userInfo) {\n await client.user.logout()\n this.logger.error('User info not found!')\n throw new Error('User info not found!')\n }\n\n if (!userInfo.publicAddress) {\n await client.user.logout()\n this.logger.error('No account found!')\n throw new Error('No account found!')\n }\n\n this.userInfo = userInfo\n\n const walletAccount: WalletAccount = {\n name: userInfo.email ?? `${this.metadata.name} Account 1`,\n address: userInfo.publicAddress\n }\n\n const storedAccount = walletState.accounts[0]\n\n const { name, address } = walletAccount\n const { name: storedName, address: storedAddress } = storedAccount\n\n const match = name === storedName && address === storedAddress\n\n if (!match) {\n this.logger.warn('Session account mismatch, updating account', {\n prev: storedAccount,\n current: walletAccount\n })\n setAccounts(this.store, {\n walletId: this.id,\n accounts: [walletAccount]\n })\n }\n this.logger.info('Session resumed successfully')\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n let txnsToSign: WalletTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n this.logger.debug('Sending processed transactions to wallet...', txnsToSign)\n\n // Sign transactions\n const signTxnsResult = (await client.algorand.signGroupTransactionV2(\n txnsToSign\n )) as SignTxnsResult\n\n this.logger.debug('Received signed transactions from wallet', signTxnsResult)\n\n // Convert base64 to Uint8Array, undefined to null\n const result = signTxnsResult.map((value) => {\n if (value === undefined) {\n return null\n }\n return base64ToByteArray(value)\n })\n\n this.logger.debug('Transactions signed successfully', result)\n return result\n } catch (error: any) {\n this.logger.error('Error signing transactions:', error.message)\n throw error\n }\n }\n}\n","import algosdk from 'algosdk'\nimport { compareAccounts, flattenTxnGroup, isSignedTxn, isTransactionArray } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type { LiquidEvmMetadata, WalletAccount, WalletConstructor } from 'src/wallets/types'\nimport type { AlgorandClient } from '@algorandfoundation/algokit-utils'\nimport type { LiquidEvmSdk, SignTypedDataParams } from 'liquid-accounts-evm'\nimport type { State } from 'src/store'\n\ninterface EvmAccount {\n evmAddress: string\n algorandAddress: string\n}\n\nexport interface LiquidEvmOptions {\n uiHooks?: {\n onConnect?: (evmAccount: EvmAccount) => void\n onBeforeSign?: (\n txnGroup: algosdk.Transaction[] | Uint8Array[],\n indexesToSign?: number[]\n ) => Promise<void>\n onAfterSign?: (success: boolean, errorMessage?: string) => void\n }\n}\n\n/**\n * Abstract base class for EVM-based wallets that use the Liquid Accounts system\n * to derive Algorand addresses from EVM addresses.\n *\n * This class provides common functionality for:\n * - Initializing the Liquid EVM SDK\n * - Deriving Algorand accounts from EVM addresses\n * - Signing Algorand transactions using EVM signatures\n * - Managing the mapping between EVM and Algorand addresses\n *\n * Subclasses must implement provider-specific methods:\n * - initializeProvider(): Initialize the specific EVM wallet SDK/provider\n * - getProvider(): Get the EVM provider instance\n * - signWithProvider(): Sign a message with the specific EVM wallet\n */\nexport abstract class LiquidEvmBaseWallet extends BaseWallet {\n protected liquidEvmSdk: LiquidEvmSdk | null = null\n protected algorandClient: AlgorandClient | null = null\n protected evmAddressMap: Map<string, string> = new Map() // algorandAddress -> evmAddress\n protected options: LiquidEvmOptions\n protected store: Store<State>\n\n constructor(params: WalletConstructor<any>) {\n super(params)\n this.options = params.options || {}\n this.store = params.store\n }\n\n /**\n * Default metadata for Liquid EVM wallets.\n * Subclasses MUST override this with their own metadata including isLiquid: \"EVM\"\n */\n static defaultMetadata: LiquidEvmMetadata\n\n /**\n * Typed metadata accessor that guarantees isLiquid: \"EVM\" is present\n */\n declare readonly metadata: LiquidEvmMetadata\n\n /**\n * Initialize the provider-specific SDK or connection.\n * Called during connect/resume to set up the wallet.\n */\n protected abstract initializeProvider(): Promise<void>\n\n /**\n * Get the EVM provider instance.\n * This should return the provider object that can make eth_* RPC calls.\n */\n protected abstract getProvider(): Promise<any>\n\n /**\n * Sign EIP-712 typed data with the specific EVM wallet provider.\n * @param typedData - The EIP-712 typed data (domain, types, primaryType, message)\n * @param evmAddress - The EVM address to sign with\n * @returns The signature as a hex string (with 0x prefix)\n */\n protected abstract signWithProvider(typedData: SignTypedDataParams, evmAddress: string): Promise<string>\n\n /**\n * Ensure the wallet is on the Algorand chain (4160).\n * Queries the current chain first, and only switches/adds if needed.\n */\n protected async ensureAlgorandChain(): Promise<void> {\n const provider = await this.getProvider()\n const { ALGORAND_CHAIN_ID_HEX, ALGORAND_EVM_CHAIN_CONFIG } = await import('liquid-accounts-evm')\n\n const currentChainId = (await provider.request({ method: 'eth_chainId' })) as string\n\n if (currentChainId === ALGORAND_CHAIN_ID_HEX) {\n return\n }\n\n this.logger.info(`Wrong chain (${currentChainId}), switching to Algorand (${ALGORAND_CHAIN_ID_HEX})...`)\n\n try {\n await provider.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: ALGORAND_CHAIN_ID_HEX }]\n })\n } catch (switchError: any) {\n // 4902 = chain not added to wallet\n if (switchError.code === 4902) {\n this.logger.info('Algorand chain not found, adding it...')\n await provider.request({\n method: 'wallet_addEthereumChain',\n params: [ALGORAND_EVM_CHAIN_CONFIG]\n })\n } else {\n throw switchError\n }\n }\n }\n\n /**\n * Initialize the Liquid EVM SDK for deriving Algorand addresses\n */\n protected async initializeEvmSdk(): Promise<LiquidEvmSdk> {\n if (!this.liquidEvmSdk) {\n this.logger.info('Initializing Liquid EVM SDK...')\n\n if (!this.algorandClient) {\n const { AlgorandClient } = await import('@algorandfoundation/algokit-utils')\n const algodClient = this.getAlgodClient()\n this.algorandClient = AlgorandClient.fromClients({\n algod: algodClient\n })\n }\n\n const { LiquidEvmSdk } = await import('liquid-accounts-evm')\n this.liquidEvmSdk = new LiquidEvmSdk({ algorand: this.algorandClient })\n\n this.logger.info('Liquid EVM SDK initialized')\n }\n return this.liquidEvmSdk\n }\n\n /**\n * Derive Algorand accounts from EVM addresses\n */\n protected async deriveAlgorandAccounts(evmAddresses: string[]): Promise<WalletAccount[]> {\n const liquidEvmSdk = await this.initializeEvmSdk()\n const walletAccounts: WalletAccount[] = []\n\n for (let i = 0; i < evmAddresses.length; i++) {\n const evmAddress = evmAddresses[i]\n const algorandAddress = await liquidEvmSdk.getAddress({ evmAddress })\n\n this.evmAddressMap.set(algorandAddress, evmAddress)\n\n walletAccounts.push({\n name: `${this.metadata.name} ${evmAddress}`,\n address: algorandAddress\n })\n }\n\n return walletAccounts\n }\n\n /**\n * Convert bytes to hex string with 0x prefix\n */\n protected bytesToHex(bytes: Uint8Array): string {\n return (\n '0x' +\n Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')\n )\n }\n\n /**\n * Process transaction group to extract transactions that need signing\n */\n protected processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): algosdk.Transaction[] {\n const txnsToSign: algosdk.Transaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push(txn)\n }\n })\n\n return txnsToSign\n }\n\n /**\n * Process encoded transaction group to extract transactions that need signing\n */\n protected processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): algosdk.Transaction[] {\n const txnsToSign: algosdk.Transaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push(txn)\n }\n })\n\n return txnsToSign\n }\n\n /**\n * Sign Algorand transactions using EVM wallet signatures\n */\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n\n const evmSdk = await this.initializeEvmSdk()\n let flatTxns: algosdk.Transaction[] = []\n\n if (isTransactionArray(txnGroup)) {\n flatTxns = flattenTxnGroup(txnGroup)\n } else {\n const flatEncoded: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n flatTxns = flatEncoded.map((txnBuffer) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n return isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n })\n }\n\n const txnsToSign = isTransactionArray(txnGroup)\n ? this.processTxns(flatTxns, indexesToSign)\n : this.processEncodedTxns(flattenTxnGroup(txnGroup as Uint8Array[]), indexesToSign)\n\n if (txnsToSign.length === 0) {\n this.logger.debug('No transactions to sign')\n return flatTxns.map(() => null)\n }\n\n // Get the EVM address (all txns should be from the same wallet account)\n const firstTxn = txnsToSign[0]\n const algorandAddress = firstTxn.sender.toString()\n const evmAddress = this.evmAddressMap.get(algorandAddress)\n\n if (!evmAddress) {\n throw new Error(`No EVM address found for Algorand address: ${algorandAddress}`)\n }\n\n const onBeforeSign = this.options.uiHooks?.onBeforeSign ?? this.managerUIHooks?.onBeforeSign\n if (onBeforeSign) {\n this.logger.debug('Running onBeforeSign hook', { txnGroup, indexesToSign })\n await onBeforeSign(txnGroup as algosdk.Transaction[] | Uint8Array[], indexesToSign)\n }\n\n // Ensure we're on the Algorand chain before requesting signatures\n await this.ensureAlgorandChain()\n\n // Sign all transactions in one call to avoid multiple wallet prompts\n const signedBlobs = await evmSdk.signTxn({\n evmAddress,\n txns: flatTxns,\n signMessage: (typedData) => this.signWithProvider(typedData, evmAddress)\n })\n\n const onAfterSign = this.options.uiHooks?.onAfterSign ?? this.managerUIHooks?.onAfterSign\n if (onAfterSign) {\n this.logger.debug('Running onAfterSign hook')\n try {\n onAfterSign(true)\n } catch (e) {}\n }\n\n // Build result array - use signed txns where we should sign, null otherwise\n const result: (Uint8Array | null)[] = flatTxns.map((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n return signedBlobs[index]\n }\n return null\n })\n\n this.logger.debug('Transactions signed successfully', result)\n return result\n } catch (error: any) {\n try {\n const onAfterSignCleanup =\n this.options.uiHooks?.onAfterSign ?? this.managerUIHooks?.onAfterSign\n onAfterSignCleanup?.(false, error.message)\n } catch (e) {}\n this.logger.error('Error signing transactions:', error.message)\n throw error\n }\n }\n\n /**\n * Helper to compare and update accounts if needed during session resume\n */\n protected async resumeWithAccounts(\n evmAddresses: string[],\n setAccountsFn: (accounts: WalletAccount[]) => void\n ): Promise<void> {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n const walletAccounts = await this.deriveAlgorandAccounts(evmAddresses)\n const match = compareAccounts(walletAccounts, walletState.accounts)\n\n if (!match) {\n this.logger.warn('Session accounts mismatch, updating accounts', {\n prev: walletState.accounts,\n current: walletAccounts\n })\n setAccountsFn(walletAccounts)\n }\n\n this.logger.info('Session resumed')\n }\n\n protected notifyConnect(evmAddress: string, algorandAddress: string): void {\n const onConnect = this.options.uiHooks?.onConnect ?? this.managerUIHooks?.onConnect\n if (onConnect) {\n onConnect({ evmAddress, algorandAddress })\n }\n }\n}\n","import { WalletState, addWallet, setAccounts } from 'src/store'\nimport { LiquidEvmBaseWallet, LiquidEvmOptions } from 'src/wallets/liquid-evm-base'\nimport { WalletId } from 'src/wallets/types'\nimport type { MetaMaskSDK } from '@metamask/sdk'\nimport type { SDKProvider } from '@metamask/sdk'\nimport type { WalletAccount, WalletConstructor } from 'src/wallets/types'\n\nexport interface MetaMaskWalletOptions extends LiquidEvmOptions {\n dappMetadata?: {\n name?: string\n url?: string\n iconUrl?: string\n }\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n\t viewBox=\"0 0 142 136.878\" style=\"enable-background:new 0 0 142 136.878;\" xml:space=\"preserve\">\n<path style=\"fill:#FF5C16;\" d=\"M132.682,132.192l-30.583-9.106l-23.063,13.787l-16.092-0.007l-23.077-13.78l-30.569,9.106L0,100.801\n\tl9.299-34.839L0,36.507L9.299,0l47.766,28.538h27.85L132.682,0l9.299,36.507l-9.299,29.455l9.299,34.839L132.682,132.192\n\tL132.682,132.192z\"/>\n<path style=\"fill:#FF5C16;\" d=\"M9.305,0l47.767,28.558l-1.899,19.599L9.305,0z M39.875,100.814l21.017,16.01l-21.017,6.261\n\tC39.875,123.085,39.875,100.814,39.875,100.814z M59.212,74.345l-4.039-26.174L29.317,65.97l-0.014-0.007v0.013l0.08,18.321\n\tl10.485-9.951L59.212,74.345L59.212,74.345z M132.682,0L84.915,28.558l1.893,19.599L132.682,0z M102.113,100.814l-21.018,16.01\n\tl21.018,6.261V100.814z M112.678,65.975h0.007H112.678v-0.013l-0.006,0.007L86.815,48.171l-4.039,26.174h19.336l10.492,9.95\n\tC112.604,84.295,112.678,65.975,112.678,65.975z\"/>\n<path style=\"fill:#E34807;\" d=\"M39.868,123.085l-30.569,9.106L0,100.814h39.868C39.868,100.814,39.868,123.085,39.868,123.085z\n\t M59.205,74.338l5.839,37.84l-8.093-21.04L29.37,84.295l10.491-9.956h19.344L59.205,74.338z M102.112,123.085l30.57,9.106\n\tl9.299-31.378h-39.869C102.112,100.814,102.112,123.085,102.112,123.085z M82.776,74.338l-5.839,37.84l8.092-21.04l27.583-6.843\n\tl-10.498-9.956H82.776V74.338z\"/>\n<path style=\"fill:#FF8D5D;\" d=\"M0,100.801l9.299-34.839h19.997l0.073,18.327l27.584,6.843l8.092,21.039l-4.16,4.633l-21.017-16.01H0\n\tV100.801z M141.981,100.801l-9.299-34.839h-19.998l-0.073,18.327l-27.582,6.843l-8.093,21.039l4.159,4.633l21.018-16.01h39.868\n\tV100.801z M84.915,28.538h-27.85l-1.891,19.599l9.872,64.013h11.891l9.878-64.013L84.915,28.538z\"/>\n<path style=\"fill:#661800;\" d=\"M9.299,0L0,36.507l9.299,29.455h19.997l25.87-17.804L9.299,0z M53.426,81.938h-9.059l-4.932,4.835\n\tl17.524,4.344l-3.533-9.186V81.938z M132.682,0l9.299,36.507l-9.299,29.455h-19.998L86.815,48.158L132.682,0z M88.568,81.938h9.072\n\tl4.932,4.841l-17.544,4.353l3.54-9.201V81.938z M79.029,124.385l2.067-7.567l-4.16-4.633h-11.9l-4.159,4.633l2.066,7.567\"/>\n<path style=\"fill:#C0C4CD;\" d=\"M79.029,124.384v12.495H62.945v-12.495L79.029,124.384L79.029,124.384z\"/>\n<path style=\"fill:#E7EBF6;\" d=\"M39.875,123.072l23.083,13.8v-12.495l-2.067-7.566C60.891,116.811,39.875,123.072,39.875,123.072z\n\t M102.113,123.072l-23.084,13.8v-12.495l2.067-7.566C81.096,116.811,102.113,123.072,102.113,123.072z\"/>\n</svg>\n`)}`\n\nexport class MetaMaskWallet extends LiquidEvmBaseWallet {\n private metamaskSdk: MetaMaskSDK | null = null\n private provider: SDKProvider | null = null\n protected options: MetaMaskWalletOptions\n\n constructor(params: WalletConstructor<WalletId.METAMASK>) {\n super(params)\n this.options = params.options || {}\n }\n\n static defaultMetadata = {\n name: 'MetaMask',\n icon: ICON,\n isLiquid: 'EVM' as const\n }\n\n protected async initializeProvider(): Promise<void> {\n if (!this.metamaskSdk) {\n this.logger.info('Initializing MetaMask SDK...')\n const { MetaMaskSDK } = await import('@metamask/sdk')\n\n this.metamaskSdk = new MetaMaskSDK({\n dappMetadata: {\n name: this.options.dappMetadata?.name || 'Algorand dApp',\n url: this.options.dappMetadata?.url || (typeof window !== 'undefined' ? window.location.href : ''),\n ...(this.options.dappMetadata?.iconUrl && { iconUrl: this.options.dappMetadata.iconUrl })\n }\n })\n\n this.logger.info('MetaMask SDK initialized')\n }\n }\n\n protected async getProvider(): Promise<SDKProvider> {\n if (!this.provider) {\n await this.initializeProvider()\n this.provider = this.metamaskSdk!.getProvider() || null\n\n if (!this.provider) {\n throw new Error('MetaMask provider not available. Please install MetaMask.')\n }\n }\n return this.provider\n }\n\n protected async signWithProvider(typedData: import('liquid-accounts-evm').SignTypedDataParams, evmAddress: string): Promise<string> {\n const provider = await this.getProvider()\n\n return await provider.request({\n method: 'eth_signTypedData_v4',\n params: [evmAddress, JSON.stringify(typedData)]\n }) as string\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n this.logger.info('Connecting...')\n\n await this.initializeProvider()\n await this.initializeEvmSdk()\n\n const provider = await this.getProvider()\n\n const evmAddresses = await provider.request({\n method: 'eth_requestAccounts'\n }) as string[]\n\n if (evmAddresses.length === 0) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n this.logger.info(`Connected to ${evmAddresses.length} EVM account(s)`)\n\n const walletAccounts = await this.deriveAlgorandAccounts(evmAddresses)\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n this.logger.info('✅ Connected.', walletState)\n\n this.notifyConnect(evmAddresses[0], activeAccount.address)\n return walletAccounts\n }\n\n public disconnect = async (): Promise<void> => {\n this.logger.info('Disconnecting...')\n\n if (this.metamaskSdk) {\n // Sends TERMINATE message to MetaMask Mobile, clears \".sdk-comm\" channel config\n // from localStorage, and generates a new channelId so the next connect()\n // shows a fresh QR code instead of resuming the old session.\n // The SDK instance is kept alive — it resets itself internally and the docs\n // confirm eth_requestAccounts works again after terminate(). Nulling the SDK\n // here causes getProvider() to fail on reconnect due to module-level state\n // conflicts with re-instantiation.\n await this.metamaskSdk.terminate()\n }\n\n this.provider = null\n this.evmAddressMap.clear()\n this.onDisconnect()\n\n this.logger.info('Disconnected')\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n this.logger.info('Resuming session...')\n\n await this.initializeProvider()\n await this.initializeEvmSdk()\n\n const provider = await this.getProvider()\n\n const evmAddresses = await provider.request({\n method: 'eth_accounts'\n }) as string[]\n\n if (evmAddresses.length === 0) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n await this.resumeWithAccounts(evmAddresses, (accounts) => {\n setAccounts(this.store, {\n walletId: this.id,\n accounts\n })\n })\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n this.onDisconnect()\n throw error\n }\n }\n\n\n}\n","import algosdk from 'algosdk'\nimport { StorageAdapter } from 'src/storage'\nimport { LOCAL_STORAGE_KEY, WalletState, addWallet, type State } from 'src/store'\nimport { flattenTxnGroup, isSignedTxn, isTransactionArray } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type { WalletAccount, WalletConstructor, WalletId } from 'src/wallets/types'\n\ninterface MnemonicConstructor {\n persistToStorage?: boolean\n promptForMnemonic: () => Promise<string | null>\n}\n\nexport type MnemonicOptions = Partial<Pick<MnemonicConstructor, 'promptForMnemonic'>> &\n Omit<MnemonicConstructor, 'promptForMnemonic'>\n\nexport const LOCAL_STORAGE_MNEMONIC_KEY = `${LOCAL_STORAGE_KEY}_mnemonic`\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 400 400\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect fill=\"#525252\" width=\"400\" height=\"400\" />\n <path fill=\"#FFFFFF\" d=\"M309.2,309.3H275l-22.2-82.7l-47.9,82.7h-38.3l73.9-128l-11.9-44.5l-99.6,172.6H90.8L217.1,90.6 h33.5l14.7,54.3h34.6l-23.6,41L309.2,309.3z\" />\n</svg>\n`)}`\n\nexport class MnemonicWallet extends BaseWallet {\n private account: algosdk.Account | null = null\n private options: MnemonicConstructor\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options,\n metadata = {}\n }: WalletConstructor<WalletId.MNEMONIC>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n\n const {\n persistToStorage = false,\n promptForMnemonic = () => Promise.resolve(prompt('Enter 25-word mnemonic passphrase:'))\n } = options || {}\n this.options = { persistToStorage, promptForMnemonic }\n\n this.store = store\n\n if (this.options.persistToStorage) {\n this.logger.warn(\n 'Persisting mnemonics to storage is insecure. Any private key mnemonics used should never hold real Algos (i.e., on MainNet). Use with caution!'\n )\n }\n }\n\n static defaultMetadata = {\n name: 'Mnemonic',\n icon: ICON\n }\n\n private loadMnemonicFromStorage(): string | null {\n return StorageAdapter.getItem(LOCAL_STORAGE_MNEMONIC_KEY)\n }\n\n private saveMnemonicToStorage(mnemonic: string): void {\n StorageAdapter.setItem(LOCAL_STORAGE_MNEMONIC_KEY, mnemonic)\n }\n\n private removeMnemonicFromStorage(): void {\n StorageAdapter.removeItem(LOCAL_STORAGE_MNEMONIC_KEY)\n }\n\n private checkMainnet(): void {\n try {\n const network = this.activeNetworkConfig\n if (!network.isTestnet) {\n this.logger.warn(\n 'The Mnemonic wallet provider is insecure and intended for testing only. Any private key mnemonics used should never hold real Algos (i.e., on MainNet).'\n )\n throw new Error('Production network detected. Aborting.')\n }\n } catch (error) {\n this.disconnect()\n throw error\n }\n }\n\n private async initializeAccount(): Promise<algosdk.Account> {\n let mnemonic = this.loadMnemonicFromStorage()\n if (!mnemonic) {\n mnemonic = await this.options.promptForMnemonic()\n if (!mnemonic) {\n this.account = null\n this.logger.error('No mnemonic provided')\n throw new Error('No mnemonic provided')\n }\n\n if (this.options.persistToStorage) {\n this.logger.warn('Mnemonic saved to localStorage.')\n this.saveMnemonicToStorage(mnemonic)\n }\n }\n\n const account = algosdk.mnemonicToSecretKey(mnemonic)\n this.account = account\n return account\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n // Throw error if MainNet is active\n this.checkMainnet()\n\n this.logger.info('Connecting...')\n const account = await this.initializeAccount()\n\n const walletAccount = {\n name: `${this.metadata.name} Account`,\n address: account.addr.toString()\n }\n\n const walletState: WalletState = {\n accounts: [walletAccount],\n activeAccount: walletAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n this.logger.info('Connected successfully', walletState)\n return [walletAccount]\n }\n\n public disconnect = async (): Promise<void> => {\n this.logger.info('Disconnecting...')\n this.onDisconnect()\n this.account = null\n this.removeMnemonicFromStorage()\n this.logger.info('Disconnected')\n }\n\n public resumeSession = async (): Promise<void> => {\n // Throw error if MainNet is active\n this.checkMainnet()\n\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n this.logger.info('Resuming session...')\n\n // If persisting to storage is enabled, then resume session\n if (this.options.persistToStorage) {\n try {\n await this.initializeAccount()\n this.logger.info('Session resumed successfully')\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n this.disconnect()\n throw error\n }\n } else {\n // Otherwise, do not resume session, disconnect instead\n this.logger.info('No session to resume, disconnecting...')\n this.disconnect()\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): algosdk.Transaction[] {\n const txnsToSign: algosdk.Transaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = signer === this.account!.addr.toString()\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push(txn)\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): algosdk.Transaction[] {\n const txnsToSign: algosdk.Transaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && signer === this.account!.addr.toString()\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push(txn)\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n // Throw error if MainNet is active\n this.checkMainnet()\n\n try {\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n let txnsToSign: algosdk.Transaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n // Sign transactions\n const signedTxns = txnsToSign.map((txn) => txn.signTxn(this.account!.sk))\n this.logger.debug('Transactions signed successfully', { signedTxns })\n return signedTxns\n } catch (error: any) {\n this.logger.error('Error signing transactions:', error.message)\n throw error\n }\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, setAccounts, setActiveWallet, type State } from 'src/store'\nimport { compareAccounts, flattenTxnGroup, isSignedTxn, isTransactionArray } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport { WalletId } from 'src/wallets/types'\nimport type { PeraWalletConnect } from '@perawallet/connect'\nimport type { Store } from '@tanstack/store'\nimport type { SignerTransaction, WalletAccount, WalletConstructor } from 'src/wallets/types'\n\nexport interface PeraWalletConnectOptions {\n bridge?: string\n shouldShowSignTxnToast?: boolean\n chainId?: 416001 | 416002 | 416003 | 4160\n compactMode?: boolean\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 200 200\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect fill=\"#FFEE55\" width=\"200\" height=\"200\" />\n <path fill=\"#1C1C1C\" d=\"M106.1,64.3c2.2,9.1,1.5,17-1.7,17.8c-3.1,0.8-7.4-6-9.6-15c-2.2-9.1-1.5-17,1.7-17.8 C99.6,48.5,103.9,55.2,106.1,64.3z\" />\n <path fill=\"#1C1C1C\" d=\"M142.2,72.1c-4.8-5.1-14.5-3.7-21.6,3.1c-7,6.9-8.8,16.6-4,21.7c4.8,5.1,14.5,3.7,21.6-3.1 C145.3,86.9,147.1,77.2,142.2,72.1z\" />\n <path fill=\"#1C1C1C\" d=\"M103.7,150.8c3.1-0.8,3.7-9.2,1.4-18.8c-2.3-9.6-6.7-16.8-9.8-16c-3.1,0.8-3.7,9.2-1.4,18.8 C96.2,144.3,100.6,151.5,103.7,150.8z\" />\n <path fill=\"#1C1C1C\" d=\"M72.1,76.8c9,2.6,15.5,7.3,14.6,10.3c-0.9,3.1-8.9,3.4-17.8,0.8s-15.5-7.3-14.6-10.3 C55.1,74.5,63.1,74.1,72.1,76.8z\" />\n <path fill=\"#1C1C1C\" d=\"M130.2,111.5c9.5,2.8,16.5,7.6,15.6,10.6c-0.9,3.1-9.3,3.3-18.8,0.5c-9.5-2.8-16.5-7.6-15.6-10.6 C112.2,108.9,120.7,108.7,130.2,111.5z\" />\n <path fill=\"#1C1C1C\" d=\"M82.1,105c-2.2-2.3-9.5,1-16.3,7.5c-6.8,6.4-10.4,13.5-8.2,15.8c2.2,2.3,9.5-1,16.3-7.5 C80.7,114.4,84.3,107.3,82.1,105z\" />\n</svg>\n`)}`\n\nexport class PeraWallet extends BaseWallet {\n private client: PeraWalletConnect | null = null\n private options: PeraWalletConnectOptions\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options = {},\n metadata = {}\n }: WalletConstructor<WalletId.PERA>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n this.options = options\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Pera',\n icon: ICON\n }\n\n private async initializeClient(): Promise<PeraWalletConnect> {\n this.logger.info('Initializing client...')\n const { PeraWalletConnect } = await import('@perawallet/connect')\n const client = new PeraWalletConnect(this.options)\n this.client = client\n this.logger.info('Client initialized')\n return client\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n this.logger.info('Connecting...')\n const currentActiveWallet = this.store.state.activeWallet\n if (currentActiveWallet && currentActiveWallet !== this.id) {\n this.manageWalletConnectSession('backup', currentActiveWallet)\n }\n const client = this.client || (await this.initializeClient())\n const accounts = await client.connect()\n\n // Listen for disconnect event\n client.connector?.on('disconnect', this.onDisconnect)\n\n if (accounts.length === 0) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n this.logger.info('Connected successfully', walletState)\n return walletAccounts\n }\n\n public disconnect = async (): Promise<void> => {\n this.logger.info('Disconnecting...')\n const client = this.client || (await this.initializeClient())\n\n const currentActiveWallet = this.store.state.activeWallet\n if (currentActiveWallet && currentActiveWallet !== this.id) {\n this.manageWalletConnectSession('backup', currentActiveWallet)\n this.manageWalletConnectSession('restore', this.id)\n await client.disconnect()\n // Wait for the disconnect to complete (race condition)\n await new Promise((resolve) => setTimeout(resolve, 500))\n this.manageWalletConnectSession('restore', currentActiveWallet)\n } else {\n await client.disconnect()\n }\n\n this.onDisconnect()\n this.logger.info('Disconnected')\n }\n\n public setActive = (): void => {\n this.logger.info(`Set active wallet: ${this.id}`)\n const currentActiveWallet = this.store.state.activeWallet\n if (currentActiveWallet && currentActiveWallet === WalletId.DEFLY) {\n this.manageWalletConnectSession('backup', currentActiveWallet)\n }\n this.manageWalletConnectSession('restore')\n setActiveWallet(this.store, { walletId: this.id })\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // Check for Pera Discover browser and auto-connect if no other wallet is active\n if (typeof window !== 'undefined' && window.navigator) {\n const isPeraDiscover = window.navigator.userAgent.includes('pera')\n if (isPeraDiscover && !walletState && !state.activeWallet) {\n this.logger.info('Pera Discover browser detected, attempting auto-connect...')\n try {\n await this.connect()\n this.logger.info('Auto-connect successful')\n return\n } catch (error: any) {\n this.logger.warn('Auto-connect failed:', error.message)\n }\n }\n }\n\n // No session to resume\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n // If Defly is active, skip reconnectSession for Pera\n if (state.activeWallet === WalletId.DEFLY) {\n this.logger.info('Skipping reconnectSession for Pera (inactive)')\n return\n }\n\n this.logger.info('Resuming session...')\n\n const client = this.client || (await this.initializeClient())\n const accounts = await client.reconnectSession()\n\n if (accounts.length === 0) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const match = compareAccounts(walletAccounts, walletState.accounts)\n\n if (!match) {\n this.logger.warn('Session accounts mismatch, updating accounts', {\n prev: walletState.accounts,\n current: walletAccounts\n })\n setAccounts(this.store, {\n walletId: this.id,\n accounts: walletAccounts\n })\n }\n this.logger.info('Session resumed successfully')\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): SignerTransaction[] {\n const txnsToSign: SignerTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn })\n } else {\n txnsToSign.push({ txn, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): SignerTransaction[] {\n const txnsToSign: SignerTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn })\n } else {\n txnsToSign.push({ txn, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n let txnsToSign: SignerTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n this.logger.debug('Sending processed transactions to wallet...', [txnsToSign])\n\n // Sign transactions\n const signedTxns = await client.signTransaction([txnsToSign])\n this.logger.debug('Received signed transactions from wallet', signedTxns)\n\n // ARC-0001 - Return null for unsigned transactions\n const result = txnsToSign.reduce<(Uint8Array | null)[]>((acc, txn) => {\n if (txn.signers && txn.signers.length == 0) {\n acc.push(null)\n } else {\n const signedTxn = signedTxns.shift()\n if (signedTxn) {\n acc.push(signedTxn)\n }\n }\n return acc\n }, [])\n\n this.logger.debug('Transactions signed successfully', result)\n return result\n } catch (error: any) {\n this.logger.error('Error signing transactions:', error.message)\n throw error\n }\n }\n}\n","import LuteConnect from 'lute-connect'\nimport { WalletState, addWallet, setAccounts } from 'src/store'\nimport { LiquidEvmBaseWallet, LiquidEvmOptions } from 'src/wallets/liquid-evm-base'\nimport { WalletId } from 'src/wallets/types'\nimport type { WalletAccount, WalletConstructor } from 'src/wallets/types'\nimport type { EIP1193Provider } from 'viem'\n\nexport interface RainbowWalletOptions extends LiquidEvmOptions {\n dappMetadata?: {\n name?: string\n url?: string\n iconUrl?: string\n }\n}\n\n// Rainbow wallet icon\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg width=\"120\" height=\"120\" viewBox=\"0 0 120 120\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"120\" height=\"120\" rx=\"60\" fill=\"url(#paint0_linear)\"/>\n <path d=\"M60 85C74.9117 85 87 72.9117 87 58C87 43.0883 74.9117 31 60 31C45.0883 31 33 43.0883 33 58C33 72.9117 45.0883 85 60 85Z\" fill=\"white\"/>\n <path d=\"M60 77C70.4934 77 79 68.4934 79 58C79 47.5066 70.4934 39 60 39C49.5066 39 41 47.5066 41 58C41 68.4934 49.5066 77 60 77Z\" fill=\"url(#paint1_linear)\"/>\n <defs>\n <linearGradient id=\"paint0_linear\" x1=\"0\" y1=\"0\" x2=\"120\" y2=\"120\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#174299\"/>\n <stop offset=\"1\" stop-color=\"#001E59\"/>\n </linearGradient>\n <linearGradient id=\"paint1_linear\" x1=\"41\" y1=\"39\" x2=\"79\" y2=\"77\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#FF4444\"/>\n <stop offset=\"0.2\" stop-color=\"#FF8844\"/>\n <stop offset=\"0.4\" stop-color=\"#FFDD00\"/>\n <stop offset=\"0.6\" stop-color=\"#44FF44\"/>\n <stop offset=\"0.8\" stop-color=\"#0088FF\"/>\n <stop offset=\"1\" stop-color=\"#8844FF\"/>\n </linearGradient>\n </defs>\n</svg>\n`)}`\n\nexport class RainbowWallet extends LiquidEvmBaseWallet {\n private provider: EIP1193Provider | null = null\n protected options: RainbowWalletOptions\n\n constructor(params: WalletConstructor<WalletId.RAINBOW>) {\n super(params)\n this.options = params.options || {}\n }\n\n static defaultMetadata = {\n name: 'Rainbow',\n icon: ICON,\n isLiquid: 'EVM' as const\n }\n\n protected async initializeProvider(): Promise<void> {\n if (typeof window === 'undefined') {\n throw new Error('Rainbow wallet only works in browser environment')\n }\n\n // Rainbow can be:\n // 1. Browser extension injecting window.rainbow or into window.ethereum.providers\n // 2. Mobile wallet connected via WalletConnect\n\n const windowEth = (window as any).ethereum\n\n // Check for Rainbow browser extension\n if ((window as any).rainbow) {\n this.logger.info('Found Rainbow browser extension at window.rainbow')\n return\n }\n\n if (windowEth?.providers && Array.isArray(windowEth.providers)) {\n const rainbowProvider = windowEth.providers.find((p: any) => p.isRainbow)\n if (rainbowProvider) {\n this.logger.info('Found Rainbow in providers array')\n return\n }\n }\n\n if (windowEth?.isRainbow) {\n this.logger.info('Found Rainbow as the primary provider')\n return\n }\n\n // If not found as extension, user might need to connect via QR code for mobile\n this.logger.warn('Rainbow extension not detected. Note: Rainbow mobile app requires WalletConnect.')\n }\n\n protected async getProvider(): Promise<EIP1193Provider> {\n if (!this.provider) {\n await this.initializeProvider()\n\n const windowEth = (window as any).ethereum\n\n // Try to get Rainbow-specific provider\n if ((window as any).rainbow) {\n this.provider = (window as any).rainbow\n } else if (windowEth?.providers && Array.isArray(windowEth.providers)) {\n const rainbowProvider = windowEth.providers.find((p: any) => p.isRainbow)\n if (rainbowProvider) {\n this.provider = rainbowProvider\n }\n } else if (windowEth?.isRainbow) {\n this.provider = windowEth\n }\n\n if (!this.provider) {\n throw new Error('Rainbow wallet not available. Please install Rainbow browser extension or use WalletConnect for mobile.')\n }\n }\n return this.provider\n }\n\n protected async signWithProvider(typedData: import('liquid-accounts-evm').SignTypedDataParams, evmAddress: string): Promise<string> {\n const provider = await this.getProvider()\n\n try {\n return await provider.request({\n method: 'eth_signTypedData_v4',\n params: [evmAddress, JSON.stringify(typedData)]\n } as any) as string\n } catch (error: any) {\n if (error.code === 4001) {\n throw new Error('User rejected the signing request')\n }\n throw error\n }\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n this.logger.info('Connecting...')\n\n await this.initializeProvider()\n await this.initializeEvmSdk()\n\n const provider = await this.getProvider()\n\n try {\n // Request wallet connection\n this.logger.info('Requesting Rainbow wallet connection...')\n const evmAddresses = await provider.request({\n method: 'eth_requestAccounts'\n }) as string[]\n\n if (evmAddresses.length === 0) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n this.logger.info(`Connected to ${evmAddresses.length} EVM account(s)`)\n\n const walletAccounts = await this.deriveAlgorandAccounts(evmAddresses)\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n this.logger.info('✅ Connected.', walletState)\n this.notifyConnect(evmAddresses[0], activeAccount.address)\n return walletAccounts\n } catch (error: any) {\n this.logger.error('Error connecting:', error.message)\n throw error\n }\n }\n\n public disconnect = async (): Promise<void> => {\n this.logger.info('Disconnecting...')\n\n // Clear provider reference to ensure fresh provider retrieval on reconnect\n this.provider = null\n this.evmAddressMap.clear()\n this.onDisconnect()\n\n this.logger.info('Disconnected')\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n this.logger.info('Resuming session...')\n\n await this.initializeProvider()\n await this.initializeEvmSdk()\n\n const provider = await this.getProvider()\n\n const evmAddresses = await provider.request({\n method: 'eth_accounts'\n }) as string[]\n\n if (evmAddresses.length === 0) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n await this.resumeWithAccounts(evmAddresses, (accounts) => {\n setAccounts(this.store, {\n walletId: this.id,\n accounts\n })\n })\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n this.onDisconnect()\n throw error\n }\n }\n}\n","/**\n * Web3Auth Wallet Provider for Algorand\n *\n * SECURITY CONSIDERATIONS:\n * - Web3Auth exposes the raw private key for non-EVM chains like Algorand\n * - This implementation uses SecureKeyContainer to minimize key exposure\n * - Keys are never persisted to localStorage or any storage\n * - Keys are cleared from memory immediately after signing operations\n * - Session resumption requires re-authentication (keys are not cached)\n *\n * @see https://web3auth.io/docs\n */\n\nimport algosdk from 'algosdk'\nimport { SecureKeyContainer, zeroMemory, deriveAlgorandAccountFromEd25519 } from 'src/secure-key'\nimport { StorageAdapter } from 'src/storage'\nimport { LOCAL_STORAGE_KEY, WalletState, addWallet, type State } from 'src/store'\nimport { flattenTxnGroup, isSignedTxn, isTransactionArray } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type { WalletAccount, WalletConstructor, WalletId } from 'src/wallets/types'\n\nconst LOCAL_STORAGE_WEB3AUTH_KEY = `${LOCAL_STORAGE_KEY}:web3auth`\n\n/** Metadata persisted to localStorage for Web3Auth session restoration */\ninterface Web3AuthMetadata {\n /** Whether the session was established using Single Factor Auth (SFA) vs modal */\n usingSFA: boolean\n}\n\n// Type definitions for Web3Auth (to avoid requiring the package at compile time)\n// These are minimal type definitions that match the actual Web3Auth API\ninterface IWeb3AuthProvider {\n request<T>(args: { method: string; params?: unknown }): Promise<T>\n}\n\ninterface IWeb3AuthUserInfo {\n email?: string\n name?: string\n profileImage?: string\n verifier?: string\n verifierId?: string\n typeOfLogin?: string\n aggregateVerifier?: string\n}\n\ninterface IWeb3AuthModal {\n initModal(): Promise<void>\n connect(): Promise<IWeb3AuthProvider | null>\n logout(): Promise<void>\n connected: boolean\n provider: IWeb3AuthProvider | null\n getUserInfo(): Promise<Partial<IWeb3AuthUserInfo>>\n}\n\n// Single Factor Auth SDK interface (for custom JWT auth)\ninterface IWeb3AuthSFA {\n init(): Promise<void>\n connect(params: {\n verifier: string\n verifierId: string\n idToken: string\n }): Promise<IWeb3AuthProvider | null>\n logout(): Promise<void>\n connected: boolean\n provider: IWeb3AuthProvider | null\n}\n\n/**\n * Parameters for custom authentication (e.g., Firebase, custom JWT)\n */\nexport interface Web3AuthCustomAuth {\n /**\n * Custom verifier name configured in Web3Auth dashboard\n */\n verifier: string\n\n /**\n * User identifier (e.g., email, Firebase UID)\n */\n verifierId: string\n\n /**\n * JWT token from your authentication provider (e.g., Firebase ID token)\n */\n idToken: string\n}\n\n/**\n * Credentials returned by getAuthCredentials callback\n */\nexport interface Web3AuthCredentials {\n /**\n * JWT token from your authentication provider (e.g., Firebase ID token)\n */\n idToken: string\n\n /**\n * User identifier (e.g., email, Firebase UID)\n */\n verifierId: string\n\n /**\n * Custom verifier name (optional, uses options.verifier if not provided)\n */\n verifier?: string\n}\n\n/**\n * Web3Auth configuration options\n */\nexport interface Web3AuthOptions {\n /**\n * Web3Auth Client ID from the dashboard\n * @see https://dashboard.web3auth.io\n */\n clientId: string\n\n /**\n * Web3Auth network (mainnet, testnet, sapphire_mainnet, sapphire_devnet, cyan, aqua)\n * @default 'sapphire_mainnet'\n */\n web3AuthNetwork?: 'mainnet' | 'testnet' | 'sapphire_mainnet' | 'sapphire_devnet' | 'cyan' | 'aqua'\n\n /**\n * Login provider to use (google, facebook, twitter, discord, etc.)\n * If not specified, the Web3Auth modal will be shown\n */\n loginProvider?:\n | 'google'\n | 'facebook'\n | 'twitter'\n | 'discord'\n | 'reddit'\n | 'twitch'\n | 'apple'\n | 'line'\n | 'github'\n | 'kakao'\n | 'linkedin'\n | 'weibo'\n | 'wechat'\n | 'email_passwordless'\n | 'sms_passwordless'\n\n /**\n * Login hint for email_passwordless or sms_passwordless\n */\n loginHint?: string\n\n /**\n * UI configuration for the Web3Auth modal\n */\n uiConfig?: {\n appName?: string\n appUrl?: string\n logoLight?: string\n logoDark?: string\n defaultLanguage?: string\n mode?: 'light' | 'dark' | 'auto'\n theme?: Record<string, string>\n }\n\n /**\n * Whether to use the popup flow instead of redirect\n * @default true\n */\n usePopup?: boolean\n\n /**\n * Default verifier name for custom authentication.\n * When set, connect() can be called with just { idToken, verifierId }\n */\n verifier?: string\n\n /**\n * Callback to get fresh authentication credentials when session expires.\n * Required for automatic re-authentication with Single Factor Auth (SFA).\n *\n * If not provided and the session expires, signTransactions() will throw\n * an error requiring the user to call connect() with fresh credentials.\n *\n * @example\n * ```typescript\n * getAuthCredentials: async () => {\n * const user = firebase.auth().currentUser\n * if (!user) throw new Error('Not logged in')\n * const idToken = await user.getIdToken(true)\n * return { idToken, verifierId: user.email || user.uid }\n * }\n * ```\n */\n getAuthCredentials?: () => Promise<Web3AuthCredentials>\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 40 40\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect fill=\"#0364FF\" width=\"40\" height=\"40\" rx=\"8\"/>\n <path fill=\"#FFFFFF\" d=\"M20 8c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12S26.627 8 20 8zm0 21.6c-5.302 0-9.6-4.298-9.6-9.6S14.698 10.4 20 10.4s9.6 4.298 9.6 9.6-4.298 9.6-9.6 9.6zm0-16.8c-3.976 0-7.2 3.224-7.2 7.2s3.224 7.2 7.2 7.2 7.2-3.224 7.2-7.2-3.224-7.2-7.2-7.2zm0 12c-2.651 0-4.8-2.149-4.8-4.8s2.149-4.8 4.8-4.8 4.8 2.149 4.8 4.8-2.149 4.8-4.8 4.8z\"/>\n</svg>\n`)}`\n\nexport class Web3AuthWallet extends BaseWallet {\n private web3auth: IWeb3AuthModal | null = null\n private web3authSFA: IWeb3AuthSFA | null = null\n private options: Web3AuthOptions\n private userInfo: Partial<IWeb3AuthUserInfo> | null = null\n\n /**\n * SECURITY: We store only the address, NEVER the private key.\n * Keys are fetched fresh from Web3Auth and immediately cleared after use.\n */\n private _address: string | null = null\n\n /** Track which SDK is currently in use */\n private usingSFA: boolean = false\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options,\n metadata = {}\n }: WalletConstructor<WalletId.WEB3AUTH>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n\n if (!options?.clientId) {\n this.logger.error('Missing required option: clientId')\n throw new Error('Missing required option: clientId')\n }\n\n this.options = {\n web3AuthNetwork: 'sapphire_mainnet',\n usePopup: true,\n ...options\n }\n this.store = store\n }\n\n private loadMetadata(): Web3AuthMetadata | null {\n const data = StorageAdapter.getItem(LOCAL_STORAGE_WEB3AUTH_KEY)\n if (!data) return null\n try {\n return JSON.parse(data) as Web3AuthMetadata\n } catch {\n return null\n }\n }\n\n private saveMetadata(): void {\n const metadata: Web3AuthMetadata = { usingSFA: this.usingSFA }\n StorageAdapter.setItem(LOCAL_STORAGE_WEB3AUTH_KEY, JSON.stringify(metadata))\n }\n\n private clearMetadata(): void {\n StorageAdapter.removeItem(LOCAL_STORAGE_WEB3AUTH_KEY)\n }\n\n static defaultMetadata = {\n name: 'Web3Auth',\n icon: ICON\n }\n\n /**\n * Initialize the Web3Auth client\n */\n private async initializeClient(): Promise<IWeb3AuthModal> {\n this.logger.info('Initializing Web3Auth client...')\n\n // Dynamic import to avoid bundling Web3Auth for users who don't need it\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let Web3Auth: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let CHAIN_NAMESPACES: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let WEB3AUTH_NETWORK: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let CommonPrivateKeyProvider: any\n\n try {\n // Dynamic imports - these are optional peer dependencies\n const modal = await import('@web3auth/modal')\n Web3Auth = modal.Web3Auth\n const base = await import('@web3auth/base')\n CHAIN_NAMESPACES = base.CHAIN_NAMESPACES\n WEB3AUTH_NETWORK = base.WEB3AUTH_NETWORK\n const baseProvider = await import('@web3auth/base-provider')\n CommonPrivateKeyProvider = baseProvider.CommonPrivateKeyProvider\n } catch (error) {\n this.logger.error(\n 'Failed to load Web3Auth. Make sure @web3auth/modal, @web3auth/base, and @web3auth/base-provider are installed.',\n error\n )\n throw new Error(\n 'Web3Auth packages not found. Please install @web3auth/modal, @web3auth/base, and @web3auth/base-provider'\n )\n }\n\n const chainConfig = {\n chainNamespace: CHAIN_NAMESPACES.OTHER,\n chainId: 'algorand',\n rpcTarget: 'https://mainnet-api.algonode.cloud', // Required by Web3Auth, not actually used for signing\n displayName: 'Algorand',\n blockExplorerUrl: 'https://lora.algokit.io/mainnet',\n ticker: 'ALGO',\n tickerName: 'Algorand'\n }\n\n const networkMap: Record<string, string> = {\n mainnet: WEB3AUTH_NETWORK.MAINNET,\n testnet: WEB3AUTH_NETWORK.TESTNET,\n sapphire_mainnet: WEB3AUTH_NETWORK.SAPPHIRE_MAINNET,\n sapphire_devnet: WEB3AUTH_NETWORK.SAPPHIRE_DEVNET,\n cyan: WEB3AUTH_NETWORK.CYAN,\n aqua: WEB3AUTH_NETWORK.AQUA\n }\n\n // Create private key provider for non-EVM chains (required in Web3Auth v9)\n const privateKeyProvider = new CommonPrivateKeyProvider({\n config: { chainConfig }\n })\n\n const web3auth = new Web3Auth({\n clientId: this.options.clientId,\n web3AuthNetwork: networkMap[this.options.web3AuthNetwork || 'sapphire_mainnet'] as any,\n privateKeyProvider,\n uiConfig: this.options.uiConfig\n })\n\n await web3auth.initModal()\n this.web3auth = web3auth\n this.logger.info('Web3Auth client initialized')\n\n return web3auth\n }\n\n /**\n * Initialize the Web3Auth Single Factor Auth client for custom JWT authentication\n */\n private async initializeSFAClient(): Promise<IWeb3AuthSFA> {\n this.logger.info('Initializing Web3Auth Single Factor Auth client...')\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let Web3Auth: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let WEB3AUTH_NETWORK: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let CommonPrivateKeyProvider: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let CHAIN_NAMESPACES: any\n\n try {\n // Dynamic imports - these are optional peer dependencies\n const sfa = await import('@web3auth/single-factor-auth')\n Web3Auth = sfa.Web3Auth\n const base = await import('@web3auth/base')\n WEB3AUTH_NETWORK = base.WEB3AUTH_NETWORK\n CHAIN_NAMESPACES = base.CHAIN_NAMESPACES\n const baseProvider = await import('@web3auth/base-provider')\n CommonPrivateKeyProvider = baseProvider.CommonPrivateKeyProvider\n } catch {\n this.logger.error(\n 'Failed to load Web3Auth SFA. Make sure @web3auth/single-factor-auth, @web3auth/base, and @web3auth/base-provider are installed.'\n )\n throw new Error(\n 'Web3Auth SFA packages not found. Please install @web3auth/single-factor-auth, @web3auth/base, and @web3auth/base-provider'\n )\n }\n\n const chainConfig = {\n chainNamespace: CHAIN_NAMESPACES.OTHER,\n chainId: 'algorand',\n rpcTarget: 'https://mainnet-api.algonode.cloud', // Required by Web3Auth, not actually used for signing\n displayName: 'Algorand',\n blockExplorerUrl: 'https://lora.algokit.io/mainnet',\n ticker: 'ALGO',\n tickerName: 'Algorand'\n }\n\n const networkMap: Record<string, string> = {\n mainnet: WEB3AUTH_NETWORK.MAINNET,\n testnet: WEB3AUTH_NETWORK.TESTNET,\n sapphire_mainnet: WEB3AUTH_NETWORK.SAPPHIRE_MAINNET,\n sapphire_devnet: WEB3AUTH_NETWORK.SAPPHIRE_DEVNET,\n cyan: WEB3AUTH_NETWORK.CYAN,\n aqua: WEB3AUTH_NETWORK.AQUA\n }\n\n // Create private key provider for non-EVM chains\n const privateKeyProvider = new CommonPrivateKeyProvider({\n config: { chainConfig }\n })\n\n const web3authSFA = new Web3Auth({\n clientId: this.options.clientId,\n web3AuthNetwork: networkMap[this.options.web3AuthNetwork || 'sapphire_mainnet'] as any,\n privateKeyProvider\n })\n\n await web3authSFA.init()\n this.web3authSFA = web3authSFA\n this.logger.info('Web3Auth SFA client initialized')\n\n return web3authSFA\n }\n\n /**\n * SECURITY: Fetch the private key from Web3Auth and return it in a SecureKeyContainer.\n * The caller MUST call container.clear() when done.\n *\n * @returns SecureKeyContainer holding the private key\n */\n private async getSecureKey(): Promise<SecureKeyContainer> {\n // Get the provider from either the modal SDK or SFA SDK\n const provider = this.usingSFA ? this.web3authSFA?.provider : this.web3auth?.provider\n\n if (!provider) {\n throw new Error('Web3Auth not connected')\n }\n\n this.logger.debug('Fetching private key from Web3Auth...')\n\n // Request the private key from Web3Auth\n // For non-EVM chains, Web3Auth returns the raw ed25519 private key\n const privateKeyHex = await provider.request<string>({\n method: 'private_key'\n })\n\n if (!privateKeyHex || typeof privateKeyHex !== 'string') {\n throw new Error('Failed to retrieve private key from Web3Auth')\n }\n\n // Convert hex string to Uint8Array\n const privateKeyBytes = this.hexToBytes(privateKeyHex)\n\n // SECURITY: Immediately clear the hex string from our scope\n // (The original string may still exist in Web3Auth's scope)\n\n // Wrap in SecureKeyContainer for safe handling\n const container = new SecureKeyContainer(privateKeyBytes)\n\n // SECURITY: Zero the local copy now that it's in the container\n zeroMemory(privateKeyBytes)\n\n this.logger.debug('Private key retrieved and secured')\n return container\n }\n\n /**\n * Convert a hex string to Uint8Array\n */\n private hexToBytes(hex: string): Uint8Array {\n // Remove 0x prefix if present\n const cleanHex = hex.startsWith('0x') ? hex.slice(2) : hex\n const bytes = new Uint8Array(cleanHex.length / 2)\n for (let i = 0; i < cleanHex.length; i += 2) {\n bytes[i / 2] = parseInt(cleanHex.slice(i, i + 2), 16)\n }\n return bytes\n }\n\n /**\n * Connect to Web3Auth\n *\n * @param args - Optional connection arguments\n * @param args.idToken - JWT token for custom authentication (e.g., Firebase ID token)\n * @param args.verifierId - User identifier for custom authentication (e.g., email, uid)\n * @param args.verifier - Custom verifier name (uses options.verifier if not provided)\n *\n * @example\n * // Standard modal connection\n * await wallet.connect()\n *\n * @example\n * // Custom authentication with Firebase\n * await wallet.connect({\n * idToken: firebaseIdToken,\n * verifierId: user.email,\n * verifier: 'my-firebase-verifier'\n * })\n */\n public connect = async (args?: {\n idToken?: string\n verifierId?: string\n verifier?: string\n }): Promise<WalletAccount[]> => {\n this.logger.info('Connecting to Web3Auth...')\n\n try {\n let provider: IWeb3AuthProvider | null\n\n // Check if custom authentication params are provided\n const idToken = args?.idToken\n const verifierId = args?.verifierId\n const verifier = args?.verifier || this.options.verifier\n\n if (idToken && verifierId) {\n // Custom authentication flow using Single Factor Auth (e.g., Firebase)\n if (!verifier) {\n throw new Error(\n 'Custom authentication requires a verifier. Provide it in connect() args or options.verifier'\n )\n }\n\n this.logger.info('Connecting with custom authentication (SFA)...', { verifier, verifierId })\n\n // Initialize the SFA client\n const web3authSFA = this.web3authSFA || (await this.initializeSFAClient())\n\n // If already connected, logout first to allow reconnection with potentially different credentials\n if (web3authSFA.connected) {\n this.logger.debug('SFA already connected, logging out first...')\n try {\n await web3authSFA.logout()\n } catch {\n // Ignore logout errors\n }\n }\n\n // Connect using Single Factor Auth - no modal, direct connection\n provider = await web3authSFA.connect({\n verifier,\n verifierId,\n idToken\n })\n\n this.usingSFA = true\n\n // SFA doesn't provide getUserInfo, use verifierId as display name\n this.userInfo = { email: verifierId }\n } else {\n // Standard modal connection\n const web3auth = this.web3auth || (await this.initializeClient())\n provider = await web3auth.connect()\n\n this.usingSFA = false\n\n // Get user info for display purposes (modal SDK only)\n this.userInfo = await web3auth.getUserInfo()\n this.logger.debug('User info retrieved', { email: this.userInfo.email })\n }\n\n if (!provider) {\n throw new Error('Failed to connect to Web3Auth')\n }\n\n // SECURITY: Get the key, derive the address, and immediately clear the key\n const keyContainer = await this.getSecureKey()\n\n try {\n const address = await keyContainer.useKey(async (secretKey) => {\n const account = await deriveAlgorandAccountFromEd25519(secretKey)\n // SECURITY: Zero the derived account's secret key immediately\n const addr = account.addr\n zeroMemory(account.sk)\n return addr\n })\n\n this._address = address\n } finally {\n // SECURITY: Always clear the key container\n keyContainer.clear()\n }\n\n const walletAccount: WalletAccount = {\n name: this.userInfo.name || this.userInfo.email || `${this.metadata.name} Account`,\n address: this._address\n }\n\n const walletState: WalletState = {\n accounts: [walletAccount],\n activeAccount: walletAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n // Save metadata only after successful connection\n this.saveMetadata()\n\n this.logger.info('Connected successfully', { address: this._address })\n return [walletAccount]\n } catch (error: any) {\n this.logger.error('Error connecting to Web3Auth:', error.message)\n throw error\n }\n }\n\n /**\n * Disconnect from Web3Auth\n */\n public disconnect = async (): Promise<void> => {\n this.logger.info('Disconnecting from Web3Auth...')\n\n try {\n if (this.usingSFA && this.web3authSFA?.connected) {\n await this.web3authSFA.logout()\n } else if (this.web3auth?.connected) {\n await this.web3auth.logout()\n }\n } catch (error: any) {\n this.logger.warn('Error during Web3Auth logout:', error.message)\n }\n\n // Clear local state\n this._address = null\n this.userInfo = null\n this.usingSFA = false\n this.clearMetadata()\n this.onDisconnect()\n\n this.logger.info('Disconnected')\n }\n\n /**\n * Resume session from cached state\n *\n * LAZY AUTHENTICATION: We do NOT connect to Web3Auth here.\n * We simply restore the cached address from localStorage.\n * Web3Auth connection is deferred until signTransactions() is called.\n */\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n const storedAccount = walletState.accounts[0]\n\n if (!storedAccount?.address) {\n this.logger.warn('No address found in cached session')\n this.onDisconnect()\n return\n }\n\n // Just restore the cached address - don't initialize Web3Auth\n this._address = storedAccount.address\n this.userInfo = { name: storedAccount.name }\n\n // Restore usingSFA flag from metadata\n const metadata = this.loadMetadata()\n if (metadata) {\n this.usingSFA = metadata.usingSFA\n }\n\n this.logger.info('Session restored from cache (lazy mode)', { address: this._address })\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n this.onDisconnect()\n throw error\n }\n }\n\n /**\n * Check if Web3Auth is currently connected with a valid session\n */\n private isWeb3AuthConnected(): boolean {\n if (this.usingSFA) {\n return Boolean(this.web3authSFA?.connected && this.web3authSFA?.provider)\n }\n return Boolean(this.web3auth?.connected && this.web3auth?.provider)\n }\n\n /**\n * Ensure Web3Auth is connected and ready for signing.\n * Re-authenticates if the session has expired.\n *\n * This is called lazily when signTransactions() is invoked,\n */\n private async ensureConnected(): Promise<void> {\n if (this.isWeb3AuthConnected()) {\n this.logger.debug('Web3Auth session still valid')\n return\n }\n\n this.logger.info('Web3Auth session expired or not initialized, re-authenticating...')\n\n if (this.usingSFA) {\n await this.reconnectSFA()\n } else {\n await this.reconnectModal()\n }\n }\n\n /**\n * Re-authenticate using Single Factor Auth (Firebase, custom JWT)\n *\n * Requires getAuthCredentials callback to be configured in options.\n * If the callback returns credentials for a different user, this will\n * disconnect the current wallet (the user logged out and back in as someone else).\n */\n private async reconnectSFA(): Promise<void> {\n if (!this.options.getAuthCredentials) {\n this.logger.error('Cannot re-authenticate: getAuthCredentials callback not configured')\n throw new Error(\n 'Web3Auth session expired. Configure getAuthCredentials option for automatic re-auth, ' +\n 'or call disconnect() and connect() with fresh credentials.'\n )\n }\n\n this.logger.info('Getting fresh credentials for SFA re-authentication...')\n\n let credentials: Web3AuthCredentials\n try {\n credentials = await this.options.getAuthCredentials()\n } catch (error: any) {\n // User is no longer authenticated with the identity provider (e.g., logged out of Firebase)\n this.logger.warn('Failed to get auth credentials, user may have logged out:', error.message)\n this.onDisconnect()\n throw new Error('Authentication provider session expired. Please log in again.')\n }\n\n // Initialize SFA client if needed\n const web3authSFA = this.web3authSFA || (await this.initializeSFAClient())\n\n // Logout first if still connected (stale session)\n if (web3authSFA.connected) {\n try {\n await web3authSFA.logout()\n } catch {\n // Ignore logout errors\n }\n }\n\n const verifier = credentials.verifier || this.options.verifier\n if (!verifier) {\n throw new Error('No verifier configured for SFA authentication')\n }\n\n // Connect with fresh credentials\n const provider = await web3authSFA.connect({\n verifier,\n verifierId: credentials.verifierId,\n idToken: credentials.idToken\n })\n\n if (!provider) {\n throw new Error('Failed to re-authenticate with Web3Auth SFA')\n }\n\n this.usingSFA = true\n this.saveMetadata()\n\n // Verify we got the same address (same user)\n await this.verifyAddressMatch()\n }\n\n /**\n * Re-authenticate using the Web3Auth modal\n *\n * Shows the Web3Auth login modal for the user to authenticate again.\n * If they log in as a different user, this will disconnect the current wallet.\n */\n private async reconnectModal(): Promise<void> {\n this.logger.info('Showing Web3Auth modal for re-authentication...')\n\n const web3auth = this.web3auth || (await this.initializeClient())\n\n // Logout first if still connected (stale session)\n if (web3auth.connected) {\n try {\n await web3auth.logout()\n } catch {\n // Ignore logout errors\n }\n }\n\n const provider = await web3auth.connect()\n\n if (!provider) {\n throw new Error('Re-authentication cancelled or failed')\n }\n\n this.usingSFA = false\n this.saveMetadata()\n\n // Get updated user info\n this.userInfo = await web3auth.getUserInfo()\n\n // Verify we got the same address (same user)\n await this.verifyAddressMatch()\n }\n\n /**\n * Verify that the current Web3Auth session matches the cached address.\n *\n * If the address doesn't match (user logged in as someone else),\n * this disconnects the wallet entirely - it's a different identity.\n */\n private async verifyAddressMatch(): Promise<void> {\n const keyContainer = await this.getSecureKey()\n\n try {\n const currentAddress = await keyContainer.useKey(async (secretKey) => {\n const account = await deriveAlgorandAccountFromEd25519(secretKey)\n const addr = account.addr\n zeroMemory(account.sk)\n return addr\n })\n\n if (currentAddress !== this._address) {\n this.logger.warn('Re-authenticated as different user, disconnecting wallet', {\n expected: this._address,\n actual: currentAddress\n })\n\n // Different user = different wallet. Full disconnect required.\n this.onDisconnect()\n\n throw new Error(\n `Re-authenticated as a different account. Expected ${this._address}, got ${currentAddress}. ` +\n 'Please connect again with the correct account.'\n )\n }\n\n this.logger.info('Address verified, session restored')\n } finally {\n keyContainer.clear()\n }\n }\n\n /**\n * Process transactions for signing\n */\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): algosdk.Transaction[] {\n const txnsToSign: algosdk.Transaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = signer === this._address\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push(txn)\n }\n })\n\n return txnsToSign\n }\n\n /**\n * Process encoded transactions for signing\n */\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): algosdk.Transaction[] {\n const txnsToSign: algosdk.Transaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && signer === this._address\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push(txn)\n }\n })\n\n return txnsToSign\n }\n\n /**\n * Sign transactions\n *\n * LAZY AUTHENTICATION: If the Web3Auth session has expired, this will\n * automatically re-authenticate before signing.\n *\n * SECURITY: The private key is fetched fresh, used for signing,\n * and immediately cleared from memory. The key is never stored\n * between signing operations.\n */\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n\n // Ensure Web3Auth is connected (re-authenticates if session expired)\n await this.ensureConnected()\n\n let txnsToSign: algosdk.Transaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n if (txnsToSign.length === 0) {\n this.logger.debug('No transactions to sign')\n return []\n }\n\n // SECURITY: Fetch key, sign, and immediately clear\n const keyContainer = await this.getSecureKey()\n let signedTxns: Uint8Array[] = []\n\n try {\n signedTxns = await keyContainer.useKey(async (secretKey) => {\n const account = await deriveAlgorandAccountFromEd25519(secretKey)\n\n try {\n // Sign all transactions\n const signed = txnsToSign.map((txn) => txn.signTxn(account.sk))\n return signed\n } finally {\n // SECURITY: Always zero the account's secret key\n zeroMemory(account.sk)\n }\n })\n } finally {\n // SECURITY: Always clear the key container\n keyContainer.clear()\n }\n\n this.logger.debug('Transactions signed successfully', { count: signedTxns.length })\n return signedTxns\n } catch (error: any) {\n this.logger.error('Error signing transactions:', error.message)\n throw error\n }\n }\n}\n","/**\n * Secure key handling utilities for managing sensitive cryptographic material.\n *\n * These utilities provide defense-in-depth for private key handling:\n * 1. Memory zeroing - Overwrites key material before releasing references\n * 2. Scoped key access - Keys are only available within controlled callbacks\n * 3. Automatic cleanup - Keys are cleared after use via try/finally patterns\n * 4. No persistence - Keys are never stored to disk/localStorage\n */\n\nimport { logger } from 'src/logger'\n\nconst secureLogger = logger.createScopedLogger('SecureKey')\n\n/**\n * Securely zeros out a Uint8Array by overwriting all bytes with zeros.\n * This helps prevent key material from lingering in memory.\n *\n * Note: JavaScript doesn't guarantee immediate memory clearing due to GC,\n * but this provides defense-in-depth by:\n * 1. Overwriting the buffer contents immediately\n * 2. Reducing the window where key material is accessible\n * 3. Preventing accidental key leakage through references\n */\nexport function zeroMemory(buffer: Uint8Array): void {\n if (!buffer || buffer.length === 0) return\n\n try {\n // Use crypto.getRandomValues first to prevent compiler optimizations\n // from removing the zeroing operation\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\n crypto.getRandomValues(buffer)\n }\n // Then zero out the buffer\n buffer.fill(0)\n } catch {\n // Fallback: manual zeroing if crypto is unavailable\n for (let i = 0; i < buffer.length; i++) {\n buffer[i] = 0\n }\n }\n}\n\n/**\n * Securely zeros out a string by creating a mutable copy and clearing it.\n * Returns an empty string. The original string in memory may still exist\n * due to string immutability in JS, but this clears any mutable references.\n */\nexport function zeroString(str: string): string {\n if (!str) return ''\n\n // Convert to array, zero it, and discard\n const arr = new Uint8Array(str.length)\n for (let i = 0; i < str.length; i++) {\n arr[i] = str.charCodeAt(i)\n }\n zeroMemory(arr)\n\n return ''\n}\n\n/**\n * A secure container for holding private key material.\n * Provides controlled access and automatic cleanup.\n */\nexport class SecureKeyContainer {\n private _secretKey: Uint8Array | null = null\n private _isCleared: boolean = false\n\n constructor(secretKey: Uint8Array) {\n // Create a copy to ensure we own the memory\n this._secretKey = new Uint8Array(secretKey)\n // Immediately zero the source if caller passes ownership\n // (caller should still zero their copy)\n }\n\n /**\n * Check if the key has been cleared\n */\n get isCleared(): boolean {\n return this._isCleared\n }\n\n /**\n * Execute a callback with access to the secret key.\n * The key is automatically cleared if an error occurs.\n */\n async useKey<T>(callback: (secretKey: Uint8Array) => Promise<T>): Promise<T> {\n if (this._isCleared || !this._secretKey) {\n throw new Error('SecureKeyContainer: Key has been cleared')\n }\n\n try {\n return await callback(this._secretKey)\n } catch (error) {\n // On error, clear immediately to prevent leakage\n this.clear()\n throw error\n }\n }\n\n /**\n * Execute a synchronous callback with access to the secret key.\n */\n useKeySync<T>(callback: (secretKey: Uint8Array) => T): T {\n if (this._isCleared || !this._secretKey) {\n throw new Error('SecureKeyContainer: Key has been cleared')\n }\n\n try {\n return callback(this._secretKey)\n } catch (error) {\n this.clear()\n throw error\n }\n }\n\n /**\n * Securely clear the key from memory.\n * This should be called when the key is no longer needed.\n */\n clear(): void {\n if (this._secretKey && !this._isCleared) {\n zeroMemory(this._secretKey)\n this._secretKey = null\n this._isCleared = true\n secureLogger.debug('Key material cleared from memory')\n }\n }\n}\n\n/**\n * Execute a function with a temporary secret key that is automatically\n * cleared after the function completes (success or error).\n *\n * This is the preferred pattern for one-time key operations.\n */\nexport async function withSecureKey<T>(\n secretKey: Uint8Array,\n callback: (container: SecureKeyContainer) => Promise<T>\n): Promise<T> {\n const container = new SecureKeyContainer(secretKey)\n\n try {\n return await callback(container)\n } finally {\n container.clear()\n }\n}\n\n/**\n * Synchronous version of withSecureKey for non-async operations.\n */\nexport function withSecureKeySync<T>(\n secretKey: Uint8Array,\n callback: (container: SecureKeyContainer) => T\n): T {\n const container = new SecureKeyContainer(secretKey)\n\n try {\n return callback(container)\n } finally {\n container.clear()\n }\n}\n\n/**\n * Derive an Algorand account from an ed25519 private key seed.\n * The input key should be 32 bytes (seed).\n *\n * SECURITY: The returned account contains a secret key reference.\n * The caller is responsible for zeroing account.sk after use.\n */\nexport async function deriveAlgorandAccountFromEd25519(\n ed25519Seed: Uint8Array\n): Promise<{ addr: string; sk: Uint8Array }> {\n // Web3Auth returns a 32-byte ed25519 seed (private key)\n // We need to derive the full 64-byte secret key and the Algorand address\n\n if (ed25519Seed.length !== 32) {\n throw new Error(`Invalid ed25519 seed length: expected 32 bytes, got ${ed25519Seed.length}`)\n }\n\n // Use tweetnacl directly for ed25519 key derivation\n // This is the same library algosdk uses internally but this approach avoids the seed to 25-word mnemonic conversion\n // and then mnemonic to secret key. Because strings in JS are immutable, this avoids a dangerous security issue of\n // not being able to securely erase the mnemonics.\n const nacl = await import('tweetnacl')\n const algosdk = await import('algosdk')\n\n // Create a nacl keypair from the seed\n // tweetnacl's sign.keyPair.fromSeed returns: { publicKey, secretKey }\n // where secretKey is 64 bytes: seed (32) + publicKey (32)\n const keyPair = nacl.sign.keyPair.fromSeed(ed25519Seed)\n\n // Derive the Algorand address from the public key\n const address = algosdk.encodeAddress(keyPair.publicKey)\n\n return {\n addr: address,\n sk: keyPair.secretKey\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, type State } from 'src/store'\nimport {\n base64ToByteArray,\n byteArrayToBase64,\n flattenTxnGroup,\n isSignedTxn,\n isTransactionArray\n} from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type {\n WalletAccount,\n WalletConstructor,\n WalletId,\n WalletTransaction\n} from 'src/wallets/types'\n\nexport interface W3WalletProvider {\n isConnected: () => Promise<boolean>\n account: () => Promise<WalletAccount>\n signTxns: (transactions: WalletTransaction[]) => Promise<(string | null)[]>\n}\n\ntype WindowExtended = { w3walletAlgorand: W3WalletProvider } & Window & typeof globalThis\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg width=\"860\" height=\"860\" viewBox=\"0 0 860 860\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"860\" height=\"860\" rx=\"30\" fill=\"#151923\"/>\n <path d=\"M766 207L496.627 623.406C463.521 675.336 382.014 652.248 382.014 590.941V432.568L260.638 623.28C227.559 675.255 146 652.186 146 590.854V274.844H234.646V499.761L356.022 309.049C389.101 257.074 470.66 280.143 470.66 341.475V499.978L660.146 207L766 207Z\" fill=\"#4BB7D1\"/>\n</svg>\n`)}`\n\nexport class W3Wallet extends BaseWallet {\n private client: W3WalletProvider | null = null\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n metadata = {}\n }: WalletConstructor<WalletId.W3_WALLET>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'W3 Wallet',\n icon: ICON\n }\n\n private async initializeClient(): Promise<W3WalletProvider> {\n this.logger.info('Initializing client...')\n if (\n typeof window === 'undefined' ||\n (window as WindowExtended).w3walletAlgorand === undefined\n ) {\n this.logger.error('W3 Wallet is not available.')\n throw new Error('W3 Wallet is not available.')\n }\n const client = (window as WindowExtended).w3walletAlgorand\n this.client = client\n this.logger.info('Client initialized')\n return client\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n this.logger.info('Connecting...')\n const client = this.client || (await this.initializeClient())\n\n const activeAccount = await client.account()\n\n const walletState: WalletState = {\n accounts: [activeAccount],\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n this.logger.info('✅ Connected.', walletState)\n return [activeAccount]\n }\n\n public disconnect = async (): Promise<void> => {\n this.logger.info('Disconnecting...')\n this.onDisconnect()\n this.logger.info('Disconnected.')\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n this.logger.info('Resuming session...')\n const client = await this.initializeClient()\n const isConnected = await client.isConnected()\n\n if (!isConnected) {\n this.logger.error('W3 Wallet is not connected.')\n throw new Error('W3 Wallet is not connected.')\n }\n this.logger.info('Session resumed')\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n let txnsToSign: WalletTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n this.logger.debug('Sending processed transactions to wallet...', txnsToSign)\n\n // Sign transactions\n const signTxnsResult = await client.signTxns(txnsToSign)\n this.logger.debug('Received signed transactions from wallet', signTxnsResult)\n\n // Convert base64 to Uint8Array\n const result = signTxnsResult.map((value) => {\n if (value === null) {\n return null\n }\n return base64ToByteArray(value)\n })\n\n this.logger.debug('Transactions signed successfully', result)\n return result\n } catch (error: any) {\n this.logger.error('Error signing transactions:', error.message)\n throw error\n }\n }\n}\n","/**\n * Fallback configuration for Webpack to handle optional wallet dependencies.\n * This allows applications to build without these packages installed,\n * enabling users to include only the wallet packages they need.\n * Each package is set to 'false', which means Webpack will provide an empty module\n * if the package is not found, preventing build errors for unused wallets.\n */\nexport const webpackFallback = {\n '@agoralabs-sh/avm-web-provider': false,\n '@blockshake/defly-connect': false,\n '@magic-ext/algorand': false,\n '@perawallet/connect': false,\n '@walletconnect/modal': false,\n '@walletconnect/sign-client': false,\n '@web3auth/base': false,\n '@web3auth/base-provider': false,\n '@web3auth/modal': false,\n '@web3auth/single-factor-auth': false,\n 'lute-connect': false,\n 'magic-sdk': false\n}\n"],"mappings":"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ACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,MACtC;AAEA,eAAS,qBAAqB,IAAI,IAAIxB,IAAG,GAAG;AAC1C,YAAI,KAAK,IAAI,WAAW,EAAE,GAAG,KAAK,IAAI,WAAW,EAAE,GAC/C,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KACnC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KACnC,IAAI,IAAI,GAAGiB,IAAGvB,IAAG,GAAG,GAAGO,IAAG,GAAG;AAEjC,YAAI,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GAEV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC;AAEd,YAAI,MAAM;AACV,eAAO,KAAK,KAAK;AACf,eAAK,IAAI,GAAG,IAAI,IAAI,KAAK;AACvB,YAAAgB,KAAI,IAAI,IAAI;AACZ,eAAG,CAAC,IAAKjB,GAAEiB,KAAE,CAAC,KAAK,KAAOjB,GAAEiB,KAAE,CAAC,KAAK,KAAOjB,GAAEiB,KAAE,CAAC,KAAK,IAAKjB,GAAEiB,KAAE,CAAC;AAC/D,eAAG,CAAC,IAAKjB,GAAEiB,KAAE,CAAC,KAAK,KAAOjB,GAAEiB,KAAE,CAAC,KAAK,KAAOjB,GAAEiB,KAAE,CAAC,KAAK,IAAKjB,GAAEiB,KAAE,CAAC;AAAA,UACjE;AACA,eAAK,IAAI,GAAG,IAAI,IAAI,KAAK;AACvB,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AAEN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AAGN,YAAAvB,KAAI;AACJ,gBAAI;AAEJ,gBAAI,IAAI;AAAQ,YAAAO,KAAI,MAAM;AAC1B,gBAAIP,KAAI;AAAQ,gBAAIA,OAAM;AAG1B,YAAAA,MAAM,QAAQ,KAAO,OAAQ,KAAG,OAAU,QAAQ,KAAO,OAAQ,KAAG,OAAU,QAAS,KAAG,KAAQ,OAAQ,MAAI,KAAG;AACjH,iBAAM,QAAQ,KAAO,OAAQ,KAAG,OAAU,QAAQ,KAAO,OAAQ,KAAG,OAAU,QAAS,KAAG,KAAQ,OAAQ,MAAI,KAAG;AAEjH,iBAAK,IAAI;AAAQ,YAAAO,MAAK,MAAM;AAC5B,iBAAKP,KAAI;AAAQ,iBAAKA,OAAM;AAG5B,YAAAA,KAAK,MAAM,MAAQ,CAAC,MAAM;AAC1B,gBAAK,MAAM,MAAQ,CAAC,MAAM;AAE1B,iBAAK,IAAI;AAAQ,YAAAO,MAAK,MAAM;AAC5B,iBAAKP,KAAI;AAAQ,iBAAKA,OAAM;AAG5B,YAAAA,KAAI8B,GAAE,IAAE,CAAC;AACT,gBAAIA,GAAE,IAAE,IAAE,CAAC;AAEX,iBAAK,IAAI;AAAQ,YAAAvB,MAAK,MAAM;AAC5B,iBAAKP,KAAI;AAAQ,iBAAKA,OAAM;AAG5B,YAAAA,KAAI,GAAG,IAAE,EAAE;AACX,gBAAI,GAAG,IAAE,EAAE;AAEX,iBAAK,IAAI;AAAQ,YAAAO,MAAK,MAAM;AAC5B,iBAAKP,KAAI;AAAQ,iBAAKA,OAAM;AAE5B,YAAAO,MAAK,MAAM;AACX,iBAAKA,OAAM;AACX,iBAAK,MAAM;AAEX,iBAAK,IAAI,QAAS,KAAK;AACvB,iBAAK,IAAI,QAASA,MAAK;AAGvB,YAAAP,KAAI;AACJ,gBAAI;AAEJ,gBAAI,IAAI;AAAQ,YAAAO,KAAI,MAAM;AAC1B,gBAAIP,KAAI;AAAQ,gBAAIA,OAAM;AAG1B,YAAAA,MAAM,QAAQ,KAAO,OAAQ,KAAG,OAAU,QAAS,KAAG,KAAQ,OAAQ,MAAI,KAAG,QAAW,QAAS,KAAG,KAAQ,OAAQ,MAAI,KAAG;AAC3H,iBAAM,QAAQ,KAAO,OAAQ,KAAG,OAAU,QAAS,KAAG,KAAQ,OAAQ,MAAI,KAAG,QAAW,QAAS,KAAG,KAAQ,OAAQ,MAAI,KAAG;AAE3H,iBAAK,IAAI;AAAQ,YAAAO,MAAK,MAAM;AAC5B,iBAAKP,KAAI;AAAQ,iBAAKA,OAAM;AAG5B,YAAAA,KAAK,MAAM,MAAQ,MAAM,MAAQ,MAAM;AACvC,gBAAK,MAAM,MAAQ,MAAM,MAAQ,MAAM;AAEvC,iBAAK,IAAI;AAAQ,YAAAO,MAAK,MAAM;AAC5B,iBAAKP,KAAI;AAAQ,iBAAKA,OAAM;AAE5B,YAAAO,MAAK,MAAM;AACX,iBAAKA,OAAM;AACX,iBAAK,MAAM;AAEX,kBAAO,IAAI,QAAW,KAAK;AAC3B,kBAAO,IAAI,QAAWA,MAAK;AAG3B,YAAAP,KAAI;AACJ,gBAAI;AAEJ,gBAAI,IAAI;AAAQ,YAAAO,KAAI,MAAM;AAC1B,gBAAIP,KAAI;AAAQ,gBAAIA,OAAM;AAE1B,YAAAA,KAAI;AACJ,gBAAI;AAEJ,iBAAK,IAAI;AAAQ,YAAAO,MAAK,MAAM;AAC5B,iBAAKP,KAAI;AAAQ,iBAAKA,OAAM;AAE5B,YAAAO,MAAK,MAAM;AACX,iBAAKA,OAAM;AACX,iBAAK,MAAM;AAEX,kBAAO,IAAI,QAAW,KAAK;AAC3B,kBAAO,IAAI,QAAWA,MAAK;AAE3B,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AAEN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AAEN,gBAAI,IAAE,OAAO,IAAI;AACf,mBAAKgB,KAAI,GAAGA,KAAI,IAAIA,MAAK;AAEvB,gBAAAvB,KAAI,GAAGuB,EAAC;AACR,oBAAI,GAAGA,EAAC;AAER,oBAAI,IAAI;AAAQ,gBAAAhB,KAAI,MAAM;AAC1B,oBAAIP,KAAI;AAAQ,oBAAIA,OAAM;AAE1B,gBAAAA,KAAI,IAAIuB,KAAE,KAAG,EAAE;AACf,oBAAI,IAAIA,KAAE,KAAG,EAAE;AAEf,qBAAK,IAAI;AAAQ,gBAAAhB,MAAK,MAAM;AAC5B,qBAAKP,KAAI;AAAQ,qBAAKA,OAAM;AAG5B,qBAAK,IAAIuB,KAAE,KAAG,EAAE;AAChB,qBAAK,IAAIA,KAAE,KAAG,EAAE;AAChB,gBAAAvB,MAAM,OAAO,IAAM,MAAO,KAAG,MAAS,OAAO,IAAM,MAAO,KAAG,KAAQ,OAAO;AAC5E,qBAAM,OAAO,IAAM,MAAO,KAAG,MAAS,OAAO,IAAM,MAAO,KAAG,MAAS,OAAO,IAAM,MAAO,KAAG;AAE7F,qBAAK,IAAI;AAAQ,gBAAAO,MAAK,MAAM;AAC5B,qBAAKP,KAAI;AAAQ,qBAAKA,OAAM;AAG5B,qBAAK,IAAIuB,KAAE,MAAI,EAAE;AACjB,qBAAK,IAAIA,KAAE,MAAI,EAAE;AACjB,gBAAAvB,MAAM,OAAO,KAAO,MAAO,KAAG,OAAU,OAAQ,KAAG,KAAQ,MAAO,MAAI,KAAG,OAAU,OAAO;AAC1F,qBAAM,OAAO,KAAO,MAAO,KAAG,OAAU,OAAQ,KAAG,KAAQ,MAAO,MAAI,KAAG,QAAW,OAAO,IAAM,MAAO,KAAG;AAE3G,qBAAK,IAAI;AAAQ,gBAAAO,MAAK,MAAM;AAC5B,qBAAKP,KAAI;AAAQ,qBAAKA,OAAM;AAE5B,gBAAAO,MAAK,MAAM;AACX,qBAAKA,OAAM;AACX,qBAAK,MAAM;AAEX,mBAAGgB,EAAC,IAAK,IAAI,QAAW,KAAK;AAC7B,mBAAGA,EAAC,IAAK,IAAI,QAAWhB,MAAK;AAAA,cAC/B;AAAA,YACF;AAAA,UACF;AAGA,UAAAP,KAAI;AACJ,cAAI;AAEJ,cAAI,IAAI;AAAQ,UAAAO,KAAI,MAAM;AAC1B,cAAIP,KAAI;AAAQ,cAAIA,OAAM;AAE1B,UAAAA,KAAI,GAAG,CAAC;AACR,cAAI,GAAG,CAAC;AAER,eAAK,IAAI;AAAQ,UAAAO,MAAK,MAAM;AAC5B,eAAKP,KAAI;AAAQ,eAAKA,OAAM;AAE5B,UAAAO,MAAK,MAAM;AACX,eAAKA,OAAM;AACX,eAAK,MAAM;AAEX,aAAG,CAAC,IAAI,MAAO,IAAI,QAAW,KAAK;AACnC,aAAG,CAAC,IAAI,MAAO,IAAI,QAAWA,MAAK;AAEnC,UAAAP,KAAI;AACJ,cAAI;AAEJ,cAAI,IAAI;AAAQ,UAAAO,KAAI,MAAM;AAC1B,cAAIP,KAAI;AAAQ,cAAIA,OAAM;AAE1B,UAAAA,KAAI,GAAG,CAAC;AACR,cAAI,GAAG,CAAC;AAER,eAAK,IAAI;AAAQ,UAAAO,MAAK,MAAM;AAC5B,eAAKP,KAAI;AAAQ,eAAKA,OAAM;AAE5B,UAAAO,MAAK,MAAM;AACX,eAAKA,OAAM;AACX,eAAK,MAAM;AAEX,aAAG,CAAC,IAAI,MAAO,IAAI,QAAW,KAAK;AACnC,aAAG,CAAC,IAAI,MAAO,IAAI,QAAWA,MAAK;AAEnC,UAAAP,KAAI;AACJ,cAAI;AAEJ,cAAI,IAAI;AAAQ,UAAAO,KAAI,MAAM;AAC1B,cAAIP,KAAI;AAAQ,cAAIA,OAAM;AAE1B,UAAAA,KAAI,GAAG,CAAC;AACR,cAAI,GAAG,CAAC;AAER,eAAK,IAAI;AAAQ,UAAAO,MAAK,MAAM;AAC5B,eAAKP,KAAI;AAAQ,eAAKA,OAAM;AAE5B,UAAAO,MAAK,MAAM;AACX,eAAKA,OAAM;AACX,eAAK,MAAM;AAEX,aAAG,CAAC,IAAI,MAAO,IAAI,QAAW,KAAK;AACnC,aAAG,CAAC,IAAI,MAAO,IAAI,QAAWA,MAAK;AAEnC,UAAAP,KAAI;AACJ,cAAI;AAEJ,cAAI,IAAI;AAAQ,UAAAO,KAAI,MAAM;AAC1B,cAAIP,KAAI;AAAQ,cAAIA,OAAM;AAE1B,UAAAA,KAAI,GAAG,CAAC;AACR,cAAI,GAAG,CAAC;AAER,eAAK,IAAI;AAAQ,UAAAO,MAAK,MAAM;AAC5B,eAAKP,KAAI;AAAQ,eAAKA,OAAM;AAE5B,UAAAO,MAAK,MAAM;AACX,eAAKA,OAAM;AACX,eAAK,MAAM;AAEX,aAAG,CAAC,IAAI,MAAO,IAAI,QAAW,KAAK;AACnC,aAAG,CAAC,IAAI,MAAO,IAAI,QAAWA,MAAK;AAEnC,UAAAP,KAAI;AACJ,cAAI;AAEJ,cAAI,IAAI;AAAQ,UAAAO,KAAI,MAAM;AAC1B,cAAIP,KAAI;AAAQ,cAAIA,OAAM;AAE1B,UAAAA,KAAI,GAAG,CAAC;AACR,cAAI,GAAG,CAAC;AAER,eAAK,IAAI;AAAQ,UAAAO,MAAK,MAAM;AAC5B,eAAKP,KAAI;AAAQ,eAAKA,OAAM;AAE5B,UAAAO,MAAK,MAAM;AACX,eAAKA,OAAM;AACX,eAAK,MAAM;AAEX,aAAG,CAAC,IAAI,MAAO,IAAI,QAAW,KAAK;AACnC,aAAG,CAAC,IAAI,MAAO,IAAI,QAAWA,MAAK;AAEnC,UAAAP,KAAI;AACJ,cAAI;AAEJ,cAAI,IAAI;AAAQ,UAAAO,KAAI,MAAM;AAC1B,cAAIP,KAAI;AAAQ,cAAIA,OAAM;AAE1B,UAAAA,KAAI,GAAG,CAAC;AACR,cAAI,GAAG,CAAC;AAER,eAAK,IAAI;AAAQ,UAAAO,MAAK,MAAM;AAC5B,eAAKP,KAAI;AAAQ,eAAKA,OAAM;AAE5B,UAAAO,MAAK,MAAM;AACX,eAAKA,OAAM;AACX,eAAK,MAAM;AAEX,aAAG,CAAC,IAAI,MAAO,IAAI,QAAW,KAAK;AACnC,aAAG,CAAC,IAAI,MAAO,IAAI,QAAWA,MAAK;AAEnC,UAAAP,KAAI;AACJ,cAAI;AAEJ,cAAI,IAAI;AAAQ,UAAAO,KAAI,MAAM;AAC1B,cAAIP,KAAI;AAAQ,cAAIA,OAAM;AAE1B,UAAAA,KAAI,GAAG,CAAC;AACR,cAAI,GAAG,CAAC;AAER,eAAK,IAAI;AAAQ,UAAAO,MAAK,MAAM;AAC5B,eAAKP,KAAI;AAAQ,eAAKA,OAAM;AAE5B,UAAAO,MAAK,MAAM;AACX,eAAKA,OAAM;AACX,eAAK,MAAM;AAEX,aAAG,CAAC,IAAI,MAAO,IAAI,QAAW,KAAK;AACnC,aAAG,CAAC,IAAI,MAAO,IAAI,QAAWA,MAAK;AAEnC,UAAAP,KAAI;AACJ,cAAI;AAEJ,cAAI,IAAI;AAAQ,UAAAO,KAAI,MAAM;AAC1B,cAAIP,KAAI;AAAQ,cAAIA,OAAM;AAE1B,UAAAA,KAAI,GAAG,CAAC;AACR,cAAI,GAAG,CAAC;AAER,eAAK,IAAI;AAAQ,UAAAO,MAAK,MAAM;AAC5B,eAAKP,KAAI;AAAQ,eAAKA,OAAM;AAE5B,UAAAO,MAAK,MAAM;AACX,eAAKA,OAAM;AACX,eAAK,MAAM;AAEX,aAAG,CAAC,IAAI,MAAO,IAAI,QAAW,KAAK;AACnC,aAAG,CAAC,IAAI,MAAO,IAAI,QAAWA,MAAK;AAEnC,iBAAO;AACP,eAAK;AAAA,QACP;AAEA,eAAO;AAAA,MACT;AAEA,eAAS,YAAY,KAAKD,IAAG,GAAG;AAC9B,YAAI,KAAK,IAAI,WAAW,CAAC,GACrB,KAAK,IAAI,WAAW,CAAC,GACrBP,KAAI,IAAI,WAAW,GAAG,GACtB,GAAGQ,KAAI;AAEX,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AAER,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AAER,6BAAqB,IAAI,IAAID,IAAG,CAAC;AACjC,aAAK;AAEL,aAAK,IAAI,GAAG,IAAI,GAAG,IAAK,CAAAP,GAAE,CAAC,IAAIO,GAAEC,KAAE,IAAE,CAAC;AACtC,QAAAR,GAAE,CAAC,IAAI;AAEP,YAAI,MAAI,OAAK,IAAE,MAAI,IAAE;AACrB,QAAAA,GAAE,IAAE,CAAC,IAAI;AACT,aAAKA,IAAG,IAAE,GAAKQ,KAAI,YAAc,GAAGA,MAAK,CAAC;AAC1C,6BAAqB,IAAI,IAAIR,IAAG,CAAC;AAEjC,aAAK,IAAI,GAAG,IAAI,GAAG,IAAK,MAAK,KAAK,IAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAEnD,eAAO;AAAA,MACT;AAEA,eAAS,IAAIG,IAAGoB,IAAG;AACjB,YAAI,IAAI,GAAG,GAAGf,KAAI,GAAG,GAAG,IAAI,GAAG,GAC3B,IAAI,GAAG,GAAG,IAAI,GAAG,GAAGa,KAAI,GAAG,GAC3BD,KAAI,GAAG,GAAGnB,KAAI,GAAG,GAAG,IAAI,GAAG;AAE/B,QAAAyB,GAAE,GAAGvB,GAAE,CAAC,GAAGA,GAAE,CAAC,CAAC;AACf,QAAAuB,GAAE,GAAGH,GAAE,CAAC,GAAGA,GAAE,CAAC,CAAC;AACf,QAAAI,GAAE,GAAG,GAAG,CAAC;AACT,QAAAF,GAAEjB,IAAGL,GAAE,CAAC,GAAGA,GAAE,CAAC,CAAC;AACf,QAAAsB,GAAE,GAAGF,GAAE,CAAC,GAAGA,GAAE,CAAC,CAAC;AACf,QAAAI,GAAEnB,IAAGA,IAAG,CAAC;AACT,QAAAmB,GAAE,GAAGxB,GAAE,CAAC,GAAGoB,GAAE,CAAC,CAAC;AACf,QAAAI,GAAE,GAAG,GAAG/B,GAAE;AACV,QAAA+B,GAAE,GAAGxB,GAAE,CAAC,GAAGoB,GAAE,CAAC,CAAC;AACf,QAAAE,GAAE,GAAG,GAAG,CAAC;AACT,QAAAC,GAAE,GAAGlB,IAAG,CAAC;AACT,QAAAkB,GAAEL,IAAG,GAAG,CAAC;AACT,QAAAI,GAAEL,IAAG,GAAG,CAAC;AACT,QAAAK,GAAExB,IAAGO,IAAG,CAAC;AAET,QAAAmB,GAAExB,GAAE,CAAC,GAAG,GAAGkB,EAAC;AACZ,QAAAM,GAAExB,GAAE,CAAC,GAAGF,IAAGmB,EAAC;AACZ,QAAAO,GAAExB,GAAE,CAAC,GAAGiB,IAAGC,EAAC;AACZ,QAAAM,GAAExB,GAAE,CAAC,GAAG,GAAGF,EAAC;AAAA,MACd;AAEA,eAAS,MAAME,IAAGoB,IAAGf,IAAG;AACtB,YAAI;AACJ,aAAK,IAAI,GAAG,IAAI,GAAG,KAAK;AACtB,mBAASL,GAAE,CAAC,GAAGoB,GAAE,CAAC,GAAGf,EAAC;AAAA,QACxB;AAAA,MACF;AAEA,eAAS,KAAKd,KAAGS,IAAG;AAClB,YAAI,KAAK,GAAG,GAAG,KAAK,GAAG,GAAG,KAAK,GAAG;AAClC,iBAAS,IAAIA,GAAE,CAAC,CAAC;AACjB,QAAAwB,GAAE,IAAIxB,GAAE,CAAC,GAAG,EAAE;AACd,QAAAwB,GAAE,IAAIxB,GAAE,CAAC,GAAG,EAAE;AACd,kBAAUT,KAAG,EAAE;AACf,QAAAA,IAAE,EAAE,KAAK,SAAS,EAAE,KAAK;AAAA,MAC3B;AAEA,eAAS,WAAWS,IAAGoB,IAAG,GAAG;AAC3B,YAAIf,IAAG;AACP,iBAASL,GAAE,CAAC,GAAG,GAAG;AAClB,iBAASA,GAAE,CAAC,GAAG,GAAG;AAClB,iBAASA,GAAE,CAAC,GAAG,GAAG;AAClB,iBAASA,GAAE,CAAC,GAAG,GAAG;AAClB,aAAK,IAAI,KAAK,KAAK,GAAG,EAAE,GAAG;AACzB,UAAAK,KAAK,EAAG,IAAE,IAAG,CAAC,MAAM,IAAE,KAAM;AAC5B,gBAAML,IAAGoB,IAAGf,EAAC;AACb,cAAIe,IAAGpB,EAAC;AACR,cAAIA,IAAGA,EAAC;AACR,gBAAMA,IAAGoB,IAAGf,EAAC;AAAA,QACf;AAAA,MACF;AAEA,eAAS,WAAWL,IAAG,GAAG;AACxB,YAAIoB,KAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/B,iBAASA,GAAE,CAAC,GAAG1B,EAAC;AAChB,iBAAS0B,GAAE,CAAC,GAAGzB,EAAC;AAChB,iBAASyB,GAAE,CAAC,GAAG,GAAG;AAClB,QAAAI,GAAEJ,GAAE,CAAC,GAAG1B,IAAGC,EAAC;AACZ,mBAAWK,IAAGoB,IAAG,CAAC;AAAA,MACpB;AAEA,eAAS,oBAAoB,IAAI,IAAI,QAAQ;AAC3C,YAAI,IAAI,IAAI,WAAW,EAAE;AACzB,YAAIpB,KAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/B,YAAI;AAEJ,YAAI,CAAC,OAAQ,aAAY,IAAI,EAAE;AAC/B,oBAAY,GAAG,IAAI,EAAE;AACrB,UAAE,CAAC,KAAK;AACR,UAAE,EAAE,KAAK;AACT,UAAE,EAAE,KAAK;AAET,mBAAWA,IAAG,CAAC;AACf,aAAK,IAAIA,EAAC;AAEV,aAAK,IAAI,GAAG,IAAI,IAAI,IAAK,IAAG,IAAE,EAAE,IAAI,GAAG,CAAC;AACxC,eAAO;AAAA,MACT;AAEA,UAAI6B,KAAI,IAAI,aAAa,CAAC,KAAM,KAAM,KAAM,IAAM,IAAM,IAAM,IAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAI,CAAC;AAE5K,eAAS,KAAKtC,KAAGM,IAAG;AAClB,YAAI,OAAO,GAAGwB,IAAGpB;AACjB,aAAK,IAAI,IAAI,KAAK,IAAI,EAAE,GAAG;AACzB,kBAAQ;AACR,eAAKoB,KAAI,IAAI,IAAIpB,KAAI,IAAI,IAAIoB,KAAIpB,IAAG,EAAEoB,IAAG;AACvC,YAAAxB,GAAEwB,EAAC,KAAK,QAAQ,KAAKxB,GAAE,CAAC,IAAIgC,GAAER,MAAK,IAAI,GAAG;AAC1C,oBAAQ,KAAK,OAAOxB,GAAEwB,EAAC,IAAI,OAAO,GAAG;AACrC,YAAAxB,GAAEwB,EAAC,KAAK,QAAQ;AAAA,UAClB;AACA,UAAAxB,GAAEwB,EAAC,KAAK;AACR,UAAAxB,GAAE,CAAC,IAAI;AAAA,QACT;AACA,gBAAQ;AACR,aAAKwB,KAAI,GAAGA,KAAI,IAAIA,MAAK;AACvB,UAAAxB,GAAEwB,EAAC,KAAK,SAASxB,GAAE,EAAE,KAAK,KAAKgC,GAAER,EAAC;AAClC,kBAAQxB,GAAEwB,EAAC,KAAK;AAChB,UAAAxB,GAAEwB,EAAC,KAAK;AAAA,QACV;AACA,aAAKA,KAAI,GAAGA,KAAI,IAAIA,KAAK,CAAAxB,GAAEwB,EAAC,KAAK,QAAQQ,GAAER,EAAC;AAC5C,aAAK,IAAI,GAAG,IAAI,IAAI,KAAK;AACvB,UAAAxB,GAAE,IAAE,CAAC,KAAKA,GAAE,CAAC,KAAK;AAClB,UAAAN,IAAE,CAAC,IAAIM,GAAE,CAAC,IAAI;AAAA,QAChB;AAAA,MACF;AAEA,eAAS,OAAON,KAAG;AACjB,YAAIM,KAAI,IAAI,aAAa,EAAE,GAAG;AAC9B,aAAK,IAAI,GAAG,IAAI,IAAI,IAAK,CAAAA,GAAE,CAAC,IAAIN,IAAE,CAAC;AACnC,aAAK,IAAI,GAAG,IAAI,IAAI,IAAK,CAAAA,IAAE,CAAC,IAAI;AAChC,aAAKA,KAAGM,EAAC;AAAA,MACX;AAGA,eAAS,YAAY,IAAIO,IAAG,GAAG,IAAI;AACjC,YAAI,IAAI,IAAI,WAAW,EAAE,GAAGN,KAAI,IAAI,WAAW,EAAE,GAAGP,MAAI,IAAI,WAAW,EAAE;AACzE,YAAI,GAAG8B,IAAGxB,KAAI,IAAI,aAAa,EAAE;AACjC,YAAIG,KAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAE/B,oBAAY,GAAG,IAAI,EAAE;AACrB,UAAE,CAAC,KAAK;AACR,UAAE,EAAE,KAAK;AACT,UAAE,EAAE,KAAK;AAET,YAAI,QAAQ,IAAI;AAChB,aAAK,IAAI,GAAG,IAAI,GAAG,IAAK,IAAG,KAAK,CAAC,IAAII,GAAE,CAAC;AACxC,aAAK,IAAI,GAAG,IAAI,IAAI,IAAK,IAAG,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;AAE9C,oBAAYb,KAAG,GAAG,SAAS,EAAE,GAAG,IAAE,EAAE;AACpC,eAAOA,GAAC;AACR,mBAAWS,IAAGT,GAAC;AACf,aAAK,IAAIS,EAAC;AAEV,aAAK,IAAI,IAAI,IAAI,IAAI,IAAK,IAAG,CAAC,IAAI,GAAG,CAAC;AACtC,oBAAYF,IAAG,IAAI,IAAI,EAAE;AACzB,eAAOA,EAAC;AAER,aAAK,IAAI,GAAG,IAAI,IAAI,IAAK,CAAAD,GAAE,CAAC,IAAI;AAChC,aAAK,IAAI,GAAG,IAAI,IAAI,IAAK,CAAAA,GAAE,CAAC,IAAIN,IAAE,CAAC;AACnC,aAAK,IAAI,GAAG,IAAI,IAAI,KAAK;AACvB,eAAK8B,KAAI,GAAGA,KAAI,IAAIA,MAAK;AACvB,YAAAxB,GAAE,IAAEwB,EAAC,KAAKvB,GAAE,CAAC,IAAI,EAAEuB,EAAC;AAAA,UACtB;AAAA,QACF;AAEA,aAAK,GAAG,SAAS,EAAE,GAAGxB,EAAC;AACvB,eAAO;AAAA,MACT;AAEA,eAAS,UAAUN,KAAGS,IAAG;AACvB,YAAI,IAAI,GAAG,GAAG,MAAM,GAAG,GAAG,MAAM,GAAG,GAC/B,MAAM,GAAG,GAAG,OAAO,GAAG,GAAG,OAAO,GAAG,GACnC,OAAO,GAAG;AAEd,iBAAST,IAAE,CAAC,GAAG,GAAG;AAClB,oBAAYA,IAAE,CAAC,GAAGS,EAAC;AACnB,QAAA2B,GAAE,KAAKpC,IAAE,CAAC,CAAC;AACX,QAAAiC,GAAE,KAAK,KAAKhC,EAAC;AACb,QAAA+B,GAAE,KAAK,KAAKhC,IAAE,CAAC,CAAC;AAChB,QAAA+B,GAAE,KAAK/B,IAAE,CAAC,GAAG,GAAG;AAEhB,QAAAoC,GAAE,MAAM,GAAG;AACX,QAAAA,GAAE,MAAM,IAAI;AACZ,QAAAH,GAAE,MAAM,MAAM,IAAI;AAClB,QAAAA,GAAE,GAAG,MAAM,GAAG;AACd,QAAAA,GAAE,GAAG,GAAG,GAAG;AAEX,gBAAQ,GAAG,CAAC;AACZ,QAAAA,GAAE,GAAG,GAAG,GAAG;AACX,QAAAA,GAAE,GAAG,GAAG,GAAG;AACX,QAAAA,GAAE,GAAG,GAAG,GAAG;AACX,QAAAA,GAAEjC,IAAE,CAAC,GAAG,GAAG,GAAG;AAEd,QAAAoC,GAAE,KAAKpC,IAAE,CAAC,CAAC;AACX,QAAAiC,GAAE,KAAK,KAAK,GAAG;AACf,YAAI,SAAS,KAAK,GAAG,EAAG,CAAAA,GAAEjC,IAAE,CAAC,GAAGA,IAAE,CAAC,GAAGK,EAAC;AAEvC,QAAA+B,GAAE,KAAKpC,IAAE,CAAC,CAAC;AACX,QAAAiC,GAAE,KAAK,KAAK,GAAG;AACf,YAAI,SAAS,KAAK,GAAG,EAAG,QAAO;AAE/B,YAAI,SAASjC,IAAE,CAAC,CAAC,MAAOS,GAAE,EAAE,KAAG,EAAI,CAAAuB,GAAEhC,IAAE,CAAC,GAAG,KAAKA,IAAE,CAAC,CAAC;AAEpD,QAAAiC,GAAEjC,IAAE,CAAC,GAAGA,IAAE,CAAC,GAAGA,IAAE,CAAC,CAAC;AAClB,eAAO;AAAA,MACT;AAEA,eAAS,iBAAiBa,IAAG,IAAI,GAAG,IAAI;AACtC,YAAI;AACJ,YAAI,IAAI,IAAI,WAAW,EAAE,GAAGN,KAAI,IAAI,WAAW,EAAE;AACjD,YAAIE,KAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAC3BoB,KAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAE/B,YAAI,IAAI,GAAI,QAAO;AAEnB,YAAI,UAAUA,IAAG,EAAE,EAAG,QAAO;AAE7B,aAAK,IAAI,GAAG,IAAI,GAAG,IAAK,CAAAhB,GAAE,CAAC,IAAI,GAAG,CAAC;AACnC,aAAK,IAAI,GAAG,IAAI,IAAI,IAAK,CAAAA,GAAE,IAAE,EAAE,IAAI,GAAG,CAAC;AACvC,oBAAYN,IAAGM,IAAG,CAAC;AACnB,eAAON,EAAC;AACR,mBAAWE,IAAGoB,IAAGtB,EAAC;AAElB,mBAAWsB,IAAG,GAAG,SAAS,EAAE,CAAC;AAC7B,YAAIpB,IAAGoB,EAAC;AACR,aAAK,GAAGpB,EAAC;AAET,aAAK;AACL,YAAI,iBAAiB,IAAI,GAAG,GAAG,CAAC,GAAG;AACjC,eAAK,IAAI,GAAG,IAAI,GAAG,IAAK,CAAAI,GAAE,CAAC,IAAI;AAC/B,iBAAO;AAAA,QACT;AAEA,aAAK,IAAI,GAAG,IAAI,GAAG,IAAK,CAAAA,GAAE,CAAC,IAAI,GAAG,IAAI,EAAE;AACxC,eAAO;AAAA,MACT;AAEA,UAAI,4BAA4B,IAC5B,8BAA8B,IAC9B,6BAA6B,IAC7B,gCAAgC,IAChC,0BAA0B,IAC1B,gCAAgC,IAChC,4BAA4B,IAC5B,4BAA4B,IAC5B,2BAA2B,IAC3B,wBAAwB,6BACxB,uBAAuB,4BACvB,0BAA0B,+BAC1B,oBAAoB,IACpB,6BAA6B,IAC7B,6BAA6B,IAC7B,wBAAwB,IACxB,oBAAoB;AAExB,WAAK,WAAW;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QAEA;AAAA,QACA,GAAGZ;AAAA,QACH,GAAGqC;AAAA,QACH;AAAA,QACA;AAAA,QACA,GAAGL;AAAA,QACH,GAAGF;AAAA,QACH,GAAGK;AAAA,QACH,GAAGJ;AAAA,QACH;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAIA,eAAS,aAAatB,IAAG,GAAG;AAC1B,YAAIA,GAAE,WAAW,0BAA2B,OAAM,IAAI,MAAM,cAAc;AAC1E,YAAI,EAAE,WAAW,4BAA6B,OAAM,IAAI,MAAM,gBAAgB;AAAA,MAChF;AAEA,eAAS,gBAAgB,IAAI,IAAI;AAC/B,YAAI,GAAG,WAAW,0BAA2B,OAAM,IAAI,MAAM,qBAAqB;AAClF,YAAI,GAAG,WAAW,0BAA2B,OAAM,IAAI,MAAM,qBAAqB;AAAA,MACpF;AAEA,eAAS,kBAAkB;AACzB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,cAAI,EAAE,UAAU,CAAC,aAAa;AAC5B,kBAAM,IAAI,UAAU,iCAAiC;AAAA,QACzD;AAAA,MACF;AAEA,eAAS,QAAQ,KAAK;AACpB,iBAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,IAAK,KAAI,CAAC,IAAI;AAAA,MAChD;AAEA,WAAK,cAAc,SAAS,GAAG;AAC7B,YAAII,KAAI,IAAI,WAAW,CAAC;AACxB,oBAAYA,IAAG,CAAC;AAChB,eAAOA;AAAA,MACT;AAEA,WAAK,YAAY,SAAS,KAAK,OAAO,KAAK;AACzC,wBAAgB,KAAK,OAAO,GAAG;AAC/B,qBAAa,KAAK,KAAK;AACvB,YAAID,KAAI,IAAI,WAAW,6BAA6B,IAAI,MAAM;AAC9D,YAAI,IAAI,IAAI,WAAWA,GAAE,MAAM;AAC/B,iBAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,IAAK,CAAAA,GAAE,IAAE,0BAA0B,IAAI,IAAI,CAAC;AAC5E,yBAAiB,GAAGA,IAAGA,GAAE,QAAQ,OAAO,GAAG;AAC3C,eAAO,EAAE,SAAS,6BAA6B;AAAA,MACjD;AAEA,WAAK,UAAU,OAAO,SAAS,KAAK,OAAO,KAAK;AAC9C,wBAAgB,KAAK,OAAO,GAAG;AAC/B,qBAAa,KAAK,KAAK;AACvB,YAAI,IAAI,IAAI,WAAW,gCAAgC,IAAI,MAAM;AACjE,YAAIA,KAAI,IAAI,WAAW,EAAE,MAAM;AAC/B,iBAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,IAAK,GAAE,IAAE,6BAA6B,IAAI,IAAI,CAAC;AAC/E,YAAI,EAAE,SAAS,GAAI,QAAO;AAC1B,YAAI,sBAAsBA,IAAG,GAAG,EAAE,QAAQ,OAAO,GAAG,MAAM,EAAG,QAAO;AACpE,eAAOA,GAAE,SAAS,0BAA0B;AAAA,MAC9C;AAEA,WAAK,UAAU,YAAY;AAC3B,WAAK,UAAU,cAAc;AAC7B,WAAK,UAAU,iBAAiB;AAEhC,WAAK,aAAa,SAAS,GAAGJ,IAAG;AAC/B,wBAAgB,GAAGA,EAAC;AACpB,YAAI,EAAE,WAAW,8BAA+B,OAAM,IAAI,MAAM,YAAY;AAC5E,YAAIA,GAAE,WAAW,wBAAyB,OAAM,IAAI,MAAM,YAAY;AACtE,YAAIoB,KAAI,IAAI,WAAW,uBAAuB;AAC9C,0BAAkBA,IAAG,GAAGpB,EAAC;AACzB,eAAOoB;AAAA,MACT;AAEA,WAAK,WAAW,OAAO,SAAS,GAAG;AACjC,wBAAgB,CAAC;AACjB,YAAI,EAAE,WAAW,8BAA+B,OAAM,IAAI,MAAM,YAAY;AAC5E,YAAIA,KAAI,IAAI,WAAW,uBAAuB;AAC9C,+BAAuBA,IAAG,CAAC;AAC3B,eAAOA;AAAA,MACT;AAEA,WAAK,WAAW,eAAe;AAC/B,WAAK,WAAW,qBAAqB;AAErC,WAAK,MAAM,SAAS,KAAK,OAAO,WAAW,WAAW;AACpD,YAAInB,KAAI,KAAK,IAAI,OAAO,WAAW,SAAS;AAC5C,eAAO,KAAK,UAAU,KAAK,OAAOA,EAAC;AAAA,MACrC;AAEA,WAAK,IAAI,SAAS,SAAS,WAAW,WAAW;AAC/C,wBAAgB,WAAW,SAAS;AACpC,wBAAgB,WAAW,SAAS;AACpC,YAAIA,KAAI,IAAI,WAAW,wBAAwB;AAC/C,4BAAoBA,IAAG,WAAW,SAAS;AAC3C,eAAOA;AAAA,MACT;AAEA,WAAK,IAAI,QAAQ,KAAK;AAEtB,WAAK,IAAI,OAAO,SAAS,KAAK,OAAO,WAAW,WAAW;AACzD,YAAIA,KAAI,KAAK,IAAI,OAAO,WAAW,SAAS;AAC5C,eAAO,KAAK,UAAU,KAAK,KAAK,OAAOA,EAAC;AAAA,MAC1C;AAEA,WAAK,IAAI,KAAK,QAAQ,KAAK,UAAU;AAErC,WAAK,IAAI,UAAU,WAAW;AAC5B,YAAI,KAAK,IAAI,WAAW,yBAAyB;AACjD,YAAI,KAAK,IAAI,WAAW,yBAAyB;AACjD,2BAAmB,IAAI,EAAE;AACzB,eAAO,EAAC,WAAW,IAAI,WAAW,GAAE;AAAA,MACtC;AAEA,WAAK,IAAI,QAAQ,gBAAgB,SAAS,WAAW;AACnD,wBAAgB,SAAS;AACzB,YAAI,UAAU,WAAW;AACvB,gBAAM,IAAI,MAAM,qBAAqB;AACvC,YAAI,KAAK,IAAI,WAAW,yBAAyB;AACjD,+BAAuB,IAAI,SAAS;AACpC,eAAO,EAAC,WAAW,IAAI,WAAW,IAAI,WAAW,SAAS,EAAC;AAAA,MAC7D;AAEA,WAAK,IAAI,kBAAkB;AAC3B,WAAK,IAAI,kBAAkB;AAC3B,WAAK,IAAI,kBAAkB;AAC3B,WAAK,IAAI,cAAc;AACvB,WAAK,IAAI,iBAAiB,KAAK,UAAU;AAEzC,WAAK,OAAO,SAAS,KAAK,WAAW;AACnC,wBAAgB,KAAK,SAAS;AAC9B,YAAI,UAAU,WAAW;AACvB,gBAAM,IAAI,MAAM,qBAAqB;AACvC,YAAI,YAAY,IAAI,WAAW,oBAAkB,IAAI,MAAM;AAC3D,oBAAY,WAAW,KAAK,IAAI,QAAQ,SAAS;AACjD,eAAO;AAAA,MACT;AAEA,WAAK,KAAK,OAAO,SAAS,WAAW,WAAW;AAC9C,wBAAgB,WAAW,SAAS;AACpC,YAAI,UAAU,WAAW;AACvB,gBAAM,IAAI,MAAM,qBAAqB;AACvC,YAAI,MAAM,IAAI,WAAW,UAAU,MAAM;AACzC,YAAI,OAAO,iBAAiB,KAAK,WAAW,UAAU,QAAQ,SAAS;AACvE,YAAI,OAAO,EAAG,QAAO;AACrB,YAAIG,KAAI,IAAI,WAAW,IAAI;AAC3B,iBAAS,IAAI,GAAG,IAAIA,GAAE,QAAQ,IAAK,CAAAA,GAAE,CAAC,IAAI,IAAI,CAAC;AAC/C,eAAOA;AAAA,MACT;AAEA,WAAK,KAAK,WAAW,SAAS,KAAK,WAAW;AAC5C,YAAI,YAAY,KAAK,KAAK,KAAK,SAAS;AACxC,YAAI,MAAM,IAAI,WAAW,iBAAiB;AAC1C,iBAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,IAAK,KAAI,CAAC,IAAI,UAAU,CAAC;AACzD,eAAO;AAAA,MACT;AAEA,WAAK,KAAK,SAAS,SAAS,SAAS,KAAK,KAAK,WAAW;AACxD,wBAAgB,KAAK,KAAK,SAAS;AACnC,YAAI,IAAI,WAAW;AACjB,gBAAM,IAAI,MAAM,oBAAoB;AACtC,YAAI,UAAU,WAAW;AACvB,gBAAM,IAAI,MAAM,qBAAqB;AACvC,YAAI,KAAK,IAAI,WAAW,oBAAoB,IAAI,MAAM;AACtD,YAAIA,KAAI,IAAI,WAAW,oBAAoB,IAAI,MAAM;AACrD,YAAI;AACJ,aAAK,IAAI,GAAG,IAAI,mBAAmB,IAAK,IAAG,CAAC,IAAI,IAAI,CAAC;AACrD,aAAK,IAAI,GAAG,IAAI,IAAI,QAAQ,IAAK,IAAG,IAAE,iBAAiB,IAAI,IAAI,CAAC;AAChE,eAAQ,iBAAiBA,IAAG,IAAI,GAAG,QAAQ,SAAS,KAAK;AAAA,MAC3D;AAEA,WAAK,KAAK,UAAU,WAAW;AAC7B,YAAI,KAAK,IAAI,WAAW,0BAA0B;AAClD,YAAI,KAAK,IAAI,WAAW,0BAA0B;AAClD,4BAAoB,IAAI,EAAE;AAC1B,eAAO,EAAC,WAAW,IAAI,WAAW,GAAE;AAAA,MACtC;AAEA,WAAK,KAAK,QAAQ,gBAAgB,SAAS,WAAW;AACpD,wBAAgB,SAAS;AACzB,YAAI,UAAU,WAAW;AACvB,gBAAM,IAAI,MAAM,qBAAqB;AACvC,YAAI,KAAK,IAAI,WAAW,0BAA0B;AAClD,iBAAS,IAAI,GAAG,IAAI,GAAG,QAAQ,IAAK,IAAG,CAAC,IAAI,UAAU,KAAG,CAAC;AAC1D,eAAO,EAAC,WAAW,IAAI,WAAW,IAAI,WAAW,SAAS,EAAC;AAAA,MAC7D;AAEA,WAAK,KAAK,QAAQ,WAAW,SAAS,MAAM;AAC1C,wBAAgB,IAAI;AACpB,YAAI,KAAK,WAAW;AAClB,gBAAM,IAAI,MAAM,eAAe;AACjC,YAAI,KAAK,IAAI,WAAW,0BAA0B;AAClD,YAAI,KAAK,IAAI,WAAW,0BAA0B;AAClD,iBAAS,IAAI,GAAG,IAAI,IAAI,IAAK,IAAG,CAAC,IAAI,KAAK,CAAC;AAC3C,4BAAoB,IAAI,IAAI,IAAI;AAChC,eAAO,EAAC,WAAW,IAAI,WAAW,GAAE;AAAA,MACtC;AAEA,WAAK,KAAK,kBAAkB;AAC5B,WAAK,KAAK,kBAAkB;AAC5B,WAAK,KAAK,aAAa;AACvB,WAAK,KAAK,kBAAkB;AAE5B,WAAK,OAAO,SAAS,KAAK;AACxB,wBAAgB,GAAG;AACnB,YAAIN,KAAI,IAAI,WAAW,iBAAiB;AACxC,oBAAYA,IAAG,KAAK,IAAI,MAAM;AAC9B,eAAOA;AAAA,MACT;AAEA,WAAK,KAAK,aAAa;AAEvB,WAAK,SAAS,SAASD,IAAGE,IAAG;AAC3B,wBAAgBF,IAAGE,EAAC;AAEpB,YAAIF,GAAE,WAAW,KAAKE,GAAE,WAAW,EAAG,QAAO;AAC7C,YAAIF,GAAE,WAAWE,GAAE,OAAQ,QAAO;AAClC,eAAQ,GAAGF,IAAG,GAAGE,IAAG,GAAGF,GAAE,MAAM,MAAM,IAAK,OAAO;AAAA,MACnD;AAEA,WAAK,UAAU,SAAS,IAAI;AAC1B,sBAAc;AAAA,MAChB;AAEA,OAAC,WAAW;AAGV,YAAIiC,UAAS,OAAO,SAAS,cAAe,KAAK,UAAU,KAAK,WAAY;AAC5E,YAAIA,WAAUA,QAAO,iBAAiB;AAEpC,cAAI,QAAQ;AACZ,eAAK,QAAQ,SAASjC,IAAG,GAAG;AAC1B,gBAAI,GAAGsB,KAAI,IAAI,WAAW,CAAC;AAC3B,iBAAK,IAAI,GAAG,IAAI,GAAG,KAAK,OAAO;AAC7B,cAAAW,QAAO,gBAAgBX,GAAE,SAAS,GAAG,IAAI,KAAK,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC;AAAA,YAClE;AACA,iBAAK,IAAI,GAAG,IAAI,GAAG,IAAK,CAAAtB,GAAE,CAAC,IAAIsB,GAAE,CAAC;AAClC,oBAAQA,EAAC;AAAA,UACX,CAAC;AAAA,QACH,WAAW,OAAO,YAAY,aAAa;AAEzC,UAAAW,UAAS,QAAQ,QAAQ;AACzB,cAAIA,WAAUA,QAAO,aAAa;AAChC,iBAAK,QAAQ,SAASjC,IAAG,GAAG;AAC1B,kBAAI,GAAGsB,KAAIW,QAAO,YAAY,CAAC;AAC/B,mBAAK,IAAI,GAAG,IAAI,GAAG,IAAK,CAAAjC,GAAE,CAAC,IAAIsB,GAAE,CAAC;AAClC,sBAAQA,EAAC;AAAA,YACX,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF,GAAG;AAAA,IAEH,GAAG,OAAO7B,YAAW,eAAeA,QAAO,UAAUA,QAAO,UAAW,KAAK,OAAO,KAAK,QAAQ,CAAC,CAAE;AAAA;AAAA;;;ACt1EnG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAAAyC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAK,WAAL,kBAAKC,cAAL;AACL,EAAAA,oBAAA;AACA,EAAAA,oBAAA;AACA,EAAAA,oBAAA;AACA,EAAAA,oBAAA;AAJU,SAAAA;AAAA,GAAA;AAOL,IAAM,SAAN,MAAM,QAAO;AAAA,EAClB,OAAe,WAA0B;AAAA,EACjC;AAAA,EACA;AAAA,EAEA,cAAc;AACpB,SAAK,QAAQ;AACb,SAAK,WAAW,OAAO,WAAW;AAAA,EACpC;AAAA,EAEA,OAAc,cAAsB;AAClC,QAAI,CAAC,QAAO,UAAU;AACpB,cAAO,WAAW,IAAI,QAAO;AAAA,IAC/B;AACA,WAAO,QAAO;AAAA,EAChB;AAAA,EAEA,OAAc,SAAS,OAAuB;AAC5C,YAAO,YAAY,EAAE,QAAQ;AAAA,EAC/B;AAAA,EAEQ,IAAI,OAAiB,OAA2B,YAAoB,MAAmB;AAC7F,QAAI,SAAS,KAAK,SAAS,KAAK,UAAU;AACxC,YAAM,mBAAmB,QAAQ,IAAI,KAAK,KAAK,OAAO,KAAK;AAC3D,cAAQ,OAAO;AAAA,QACb,KAAK;AAAA,QACL,KAAK;AACH,kBAAQ,KAAK,kBAAkB,GAAG,IAAI;AACtC;AAAA,QACF,KAAK;AACH,kBAAQ,KAAK,kBAAkB,GAAG,IAAI;AACtC;AAAA,QACF,KAAK;AACH,kBAAQ,MAAM,kBAAkB,GAAG,IAAI;AACvC;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAAA,EAEO,mBAAmB,OAAe;AACvC,WAAO;AAAA,MACL,OAAO,CAAC,YAAoB,SAAgB,KAAK,IAAI,eAAgB,OAAO,SAAS,GAAG,IAAI;AAAA,MAC5F,MAAM,CAAC,YAAoB,SAAgB,KAAK,IAAI,cAAe,OAAO,SAAS,GAAG,IAAI;AAAA,MAC1F,MAAM,CAAC,YAAoB,SAAgB,KAAK,IAAI,cAAe,OAAO,SAAS,GAAG,IAAI;AAAA,MAC1F,OAAO,CAAC,YAAoB,SAAgB,KAAK,IAAI,eAAgB,OAAO,SAAS,GAAG,IAAI;AAAA,IAC9F;AAAA,EACF;AAAA,EAEO,MAAM,YAAoB,MAAmB;AAClD,SAAK,IAAI,eAAgB,QAAW,SAAS,GAAG,IAAI;AAAA,EACtD;AAAA,EAEO,KAAK,YAAoB,MAAmB;AACjD,SAAK,IAAI,cAAe,QAAW,SAAS,GAAG,IAAI;AAAA,EACrD;AAAA,EAEO,KAAK,YAAoB,MAAmB;AACjD,SAAK,IAAI,cAAe,QAAW,SAAS,GAAG,IAAI;AAAA,EACrD;AAAA,EAEO,MAAM,YAAoB,MAAmB;AAClD,SAAK,IAAI,eAAgB,QAAW,SAAS,GAAG,IAAI;AAAA,EACtD;AAAA;AAAA,EAGO,YAAY,UAAyB;AAC1C,SAAK,WAAW;AAAA,EAClB;AACF;AAEO,IAAM,SAAS,OAAO,YAAY;;;AC7EzC,IAAAC,iBAAsB;AACtB,IAAAC,mBAAoB;;;ACiBb,IAAM,yBAAwD;AAAA,EACnE,SAAS;AAAA,IACP,OAAO;AAAA,MACL,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,SAAS,CAAC;AAAA,IACZ;AAAA,IACA,WAAW;AAAA,IACX,aAAa;AAAA,IACb,WAAW;AAAA,IACX,aAAa;AAAA,EACf;AAAA,EACA,SAAS;AAAA,IACP,OAAO;AAAA,MACL,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,SAAS,CAAC;AAAA,IACZ;AAAA,IACA,WAAW;AAAA,IACX,aAAa;AAAA,IACb,WAAW;AAAA,IACX,aAAa;AAAA,EACf;AAAA,EACA,SAAS;AAAA,IACP,OAAO;AAAA,MACL,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,SAAS,CAAC;AAAA,IACZ;AAAA,IACA,WAAW;AAAA,IACX,aAAa;AAAA,IACb,WAAW;AAAA,IACX,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,OAAO;AAAA,MACL,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,SAAS,CAAC;AAAA,IACZ;AAAA,IACA,WAAW;AAAA,IACX,aAAa;AAAA,IACb,WAAW;AAAA,IACX,aAAa;AAAA,EACf;AAAA,EACA,UAAU;AAAA,IACR,OAAO;AAAA,MACL,OAAO,IAAI,OAAO,EAAE;AAAA,MACpB,YAAY;AAAA,MACZ,MAAM;AAAA,MACN,SAAS,CAAC;AAAA,IACZ;AAAA,IACA,WAAW;AAAA,EACb;AACF;AAQO,IAAM,uBAAN,MAA2B;AAAA,EACxB;AAAA,EAER,cAAc;AACZ,SAAK,WAAW,IAAI,IAAI,OAAO,QAAQ,sBAAsB,CAAC;AAAA,EAChE;AAAA;AAAA,EAGA,QAAQ,QAA8B;AACpC,SAAK,SAAS,IAAI,WAAW;AAAA,MAC3B,GAAG,uBAAuB;AAAA,MAC1B,GAAG;AAAA,MACH,aAAa,uBAAuB,QAAQ;AAAA,MAC5C,WAAW,uBAAuB,QAAQ;AAAA,MAC1C,aAAa,uBAAuB,QAAQ;AAAA,MAC5C,OAAO;AAAA,QACL,GAAG,uBAAuB,QAAQ;AAAA,QAClC,GAAI,OAAO,SAAS,CAAC;AAAA,MACvB;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,QAA8B;AACpC,SAAK,SAAS,IAAI,WAAW;AAAA,MAC3B,GAAG,uBAAuB;AAAA,MAC1B,GAAG;AAAA,MACH,aAAa,uBAAuB,QAAQ;AAAA,MAC5C,WAAW,uBAAuB,QAAQ;AAAA,MAC1C,aAAa,uBAAuB,QAAQ;AAAA,MAC5C,OAAO;AAAA,QACL,GAAG,uBAAuB,QAAQ;AAAA,QAClC,GAAI,OAAO,SAAS,CAAC;AAAA,MACvB;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,QAA8B;AACpC,SAAK,SAAS,IAAI,WAAW;AAAA,MAC3B,GAAG,uBAAuB;AAAA,MAC1B,GAAG;AAAA,MACH,aAAa,uBAAuB,QAAQ;AAAA,MAC5C,WAAW,uBAAuB,QAAQ;AAAA,MAC1C,aAAa,uBAAuB,QAAQ;AAAA,MAC5C,OAAO;AAAA,QACL,GAAG,uBAAuB,QAAQ;AAAA,QAClC,GAAI,OAAO,SAAS,CAAC;AAAA,MACvB;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,KAAK,QAA8B;AACjC,SAAK,SAAS,IAAI,QAAQ;AAAA,MACxB,GAAG,uBAAuB;AAAA,MAC1B,GAAG;AAAA,MACH,aAAa,uBAAuB,KAAK;AAAA,MACzC,WAAW,uBAAuB,KAAK;AAAA,MACvC,aAAa,uBAAuB,KAAK;AAAA,MACzC,OAAO;AAAA,QACL,GAAG,uBAAuB,KAAK;AAAA,QAC/B,GAAI,OAAO,SAAS,CAAC;AAAA,MACvB;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,QAAgC;AACvC,SAAK,SAAS,IAAI,YAAY;AAAA,MAC5B,GAAG,uBAAuB;AAAA,MAC1B,GAAG;AAAA,MACH,OAAO;AAAA,QACL,GAAG,uBAAuB,SAAS;AAAA,QACnC,GAAI,OAAO,SAAS,CAAC;AAAA,MACvB;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,WAAW,IAAY,QAAuB;AAC5C,QAAI,uBAAuB,EAAE,GAAG;AAC9B,YAAM,IAAI;AAAA,QACR,wCAAwC,EAAE,cAAc,EAAE;AAAA,MAC5D;AAAA,IACF;AACA,SAAK,SAAS,IAAI,IAAI,MAAM;AAC5B,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ;AACN,WAAO,OAAO,YAAY,KAAK,QAAQ;AAAA,EACzC;AACF;AAGO,IAAM,sBAAsB,MAAM,IAAI,qBAAqB,EAAE,MAAM;AAG1E,SAAS,aACP,OACiG;AACjG,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI,OAAO,UAAU,YAAY,UAAU,KAAM,QAAO;AAGxD,MAAI,sBAAsB,SAAS,OAAO,MAAM,kBAAkB,MAAM,SAAU,QAAO;AAGzF,MAAI,SAAS,SAAS,UAAU,SAAS,YAAY,MAAO,QAAO;AAGnE,SAAO,OAAO,OAAO,KAAK,EAAE,MAAM,CAAC,UAAU,OAAO,UAAU,QAAQ;AACxE;AAGO,SAAS,gBAAgB,QAA0C;AACxE,MAAI,OAAO,WAAW,YAAY,WAAW,KAAM,QAAO;AAE1D,QAAM,EAAE,OAAO,WAAW,aAAa,WAAW,YAAY,IAAI;AAElE,QAAM,eACJ,OAAO,UAAU,YACjB,UAAU,QACV,aAAa,MAAM,KAAK,KACxB,OAAO,MAAM,eAAe;AAE9B,SACE,iBACC,cAAc,UAAa,OAAO,cAAc,eAChD,gBAAgB,UAAa,OAAO,gBAAgB,cACpD,cAAc,UAAa,OAAO,cAAc,cAChD,gBAAgB,UAAa,OAAO,gBAAgB;AAEzD;AAEO,IAAK,YAAL,kBAAKC,eAAL;AACL,EAAAA,WAAA,aAAU;AACV,EAAAA,WAAA,aAAU;AACV,EAAAA,WAAA,aAAU;AACV,EAAAA,WAAA,UAAO;AACP,EAAAA,WAAA,cAAW;AALD,SAAAA;AAAA,GAAA;;;ACzNL,IAAM,iBAAN,MAAqB;AAAA,EAC1B,OAAO,QAAQ,KAA4B;AACzC,QAAI,OAAO,WAAW,aAAa;AACjC,aAAO;AAAA,IACT;AACA,WAAO,aAAa,QAAQ,GAAG;AAAA,EACjC;AAAA,EAEA,OAAO,QAAQ,KAAa,OAAqB;AAC/C,QAAI,OAAO,WAAW,aAAa;AACjC;AAAA,IACF;AACA,iBAAa,QAAQ,KAAK,KAAK;AAAA,EACjC;AAAA,EAEA,OAAO,WAAW,KAAmB;AACnC,QAAI,OAAO,WAAW,aAAa;AACjC;AAAA,IACF;AACA,iBAAa,WAAW,GAAG;AAAA,EAC7B;AACF;;;ACrBA,qBAAoB;;;ACoBb,IAAK,WAAL,kBAAKC,cAAL;AACL,EAAAA,UAAA,YAAS;AACT,EAAAA,UAAA,WAAQ;AACR,EAAAA,UAAA,eAAY;AACZ,EAAAA,UAAA,YAAS;AACT,EAAAA,UAAA,YAAS;AACT,EAAAA,UAAA,aAAU;AACV,EAAAA,UAAA,SAAM;AACN,EAAAA,UAAA,UAAO;AACP,EAAAA,UAAA,WAAQ;AACR,EAAAA,UAAA,cAAW;AACX,EAAAA,UAAA,cAAW;AACX,EAAAA,UAAA,UAAO;AACP,EAAAA,UAAA,aAAU;AACV,EAAAA,UAAA,mBAAgB;AAChB,EAAAA,UAAA,cAAW;AACX,EAAAA,UAAA,eAAY;AAhBF,SAAAA;AAAA,GAAA;AAkPL,IAAM,gBAAN,cAA4B,MAAM;AAAA,EACvC;AAAA,EACA;AAAA,EAEA,YAAY,SAAiB,MAAc,MAAY;AACrD,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,EACd;AACF;AAoBO,IAAM,gBAAN,cAA4B,MAAM;AAAA,EACvC;AAAA,EACA;AAAA,EAEA,YAAY,SAAiB,MAAc,MAAY;AACrD,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,EACd;AACF;AAgBO,IAAK,YAAL,kBAAKC,eAAL;AACL,EAAAA,sBAAA,aAAU,MAAV;AACA,EAAAA,sBAAA,UAAO,KAAP;AAFU,SAAAA;AAAA,GAAA;;;ADrSL,IAAM,gBAAuB;AAAA,EAClC,SAAS,CAAC;AAAA,EACV,cAAc;AAAA,EACd,eAAe;AAAA,EACf,aAAa,IAAI,eAAAC,QAAQ,QAAQ,IAAI,sCAAsC;AAAA,EAC3E,eAAe;AAAA,EACf,eAAe;AAAA,EACf,sBAAsB,CAAC;AACzB;AAIO,IAAM,oBAAoB;AAI1B,SAAS,UACd,OACA,EAAE,UAAU,OAAO,GACnB;AACA,QAAM,SAAS,CAAC,UAAU;AACxB,UAAM,iBAAiB;AAAA,MACrB,GAAG,MAAM;AAAA,MACT,CAAC,QAAQ,GAAG;AAAA,QACV,UAAU,OAAO,SAAS,IAAI,CAAC,aAAa,EAAE,GAAG,QAAQ,EAAE;AAAA,QAC3D,eAAe,OAAO,gBAAgB,EAAE,GAAG,OAAO,cAAc,IAAI;AAAA,MACtE;AAAA,IACF;AAEA,WAAO;AAAA,MACL,GAAG;AAAA,MACH,SAAS;AAAA,MACT,cAAc;AAAA,IAChB;AAAA,EACF,CAAC;AACH;AAEO,SAAS,aAAa,OAAqB,EAAE,SAAS,GAA4B;AACvF,QAAM,SAAS,CAAC,UAAU;AACxB,UAAM,iBAAiB,EAAE,GAAG,MAAM,QAAQ;AAC1C,WAAO,eAAe,QAAQ;AAE9B,WAAO;AAAA,MACL,GAAG;AAAA,MACH,SAAS;AAAA,MACT,cAAc,MAAM,iBAAiB,WAAW,OAAO,MAAM;AAAA,IAC/D;AAAA,EACF,CAAC;AACH;AAEO,SAAS,gBAAgB,OAAqB,EAAE,SAAS,GAAmC;AACjG,QAAM,SAAS,CAAC,WAAW;AAAA,IACzB,GAAG;AAAA,IACH,cAAc;AAAA,EAChB,EAAE;AACJ;AAEO,SAAS,iBACd,OACA,EAAE,UAAU,QAAQ,GACpB;AACA,QAAM,SAAS,CAAC,UAAU;AACxB,UAAM,SAAS,MAAM,QAAQ,QAAQ;AACrC,QAAI,CAAC,QAAQ;AACX,aAAO,KAAK,mBAAmB,QAAQ,aAAa;AACpD,aAAO;AAAA,IACT;AAEA,UAAM,mBAAmB,OAAO,SAAS,KAAK,CAAC,MAAM,EAAE,YAAY,OAAO;AAC1E,QAAI,CAAC,kBAAkB;AACrB,aAAO,KAAK,wBAAwB,OAAO,yBAAyB,QAAQ,GAAG;AAC/E,aAAO;AAAA,IACT;AAEA,UAAM,gBAAgB;AAAA,MACpB,GAAG;AAAA,MACH,UAAU,OAAO,SAAS,IAAI,CAAC,aAAa,EAAE,GAAG,QAAQ,EAAE;AAAA,MAC3D,eAAe,EAAE,GAAG,iBAAiB;AAAA,IACvC;AAEA,UAAM,iBAAiB;AAAA,MACrB,GAAG,MAAM;AAAA,MACT,CAAC,QAAQ,GAAG;AAAA,IACd;AAEA,WAAO;AAAA,MACL,GAAG;AAAA,MACH,SAAS;AAAA,IACX;AAAA,EACF,CAAC;AACH;AAEO,SAAS,YACd,OACA,EAAE,UAAU,SAAS,GACrB;AACA,QAAM,SAAS,CAAC,UAAU;AACxB,UAAM,SAAS,MAAM,QAAQ,QAAQ;AACrC,QAAI,CAAC,QAAQ;AACX,aAAO,KAAK,mBAAmB,QAAQ,aAAa;AACpD,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,SAAS,IAAI,CAAC,aAAa,EAAE,GAAG,QAAQ,EAAE;AAE9D,UAAM,2BAA2B,YAAY;AAAA,MAC3C,CAAC,YAAY,QAAQ,YAAY,OAAO,eAAe;AAAA,IACzD;AAEA,UAAM,mBAAmB,2BACrB,EAAE,GAAG,OAAO,cAAe,IAC3B,YAAY,CAAC,KAAK;AAEtB,UAAM,gBAAgB;AAAA,MACpB,GAAG;AAAA,MACH,UAAU;AAAA,MACV,eAAe;AAAA,IACjB;AAEA,UAAM,iBAAiB;AAAA,MACrB,GAAG,MAAM;AAAA,MACT,CAAC,QAAQ,GAAG;AAAA,IACd;AAEA,WAAO;AAAA,MACL,GAAG;AAAA,MACH,SAAS;AAAA,IACX;AAAA,EACF,CAAC;AACH;AAEO,SAAS,iBACd,OACA,EAAE,WAAW,YAAY,GACzB;AACA,QAAM,SAAS,CAAC,WAAW;AAAA,IACzB,GAAG;AAAA,IACH,eAAe;AAAA,IACf;AAAA,EACF,EAAE;AACJ;AA6CO,SAAS,sBAAsB,OAAyC;AAC7E,SACE,OAAO,UAAU,YACjB,UAAU,QACV,aAAa,SACb,kBAAkB,SAClB,mBAAmB,UAClB,EAAE,0BAA0B,UAC1B,OAAO,MAAM,yBAAyB,YAAY,MAAM,yBAAyB;AAExF;;;AE5NA,IAAAC,mBAAoB;;;ACApB,IAAAC,kBAAoB;;;ACsBb,IAAe,aAAf,MAA0B;AAAA,EACtB;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EAEC;AAAA,EACA;AAAA,EACA;AAAA,EAEH;AAAA,EAEG;AAAA,EAEA,YAAY;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAgC;AAC9B,SAAK,KAAK;AACV,SAAK,YAAY,aAAa;AAC9B,SAAK,QAAQ;AACb,SAAK,YAAY;AACjB,SAAK,iBAAiB;AACtB,SAAK,iBAAiB,kBAAkB,CAAC;AAEzC,UAAM,OAAO,KAAK;AAClB,SAAK,WAAW,EAAE,GAAG,KAAK,iBAAiB,GAAG,SAAS;AAGvD,SAAK,SAAS,OAAO,mBAAmB,UAAU,KAAK,UAAU,YAAY,CAAC,EAAE;AAAA,EAClF;AAAA,EAEA,OAAO,kBAAkC,EAAE,MAAM,eAAe,MAAM,GAAG;AAAA,EAQlE,YAAY,MAAY;AAC7B,SAAK,OAAO,KAAK,sBAAsB,KAAK,SAAS,EAAE;AACvD,oBAAgB,KAAK,OAAO,EAAE,UAAU,KAAK,UAAU,CAAC;AAAA,EAC1D;AAAA,EAEO,mBAAmB,CAAC,YAA0B;AACnD,SAAK,OAAO,KAAK,uBAAuB,OAAO,EAAE;AACjD,qBAAiB,KAAK,OAAO;AAAA,MAC3B,UAAU,KAAK;AAAA,MACf,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAAA,EAOO,oBAAoB,OACzB,UACA,kBAC0B;AAC1B,UAAM,iBAAiB,MAAM,KAAK,iBAAiB,UAAU,aAAa;AAE1E,UAAM,aAAa,eAAe,OAAqB,CAAC,KAAK,UAAU;AACrE,UAAI,UAAU,MAAM;AAClB,YAAI,KAAK,KAAK;AAAA,MAChB;AACA,aAAO;AAAA,IACT,GAAG,CAAC,CAAC;AAEL,WAAO;AAAA,EACT;AAAA,EAEO,cAAc;AAAA,EAEd,WAAW,OAAO,OAAe,cAAuD;AAC7F,SAAK,OAAO,MAAM,gCAAgC;AAClD,UAAM,IAAI,MAAM,gCAAgC;AAAA,EAClD;AAAA;AAAA,EAIA,IAAW,OAAe;AACxB,WAAO,KAAK,GAAG,YAAY;AAAA,EAC7B;AAAA,EAEA,IAAW,WAA4B;AACrC,UAAM,QAAQ,KAAK,MAAM;AACzB,UAAM,cAAc,MAAM,QAAQ,KAAK,SAAS;AAChD,WAAO,cAAc,YAAY,WAAW,CAAC;AAAA,EAC/C;AAAA,EAEA,IAAW,YAAsB;AAC/B,WAAO,KAAK,SAAS,IAAI,CAAC,YAAY,QAAQ,OAAO;AAAA,EACvD;AAAA,EAEA,IAAW,gBAAsC;AAC/C,UAAM,QAAQ,KAAK,MAAM;AACzB,UAAM,cAAc,MAAM,QAAQ,KAAK,SAAS;AAChD,WAAO,cAAc,YAAY,gBAAgB;AAAA,EACnD;AAAA,EAEA,IAAW,gBAA+B;AACxC,WAAO,KAAK,eAAe,WAAW;AAAA,EACxC;AAAA,EAEA,IAAW,gBAAwB;AACjC,UAAM,QAAQ,KAAK,MAAM;AACzB,WAAO,MAAM;AAAA,EACf;AAAA,EAEA,IAAW,cAAuB;AAChC,UAAM,QAAQ,KAAK,MAAM;AACzB,UAAM,cAAc,MAAM,QAAQ,KAAK,SAAS;AAChD,WAAO,cAAc,YAAY,SAAS,SAAS,IAAI;AAAA,EACzD;AAAA,EAEA,IAAW,WAAoB;AAC7B,UAAM,QAAQ,KAAK,MAAM;AACzB,WAAO,MAAM,iBAAiB,KAAK;AAAA,EACrC;AAAA,EAEA,IAAW,sBAAqC;AAC9C,UAAM,EAAE,eAAe,cAAc,IAAI,KAAK,MAAM;AACpD,WAAO,cAAc,aAAa;AAAA,EACpC;AAAA;AAAA,EAIU,eAAe,MAAY;AACnC,SAAK,OAAO,MAAM,+BAA+B;AACjD,iBAAa,KAAK,OAAO,EAAE,UAAU,KAAK,UAAU,CAAC;AAAA,EACvD;AAAA,EAEU,6BAA6B,CACrC,QACA,oBACS;AACT,UAAM,MAAM,mBAAmB,KAAK;AACpC,QAAI,WAAW,UAAU;AACvB,YAAM,OAAO,eAAe,QAAQ,eAAe;AACnD,UAAI,MAAM;AACR,uBAAe,QAAQ,iBAAiB,GAAG,IAAI,IAAI;AACnD,uBAAe,WAAW,eAAe;AACzC,aAAK,OAAO,MAAM,uCAAuC,GAAG,EAAE;AAAA,MAChE;AAAA,IACF,WAAW,WAAW,WAAW;AAC/B,YAAM,OAAO,eAAe,QAAQ,iBAAiB,GAAG,EAAE;AAC1D,UAAI,MAAM;AACR,uBAAe,QAAQ,iBAAiB,IAAI;AAC5C,uBAAe,WAAW,iBAAiB,GAAG,EAAE;AAChD,aAAK,OAAO,MAAM,sCAAsC,GAAG,EAAE;AAAA,MAC/D;AAAA,IACF;AAAA,EACF;AACF;;;ACnLA,IAAM,kBAAkB,6BAA6B,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CA4BzD,CAAC;AAEF,IAAM,cAAc,6BAA6B,KAAK;AAAA;AAAA,CAErD,CAAC;AAQK,IAAM,gBAAmD;AAAA,EAC9D,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,WAAW;AAAA,IACT,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACF;AAQA,IAAM,cAAc,oBAAI,IAA+B;AAoBhD,SAAS,aAAa,MAA+B;AAC1D,MAAI,cAAc,KAAK,EAAE,GAAG;AAC1B,UAAM,IAAI,MAAM,kCAAkC,KAAK,EAAE,EAAE;AAAA,EAC7D;AACA,cAAY,IAAI,KAAK,IAAI,IAAI;AAC/B;AAQO,SAAS,QAAQ,QAA+C;AACrE,SAAO,cAAc,MAAM,KAAK,YAAY,IAAI,MAAM;AACxD;AAWO,SAAS,YAAY,YAAoE;AAC9F,MAAI,OAAO,eAAe,UAAU;AAClC,WAAO,QAAQ,UAAU;AAAA,EAC3B;AAGA,MAAI,CAAC,cAAc,WAAW,EAAE,GAAG;AACjC,gBAAY,IAAI,WAAW,IAAI,UAAU;AAAA,EAC3C;AACA,SAAO;AACT;;;AF5DO,IAAM,eAAN,cAA2B,MAAM;AAAA,EACtC,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEA,IAAM,OAAO,6BAA6B,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,CAK9C,CAAC;AAEK,IAAM,gBAAN,cAA4B,WAAW;AAAA,EACpC,SAA4B;AAAA,EAC5B;AAAA,EACA,QAAmC;AAAA,EACnC;AAAA,EACA,UAAsC;AAAA,EACpC;AAAA,EAEV,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,CAAC;AAAA,EACd,GAA8C;AAE5C,UAAM,OAAO,SAAS,OAAO,YAAY,QAAQ,IAAI,IAAI;AAGzD,UAAM,YAAuB,OAAO,iBAAiB,KAAK,EAAE,KAAK;AAGjE,UAAM,oBAAoB,OAAO,EAAE,MAAM,KAAK,MAAM,MAAM,KAAK,MAAM,GAAG,SAAS,IAAI;AAErF,UAAM,EAAE,IAAI,WAAW,UAAU,mBAAmB,gBAAgB,OAAO,UAAU,CAAC;AAEtF,QAAI,CAAC,SAAS,WAAW;AACvB,WAAK,OAAO,MAAM,oCAAoC;AACtD,YAAM,IAAI,MAAM,oCAAoC;AAAA,IACtD;AAEA,UAAM;AAAA,MACJ;AAAA,MACA,WAAW;AAAA,MACX,UAAU;AAAA;AAAA,MAEV,MAAM;AAAA;AAAA,MACN,GAAG;AAAA,IACL,IAAI;AAEJ,UAAM,iBAA2C;AAAA,MAC/C,GAAG,KAAK,kBAAkB;AAAA,MAC1B,GAAG;AAAA,IACL;AAEA,SAAK,UAAU;AAAA,MACb;AAAA,MACA;AAAA,MACA,UAAU;AAAA,IACZ;AAEA,SAAK,eAAe;AACpB,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,oBAA8C;AACpD,QAAI;AACJ,QAAI;AAEJ,UAAM,kBAAkB;AAAA,MACtB,MAAM;AAAA,MACN,aAAa;AAAA,MACb,KAAK;AAAA,MACL,OAAO,CAAC;AAAA,IACV;AAEA,aAAS,cAAiBC,OAA6B;AACrD,UAAI;AACJ,UAAI,OAAO,WAAW,eAAe,OAAQ,OAAeA,KAAI,MAAM,aAAa;AACjF,cAAO,OAAeA,KAAI;AAAA,MAC5B;AACA,aAAO;AAAA,IACT;AAEA,aAAS,qBAAwBA,OAAiB;AAChD,YAAM,MAAM,cAAiBA,KAAI;AACjC,UAAI,CAAC,KAAK;AACR,cAAM,IAAI,MAAM,GAAGA,KAAI,2BAA2B;AAAA,MACpD;AACA,aAAO;AAAA,IACT;AAEA,aAAS,qBAA+B;AACtC,aAAO,qBAA+B,UAAU;AAAA,IAClD;AAEA,aAAS,qBAA+B;AACtC,aAAO,qBAA+B,UAAU;AAAA,IAClD;AAEA,QAAI;AACF,YAAM,mBAAmB;AACzB,YAAM,mBAAmB;AAAA,IAC3B,SAAS,OAAO;AACd,WAAK,OAAO,KAAK,kCAAkC,KAAK;AACxD,aAAO;AAAA,IACT;AAEA,aAAS,WAAqB;AAC5B,YAAM,QAA2C,IAAI,qBAAqB,MAAM;AAChF,YAAMC,SAAkB,CAAC;AAEzB,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,cAAM,OAAwB,MAAM,CAAC;AAErC,cAAM,MAAqB,KAAK,aAAa,KAAK;AAClD,YAAI,KAAK;AACP,cAAI,IAAI,YAAY,EAAE,QAAQ,MAAM,IAAI,IAAI;AAC1C,kBAAM,OAAsB,KAAK,aAAa,MAAM;AAEpD,gBAAI,MAAM;AACR,kBACE,KAAK,YAAY,EAAE,QAAQ,QAAQ,MAAM,MACzC,KAAK,YAAY,EAAE,QAAQ,OAAO,MAAM,MACxC,KAAK,QAAQ,IAAI,MAAM,GACvB;AACA,oBAAI,eAAuB,IAAI,WAAW,OAAO,IAAI;AAErD,oBAAI,KAAK,QAAQ,GAAG,MAAM,GAAG;AAC3B,kCAAgB;AAAA,gBAClB,OAAO;AACL,wBAAM,OAAiB,IAAI,SAAS,MAAM,GAAG;AAC7C,uBAAK,IAAI;AACT,wBAAM,YAAoB,KAAK,KAAK,GAAG;AACvC,kCAAgB,YAAY,MAAM;AAAA,gBACpC;AAEA,gBAAAA,OAAM,KAAK,YAAY;AAAA,cACzB,WAAW,KAAK,QAAQ,IAAI,MAAM,GAAG;AACnC,sBAAM,cAAsB,IAAI,WAAW;AAE3C,gBAAAA,OAAM,KAAK,WAAW;AAAA,cACxB,OAAO;AACL,gBAAAA,OAAM,KAAK,IAAI;AAAA,cACjB;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,aAAOA;AAAA,IACT;AAEA,aAAS,0BAA0B,MAAwB;AACzD,YAAM,WAA8C,IAAI,qBAAqB,MAAM;AAEnF,eAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,cAAM,MAAuB,SAAS,CAAC;AACvC,cAAM,aAAmC,CAAC,YAAY,YAAY,MAAM,EACrE,IAAI,CAAC,WAAmB,IAAI,aAAa,MAAM,CAAC,EAChD,OAAO,CAAC,SAAwB;AAC/B,cAAI,MAAM;AACR,mBAAO,KAAK,SAAS,IAAI;AAAA,UAC3B;AACA,iBAAO;AAAA,QACT,CAAC;AAEH,YAAI,WAAW,UAAU,YAAY;AACnC,gBAAM,UAAyB,IAAI,aAAa,SAAS;AACzD,cAAI,SAAS;AACX,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAEA,aAAS,UAAkB;AACzB,UAAID,QAAe,uBAAuB,QAAQ,gBAAgB,YAAY,eAAe;AAE7F,UAAI,CAACA,OAAM;AACT,QAAAA,QAAO,IAAI;AAAA,MACb;AAEA,aAAOA;AAAA,IACT;AAEA,aAAS,iBAAyB;AAChC,YAAME,eAAsB;AAAA,QAC1B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,aAAOA;AAAA,IACT;AAEA,UAAM,OAAe,QAAQ;AAC7B,UAAM,cAAsB,eAAe;AAC3C,UAAM,MAAc,IAAI;AACxB,UAAM,QAAkB,SAAS;AAEjC,UAAM,OAAiC;AAAA,MACrC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,mBAAwC;AACpD,SAAK,OAAO,KAAK,wBAAwB;AACzC,UAAM,cAAc,MAAM,OAAO,4BAA4B,GAAG;AAChE,UAAM,SAAS,MAAM,WAAW,KAAK,KAAK,OAAO;AAEjD,WAAO,GAAG,iBAAiB,CAAC,SAAS;AACnC,WAAK,OAAO,KAAK,wBAAwB,IAAI;AAAA,IAC/C,CAAC;AAED,WAAO,GAAG,kBAAkB,CAAC,EAAE,OAAO,OAAO,MAAM;AACjD,WAAK,OAAO,KAAK,yBAAyB,EAAE,OAAO,OAAO,CAAC;AAC3D,YAAM,EAAE,WAAW,IAAI;AACvB,YAAM,UAAU,OAAO,QAAQ,IAAI,KAAK;AACxC,YAAM,iBAAiB,EAAE,GAAG,SAAS,WAAW;AAChD,WAAK,mBAAmB,cAAc;AAAA,IACxC,CAAC;AAED,WAAO,GAAG,kBAAkB,MAAM;AAChC,WAAK,OAAO,KAAK,uBAAuB;AACxC,WAAK,UAAU;AAAA,IACjB,CAAC;AAED,SAAK,SAAS;AACd,SAAK,OAAO,KAAK,oBAAoB;AACrC,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,kBAA+C;AAC3D,SAAK,OAAO,KAAK,uBAAuB;AACxC,UAAM,sBAAsB,MAAM,OAAO,sBAAsB,GAAG;AAClE,UAAM,QAAQ,IAAI,mBAAmB;AAAA,MACnC,WAAW,KAAK,QAAQ;AAAA,MACxB,GAAG,KAAK;AAAA,IACV,CAAC;AAED,UAAM,eAAe,CAAC,UAAU,KAAK,OAAO,KAAK,SAAS,MAAM,OAAO,SAAS,QAAQ,EAAE,CAAC;AAE3F,SAAK,QAAQ;AACb,SAAK,OAAO,KAAK,mBAAmB;AACpC,WAAO;AAAA,EACT;AAAA,EAEQ,mBAAmB,SAA+C;AACxE,UAAM,eAAe,QAAQ,WAAW,SAAU;AAElD,QAAI,CAAC,aAAa,QAAQ;AACxB,WAAK,OAAO,MAAM,oBAAoB;AACtC,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACtC;AAKA,UAAM,WAAW,CAAC,GAAG,IAAI,IAAI,aAAa,IAAI,CAAC,YAAY,QAAQ,MAAM,GAAG,EAAE,IAAI,CAAE,CAAC,CAAC;AAEtF,UAAM,iBAAiB,SAAS,IAAI,CAAC,SAAiB,SAAiB;AAAA,MACrE,MAAM,GAAG,KAAK,SAAS,IAAI,YAAY,MAAM,CAAC;AAAA,MAC9C;AAAA,IACF,EAAE;AAEF,UAAM,QAAQ,KAAK,MAAM;AACzB,UAAM,cAAc,MAAM,QAAQ,KAAK,SAAS;AAEhD,QAAI,CAAC,aAAa;AAChB,YAAM,iBAA8B;AAAA,QAClC,UAAU;AAAA,QACV,eAAe,eAAe,CAAC;AAAA,MACjC;AAEA,gBAAU,KAAK,OAAO;AAAA,QACpB,UAAU,KAAK;AAAA,QACf,QAAQ;AAAA,MACV,CAAC;AAED,WAAK,OAAO,KAAK,aAAa,cAAc;AAAA,IAC9C,OAAO;AACL,YAAM,QAAQ,gBAAgB,gBAAgB,YAAY,QAAQ;AAElE,UAAI,CAAC,OAAO;AACV,aAAK,OAAO,KAAK,gDAAgD;AAAA,UAC/D,MAAM,YAAY;AAAA,UAClB,SAAS;AAAA,QACX,CAAC;AACD,oBAAY,KAAK,OAAO;AAAA,UACtB,UAAU,KAAK;AAAA,UACf,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF;AAEA,SAAK,UAAU;AACf,WAAO;AAAA,EACT;AAAA,EAEA,IAAW,gBAAwB;AACjC,UAAM,UAAU,KAAK;AACrB,QAAI,CAAC,SAAS,aAAa;AACzB,WAAK,OAAO,KAAK,yCAAyC,KAAK,aAAa,EAAE;AAC9E,aAAO;AAAA,IACT;AACA,WAAO,QAAQ;AAAA,EACjB;AAAA,EAEO,UAAU,YAAsC;AACrD,SAAK,OAAO,KAAK,eAAe;AAChC,QAAI;AACF,YAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAC3D,YAAM,QAAQ,KAAK,SAAU,MAAM,KAAK,gBAAgB;AAExD,YAAM,qBAAqB;AAAA,QACzB,UAAU;AAAA,UACR,QAAQ,CAAC,KAAK,aAAa;AAAA,UAC3B,SAAS,CAAC,cAAc;AAAA,UACxB,QAAQ,CAAC;AAAA,QACX;AAAA,MACF;AAEA,YAAM,EAAE,KAAK,SAAS,IAAI,MAAM,OAAO,QAAQ,EAAE,mBAAmB,CAAC;AAErE,UAAI,CAAC,KAAK;AACR,aAAK,OAAO,MAAM,cAAc;AAChC,cAAM,IAAI,MAAM,cAAc;AAAA,MAChC;AAEA,YAAM,MAAM,UAAU,EAAE,IAAI,CAAC;AAE7B,YAAM,UAAU,MAAM,SAAS;AAC/B,YAAM,iBAAiB,KAAK,mBAAmB,OAAO;AAEtD,WAAK,OAAO,KAAK,wBAAwB;AACzC,aAAO;AAAA,IACT,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,qBAAqB,MAAM,OAAO;AACpD,YAAM;AAAA,IACR,UAAE;AACA,WAAK,OAAO,WAAW;AAAA,IACzB;AAAA,EACF;AAAA,EAEO,aAAa,YAA2B;AAC7C,SAAK,OAAO,KAAK,kBAAkB;AACnC,QAAI;AACF,WAAK,aAAa;AAClB,UAAI,KAAK,UAAU,KAAK,SAAS;AAC/B,cAAM,KAAK,OAAO,WAAW;AAAA,UAC3B,OAAO,KAAK,QAAQ;AAAA,UACpB,QAAQ;AAAA,YACN,SAAS;AAAA,YACT,MAAM;AAAA,UACR;AAAA,QACF,CAAC;AAAA,MACH;AACA,WAAK,OAAO,KAAK,cAAc;AAAA,IACjC,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,wBAAwB,MAAM,OAAO;AACvD,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEO,gBAAgB,YAA2B;AAChD,QAAI;AACF,YAAM,QAAQ,KAAK,MAAM;AACzB,YAAM,cAAc,MAAM,QAAQ,KAAK,SAAS;AAGhD,UAAI,CAAC,aAAa;AAChB,aAAK,OAAO,KAAK,sBAAsB;AACvC;AAAA,MACF;AAEA,WAAK,OAAO,KAAK,qBAAqB;AAEtC,YAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAE3D,UAAI,OAAO,QAAQ,QAAQ;AACzB,cAAM,eAAe,OAAO,QAAQ,KAAK,SAAS;AAClD,cAAM,kBAAkB,OAAO,QAAQ,IAAI,OAAO,QAAQ,KAAK,YAAY,CAAC;AAC5E,aAAK,mBAAmB,eAAe;AAAA,MACzC;AACA,WAAK,OAAO,KAAK,8BAA8B;AAAA,IACjD,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,2BAA2B,MAAM,OAAO;AAC1D,WAAK,aAAa;AAClB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,YACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,KAAK,UAAU;AAC/B,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,IAAI,OAAO,SAAS;AACnC,YAAM,aAAa,KAAK,UAAU,SAAS,MAAM;AAEjD,YAAM,YAAY,kBAAkB,IAAI,OAAO,CAAC;AAEhD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,KAAK,UAAU,CAAC;AAAA,MACpC,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,WAAW,SAAS,CAAC,EAAE,CAAC;AAAA,MACjD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEQ,mBACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,WAAW,UAAU;AACrC,YAAM,aAAa,gBAAAC,QAAQ,iBAAiB,SAAS;AACrD,YAAM,WAAW,YAAY,UAAU;AAEvC,YAAM,MAA2B,WAC7B,gBAAAA,QAAQ,wBAAwB,SAAS,EAAE,MAC3C,gBAAAA,QAAQ,0BAA0B,SAAS;AAE/C,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,IAAI,OAAO,SAAS;AACnC,YAAM,aAAa,CAAC,YAAY,KAAK,UAAU,SAAS,MAAM;AAE9D,YAAM,YAAY,kBAAkB,IAAI,OAAO,CAAC;AAEhD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,KAAK,UAAU,CAAC;AAAA,MACpC,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,WAAW,SAAS,CAAC,EAAE,CAAC;AAAA,MACjD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEO,mBAAmB,OACxB,UACA,kBACmC;AACnC,QAAI;AACF,UAAI,CAAC,KAAK,SAAS;AACjB,aAAK,OAAO,MAAM,mBAAmB;AACrC,cAAM,IAAI,aAAa,mBAAmB;AAAA,MAC5C;AAEA,WAAK,OAAO,MAAM,2BAA2B,EAAE,UAAU,cAAc,CAAC;AAExE,UAAI,aAAkC,CAAC;AAGvC,UAAI,mBAAmB,QAAQ,GAAG;AAChC,cAAM,WAAkC,gBAAgB,QAAQ;AAChE,qBAAa,KAAK,YAAY,UAAU,aAAa;AAAA,MACvD,OAAO;AACL,cAAM,WAAyB,gBAAgB,QAAwB;AACvE,qBAAa,KAAK,mBAAmB,UAAU,aAAa;AAAA,MAC9D;AAEA,YAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAE3D,WAAK,OAAO,MAAM,+CAA+C,CAAC,UAAU,CAAC;AAG7E,YAAM,UAAU,qBAAqB,gBAAgB,CAAC,UAAU,CAAC;AAGjE,YAAM,iBAAiB,MAAM,OAAO,QAA0B;AAAA,QAC5D,SAAS,KAAK;AAAA,QACd,OAAO,KAAK,QAAQ;AAAA,QACpB;AAAA,MACF,CAAC;AAED,WAAK,OAAO,MAAM,4CAA4C,cAAc;AAG5E,YAAM,aAAa,eAAe,OAAqB,CAAC,KAAK,UAAU;AACrE,YAAI,OAAO;AACT,cAAI;AACJ,cAAI,OAAO,UAAU,UAAU;AAC7B,wBAAY,kBAAkB,KAAK;AAAA,UACrC,WAAW,iBAAiB,YAAY;AACtC,wBAAY;AAAA,UACd,WAAW,MAAM,QAAQ,KAAK,GAAG;AAC/B,wBAAY,IAAI,WAAW,KAAK;AAAA,UAClC,OAAO;AAEL,iBAAK,OAAO,KAAK,qCAAqC,KAAK;AAC3D,wBAAY,IAAI,WAAW;AAAA,UAC7B;AACA,cAAI,KAAK,SAAS;AAAA,QACpB;AACA,eAAO;AAAA,MACT,GAAG,CAAC,CAAC;AAGL,YAAM,SAAS,WAAW,OAA8B,CAAC,KAAK,QAAQ;AACpE,YAAI,IAAI,WAAW,IAAI,QAAQ,UAAU,GAAG;AAC1C,cAAI,KAAK,IAAI;AAAA,QACf,OAAO;AACL,gBAAM,YAAY,WAAW,MAAM;AACnC,cAAI,WAAW;AACb,gBAAI,KAAK,SAAS;AAAA,UACpB;AAAA,QACF;AACA,eAAO;AAAA,MACT,GAAG,CAAC,CAAC;AAEL,WAAK,OAAO,MAAM,oCAAoC,MAAM;AAC5D,aAAO;AAAA,IACT,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,+BAA+B,MAAM,OAAO;AAC9D,YAAM;AAAA,IACR;AAAA,EACF;AACF;;;AG3lBA,IAAMC,QAAO,6BAA6B,KAAK;AAAA;AAAA,CAE9C,CAAC;AAUK,IAAM,eAAN,MAAM,sBAAqB,cAAc;AAAA,EAC9C,OAAe,0BAA0B;AAAA,EAEzC,YAAY,MAA0C;AACpD,UAAM,IAAiD;AAGvD,QAAI,CAAC,cAAa,yBAAyB;AACzC,oBAAa,0BAA0B;AACvC,aAAO;AAAA,QACL;AAAA,MAGF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB,MAAM;AAAA,IACN,MAAMA;AAAA,EACR;AACF;;;ACLA,IAAMC,QAAO,6BAA6B,KAAK;AAAA;AAAA;AAAA;AAAA,CAI9C,CAAC;AAEK,IAAM,eAAN,cAA2B,WAAW;AAAA,EACnC;AAAA,EACE;AAAA,EAEV,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,CAAC;AAAA,EACd,GAAuC;AACrC,UAAM,EAAE,IAAI,UAAU,gBAAgB,OAAO,UAAU,CAAC;AACxD,QAAI,CAAC,SAAS,UAAU;AACtB,WAAK,OAAO,MAAM,mCAAmC;AACrD,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACrD;AACA,SAAK,WAAW,QAAQ;AACxB,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB,MAAM;AAAA,IACN,MAAMA;AAAA,EACR;AAAA,EAEO,UAAU,OAAO,SAAyD;AAC/E,SAAK,OAAO,KAAK,eAAe;AAChC,QAAI;AACF,UAAI,CAAC,KAAK,SAAS,SAAS;AAC1B,aAAK,OAAO,MAAM,+BAA+B;AACjD,cAAM,IAAI,MAAM,+BAA+B;AAAA,MACjD;AAEA,YAAM,iBAAiB,MAAM,KAAK,SAAS,QAAQ,IAAI;AAEvD,UAAI,eAAe,WAAW,GAAG;AAC/B,aAAK,OAAO,MAAM,oBAAoB;AACtC,cAAM,IAAI,MAAM,oBAAoB;AAAA,MACtC;AAEA,YAAM,gBAAgB,eAAe,CAAC;AAEtC,YAAM,cAA2B;AAAA,QAC/B,UAAU;AAAA,QACV;AAAA,MACF;AAEA,gBAAU,KAAK,OAAO;AAAA,QACpB,UAAU,KAAK;AAAA,QACf,QAAQ;AAAA,MACV,CAAC;AAED,WAAK,OAAO,KAAK,qBAAgB,WAAW;AAC5C,aAAO;AAAA,IACT,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,qBAAqB,MAAM,WAAW,KAAK;AAC7D,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEO,aAAa,YAA2B;AAC7C,SAAK,OAAO,KAAK,kBAAkB;AACnC,SAAK,aAAa;AAClB,UAAM,KAAK,SAAS,aAAa;AAAA,EACnC;AAAA,EAEO,gBAAgB,YAA2B;AAChD,QAAI;AACF,YAAM,QAAQ,KAAK,MAAM;AACzB,YAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AAGzC,UAAI,CAAC,aAAa;AAChB,aAAK,OAAO,KAAK,sBAAsB;AACvC;AAAA,MACF;AAEA,WAAK,OAAO,KAAK,qBAAqB;AAEtC,YAAM,SAAS,MAAM,KAAK,SAAS,gBAAgB;AAEnD,UAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,cAAM,iBAAiB;AAEvB,YAAI,eAAe,WAAW,GAAG;AAC/B,eAAK,OAAO,MAAM,oBAAoB;AACtC,gBAAM,IAAI,MAAM,oBAAoB;AAAA,QACtC;AAEA,cAAM,QAAQ,gBAAgB,gBAAgB,YAAY,QAAQ;AAElE,YAAI,CAAC,OAAO;AACV,eAAK,OAAO,KAAK,gDAAgD;AAAA,YAC/D,MAAM,YAAY;AAAA,YAClB,SAAS;AAAA,UACX,CAAC;AACD,sBAAY,KAAK,OAAO;AAAA,YACtB,UAAU,KAAK;AAAA,YACf,UAAU;AAAA,UACZ,CAAC;AAAA,QACH;AAAA,MACF;AACA,WAAK,OAAO,KAAK,kBAAkB;AAAA,IACrC,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,2BAA2B,MAAM,OAAO;AAC1D,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEO,mBAAmB,OACxB,UACA,kBACmC;AACnC,QAAI,CAAC,KAAK,SAAS,kBAAkB;AACnC,WAAK,OAAO,MAAM,wCAAwC;AAC1D,YAAM,IAAI,MAAM,wCAAwC;AAAA,IAC1D;AACA,SAAK,OAAO,MAAM,2BAA2B,EAAE,UAAU,cAAc,CAAC;AACxE,WAAO,MAAM,KAAK,SAAS,iBAAiB,UAAU,aAAa;AAAA,EACrE;AAAA,EAEO,oBAAoB,OACzB,UACA,kBAC0B;AAC1B,QAAI,CAAC,KAAK,SAAS,mBAAmB;AACpC,WAAK,OAAO,MAAM,yCAAyC;AAC3D,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC3D;AACA,SAAK,OAAO,MAAM,gCAAgC,EAAE,UAAU,cAAc,CAAC;AAC7E,WAAO,MAAM,KAAK,SAAS,kBAAkB,UAAU,aAAa;AAAA,EACtE;AAAA,EAEO,WAAW,OAAO,MAAc,aAAsD;AAC3F,QAAI,CAAC,KAAK,SAAS,UAAU;AAC3B,WAAK,OAAO,MAAM,gCAAgC;AAClD,YAAM,IAAI,MAAM,gCAAgC;AAAA,IAClD;AACA,SAAK,OAAO,MAAM,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACvD,WAAO,MAAM,KAAK,SAAS,SAAS,MAAM,QAAQ;AAAA,EACpD;AACF;;;ACpLA,IAAAC,kBAAoB;AAepB,IAAMC,QAAO,6BAA6B,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAM9C,CAAC;AAEK,IAAM,cAAN,cAA0B,WAAW;AAAA,EAClC,SAAoC;AAAA,EACpC;AAAA,EAEE;AAAA,EAEV,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,CAAC;AAAA,IACX,WAAW,CAAC;AAAA,EACd,GAAsC;AACpC,UAAM,EAAE,IAAI,UAAU,gBAAgB,OAAO,UAAU,CAAC;AACxD,SAAK,UAAU;AACf,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB,MAAM;AAAA,IACN,MAAMA;AAAA,EACR;AAAA,EAEA,MAAc,mBAAgD;AAC5D,SAAK,OAAO,KAAK,wBAAwB;AACzC,UAAM,EAAE,mBAAmB,IAAI,MAAM,OAAO,2BAA2B;AACvE,UAAM,SAAS,IAAI,mBAAmB,KAAK,OAAO;AAClD,SAAK,SAAS;AACd,SAAK,OAAO,KAAK,oBAAoB;AACrC,WAAO;AAAA,EACT;AAAA,EAEO,UAAU,YAAsC;AACrD,SAAK,OAAO,KAAK,eAAe;AAChC,UAAM,sBAAsB,KAAK,MAAM,MAAM;AAC7C,QAAI,uBAAuB,wBAAwB,KAAK,IAAI;AAC1D,WAAK,2BAA2B,UAAU,mBAAmB;AAAA,IAC/D;AACA,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAC3D,UAAM,WAAW,MAAM,OAAO,QAAQ;AAGtC,WAAO,WAAW,GAAG,cAAc,KAAK,YAAY;AAEpD,QAAI,SAAS,WAAW,GAAG;AACzB,WAAK,OAAO,MAAM,oBAAoB;AACtC,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACtC;AAEA,UAAM,iBAAiB,SAAS,IAAI,CAAC,SAAiB,SAAiB;AAAA,MACrE,MAAM,GAAG,KAAK,SAAS,IAAI,YAAY,MAAM,CAAC;AAAA,MAC9C;AAAA,IACF,EAAE;AAEF,UAAM,gBAAgB,eAAe,CAAC;AAEtC,UAAM,cAA2B;AAAA,MAC/B,UAAU;AAAA,MACV;AAAA,IACF;AAEA,cAAU,KAAK,OAAO;AAAA,MACpB,UAAU,KAAK;AAAA,MACf,QAAQ;AAAA,IACV,CAAC;AAED,SAAK,OAAO,KAAK,qBAAgB,WAAW;AAC5C,WAAO;AAAA,EACT;AAAA,EAEO,aAAa,YAA2B;AAC7C,SAAK,OAAO,KAAK,kBAAkB;AACnC,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAE3D,UAAM,sBAAsB,KAAK,MAAM,MAAM;AAC7C,QAAI,uBAAuB,wBAAwB,KAAK,IAAI;AAC1D,WAAK,2BAA2B,UAAU,mBAAmB;AAC7D,WAAK,2BAA2B,WAAW,KAAK,EAAE;AAClD,YAAM,OAAO,WAAW;AAExB,YAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,GAAG,CAAC;AACvD,WAAK,2BAA2B,WAAW,mBAAmB;AAAA,IAChE,OAAO;AACL,YAAM,OAAO,WAAW;AAAA,IAC1B;AAEA,SAAK,aAAa;AAClB,SAAK,OAAO,KAAK,cAAc;AAAA,EACjC;AAAA,EAEO,YAAY,MAAY;AAC7B,SAAK,OAAO,KAAK,sBAAsB,KAAK,EAAE,EAAE;AAChD,UAAM,sBAAsB,KAAK,MAAM,MAAM;AAC7C,QAAI,uBAAuB,2CAAuC;AAChE,WAAK,2BAA2B,UAAU,mBAAmB;AAAA,IAC/D;AACA,SAAK,2BAA2B,SAAS;AACzC,oBAAgB,KAAK,OAAO,EAAE,UAAU,KAAK,GAAG,CAAC;AAAA,EACnD;AAAA,EAEO,gBAAgB,YAA2B;AAChD,QAAI;AACF,YAAM,QAAQ,KAAK,MAAM;AACzB,YAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AAGzC,UAAI,CAAC,aAAa;AAChB,aAAK,OAAO,KAAK,sBAAsB;AACvC;AAAA,MACF;AAGA,UAAI,MAAM,oCAAgC;AACxC,aAAK,OAAO,KAAK,gDAAgD;AACjE;AAAA,MACF;AAEA,WAAK,OAAO,KAAK,qBAAqB;AAEtC,YAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAC3D,YAAM,WAAW,MAAM,OAAO,iBAAiB;AAE/C,UAAI,SAAS,WAAW,GAAG;AACzB,aAAK,OAAO,MAAM,oBAAoB;AACtC,cAAM,IAAI,MAAM,oBAAoB;AAAA,MACtC;AAEA,YAAM,iBAAiB,SAAS,IAAI,CAAC,SAAiB,SAAiB;AAAA,QACrE,MAAM,GAAG,KAAK,SAAS,IAAI,YAAY,MAAM,CAAC;AAAA,QAC9C;AAAA,MACF,EAAE;AAEF,YAAM,QAAQ,gBAAgB,gBAAgB,YAAY,QAAQ;AAElE,UAAI,CAAC,OAAO;AACV,aAAK,OAAO,KAAK,gDAAgD;AAAA,UAC/D,MAAM,YAAY;AAAA,UAClB,SAAS;AAAA,QACX,CAAC;AACD,oBAAY,KAAK,OAAO;AAAA,UACtB,UAAU,KAAK;AAAA,UACf,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AACA,WAAK,OAAO,KAAK,iBAAiB;AAAA,IACpC,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,2BAA2B,MAAM,OAAO;AAC1D,WAAK,aAAa;AAClB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,YACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,KAAK,UAAU;AAC/B,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,IAAI,OAAO,SAAS;AACnC,YAAM,aAAa,KAAK,UAAU,SAAS,MAAM;AAEjD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,IAAI,CAAC;AAAA,MACzB,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC;AAAA,MACtC;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEQ,mBACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,WAAW,UAAU;AACrC,YAAM,aAAa,gBAAAC,QAAQ,iBAAiB,SAAS;AACrD,YAAM,WAAW,YAAY,UAAU;AAEvC,YAAM,MAA2B,WAC7B,gBAAAA,QAAQ,wBAAwB,SAAS,EAAE,MAC3C,gBAAAA,QAAQ,0BAA0B,SAAS;AAE/C,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,IAAI,OAAO,SAAS;AACnC,YAAM,aAAa,CAAC,YAAY,KAAK,UAAU,SAAS,MAAM;AAE9D,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,IAAI,CAAC;AAAA,MACzB,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC;AAAA,MACtC;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEO,mBAAmB,OACxB,UACA,kBACmC;AACnC,QAAI;AACF,WAAK,OAAO,MAAM,2BAA2B,EAAE,UAAU,cAAc,CAAC;AACxE,UAAI,aAAkC,CAAC;AAGvC,UAAI,mBAAmB,QAAQ,GAAG;AAChC,cAAM,WAAkC,gBAAgB,QAAQ;AAChE,qBAAa,KAAK,YAAY,UAAU,aAAa;AAAA,MACvD,OAAO;AACL,cAAM,WAAyB,gBAAgB,QAAwB;AACvE,qBAAa,KAAK,mBAAmB,UAAU,aAAa;AAAA,MAC9D;AAEA,YAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAE3D,WAAK,OAAO,MAAM,+CAA+C,CAAC,UAAU,CAAC;AAG7E,YAAM,aAAa,MAAM,OAAO,gBAAgB,CAAC,UAAU,CAAC;AAC5D,WAAK,OAAO,MAAM,4CAA4C,UAAU;AAGxE,YAAM,SAAS,WAAW,OAA8B,CAAC,KAAK,QAAQ;AACpE,YAAI,IAAI,WAAW,IAAI,QAAQ,UAAU,GAAG;AAC1C,cAAI,KAAK,IAAI;AAAA,QACf,OAAO;AACL,gBAAM,YAAY,WAAW,MAAM;AACnC,cAAI,WAAW;AACb,gBAAI,KAAK,SAAS;AAAA,UACpB;AAAA,QACF;AACA,eAAO;AAAA,MACT,GAAG,CAAC,CAAC;AAEL,WAAK,OAAO,MAAM,oCAAoC,MAAM;AAC5D,aAAO;AAAA,IACT,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,+BAA+B,MAAM,OAAO;AAC9D,YAAM;AAAA,IACR;AAAA,EACF;AACF;;;AC9QA,IAAAC,kBAAoB;AAcb,SAAS,yBAAyB,OAAyD;AAChG,SAAO,OAAO,UAAU,YAAY,UAAU,SAAS,aAAa;AACtE;AAEO,IAAe,cAAf,cAAmC,WAAW;AAAA,EAC5C,eAAsD;AAAA,EACnD,oBAAqD;AAAA,EACrD;AAAA,EAEV,YAAY,MAA4D;AACtE,UAAM,IAAI;AACV,SAAK,aAAa,KAAK;AAAA,EACzB;AAAA,EAEA,MAAgB,+BAAkE;AAChF,QAAI,CAAC,KAAK,mBAAmB;AAC3B,WAAK,OAAO,KAAK,gDAAgD;AAEjE,YAAMC,UAAS,MAAM,OAAO,gCAAgC;AAC5D,WAAK,oBAAoBA,QAAO,UAAUA,QAAO,UAAUA;AAE3D,UAAI,CAAC,KAAK,mBAAmB;AAC3B,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAEA,UAAI,CAAC,KAAK,kBAAkB,cAAc;AACxC,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,WAAK,OAAO,KAAK,gDAAgD;AAAA,IACnE;AAEA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAgB,0BAAmE;AACjF,UAAM,oBAAoB,MAAM,KAAK,6BAA6B;AAElE,QAAI,CAAC,kBAAkB,cAAc;AACnC,YAAM,IAAI,MAAM,8CAA8C;AAAA,IAChE;AAEA,QAAI,CAAC,KAAK,cAAc;AACtB,WAAK,OAAO,KAAK,oCAAoC;AACrD,WAAK,eAAe,kBAAkB,aAAa,KAAK;AACxD,WAAK,OAAO,KAAK,4BAA4B;AAAA,IAC/C;AAEA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAgB,kBAAmC;AAEjD,UAAM,UAAU,KAAK;AACrB,QAAI,QAAQ,aAAa;AACvB,aAAO,QAAQ;AAAA,IACjB;AAGA,UAAM,cAAc,KAAK,eAAe;AACxC,UAAM,UAAU,MAAM,YAAY,cAAc,EAAE,GAAG;AACrD,WAAO,gBAAAC,QAAQ,cAAc,QAAQ,cAAc;AAAA,EACrD;AAAA,EAEU,0CACR,UACiB;AACjB,WAAO,SAAS,IAAI,CAAC,EAAE,SAAS,KAAK,GAAG,SAAS;AAAA,MAC/C,MAAM,QAAQ,IAAI,KAAK,SAAS,IAAI,aAAa,MAAM,CAAC;AAAA,MACxD;AAAA,IACF,EAAE;AAAA,EACJ;AAAA,EAEU,YACR,UACA,eACyC;AACzC,UAAM,aAAsD,CAAC;AAE7D,aAAS,QAAQ,CAAC,KAAK,UAAU;AAC/B,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,IAAI,OAAO,SAAS;AACnC,YAAM,aAAa,KAAK,UAAU,SAAS,MAAM;AAEjD,YAAM,YAAY,kBAAkB,IAAI,OAAO,CAAC;AAEhD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,KAAK,UAAU,CAAC;AAAA,MACpC,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,WAAW,SAAS,CAAC,EAAE,CAAC;AAAA,MACjD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEU,mBACR,UACA,eACyC;AACzC,UAAM,aAAsD,CAAC;AAE7D,aAAS,QAAQ,CAAC,WAAW,UAAU;AACrC,YAAM,aAAa,gBAAAA,QAAQ,iBAAiB,SAAS;AACrD,YAAM,WAAW,YAAY,UAAU;AAEvC,YAAM,MAA2B,WAC7B,gBAAAA,QAAQ,wBAAwB,SAAS,EAAE,MAC3C,gBAAAA,QAAQ,0BAA0B,SAAS;AAE/C,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,IAAI,OAAO,SAAS;AACnC,YAAM,aAAa,CAAC,YAAY,KAAK,UAAU,SAAS,MAAM;AAE9D,YAAM,YAAY,kBAAkB,IAAI,OAAO,CAAC;AAEhD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,KAAK,UAAU,CAAC;AAAA,MACpC,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,WAAW,SAAS,CAAC,EAAE,CAAC;AAAA,MACjD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,MAAa,UAAoC;AAC/C,QAAI;AACF,WAAK,OAAO,KAAK,eAAe;AAChC,YAAM,SAAS,MAAM,KAAK,QAAQ;AAClC,WAAK,OAAO,KAAK,sCAAsC,OAAO,SAAS,GAAG;AAE1E,YAAM,iBAAiB,KAAK,0CAA0C,OAAO,QAAQ;AAErF,YAAM,cAA2B;AAAA,QAC/B,UAAU;AAAA,QACV,eAAe,eAAe,CAAC;AAAA,MACjC;AAEA,gBAAU,KAAK,OAAO;AAAA,QACpB,UAAU,KAAK;AAAA,QACf,QAAQ;AAAA,MACV,CAAC;AAED,WAAK,OAAO,KAAK,qBAAgB,WAAW;AAC5C,aAAO;AAAA,IACT,SAAS,OAAY;AACnB,WAAK,OAAO;AAAA,QACV;AAAA,QACA,yBAAyB,KAAK,IAAI,GAAG,MAAM,OAAO,WAAW,MAAM,IAAI,MAAM,MAAM;AAAA,MACrF;AACA,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAa,aAA4B;AACvC,QAAI;AACF,WAAK,OAAO,KAAK,kBAAkB;AACnC,WAAK,aAAa;AAElB,YAAM,SAAS,MAAM,KAAK,SAAS;AAEnC,WAAK,OAAO;AAAA,QACV,4BAA4B,OAAO,cAAc,OAAO,WAAW,SAAS,cAAc,OAAO,WAAW,KAAK,GAAG,CAAC,MAAM,EAAE,gBAAgB,OAAO,SAAS;AAAA,MAC/J;AAAA,IACF,SAAS,OAAY;AACnB,WAAK,OAAO;AAAA,QACV;AAAA,QACA,yBAAyB,KAAK,IAAI,GAAG,MAAM,OAAO,WAAW,MAAM,IAAI,MAAM,MAAM;AAAA,MACrF;AACA,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAa,gBAA+B;AAC1C,UAAM,QAAQ,KAAK,MAAM;AACzB,UAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AAEzC,QAAI,CAAC,aAAa;AAChB,WAAK,OAAO,KAAK,sBAAsB;AACvC;AAAA,IACF;AAEA,QAAI;AACF,WAAK,OAAO,KAAK,qBAAqB;AAEtC,YAAM,SAAS,MAAM,KAAK,QAAQ;AAElC,UAAI,OAAO,SAAS,WAAW,GAAG;AAChC,cAAM,IAAI,MAAM,oBAAoB;AAAA,MACtC;AAEA,YAAM,iBAAiB,KAAK,0CAA0C,OAAO,QAAQ;AACrF,YAAM,QAAQ,gBAAgB,gBAAgB,YAAY,QAAQ;AAElE,UAAI,CAAC,OAAO;AACV,aAAK,OAAO,KAAK,gDAAgD;AAAA,UAC/D,MAAM,YAAY;AAAA,UAClB,SAAS;AAAA,QACX,CAAC;AAED,oBAAY,KAAK,OAAO;AAAA,UACtB,UAAU,KAAK;AAAA,UACf,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AACA,WAAK,OAAO,KAAK,8BAA8B;AAAA,IACjD,SAAS,OAAY;AACnB,WAAK,OAAO;AAAA,QACV;AAAA,QACA,yBAAyB,KAAK,IAAI,GAAG,MAAM,OAAO,WAAW,MAAM,IAAI,MAAM,MAAM;AAAA,MACrF;AACA,WAAK,aAAa;AAClB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAa,iBACX,UACA,eACgC;AAChC,QAAI;AACF,WAAK,OAAO,MAAM,2BAA2B,EAAE,UAAU,cAAc,CAAC;AACxE,UAAI,aAAsD,CAAC;AAG3D,UAAI,mBAAmB,QAAQ,GAAG;AAChC,cAAM,WAAkC,gBAAgB,QAAQ;AAChE,qBAAa,KAAK,YAAY,UAAU,aAAa;AAAA,MACvD,OAAO;AACL,cAAM,WAAyB,gBAAgB,QAAwB;AACvE,qBAAa,KAAK,mBAAmB,UAAU,aAAa;AAAA,MAC9D;AAEA,WAAK,OAAO,MAAM,+CAA+C,UAAU;AAG3E,YAAM,iBAAiB,MAAM,KAAK,kBAAkB,UAAU;AAC9D,WAAK,OAAO,MAAM,4CAA4C,cAAc;AAG5E,YAAM,SAAS,eAAe,MAAM,IAAI,CAAC,UAAU;AACjD,YAAI,UAAU,MAAM;AAClB,iBAAO;AAAA,QACT;AACA,eAAO,kBAAkB,KAAK;AAAA,MAChC,CAAC;AAED,WAAK,OAAO,MAAM,oCAAoC,MAAM;AAC5D,aAAO;AAAA,IACT,SAAS,OAAY;AACnB,WAAK,OAAO;AAAA,QACV;AAAA,QACA,yBAAyB,KAAK,IAAI,GAAG,MAAM,OAAO,WAAW,MAAM,IAAI,MAAM,MAAM;AAAA,MACrF;AACA,YAAM;AAAA,IACR;AAAA,EACF;AACF;;;AC7RO,IAAM,wBAAwB;AAErC,IAAMC,QAAO,6BAA6B,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAM9C,CAAC;AAEK,IAAM,iBAAN,cAA6B,YAAY;AAAA,EAC9C,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,CAAC;AAAA,EACd,GAA0C;AACxC,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB,MAAM;AAAA,IACN,MAAMA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAgB,UAAoD;AAClE,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI,MAAM,KAAK,6BAA6B;AAC5C,UAAM,eAAe,MAAM,KAAK,wBAAwB;AACxD,UAAM,cAAc,MAAM,KAAK,gBAAgB;AAE/C,WAAO,IAAI,QAAyC,CAAC,SAAS,WAAW;AACvE,YAAM,UAAU,OAAO,WAAW,MAAM;AAEtC,qBAAa,eAAe,UAAU;AACtC;AAAA,UACE,IAAI,2BAA2B;AAAA,YAC7B,QAAQ,kBAAkB;AAAA,YAC1B,SAAS,8BAA8B,KAAK,SAAS,IAAI;AAAA,YACzD,YAAY;AAAA,UACd,CAAC;AAAA,QACH;AAAA,MACF,GAAG,uBAAuB;AAC1B,YAAM,aAAa,aAAa,SAAS,CAAC,EAAE,OAAO,QAAQ,OAAO,MAAM;AAEtE,qBAAa,eAAe,UAAU;AAGtC,eAAO,aAAa,OAAO;AAE3B,YAAI,OAAO;AACT,iBAAO,OAAO,KAAK;AAAA,QACrB;AAEA,YAAI,CAAC,QAAQ;AACX,iBAAO;AAAA,YACL,IAAI,oBAAoB;AAAA,cACtB,SAAS,2BAA2B,MAAM,8CAA8C,KAAK,SAAS,IAAI;AAAA,cAC1G,YAAY;AAAA,YACd,CAAC;AAAA,UACH;AAAA,QACF;AAEA,eAAO,QAAQ,MAAM;AAAA,MACvB,CAAC;AAGD,mBAAa,OAAO;AAAA,QAClB;AAAA,QACA,YAAY;AAAA,MACd,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAgB,WAAsD;AACpE,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI,MAAM,KAAK,6BAA6B;AAC5C,UAAM,eAAe,MAAM,KAAK,wBAAwB;AACxD,UAAM,cAAc,MAAM,KAAK,gBAAgB;AAE/C,WAAO,IAAI,QAA0C,CAAC,SAAS,WAAW;AACxE,YAAM,UAAU,OAAO,WAAW,MAAM;AAEtC,qBAAa,eAAe,UAAU;AACtC;AAAA,UACE,IAAI,2BAA2B;AAAA,YAC7B,QAAQ,kBAAkB;AAAA,YAC1B,SAAS,8BAA8B,KAAK,SAAS,IAAI;AAAA,YACzD,YAAY;AAAA,UACd,CAAC;AAAA,QACH;AAAA,MACF,GAAG,qBAAqB;AACxB,YAAM,aAAa,aAAa,UAAU,CAAC,EAAE,OAAO,QAAQ,OAAO,MAAM;AAEvE,qBAAa,eAAe,UAAU;AAGtC,eAAO,aAAa,OAAO;AAE3B,YAAI,OAAO;AACT,iBAAO,OAAO,KAAK;AAAA,QACrB;AAEA,YAAI,CAAC,QAAQ;AACX,iBAAO;AAAA,YACL,IAAI,oBAAoB;AAAA,cACtB,SAAS,2BAA2B,MAAM,8CAA8C,KAAK,SAAS,IAAI;AAAA,cAC1G,YAAY;AAAA,YACd,CAAC;AAAA,UACH;AAAA,QACF;AAEA,aAAK,OAAO,MAAM,sBAAsB,EAAE,OAAO,CAAC;AAClD,eAAO,QAAQ,MAAM;AAAA,MACvB,CAAC;AAED,WAAK,OAAO,MAAM,8BAA8B,EAAE,YAAY,CAAC;AAC/D,mBAAa,QAAQ;AAAA,QACnB;AAAA,QACA,YAAY;AAAA,MACd,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,MAAgB,kBACd,MACoD;AACpD,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI,MAAM,KAAK,6BAA6B;AAC5C,UAAM,eAAe,MAAM,KAAK,wBAAwB;AAExD,WAAO,IAAI,QAAmD,CAAC,SAAS,WAAW;AACjF,YAAM,UAAU,OAAO,WAAW,MAAM;AAEtC,qBAAa,eAAe,UAAU;AACtC;AAAA,UACE,IAAI,2BAA2B;AAAA,YAC7B,QAAQ,kBAAkB;AAAA,YAC1B,SAAS,8BAA8B,KAAK,SAAS,IAAI;AAAA,YACzD,YAAY;AAAA,UACd,CAAC;AAAA,QACH;AAAA,MACF,GAAG,uBAAuB;AAC1B,YAAM,aAAa,aAAa,mBAAmB,CAAC,EAAE,OAAO,QAAQ,OAAO,MAAM;AAEhF,qBAAa,eAAe,UAAU;AAGtC,eAAO,aAAa,OAAO;AAE3B,YAAI,OAAO;AACT,iBAAO,OAAO,KAAK;AAAA,QACrB;AAEA,YAAI,CAAC,QAAQ;AACX,iBAAO;AAAA,YACL,IAAI,oBAAoB;AAAA,cACtB,SAAS,2BAA2B,MAAM,8CAA8C,KAAK,SAAS,IAAI;AAAA,cAC1G,YAAY;AAAA,YACd,CAAC;AAAA,UACH;AAAA,QACF;AAEA,aAAK,OAAO,MAAM,gCAAgC,EAAE,OAAO,CAAC;AAC5D,eAAO,QAAQ,MAAM;AAAA,MACvB,CAAC;AAED,WAAK,OAAO,MAAM,wCAAwC,EAAE,KAAK,CAAC;AAClE,mBAAa,iBAAiB;AAAA,QAC5B;AAAA,QACA,YAAY;AAAA,MACd,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;;;ACvOA,IAAAC,kBAAoB;AAqDpB,IAAMC,QAAO,6BAA6B,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAyB9C,CAAC;AAEK,IAAM,eAAN,cAA2B,WAAW;AAAA,EACnC,SAAwB;AAAA,EACxB;AAAA,EAEE;AAAA,EAEV,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,CAAC;AAAA,IACX,WAAW,CAAC;AAAA,EACd,GAAuC;AACrC,UAAM,EAAE,IAAI,UAAU,gBAAgB,OAAO,UAAU,CAAC;AACxD,SAAK,UAAU;AACf,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB,MAAM;AAAA,IACN,MAAMA;AAAA,EACR;AAAA,EAEA,MAAc,mBAAoC;AAChD,SAAK,OAAO,KAAK,wBAAwB;AACzC,QAAI,OAAO,WAAW,eAAgB,OAA0B,aAAa,QAAW;AACtF,WAAK,OAAO,MAAM,0BAA0B;AAC5C,YAAM,IAAI,MAAM,0BAA0B;AAAA,IAC5C;AACA,UAAM,SAAU,OAA0B;AAC1C,SAAK,SAAS;AACd,SAAK,OAAO,KAAK,oBAAoB;AACrC,WAAO;AAAA,EACT;AAAA,EAEO,UAAU,YAAsC;AACrD,SAAK,OAAO,KAAK,eAAe;AAChC,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAC3D,UAAM,EAAE,SAAS,IAAI,MAAM,OAAO,OAAO,KAAK,OAAO;AAErD,QAAI,SAAS,WAAW,GAAG;AACzB,WAAK,OAAO,MAAM,oBAAoB;AACtC,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACtC;AAEA,UAAM,iBAAiB,SAAS,IAAI,CAAC,SAAiB,SAAiB;AAAA,MACrE,MAAM,GAAG,KAAK,SAAS,IAAI,YAAY,MAAM,CAAC;AAAA,MAC9C;AAAA,IACF,EAAE;AAEF,UAAM,gBAAgB,eAAe,CAAC;AAEtC,UAAM,cAA2B;AAAA,MAC/B,UAAU;AAAA,MACV;AAAA,IACF;AAEA,cAAU,KAAK,OAAO;AAAA,MACpB,UAAU,KAAK;AAAA,MACf,QAAQ;AAAA,IACV,CAAC;AAED,SAAK,OAAO,KAAK,qBAAgB,WAAW;AAC5C,WAAO;AAAA,EACT;AAAA,EAEO,aAAa,YAA2B;AAC7C,SAAK,OAAO,KAAK,kBAAkB;AACnC,SAAK,aAAa;AAClB,SAAK,OAAO,KAAK,eAAe;AAAA,EAClC;AAAA,EAEO,gBAAgB,YAA2B;AAChD,QAAI;AACF,YAAM,QAAQ,KAAK,MAAM;AACzB,YAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AAGzC,UAAI,CAAC,aAAa;AAChB,aAAK,OAAO,KAAK,sBAAsB;AACvC;AAAA,MACF;AAEA,WAAK,OAAO,KAAK,qBAAqB;AACtC,YAAM,SAAS,MAAM,KAAK,iBAAiB;AAE3C,UAAI,CAAC,OAAO,aAAa;AACvB,aAAK,OAAO,MAAM,0BAA0B;AAC5C,cAAM,IAAI,MAAM,0BAA0B;AAAA,MAC5C;AACA,WAAK,OAAO,KAAK,iBAAiB;AAAA,IACpC,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,2BAA2B,MAAM,OAAO;AAC1D,WAAK,aAAa;AAClB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,YACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,KAAK,UAAU;AAC/B,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,IAAI,OAAO,SAAS;AACnC,YAAM,aAAa,KAAK,UAAU,SAAS,MAAM;AAEjD,YAAM,YAAY,kBAAkB,IAAI,OAAO,CAAC;AAEhD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,KAAK,UAAU,CAAC;AAAA,MACpC,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,WAAW,SAAS,CAAC,EAAE,CAAC;AAAA,MACjD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEQ,mBACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,WAAW,UAAU;AACrC,YAAM,aAAa,gBAAAC,QAAQ,iBAAiB,SAAS;AACrD,YAAM,WAAW,YAAY,UAAU;AAEvC,YAAM,MAA2B,WAC7B,gBAAAA,QAAQ,wBAAwB,SAAS,EAAE,MAC3C,gBAAAA,QAAQ,0BAA0B,SAAS;AAE/C,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,IAAI,OAAO,SAAS;AACnC,YAAM,aAAa,CAAC,YAAY,KAAK,UAAU,SAAS,MAAM;AAE9D,YAAM,YAAY,kBAAkB,IAAI,OAAO,CAAC;AAEhD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,KAAK,UAAU,CAAC;AAAA,MACpC,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,WAAW,SAAS,CAAC,EAAE,CAAC;AAAA,MACjD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEO,mBAAmB,OACxB,UACA,kBACmC;AACnC,QAAI;AACF,WAAK,OAAO,MAAM,2BAA2B,EAAE,UAAU,cAAc,CAAC;AACxE,UAAI,aAAkC,CAAC;AAGvC,UAAI,mBAAmB,QAAQ,GAAG;AAChC,cAAM,WAAkC,gBAAgB,QAAQ;AAChE,qBAAa,KAAK,YAAY,UAAU,aAAa;AAAA,MACvD,OAAO;AACL,cAAM,WAAyB,gBAAgB,QAAwB;AACvE,qBAAa,KAAK,mBAAmB,UAAU,aAAa;AAAA,MAC9D;AAEA,YAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAE3D,WAAK,OAAO,MAAM,+CAA+C,UAAU;AAG3E,YAAM,iBAAiB,MAAM,OAAO,SAAS,UAAU;AACvD,WAAK,OAAO,MAAM,4CAA4C,cAAc;AAG5E,YAAM,SAAS,eAAe,IAAI,CAAC,UAAU;AAC3C,YAAI,UAAU,MAAM;AAClB,iBAAO;AAAA,QACT;AACA,eAAO,kBAAkB,KAAK;AAAA,MAChC,CAAC;AAED,WAAK,OAAO,MAAM,oCAAoC,MAAM;AAC5D,aAAO;AAAA,IACT,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,+BAA+B,MAAM,OAAO;AAC9D,YAAM;AAAA,IACR;AAAA,EACF;AACF;;;AC5QO,IAAM,8BAA8B;AAEpC,IAAMC,QAAO,6BAA6B,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAMrD,CAAC;AAEK,IAAM,gBAAN,cAA4B,YAAY;AAAA,EAC7C,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,CAAC;AAAA,EACd,GAAwC;AACtC,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB,MAAM;AAAA,IACN,MAAMA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAgB,UAAoD;AAClE,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI,MAAM,KAAK,6BAA6B;AAC5C,UAAM,eAAe,MAAM,KAAK,wBAAwB;AACxD,UAAM,cAAc,MAAM,KAAK,gBAAgB;AAE/C,WAAO,IAAI,QAAyC,CAAC,SAAS,WAAW;AACvE,YAAM,UAAU,OAAO,WAAW,MAAM;AAEtC,qBAAa,eAAe,UAAU;AACtC;AAAA,UACE,IAAI,2BAA2B;AAAA,YAC7B,QAAQ,kBAAkB;AAAA,YAC1B,SAAS,8BAA8B,KAAK,SAAS,IAAI;AAAA,YACzD,YAAY;AAAA,UACd,CAAC;AAAA,QACH;AAAA,MACF,GAAG,uBAAuB;AAC1B,YAAM,aAAa,aAAa,SAAS,CAAC,EAAE,OAAO,QAAQ,OAAO,MAAM;AAEtE,qBAAa,eAAe,UAAU;AAGtC,eAAO,aAAa,OAAO;AAE3B,YAAI,OAAO;AACT,iBAAO,OAAO,KAAK;AAAA,QACrB;AAEA,YAAI,CAAC,QAAQ;AACX,iBAAO;AAAA,YACL,IAAI,oBAAoB;AAAA,cACtB,SAAS,2BAA2B,MAAM,8CAA8C,KAAK,SAAS,IAAI;AAAA,cAC1G,YAAY;AAAA,YACd,CAAC;AAAA,UACH;AAAA,QACF;AAEA,eAAO,QAAQ,MAAM;AAAA,MACvB,CAAC;AAGD,mBAAa,OAAO;AAAA,QAClB;AAAA,QACA,YAAY;AAAA,MACd,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAgB,WAAsD;AACpE,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI,MAAM,KAAK,6BAA6B;AAC5C,UAAM,eAAe,MAAM,KAAK,wBAAwB;AACxD,UAAM,cAAc,MAAM,KAAK,gBAAgB;AAE/C,WAAO,IAAI,QAA0C,CAAC,SAAS,WAAW;AACxE,YAAM,UAAU,OAAO,WAAW,MAAM;AAEtC,qBAAa,eAAe,UAAU;AACtC;AAAA,UACE,IAAI,2BAA2B;AAAA,YAC7B,QAAQ,kBAAkB;AAAA,YAC1B,SAAS,8BAA8B,KAAK,SAAS,IAAI;AAAA,YACzD,YAAY;AAAA,UACd,CAAC;AAAA,QACH;AAAA,MACF,GAAG,qBAAqB;AACxB,YAAM,aAAa,aAAa,UAAU,CAAC,EAAE,OAAO,QAAQ,OAAO,MAAM;AAEvE,qBAAa,eAAe,UAAU;AAGtC,eAAO,aAAa,OAAO;AAE3B,YAAI,OAAO;AACT,iBAAO,OAAO,KAAK;AAAA,QACrB;AAEA,YAAI,CAAC,QAAQ;AACX,iBAAO;AAAA,YACL,IAAI,oBAAoB;AAAA,cACtB,SAAS,2BAA2B,MAAM,8CAA8C,KAAK,SAAS,IAAI;AAAA,cAC1G,YAAY;AAAA,YACd,CAAC;AAAA,UACH;AAAA,QACF;AAEA,aAAK,OAAO,MAAM,sBAAsB,EAAE,OAAO,CAAC;AAClD,eAAO,QAAQ,MAAM;AAAA,MACvB,CAAC;AAED,WAAK,OAAO,MAAM,8BAA8B,EAAE,YAAY,CAAC;AAC/D,mBAAa,QAAQ;AAAA,QACnB;AAAA,QACA,YAAY;AAAA,MACd,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,MAAgB,kBACd,MACoD;AACpD,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI,MAAM,KAAK,6BAA6B;AAC5C,UAAM,eAAe,MAAM,KAAK,wBAAwB;AAExD,WAAO,IAAI,QAAmD,CAAC,SAAS,WAAW;AACjF,YAAM,UAAU,OAAO,WAAW,MAAM;AAEtC,qBAAa,eAAe,UAAU;AACtC;AAAA,UACE,IAAI,2BAA2B;AAAA,YAC7B,QAAQ,kBAAkB;AAAA,YAC1B,SAAS,8BAA8B,KAAK,SAAS,IAAI;AAAA,YACzD,YAAY;AAAA,UACd,CAAC;AAAA,QACH;AAAA,MACF,GAAG,uBAAuB;AAC1B,YAAM,aAAa,aAAa,mBAAmB,CAAC,EAAE,OAAO,QAAQ,OAAO,MAAM;AAEhF,qBAAa,eAAe,UAAU;AAGtC,eAAO,aAAa,OAAO;AAE3B,YAAI,OAAO;AACT,iBAAO,OAAO,KAAK;AAAA,QACrB;AAEA,YAAI,CAAC,QAAQ;AACX,iBAAO;AAAA,YACL,IAAI,oBAAoB;AAAA,cACtB,SAAS,2BAA2B,MAAM,8CAA8C,KAAK,SAAS,IAAI;AAAA,cAC1G,YAAY;AAAA,YACd,CAAC;AAAA,UACH;AAAA,QACF;AAEA,aAAK,OAAO,MAAM,gCAAgC,EAAE,OAAO,CAAC;AAC5D,eAAO,QAAQ,MAAM;AAAA,MACvB,CAAC;AAED,WAAK,OAAO,MAAM,wCAAwC,EAAE,KAAK,CAAC;AAClE,mBAAa,iBAAiB;AAAA,QAC5B;AAAA,QACA,YAAY;AAAA,MACd,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;;;ACvOA,IAAAC,kBAAoB;AA+CpB,IAAMC,QAAO,6BAA6B,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAS9C,CAAC;AAEK,IAAM,YAAN,cAAwB,WAAW;AAAA,EAChC,SAA6B;AAAA,EAC7B;AAAA,EACA;AAAA,EACA,WAAmB;AAAA,EACnB,WAA0B;AAAA,EAExB;AAAA,EAEV,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,CAAC;AAAA,EACd,GAAoC;AAClC,UAAM,EAAE,IAAI,UAAU,gBAAgB,OAAO,UAAU,CAAC;AAExD,UAAM;AAAA,MACJ,QAAQ,IAAI,OAAO,EAAE;AAAA,MACrB,aAAa;AAAA,MACb,OAAO;AAAA,MACP,SAAS;AAAA,MACT,oBAAoB,MAAM,QAAQ,QAAQ,OAAO,cAAc,KAAK,EAAE;AAAA,IACxE,IAAI,WAAW,CAAC;AAEhB,SAAK,UAAU,EAAE,OAAO,YAAY,MAAM,kBAAkB;AAC5D,SAAK,aAAa;AAClB,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB,MAAM;AAAA,IACN,MAAMA;AAAA,EACR;AAAA,EAEA,MAAc,mBAAyC;AACrD,SAAK,OAAO,KAAK,wBAAwB;AACzC,UAAM,EAAE,OAAO,YAAY,KAAK,IAAI,KAAK;AACzC,UAAM,SAAS,IAAI,gBAAAC,QAAQ,IAAI,OAAO,YAAY,IAAI;AACtD,SAAK,SAAS;AACd,SAAK,OAAO,KAAK,oBAAoB;AACrC,WAAO;AAAA,EACT;AAAA,EAEO,UAAU,YAAsC;AACrD,SAAK,OAAO,KAAK,eAAe;AAChC,QAAI,CAAC,KAAK,QAAQ;AAChB,YAAM,KAAK,iBAAiB;AAAA,IAC9B;AAEA,QAAI;AAEF,YAAM,QAAQ,MAAM,KAAK,WAAW;AACpC,YAAM,WAAW,MAAM,KAAK,cAAc,KAAK;AAE/C,UAAI,SAAS,WAAW,GAAG;AACzB,cAAM,IAAI,MAAM,oBAAoB;AAAA,MACtC;AAEA,YAAM,iBAAiB,SAAS,IAAI,CAAC,SAAiB,SAAiB;AAAA,QACrE,MAAM,GAAG,KAAK,SAAS,IAAI,YAAY,MAAM,CAAC;AAAA,QAC9C;AAAA,MACF,EAAE;AAEF,YAAM,gBAAgB,eAAe,CAAC;AAEtC,YAAM,cAA2B;AAAA,QAC/B,UAAU;AAAA,QACV;AAAA,MACF;AAEA,gBAAU,KAAK,OAAO;AAAA,QACpB,UAAU,KAAK;AAAA,QACf,QAAQ;AAAA,MACV,CAAC;AAGD,YAAM,KAAK,aAAa,KAAK;AAE7B,WAAK,OAAO,KAAK,qBAAgB,WAAW;AAC5C,aAAO;AAAA,IACT,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,qBAAqB,MAAM,OAAO;AACpD,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEO,aAAa,YAA2B;AAC7C,SAAK,OAAO,KAAK,kBAAkB;AACnC,SAAK,aAAa;AAClB,SAAK,OAAO,KAAK,eAAe;AAAA,EAClC;AAAA,EAEO,gBAAgB,YAA2B;AAChD,QAAI;AACF,YAAM,QAAQ,KAAK,MAAM;AACzB,YAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AAGzC,UAAI,CAAC,aAAa;AAChB,aAAK,OAAO,KAAK,sBAAsB;AACvC;AAAA,MACF;AAEA,WAAK,OAAO,KAAK,qBAAqB;AACtC,YAAM,KAAK,iBAAiB;AAC5B,WAAK,OAAO,KAAK,iBAAiB;AAAA,IACpC,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,2BAA2B,MAAM,OAAO;AAC1D,WAAK,aAAa;AAClB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,YACN,UACA,eACuB;AACvB,UAAM,aAAoC,CAAC;AAE3C,aAAS,QAAQ,CAAC,KAAK,UAAU;AAC/B,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,IAAI,OAAO,SAAS;AACnC,YAAM,aAAa,KAAK,UAAU,SAAS,MAAM;AAEjD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,GAAG;AAAA,MACrB;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEQ,mBACN,UACA,eACuB;AACvB,UAAM,aAAoC,CAAC;AAE3C,aAAS,QAAQ,CAAC,WAAW,UAAU;AACrC,YAAM,aAAa,gBAAAA,QAAQ,iBAAiB,SAAS;AACrD,YAAM,WAAW,YAAY,UAAU;AAEvC,YAAM,MAA2B,WAC7B,gBAAAA,QAAQ,wBAAwB,SAAS,EAAE,MAC3C,gBAAAA,QAAQ,0BAA0B,SAAS;AAE/C,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,IAAI,OAAO,SAAS;AACnC,YAAM,aAAa,CAAC,YAAY,KAAK,UAAU,SAAS,MAAM;AAE9D,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,GAAG;AAAA,MACrB;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEO,mBAAmB,OACxB,UACA,kBACmC;AACnC,QAAI;AACF,WAAK,OAAO,MAAM,2BAA2B,EAAE,UAAU,cAAc,CAAC;AACxE,UAAI,aAAoC,CAAC;AAGzC,UAAI,mBAAmB,QAAQ,GAAG;AAChC,cAAM,WAAkC,gBAAgB,QAAQ;AAChE,qBAAa,KAAK,YAAY,UAAU,aAAa;AAAA,MACvD,OAAO;AACL,cAAM,WAAyB,gBAAgB,QAAwB;AACvE,qBAAa,KAAK,mBAAmB,UAAU,aAAa;AAAA,MAC9D;AAGA,YAAM,QAAQ,MAAM,KAAK,WAAW;AACpC,YAAM,WAAW,MAAM,KAAK,YAAY;AAExC,YAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAE3D,WAAK,OAAO,MAAM,+CAA+C,UAAU;AAG3E,YAAM,aAAa,MAAM,QAAQ;AAAA,QAC/B,WAAW,IAAI,CAAC,QAAQ,OAAO,gBAAgB,OAAO,UAAU,GAAG,CAAC;AAAA,MACtE;AAEA,WAAK,OAAO,MAAM,4CAA4C,UAAU;AAGxE,YAAM,KAAK,aAAa,KAAK;AAE7B,WAAK,OAAO,MAAM,oCAAoC,UAAU;AAChE,aAAO;AAAA,IACT,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,+BAA+B,MAAM,OAAO;AAC9D,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAc,gBAAiC;AAC7C,SAAK,OAAO,MAAM,2BAA2B,EAAE,YAAY,KAAK,WAAW,CAAC;AAC5E,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAE3D,UAAM,EAAE,QAAQ,IAAyB,MAAM,OAAO,YAAY;AAClE,UAAM,SAAS,QAAQ,KAAK,CAACC,YAA4BA,QAAO,SAAS,KAAK,UAAU;AAExF,QAAI,CAAC,QAAQ;AACX,WAAK,OAAO,MAAM,WAAW,KAAK,UAAU,cAAc;AAC1D,YAAM,IAAI,MAAM,WAAW,KAAK,UAAU,cAAc;AAAA,IAC1D;AAEA,SAAK,WAAW,OAAO;AACvB,SAAK,OAAO,MAAM,oCAAoC,EAAE,UAAU,KAAK,SAAS,CAAC;AACjF,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,MAAc,aAA8B;AAC1C,SAAK,OAAO,MAAM,qBAAqB,EAAE,UAAU,KAAK,SAAS,CAAC;AAClE,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAE3D,UAAM,WAAW,KAAK,YAAa,MAAM,KAAK,cAAc;AAC5D,UAAM,WAAW,MAAM,KAAK,YAAY;AAExC,UAAM,EAAE,oBAAoB,IAA8B,MAAM,OAAO;AAAA,MACrE;AAAA,MACA;AAAA,IACF;AACA,SAAK,OAAO,MAAM,4BAA4B;AAC9C,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,aAAa,OAA8B;AACvD,SAAK,OAAO,MAAM,oBAAoB;AACtC,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAC3D,UAAM,OAAO,oBAAoB,KAAK;AACtC,SAAK,OAAO,MAAM,6BAA6B;AAAA,EACjD;AAAA,EAEA,MAAc,cAA+B;AAC3C,QAAI,KAAK,aAAa,MAAM;AAC1B,aAAO,KAAK;AAAA,IACd;AACA,UAAM,WAAW,MAAM,KAAK,QAAQ,kBAAkB;AACtD,SAAK,WAAW;AAChB,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,cAAc,OAAkC;AAC5D,SAAK,OAAO,MAAM,sBAAsB;AACxC,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAC3D,UAAM,EAAE,UAAU,IAAsB,MAAM,OAAO,SAAS,KAAK;AACnE,SAAK,OAAO,MAAM,iCAAiC,EAAE,UAAU,CAAC;AAChE,WAAO;AAAA,EACT;AACF;;;AC7TA,IAAAC,kBAAoB;AAyBpB,SAAS,gBAAgB,OAAqC;AAC5D,SAAO,iBAAiB,SAAS,UAAU;AAC7C;AAEA,SAAS,gBAAgB,OAAqC;AAC5D,SAAO,iBAAiB,SAAS,UAAU;AAC7C;AAEA,IAAMC,QAAO,6BAA6B,KAAK;AAAA;AAAA;AAAA;AAAA,CAI9C,CAAC;AAEK,IAAM,aAAN,cAAyB,WAAW;AAAA,EACjC,SAA6B;AAAA,EAC7B;AAAA,EAEE;AAAA,EAEV,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,CAAC;AAAA,IACX,WAAW,CAAC;AAAA,EACd,GAAqC;AACnC,UAAM,EAAE,IAAI,UAAU,gBAAgB,OAAO,UAAU,CAAC;AACxD,SAAK,UAAU;AACf,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB,MAAM;AAAA,IACN,MAAMA;AAAA,EACR;AAAA,EAEA,MAAc,mBAAyC;AACrD,SAAK,OAAO,KAAK,wBAAwB;AACzC,UAAMC,UAAS,MAAM,OAAO,cAAc;AAC1C,UAAM,cAAcA,QAAO;AAE3B,UAAM,SAAS,IAAI,YAAY,KAAK,SAAS,QAAQ;AACrD,SAAK,SAAS;AACd,SAAK,OAAO,KAAK,oBAAoB;AACrC,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,eAAgC;AAC5C,UAAM,UAAU,KAAK;AACrB,QAAI,QAAQ,WAAW;AACrB,aAAO,QAAQ;AAAA,IACjB;AAEA,UAAM,cAAc,KAAK,eAAe;AACxC,UAAM,aAAa,MAAM,YAAY,QAAQ,EAAE,GAAG;AAClD,UAAM,UAAU,gBAAAC,QAAQ,UAAU,YAAY;AAAA,MAC5C,aAAa,gBAAAA,QAAQ,YAAY;AAAA,IACnC,CAAC;AACD,WAAO,GAAG,QAAQ,OAAO,IAAI,QAAQ,EAAE;AAAA,EACzC;AAAA,EAEO,UAAU,YAAsC;AACrD,SAAK,OAAO,KAAK,eAAe;AAChC,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAC3D,UAAM,YAAY,MAAM,KAAK,aAAa;AAC1C,UAAM,WAAW,MAAM,OAAO,QAAQ,SAAS;AAE/C,QAAI,SAAS,WAAW,GAAG;AACzB,WAAK,OAAO,MAAM,oBAAoB;AACtC,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACtC;AAEA,UAAM,iBAAiB,SAAS,IAAI,CAAC,SAAiB,SAAiB;AAAA,MACrE,MAAM,GAAG,KAAK,SAAS,IAAI,YAAY,MAAM,CAAC;AAAA,MAC9C;AAAA,IACF,EAAE;AAEF,UAAM,gBAAgB,eAAe,CAAC;AAEtC,UAAM,cAA2B;AAAA,MAC/B,UAAU;AAAA,MACV;AAAA,IACF;AAEA,cAAU,KAAK,OAAO;AAAA,MACpB,UAAU,KAAK;AAAA,MACf,QAAQ;AAAA,IACV,CAAC;AAED,SAAK,OAAO,KAAK,0BAA0B,WAAW;AACtD,WAAO;AAAA,EACT;AAAA,EAEO,aAAa,YAA2B;AAC7C,SAAK,aAAa;AAClB,SAAK,OAAO,KAAK,cAAc;AAAA,EACjC;AAAA,EAEO,gBAAgB,YAA2B;AAChD,QAAI;AACF,YAAM,QAAQ,KAAK,MAAM;AACzB,YAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AAGzC,UAAI,CAAC,aAAa;AAChB,aAAK,OAAO,KAAK,sBAAsB;AACvC;AAAA,MACF;AAEA,WAAK,OAAO,KAAK,qBAAqB;AACtC,YAAM,KAAK,iBAAiB;AAC5B,WAAK,OAAO,KAAK,8BAA8B;AAAA,IACjD,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,2BAA2B,MAAM,OAAO;AAC1D,WAAK,aAAa;AAClB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,YACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,KAAK,UAAU;AAC/B,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,IAAI,OAAO,SAAS;AACnC,YAAM,aAAa,KAAK,UAAU,SAAS,MAAM;AAEjD,YAAM,YAAY,kBAAkB,IAAI,OAAO,CAAC;AAEhD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,KAAK,UAAU,CAAC;AAAA,MACpC,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,WAAW,SAAS,CAAC,EAAE,CAAC;AAAA,MACjD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEQ,mBACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,WAAW,UAAU;AACrC,YAAM,aAAa,gBAAAA,QAAQ,iBAAiB,SAAS;AACrD,YAAM,WAAW,YAAY,UAAU;AAEvC,YAAM,MAA2B,WAC7B,gBAAAA,QAAQ,wBAAwB,SAAS,EAAE,MAC3C,gBAAAA,QAAQ,0BAA0B,SAAS;AAE/C,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,IAAI,OAAO,SAAS;AACnC,YAAM,aAAa,CAAC,YAAY,KAAK,UAAU,SAAS,MAAM;AAE9D,YAAM,YAAY,kBAAkB,IAAI,OAAO,CAAC;AAEhD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,KAAK,UAAU,CAAC;AAAA,MACpC,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,WAAW,SAAS,CAAC,EAAE,CAAC;AAAA,MACjD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEO,mBAAmB,OACxB,UACA,kBACmC;AACnC,QAAI;AACF,WAAK,OAAO,MAAM,2BAA2B,EAAE,UAAU,cAAc,CAAC;AACxE,UAAI,aAAkC,CAAC;AAGvC,UAAI,mBAAmB,QAAQ,GAAG;AAChC,cAAM,WAAkC,gBAAgB,QAAQ;AAChE,qBAAa,KAAK,YAAY,UAAU,aAAa;AAAA,MACvD,OAAO;AACL,cAAM,WAAyB,gBAAgB,QAAwB;AACvE,qBAAa,KAAK,mBAAmB,UAAU,aAAa;AAAA,MAC9D;AAEA,YAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAE3D,WAAK,OAAO,MAAM,+CAA+C,UAAU;AAG3E,YAAM,iBAAiB,MAAM,OAAO,SAAS,UAAU;AAEvD,WAAK,OAAO,MAAM,oCAAoC,cAAc;AACpE,aAAO;AAAA,IACT,SAAS,OAAO;AACd,UAAI,gBAAgB,KAAK,GAAG;AAC1B,aAAK,OAAO,MAAM,+BAA+B,MAAM,SAAS,UAAU,MAAM,IAAI,GAAG;AACvF,cAAM,IAAI,cAAc,MAAM,SAAS,MAAM,IAAI;AAAA,MACnD;AACA,WAAK,OAAO,MAAM,uCAAuC,KAAK;AAC9D,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEO,cAAc;AAAA,EAEd,WAAW,OAAO,MAAc,aAAsD;AAC3F,QAAI;AACF,WAAK,OAAO,MAAM,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEvD,YAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAG3D,YAAM,iBAAiB,MAAM,OAAO,SAAS,MAAM,QAAQ;AAE3D,WAAK,OAAO,MAAM,4BAA4B,cAAc;AAC5D,aAAO;AAAA,IACT,SAAS,OAAO;AACd,UAAI,gBAAgB,KAAK,GAAG;AAC1B,aAAK,OAAO,MAAM,uBAAuB,MAAM,SAAS,UAAU,MAAM,IAAI,GAAG;AAC/E,cAAM,IAAI,cAAc,MAAM,SAAS,MAAM,IAAI;AAAA,MACnD;AACA,WAAK,OAAO,MAAM,+BAA+B,KAAK;AACtD,YAAM;AAAA,IACR;AAAA,EACF;AACF;;;ACjQA,IAAAC,kBAAoB;AAqCpB,IAAMC,SAAO,6BAA6B,KAAK;AAAA;AAAA;AAAA;AAAA,CAI9C,CAAC;AAEK,IAAM,YAAN,cAAwB,WAAW;AAAA,EAChC,SAAiC;AAAA,EACjC;AAAA,EAEE;AAAA,EACH,WAAqC;AAAA,EAE5C,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,CAAC;AAAA,EACd,GAAsC;AACpC,UAAM,EAAE,IAAI,UAAU,gBAAgB,OAAO,UAAU,CAAC;AACxD,QAAI,CAAC,SAAS,QAAQ;AACpB,WAAK,OAAO,MAAM,iCAAiC;AACnD,YAAM,IAAI,MAAM,iCAAiC;AAAA,IACnD;AACA,SAAK,UAAU;AACf,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB,MAAM;AAAA,IACN,MAAMA;AAAA,EACR;AAAA,EAEA,MAAc,mBAA6C;AACzD,SAAK,OAAO,KAAK,wBAAwB;AACzC,UAAM,SAAS,MAAM,wDAAqB;AAC1C,UAAM,qBAAqB,MAAM,yDAA+B;AAChE,UAAM,SAAS,IAAI,MAAM,KAAK,QAAQ,QAAkB;AAAA,MACtD,YAAY;AAAA,QACV,UAAU,IAAI,kBAAkB;AAAA,UAC9B,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AACD,SAAK,SAAS;AACd,SAAK,OAAO,KAAK,oBAAoB;AACrC,WAAO;AAAA,EACT;AAAA,EAEO,UAAU,OAAO,SAAyD;AAC/E,SAAK,OAAO,KAAK,eAAe;AAChC,QAAI,CAAC,MAAM,SAAS,OAAO,KAAK,UAAU,UAAU;AAClD,WAAK,OAAO,MAAM,2DAA2D;AAC7E,YAAM,IAAI,MAAM,2DAA2D;AAAA,IAC7E;AAEA,UAAM,EAAE,MAAM,IAAI;AAElB,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAE3D,SAAK,OAAO,KAAK,cAAc,KAAK,KAAK;AACzC,UAAM,OAAO,KAAK,mBAAmB,EAAE,MAAM,CAAC;AAE9C,UAAM,WAAW,MAAM,OAAO,KAAK,QAAQ;AAE3C,QAAI,CAAC,UAAU;AACb,WAAK,OAAO,MAAM,sBAAsB;AACxC,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AAEA,QAAI,CAAC,SAAS,eAAe;AAC3B,WAAK,OAAO,MAAM,mBAAmB;AACrC,YAAM,IAAI,MAAM,mBAAmB;AAAA,IACrC;AAEA,SAAK,WAAW;AAEhB,SAAK,OAAO,KAAK,oBAAoB,QAAQ;AAC7C,UAAM,gBAA+B;AAAA,MACnC,MAAM,SAAS,SAAS;AAAA,MACxB,SAAS,SAAS;AAAA,IACpB;AAEA,UAAM,cAA2B;AAAA,MAC/B,UAAU,CAAC,aAAa;AAAA,MACxB,eAAe;AAAA,IACjB;AAEA,cAAU,KAAK,OAAO;AAAA,MACpB,UAAU,KAAK;AAAA,MACf,QAAQ;AAAA,IACV,CAAC;AAED,SAAK,OAAO,KAAK,0BAA0B,WAAW;AACtD,WAAO,CAAC,aAAa;AAAA,EACvB;AAAA,EAEO,aAAa,YAA2B;AAC7C,SAAK,OAAO,KAAK,kBAAkB;AACnC,SAAK,aAAa;AAClB,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAC3D,SAAK,OAAO,KAAK,eAAe,KAAK,UAAU,SAAS,MAAM,KAAK;AACnE,UAAM,OAAO,KAAK,OAAO;AACzB,SAAK,OAAO,KAAK,cAAc;AAAA,EACjC;AAAA,EAEO,gBAAgB,YAA2B;AAChD,QAAI;AACF,YAAM,QAAQ,KAAK,MAAM;AACzB,YAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AAGzC,UAAI,CAAC,aAAa;AAChB,aAAK,OAAO,KAAK,sBAAsB;AACvC;AAAA,MACF;AAEA,WAAK,OAAO,KAAK,qBAAqB;AACtC,YAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAC3D,YAAM,aAAa,MAAM,OAAO,KAAK,WAAW;AAEhD,UAAI,CAAC,YAAY;AACf,aAAK,OAAO,KAAK,oCAAoC;AACrD,aAAK,aAAa;AAClB;AAAA,MACF;AAEA,YAAM,WAAW,MAAM,OAAO,KAAK,QAAQ;AAE3C,UAAI,CAAC,UAAU;AACb,cAAM,OAAO,KAAK,OAAO;AACzB,aAAK,OAAO,MAAM,sBAAsB;AACxC,cAAM,IAAI,MAAM,sBAAsB;AAAA,MACxC;AAEA,UAAI,CAAC,SAAS,eAAe;AAC3B,cAAM,OAAO,KAAK,OAAO;AACzB,aAAK,OAAO,MAAM,mBAAmB;AACrC,cAAM,IAAI,MAAM,mBAAmB;AAAA,MACrC;AAEA,WAAK,WAAW;AAEhB,YAAM,gBAA+B;AAAA,QACnC,MAAM,SAAS,SAAS,GAAG,KAAK,SAAS,IAAI;AAAA,QAC7C,SAAS,SAAS;AAAA,MACpB;AAEA,YAAM,gBAAgB,YAAY,SAAS,CAAC;AAE5C,YAAM,EAAE,MAAM,QAAQ,IAAI;AAC1B,YAAM,EAAE,MAAM,YAAY,SAAS,cAAc,IAAI;AAErD,YAAM,QAAQ,SAAS,cAAc,YAAY;AAEjD,UAAI,CAAC,OAAO;AACV,aAAK,OAAO,KAAK,8CAA8C;AAAA,UAC7D,MAAM;AAAA,UACN,SAAS;AAAA,QACX,CAAC;AACD,oBAAY,KAAK,OAAO;AAAA,UACtB,UAAU,KAAK;AAAA,UACf,UAAU,CAAC,aAAa;AAAA,QAC1B,CAAC;AAAA,MACH;AACA,WAAK,OAAO,KAAK,8BAA8B;AAAA,IACjD,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,2BAA2B,MAAM,OAAO;AAC1D,WAAK,aAAa;AAClB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,YACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,KAAK,UAAU;AAC/B,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,IAAI,OAAO,SAAS;AACnC,YAAM,aAAa,KAAK,UAAU,SAAS,MAAM;AAEjD,YAAM,YAAY,kBAAkB,IAAI,OAAO,CAAC;AAEhD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,KAAK,UAAU,CAAC;AAAA,MACpC,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,WAAW,SAAS,CAAC,EAAE,CAAC;AAAA,MACjD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEQ,mBACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,WAAW,UAAU;AACrC,YAAM,aAAa,gBAAAC,QAAQ,iBAAiB,SAAS;AACrD,YAAM,WAAW,YAAY,UAAU;AAEvC,YAAM,MAA2B,WAC7B,gBAAAA,QAAQ,wBAAwB,SAAS,EAAE,MAC3C,gBAAAA,QAAQ,0BAA0B,SAAS;AAE/C,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,IAAI,OAAO,SAAS;AACnC,YAAM,aAAa,CAAC,YAAY,KAAK,UAAU,SAAS,MAAM;AAE9D,YAAM,YAAY,kBAAkB,IAAI,OAAO,CAAC;AAEhD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,KAAK,UAAU,CAAC;AAAA,MACpC,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,WAAW,SAAS,CAAC,EAAE,CAAC;AAAA,MACjD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEO,mBAAmB,OACxB,UACA,kBACmC;AACnC,QAAI;AACF,WAAK,OAAO,MAAM,2BAA2B,EAAE,UAAU,cAAc,CAAC;AACxE,UAAI,aAAkC,CAAC;AAGvC,UAAI,mBAAmB,QAAQ,GAAG;AAChC,cAAM,WAAkC,gBAAgB,QAAQ;AAChE,qBAAa,KAAK,YAAY,UAAU,aAAa;AAAA,MACvD,OAAO;AACL,cAAM,WAAyB,gBAAgB,QAAwB;AACvE,qBAAa,KAAK,mBAAmB,UAAU,aAAa;AAAA,MAC9D;AAEA,YAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAE3D,WAAK,OAAO,MAAM,+CAA+C,UAAU;AAG3E,YAAM,iBAAkB,MAAM,OAAO,SAAS;AAAA,QAC5C;AAAA,MACF;AAEA,WAAK,OAAO,MAAM,4CAA4C,cAAc;AAG5E,YAAM,SAAS,eAAe,IAAI,CAAC,UAAU;AAC3C,YAAI,UAAU,QAAW;AACvB,iBAAO;AAAA,QACT;AACA,eAAO,kBAAkB,KAAK;AAAA,MAChC,CAAC;AAED,WAAK,OAAO,MAAM,oCAAoC,MAAM;AAC5D,aAAO;AAAA,IACT,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,+BAA+B,MAAM,OAAO;AAC9D,YAAM;AAAA,IACR;AAAA,EACF;AACF;;;ACpTA,IAAAC,kBAAoB;AAwCb,IAAe,sBAAf,cAA2C,WAAW;AAAA,EACjD,eAAoC;AAAA,EACpC,iBAAwC;AAAA,EACxC,gBAAqC,oBAAI,IAAI;AAAA;AAAA,EAC7C;AAAA,EACA;AAAA,EAEV,YAAY,QAAgC;AAC1C,UAAM,MAAM;AACZ,SAAK,UAAU,OAAO,WAAW,CAAC;AAClC,SAAK,QAAQ,OAAO;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EA+BP,MAAgB,sBAAqC;AACnD,UAAM,WAAW,MAAM,KAAK,YAAY;AACxC,UAAM,EAAE,uBAAuB,0BAA0B,IAAI,MAAM,OAAO,qBAAqB;AAE/F,UAAM,iBAAkB,MAAM,SAAS,QAAQ,EAAE,QAAQ,cAAc,CAAC;AAExE,QAAI,mBAAmB,uBAAuB;AAC5C;AAAA,IACF;AAEA,SAAK,OAAO,KAAK,gBAAgB,cAAc,6BAA6B,qBAAqB,MAAM;AAEvG,QAAI;AACF,YAAM,SAAS,QAAQ;AAAA,QACrB,QAAQ;AAAA,QACR,QAAQ,CAAC,EAAE,SAAS,sBAAsB,CAAC;AAAA,MAC7C,CAAC;AAAA,IACH,SAAS,aAAkB;AAEzB,UAAI,YAAY,SAAS,MAAM;AAC7B,aAAK,OAAO,KAAK,wCAAwC;AACzD,cAAM,SAAS,QAAQ;AAAA,UACrB,QAAQ;AAAA,UACR,QAAQ,CAAC,yBAAyB;AAAA,QACpC,CAAC;AAAA,MACH,OAAO;AACL,cAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,mBAA0C;AACxD,QAAI,CAAC,KAAK,cAAc;AACtB,WAAK,OAAO,KAAK,gCAAgC;AAEjD,UAAI,CAAC,KAAK,gBAAgB;AACxB,cAAM,EAAE,eAAe,IAAI,MAAM,OAAO,mCAAmC;AAC3E,cAAM,cAAc,KAAK,eAAe;AACxC,aAAK,iBAAiB,eAAe,YAAY;AAAA,UAC/C,OAAO;AAAA,QACT,CAAC;AAAA,MACH;AAEA,YAAM,EAAE,aAAa,IAAI,MAAM,OAAO,qBAAqB;AAC3D,WAAK,eAAe,IAAI,aAAa,EAAE,UAAU,KAAK,eAAe,CAAC;AAEtE,WAAK,OAAO,KAAK,4BAA4B;AAAA,IAC/C;AACA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,uBAAuB,cAAkD;AACvF,UAAM,eAAe,MAAM,KAAK,iBAAiB;AACjD,UAAM,iBAAkC,CAAC;AAEzC,aAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,YAAM,aAAa,aAAa,CAAC;AACjC,YAAM,kBAAkB,MAAM,aAAa,WAAW,EAAE,WAAW,CAAC;AAEpE,WAAK,cAAc,IAAI,iBAAiB,UAAU;AAElD,qBAAe,KAAK;AAAA,QAClB,MAAM,GAAG,KAAK,SAAS,IAAI,IAAI,UAAU;AAAA,QACzC,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKU,WAAW,OAA2B;AAC9C,WACE,OACA,MAAM,KAAK,KAAK,EACb,IAAI,CAACC,OAAMA,GAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAC1C,KAAK,EAAE;AAAA,EAEd;AAAA;AAAA;AAAA;AAAA,EAKU,YACR,UACA,eACuB;AACvB,UAAM,aAAoC,CAAC;AAE3C,aAAS,QAAQ,CAAC,KAAK,UAAU;AAC/B,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,IAAI,OAAO,SAAS;AACnC,YAAM,aAAa,KAAK,UAAU,SAAS,MAAM;AAEjD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,GAAG;AAAA,MACrB;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKU,mBACR,UACA,eACuB;AACvB,UAAM,aAAoC,CAAC;AAE3C,aAAS,QAAQ,CAAC,WAAW,UAAU;AACrC,YAAM,aAAa,gBAAAC,QAAQ,iBAAiB,SAAS;AACrD,YAAM,WAAW,YAAY,UAAU;AAEvC,YAAM,MAA2B,WAC7B,gBAAAA,QAAQ,wBAAwB,SAAS,EAAE,MAC3C,gBAAAA,QAAQ,0BAA0B,SAAS;AAE/C,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,IAAI,OAAO,SAAS;AACnC,YAAM,aAAa,CAAC,YAAY,KAAK,UAAU,SAAS,MAAM;AAE9D,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,GAAG;AAAA,MACrB;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKO,mBAAmB,OACxB,UACA,kBACmC;AACnC,QAAI;AACF,WAAK,OAAO,MAAM,2BAA2B,EAAE,UAAU,cAAc,CAAC;AAExE,YAAM,SAAS,MAAM,KAAK,iBAAiB;AAC3C,UAAI,WAAkC,CAAC;AAEvC,UAAI,mBAAmB,QAAQ,GAAG;AAChC,mBAAW,gBAAgB,QAAQ;AAAA,MACrC,OAAO;AACL,cAAM,cAA4B,gBAAgB,QAAwB;AAC1E,mBAAW,YAAY,IAAI,CAAC,cAAc;AACxC,gBAAM,aAAa,gBAAAA,QAAQ,iBAAiB,SAAS;AACrD,gBAAM,WAAW,YAAY,UAAU;AACvC,iBAAO,WACH,gBAAAA,QAAQ,wBAAwB,SAAS,EAAE,MAC3C,gBAAAA,QAAQ,0BAA0B,SAAS;AAAA,QACjD,CAAC;AAAA,MACH;AAEA,YAAM,aAAa,mBAAmB,QAAQ,IAC1C,KAAK,YAAY,UAAU,aAAa,IACxC,KAAK,mBAAmB,gBAAgB,QAAwB,GAAG,aAAa;AAEpF,UAAI,WAAW,WAAW,GAAG;AAC3B,aAAK,OAAO,MAAM,yBAAyB;AAC3C,eAAO,SAAS,IAAI,MAAM,IAAI;AAAA,MAChC;AAGA,YAAM,WAAW,WAAW,CAAC;AAC7B,YAAM,kBAAkB,SAAS,OAAO,SAAS;AACjD,YAAM,aAAa,KAAK,cAAc,IAAI,eAAe;AAEzD,UAAI,CAAC,YAAY;AACf,cAAM,IAAI,MAAM,8CAA8C,eAAe,EAAE;AAAA,MACjF;AAEA,YAAM,eAAe,KAAK,QAAQ,SAAS,gBAAgB,KAAK,gBAAgB;AAChF,UAAI,cAAc;AAChB,aAAK,OAAO,MAAM,6BAA6B,EAAE,UAAU,cAAc,CAAC;AAC1E,cAAM,aAAa,UAAkD,aAAa;AAAA,MACpF;AAGA,YAAM,KAAK,oBAAoB;AAG/B,YAAM,cAAc,MAAM,OAAO,QAAQ;AAAA,QACvC;AAAA,QACA,MAAM;AAAA,QACN,aAAa,CAAC,cAAc,KAAK,iBAAiB,WAAW,UAAU;AAAA,MACzE,CAAC;AAED,YAAM,cAAc,KAAK,QAAQ,SAAS,eAAe,KAAK,gBAAgB;AAC9E,UAAI,aAAa;AACf,aAAK,OAAO,MAAM,0BAA0B;AAC5C,YAAI;AACF,sBAAY,IAAI;AAAA,QAClB,SAAS,GAAG;AAAA,QAAC;AAAA,MACf;AAGA,YAAM,SAAgC,SAAS,IAAI,CAAC,KAAK,UAAU;AACjE,cAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,cAAM,SAAS,IAAI,OAAO,SAAS;AACnC,cAAM,aAAa,KAAK,UAAU,SAAS,MAAM;AAEjD,YAAI,gBAAgB,YAAY;AAC9B,iBAAO,YAAY,KAAK;AAAA,QAC1B;AACA,eAAO;AAAA,MACT,CAAC;AAED,WAAK,OAAO,MAAM,oCAAoC,MAAM;AAC5D,aAAO;AAAA,IACT,SAAS,OAAY;AACnB,UAAI;AACF,cAAM,qBACJ,KAAK,QAAQ,SAAS,eAAe,KAAK,gBAAgB;AAC5D,6BAAqB,OAAO,MAAM,OAAO;AAAA,MAC3C,SAAS,GAAG;AAAA,MAAC;AACb,WAAK,OAAO,MAAM,+BAA+B,MAAM,OAAO;AAC9D,YAAM;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,mBACd,cACA,eACe;AACf,UAAM,QAAQ,KAAK,MAAM;AACzB,UAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AAEzC,QAAI,CAAC,aAAa;AAChB,WAAK,OAAO,KAAK,sBAAsB;AACvC;AAAA,IACF;AAEA,UAAM,iBAAiB,MAAM,KAAK,uBAAuB,YAAY;AACrE,UAAM,QAAQ,gBAAgB,gBAAgB,YAAY,QAAQ;AAElE,QAAI,CAAC,OAAO;AACV,WAAK,OAAO,KAAK,gDAAgD;AAAA,QAC/D,MAAM,YAAY;AAAA,QAClB,SAAS;AAAA,MACX,CAAC;AACD,oBAAc,cAAc;AAAA,IAC9B;AAEA,SAAK,OAAO,KAAK,iBAAiB;AAAA,EACpC;AAAA,EAEU,cAAc,YAAoB,iBAA+B;AACzE,UAAM,YAAY,KAAK,QAAQ,SAAS,aAAa,KAAK,gBAAgB;AAC1E,QAAI,WAAW;AACb,gBAAU,EAAE,YAAY,gBAAgB,CAAC;AAAA,IAC3C;AAAA,EACF;AACF;;;ACpVA,IAAMC,SAAO,6BAA6B,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAyB9C,CAAC;AAEK,IAAM,iBAAN,cAA6B,oBAAoB;AAAA,EAC9C,cAAkC;AAAA,EAClC,WAA+B;AAAA,EAC7B;AAAA,EAEV,YAAY,QAA8C;AACxD,UAAM,MAAM;AACZ,SAAK,UAAU,OAAO,WAAW,CAAC;AAAA,EACpC;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB,MAAM;AAAA,IACN,MAAMA;AAAA,IACN,UAAU;AAAA,EACZ;AAAA,EAEA,MAAgB,qBAAoC;AAClD,QAAI,CAAC,KAAK,aAAa;AACrB,WAAK,OAAO,KAAK,8BAA8B;AAC/C,YAAM,EAAE,YAAY,IAAI,MAAM,OAAO,eAAe;AAEpD,WAAK,cAAc,IAAI,YAAY;AAAA,QACjC,cAAc;AAAA,UACZ,MAAM,KAAK,QAAQ,cAAc,QAAQ;AAAA,UACzC,KAAK,KAAK,QAAQ,cAAc,QAAQ,OAAO,WAAW,cAAc,OAAO,SAAS,OAAO;AAAA,UAC/F,GAAI,KAAK,QAAQ,cAAc,WAAW,EAAE,SAAS,KAAK,QAAQ,aAAa,QAAQ;AAAA,QACzF;AAAA,MACF,CAAC;AAED,WAAK,OAAO,KAAK,0BAA0B;AAAA,IAC7C;AAAA,EACF;AAAA,EAEA,MAAgB,cAAoC;AAClD,QAAI,CAAC,KAAK,UAAU;AAClB,YAAM,KAAK,mBAAmB;AAC9B,WAAK,WAAW,KAAK,YAAa,YAAY,KAAK;AAEnD,UAAI,CAAC,KAAK,UAAU;AAClB,cAAM,IAAI,MAAM,2DAA2D;AAAA,MAC7E;AAAA,IACF;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAgB,iBAAiB,WAA8D,YAAqC;AAClI,UAAM,WAAW,MAAM,KAAK,YAAY;AAExC,WAAO,MAAM,SAAS,QAAQ;AAAA,MAC5B,QAAQ;AAAA,MACR,QAAQ,CAAC,YAAY,KAAK,UAAU,SAAS,CAAC;AAAA,IAChD,CAAC;AAAA,EACH;AAAA,EAEO,UAAU,YAAsC;AACrD,SAAK,OAAO,KAAK,eAAe;AAEhC,UAAM,KAAK,mBAAmB;AAC9B,UAAM,KAAK,iBAAiB;AAE5B,UAAM,WAAW,MAAM,KAAK,YAAY;AAExC,UAAM,eAAe,MAAM,SAAS,QAAQ;AAAA,MAC1C,QAAQ;AAAA,IACV,CAAC;AAED,QAAI,aAAa,WAAW,GAAG;AAC7B,WAAK,OAAO,MAAM,oBAAoB;AACtC,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACtC;AAEA,SAAK,OAAO,KAAK,gBAAgB,aAAa,MAAM,iBAAiB;AAErE,UAAM,iBAAiB,MAAM,KAAK,uBAAuB,YAAY;AACrE,UAAM,gBAAgB,eAAe,CAAC;AAEtC,UAAM,cAA2B;AAAA,MAC/B,UAAU;AAAA,MACV;AAAA,IACF;AAEA,cAAU,KAAK,OAAO;AAAA,MACpB,UAAU,KAAK;AAAA,MACf,QAAQ;AAAA,IACV,CAAC;AAED,SAAK,OAAO,KAAK,qBAAgB,WAAW;AAE5C,SAAK,cAAc,aAAa,CAAC,GAAG,cAAc,OAAO;AACzD,WAAO;AAAA,EACT;AAAA,EAEO,aAAa,YAA2B;AAC7C,SAAK,OAAO,KAAK,kBAAkB;AAEnC,QAAI,KAAK,aAAa;AAQpB,YAAM,KAAK,YAAY,UAAU;AAAA,IACnC;AAEA,SAAK,WAAW;AAChB,SAAK,cAAc,MAAM;AACzB,SAAK,aAAa;AAElB,SAAK,OAAO,KAAK,cAAc;AAAA,EACjC;AAAA,EAEO,gBAAgB,YAA2B;AAChD,QAAI;AACF,YAAM,QAAQ,KAAK,MAAM;AACzB,YAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AAEzC,UAAI,CAAC,aAAa;AAChB,aAAK,OAAO,KAAK,sBAAsB;AACvC;AAAA,MACF;AAEA,WAAK,OAAO,KAAK,qBAAqB;AAEtC,YAAM,KAAK,mBAAmB;AAC9B,YAAM,KAAK,iBAAiB;AAE5B,YAAM,WAAW,MAAM,KAAK,YAAY;AAExC,YAAM,eAAe,MAAM,SAAS,QAAQ;AAAA,QAC1C,QAAQ;AAAA,MACV,CAAC;AAED,UAAI,aAAa,WAAW,GAAG;AAC7B,aAAK,OAAO,MAAM,oBAAoB;AACtC,cAAM,IAAI,MAAM,oBAAoB;AAAA,MACtC;AAEA,YAAM,KAAK,mBAAmB,cAAc,CAAC,aAAa;AACxD,oBAAY,KAAK,OAAO;AAAA,UACtB,UAAU,KAAK;AAAA,UACf;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAAA,IACH,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,2BAA2B,MAAM,OAAO;AAC1D,WAAK,aAAa;AAClB,YAAM;AAAA,IACR;AAAA,EACF;AAGF;;;ACnMA,IAAAC,mBAAoB;AAgBb,IAAM,6BAA6B,GAAG,iBAAiB;AAE9D,IAAMC,SAAO,6BAA6B,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,CAK9C,CAAC;AAEK,IAAM,iBAAN,cAA6B,WAAW;AAAA,EACrC,UAAkC;AAAA,EAClC;AAAA,EAEE;AAAA,EAEV,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,CAAC;AAAA,EACd,GAAyC;AACvC,UAAM,EAAE,IAAI,UAAU,gBAAgB,OAAO,UAAU,CAAC;AAExD,UAAM;AAAA,MACJ,mBAAmB;AAAA,MACnB,oBAAoB,MAAM,QAAQ,QAAQ,OAAO,oCAAoC,CAAC;AAAA,IACxF,IAAI,WAAW,CAAC;AAChB,SAAK,UAAU,EAAE,kBAAkB,kBAAkB;AAErD,SAAK,QAAQ;AAEb,QAAI,KAAK,QAAQ,kBAAkB;AACjC,WAAK,OAAO;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB,MAAM;AAAA,IACN,MAAMA;AAAA,EACR;AAAA,EAEQ,0BAAyC;AAC/C,WAAO,eAAe,QAAQ,0BAA0B;AAAA,EAC1D;AAAA,EAEQ,sBAAsB,UAAwB;AACpD,mBAAe,QAAQ,4BAA4B,QAAQ;AAAA,EAC7D;AAAA,EAEQ,4BAAkC;AACxC,mBAAe,WAAW,0BAA0B;AAAA,EACtD;AAAA,EAEQ,eAAqB;AAC3B,QAAI;AACF,YAAM,UAAU,KAAK;AACrB,UAAI,CAAC,QAAQ,WAAW;AACtB,aAAK,OAAO;AAAA,UACV;AAAA,QACF;AACA,cAAM,IAAI,MAAM,wCAAwC;AAAA,MAC1D;AAAA,IACF,SAAS,OAAO;AACd,WAAK,WAAW;AAChB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAc,oBAA8C;AAC1D,QAAI,WAAW,KAAK,wBAAwB;AAC5C,QAAI,CAAC,UAAU;AACb,iBAAW,MAAM,KAAK,QAAQ,kBAAkB;AAChD,UAAI,CAAC,UAAU;AACb,aAAK,UAAU;AACf,aAAK,OAAO,MAAM,sBAAsB;AACxC,cAAM,IAAI,MAAM,sBAAsB;AAAA,MACxC;AAEA,UAAI,KAAK,QAAQ,kBAAkB;AACjC,aAAK,OAAO,KAAK,iCAAiC;AAClD,aAAK,sBAAsB,QAAQ;AAAA,MACrC;AAAA,IACF;AAEA,UAAM,UAAU,iBAAAC,QAAQ,oBAAoB,QAAQ;AACpD,SAAK,UAAU;AACf,WAAO;AAAA,EACT;AAAA,EAEO,UAAU,YAAsC;AAErD,SAAK,aAAa;AAElB,SAAK,OAAO,KAAK,eAAe;AAChC,UAAM,UAAU,MAAM,KAAK,kBAAkB;AAE7C,UAAM,gBAAgB;AAAA,MACpB,MAAM,GAAG,KAAK,SAAS,IAAI;AAAA,MAC3B,SAAS,QAAQ,KAAK,SAAS;AAAA,IACjC;AAEA,UAAM,cAA2B;AAAA,MAC/B,UAAU,CAAC,aAAa;AAAA,MACxB,eAAe;AAAA,IACjB;AAEA,cAAU,KAAK,OAAO;AAAA,MACpB,UAAU,KAAK;AAAA,MACf,QAAQ;AAAA,IACV,CAAC;AAED,SAAK,OAAO,KAAK,0BAA0B,WAAW;AACtD,WAAO,CAAC,aAAa;AAAA,EACvB;AAAA,EAEO,aAAa,YAA2B;AAC7C,SAAK,OAAO,KAAK,kBAAkB;AACnC,SAAK,aAAa;AAClB,SAAK,UAAU;AACf,SAAK,0BAA0B;AAC/B,SAAK,OAAO,KAAK,cAAc;AAAA,EACjC;AAAA,EAEO,gBAAgB,YAA2B;AAEhD,SAAK,aAAa;AAElB,UAAM,QAAQ,KAAK,MAAM;AACzB,UAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AAGzC,QAAI,CAAC,aAAa;AAChB,WAAK,OAAO,KAAK,sBAAsB;AACvC;AAAA,IACF;AAEA,SAAK,OAAO,KAAK,qBAAqB;AAGtC,QAAI,KAAK,QAAQ,kBAAkB;AACjC,UAAI;AACF,cAAM,KAAK,kBAAkB;AAC7B,aAAK,OAAO,KAAK,8BAA8B;AAAA,MACjD,SAAS,OAAY;AACnB,aAAK,OAAO,MAAM,2BAA2B,MAAM,OAAO;AAC1D,aAAK,WAAW;AAChB,cAAM;AAAA,MACR;AAAA,IACF,OAAO;AAEL,WAAK,OAAO,KAAK,wCAAwC;AACzD,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AAAA,EAEQ,YACN,UACA,eACuB;AACvB,UAAM,aAAoC,CAAC;AAE3C,aAAS,QAAQ,CAAC,KAAK,UAAU;AAC/B,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,IAAI,OAAO,SAAS;AACnC,YAAM,aAAa,WAAW,KAAK,QAAS,KAAK,SAAS;AAE1D,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,GAAG;AAAA,MACrB;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEQ,mBACN,UACA,eACuB;AACvB,UAAM,aAAoC,CAAC;AAE3C,aAAS,QAAQ,CAAC,WAAW,UAAU;AACrC,YAAM,aAAa,iBAAAA,QAAQ,iBAAiB,SAAS;AACrD,YAAM,WAAW,YAAY,UAAU;AAEvC,YAAM,MAA2B,WAC7B,iBAAAA,QAAQ,wBAAwB,SAAS,EAAE,MAC3C,iBAAAA,QAAQ,0BAA0B,SAAS;AAE/C,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,IAAI,OAAO,SAAS;AACnC,YAAM,aAAa,CAAC,YAAY,WAAW,KAAK,QAAS,KAAK,SAAS;AAEvE,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,GAAG;AAAA,MACrB;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEO,mBAAmB,OACxB,UACA,kBACmC;AAEnC,SAAK,aAAa;AAElB,QAAI;AACF,WAAK,OAAO,MAAM,2BAA2B,EAAE,UAAU,cAAc,CAAC;AACxE,UAAI,aAAoC,CAAC;AAGzC,UAAI,mBAAmB,QAAQ,GAAG;AAChC,cAAM,WAAkC,gBAAgB,QAAQ;AAChE,qBAAa,KAAK,YAAY,UAAU,aAAa;AAAA,MACvD,OAAO;AACL,cAAM,WAAyB,gBAAgB,QAAwB;AACvE,qBAAa,KAAK,mBAAmB,UAAU,aAAa;AAAA,MAC9D;AAGA,YAAM,aAAa,WAAW,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,QAAS,EAAE,CAAC;AACxE,WAAK,OAAO,MAAM,oCAAoC,EAAE,WAAW,CAAC;AACpE,aAAO;AAAA,IACT,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,+BAA+B,MAAM,OAAO;AAC9D,YAAM;AAAA,IACR;AAAA,EACF;AACF;;;ACzPA,IAAAC,mBAAoB;AAgBpB,IAAMC,SAAO,6BAA6B,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAU9C,CAAC;AAEK,IAAM,aAAN,cAAyB,WAAW;AAAA,EACjC,SAAmC;AAAA,EACnC;AAAA,EAEE;AAAA,EAEV,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,CAAC;AAAA,IACX,WAAW,CAAC;AAAA,EACd,GAAqC;AACnC,UAAM,EAAE,IAAI,UAAU,gBAAgB,OAAO,UAAU,CAAC;AACxD,SAAK,UAAU;AACf,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB,MAAM;AAAA,IACN,MAAMA;AAAA,EACR;AAAA,EAEA,MAAc,mBAA+C;AAC3D,SAAK,OAAO,KAAK,wBAAwB;AACzC,UAAM,EAAE,kBAAkB,IAAI,MAAM,OAAO,qBAAqB;AAChE,UAAM,SAAS,IAAI,kBAAkB,KAAK,OAAO;AACjD,SAAK,SAAS;AACd,SAAK,OAAO,KAAK,oBAAoB;AACrC,WAAO;AAAA,EACT;AAAA,EAEO,UAAU,YAAsC;AACrD,SAAK,OAAO,KAAK,eAAe;AAChC,UAAM,sBAAsB,KAAK,MAAM,MAAM;AAC7C,QAAI,uBAAuB,wBAAwB,KAAK,IAAI;AAC1D,WAAK,2BAA2B,UAAU,mBAAmB;AAAA,IAC/D;AACA,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAC3D,UAAM,WAAW,MAAM,OAAO,QAAQ;AAGtC,WAAO,WAAW,GAAG,cAAc,KAAK,YAAY;AAEpD,QAAI,SAAS,WAAW,GAAG;AACzB,WAAK,OAAO,MAAM,oBAAoB;AACtC,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACtC;AAEA,UAAM,iBAAiB,SAAS,IAAI,CAAC,SAAiB,SAAiB;AAAA,MACrE,MAAM,GAAG,KAAK,SAAS,IAAI,YAAY,MAAM,CAAC;AAAA,MAC9C;AAAA,IACF,EAAE;AAEF,UAAM,gBAAgB,eAAe,CAAC;AAEtC,UAAM,cAA2B;AAAA,MAC/B,UAAU;AAAA,MACV;AAAA,IACF;AAEA,cAAU,KAAK,OAAO;AAAA,MACpB,UAAU,KAAK;AAAA,MACf,QAAQ;AAAA,IACV,CAAC;AAED,SAAK,OAAO,KAAK,0BAA0B,WAAW;AACtD,WAAO;AAAA,EACT;AAAA,EAEO,aAAa,YAA2B;AAC7C,SAAK,OAAO,KAAK,kBAAkB;AACnC,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAE3D,UAAM,sBAAsB,KAAK,MAAM,MAAM;AAC7C,QAAI,uBAAuB,wBAAwB,KAAK,IAAI;AAC1D,WAAK,2BAA2B,UAAU,mBAAmB;AAC7D,WAAK,2BAA2B,WAAW,KAAK,EAAE;AAClD,YAAM,OAAO,WAAW;AAExB,YAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,GAAG,CAAC;AACvD,WAAK,2BAA2B,WAAW,mBAAmB;AAAA,IAChE,OAAO;AACL,YAAM,OAAO,WAAW;AAAA,IAC1B;AAEA,SAAK,aAAa;AAClB,SAAK,OAAO,KAAK,cAAc;AAAA,EACjC;AAAA,EAEO,YAAY,MAAY;AAC7B,SAAK,OAAO,KAAK,sBAAsB,KAAK,EAAE,EAAE;AAChD,UAAM,sBAAsB,KAAK,MAAM,MAAM;AAC7C,QAAI,uBAAuB,6CAAwC;AACjE,WAAK,2BAA2B,UAAU,mBAAmB;AAAA,IAC/D;AACA,SAAK,2BAA2B,SAAS;AACzC,oBAAgB,KAAK,OAAO,EAAE,UAAU,KAAK,GAAG,CAAC;AAAA,EACnD;AAAA,EAEO,gBAAgB,YAA2B;AAChD,QAAI;AACF,YAAM,QAAQ,KAAK,MAAM;AACzB,YAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AAGzC,UAAI,OAAO,WAAW,eAAe,OAAO,WAAW;AACrD,cAAM,iBAAiB,OAAO,UAAU,UAAU,SAAS,MAAM;AACjE,YAAI,kBAAkB,CAAC,eAAe,CAAC,MAAM,cAAc;AACzD,eAAK,OAAO,KAAK,4DAA4D;AAC7E,cAAI;AACF,kBAAM,KAAK,QAAQ;AACnB,iBAAK,OAAO,KAAK,yBAAyB;AAC1C;AAAA,UACF,SAAS,OAAY;AACnB,iBAAK,OAAO,KAAK,wBAAwB,MAAM,OAAO;AAAA,UACxD;AAAA,QACF;AAAA,MACF;AAGA,UAAI,CAAC,aAAa;AAChB,aAAK,OAAO,KAAK,sBAAsB;AACvC;AAAA,MACF;AAGA,UAAI,MAAM,sCAAiC;AACzC,aAAK,OAAO,KAAK,+CAA+C;AAChE;AAAA,MACF;AAEA,WAAK,OAAO,KAAK,qBAAqB;AAEtC,YAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAC3D,YAAM,WAAW,MAAM,OAAO,iBAAiB;AAE/C,UAAI,SAAS,WAAW,GAAG;AACzB,aAAK,OAAO,MAAM,oBAAoB;AACtC,cAAM,IAAI,MAAM,oBAAoB;AAAA,MACtC;AAEA,YAAM,iBAAiB,SAAS,IAAI,CAAC,SAAiB,SAAiB;AAAA,QACrE,MAAM,GAAG,KAAK,SAAS,IAAI,YAAY,MAAM,CAAC;AAAA,QAC9C;AAAA,MACF,EAAE;AAEF,YAAM,QAAQ,gBAAgB,gBAAgB,YAAY,QAAQ;AAElE,UAAI,CAAC,OAAO;AACV,aAAK,OAAO,KAAK,gDAAgD;AAAA,UAC/D,MAAM,YAAY;AAAA,UAClB,SAAS;AAAA,QACX,CAAC;AACD,oBAAY,KAAK,OAAO;AAAA,UACtB,UAAU,KAAK;AAAA,UACf,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AACA,WAAK,OAAO,KAAK,8BAA8B;AAAA,IACjD,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,2BAA2B,MAAM,OAAO;AAC1D,WAAK,aAAa;AAClB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,YACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,KAAK,UAAU;AAC/B,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,IAAI,OAAO,SAAS;AACnC,YAAM,aAAa,KAAK,UAAU,SAAS,MAAM;AAEjD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,IAAI,CAAC;AAAA,MACzB,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC;AAAA,MACtC;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEQ,mBACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,WAAW,UAAU;AACrC,YAAM,aAAa,iBAAAC,QAAQ,iBAAiB,SAAS;AACrD,YAAM,WAAW,YAAY,UAAU;AAEvC,YAAM,MAA2B,WAC7B,iBAAAA,QAAQ,wBAAwB,SAAS,EAAE,MAC3C,iBAAAA,QAAQ,0BAA0B,SAAS;AAE/C,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,IAAI,OAAO,SAAS;AACnC,YAAM,aAAa,CAAC,YAAY,KAAK,UAAU,SAAS,MAAM;AAE9D,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,IAAI,CAAC;AAAA,MACzB,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC;AAAA,MACtC;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEO,mBAAmB,OACxB,UACA,kBACmC;AACnC,QAAI;AACF,WAAK,OAAO,MAAM,2BAA2B,EAAE,UAAU,cAAc,CAAC;AACxE,UAAI,aAAkC,CAAC;AAGvC,UAAI,mBAAmB,QAAQ,GAAG;AAChC,cAAM,WAAkC,gBAAgB,QAAQ;AAChE,qBAAa,KAAK,YAAY,UAAU,aAAa;AAAA,MACvD,OAAO;AACL,cAAM,WAAyB,gBAAgB,QAAwB;AACvE,qBAAa,KAAK,mBAAmB,UAAU,aAAa;AAAA,MAC9D;AAEA,YAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAE3D,WAAK,OAAO,MAAM,+CAA+C,CAAC,UAAU,CAAC;AAG7E,YAAM,aAAa,MAAM,OAAO,gBAAgB,CAAC,UAAU,CAAC;AAC5D,WAAK,OAAO,MAAM,4CAA4C,UAAU;AAGxE,YAAM,SAAS,WAAW,OAA8B,CAAC,KAAK,QAAQ;AACpE,YAAI,IAAI,WAAW,IAAI,QAAQ,UAAU,GAAG;AAC1C,cAAI,KAAK,IAAI;AAAA,QACf,OAAO;AACL,gBAAM,YAAY,WAAW,MAAM;AACnC,cAAI,WAAW;AACb,gBAAI,KAAK,SAAS;AAAA,UACpB;AAAA,QACF;AACA,eAAO;AAAA,MACT,GAAG,CAAC,CAAC;AAEL,WAAK,OAAO,MAAM,oCAAoC,MAAM;AAC5D,aAAO;AAAA,IACT,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,+BAA+B,MAAM,OAAO;AAC9D,YAAM;AAAA,IACR;AAAA,EACF;AACF;;;AClRA,IAAMC,SAAO,6BAA6B,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAoB9C,CAAC;AAEK,IAAM,gBAAN,cAA4B,oBAAoB;AAAA,EAC7C,WAAmC;AAAA,EACjC;AAAA,EAEV,YAAY,QAA6C;AACvD,UAAM,MAAM;AACZ,SAAK,UAAU,OAAO,WAAW,CAAC;AAAA,EACpC;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB,MAAM;AAAA,IACN,MAAMA;AAAA,IACN,UAAU;AAAA,EACZ;AAAA,EAEA,MAAgB,qBAAoC;AAClD,QAAI,OAAO,WAAW,aAAa;AACjC,YAAM,IAAI,MAAM,kDAAkD;AAAA,IACpE;AAMA,UAAM,YAAa,OAAe;AAGlC,QAAK,OAAe,SAAS;AAC3B,WAAK,OAAO,KAAK,mDAAmD;AACpE;AAAA,IACF;AAEA,QAAI,WAAW,aAAa,MAAM,QAAQ,UAAU,SAAS,GAAG;AAC9D,YAAM,kBAAkB,UAAU,UAAU,KAAK,CAACC,OAAWA,GAAE,SAAS;AACxE,UAAI,iBAAiB;AACnB,aAAK,OAAO,KAAK,kCAAkC;AACnD;AAAA,MACF;AAAA,IACF;AAEA,QAAI,WAAW,WAAW;AACxB,WAAK,OAAO,KAAK,uCAAuC;AACxD;AAAA,IACF;AAGA,SAAK,OAAO,KAAK,kFAAkF;AAAA,EACrG;AAAA,EAEA,MAAgB,cAAwC;AACtD,QAAI,CAAC,KAAK,UAAU;AAClB,YAAM,KAAK,mBAAmB;AAE9B,YAAM,YAAa,OAAe;AAGlC,UAAK,OAAe,SAAS;AAC3B,aAAK,WAAY,OAAe;AAAA,MAClC,WAAW,WAAW,aAAa,MAAM,QAAQ,UAAU,SAAS,GAAG;AACrE,cAAM,kBAAkB,UAAU,UAAU,KAAK,CAACA,OAAWA,GAAE,SAAS;AACxE,YAAI,iBAAiB;AACnB,eAAK,WAAW;AAAA,QAClB;AAAA,MACF,WAAW,WAAW,WAAW;AAC/B,aAAK,WAAW;AAAA,MAClB;AAEA,UAAI,CAAC,KAAK,UAAU;AAClB,cAAM,IAAI,MAAM,yGAAyG;AAAA,MAC3H;AAAA,IACF;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAgB,iBAAiB,WAA8D,YAAqC;AAClI,UAAM,WAAW,MAAM,KAAK,YAAY;AAExC,QAAI;AACF,aAAO,MAAM,SAAS,QAAQ;AAAA,QAC5B,QAAQ;AAAA,QACR,QAAQ,CAAC,YAAY,KAAK,UAAU,SAAS,CAAC;AAAA,MAChD,CAAQ;AAAA,IACV,SAAS,OAAY;AACnB,UAAI,MAAM,SAAS,MAAM;AACvB,cAAM,IAAI,MAAM,mCAAmC;AAAA,MACrD;AACA,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEO,UAAU,YAAsC;AACrD,SAAK,OAAO,KAAK,eAAe;AAEhC,UAAM,KAAK,mBAAmB;AAC9B,UAAM,KAAK,iBAAiB;AAE5B,UAAM,WAAW,MAAM,KAAK,YAAY;AAExC,QAAI;AAEF,WAAK,OAAO,KAAK,yCAAyC;AAC1D,YAAM,eAAe,MAAM,SAAS,QAAQ;AAAA,QAC1C,QAAQ;AAAA,MACV,CAAC;AAED,UAAI,aAAa,WAAW,GAAG;AAC7B,aAAK,OAAO,MAAM,oBAAoB;AACtC,cAAM,IAAI,MAAM,oBAAoB;AAAA,MACtC;AAEA,WAAK,OAAO,KAAK,gBAAgB,aAAa,MAAM,iBAAiB;AAErE,YAAM,iBAAiB,MAAM,KAAK,uBAAuB,YAAY;AACrE,YAAM,gBAAgB,eAAe,CAAC;AAEtC,YAAM,cAA2B;AAAA,QAC/B,UAAU;AAAA,QACV;AAAA,MACF;AAEA,gBAAU,KAAK,OAAO;AAAA,QACpB,UAAU,KAAK;AAAA,QACf,QAAQ;AAAA,MACV,CAAC;AAED,WAAK,OAAO,KAAK,qBAAgB,WAAW;AAC5C,WAAK,cAAc,aAAa,CAAC,GAAG,cAAc,OAAO;AACzD,aAAO;AAAA,IACT,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,qBAAqB,MAAM,OAAO;AACpD,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEO,aAAa,YAA2B;AAC7C,SAAK,OAAO,KAAK,kBAAkB;AAGnC,SAAK,WAAW;AAChB,SAAK,cAAc,MAAM;AACzB,SAAK,aAAa;AAElB,SAAK,OAAO,KAAK,cAAc;AAAA,EACjC;AAAA,EAEO,gBAAgB,YAA2B;AAChD,QAAI;AACF,YAAM,QAAQ,KAAK,MAAM;AACzB,YAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AAEzC,UAAI,CAAC,aAAa;AAChB,aAAK,OAAO,KAAK,sBAAsB;AACvC;AAAA,MACF;AAEA,WAAK,OAAO,KAAK,qBAAqB;AAEtC,YAAM,KAAK,mBAAmB;AAC9B,YAAM,KAAK,iBAAiB;AAE5B,YAAM,WAAW,MAAM,KAAK,YAAY;AAExC,YAAM,eAAe,MAAM,SAAS,QAAQ;AAAA,QAC1C,QAAQ;AAAA,MACV,CAAC;AAED,UAAI,aAAa,WAAW,GAAG;AAC7B,aAAK,OAAO,MAAM,oBAAoB;AACtC,cAAM,IAAI,MAAM,oBAAoB;AAAA,MACtC;AAEA,YAAM,KAAK,mBAAmB,cAAc,CAAC,aAAa;AACxD,oBAAY,KAAK,OAAO;AAAA,UACtB,UAAU,KAAK;AAAA,UACf;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAAA,IACH,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,2BAA2B,MAAM,OAAO;AAC1D,WAAK,aAAa;AAClB,YAAM;AAAA,IACR;AAAA,EACF;AACF;;;AChNA,IAAAC,mBAAoB;;;ACDpB,IAAM,eAAe,OAAO,mBAAmB,WAAW;AAYnD,SAAS,WAAW,QAA0B;AACnD,MAAI,CAAC,UAAU,OAAO,WAAW,EAAG;AAEpC,MAAI;AAGF,QAAI,OAAO,WAAW,eAAe,OAAO,iBAAiB;AAC3D,aAAO,gBAAgB,MAAM;AAAA,IAC/B;AAEA,WAAO,KAAK,CAAC;AAAA,EACf,QAAQ;AAEN,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,aAAO,CAAC,IAAI;AAAA,IACd;AAAA,EACF;AACF;AAOO,SAAS,WAAW,KAAqB;AAC9C,MAAI,CAAC,IAAK,QAAO;AAGjB,QAAM,MAAM,IAAI,WAAW,IAAI,MAAM;AACrC,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,QAAI,CAAC,IAAI,IAAI,WAAW,CAAC;AAAA,EAC3B;AACA,aAAW,GAAG;AAEd,SAAO;AACT;AAMO,IAAM,qBAAN,MAAyB;AAAA,EACtB,aAAgC;AAAA,EAChC,aAAsB;AAAA,EAE9B,YAAY,WAAuB;AAEjC,SAAK,aAAa,IAAI,WAAW,SAAS;AAAA,EAG5C;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,YAAqB;AACvB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,OAAU,UAA6D;AAC3E,QAAI,KAAK,cAAc,CAAC,KAAK,YAAY;AACvC,YAAM,IAAI,MAAM,0CAA0C;AAAA,IAC5D;AAEA,QAAI;AACF,aAAO,MAAM,SAAS,KAAK,UAAU;AAAA,IACvC,SAAS,OAAO;AAEd,WAAK,MAAM;AACX,YAAM;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,WAAc,UAA2C;AACvD,QAAI,KAAK,cAAc,CAAC,KAAK,YAAY;AACvC,YAAM,IAAI,MAAM,0CAA0C;AAAA,IAC5D;AAEA,QAAI;AACF,aAAO,SAAS,KAAK,UAAU;AAAA,IACjC,SAAS,OAAO;AACd,WAAK,MAAM;AACX,YAAM;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAc;AACZ,QAAI,KAAK,cAAc,CAAC,KAAK,YAAY;AACvC,iBAAW,KAAK,UAAU;AAC1B,WAAK,aAAa;AAClB,WAAK,aAAa;AAClB,mBAAa,MAAM,kCAAkC;AAAA,IACvD;AAAA,EACF;AACF;AAQA,eAAsB,cACpB,WACA,UACY;AACZ,QAAM,YAAY,IAAI,mBAAmB,SAAS;AAElD,MAAI;AACF,WAAO,MAAM,SAAS,SAAS;AAAA,EACjC,UAAE;AACA,cAAU,MAAM;AAAA,EAClB;AACF;AAKO,SAAS,kBACd,WACA,UACG;AACH,QAAM,YAAY,IAAI,mBAAmB,SAAS;AAElD,MAAI;AACF,WAAO,SAAS,SAAS;AAAA,EAC3B,UAAE;AACA,cAAU,MAAM;AAAA,EAClB;AACF;AASA,eAAsB,iCACpB,aAC2C;AAI3C,MAAI,YAAY,WAAW,IAAI;AAC7B,UAAM,IAAI,MAAM,uDAAuD,YAAY,MAAM,EAAE;AAAA,EAC7F;AAMA,QAAM,OAAO,MAAM;AACnB,QAAMC,YAAU,MAAM,OAAO,SAAS;AAKtC,QAAM,UAAU,KAAK,KAAK,QAAQ,SAAS,WAAW;AAGtD,QAAM,UAAUA,UAAQ,cAAc,QAAQ,SAAS;AAEvD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,IAAI,QAAQ;AAAA,EACd;AACF;;;ADpLA,IAAM,6BAA6B,GAAG,iBAAiB;AA6KvD,IAAMC,SAAO,6BAA6B,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,CAK9C,CAAC;AAEK,IAAM,iBAAN,cAA6B,WAAW;AAAA,EACrC,WAAkC;AAAA,EAClC,cAAmC;AAAA,EACnC;AAAA,EACA,WAA8C;AAAA;AAAA;AAAA;AAAA;AAAA,EAM9C,WAA0B;AAAA;AAAA,EAG1B,WAAoB;AAAA,EAElB;AAAA,EAEV,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,CAAC;AAAA,EACd,GAAyC;AACvC,UAAM,EAAE,IAAI,UAAU,gBAAgB,OAAO,UAAU,CAAC;AAExD,QAAI,CAAC,SAAS,UAAU;AACtB,WAAK,OAAO,MAAM,mCAAmC;AACrD,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACrD;AAEA,SAAK,UAAU;AAAA,MACb,iBAAiB;AAAA,MACjB,UAAU;AAAA,MACV,GAAG;AAAA,IACL;AACA,SAAK,QAAQ;AAAA,EACf;AAAA,EAEQ,eAAwC;AAC9C,UAAM,OAAO,eAAe,QAAQ,0BAA0B;AAC9D,QAAI,CAAC,KAAM,QAAO;AAClB,QAAI;AACF,aAAO,KAAK,MAAM,IAAI;AAAA,IACxB,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,eAAqB;AAC3B,UAAM,WAA6B,EAAE,UAAU,KAAK,SAAS;AAC7D,mBAAe,QAAQ,4BAA4B,KAAK,UAAU,QAAQ,CAAC;AAAA,EAC7E;AAAA,EAEQ,gBAAsB;AAC5B,mBAAe,WAAW,0BAA0B;AAAA,EACtD;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB,MAAM;AAAA,IACN,MAAMA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,mBAA4C;AACxD,SAAK,OAAO,KAAK,iCAAiC;AAIlD,QAAI;AAEJ,QAAI;AAEJ,QAAI;AAEJ,QAAI;AAEJ,QAAI;AAEF,YAAM,QAAQ,MAAM,OAAO,iBAAiB;AAC5C,iBAAW,MAAM;AACjB,YAAM,OAAO,MAAM,OAAO,gBAAgB;AAC1C,yBAAmB,KAAK;AACxB,yBAAmB,KAAK;AACxB,YAAM,eAAe,MAAM,OAAO,yBAAyB;AAC3D,iCAA2B,aAAa;AAAA,IAC1C,SAAS,OAAO;AACd,WAAK,OAAO;AAAA,QACV;AAAA,QACA;AAAA,MACF;AACA,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,UAAM,cAAc;AAAA,MAClB,gBAAgB,iBAAiB;AAAA,MACjC,SAAS;AAAA,MACT,WAAW;AAAA;AAAA,MACX,aAAa;AAAA,MACb,kBAAkB;AAAA,MAClB,QAAQ;AAAA,MACR,YAAY;AAAA,IACd;AAEA,UAAM,aAAqC;AAAA,MACzC,SAAS,iBAAiB;AAAA,MAC1B,SAAS,iBAAiB;AAAA,MAC1B,kBAAkB,iBAAiB;AAAA,MACnC,iBAAiB,iBAAiB;AAAA,MAClC,MAAM,iBAAiB;AAAA,MACvB,MAAM,iBAAiB;AAAA,IACzB;AAGA,UAAM,qBAAqB,IAAI,yBAAyB;AAAA,MACtD,QAAQ,EAAE,YAAY;AAAA,IACxB,CAAC;AAED,UAAM,WAAW,IAAI,SAAS;AAAA,MAC5B,UAAU,KAAK,QAAQ;AAAA,MACvB,iBAAiB,WAAW,KAAK,QAAQ,mBAAmB,kBAAkB;AAAA,MAC9E;AAAA,MACA,UAAU,KAAK,QAAQ;AAAA,IACzB,CAAC;AAED,UAAM,SAAS,UAAU;AACzB,SAAK,WAAW;AAChB,SAAK,OAAO,KAAK,6BAA6B;AAE9C,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,sBAA6C;AACzD,SAAK,OAAO,KAAK,oDAAoD;AAGrE,QAAI;AAEJ,QAAI;AAEJ,QAAI;AAEJ,QAAI;AAEJ,QAAI;AAEF,YAAM,MAAM,MAAM,OAAO,8BAA8B;AACvD,iBAAW,IAAI;AACf,YAAM,OAAO,MAAM,OAAO,gBAAgB;AAC1C,yBAAmB,KAAK;AACxB,yBAAmB,KAAK;AACxB,YAAM,eAAe,MAAM,OAAO,yBAAyB;AAC3D,iCAA2B,aAAa;AAAA,IAC1C,QAAQ;AACN,WAAK,OAAO;AAAA,QACV;AAAA,MACF;AACA,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,UAAM,cAAc;AAAA,MAClB,gBAAgB,iBAAiB;AAAA,MACjC,SAAS;AAAA,MACT,WAAW;AAAA;AAAA,MACX,aAAa;AAAA,MACb,kBAAkB;AAAA,MAClB,QAAQ;AAAA,MACR,YAAY;AAAA,IACd;AAEA,UAAM,aAAqC;AAAA,MACzC,SAAS,iBAAiB;AAAA,MAC1B,SAAS,iBAAiB;AAAA,MAC1B,kBAAkB,iBAAiB;AAAA,MACnC,iBAAiB,iBAAiB;AAAA,MAClC,MAAM,iBAAiB;AAAA,MACvB,MAAM,iBAAiB;AAAA,IACzB;AAGA,UAAM,qBAAqB,IAAI,yBAAyB;AAAA,MACtD,QAAQ,EAAE,YAAY;AAAA,IACxB,CAAC;AAED,UAAM,cAAc,IAAI,SAAS;AAAA,MAC/B,UAAU,KAAK,QAAQ;AAAA,MACvB,iBAAiB,WAAW,KAAK,QAAQ,mBAAmB,kBAAkB;AAAA,MAC9E;AAAA,IACF,CAAC;AAED,UAAM,YAAY,KAAK;AACvB,SAAK,cAAc;AACnB,SAAK,OAAO,KAAK,iCAAiC;AAElD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAc,eAA4C;AAExD,UAAM,WAAW,KAAK,WAAW,KAAK,aAAa,WAAW,KAAK,UAAU;AAE7E,QAAI,CAAC,UAAU;AACb,YAAM,IAAI,MAAM,wBAAwB;AAAA,IAC1C;AAEA,SAAK,OAAO,MAAM,uCAAuC;AAIzD,UAAM,gBAAgB,MAAM,SAAS,QAAgB;AAAA,MACnD,QAAQ;AAAA,IACV,CAAC;AAED,QAAI,CAAC,iBAAiB,OAAO,kBAAkB,UAAU;AACvD,YAAM,IAAI,MAAM,8CAA8C;AAAA,IAChE;AAGA,UAAM,kBAAkB,KAAK,WAAW,aAAa;AAMrD,UAAM,YAAY,IAAI,mBAAmB,eAAe;AAGxD,eAAW,eAAe;AAE1B,SAAK,OAAO,MAAM,mCAAmC;AACrD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,WAAW,KAAyB;AAE1C,UAAM,WAAW,IAAI,WAAW,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI;AACvD,UAAM,QAAQ,IAAI,WAAW,SAAS,SAAS,CAAC;AAChD,aAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK,GAAG;AAC3C,YAAM,IAAI,CAAC,IAAI,SAAS,SAAS,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE;AAAA,IACtD;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBO,UAAU,OAAO,SAIQ;AAC9B,SAAK,OAAO,KAAK,2BAA2B;AAE5C,QAAI;AACF,UAAI;AAGJ,YAAM,UAAU,MAAM;AACtB,YAAM,aAAa,MAAM;AACzB,YAAM,WAAW,MAAM,YAAY,KAAK,QAAQ;AAEhD,UAAI,WAAW,YAAY;AAEzB,YAAI,CAAC,UAAU;AACb,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,aAAK,OAAO,KAAK,kDAAkD,EAAE,UAAU,WAAW,CAAC;AAG3F,cAAM,cAAc,KAAK,eAAgB,MAAM,KAAK,oBAAoB;AAGxE,YAAI,YAAY,WAAW;AACzB,eAAK,OAAO,MAAM,6CAA6C;AAC/D,cAAI;AACF,kBAAM,YAAY,OAAO;AAAA,UAC3B,QAAQ;AAAA,UAER;AAAA,QACF;AAGA,mBAAW,MAAM,YAAY,QAAQ;AAAA,UACnC;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAED,aAAK,WAAW;AAGhB,aAAK,WAAW,EAAE,OAAO,WAAW;AAAA,MACtC,OAAO;AAEL,cAAM,WAAW,KAAK,YAAa,MAAM,KAAK,iBAAiB;AAC/D,mBAAW,MAAM,SAAS,QAAQ;AAElC,aAAK,WAAW;AAGhB,aAAK,WAAW,MAAM,SAAS,YAAY;AAC3C,aAAK,OAAO,MAAM,uBAAuB,EAAE,OAAO,KAAK,SAAS,MAAM,CAAC;AAAA,MACzE;AAEA,UAAI,CAAC,UAAU;AACb,cAAM,IAAI,MAAM,+BAA+B;AAAA,MACjD;AAGA,YAAM,eAAe,MAAM,KAAK,aAAa;AAE7C,UAAI;AACF,cAAM,UAAU,MAAM,aAAa,OAAO,OAAO,cAAc;AAC7D,gBAAM,UAAU,MAAM,iCAAiC,SAAS;AAEhE,gBAAM,OAAO,QAAQ;AACrB,qBAAW,QAAQ,EAAE;AACrB,iBAAO;AAAA,QACT,CAAC;AAED,aAAK,WAAW;AAAA,MAClB,UAAE;AAEA,qBAAa,MAAM;AAAA,MACrB;AAEA,YAAM,gBAA+B;AAAA,QACnC,MAAM,KAAK,SAAS,QAAQ,KAAK,SAAS,SAAS,GAAG,KAAK,SAAS,IAAI;AAAA,QACxE,SAAS,KAAK;AAAA,MAChB;AAEA,YAAM,cAA2B;AAAA,QAC/B,UAAU,CAAC,aAAa;AAAA,QACxB,eAAe;AAAA,MACjB;AAEA,gBAAU,KAAK,OAAO;AAAA,QACpB,UAAU,KAAK;AAAA,QACf,QAAQ;AAAA,MACV,CAAC;AAGD,WAAK,aAAa;AAElB,WAAK,OAAO,KAAK,0BAA0B,EAAE,SAAS,KAAK,SAAS,CAAC;AACrE,aAAO,CAAC,aAAa;AAAA,IACvB,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,iCAAiC,MAAM,OAAO;AAChE,YAAM;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKO,aAAa,YAA2B;AAC7C,SAAK,OAAO,KAAK,gCAAgC;AAEjD,QAAI;AACF,UAAI,KAAK,YAAY,KAAK,aAAa,WAAW;AAChD,cAAM,KAAK,YAAY,OAAO;AAAA,MAChC,WAAW,KAAK,UAAU,WAAW;AACnC,cAAM,KAAK,SAAS,OAAO;AAAA,MAC7B;AAAA,IACF,SAAS,OAAY;AACnB,WAAK,OAAO,KAAK,iCAAiC,MAAM,OAAO;AAAA,IACjE;AAGA,SAAK,WAAW;AAChB,SAAK,WAAW;AAChB,SAAK,WAAW;AAChB,SAAK,cAAc;AACnB,SAAK,aAAa;AAElB,SAAK,OAAO,KAAK,cAAc;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,gBAAgB,YAA2B;AAChD,QAAI;AACF,YAAM,QAAQ,KAAK,MAAM;AACzB,YAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AAEzC,UAAI,CAAC,aAAa;AAChB,aAAK,OAAO,KAAK,sBAAsB;AACvC;AAAA,MACF;AAEA,YAAM,gBAAgB,YAAY,SAAS,CAAC;AAE5C,UAAI,CAAC,eAAe,SAAS;AAC3B,aAAK,OAAO,KAAK,oCAAoC;AACrD,aAAK,aAAa;AAClB;AAAA,MACF;AAGA,WAAK,WAAW,cAAc;AAC9B,WAAK,WAAW,EAAE,MAAM,cAAc,KAAK;AAG3C,YAAM,WAAW,KAAK,aAAa;AACnC,UAAI,UAAU;AACZ,aAAK,WAAW,SAAS;AAAA,MAC3B;AAEA,WAAK,OAAO,KAAK,2CAA2C,EAAE,SAAS,KAAK,SAAS,CAAC;AAAA,IACxF,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,2BAA2B,MAAM,OAAO;AAC1D,WAAK,aAAa;AAClB,YAAM;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,sBAA+B;AACrC,QAAI,KAAK,UAAU;AACjB,aAAO,QAAQ,KAAK,aAAa,aAAa,KAAK,aAAa,QAAQ;AAAA,IAC1E;AACA,WAAO,QAAQ,KAAK,UAAU,aAAa,KAAK,UAAU,QAAQ;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAc,kBAAiC;AAC7C,QAAI,KAAK,oBAAoB,GAAG;AAC9B,WAAK,OAAO,MAAM,8BAA8B;AAChD;AAAA,IACF;AAEA,SAAK,OAAO,KAAK,mEAAmE;AAEpF,QAAI,KAAK,UAAU;AACjB,YAAM,KAAK,aAAa;AAAA,IAC1B,OAAO;AACL,YAAM,KAAK,eAAe;AAAA,IAC5B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAc,eAA8B;AAC1C,QAAI,CAAC,KAAK,QAAQ,oBAAoB;AACpC,WAAK,OAAO,MAAM,oEAAoE;AACtF,YAAM,IAAI;AAAA,QACR;AAAA,MAEF;AAAA,IACF;AAEA,SAAK,OAAO,KAAK,wDAAwD;AAEzE,QAAI;AACJ,QAAI;AACF,oBAAc,MAAM,KAAK,QAAQ,mBAAmB;AAAA,IACtD,SAAS,OAAY;AAEnB,WAAK,OAAO,KAAK,6DAA6D,MAAM,OAAO;AAC3F,WAAK,aAAa;AAClB,YAAM,IAAI,MAAM,+DAA+D;AAAA,IACjF;AAGA,UAAM,cAAc,KAAK,eAAgB,MAAM,KAAK,oBAAoB;AAGxE,QAAI,YAAY,WAAW;AACzB,UAAI;AACF,cAAM,YAAY,OAAO;AAAA,MAC3B,QAAQ;AAAA,MAER;AAAA,IACF;AAEA,UAAM,WAAW,YAAY,YAAY,KAAK,QAAQ;AACtD,QAAI,CAAC,UAAU;AACb,YAAM,IAAI,MAAM,+CAA+C;AAAA,IACjE;AAGA,UAAM,WAAW,MAAM,YAAY,QAAQ;AAAA,MACzC;AAAA,MACA,YAAY,YAAY;AAAA,MACxB,SAAS,YAAY;AAAA,IACvB,CAAC;AAED,QAAI,CAAC,UAAU;AACb,YAAM,IAAI,MAAM,6CAA6C;AAAA,IAC/D;AAEA,SAAK,WAAW;AAChB,SAAK,aAAa;AAGlB,UAAM,KAAK,mBAAmB;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAc,iBAAgC;AAC5C,SAAK,OAAO,KAAK,iDAAiD;AAElE,UAAM,WAAW,KAAK,YAAa,MAAM,KAAK,iBAAiB;AAG/D,QAAI,SAAS,WAAW;AACtB,UAAI;AACF,cAAM,SAAS,OAAO;AAAA,MACxB,QAAQ;AAAA,MAER;AAAA,IACF;AAEA,UAAM,WAAW,MAAM,SAAS,QAAQ;AAExC,QAAI,CAAC,UAAU;AACb,YAAM,IAAI,MAAM,uCAAuC;AAAA,IACzD;AAEA,SAAK,WAAW;AAChB,SAAK,aAAa;AAGlB,SAAK,WAAW,MAAM,SAAS,YAAY;AAG3C,UAAM,KAAK,mBAAmB;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAc,qBAAoC;AAChD,UAAM,eAAe,MAAM,KAAK,aAAa;AAE7C,QAAI;AACF,YAAM,iBAAiB,MAAM,aAAa,OAAO,OAAO,cAAc;AACpE,cAAM,UAAU,MAAM,iCAAiC,SAAS;AAChE,cAAM,OAAO,QAAQ;AACrB,mBAAW,QAAQ,EAAE;AACrB,eAAO;AAAA,MACT,CAAC;AAED,UAAI,mBAAmB,KAAK,UAAU;AACpC,aAAK,OAAO,KAAK,4DAA4D;AAAA,UAC3E,UAAU,KAAK;AAAA,UACf,QAAQ;AAAA,QACV,CAAC;AAGD,aAAK,aAAa;AAElB,cAAM,IAAI;AAAA,UACR,qDAAqD,KAAK,QAAQ,SAAS,cAAc;AAAA,QAE3F;AAAA,MACF;AAEA,WAAK,OAAO,KAAK,oCAAoC;AAAA,IACvD,UAAE;AACA,mBAAa,MAAM;AAAA,IACrB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,YACN,UACA,eACuB;AACvB,UAAM,aAAoC,CAAC;AAE3C,aAAS,QAAQ,CAAC,KAAK,UAAU;AAC/B,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,IAAI,OAAO,SAAS;AACnC,YAAM,aAAa,WAAW,KAAK;AAEnC,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,GAAG;AAAA,MACrB;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,mBACN,UACA,eACuB;AACvB,UAAM,aAAoC,CAAC;AAE3C,aAAS,QAAQ,CAAC,WAAW,UAAU;AACrC,YAAM,aAAa,iBAAAC,QAAQ,iBAAiB,SAAS;AACrD,YAAM,WAAW,YAAY,UAAU;AAEvC,YAAM,MAA2B,WAC7B,iBAAAA,QAAQ,wBAAwB,SAAS,EAAE,MAC3C,iBAAAA,QAAQ,0BAA0B,SAAS;AAE/C,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,IAAI,OAAO,SAAS;AACnC,YAAM,aAAa,CAAC,YAAY,WAAW,KAAK;AAEhD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,GAAG;AAAA,MACrB;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYO,mBAAmB,OACxB,UACA,kBACmC;AACnC,QAAI;AACF,WAAK,OAAO,MAAM,2BAA2B,EAAE,UAAU,cAAc,CAAC;AAGxE,YAAM,KAAK,gBAAgB;AAE3B,UAAI,aAAoC,CAAC;AAGzC,UAAI,mBAAmB,QAAQ,GAAG;AAChC,cAAM,WAAkC,gBAAgB,QAAQ;AAChE,qBAAa,KAAK,YAAY,UAAU,aAAa;AAAA,MACvD,OAAO;AACL,cAAM,WAAyB,gBAAgB,QAAwB;AACvE,qBAAa,KAAK,mBAAmB,UAAU,aAAa;AAAA,MAC9D;AAEA,UAAI,WAAW,WAAW,GAAG;AAC3B,aAAK,OAAO,MAAM,yBAAyB;AAC3C,eAAO,CAAC;AAAA,MACV;AAGA,YAAM,eAAe,MAAM,KAAK,aAAa;AAC7C,UAAI,aAA2B,CAAC;AAEhC,UAAI;AACF,qBAAa,MAAM,aAAa,OAAO,OAAO,cAAc;AAC1D,gBAAM,UAAU,MAAM,iCAAiC,SAAS;AAEhE,cAAI;AAEF,kBAAM,SAAS,WAAW,IAAI,CAAC,QAAQ,IAAI,QAAQ,QAAQ,EAAE,CAAC;AAC9D,mBAAO;AAAA,UACT,UAAE;AAEA,uBAAW,QAAQ,EAAE;AAAA,UACvB;AAAA,QACF,CAAC;AAAA,MACH,UAAE;AAEA,qBAAa,MAAM;AAAA,MACrB;AAEA,WAAK,OAAO,MAAM,oCAAoC,EAAE,OAAO,WAAW,OAAO,CAAC;AAClF,aAAO;AAAA,IACT,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,+BAA+B,MAAM,OAAO;AAC9D,YAAM;AAAA,IACR;AAAA,EACF;AACF;;;AEl7BA,IAAAC,mBAAoB;AA0BpB,IAAMC,SAAO,6BAA6B,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,CAK9C,CAAC;AAEK,IAAM,WAAN,cAAuB,WAAW;AAAA,EAC/B,SAAkC;AAAA,EAChC;AAAA,EAEV,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,CAAC;AAAA,EACd,GAA0C;AACxC,UAAM,EAAE,IAAI,UAAU,gBAAgB,OAAO,UAAU,CAAC;AACxD,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB,MAAM;AAAA,IACN,MAAMA;AAAA,EACR;AAAA,EAEA,MAAc,mBAA8C;AAC1D,SAAK,OAAO,KAAK,wBAAwB;AACzC,QACE,OAAO,WAAW,eACjB,OAA0B,qBAAqB,QAChD;AACA,WAAK,OAAO,MAAM,6BAA6B;AAC/C,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AACA,UAAM,SAAU,OAA0B;AAC1C,SAAK,SAAS;AACd,SAAK,OAAO,KAAK,oBAAoB;AACrC,WAAO;AAAA,EACT;AAAA,EAEO,UAAU,YAAsC;AACrD,SAAK,OAAO,KAAK,eAAe;AAChC,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAE3D,UAAM,gBAAgB,MAAM,OAAO,QAAQ;AAE3C,UAAM,cAA2B;AAAA,MAC/B,UAAU,CAAC,aAAa;AAAA,MACxB;AAAA,IACF;AAEA,cAAU,KAAK,OAAO;AAAA,MACpB,UAAU,KAAK;AAAA,MACf,QAAQ;AAAA,IACV,CAAC;AAED,SAAK,OAAO,KAAK,qBAAgB,WAAW;AAC5C,WAAO,CAAC,aAAa;AAAA,EACvB;AAAA,EAEO,aAAa,YAA2B;AAC7C,SAAK,OAAO,KAAK,kBAAkB;AACnC,SAAK,aAAa;AAClB,SAAK,OAAO,KAAK,eAAe;AAAA,EAClC;AAAA,EAEO,gBAAgB,YAA2B;AAChD,QAAI;AACF,YAAM,QAAQ,KAAK,MAAM;AACzB,YAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AAGzC,UAAI,CAAC,aAAa;AAChB,aAAK,OAAO,KAAK,sBAAsB;AACvC;AAAA,MACF;AAEA,WAAK,OAAO,KAAK,qBAAqB;AACtC,YAAM,SAAS,MAAM,KAAK,iBAAiB;AAC3C,YAAM,cAAc,MAAM,OAAO,YAAY;AAE7C,UAAI,CAAC,aAAa;AAChB,aAAK,OAAO,MAAM,6BAA6B;AAC/C,cAAM,IAAI,MAAM,6BAA6B;AAAA,MAC/C;AACA,WAAK,OAAO,KAAK,iBAAiB;AAAA,IACpC,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,2BAA2B,MAAM,OAAO;AAC1D,WAAK,aAAa;AAClB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,YACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,KAAK,UAAU;AAC/B,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,IAAI,OAAO,SAAS;AACnC,YAAM,aAAa,KAAK,UAAU,SAAS,MAAM;AAEjD,YAAM,YAAY,kBAAkB,IAAI,OAAO,CAAC;AAEhD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,KAAK,UAAU,CAAC;AAAA,MACpC,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,WAAW,SAAS,CAAC,EAAE,CAAC;AAAA,MACjD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEQ,mBACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,WAAW,UAAU;AACrC,YAAM,aAAa,iBAAAC,QAAQ,iBAAiB,SAAS;AACrD,YAAM,WAAW,YAAY,UAAU;AAEvC,YAAM,MAA2B,WAC7B,iBAAAA,QAAQ,wBAAwB,SAAS,EAAE,MAC3C,iBAAAA,QAAQ,0BAA0B,SAAS;AAE/C,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,IAAI,OAAO,SAAS;AACnC,YAAM,aAAa,CAAC,YAAY,KAAK,UAAU,SAAS,MAAM;AAE9D,YAAM,YAAY,kBAAkB,IAAI,OAAO,CAAC;AAEhD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,KAAK,UAAU,CAAC;AAAA,MACpC,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,WAAW,SAAS,CAAC,EAAE,CAAC;AAAA,MACjD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEO,mBAAmB,OACxB,UACA,kBACmC;AACnC,QAAI;AACF,WAAK,OAAO,MAAM,2BAA2B,EAAE,UAAU,cAAc,CAAC;AACxE,UAAI,aAAkC,CAAC;AAGvC,UAAI,mBAAmB,QAAQ,GAAG;AAChC,cAAM,WAAkC,gBAAgB,QAAQ;AAChE,qBAAa,KAAK,YAAY,UAAU,aAAa;AAAA,MACvD,OAAO;AACL,cAAM,WAAyB,gBAAgB,QAAwB;AACvE,qBAAa,KAAK,mBAAmB,UAAU,aAAa;AAAA,MAC9D;AAEA,YAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAE3D,WAAK,OAAO,MAAM,+CAA+C,UAAU;AAG3E,YAAM,iBAAiB,MAAM,OAAO,SAAS,UAAU;AACvD,WAAK,OAAO,MAAM,4CAA4C,cAAc;AAG5E,YAAM,SAAS,eAAe,IAAI,CAAC,UAAU;AAC3C,YAAI,UAAU,MAAM;AAClB,iBAAO;AAAA,QACT;AACA,eAAO,kBAAkB,KAAK;AAAA,MAChC,CAAC;AAED,WAAK,OAAO,MAAM,oCAAoC,MAAM;AAC5D,aAAO;AAAA,IACT,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,+BAA+B,MAAM,OAAO;AAC9D,YAAM;AAAA,IACR;AAAA,EACF;AACF;;;ArBnMO,SAAS,kBAA6B;AAC3C,SAAO;AAAA,IACL,sBAAgB,GAAG;AAAA,IACnB,sBAAgB,GAAG;AAAA,IACnB,oBAAe,GAAG;AAAA,IAClB,4BAAmB,GAAG;AAAA,IACtB,sBAAgB,GAAG;AAAA,IACnB,wBAAiB,GAAG;AAAA,IACpB,gBAAa,GAAG;AAAA,IAChB,kBAAc,GAAG;AAAA,IACjB,oBAAe,GAAG;AAAA,IAClB,0BAAkB,GAAG;AAAA,IACrB,0BAAkB,GAAG;AAAA,IACrB,kBAAc,GAAG;AAAA,IACjB,wBAAiB,GAAG;AAAA,IACpB,oCAAuB,GAAG;AAAA,IAC1B,0BAAkB,GAAG;AAAA,IACrB,4BAAmB,GAAG;AAAA,EACxB;AACF;AAEO,SAAS,gBAAgB,UAA2B,WAAqC;AAC9F,QAAM,YAAY,IAAI,IAAI,SAAS,IAAI,CAAC,YAAY,QAAQ,OAAO,CAAC;AACpE,QAAM,mBAAmB,IAAI,IAAI,UAAU,IAAI,CAAC,YAAY,QAAQ,OAAO,CAAC;AAE5E,MAAI,UAAU,SAAS,iBAAiB,MAAM;AAC5C,WAAO;AAAA,EACT;AAGA,aAAW,WAAW,WAAW;AAC/B,QAAI,CAAC,iBAAiB,IAAI,OAAO,GAAG;AAClC,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,kBAAkB,MAA0B;AAC1D,SAAO,kBAAkB,KAAK,IAAI,CAAC;AACrC;AAEO,SAAS,kBAAkB,OAA2B;AAC3D,SAAO,KAAK,kBAAkB,KAAK,CAAC;AACtC;AAEO,SAAS,kBAAkB,KAAyB;AACzD,QAAM,QAAQ,IAAI,WAAW,IAAI,MAAM;AACvC,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,UAAM,CAAC,IAAI,IAAI,WAAW,CAAC;AAAA,EAC7B;AACA,SAAO;AACT;AAEO,SAAS,kBAAkB,OAA2B;AAC3D,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,cAAU,OAAO,aAAa,MAAM,CAAC,CAAC;AAAA,EACxC;AACA,SAAO;AACT;AAEO,SAAS,YAAY,QAAsB;AAChD,MAAI,CAAC,UAAU,OAAO,WAAW,SAAU,QAAO;AAClD,MAAI,EAAE,SAAS,UAAU,SAAS,QAAS,QAAO;AAGlD,MAAI,EAAE,OAAO,eAAe,YAAa,QAAO;AAGhD,QAAM,MAAM,OAAO;AACnB,MAAI,CAAC,OAAO,OAAO,QAAQ,SAAU,QAAO;AAG5C,QAAM,mBAAmB,UAAU,OAAO,SAAS;AAEnD,SAAO;AACT;AAEO,SAAS,cAAc,MAAwC;AACpE,SACE,QACA,OAAO,SAAS,YAChB,YAAY,SACX,KAAK,kBAAkB,iBAAAC,QAAQ,WAAW,OAAO,KAAK,WAAW;AAEtE;AAEO,SAAS,mBACd,UAC6D;AAC7D,MAAI,CAAC,MAAM,QAAQ,QAAQ,KAAK,SAAS,WAAW,GAAG;AACrD,WAAO;AAAA,EACT;AAEA,MAAI,cAAc,SAAS,CAAC,CAAC,GAAG;AAC9B,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,QAAQ,SAAS,CAAC,CAAC,KAAK,SAAS,CAAC,EAAE,SAAS,KAAK,cAAc,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG;AACzF,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,gBAAmB,UAAoB;AACrD,MAAI,CAAC,MAAM,QAAQ,SAAS,CAAC,CAAC,GAAG;AAC/B,WAAO;AAAA,EACT;AACA,SAAQ,SAA8B,KAAK;AAC7C;AAEA,SAAS,eAAuB;AAC9B,QAAM,OAAO,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC;AACxC,QAAM,QAAQ,KAAK,MAAM,KAAK,OAAO,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC;AACxD,SAAO,OAAO;AAChB;AAEO,SAAS,qBAA8B,QAAgB,QAA8B;AAC1F,SAAO;AAAA,IACL,IAAI,aAAa;AAAA,IACjB,SAAS;AAAA,IACT;AAAA,IACA;AAAA,EACF;AACF;;;ALhGO,IAAM,gBAAN,MAAoB;AAAA,EAClB,WAAuC,oBAAI,IAAI;AAAA,EAC9C;AAAA,EACA,WAAoB,CAAC;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EAEC;AAAA,EAER,YAAY;AAAA,IACV,UAAU,CAAC;AAAA,IACX;AAAA,IACA,iBAAiB;AAAA,IACjB,UAAU,CAAC;AAAA,EACb,IAAyB,CAAC,GAAG;AAE3B,SAAK,SAAS,KAAK,iBAAiB,OAAO;AAE3C,SAAK,OAAO,MAAM,2CAA2C;AAAA,MAC3D;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAGD,UAAM,iBAAiB,KAAK,mBAAmB;AAG/C,SAAK,oBAAoB,YAAY,oBAAoB;AAGzD,UAAM,gBAAgB,KAAK,kBAAkB,KAAK,mBAAmB,cAAc;AAGnF,SAAK,UAAU,EAAE,cAAc,QAAQ,gBAAgB,MAAM;AAG7D,UAAM,gBAAgB,KAAK,QAAQ,eAC/B,iBACA,gBAAgB,iBAAiB;AAGrC,QAAI,CAAC,cAAc,aAAa,GAAG;AACjC,YAAM,IAAI,MAAM,YAAY,aAAa,sCAAsC;AAAA,IACjF;AAGA,UAAM,cAAc,KAAK,kBAAkB,cAAc,aAAa,EAAE,KAAK;AAG7E,UAAM,eAAsB;AAAA,MAC1B,GAAG;AAAA,MACH,GAAG;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAGA,SAAK,QAAQ,IAAI,qBAAa,cAAc;AAAA,MAC1C,UAAU,MAAM,KAAK,mBAAmB;AAAA,IAC1C,CAAC;AAGD,SAAK,mBAAmB;AAGxB,SAAK,YAAY,CAAC,aAAmD;AACnE,YAAM,cAAc,KAAK,MAAM,UAAU,MAAM;AAC7C,iBAAS,KAAK,MAAM,KAAK;AAAA,MAC3B,CAAC;AAED,aAAO;AAAA,IACT;AAGA,SAAK,kBAAkB,OAAO;AAAA,EAChC;AAAA;AAAA,EAIQ,iBACN,SAC8C;AAC9C,UAAM,WAAW,KAAK,kBAAkB,OAAO;AAC/C,WAAO,SAAS,QAAQ;AACxB,WAAO,OAAO,mBAAmB,eAAe;AAAA,EAClD;AAAA,EAEQ,kBAAkB,SAAyC;AACjE,QAAI,SAAS,OAAO;AAClB;AAAA,IACF;AACA,WAAO,SAAS,aAAa,SAAY,QAAQ;AAAA,EACnD;AAAA;AAAA,EAIA,IAAW,cAA+B;AACxC,WAAO,KAAK,MAAM,MAAM;AAAA,EAC1B;AAAA,EAEA,IAAW,YAAY,aAA8B;AACnD,SAAK,MAAM,SAAS,CAAC,WAAW;AAAA,MAC9B,GAAG;AAAA,MACH;AAAA,IACF,EAAE;AAAA,EACJ;AAAA,EAEQ,qBAA4C;AAClD,QAAI;AACF,YAAM,kBAAkB,eAAe,QAAQ,iBAAiB;AAChE,UAAI,oBAAoB,MAAM;AAC5B,eAAO;AAAA,MACT;AACA,YAAM,cAAc,KAAK,MAAM,eAAe;AAC9C,UAAI,CAAC,sBAAsB,WAAW,GAAG;AACvC,aAAK,OAAO,KAAK,iBAAiB,WAAW;AAC7C,cAAM,IAAI,MAAM,4BAA4B;AAAA,MAC9C;AACA,aAAO;AAAA,IACT,SAAS,OAAY;AACnB,WAAK,OAAO,MAAM,4CAA4C,MAAM,OAAO,EAAE;AAC7E,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,qBAA2B;AACjC,QAAI;AACF,YAAM,EAAE,SAAS,cAAc,eAAe,cAAc,IAAI,KAAK,MAAM;AAC3E,YAAM,iBAAiC;AAAA,QACrC;AAAA,QACA;AAAA,QACA;AAAA,QACA,sBAAsB,CAAC;AAAA,MACzB;AAGA,iBAAW,CAAC,WAAW,aAAa,KAAK,OAAO,QAAQ,aAAa,GAAG;AACtE,cAAM,oBAAoB,KAAK,kBAAkB,SAAS;AAC1D,YAAI,CAAC,kBAAmB;AAGxB,cAAM,iBAAyC,CAAC;AAChD,YAAI,oBAAoB;AAGxB,YAAI,KAAK,UAAU,cAAc,KAAK,MAAM,KAAK,UAAU,kBAAkB,KAAK,GAAG;AACnF,yBAAe,QAAQ,cAAc;AACrC,8BAAoB;AAAA,QACtB;AAGA,YAAI,mBAAmB;AACrB,yBAAe,uBAAuB;AAAA,YACpC,GAAI,eAAe,wBAAwB,CAAC;AAAA,YAC5C,CAAC,SAAS,GAAG;AAAA,UACf;AAAA,QACF;AAAA,MACF;AAEA,YAAM,kBAAkB,KAAK,UAAU,cAAc;AACrD,qBAAe,QAAQ,mBAAmB,eAAe;AAAA,IAC3D,SAAS,OAAO;AACd,WAAK,OAAO,MAAM,0CAA0C,KAAK;AAAA,IACnE;AAAA,EACF;AAAA;AAAA,EAIA,IAAW,SAAwB;AACjC,WAAO,KAAK,MAAM,MAAM;AAAA,EAC1B;AAAA,EAEA,IAAW,UAAmB;AAC5B,WAAO,KAAK,MAAM,MAAM,kBAAkB;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,gBACN,UACA,eACW;AAEX,QAAI,oDAAuC,eAAe;AACxD,YAAM,UAAU;AAChB,UAAI,QAAQ,MAAM;AAChB,cAAM,OAAO,YAAY,QAAQ,IAAI;AACrC,YAAI,MAAM;AACR,iBAAO,iBAAiB,KAAK,EAAE;AAAA,QACjC;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,kBACN,eACA;AACA,SAAK,OAAO,KAAK,yBAAyB;AAE1C,eAAW,gBAAgB,eAAe;AACxC,UAAI;AACJ,UAAI;AACJ,UAAI;AAGJ,UAAI,OAAO,iBAAiB,UAAU;AACpC,mBAAW;AAAA,MACb,OAAO;AACL,cAAM,EAAE,IAAI,SAAS,SAAS,IAAI;AAClC,mBAAW;AACX,wBAAgB;AAChB,yBAAiB;AAAA,MACnB;AAGA,YAAM,YAAY,KAAK,gBAAgB,UAAU,aAAa;AAG9D,UAAI,KAAK,SAAS,IAAI,SAAS,GAAG;AAChC,aAAK,OAAO,KAAK,yBAAyB,SAAS,eAAe;AAClE;AAAA,MACF;AAGA,YAAM,YAAY,gBAAgB;AAClC,YAAM,cAAc,UAAU,QAAQ;AACtC,UAAI,CAAC,aAAa;AAChB,aAAK,OAAO,MAAM,qBAAqB,QAAQ,EAAE;AACjD;AAAA,MACF;AAGA,YAAM,iBAAiB,IAAI,YAAY;AAAA,QACrC,IAAI;AAAA,QACJ,UAAU;AAAA,QACV,SAAS;AAAA,QACT,gBAAgB,KAAK;AAAA,QACrB,OAAO,KAAK;AAAA,QACZ,WAAW,KAAK;AAAA,QAChB,gBAAgB,KAAK;AAAA,MACvB,CAAC;AAED,WAAK,SAAS,IAAI,WAAW,cAAc;AAC3C,WAAK,OAAO,KAAK,sBAAiB,SAAS,EAAE;AAAA,IAC/C;AAEA,UAAM,QAAQ,KAAK,MAAM;AAGzB,UAAM,mBAAmB,OAAO,KAAK,MAAM,OAAO;AAClD,eAAW,aAAa,kBAAkB;AACxC,UAAI,CAAC,KAAK,SAAS,IAAI,SAAS,GAAG;AACjC,aAAK,OAAO,KAAK,+BAA+B,SAAS,EAAE;AAC3D,qBAAa,KAAK,OAAO,EAAE,UAAU,UAAU,CAAC;AAAA,MAClD;AAAA,IACF;AAGA,QAAI,MAAM,gBAAgB,CAAC,KAAK,SAAS,IAAI,MAAM,YAAY,GAAG;AAChE,WAAK,OAAO,KAAK,4BAA4B,MAAM,YAAY,EAAE;AACjE,sBAAgB,KAAK,OAAO,EAAE,UAAU,KAAK,CAAC;AAAA,IAChD;AAAA,EACF;AAAA,EAEA,IAAW,UAAwB;AACjC,WAAO,CAAC,GAAG,KAAK,SAAS,OAAO,CAAC;AAAA,EACnC;AAAA,EAEO,UAAU,WAA8C;AAC7D,WAAO,KAAK,SAAS,IAAI,SAAS;AAAA,EACpC;AAAA,EAEA,MAAa,iBAAgC;AAC3C,QAAI;AACF,YAAM,WAAW,KAAK,QAAQ,IAAI,CAAC,WAAW,QAAQ,cAAc,CAAC;AACrE,YAAM,QAAQ,IAAI,QAAQ;AAAA,IAC5B,UAAE;AACA,WAAK,MAAM,SAAS,CAAC,WAAW;AAAA,QAC9B,GAAG;AAAA,QACH,eAAe;AAAA,MACjB,EAAE;AAAA,IACJ;AAAA,EACF;AAAA,EAEA,MAAa,aAA4B;AACvC,UAAM,WAAW,KAAK,QACnB,OAAO,CAAC,WAAW,OAAO,WAAW,EACrC,IAAI,CAAC,WAAW,QAAQ,WAAW,CAAC;AAEvC,UAAM,QAAQ,IAAI,QAAQ;AAAA,EAC5B;AAAA;AAAA,EAIO,eAAwC,MAAS,UAA4B;AAClF,SAAK,SAAS,IAAI,IAAI;AAAA,EACxB;AAAA,EAEO,iBAAiB,MAA2B;AACjD,WAAO,KAAK,SAAS,IAAI;AAAA,EAC3B;AAAA;AAAA,EAIQ,kBACN,YACA,gBAC+B;AAC/B,SAAK,OAAO,KAAK,uCAAuC;AAGxD,UAAM,gBAAgB,gBAAgB,wBAAwB,CAAC;AAG/D,UAAM,SAAwC,CAAC;AAC/C,eAAW,CAAC,WAAW,iBAAiB,KAAK,OAAO,QAAQ,UAAU,GAAG;AACvE,YAAM,sBAAsB,cAAc,SAAS;AACnD,aAAO,SAAS,IAAI;AAAA,QAClB,GAAG;AAAA,QACH,GAAG;AAAA;AAAA,QAEH,OAAO;AAAA,UACL,GAAG,kBAAkB;AAAA,UACrB,GAAI,qBAAqB,SAAS,CAAC;AAAA,QACrC;AAAA,MACF;AAAA,IACF;AAGA,eAAW,CAAC,IAAI,OAAO,KAAK,OAAO,QAAQ,MAAM,GAAG;AAClD,UAAI,CAAC,gBAAgB,OAAO,GAAG;AAC7B,cAAM,IAAI,MAAM,sCAAsC,EAAE,GAAG;AAAA,MAC7D;AAAA,IACF;AAEA,SAAK,OAAO,MAAM,0BAA0B,MAAM;AAClD,WAAO;AAAA,EACT;AAAA,EAEQ,kBAAkB,QAAsC;AAC9D,SAAK,OAAO,KAAK,gCAAgC;AAEjD,UAAM,EAAE,QAAQ,IAAI,YAAY,OAAO,IAAI,UAAU,CAAC,EAAE,IAAI;AAC5D,WAAO,IAAI,iBAAAC,QAAQ,QAAQ,OAAO,YAAY,MAAM,OAAO;AAAA,EAC7D;AAAA,EAEO,iBAAiB,MAAuB;AAC7C,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,mBAAmB,OAAO,cAAiD;AAChF,QAAI,KAAK,kBAAkB,WAAW;AACpC;AAAA,IACF;AAEA,QAAI,CAAC,KAAK,cAAc,SAAS,GAAG;AAClC,YAAM,IAAI,MAAM,YAAY,SAAS,sCAAsC;AAAA,IAC7E;AAEA,UAAM,cAAc,KAAK,kBAAkB,KAAK,cAAc,SAAS,EAAE,KAAK;AAC9E,qBAAiB,KAAK,OAAO,EAAE,WAAW,YAAY,CAAC;AAEvD,SAAK,OAAO,KAAK,gCAA2B,SAAS,EAAE;AAAA,EACzD;AAAA,EAEO,kBAAkB,WAAmB,aAAyC;AAEnF,QAAI,CAAC,KAAK,cAAc,SAAS,GAAG;AAClC,YAAM,IAAI,MAAM,YAAY,SAAS,sCAAsC;AAAA,IAC7E;AAGA,UAAM,gBAAgB;AAAA,MACpB,GAAG,KAAK,cAAc,SAAS;AAAA,MAC/B,OAAO;AAAA,QACL,GAAG,KAAK,cAAc,SAAS,EAAE;AAAA,QACjC,GAAG;AAAA,MACL;AAAA,IACF;AAGA,QAAI,CAAC,gBAAgB,aAAa,GAAG;AACnC,YAAM,IAAI,MAAM,+BAA+B;AAAA,IACjD;AAGA,SAAK,MAAM,SAAS,CAAC,WAAW;AAAA,MAC9B,GAAG;AAAA,MACH,eAAe;AAAA,QACb,GAAG,MAAM;AAAA,QACT,CAAC,SAAS,GAAG;AAAA,MACf;AAAA,IACF,EAAE;AAGF,QAAI,KAAK,kBAAkB,WAAW;AACpC,WAAK,cAAc,KAAK,kBAAkB,cAAc,KAAK;AAAA,IAC/D;AAGA,SAAK,mBAAmB;AAExB,SAAK,OAAO,KAAK,0CAAqC,SAAS,EAAE;AAAA,EACnE;AAAA,EAEO,mBAAmB,WAAyB;AAEjD,QAAI,CAAC,KAAK,kBAAkB,SAAS,GAAG;AACtC,YAAM,IAAI,MAAM,YAAY,SAAS,sCAAsC;AAAA,IAC7E;AAGA,SAAK,MAAM,SAAS,CAAC,WAAW;AAAA,MAC9B,GAAG;AAAA,MACH,eAAe;AAAA,QACb,GAAG,MAAM;AAAA,QACT,CAAC,SAAS,GAAG,EAAE,GAAG,KAAK,kBAAkB,SAAS,EAAE;AAAA,MACtD;AAAA,IACF,EAAE;AAGF,QAAI,KAAK,kBAAkB,WAAW;AACpC,WAAK,cAAc,KAAK,kBAAkB,KAAK,kBAAkB,SAAS,EAAE,KAAK;AAAA,IACnF;AAGA,UAAM,iBAAiB,KAAK,mBAAmB;AAC/C,QAAI,gBAAgB,sBAAsB;AAExC,aAAO,eAAe,qBAAqB,SAAS;AAEpD,qBAAe,QAAQ,mBAAmB,KAAK,UAAU,cAAc,CAAC;AAAA,IAC1E;AAEA,SAAK,OAAO,KAAK,0CAAqC,SAAS,EAAE;AAAA,EACnE;AAAA,EAEA,IAAW,gBAAwB;AACjC,WAAO,KAAK,MAAM,MAAM;AAAA,EAC1B;AAAA,EAEA,IAAW,gBAA+C;AACxD,WAAO,KAAK,MAAM,MAAM;AAAA,EAC1B;AAAA,EAEA,IAAW,sBAAqC;AAC9C,UAAM,EAAE,eAAe,cAAc,IAAI,KAAK,MAAM;AACpD,WAAO,cAAc,aAAa;AAAA,EACpC;AAAA;AAAA,EAIA,IAAW,eAAkC;AAC3C,UAAM,QAAQ,KAAK,MAAM;AACzB,UAAM,eAAe,KAAK,QAAQ,KAAK,CAAC,WAAW,OAAO,cAAc,MAAM,YAAY;AAC1F,QAAI,CAAC,cAAc;AACjB,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,IAAW,uBAA+C;AACxD,QAAI,CAAC,KAAK,cAAc;AACtB,aAAO;AAAA,IACT;AACA,WAAO,KAAK,aAAa;AAAA,EAC3B;AAAA,EAEA,IAAW,wBAAyC;AAClD,QAAI,CAAC,KAAK,cAAc;AACtB,aAAO;AAAA,IACT;AACA,WAAO,KAAK,aAAa,SAAS,IAAI,CAAC,YAAY,QAAQ,OAAO;AAAA,EACpE;AAAA,EAEA,IAAW,gBAAsC;AAC/C,QAAI,CAAC,KAAK,cAAc;AACtB,aAAO;AAAA,IACT;AACA,WAAO,KAAK,aAAa;AAAA,EAC3B;AAAA,EAEA,IAAW,gBAA+B;AACxC,QAAI,CAAC,KAAK,eAAe;AACvB,aAAO;AAAA,IACT;AACA,WAAO,KAAK,cAAc;AAAA,EAC5B;AAAA;AAAA,EAIA,IAAW,mBAAmD;AAC5D,QAAI,CAAC,KAAK,cAAc;AACtB,WAAK,OAAO,MAAM,yBAAyB;AAC3C,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AACA,WAAO,KAAK,aAAa;AAAA,EAC3B;AAAA,EAEA,IAAW,oBAA+C;AACxD,QAAI,CAAC,KAAK,cAAc;AACtB,WAAK,OAAO,MAAM,yBAAyB;AAC3C,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AACA,WAAO,KAAK,aAAa;AAAA,EAC3B;AACF;;;A2BhjBO,IAAM,kBAAkB;AAAA,EAC7B,kCAAkC;AAAA,EAClC,6BAA6B;AAAA,EAC7B,uBAAuB;AAAA,EACvB,uBAAuB;AAAA,EACvB,wBAAwB;AAAA,EACxB,8BAA8B;AAAA,EAC9B,kBAAkB;AAAA,EAClB,2BAA2B;AAAA,EAC3B,mBAAmB;AAAA,EACnB,gCAAgC;AAAA,EAChC,gBAAgB;AAAA,EAChB,aAAa;AACf;","names":["SDKErrorCode","SDKWarningCode","RPCErrorCode","LocalStorageKeys","ThirdPartyWalletEvents","MagicPayloadMethod","routeToMagicMethods","MagicIncomingWindowMessage","MagicOutgoingWindowMessage","DeepLinkPage","LoginWithMagicLinkEventEmit","LoginWithMagicLinkEventOnReceived","LoginWithEmailOTPEventEmit","LoginWithSmsOTPEventEmit","LoginWithSmsOTPEventOnReceived","LoginWithEmailOTPEventOnReceived","DeviceVerificationEventEmit","DeviceVerificationEventOnReceived","RecencyCheckEventEmit","RecencyCheckEventOnReceived","UpdateEmailEventEmit","UpdateEmailEventOnReceived","AuthEventOnReceived","FarcasterLoginEventEmit","EnableMFAEventOnReceived","EnableMFAEventEmit","DisableMFAEventOnReceived","DisableMFAEventEmit","EthChainType","UserEventsEmit","UserEventsOnReceived","RecoveryFactorEventOnReceived","RecoveryFactorEventEmit","RecoveryMethodType","RecoverAccountEventOnReceived","RecoverAccountEventEmit","NftCheckoutIntermediaryEvents","WalletEventOnReceived","UiEventsEmit","createCommonjsModule","e","r","percentToByte","p","byteToPercent","b","btoaUTF8","str","atobUTF8","encodeJSON","options","decodeJSON","queryString","isUndefined","value","isNull","isNil","isJsonRpcResponsePayload","isJsonRpcErrorCode","RPCErrorCode","isEmpty","key","createSDK","SDKBaseCtor","environment","SDKEnvironment","createMissingApiKeyError","MagicSDKError","SDKErrorCode","createModalNotReadyError","createMalformedResponseError","createExtensionNotInitializedError","member","createIncompatibleExtensionsError","extensions","msg","ext","compat","createInvalidArgumentError","ordinalSuffix","i","iAdjusted","j","k","createDuplicateIframeWarning","MagicSDKWarning","SDKWarningCode","createSynchronousWeb3MethodWarning","createReactNativeEndpointConfigurationWarning","createDeprecationWarning","method","removalVersions","useInstead","removalVersion","useInsteadSuffix","message","createIntGenerator","index","getPayloadId","intGenerator","proxyLocalForageMethod","args","lf","uuid","u","uid","isWebCryptoSupported","hasCrypto","hasSubtleCrypto","clearKeys","removeItem","STORE_KEY_PUBLIC_JWK","STORE_KEY_PRIVATE_KEY","createJwt","publicJwk","getPublicKey","subtle","privateJwk","getItem","claims","jws","strToUrlBase64","data","strToUint8","sigType","ALGO_NAME","sig","uint8ToUrlBase64","generateWCKP","kp","EC_GEN_PARAMS","jwkPublicKey","setItem","binToUrlBase64","utf8ToBinaryString","bin","_","p1","uint8","code","markPayloadAsPreprocessed","payload","payloadPreprocessedSymbol","isPayloadPreprocessed","standardizeJsonRpcRequestPayload","createJsonRpcRequestPayload","params","createTypedEmitter","emitter","TypedEmitter","source","isPromiEvent","promiEventBrand","createPromiEvent","executor","promise","createPromise","createBoundEmitterMethod","createChainingEmitterMethod","thenSymbol","catchSymbol","finallySymbol","createChainingPromiseMethod","nextPromise","promiEvent","result","resolved","err","UserEventsOnReceived","UserEventsEmit","resolve","reject","isMajorVersionAtLeast","version","majorVersion","major","clearDeviceShares","keysToRemove","iterate","iterationNumber","DEVICE_SHARE_KEY","arrayBufferToBase64","buffer","binary","bytes","len","base64ToArrayBuffer","base64","binaryString","getOrCreateInitVector","crypto","existingIv","INITIALIZATION_VECTOR_KEY","getOrCreateEncryptionKey","existingKey","ENCRYPTION_KEY_KEY","ALGO_LENGTH","encryptAndPersistDeviceShare","deviceShareBase64","networkHash","iv","encryptionKey","decodedDeviceShare","encryptedData","encryptedDeviceShare","getDecryptedDeviceShare","ab","createURL","url","base","checkExtensionCompat","satisfies","coerce","getNetworkHash","apiKey","network","extConfig","prepareExtensions","incompatibleExtensions","name","getRequestPayloadFromBatch","requestPayload","id","standardizeResponse","event","requestPayloadResolved","response","JsonRpcResponse","createMagicRequest","msgType","rt","jwt","request","decryptedDeviceShare","persistMagicEventRefreshToken","debounce","func","delay","timeoutId","getPrototypeChain","instance","currentProto","protos","BaseModule","require_eventemitter3","MAX_SAFE_INTEGER$1","constants","debug","debug_1","re_1","numeric","compareIdentifiers$1","rcompareIdentifiers","identifiers","MAX_LENGTH$1","MAX_SAFE_INTEGER","re$4","t$4","compareIdentifiers","SemVer","compare","compare_1","eq","eq_1","neq","neq_1","gt","gt_1","gte","gte_1","lt","lt_1","lte","lte_1","cmp","cmp_1","ANY","Comparator","re$3","t$3","Range","re$2","t$2","comparatorTrimReplace","tildeTrimReplace","caretTrimReplace","isSatisfiable","parseComparator","isX","replaceTildes","replaceTilde","replaceCarets","replaceCaret","replaceXRanges","replaceXRange","replaceStars","replaceGTE0","hyphenReplace","testSet","MAX_LENGTH","re$1","t$1","parse","parse_1","re","t","sdkNameToEnvName","MagicRPCError","MagicExtensionError","MagicExtensionWarning","storage_exports","clear","length","keys","ALGO_CURVE","import_eventemitter3","ProductConsolidationMethodRemovalVersions","AuthModule","UserModule","WalletModule","ThirdPartyWalletsModule","RPCProviderModule","NFTModule","SDKBase","SECOND","MINUTE","PING_INTERVAL","INITIAL_HEARTBEAT_DELAY","ViewController","sdkAccessFields","BaseExtension","InternalExtension","Extension","__commonJSMin","exports","module","has","prefix","Events","EE","fn","context","once","addListener","listener","evt","clearEvent","EventEmitter","names","events","handlers","l","ee","listeners","a1","a2","a3","a4","a5","a","n","_SemVer","s","_Comparator","o","_Range","E","c","$","h","_MagicSDKError","rawMessage","_MagicRPCError","sourceError","codeNormalized","_MagicExtensionError","__export","_JsonRpcResponse","responseOrPayload","error","sdk","routeToMagicMethods","responsePromise","MagicOutgoingWindowMessage","res","cleanupEvents","MagicIncomingWindowMessage","eventType","payloadId","MagicPayloadMethod","configuration","isRNMobilePackage","email","showUI","redirectURI","overrides","lifespan","phoneNumber","handle","LoginWithSmsOTPEventEmit","otp","deviceCheckUI","DeviceVerificationEventEmit","LoginWithEmailOTPEventEmit","mfa","recoveryCode","credentialOrQueryString","credentialResolved","urlWithoutQuery","RecencyCheckEventEmit","UpdateEmailEventEmit","newEmail","cachedIsLoggedIn","isLoggedInResponse","scope","RecoveryFactorEventEmit","phone_number","RecoverAccountEventEmit","callback","EnableMFAEventEmit","totp","DisableMFAEventEmit","loggedOut","loginRequestPayload","loginRequest","config","address","transaction","LocalStorageKeys","provider","walletStatus","unsubscribeFromProviderEvents","status","walletType","userAddress","onRequestComplete","standardizedPayload","batchResponse","finalPayload","payloadOrMethod","onRequestCompleteOrParams","warning","testModePrefix","isThirdPartyWalletConnected","NftCheckoutIntermediaryEvents","rawTransaction","hash","_SDKBase","defaultEndpoint","controller","endpoint","parameters","batchData","batchIds","acknowledgeResponse","removeEventListener","deviceShare","removeResponseListener","handler","boundHandler","unsubscribe","firstPing","sendPing","allSources","prop","allDescriptors","sourceIndex","x","isPrototypeField","descriptor","init_es","applyOverlayStyles","elem","cssProperty","value","overlayStyles","checkForSameSrcInstances","parameters","iframe","require_localforage","er","import_localforage","memoryDriver","IframeController","Magic","init_es","__commonJSMin","exports","module","f","g","define","e","t","n","r","s","o","u","a","__require","i","l","_dereq_","global","Mutation","scheduleDrain","called","observer","nextTick","element","channel","scriptEl","draining","queue","oldQueue","len","immediate","task","INTERNAL","handlers","REJECTED","FULFILLED","PENDING","Promise","resolver","safelyResolveThenable","onRejected","onFulfilled","promise","unwrap","QueueItem","func","returnValue","self","result","tryCatch","getThen","thenable","error","obj","then","onError","onSuccess","tryToUnwrap","out","resolve","reject","reason","all","iterable","values","resolved","allResolver","resolveFromAll","outValue","race","response","_typeof","_classCallCheck","instance","Constructor","getIDB","idb","isIndexedDBValid","isSafari","hasFetch","createBlob","parts","properties","Builder","builder","Promise$1","executeCallback","callback","executeTwoCallbacks","errorCallback","normalizeKey","key","getCallback","DETECT_BLOB_SUPPORT_STORE","supportsBlobs","dbContexts","toString","READ_ONLY","READ_WRITE","_binStringToArrayBuffer","bin","length","buf","arr","_checkBlobSupportWithoutCaching","txn","blob","matchedChrome","matchedEdge","_checkBlobSupport","_deferReadiness","dbInfo","dbContext","deferredOperation","_advanceReadiness","_rejectReadiness","err","_getConnection","upgradeNeeded","createDbContext","dbArgs","openreq","db","ex","_getOriginalConnection","_getUpgradedConnection","_isUpgradeNeeded","defaultVersion","isNewStore","isDowngrade","isUpgrade","incVersion","_encodeBlob","reader","base64","_decodeBlob","encodedBlob","arrayBuff","_isEncodedBlob","_fullyReady","_tryReconnect","forages","forage","createTransaction","mode","retries","tx","_initStorage","options","initPromises","ignoreErrors","j","k","getItem","transaction","store","req","iterate","iterator","iterationNumber","cursor","setItem","blobSupport","removeItem","clear","advanced","keys","dropInstance","currentConfig","isCurrentDb","dbPromise","newVersion","dropObjectPromise","_forage2","dropDBPromise","_forage","asyncStorage","isWebSQLValid","BASE_CHARS","BLOB_TYPE_PREFIX","BLOB_TYPE_PREFIX_REGEX","SERIALIZED_MARKER","SERIALIZED_MARKER_LENGTH","TYPE_ARRAYBUFFER","TYPE_BLOB","TYPE_INT8ARRAY","TYPE_UINT8ARRAY","TYPE_UINT8CLAMPEDARRAY","TYPE_INT16ARRAY","TYPE_INT32ARRAY","TYPE_UINT16ARRAY","TYPE_UINT32ARRAY","TYPE_FLOAT32ARRAY","TYPE_FLOAT64ARRAY","TYPE_SERIALIZED_MARKER_LENGTH","toString$1","stringToBuffer","serializedString","bufferLength","p","encoded1","encoded2","encoded3","encoded4","buffer","bytes","bufferToString","base64String","serialize","valueType","marker","fileReader","str","deserialize","type","blobType","matcher","localforageSerializer","createDbTable","_initStorage$1","dbInfoPromise","tryExecuteSql","sqlStatement","args","results","getItem$1","iterate$1","rows","item","_setItem","retriesLeft","originalValue","sqlError","setItem$1","removeItem$1","clear$1","length$1","key$1","keys$1","getAllStoreNames","storeNames","dropInstance$1","operationInfo","dropTable","storeName","operations","webSQLStorage","isLocalStorageValid","_getKeyPrefix","defaultConfig","keyPrefix","checkIfLocalStorageThrows","localStorageTestKey","_isLocalStorageUsable","_initStorage$2","clear$2","getItem$2","iterate$2","keyPrefixLength","key$2","keys$2","itemKey","length$2","removeItem$2","setItem$2","dropInstance$2","localStorageWrapper","sameValue","x","y","includes","array","searchElement","isArray","arg","DefinedDrivers","DriverSupport","DefaultDrivers","DefaultDriverOrder","OptionalDriverMethods","LibraryMethods","DefaultConfig","callWhenReady","localForageInstance","libraryMethod","_args","extend","_key","LocalForage","driverTypeKey","driver","driverName","driverObject","complianceError","driverMethods","driverMethodName","isRequired","configureMissingMethods","methodNotImplementedFactory","methodName","_i","_len","optionalDriverMethod","setDriverSupport","support","getDriverPromise","serializerPromise","drivers","supportedDrivers","setDriverToConfig","extendSelfWithDriver","initDriver","currentDriverIndex","driverPromiseLoop","oldDriverSetDone","libraryMethodsAndProperties","localforage_js","Je","me","_","_driver","O","v","clone","e_1","_a","temp","_b","__values","_c","e_1_1","getKeyPrefix","dropInstanceCommon","_this","normaliseKey","serialiser","stores","Store","kp","idx","opts","_options","_cb","outPromise","key$","keys$","value$","_support","oe","re","h","A","E","N","H","X","Q","ee","$e","qe","ViewController","createURL","onload","createDuplicateIframeWarning","event","MagicIncomingWindowMessage","handler","data","createModalNotReadyError","createSDK","SDKBase","lf","pe","localForage","Te","es_exports","r","AlgorandExtension","init_es","Extension","algorandConfig","txn","txns","exports","module","r","D","D2","X","Y","I","x","h","y","p","k","x2","u","m","b","z","sn","h2","r2","r3","r4","r5","r6","r7","r8","r9","g","f","v","q","j","A","Z","M","b2","b3","S","K","L","crypto","ICON","LogLevel","import_store","import_algosdk","NetworkId","WalletId","ScopeType","algosdk","import_algosdk","import_algosdk","name","icons","description","algosdk","ICON","ICON","import_algosdk","ICON","algosdk","import_algosdk","module","algosdk","ICON","import_algosdk","ICON","algosdk","ICON","import_algosdk","ICON","algosdk","wallet","import_algosdk","ICON","module","algosdk","import_algosdk","ICON","algosdk","import_algosdk","b","algosdk","ICON","import_algosdk","ICON","algosdk","import_algosdk","ICON","algosdk","ICON","p","import_algosdk","algosdk","ICON","algosdk","import_algosdk","ICON","algosdk","algosdk","algosdk"]}
|