{
  "version": 3,
  "sources": ["../src/api/apiError.ts", "../src/api/authType.ts", "../src/api/types/apiData.ts", "../src/api/types/rpcData.ts", "../src/api/types/index.ts", "../src/utils/validate.ts", "../src/types/authCoreEvent.ts", "../src/types/cloudflare.ts", "../src/types/rpcMethods.ts", "../src/types/wallet.ts", "../src/types/index.ts", "../src/core/analyticsApi.ts", "../src/config/index.ts", "../src/storage/encryptedStorage.ts", "../src/utils/index.ts", "../src/utils/eventUtils.ts", "../src/storage/userStorage.ts", "../src/storage/index.ts", "../src/utils/tron/crypto.ts", "../src/utils/tron/base58.ts", "../src/utils/chainUtils.ts", "../src/utils/ethereumUtils.ts", "../src/core/connectApi.ts", "../src/api/client.ts", "../src/api/pnApi.ts", "../src/core/authCore.ts", "../src/core/ethereumProvider.ts", "../src/api/evmApi.ts", "../src/utils/sigUtils.ts", "../src/core/threshSig.ts", "../src/api/kms.ts", "../src/core/masterPassword.ts", "../src/core/wallet.ts", "../src/core/solanaWallet.ts", "../src/api/solanaApi.ts", "../src/utils/solanaUtils.ts", "../src/core/securityApi.ts"],
  "sourcesContent": ["/**\n * Particle Network api error code\n */\nexport enum ApiError {\n  SystemError = 10001,\n  ParamError = 10002,\n  AuthorizationError = 10004,\n  InvalidToken = 10005,\n  MacError = 10009,\n\n  InvalidCode = 20101,\n  ResendCode = 20103,\n\n  SecurityAccountFrozen = 50010,\n  WrongPaymentPassword = 50102,\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isApiError(err: any): boolean {\n  return err && err.message && typeof err.error_code === 'number' && err.error_code > 0;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isRpcError(err: any): boolean {\n  return err && err.message && typeof err.code === 'number';\n}\n", "export enum AuthType {\n  email = 'email',\n  phone = 'phone',\n  facebook = 'facebook',\n  google = 'google',\n  apple = 'apple',\n  twitter = 'twitter',\n  discord = 'discord',\n  github = 'github',\n  twitch = 'twitch',\n  microsoft = 'microsoft',\n  linkedin = 'linkedin',\n\n  // headless\n  jwt = 'jwt',\n  telegram = 'telegram',\n}\n\nexport type SocialAuthType =\n  | 'facebook'\n  | 'google'\n  | 'apple'\n  | 'twitter'\n  | 'discord'\n  | 'github'\n  | 'twitch'\n  | 'microsoft'\n  | 'linkedin';\n\nexport interface LoginWithSocial {\n  authType: SocialAuthType;\n  redirectUrl?: string;\n  appState?: string;\n  prompt?: 'none' | 'consent' | 'select_account';\n}\n\nexport const isSocialAuthType = (authType: any): authType is SocialAuthType => {\n  return [\n    AuthType.facebook,\n    AuthType.google,\n    AuthType.apple,\n    AuthType.twitter,\n    AuthType.discord,\n    AuthType.github,\n    AuthType.twitch,\n    AuthType.microsoft,\n    AuthType.linkedin,\n  ].includes(authType);\n};\n", "import { type SocialAuthType } from '../authType';\n\nexport type BooleanResult = {\n  success: boolean;\n};\n\nexport interface DeviceInfo {\n  user_agent: string;\n  device: string;\n  createdAt: string;\n  updated_at: string;\n  user_uuid: string;\n  project_uuid: string;\n  project_app_uuid: string;\n  login_channel: string;\n  login_name: string;\n  isCurrent?: boolean;\n  location: {\n    ip: string;\n    country_code: string;\n    country_name?: string;\n    city: string;\n    continent: string;\n    longitude: string;\n    latitude: string;\n  };\n  project_app_name: string;\n}\n\nexport type PhoneCaptchaRequest = {\n  phone: string;\n  cf_turnstile_response: string;\n};\n\nexport type EmailCaptchaRequest = {\n  email: string;\n};\n\nexport type CaptchaRequest = PhoneCaptchaRequest | EmailCaptchaRequest;\n\nexport type LoginRequest = { code: string; phone: string } | { code: string; email: string };\n\nexport type LoginBindPhoneRequest = {\n  phone: string;\n  code: string;\n  security_account_verify_token: string;\n};\n\nexport type LoginBindEmailRequest = {\n  email: string;\n  code: string;\n  security_account_verify_token: string;\n};\n\nexport type LoginBindRequest = LoginBindPhoneRequest | LoginBindEmailRequest;\n\nexport type LoginBindThirdpartyRequest = {\n  provider: SocialAuthType;\n  thirdparty_code: string;\n  security_account_verify_token: string;\n  version?: 'v1' | 'v2';\n};\n\nexport interface ThirdpartyUserInfo {\n  provider: string;\n  user_info: {\n    id: string;\n    email: string;\n    name: string;\n    picture: string;\n  };\n}\n\nexport interface SecurityAccount {\n  email?: string;\n  phone?: string;\n  has_set_payment_password: boolean;\n  has_set_master_password: boolean;\n  payment_password_updated_at?: string;\n}\n\nexport interface OriginalUserInfo {\n  uuid: string;\n  phone?: string;\n  email?: string;\n  name?: string;\n  avatar?: string;\n  created_at: string;\n  updated_at: string;\n  mac_key: string;\n  token: string;\n  wallets: WalletInfo[];\n  cognito_result: CognitoResult;\n  thirdparty_user_info?: ThirdpartyUserInfo;\n  security_account: SecurityAccount;\n  facebook_id?: string;\n  facebook_email?: string;\n  google_id?: string;\n  google_email?: string;\n  apple_id?: string;\n  apple_email?: string;\n  discord_id?: string;\n  discord_email?: string;\n  github_id?: string;\n  github_email?: string;\n  linkedin_id?: string;\n  linkedin_email?: string;\n  microsoft_id?: string;\n  microsoft_email?: string;\n  twitch_id?: string;\n  twitch_email?: string;\n  twitter_id?: string;\n  twitter_email?: string;\n  jwt_id?: string;\n  telegram_id?: string;\n  telegram_phone?: string;\n}\n\nexport interface UserInfo extends Omit<OriginalUserInfo, 'mac_key' | 'cognito_result' | 'wallets'> {\n  wallets: Pick<WalletInfo, 'uuid' | 'chain_name' | 'public_address'>[];\n}\n\nexport type UserInfoSync = Omit<OriginalUserInfo, 'token' | 'mac_key' | 'cognito_result' | 'thirdparty_user_info'>;\n\nexport enum WalletEncryptedType {\n  KMS_AES = 0,\n  KMS_AES_WITH_DATA_KEY_AND_DEFAULT_MASTER_PASSWORD = 1,\n  KMS_AES_WITH_DATA_KEY_AND_MASTER_PASSWORD = 2,\n}\n\nexport type WalletInfo = {\n  uuid: string;\n  chain_name: string;\n  public_address?: string;\n  encrypted_data: string;\n  encrypted_type?: WalletEncryptedType;\n  encrypted_kms_data_key?: string;\n};\n\nexport type CognitoResult = {\n  region: string;\n  identity_id: string;\n  id_token: string;\n  kms_key_id: string;\n};\n\nexport interface UserWalletRequestParam {\n  encrypted_type: number;\n  encrypted_kms_data_key: string;\n  wallets: {\n    wallet_uuid: string;\n    encrypted_data: string;\n    public_address?: string;\n  }[];\n}\n\nexport interface LoginAccount {\n  id_combined: string;\n  user_uuid: string;\n  provider: string;\n  created_at: string;\n}\n\nexport interface SmartAccount {\n  smartAccountAddress: string;\n}\n\nexport interface ThirdpartyAuthUrlResult {\n  provider: SocialAuthType;\n  auth_url: string;\n  nonce: string;\n  signature: string;\n  state: string;\n}\n\nexport interface ServerError {\n  error_code: number;\n  message: string;\n}\n", "export type PrefixedHexString = string;\nexport type Base58String = string;\n\nexport type RpcInput = {\n  id: string;\n  jsonrpc: string;\n  method: string;\n  params?: unknown[];\n  chainId?: number;\n};\n\nexport type RpcOutput<T> = {\n  jsonrpc: string;\n  id: string;\n  result: T;\n};\n\nexport type SolanaDeserializeTransactionResult = {\n  instructions: SolanaDeserializeInstruction[];\n  estimatedChanges: EstimatedChanges;\n  estimatedLamportsFee: number;\n};\n\nexport type SolanaDeserializeInstruction = {\n  type: string;\n  programId: string;\n  data: string;\n};\n\nexport type EstimatedChanges = {\n  sols: SolChangeInfo[];\n  nfts: TokenChangeInfo[];\n  tokens: SplTokenChangeInfo[];\n};\n\nexport type SolChangeInfo = {\n  address: string;\n  lamportsChange: number;\n};\n\nexport type TokenChangeInfo = {\n  name: string;\n  symbol: string;\n  image: string;\n  mint: string;\n  associatedTokenAddress: string;\n  amountChange: number;\n};\n\nexport type SplTokenChangeInfo = {\n  decimals: number;\n} & TokenChangeInfo;\n\nexport enum SolanaEnhancedMethod {\n  enhancedDeserializeTransaction = 'enhancedDeserializeTransaction',\n}\n\nexport enum EvmEnhancedMethod {\n  deserializeTransaction = 'particle_deserializeTransaction',\n  deserializeTypedData = 'particle_deserializeTypedData',\n  suggestedGasFees = 'particle_suggestedGasFees',\n  getPrice = 'particle_getPrice',\n  getPendingTransactionsByAddress = 'particle_getPendingTransactionsByAddress',\n}\n\nexport enum TransactionSmartType {\n  NativeTransfer = 'native_transfer',\n  ERC20_TRANSFER = 'erc20_transfer',\n  ERC20_APPROVE = 'erc20_approve',\n  ERC721_TRANFER = 'erc721_transfer',\n  ERC1155_TRANFER = 'erc1155_transfer',\n  SEAPORT_FULFILL_ORDER = 'seaport_fulfill_order',\n  SEAPORT_CANCEL_ORDER = 'seaport_cancel_order',\n  SEAPORT_NFT_LISTING = 'seaport_nft_listing',\n  OTHER = 'other',\n}\n\nexport type NftPrice = {\n  address: string;\n  amount: string;\n  decimals: number;\n  symbol: string;\n};\n\nexport type SecurityDetection = {\n  type: string;\n  risks?: string[];\n  warnings?: string[];\n};\n\nexport type EVMDeserializeTransactionResult = {\n  type?: TransactionSmartType;\n  estimatedChanges: EVMEstimatedChange;\n  data: EVMData;\n  toTag?: string;\n  price?: NftPrice;\n  securityDetection?: SecurityDetection[];\n};\n\nexport type EVMEstimatedChange = {\n  natives: EVMNativeChange[];\n  nfts: EVMNFTChange[];\n  tokens: EVMTokenChange[];\n};\n\n//\u5341\u8FDB\u5236\u6570\u5B57\u5B57\u7B26\u4E32\nexport type DecimalString = string;\n\nexport type EVMNativeChange = {\n  address: PrefixedHexString;\n  nativeChange: DecimalString;\n};\n\nexport type EVMNFTChange = {\n  name: string;\n  symbol: string;\n  image: string;\n  address: string;\n  fromAddress: string;\n  amountChange: number;\n  tokenId: string;\n  amount?: string;\n  isSemiFungible?: boolean;\n  description?: string;\n};\n\nexport type EVMTokenChange = {\n  decimals: number;\n  name: string;\n  symbol: string;\n  image: string;\n  address: string;\n  fromAddress: string;\n  amountChange: number;\n};\n\nexport interface Consideration {\n  address: string;\n  amount: string;\n  decimals: number;\n  recipient: string;\n  symbol: string;\n}\nexport interface EVMData {\n  from: PrefixedHexString;\n  chainId: PrefixedHexString;\n  nonce: PrefixedHexString;\n  maxPriorityFeePerGas: PrefixedHexString;\n  maxFeePerGas: PrefixedHexString;\n  gasPrice: PrefixedHexString;\n  gasLimit: PrefixedHexString;\n  to: PrefixedHexString;\n  value: PrefixedHexString;\n  data: PrefixedHexString;\n  v?: PrefixedHexString;\n  r?: PrefixedHexString;\n  s?: PrefixedHexString;\n  function?: EVMFunction;\n  offer?: EVMNFTChange[];\n  offerer?: string;\n  consideration?: Consideration[];\n  startTime?: string;\n  endTime?: string;\n}\n\nexport interface TransactionData extends EVMData {\n  type: PrefixedHexString;\n  gas: PrefixedHexString; //gasLimit\n  action: string; // use for particle cancel or speed up transaction\n  function?: never;\n}\n\nexport interface EVMFunction {\n  name: string;\n  params: EVMParam[];\n}\n\nexport interface EVMParam {\n  name: string;\n  value: unknown;\n  type: string;\n}\n\nexport interface GasFeeResult {\n  low: GasFeeLevel;\n  medium: GasFeeLevel;\n  high: GasFeeLevel;\n  baseFee: string;\n}\n\nexport interface GasFeeLevel {\n  maxPriorityFeePerGas: string;\n  maxFeePerGas: string;\n  minWaitTime: number;\n  maxWaitTime: number;\n}\n\nexport interface TokenPrice {\n  address: string;\n  currencies: Currency[];\n}\n\nexport interface Currency {\n  type: string;\n  price: number;\n  marketCap: number;\n  '24hChange': number;\n  '24hVol': number;\n  lastUpdatedAt: number;\n}\n\nexport interface RecentBlockhash {\n  value: {\n    blockhash: string;\n  };\n}\n\nexport interface GasFee {\n  fee?: string;\n  maxFee: string;\n}\n\nexport interface TotalAmount {\n  amount?: string;\n  maxAmount: string;\n}\n\nexport enum GasFeeMode {\n  custom = 'custom',\n  low = 'low',\n  medium = 'medium',\n  high = 'high',\n}\n\nexport interface TxData {\n  /**\n   * The transaction's nonce.\n   */\n  nonce?: PrefixedHexString | number;\n  /**\n   * The transaction's gas price.\n   */\n  gasPrice?: PrefixedHexString | number;\n  gas?: PrefixedHexString | number;\n  /**\n   * The transaction's gas limit.\n   */\n  gasLimit?: PrefixedHexString | number;\n\n  from: PrefixedHexString;\n  /**\n   * The transaction's the address is sent to.\n   */\n  to?: PrefixedHexString;\n  /**\n   * The amount of Ether sent.\n   */\n  value?: PrefixedHexString | number;\n  /**\n   * This will contain the data of the message or the init of a contract.\n   */\n  data?: PrefixedHexString;\n  type?: PrefixedHexString | number;\n\n  chainId?: PrefixedHexString | number;\n\n  /**\n   * use for particle cancel or speed up transaction\n   */\n  action?: 'normal' | 'cancel' | 'speedup'; // use for particle cancel or speed up transaction\n  gasLevel?: 'custom' | 'low' | 'medium' | 'high'; // use for gas fee level\n}\n\n/**\n * {@link EIP1559TxData} data.\n */\nexport interface EIP1559TxData extends TxData {\n  /**\n   * The transaction's gas price. This property is not used for EIP1559\n   * transactions and should always be undefined for this specific transaction type.\n   */\n  gasPrice?: never;\n  /**\n   * The maximum inclusion fee per gas (this fee is given to the miner)\n   */\n  maxPriorityFeePerGas?: PrefixedHexString | number;\n  /**\n   * The maximum total fee\n   */\n  maxFeePerGas?: PrefixedHexString | number;\n}\n\nexport type EVMTransaction = {\n  nonce?: PrefixedHexString;\n  gasPrice?: PrefixedHexString;\n  gasLimit?: PrefixedHexString;\n  from: PrefixedHexString;\n  to?: PrefixedHexString;\n  value?: PrefixedHexString;\n  data?: PrefixedHexString;\n  type?: PrefixedHexString;\n  chainId?: PrefixedHexString;\n  maxPriorityFeePerGas?: PrefixedHexString;\n  maxFeePerGas?: PrefixedHexString;\n  action?: 'normal' | 'cancel' | 'speedup'; // use for particle cancel or speed up transaction\n  gasLevel?: GasFeeMode; // use for gas fee level\n};\n", "import type { OriginalUserInfo, UserInfo } from './apiData';\n\nexport * from './apiData';\nexport * from './rpcData';\n\nexport const mapToUserInfo = (originalUserInfo: OriginalUserInfo): UserInfo => {\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars, camelcase\n  const { mac_key, cognito_result, wallets, ...userInfo } = originalUserInfo;\n  return {\n    ...userInfo,\n    wallets: wallets.map((wallet) => {\n      // eslint-disable-next-line camelcase\n      const { uuid, chain_name, public_address } = wallet;\n      // eslint-disable-next-line camelcase\n      return { uuid, chain_name, public_address };\n    }),\n  };\n};\n", "export const check = <T>(condition: T, throwError?: unknown) => {\n  if (!condition) {\n    if (throwError) {\n      if (typeof throwError === 'string') {\n        throw new Error(throwError);\n      }\n      throw throwError;\n    } else {\n      throw new Error('Required conditions not met');\n    }\n  }\n};\n\nexport const requireNotNullish = <T>(x: T, throwError?: unknown): NonNullable<T> => {\n  if (x !== undefined && x !== null) {\n    return x;\n  }\n  if (throwError) {\n    if (typeof throwError === 'string') {\n      throw new Error(throwError);\n    } else {\n      throw throwError;\n    }\n  }\n  throw new Error('Param is null or undefined');\n};\n\nexport function isNullish(x: unknown): boolean {\n  return x === undefined || x === null;\n}\n", "export enum AuthCoreEvent {\n  RequestEthereumAccount = 'requestEthereumAccount', // request connect event\n  RequestSolanaAccount = 'requestSolanaAccount', // request connect event\n  ParticleAuthConnect = 'particleAuthConnect', // connect auth core succss event, emit before restore wallet\n  ParticleAuthDisconnect = 'particleAuthDisconnect', // disconnect event\n  UserInfoChanged = 'userInfoChanged', // disconnect event\n  MasterPasswordChanged = 'masterPasswordChanged', // master password changed event\n  ParticleWalletRestored = 'particleWalletRestored', // wallet restored event\n}\n", "export interface CloudflareOptions {\n  getContainer?: HTMLElement | (() => HTMLElement) | false;\n  theme?: 'light' | 'dark';\n  language?: string;\n}\n\nexport enum IframeEvent {\n  CloudflareToken = 'particle-auth-core-cloudflareToken',\n}\n", "export enum SolanaRpcMethod {\n  signTransaction = 'signTransaction',\n  signAndSendTransaction = 'signAndSendTransaction',\n  signMessage = 'signMessage',\n  signAllTransactions = 'signAllTransactions',\n}\n\nexport enum EvmRpcMethod {\n  /* unsupport methods start */\n  ethSignTransaction = 'eth_signTransaction',\n  ethSign = 'eth_sign',\n  walletWatchAsset = 'wallet_watchAsset', //EIP-747\n  /* unsupport methods end */\n\n  ethRequestAccounts = 'eth_requestAccounts', //EIP-1102\n  ethAccounts = 'eth_accounts',\n  ethChainId = 'eth_chainId',\n  ethSendTransaction = 'eth_sendTransaction',\n  ethSignTypedData = 'eth_signTypedData',\n  ethSignTypedDataV1 = 'eth_signTypedData_v1',\n  ethSignTypedDataV3 = 'eth_signTypedData_v3',\n  ethSignTypedDataV4 = 'eth_signTypedData_v4',\n  personalSign = 'personal_sign',\n\n  ethSignTypedDataV4Uniq = 'eth_signTypedData_v4_uniq', //particle mpc signature uniq\n  personalSignUniq = 'personal_sign_uniq', //particle mpc signature uniq\n\n  walletSwitchEthereumChain = 'wallet_switchEthereumChain', //EIP-3326\n  walletAddEthereumChain = 'wallet_addEthereumChain', //EIP-3085\n}\n", "export enum WalletType {\n  EVM = 'evm_chain',\n  Solana = 'solana',\n}\n\nexport type ERC4337Options = {\n  name: string;\n  version: string;\n};\n", "export type { MessageTypes, TypedDataV1, TypedMessage } from '@metamask/eth-sig-util';\nexport * from './authCoreEvent';\nexport * from './cloudflare';\nexport * from './connectParam';\nexport * from './eip1193';\nexport * from './rpcMethods';\nexport * from './wallet';\n\nexport enum SignTypedDataVersion {\n  V1 = 'V1',\n  V3 = 'V3',\n  V4 = 'V4',\n}\n", "import { BI, type SendActiveParams, type SendRecordsParams } from '@particle-network/analytics';\nimport globalConfig from '../config';\nimport { isServer } from '../utils';\n\ndeclare global {\n  interface Window {\n    __particleAnalytics?: BI;\n  }\n}\n\nconst getBI = () => {\n  try {\n    if (!window.__particleAnalytics) {\n      window.__particleAnalytics = new BI({\n        /* eslint-disable camelcase */\n        sdk_api_domain: globalConfig.env.baseUrl,\n        device_id: globalConfig.deviceId,\n        sdk_version: globalConfig.version,\n        project_config: {\n          project_uuid: globalConfig.authOptions.projectId,\n          project_key: globalConfig.authOptions.clientKey,\n          project_app_uuid: globalConfig.authOptions.appId,\n        },\n        /* eslint-enable camelcase */\n      });\n    }\n  } catch (error) {\n    console.log('getBI', error);\n  }\n  return window.__particleAnalytics;\n};\n\nexport const analyticsRecord = (params: SendRecordsParams) => {\n  if (!isServer()) {\n    getBI()?.records(params);\n  }\n};\n\nexport const analyticsActive = (params: SendActiveParams) => {\n  if (!isServer()) {\n    getBI()?.active(params);\n  }\n};\n", "import { v4 as uuid } from 'uuid';\nimport { encryptedStorage } from '../storage';\nimport { isServer } from '../utils';\nimport { check } from '../utils/validate';\nimport type { AuthOptions } from './../core/authCore';\n\ntype Env = {\n  basicUsername: string;\n  basicPassword: string;\n  baseUrl: string;\n  rpcUrl: string;\n  authCore: string;\n};\n\nclass GlobalConfig {\n  #authOptions: AuthOptions | undefined;\n\n  initialized = false;\n\n  paymentToken: string | undefined; // use for sign when user has payment password.\n\n  #devEnv: Env = {\n    basicUsername: 'test_user',\n    basicPassword: 'test_pass',\n    baseUrl: 'https://api-debug.particle.network',\n    rpcUrl: 'https://rpc-debug.particle.network',\n    authCore: 'https://core-debug.particle.network',\n  };\n\n  #stagingEnv: Env = {\n    basicUsername: 'PcJBtrqq69TDpQtY',\n    basicPassword: 'oGjPXSgKP9QtmxWQUkrfrUvvmsG62t',\n    baseUrl: 'https://api.particle.network',\n    rpcUrl: 'https://rpc.particle.network',\n    authCore: 'https://core.particle.network',\n  };\n\n  #productionEnv: Env = {\n    basicUsername: 'PcJBtrqq69TDpQtY',\n    basicPassword: 'oGjPXSgKP9QtmxWQUkrfrUvvmsG62t',\n    baseUrl: 'https://api.particle.network',\n    rpcUrl: 'https://rpc.particle.network',\n    authCore: 'https://core.particle.network',\n  };\n\n  init(authOptions: AuthOptions) {\n    this.#authOptions = authOptions;\n    this.initialized = true;\n  }\n\n  get authOptions(): AuthOptions {\n    check(this.#authOptions, 'Please init AuthCore first!');\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    return this.#authOptions!;\n  }\n\n  get version() {\n    // replace when build\n    return 'web_' + '3.0.0-alpha.3';\n  }\n\n  get deviceId() {\n    if (typeof window === 'undefined') {\n      return uuid();\n    } else {\n      const storeKey = 'pn_device_id';\n      let deviceId = encryptedStorage.getItem(storeKey);\n      if (!deviceId) {\n        deviceId = uuid();\n        encryptedStorage.setItem(storeKey, deviceId);\n      }\n      return deviceId;\n    }\n  }\n\n  get env() {\n    if (!isServer() && window.__PARTICLE_ENVIRONMENT__ === 'development') {\n      return this.#devEnv;\n    } else if (!isServer() && window.__PARTICLE_ENVIRONMENT__ === 'staging') {\n      return this.#stagingEnv;\n    } else {\n      return this.#productionEnv;\n    }\n  }\n}\n\nconst globalConfig = new GlobalConfig();\nexport default globalConfig;\n", "import aes from 'crypto-js/aes.js';\nimport utf8 from 'crypto-js/enc-utf8.js';\nimport md5 from 'crypto-js/md5.js';\nimport { isServer } from '../utils';\nimport { check } from '../utils/validate';\n/**\n * auth core data storage, default use localStorage\n */\nclass EncryptedStorage {\n  #KEY_PREFIX = 'particle-auth-core/';\n\n  #appId = '';\n\n  #secretKey = '';\n\n  #wrapKey(key: string): string {\n    check(this.#appId, 'please init AuthCore first!');\n\n    return md5(`${this.#appId}/${key}`).toString().toLowerCase();\n  }\n\n  #encrypt(plaintext: string): string {\n    check(this.#secretKey, 'please init AuthCore first!');\n\n    const ciphertext = aes.encrypt(plaintext, this.#secretKey).toString();\n    return ciphertext;\n  }\n\n  #decrypt(ciphertext: string): string {\n    check(this.#secretKey, 'please init AuthCore first!');\n\n    const bytes = aes.decrypt(ciphertext, this.#secretKey);\n    const plaintext = bytes.toString(utf8);\n    return plaintext;\n  }\n\n  init(appId: string) {\n    this.#appId = appId;\n\n    let hostname = 'particle.network';\n    if (typeof window !== 'undefined') {\n      hostname = window.location.origin;\n    }\n    this.#secretKey = md5(`${hostname}/${this.#appId}`).toString().toLowerCase();\n  }\n\n  clear(): void {\n    const removeKeys: string[] = [];\n    const length = localStorage.length;\n    for (let i = 0; i < length; i++) {\n      const key = localStorage.key(i);\n      if (key?.startsWith(this.#KEY_PREFIX)) {\n        removeKeys.push(key);\n      }\n    }\n    removeKeys.forEach((key) => localStorage.removeItem(key));\n  }\n\n  getItem(key: string): string | null {\n    if (typeof window === 'undefined') {\n      return null;\n    }\n    const value = localStorage.getItem(this.getStorageKey(key));\n    if (value != null && value.length > 0) {\n      return this.#decrypt(value);\n    }\n    return value;\n  }\n\n  removeItem(key: string) {\n    localStorage.removeItem(this.getStorageKey(key));\n  }\n\n  setItem(key: string, value: string) {\n    if (isServer()) {\n      return;\n    }\n    let cipherValue = value;\n    if (value.length > 0) {\n      cipherValue = this.#encrypt(value);\n    }\n    localStorage.setItem(this.getStorageKey(key), cipherValue);\n  }\n\n  getStorageKey(key: string): string {\n    return this.#KEY_PREFIX + this.#wrapKey(key);\n  }\n}\nconst encryptedStorage = new EncryptedStorage();\n\nexport default encryptedStorage;\n", "export const isServer = () => typeof window === 'undefined';\n", "import EventEmitter from 'events';\n\nconst events = new EventEmitter();\nevents.setMaxListeners(500);\n\nexport default events;\n", "import type { AuthType } from '../api/authType';\nimport { mapToUserInfo } from '../api/types';\nimport { AuthCoreEvent } from '../types';\nimport { WalletType } from '../types/wallet';\nimport events from '../utils/eventUtils';\nimport type { CognitoResult, OriginalUserInfo, SecurityAccount, WalletInfo } from './../api/types/apiData';\nimport storage from './encryptedStorage';\n\nconst userStorage = {\n  setUserInfo(info: OriginalUserInfo | undefined) {\n    const localUserInfo = this.getUserInfo();\n    if (info) {\n      storage.setItem('user_info', JSON.stringify(info));\n    } else {\n      storage.removeItem('user_info');\n    }\n    if (JSON.stringify(localUserInfo) !== JSON.stringify(info)) {\n      events.emit(AuthCoreEvent.UserInfoChanged, info ? mapToUserInfo(info) : undefined);\n    }\n  },\n\n  getUserInfo(): OriginalUserInfo | undefined {\n    const info = storage.getItem('user_info');\n    if (info) {\n      return JSON.parse(info);\n    }\n    return undefined;\n  },\n\n  isLogin(): boolean {\n    return Boolean(this.getUserInfo());\n  },\n\n  getUserToken(): string | undefined {\n    const info = this.getUserInfo();\n    if (info) {\n      return info.token;\n    }\n    return undefined;\n  },\n\n  getCognitoResult(): CognitoResult | undefined {\n    const info = this.getUserInfo();\n    if (info) {\n      return info.cognito_result;\n    }\n    return undefined;\n  },\n\n  getSecurityAccount(): SecurityAccount | undefined {\n    const info = this.getUserInfo();\n    if (info) {\n      return info.security_account;\n    }\n    return undefined;\n  },\n\n  setLatestAuthType(authType: string | AuthType) {\n    localStorage.setItem('particle-auth/latest-auth-type', authType === 'twitterv1' ? 'twitter' : authType);\n  },\n\n  getLatestAuthType(): AuthType | null {\n    if (typeof window !== 'undefined') {\n      const type = localStorage.getItem('particle-auth/latest-auth-type');\n      return type as AuthType;\n    }\n    return null;\n  },\n\n  updateWallet(info: WalletInfo) {\n    const userInfo = this.getUserInfo();\n    if (userInfo) {\n      for (let i = 0; i < userInfo.wallets.length; i++) {\n        if (userInfo.wallets[i].uuid === info.uuid) {\n          userInfo.wallets[i] = info;\n          this.setUserInfo(userInfo);\n          break;\n        }\n      }\n    }\n  },\n\n  updateCognitoResult(result: CognitoResult) {\n    const userInfo = this.getUserInfo();\n    if (userInfo) {\n      // eslint-disable-next-line camelcase\n      userInfo.cognito_result = result;\n      this.setUserInfo(userInfo);\n    }\n  },\n\n  updateSecurityAccount(account: SecurityAccount) {\n    const userInfo = this.getUserInfo();\n    if (userInfo) {\n      // eslint-disable-next-line camelcase\n      userInfo.security_account = account;\n      this.setUserInfo(userInfo);\n    }\n  },\n\n  hasPaymentPassword(): boolean {\n    return Boolean(this.getSecurityAccount()?.has_set_payment_password);\n  },\n\n  hasMasterPassword(): boolean {\n    return Boolean(this.getSecurityAccount()?.has_set_master_password);\n  },\n\n  getEVMWallet(): WalletInfo | undefined {\n    const userInfo = this.getUserInfo();\n    return userInfo?.wallets.find((wallet) => wallet.chain_name === WalletType.EVM);\n  },\n\n  getSolanaWallet(): WalletInfo | undefined {\n    const userInfo = this.getUserInfo();\n    return userInfo?.wallets.find((wallet) => wallet.chain_name === WalletType.Solana);\n  },\n};\n\nexport default userStorage;\n", "import encryptedStorage from './encryptedStorage';\nimport userStorage from './userStorage';\n\nenum PreferenceKey {\n  LocalKey = 'local_key',\n  EvmChainId = 'evm_chain_id',\n  SolanaChainId = 'solana_chain_id',\n}\nexport { PreferenceKey, encryptedStorage, userStorage };\n\nexport const getCurrentEvmChainId = () => {\n  return Number(encryptedStorage.getItem(PreferenceKey.EvmChainId));\n};\n\nexport const setCurrentEvmChainId = (id: number) => {\n  encryptedStorage.setItem(PreferenceKey.EvmChainId, id.toString());\n};\n\nexport const getCurrentSolanaChainId = () => {\n  return Number(encryptedStorage.getItem(PreferenceKey.SolanaChainId));\n};\n\nexport const setCurrentSolanaChainId = (id: number) => {\n  encryptedStorage.setItem(PreferenceKey.SolanaChainId, id.toString());\n};\n", "import hex from 'crypto-js/enc-hex.js';\nimport sha256Hex from 'crypto-js/sha256.js';\nimport { decode58, encode58 } from './base58';\n\nconst sha256 = (msg: string) => hex.stringify(sha256Hex(hex.parse(msg)));\n\nexport const fromHex = (hex: string): string => {\n  const addr = `41${hex.substring(2)}`;\n  const doubleSha256 = sha256(sha256(addr));\n  const checkSum = doubleSha256.substring(0, 8);\n  const address = Buffer.from(addr + checkSum, 'hex');\n\n  return encode58(address);\n};\n\nexport const toHex = (base58Sting: string): string => {\n  if (base58Sting.length <= 4) throw new Error('Invalid address provided');\n\n  let address = Buffer.from(decode58(base58Sting)).toString('hex');\n\n  const checkSum = address.substring(address.length - 8, address.length);\n  address = address.substring(0, address.length - 8);\n\n  const checkSum1 = sha256(sha256(address)).substring(0, 8);\n\n  if (`${checkSum}` === `${checkSum1}`) return `0x${address.substring(2)}`;\n\n  throw new Error('Invalid address provided');\n};\n", "const ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\nconst ALPHABET_MAP = ALPHABET.split('').reduce((acc: { [k: string]: number }, x, i) => {\n  acc[x] = i;\n  return acc;\n}, {});\n\nconst BASE = 58;\n\nexport const encode58 = (buffer: Buffer): string => {\n  if (buffer.length === 0) return '';\n\n  const digits = [0];\n\n  for (let i = 0; i < buffer.length; i++) {\n    for (let j = 0; j < digits.length; j++) digits[j] <<= 8;\n\n    digits[0] += buffer[i];\n    let carry = 0;\n\n    for (let j = 0; j < digits.length; ++j) {\n      digits[j] += carry;\n      carry = (digits[j] / BASE) | 0;\n      digits[j] %= BASE;\n    }\n\n    while (carry) {\n      digits.push(carry % BASE);\n      carry = (carry / BASE) | 0;\n    }\n  }\n\n  for (let i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0);\n\n  return [...digits]\n    .reverse()\n    .map((digit) => ALPHABET[digit])\n    .join('');\n};\n\nexport const decode58 = (data: string): number[] => {\n  if (data.length === 0) return [];\n\n  const bytes = [0];\n\n  for (let i = 0; i < data.length; i++) {\n    const c = data[i];\n\n    if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character');\n\n    for (let j = 0; j < bytes.length; j++) bytes[j] *= BASE;\n\n    bytes[0] += ALPHABET_MAP[c];\n    let carry = 0;\n\n    for (let j = 0; j < bytes.length; ++j) {\n      bytes[j] += carry;\n      carry = bytes[j] >> 8;\n      bytes[j] &= 0xff;\n    }\n\n    while (carry) {\n      bytes.push(carry & 0xff);\n      carry >>= 8;\n    }\n  }\n\n  for (let i = 0; data[i] === '1' && i < data.length - 1; i++) bytes.push(0);\n\n  return bytes.reverse();\n};\n", "import type { Chain as ViemChain } from 'viem';\nimport { defineChain } from 'viem';\nimport type { EIP1559TxData, TxData } from '../api/types';\nimport { fromHex as tronAddressFromHex, toHex as tronAddressToHex } from './tron/crypto';\n\nexport const defaultTokenIcon = 'https://static.particle.network/token-list/defaultToken/default.png';\n\nexport const solana = defineChain({\n  id: 101,\n  name: 'Solana',\n  nativeCurrency: {\n    decimals: 9,\n    name: 'Solana SOL',\n    symbol: 'SOL',\n  },\n  rpcUrls: {\n    default: {\n      http: ['https://api.mainnet-beta.solana.com'],\n    },\n  },\n  blockExplorers: {\n    default: { name: 'Explorer', url: 'https://solscan.io' },\n  },\n  custom: {\n    chainType: 'solana',\n  },\n});\n\nexport type Chain = {\n  id: number;\n  name: string;\n};\n\nlet _getChains: () => readonly ViemChain[] = () => [];\n\nexport function setChainProvider(fn: () => readonly ViemChain[]) {\n  _getChains = fn;\n}\n\nexport function isTron(chain: string | number | Chain): boolean {\n  let chainInfo;\n  if (typeof chain === 'string' || typeof chain === 'number') {\n    chainInfo = getEVMChainInfoById(Number(chain));\n  } else {\n    chainInfo = getEVMChainInfoById(chain.id);\n  }\n  return chainInfo !== undefined && chainInfo.name.toLowerCase() === 'tron';\n}\n\nexport { tronAddressFromHex, tronAddressToHex };\n\nexport function getChainInfo(chain: Chain): ViemChain | undefined {\n  const { id } = chain;\n  return _getChains().find((c: ViemChain) => c.id === id);\n}\n\nexport const getChainType = (chain: ViemChain): 'evm' | 'solana' => {\n  return (chain?.custom?.chainType as unknown as 'evm' | 'solana') || 'evm';\n};\n\nexport const getEvmChains = () => {\n  return _getChains().filter((c: ViemChain) => getChainType(c) === 'evm');\n};\n\nexport const getSolanaChains = () => {\n  return _getChains().filter((c: ViemChain) => getChainType(c) === 'solana');\n};\n\nexport const getEVMChainInfoById = (id: number) => {\n  return getEvmChains()?.find((c: ViemChain) => c.id === id);\n};\n\nexport const getChainIcon = (chain: ViemChain | Chain): string => {\n  if (chain && typeof chain !== 'number' && typeof (chain as ViemChain)?.custom?.icon === 'string') {\n    return (chain as ViemChain).custom?.icon as string;\n  }\n  const chainId = typeof chain === 'number' ? chain : chain.id;\n  if (isSolanaChain(chainId)) {\n    return `https://static.particle.network/chains/solana/icons/${chainId}.png`;\n  }\n  return `https://static.particle.network/chains/evm/icons/${chainId}.png`;\n};\n\nexport const isChainSupportEIP1559 = (data: TxData | EIP1559TxData) => {\n  if ('maxFeePerGas' in data || 'maxPriorityFeePerGas' in data) {\n    return true;\n  }\n  return false;\n};\n\nexport const getSolanaChainInfoById = (id: number) => {\n  return getSolanaChains()?.find((c: ViemChain) => c.id === id);\n};\n\nexport const isSolanaChain = (chain: Chain | number) => {\n  const id = typeof chain === 'number' ? chain : chain.id;\n  return id === 101 || id === 102 || id === 103;\n};\n", "import { EvmRpcMethod, SignTypedDataVersion } from '../types';\n\nexport const ethereumUtils = {\n  getSignTypedVersion(method: string): SignTypedDataVersion {\n    if (method === EvmRpcMethod.ethSignTypedData || method === EvmRpcMethod.ethSignTypedDataV1) {\n      return SignTypedDataVersion.V1;\n    } else if (method === EvmRpcMethod.ethSignTypedDataV3) {\n      return SignTypedDataVersion.V3;\n    } else {\n      return SignTypedDataVersion.V4;\n    }\n  },\n\n  isUniq(method: string): boolean {\n    return method === EvmRpcMethod.personalSignUniq || method === EvmRpcMethod.ethSignTypedDataV4Uniq;\n  },\n\n  isSignTypedDataV1(method: string): boolean {\n    return method === EvmRpcMethod.ethSignTypedDataV1 || method === EvmRpcMethod.ethSignTypedData;\n  },\n};\n", "import base64url from 'base64url';\nimport type { LoginWithSocial, SocialAuthType } from '../api/authType';\nimport { AuthType } from '../api/authType';\nimport pnApi from '../api/pnApi';\nimport {\n  mapToUserInfo,\n  type CaptchaRequest,\n  type LoginRequest,\n  type OriginalUserInfo,\n  type UserInfo,\n} from '../api/types';\nimport globalConfig from '../config';\nimport { encryptedStorage, userStorage } from '../storage';\nimport type { CloudflareOptions, ERC4337Options } from '../types';\nimport { AuthCoreEvent } from '../types/authCoreEvent';\nimport { type ConnectParam } from '../types/connectParam';\nimport { WalletType } from '../types/wallet';\nimport { getChainType } from '../utils/chainUtils';\nimport events from '../utils/eventUtils';\nimport { check, requireNotNullish } from '../utils/validate';\nimport { particleAuth } from './authCore';\nimport { clearLocalKey } from './masterPassword';\nimport wallet from './wallet';\n\n/**\n *  get cloudflare turnstile response\n */\nexport const getCloudflareTurnstileResponse = async (options?: CloudflareOptions): Promise<string> => {\n  const iframe = document.createElement('iframe');\n  const theme = 'light';\n  const language = options?.language || 'en';\n  iframe.src = `${globalConfig.env.authCore}/cloudflare.html?language=${language}&theme=${theme}&_=0.1.1`;\n\n  iframe.classList.add('particle-cloudflare-iframe');\n\n  const style: Record<string, string> = {\n    position: 'absolute',\n    zIndex: '999',\n    display: 'flex',\n    justifyContent: 'center',\n    alignItems: 'center',\n    border: 'none',\n    background: 'none',\n    width: '300px',\n    height: '65px',\n    left: '50%',\n    top: '50%',\n    transform: 'translate(-50%, -50%)',\n    colorScheme: 'none',\n  };\n\n  for (const key in style) {\n    iframe.style[key as any] = style[key];\n  }\n\n  const container = options?.getContainer\n    ? typeof options.getContainer === 'function'\n      ? options.getContainer()\n      : options.getContainer\n    : document.body;\n\n  container.appendChild(iframe);\n\n  return new Promise((resolve, reject) => {\n    const listener = (event: MessageEvent) => {\n      if (event.data.type === 'particle-auth-core-cloudflareToken') {\n        window.removeEventListener('message', listener);\n        container.removeChild(iframe);\n        const token = event.data.token;\n        if (token) {\n          resolve(event.data.token);\n        } else {\n          reject('Validation failed');\n        }\n      }\n    };\n    window.addEventListener('message', listener);\n  });\n};\n\nexport const getSocialAuthUrl = async (parms: LoginWithSocial) => {\n  const { authType, appState, prompt } = parms;\n  let { redirectUrl } = parms;\n\n  if (!redirectUrl) {\n    redirectUrl = window.location.href;\n  }\n\n  const { auth_url: thirdpartyAuthUrl, state } = await pnApi.getThirdpartyAuthUrl(\n    authType as SocialAuthType,\n    redirectUrl,\n    appState,\n    prompt\n  );\n\n  if (authType === 'twitter') {\n    const dataStr = JSON.stringify({\n      authType,\n      redirectUrl,\n      thirdpartyAuthUrl,\n      state,\n    });\n    const data = base64url(dataStr);\n    return `${globalConfig.env.authCore}/oauth.html?data=${data}`;\n  }\n\n  return thirdpartyAuthUrl;\n};\n\n/**\n * Third-Party Authentication Initiator\n * This function facilitates third-party authentication by obtaining the authentication URL based on the specified social authentication type and redirecting the user's browser to the generated URL.\n * If no redirect URL is provided, the function defaults to the current window location.\n * @param parms\n */\nexport const thirdpartyAuth = async (parms: LoginWithSocial) => {\n  const url = await getSocialAuthUrl(parms);\n  sessionStorage.setItem('auth-core-oauth-start', 'true');\n  window.location.href = url;\n};\n\n/**\n * get connect phone / email captcha\n * @param param phone or email\n * @returns success(boolean)\n */\nexport const getConnectCaptcha = async (param: CaptchaRequest): Promise<boolean> => {\n  check(globalConfig.initialized, 'Please init AuthCore first!');\n  const result = await pnApi.sendCaptcha(param);\n  return result;\n};\n\n/**\n * connect to auth core, login or register\n * @param param phone or email or jwt or social\n * @returns user info\n */\nexport const connect = async (param: ConnectParam): Promise<UserInfo> => {\n  check(globalConfig.initialized, 'Please init AuthCore first!');\n  const chainInfo = param.chain;\n  if (chainInfo) {\n    check(\n      particleAuth.chains.find((chain) => chain.id === chainInfo.id && chain.name === chainInfo.name),\n      `The chain ${JSON.stringify(param.chain)} is not supported`\n    );\n    delete param.chain;\n  }\n\n  let userInfo: OriginalUserInfo;\n  let latestAuthType: AuthType;\n  if ('phone' in param && 'code' in param && param.phone && param.code) {\n    // connect with phone\n    userInfo = await pnApi.login(param as LoginRequest);\n    latestAuthType = AuthType.phone;\n  } else if ('email' in param && 'code' in param && param.email && param.code) {\n    // connect with phone\n    userInfo = await pnApi.login(param as LoginRequest);\n    latestAuthType = AuthType.email;\n  } else if ('provider' in param && param.provider && 'thirdpartyCode' in param && param.thirdpartyCode) {\n    // connect with provider\n    userInfo = await pnApi.loginWithThirdparty({ provider: param.provider, thirdpartyCode: param.thirdpartyCode });\n    latestAuthType = param.provider as AuthType;\n  } else if (\n    'socialType' in param &&\n    param.socialType &&\n    'code' in param &&\n    param.code &&\n    'nonce' in param &&\n    param.nonce\n  ) {\n    // connect with social\n    userInfo = await pnApi.loginWithThirdpartyV2(param.socialType, param.code, param.nonce);\n    latestAuthType = param.socialType as AuthType;\n  } else {\n    throw new Error('invalid connect param');\n  }\n\n  //\u767B\u5F55\u65F6\u751F\u6210\u94B1\u5305\uFF0C\u5982\u679C\u4E4B\u524D\u8BBE\u7F6E\u8FC7\u4E3B\u5BC6\u7801\uFF0C\u6E05\u9664\u672C\u5730localKey\n  clearLocalKey();\n  userStorage.setUserInfo(userInfo);\n  try {\n    await wallet.gen(\n      chainInfo ? (getChainType(chainInfo) === 'evm' ? WalletType.EVM : WalletType.Solana) : WalletType.EVM\n    );\n  } catch (error) {\n    userStorage.setUserInfo(undefined);\n    throw error;\n  }\n  console.log('auth-core: connect success and save userInfo', userInfo);\n  // Save the authType of the last login\n  userStorage.setLatestAuthType(latestAuthType);\n\n  if (chainInfo) {\n    events.emit('connectWithChain', chainInfo);\n  }\n\n  const info = mapToUserInfo(userInfo);\n  onConnect(info, param);\n  return info;\n};\n\n/**\n * disconnect from auth core, remove all local data.\n */\nexport const disconnect = async () => {\n  try {\n    await pnApi.logout();\n  } catch (error) {\n    //ignore\n  }\n  encryptedStorage.clear();\n  onDisconnect();\n};\n\nconst onConnect = (userInfo: UserInfo, param: ConnectParam) => {\n  if ('socialType' in param && param.socialType && 'code' in param && param.code && 'nonce' in param && param.nonce) {\n    if (typeof window !== 'undefined') {\n      if ((window as any).particle?.ethereum) {\n        (window as any).particle.ethereum.isSocialConnecting = false;\n      }\n      if ((window as any).particle?.solana) {\n        (window as any).particle.solana.isSocialConnecting = false;\n      }\n      window.dispatchEvent(\n        new CustomEvent('particle:socialConnectCompleted', {\n          detail: Object.freeze(userInfo),\n        })\n      );\n    }\n  }\n\n  setTimeout(() => events.emit(AuthCoreEvent.ParticleAuthConnect, userInfo), 0);\n};\n\nconst onDisconnect = () => {\n  setTimeout(() => events.emit(AuthCoreEvent.ParticleAuthDisconnect), 0);\n};\n\n/**\n * check if connected\n * @returns true is connected\n */\nexport const isConnected = (): boolean => {\n  return Boolean(getUserInfo());\n};\n\n/**\n * get user info from local storage, if not exist, return undefined\n * @returns user info\n */\nexport const getUserInfo = (): UserInfo | undefined => {\n  const originalUserInfo = userStorage.getUserInfo();\n  return originalUserInfo ? mapToUserInfo(originalUserInfo) : undefined;\n};\n\n/**\n * sync user info from server, if master password changed, will emit {@link AuthCoreEvent.MasterPasswordChanged} event\n * @returns user info\n */\nexport const syncUserInfo = async (): Promise<UserInfo> => {\n  const userInfo = userStorage.getUserInfo();\n  if (!userInfo) {\n    throw new Error('Please connect first!');\n  }\n  const result = await pnApi.syncUserInfo();\n  const masterPasswordChange = result.wallets.some((wallet) => {\n    const localWallet = userInfo.wallets.find((item) => item.uuid == wallet.uuid);\n    return !localWallet || localWallet.encrypted_data !== wallet.encrypted_data;\n  });\n  if (masterPasswordChange) {\n    console.log('master password changed');\n    clearLocalKey();\n    setTimeout(() => events.emit(AuthCoreEvent.MasterPasswordChanged), 0);\n  }\n\n  const newUserInfo = { ...userInfo, ...result };\n  userStorage.setUserInfo(newUserInfo);\n  return mapToUserInfo(newUserInfo);\n};\n\n/**\n * get latest auth type, if not exist, return null\n * @returns AuthType\n */\nexport const getLatestAuthType = (): AuthType | null => {\n  return userStorage.getLatestAuthType();\n};\n\n/**\n * get smart account address\n * @param options version, name, chainId\n * @returns\n */\nexport const getSmartAccountAddress = async (options: ERC4337Options) => {\n  check(isConnected(), 'Please connect first!');\n  const ownerAddress = requireNotNullish(particleAuth.ethereum.selectedAddress, 'Please create wallet first!');\n\n  const { version, name } = options;\n  const localKey = `auth_core_erc4337_${name}_${version}_${ownerAddress}`;\n  const localAAAddress = localStorage.getItem(localKey);\n  if (localAAAddress) {\n    return localAAAddress;\n  }\n  const accounts = await particleAuth.ethereum.request({\n    method: 'particle_aa_getSmartAccount',\n    params: [{ version, name, ownerAddress }],\n  });\n  const smartAccountAddress = accounts[0].smartAccountAddress;\n  localStorage.setItem(localKey, smartAccountAddress);\n  return smartAccountAddress;\n};\n", "/* eslint-disable camelcase */\nimport axios from 'axios';\nimport sha256 from 'crypto-js/sha256.js';\nimport stringify from 'fast-json-stable-stringify';\nimport { v4 as uuid } from 'uuid';\nimport globalConfig from '../config';\nimport { encryptedStorage, userStorage } from '../storage';\nimport { AuthCoreEvent } from '../types';\nimport events from '../utils/eventUtils';\nimport { ApiError, isApiError, isRpcError } from './apiError';\n\n// Set config defaults when creating the instance\nconst client = axios.create({\n  baseURL: globalConfig.env.baseUrl,\n  timeout: 60000,\n  validateStatus: function (status) {\n    return status >= 200 && status <= 500;\n  },\n  withCredentials: false,\n});\n\n// Add a request interceptor\nclient.interceptors.request.use((config) => {\n  const noneAuth = config.headers && config.headers['Auth-Type'] === 'None';\n  if (noneAuth) {\n    return config;\n  }\n  let macKey = '';\n  const basicAuth = config.headers && config.headers['Auth-Type'] === 'Basic';\n  if (basicAuth) {\n    if (!isChainRpcRequest(config.baseURL)) {\n      if (config.baseURL !== globalConfig.env.baseUrl) {\n        config.baseURL = globalConfig.env.baseUrl;\n      }\n      const auth = {\n        username: globalConfig.env.basicUsername,\n        password: globalConfig.env.basicPassword,\n      };\n      macKey = sha256(auth.username + auth.password)\n        .toString()\n        .toLowerCase();\n      config.auth = auth;\n    }\n  } else {\n    //token auth\n    const userInfo = userStorage.getUserInfo();\n    if (!userInfo) {\n      throw new Error('Please connect AuthCore first!');\n    }\n    const token = userInfo.token;\n    macKey = userInfo.mac_key;\n    config.headers.Authorization = `Bearer ${token}`;\n    if (config.baseURL !== globalConfig.env.baseUrl) {\n      config.baseURL = globalConfig.env.baseUrl;\n    }\n  }\n\n  if (!config.params) {\n    config.params = {};\n  }\n\n  if (isChainRpcRequest(config.baseURL)) {\n    config.params = {\n      ...config.params,\n      chainId: config.data?.chainId || 1, // default chainId is 1 (Ethereum Mainnet)\n      projectUuid: globalConfig.authOptions.projectId,\n      projectKey: globalConfig.authOptions.clientKey,\n      method: config.data?.method,\n    };\n    delete config.data.chainId;\n  } else {\n    const timestamp: number = Math.round(new Date().getTime() / 1000);\n    const randomStr: string = uuid();\n    config.params = {\n      ...config.params,\n      timestamp,\n      random_str: randomStr,\n      device_id: globalConfig.deviceId,\n      sdk_version: globalConfig.version,\n      project_uuid: globalConfig.authOptions.projectId,\n      project_client_key: globalConfig.authOptions.clientKey,\n      project_app_uuid: globalConfig.authOptions.appId,\n    };\n\n    const merged = { ...config.params };\n    if (config.data) {\n      Object.assign(merged, { ...config.data });\n    }\n    merged['mac_key'] = macKey;\n    const mac = stringify(merged);\n    config.params.mac = sha256(mac).toString().toLowerCase();\n  }\n\n  return config;\n});\n\nclient.interceptors.response.use((response) => {\n  const data = response.data;\n  if (response.status < 300 || response.status === 304) {\n    if (isApiError(data)) {\n      if (data.error_code === ApiError.InvalidToken) {\n        // token invalid, clear user info\n        encryptedStorage.clear();\n        setTimeout(() => events.emit(AuthCoreEvent.ParticleAuthDisconnect, data), 0);\n      }\n      return Promise.reject(data);\n    } else if (data.error && isRpcError(data.error)) {\n      return Promise.reject(data.error);\n    }\n    return Promise.resolve(response);\n  }\n\n  console.log('http response error', response);\n  // http error, reject it.\n  return Promise.reject({\n    code: response.status,\n    message: response.statusText || 'Network Error',\n    data: response.data,\n  });\n});\n\nconst isChainRpcRequest = (baseUrl?: string) => {\n  return baseUrl?.includes('rpc');\n};\n\nexport default client;\n", "import { userStorage } from '../storage';\nimport type { AuthType, SocialAuthType } from './authType';\nimport client from './client';\nimport type {\n  CaptchaRequest,\n  CognitoResult,\n  DeviceInfo,\n  LoginAccount,\n  LoginBindRequest,\n  LoginBindThirdpartyRequest,\n  LoginRequest,\n  OriginalUserInfo,\n  SecurityAccount,\n  ThirdpartyAuthUrlResult,\n  UserInfoSync,\n  UserWalletRequestParam,\n} from './types';\n\nconst pnApi = {\n  /**\n   * send auth code\n   * @param data phone or email\n   */\n  async sendCaptcha(data: CaptchaRequest): Promise<boolean> {\n    const response = await client.post('/code', data, {\n      headers: {\n        'Auth-Type': 'Basic',\n      },\n    });\n    return response.data.success;\n  },\n\n  /**\n   * login\n   * @param data\n   */\n  async login(data: LoginRequest): Promise<OriginalUserInfo> {\n    const response = await client.post('/login', data, {\n      headers: {\n        'Auth-Type': 'Basic',\n      },\n    });\n    const userInfo = response.data;\n    return userInfo;\n  },\n\n  // \u4E09\u65B9\u8D26\u53F7\u6388\u6743\u767B\u5F55\n  async loginWithThirdparty({\n    provider,\n    thirdpartyCode,\n  }: {\n    provider: string;\n    thirdpartyCode: string;\n  }): Promise<OriginalUserInfo> {\n    const response = await client.post(\n      '/login_thirdparty',\n      {\n        provider,\n        thirdparty_code: thirdpartyCode, // eslint-disable-line camelcase\n      },\n      {\n        headers: {\n          'Auth-Type': 'Basic',\n        },\n      }\n    );\n    const userInfo = response.data;\n    return userInfo;\n  },\n  /**\n   * \u4E09\u65B9\u8D26\u53F7\u6388\u6743\u767B\u5F55\n   * @param provider\n   * @param code\n   * @param nonce\n   * @returns\n   */\n  async loginWithThirdpartyV2(provider: SocialAuthType, code: string, nonce: string): Promise<OriginalUserInfo> {\n    const response = await client.post(\n      '/login_thirdparty_v2',\n      {\n        provider,\n        thirdparty_code: code, // eslint-disable-line camelcase\n        nonce,\n      },\n      {\n        headers: {\n          'Auth-Type': 'Basic',\n        },\n      }\n    );\n    const userInfo = response.data;\n    return userInfo;\n  },\n  /**\n   * \u83B7\u53D6\u4E09\u65B9\u6388\u6743url\n   *\n   * @param provider\n   * @param redirectUrl\n   * @returns\n   */\n  async getThirdpartyAuthUrl(\n    provider: SocialAuthType,\n    redirectUrl: string,\n    appState?: string,\n    prompt?: 'none' | 'consent' | 'select_account'\n  ): Promise<ThirdpartyAuthUrlResult> {\n    const response = await client.post(\n      '/thirdparty_auth_url',\n      {\n        provider,\n        redirect_url: redirectUrl, // eslint-disable-line camelcase\n        app_state: appState, // eslint-disable-line camelcase\n        prompt,\n      },\n      {\n        headers: {\n          'Auth-Type': 'Basic',\n        },\n      }\n    );\n    const result: ThirdpartyAuthUrlResult = response.data;\n    return result;\n  },\n  /**\n   * \u767B\u5F55\u7ED1\u5B9Aemail/phone\n   */\n  async loginBindings(data: LoginBindRequest): Promise<OriginalUserInfo> {\n    const response = await client.post('/login_bindings', data);\n    return response.data;\n  },\n\n  // email/phone \u7ED1\u5B9A\u767B\u5F55\u8D26\u53F7\u524D\u68C0\u67E5\n  async loginBindingsCheck(params: { phone: string } | { email: string }): Promise<boolean> {\n    const response = await client.get('/login_bindings/check', {\n      params,\n    });\n    return response.data.exists;\n  },\n\n  // \u83B7\u53D6\u5DF2\u7ED1\u5B9A\u7684\u767B\u5F55\u8D26\u53F7\n  async getLoginBindings(): Promise<LoginAccount[]> {\n    const response = await client.get('/login_bindings');\n    return response.data;\n  },\n\n  // \u6682\u65F6\u53EA\u652F\u6301passkeys\u89E3\u7ED1\n  async deleteLoginBinding(params: { id_combined: string; security_account_verify_token: string }): Promise<boolean> {\n    const response = await client.delete('/login_bindings', {\n      params,\n    });\n    return response.data.success;\n  },\n\n  // \u767B\u5F55\u7ED1\u5B9A\u4E09\u65B9\u8D26\u53F7\n  async loginBindingsThirdparty(data: LoginBindThirdpartyRequest): Promise<OriginalUserInfo> {\n    const response = await client.post('/login_bindings/thirdparty', {\n      ...data,\n      provider: data.provider,\n    });\n    return response.data;\n  },\n\n  // twitter \u6388\u6743\u524D\u5148\u83B7\u53D6token\uFF0C\u518D\u8DF3\u8F6C\u6388\u6743\n  async getTwitterToken(): Promise<string> {\n    const response = await client.post('/twitter_request_token', undefined, {\n      headers: {\n        'Auth-Type': 'Basic',\n      },\n    });\n    return response.data.oauth_token;\n  },\n\n  // \u83B7\u53D6\u7528\u6237\u4FE1\u606F\n  async syncUserInfo(): Promise<UserInfoSync> {\n    const response = await client.get(`/users/${userStorage.getUserInfo()?.uuid}`);\n    return response.data;\n  },\n\n  // \u767B\u51FA\n  async logout(): Promise<boolean> {\n    const response = await client.post('/logout');\n    return response.data.success;\n  },\n\n  // \u66F4\u65B0\u7528\u6237wallet\n  async updateWallet(uuid: string, params: UserWalletRequestParam): Promise<boolean> {\n    const response = await client.patch(`/wallets/users/${uuid}`, params);\n    return response.data.success;\n  },\n\n  // \u91CD\u65B0\u83B7\u53D6cognito token\n  async loginCognito(): Promise<CognitoResult> {\n    const response = await client.post('/login_cognito');\n    const result = response.data;\n    userStorage.updateCognitoResult(result);\n    return result;\n  },\n\n  // \u7ED1\u5B9A\u5B89\u5168\u8D26\u53F7\u524D\u83B7\u53D6\u8BE5\u8D26\u53F7\u7684\u9A8C\u8BC1\u7801\n  async sendSecurityAccountsCode(data: CaptchaRequest): Promise<boolean> {\n    return client.post('/security/accounts/code', data).then((response) => response.data.success);\n  },\n\n  // \u7ED1\u5B9A\u5B89\u5168\u8D26\u53F7\n  async bindSecurityAccount(\n    params: { phone: string; code: string } | { email: string; code: string }\n  ): Promise<SecurityAccount> {\n    const response = await client.post('/security/accounts/bind', params);\n    const result = response.data;\n    return result;\n  },\n\n  // \u83B7\u53D6\u5DF2\u7ED1\u5B9A\u7684\u5B89\u5168\u8D26\u53F7\u9A8C\u8BC1\u7801\n  async getSecurityAccountCode(verifyCodeMethod: AuthType.email | AuthType.phone): Promise<boolean> {\n    return client\n      .post('/security/accounts/verify_code', {\n        // eslint-disable-next-line camelcase\n        verify_code_method: verifyCodeMethod,\n      })\n      .then((response) => response.data.success);\n  },\n\n  // \u83B7\u53D6\u5B89\u5168\u8D26\u53F7\u9A8C\u8BC1\u540E\u7684token, \u7ED1\u5B9A\u767B\u5F55\u8D26\u53F7\u65F6\u4F7F\u7528\n  async getSecurityAccountToken({\n    verifyCodeMethod,\n    code,\n  }: {\n    verifyCodeMethod: AuthType.email | AuthType.phone;\n    code: string;\n  }): Promise<string> {\n    return client\n      .post('/security/accounts/verify', {\n        // eslint-disable-next-line camelcase\n        verify_code_method: verifyCodeMethod,\n        code,\n      })\n      .then((response) => response.data.token);\n  },\n\n  // set payment password\n  async setPaymentPassword({\n    password,\n    verifyCodeMethod,\n    code,\n  }: {\n    password: string;\n    verifyCodeMethod: AuthType.email | AuthType.phone;\n    code: string;\n  }): Promise<SecurityAccount> {\n    const response = await client.post('/security/payments/reset', {\n      password,\n      // eslint-disable-next-line camelcase\n      verify_code_method: verifyCodeMethod,\n      code,\n    });\n    return response.data;\n  },\n\n  //Update payment password\n  async updatePaymentPassword({\n    password,\n    oldPassword,\n  }: {\n    password: string;\n    oldPassword: string;\n  }): Promise<SecurityAccount> {\n    const response = await client.post('/security/payments/update', {\n      password,\n      // eslint-disable-next-line camelcase\n      old_password: oldPassword,\n    });\n    return response.data;\n  },\n\n  // \u83B7\u53D6payment_token\u7528\u4E8E\u7B7E\u540D\n  async verifyPaymentPassword(password: string): Promise<string> {\n    return client.post('/security/payments/verify', { password }).then((response) => response.data.payment_token);\n  },\n\n  // \u5220\u9664payment password\n  async deletePaymentPassword(password: string): Promise<SecurityAccount> {\n    const response = await client.post('/security/payments/disable', { password });\n    return response.data;\n  },\n\n  // \u83B7\u53D6\u5DF2\u6388\u6743\u767B\u5F55\u7684dapp\n  async getAuthorizations(): Promise<DeviceInfo[]> {\n    return client.get('/authorizations').then((response) => {\n      return response.data;\n    });\n  },\n\n  // \u5220\u9664\u5DF2\u6388\u6743\u767B\u5F55\u7684dapp\n  async deleteAuthorization(projectAppUuid: string): Promise<boolean> {\n    return client.delete(`/authorizations/${projectAppUuid}`).then((response) => {\n      return response.data.success;\n    });\n  },\n};\n\nexport default pnApi;\n", "import type { Chain as ViemChain } from 'viem/chains';\nimport { mainnet } from 'viem/chains';\nimport globalConfig from '../config';\nimport { encryptedStorage } from '../storage';\nimport { type AuthCoreEvent } from '../types/authCoreEvent';\nimport { setChainProvider } from '../utils/chainUtils';\nimport events from '../utils/eventUtils';\nimport { check, requireNotNullish } from '../utils/validate';\nimport { EthereumProvider } from './ethereumProvider';\nimport { SolanaWallet } from './solanaWallet';\n\nexport type AuthOptions = {\n  projectId: string;\n  clientKey: string;\n  appId: string;\n  chains: readonly [ViemChain, ...ViemChain[]];\n};\n\ndeclare global {\n  interface Window {\n    particleAuth?: AuthCore;\n    __PARTICLE_ENVIRONMENT__?: string;\n  }\n}\n\nclass AuthCore {\n  static #authCore: AuthCore | undefined;\n\n  #ethereum: EthereumProvider | undefined;\n\n  #solana: SolanaWallet | undefined;\n\n  public static getInstance(): AuthCore {\n    if (!this.#authCore) {\n      this.#authCore = new AuthCore();\n    }\n    return this.#authCore;\n  }\n\n  private constructor() {\n    console.log('AuthCore Instance created');\n  }\n\n  chains: readonly [ViemChain, ...ViemChain[]] = [mainnet];\n\n  //eip1193 provider\n  get ethereum(): EthereumProvider {\n    const _ethereum = requireNotNullish(this.#ethereum, 'Please init AuthCore first!');\n    return _ethereum;\n  }\n\n  // solana wallet\n  get solana(): SolanaWallet {\n    const _solana = requireNotNullish(this.#solana, 'Please init AuthCore first!');\n    return _solana;\n  }\n\n  get version(): string {\n    return globalConfig.version;\n  }\n\n  /**\n   * init AuthCore\n   * @param options Particle Network project config, get it from: https://dashboard.particle.network/\n   * @param requestAuth optional, ethereum provider or solana wallet will request auth when not connected,\n   * you can pass a custom requestAuth function with your own UI.\n   */\n  init(options: AuthOptions) {\n    check(\n      options && options.projectId && options.clientKey && options.appId,\n      'Init AuthCore failed, please check project config!'\n    );\n    this.chains = options.chains;\n    setChainProvider(() => this.chains);\n\n    encryptedStorage.init(options.appId);\n    globalConfig.init(options);\n\n    if (!this.#ethereum) {\n      this.#ethereum = new EthereumProvider();\n    }\n\n    if (!this.#solana) {\n      this.#solana = new SolanaWallet();\n    }\n\n    if (typeof window !== 'undefined') {\n      window.particleAuth = this;\n    }\n\n    console.log('Auth Core initialized');\n  }\n\n  on(event: AuthCoreEvent, listener: (...args: any[]) => void): void {\n    events.on(event, listener);\n  }\n\n  once(event: AuthCoreEvent, listener: (...args: any[]) => void): void {\n    events.once(event, listener);\n  }\n\n  off(event: AuthCoreEvent, listener: (...args: any[]) => void): void {\n    events.off(event, listener);\n  }\n\n  removeListener(event: AuthCoreEvent, listener: (...args: any[]) => void): void {\n    events.removeListener(event, listener);\n  }\n}\n\nlet _particleAuth: AuthCore | undefined;\n\nexport const particleAuth = new Proxy({} as AuthCore, {\n  get(_target, prop, _receiver) {\n    if (!_particleAuth) {\n      _particleAuth = AuthCore.getInstance();\n    }\n    const value = Reflect.get(_particleAuth, prop, _particleAuth);\n    if (typeof value === 'function') {\n      return value.bind(_particleAuth);\n    }\n    return value;\n  },\n  set(_target, prop, value) {\n    if (!_particleAuth) {\n      _particleAuth = AuthCore.getInstance();\n    }\n    return Reflect.set(_particleAuth, prop, value, _particleAuth);\n  },\n});\n", "import { addHexPrefix, intToHex, isHexString, toBuffer } from '@ethereumjs/util';\nimport { concatSig } from '@metamask/eth-sig-util';\nimport { providerErrors, rpcErrors } from '@metamask/rpc-errors';\nimport EventEmitter from 'events';\nimport type { Chain as ViemChain } from 'viem';\nimport evmApi from '../api/evmApi';\nimport {\n  mapToUserInfo,\n  type EIP1559TxData,\n  type PrefixedHexString,\n  type RpcInput,\n  type TxData,\n  type UserInfo,\n} from '../api/types';\nimport globalConfig from '../config';\nimport { getCurrentEvmChainId, userStorage } from '../storage';\nimport type { ConnectParam, MessageTypes, TypedDataV1, TypedMessage } from '../types';\nimport { AuthCoreEvent, type SignTypedDataVersion } from '../types';\nimport { type EIP1193Provider } from '../types/eip1193';\nimport { EvmRpcMethod } from '../types/rpcMethods';\nimport { WalletType } from '../types/wallet';\nimport { getChainType, getEVMChainInfoById, isChainSupportEIP1559, isTron } from '../utils/chainUtils';\nimport { ethereumUtils } from '../utils/ethereumUtils';\nimport events from '../utils/eventUtils';\nimport { personalSignHash, signTypedDataHash } from '../utils/sigUtils';\nimport { isNullish } from '../utils/validate';\nimport { setCurrentEvmChainId } from './../storage/index';\nimport { analyticsActive } from './analyticsApi';\nimport { disconnect as logout } from './connectApi';\nimport threshSig from './threshSig';\nimport wallet from './wallet';\n\nexport class EthereumProvider implements EIP1193Provider {\n  #events = new EventEmitter();\n\n  readonly isParticleNetwork = true;\n\n  #chainId = 1;\n\n  constructor() {\n    this.#events.setMaxListeners(100);\n    const localChainId = getCurrentEvmChainId();\n    if (localChainId && getEVMChainInfoById(localChainId)) {\n      this.#chainId = localChainId;\n    } else {\n      setCurrentEvmChainId(this.#chainId);\n    }\n\n    events.on(AuthCoreEvent.ParticleAuthDisconnect, () => {\n      this.#events.emit('disconnect');\n    });\n    events.on(AuthCoreEvent.ParticleAuthConnect, () => {\n      if (this.selectedAddress) {\n        this.#events.emit('connect', { chainId: intToHex(this.#chainId) });\n        this.#events.emit('accountsChanged', [this.selectedAddress]);\n      }\n    });\n    events.on('connectWithChain', (chainInfo: ViemChain) => {\n      if (getChainType(chainInfo) === 'evm') {\n        this.#chainId = chainInfo.id;\n        setCurrentEvmChainId(this.#chainId);\n        this.#events.emit('chainChanged', intToHex(this.#chainId));\n      }\n    });\n  }\n\n  get selectedAddress(): string | null {\n    const address = userStorage.getEVMWallet()?.public_address;\n    return address ? address : null;\n  }\n\n  get chainId(): string {\n    return intToHex(this.#chainId);\n  }\n\n  isConnected(): boolean {\n    return !isNullish(this.selectedAddress);\n  }\n\n  on(event: string, listener: (...args: any[]) => void): this {\n    this.#events.on(event, listener);\n    return this;\n  }\n\n  once(event: string, listener: (...args: any[]) => void): this {\n    this.#events.once(event, listener);\n    return this;\n  }\n\n  off(event: string, listener: (...args: any[]) => void): this {\n    this.#events.off(event, listener);\n    return this;\n  }\n\n  removeListener(event: string, listener: (...args: any[]) => void): this {\n    this.#events.removeListener(event, listener);\n    return this;\n  }\n\n  /**\n   * @deprecated user `request` instead\n   */\n  async enable(): Promise<string[]> {\n    return this.request({\n      method: EvmRpcMethod.ethRequestAccounts,\n    });\n  }\n\n  async disconnect() {\n    await logout();\n  }\n\n  async connect(param?: ConnectParam): Promise<string[]> {\n    if (this.selectedAddress) {\n      return [this.selectedAddress];\n    } else {\n      if (userStorage.isLogin()) {\n        await this.#genWallet();\n        return [this.selectedAddress!];\n      } else {\n        await new Promise<UserInfo>((resolve, reject) => {\n          events.emit(AuthCoreEvent.RequestEthereumAccount, { resolve, reject, param });\n        });\n        if (!userStorage.isLogin()) {\n          throw providerErrors.unauthorized();\n        }\n\n        if (!this.selectedAddress) {\n          await this.#genWallet();\n        }\n\n        return [this.selectedAddress!];\n      }\n    }\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  async request(data: Partial<RpcInput>): Promise<any> {\n    const method = data.method;\n    if (!method) {\n      throw rpcErrors.invalidParams('Invalid parameters: method is required.');\n    }\n    if (Object.values(EvmRpcMethod).includes(method as EvmRpcMethod)) {\n      if (method === EvmRpcMethod.ethAccounts) {\n        if (this.selectedAddress) {\n          return [this.selectedAddress];\n        }\n        return [];\n      } else if (method === EvmRpcMethod.ethRequestAccounts) {\n        const result = await this.connect();\n        return result;\n      } else if (method === EvmRpcMethod.ethChainId) {\n        return this.chainId;\n      } else if (method.startsWith(EvmRpcMethod.ethSignTypedData)) {\n        this.#checkConnected();\n        /**\n         * v1: https://medium.com/metamask/scaling-web3-with-signtypeddata-91d6efc8b290\n         * v3: https://medium.com/metamask/eip712-is-coming-what-to-expect-and-how-to-use-it-bb92fd1a7a26\n         * v4: https://docs.metamask.io/wallet/reference/eth_signtypeddata_v4/\n         */\n        const isV1 = ethereumUtils.isSignTypedDataV1(method);\n        const from = isV1 ? data?.params?.[1] : data?.params?.[0];\n        let typedData = isV1 ? data?.params?.[0] : data?.params?.[1];\n        if (!from || typeof from !== 'string') {\n          throw rpcErrors.invalidParams('Invalid parameters: must provide an Ethereum address.');\n        }\n        if (!typedData) {\n          throw rpcErrors.invalidParams('Invalid parameters: must provide typed data.');\n        }\n        if (from.toLowerCase() !== this.selectedAddress?.toLowerCase()) {\n          throw providerErrors.unauthorized();\n        }\n        if (typeof typedData === 'string') {\n          typedData = JSON.parse(typedData);\n        }\n        const uniq = ethereumUtils.isUniq(method);\n        const version = ethereumUtils.getSignTypedVersion(method);\n        const result = await this.signTypedData({\n          data: typedData as any, // eslint-disable-line\n          version,\n          uniq,\n        });\n        return result;\n      } else if (method.startsWith(EvmRpcMethod.personalSign)) {\n        this.#checkConnected();\n        let message = data?.params?.[0];\n        const from = data?.params?.[1];\n        if (!message || typeof message !== 'string') {\n          throw rpcErrors.invalidParams('Invalid parameters: must provide a valid message.');\n        }\n        if (!from || typeof from !== 'string') {\n          throw rpcErrors.invalidParams('Invalid parameters: must provide an Ethereum address.');\n        }\n        if (from.toLowerCase() !== this.selectedAddress?.toLowerCase()) {\n          throw providerErrors.unauthorized();\n        }\n\n        if (!isHexString(message)) {\n          message = addHexPrefix(Buffer.from(message).toString('hex'));\n        }\n        const uniq = ethereumUtils.isUniq(method);\n        const result = await this.signMessage(message as PrefixedHexString, uniq);\n        return result;\n      } else if (method === EvmRpcMethod.walletSwitchEthereumChain) {\n        this.#checkConnected();\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        const chainId = Number((data?.params?.[0] as any)?.chainId);\n        if (chainId !== this.#chainId) {\n          return await this.switchChain(chainId);\n        }\n        return null;\n      } else if (method === EvmRpcMethod.ethSendTransaction) {\n        this.#checkConnected();\n        const txData = data.params?.[0] as any; // eslint-disable-line\n        if (!txData) {\n          throw rpcErrors.invalidParams('Invalid parameters: must provide an transaction data.');\n        }\n        const result = await this.sendTransaction(txData);\n        return result;\n      } else {\n        throw providerErrors.unsupportedMethod();\n      }\n    } else {\n      if (!data.chainId) {\n        data.chainId = this.#chainId;\n      }\n      let result;\n      try {\n        result = await evmApi.request(data);\n      } catch (error) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        const { code, message, extra } = error as any;\n        if (code && message) {\n          throw { code, message, data: extra };\n        } else {\n          throw error;\n        }\n      }\n      return result;\n    }\n  }\n\n  async sendTransaction(transaction: TxData | EIP1559TxData): Promise<string> {\n    this.#checkConnected();\n    const chainId = Number(transaction.chainId || this.chainId);\n    const chain = getEVMChainInfoById(chainId);\n    if (!chain) {\n      throw providerErrors.chainDisconnected();\n    }\n    if (!transaction.chainId) {\n      transaction.chainId = intToHex(chainId);\n    }\n    if (isNullish(transaction.type)) {\n      const chain = getEVMChainInfoById(chainId);\n      if (chain && isChainSupportEIP1559(transaction)) {\n        // set transaction default type \"0x2\", EIP1559.\n        transaction.type = '0x2';\n      } else {\n        transaction.type = '0x0';\n      }\n    }\n\n    if (isNullish(transaction.nonce)) {\n      transaction.nonce = '0x0';\n    }\n    if (isNullish(transaction.data)) {\n      transaction.data = '0x';\n    }\n\n    const ecDSA = await wallet.decryptEcdsa(WalletType.EVM);\n    let signedTx;\n    if (isTron(chainId)) {\n      signedTx = await ecDSA.signTronTx(globalConfig.env.baseUrl, threshSig.params(), transaction);\n    } else {\n      if (isNullish(transaction.nonce)) {\n        transaction.nonce = '0x0';\n      }\n      const signed = await ecDSA.signTx(globalConfig.env.baseUrl, threshSig.params(), transaction);\n      const module = await import('@ethereumjs/tx');\n      const { TransactionFactory } = module.default || module;\n      const tx = TransactionFactory.fromTxData(signed);\n      signedTx = addHexPrefix(tx.serialize().toString('hex'));\n    }\n    this.#sendAnalyticsActive(chainId);\n    const result = await evmApi.request<string>({\n      chainId,\n      method: 'eth_sendRawTransaction',\n      params: [signedTx],\n    });\n    return result;\n  }\n\n  async signMessage(message: PrefixedHexString | string, uniq?: boolean): Promise<string> {\n    this.#checkConnected();\n    const hash = personalSignHash({\n      data: message,\n    });\n    const ecDSA = await wallet.decryptEcdsa(WalletType.EVM);\n    const sig = await ecDSA.sign(globalConfig.env.baseUrl, threshSig.params(), hash, uniq);\n    this.#sendAnalyticsActive();\n    return concatSig(toBuffer(sig.v + 27), sig.r, sig.s);\n  }\n\n  async signTypedData<V extends SignTypedDataVersion, T extends MessageTypes>({\n    data,\n    version,\n    uniq,\n  }: {\n    data: V extends 'V1' ? TypedDataV1 : TypedMessage<T>;\n    version: V;\n    uniq?: boolean;\n  }): Promise<string> {\n    this.#checkConnected();\n    const hash = signTypedDataHash({\n      data,\n      version,\n    });\n    const ecDSA = await wallet.decryptEcdsa(WalletType.EVM);\n    const sig = await ecDSA.sign(globalConfig.env.baseUrl, threshSig.params(), hash, uniq);\n    this.#sendAnalyticsActive();\n    return concatSig(toBuffer(sig.v + 27), sig.r, sig.s);\n  }\n\n  async switchChain(chainId: PrefixedHexString | number) {\n    if (Number(chainId) !== this.#chainId) {\n      if (!getEVMChainInfoById(Number(chainId))) {\n        throw providerErrors.chainDisconnected('The chain is not supported.');\n      }\n\n      const userInfo = userStorage.getUserInfo();\n      if (userInfo) {\n        if (!this.selectedAddress) {\n          // create evm wallet.\n          await this.#genWallet();\n        }\n      }\n\n      this.#chainId = Number(chainId);\n      setCurrentEvmChainId(this.#chainId);\n      setTimeout(() => this.#events.emit('chainChanged', intToHex(this.#chainId)), 0);\n    }\n\n    return null;\n  }\n\n  async #genWallet() {\n    const address = await wallet.gen(WalletType.EVM);\n    setTimeout(() => this.#events.emit('accountsChanged', [address]), 0);\n  }\n\n  #checkConnected() {\n    if (!this.isConnected()) {\n      throw providerErrors.unauthorized();\n    }\n  }\n\n  #sendAnalyticsActive(chainId?: number) {\n    const useInfo = userStorage.getUserInfo();\n    if (useInfo) {\n      try {\n        /* eslint-disable */\n        analyticsActive({\n          chain_id: chainId ?? this.#chainId,\n          identity: useInfo.uuid,\n          login_type: 'particle' as any,\n          action: 'sign' as any,\n          wallet_address: this.selectedAddress!,\n          user_info: JSON.stringify(mapToUserInfo(useInfo)),\n        });\n        /* eslint-enable */\n      } catch (error) {\n        //ignore\n      }\n    }\n  }\n}\n", "import { v4 as uuid } from 'uuid';\nimport globalConfig from '../config';\nimport client from './client';\nimport type { RpcInput, RpcOutput } from './types';\n\nconst evmApi = {\n  async request<T>(data: Partial<RpcInput>): Promise<T> {\n    const response: RpcOutput<T> = await client\n      .post(\n        '/evm-chain',\n        {\n          ...data,\n          id: data.id || uuid(),\n          jsonrpc: data.jsonrpc || '2.0',\n          chainId: data.chainId || 1,\n        },\n        {\n          headers: {\n            'Auth-Type': 'Basic',\n          },\n          baseURL: globalConfig.env.rpcUrl,\n        }\n      )\n      .then((response) => response.data);\n    return response.result;\n  },\n};\n\nexport default evmApi;\n", "import {\n  arrToBufArr,\n  hashPersonalMessage,\n  isHexPrefixed,\n  isHexString,\n  setLengthLeft,\n  setLengthRight,\n  stripHexPrefix,\n  toBuffer,\n  type ToBufferInputTypes,\n} from '@ethereumjs/util';\nimport { TypedDataUtils } from '@metamask/eth-sig-util';\nimport BN from 'bn.js';\nimport { keccak256 } from 'ethereum-cryptography/keccak';\nimport { SignTypedDataVersion, type MessageTypes, type TypedDataV1, type TypedMessage } from '../types';\nimport { isNullish } from './../utils/validate';\n\nexport function personalSignHash({ data }: { data: ToBufferInputTypes }) {\n  if (isNullish(data)) {\n    throw new Error('Missing data parameter');\n  }\n\n  const message = legacyToBuffer(data);\n  const msgHash = hashPersonalMessage(message);\n  return msgHash;\n}\n\nexport function signTypedDataHash<V extends SignTypedDataVersion, T extends MessageTypes>({\n  data,\n  version,\n}: {\n  data: V extends 'V1' ? TypedDataV1 : TypedMessage<T>;\n  version: V;\n}) {\n  if (isNullish(data)) {\n    throw new Error('Missing data parameter');\n  }\n\n  const messageHash =\n    version === SignTypedDataVersion.V1\n      ? _typedSignatureHash(data as TypedDataV1)\n      : TypedDataUtils.eip712Hash(\n          data as TypedMessage<T>,\n          version as SignTypedDataVersion.V3 | SignTypedDataVersion.V4\n        );\n  return messageHash;\n}\n\n/**\n * Generate the \"V1\" hash for the provided typed message.\n *\n * The hash will be generated in accordance with an earlier version of the EIP-712\n * specification. This hash is used in `signTypedData_v1`.\n *\n * @param typedData - The typed message.\n * @returns The hash representing the type of the provided message.\n */\nfunction _typedSignatureHash(typedData: TypedDataV1): Buffer {\n  const error = new Error('Expect argument to be non-empty array');\n  if (typeof typedData !== 'object' || !('length' in typedData) || !typedData.length) {\n    throw error;\n  }\n\n  const data = typedData.map(function (e) {\n    if (e.type !== 'bytes') {\n      return e.value;\n    }\n\n    return legacyToBuffer(e.value);\n  });\n  const types = typedData.map(function (e) {\n    return e.type;\n  });\n  const schema = typedData.map(function (e) {\n    if (!e.name) {\n      throw error;\n    }\n    return `${e.type} ${e.name}`;\n  });\n\n  return arrToBufArr(\n    keccak256(\n      solidityPack(\n        ['bytes32', 'bytes32'],\n        [\n          keccak256(solidityPack(new Array(typedData.length).fill('string'), schema)),\n          keccak256(solidityPack(types, data)),\n        ]\n      )\n    )\n  );\n}\n\nconst solidityPack = function (types: any[], values: any[]) {\n  if (types.length !== values.length) {\n    throw new Error('Number of types are not matching the values');\n  }\n\n  const ret = [];\n\n  for (let i = 0; i < types.length; i++) {\n    const type = elementaryName(types[i]);\n    const value = values[i];\n    ret.push(solidityHexValue(type, value, null));\n  }\n\n  return Buffer.concat(ret);\n};\n\nfunction elementaryName(name: string) {\n  if (name.startsWith('int[')) {\n    return 'int256' + name.slice(3);\n  } else if (name === 'int') {\n    return 'int256';\n  } else if (name.startsWith('uint[')) {\n    return 'uint256' + name.slice(4);\n  } else if (name === 'uint') {\n    return 'uint256';\n  } else if (name.startsWith('fixed[')) {\n    return 'fixed128x128' + name.slice(5);\n  } else if (name === 'fixed') {\n    return 'fixed128x128';\n  } else if (name.startsWith('ufixed[')) {\n    return 'ufixed128x128' + name.slice(6);\n  } else if (name === 'ufixed') {\n    return 'ufixed128x128';\n  }\n  return name;\n}\n\nconst solidityHexValue = function (type: any, value: any, bitsize: any) {\n  // pass in bitsize = null if use default bitsize\n  let size, num;\n  if (isArray(type)) {\n    const subType = type.replace(/\\[.*?\\]/, '');\n    if (!isArray(subType)) {\n      const arraySize = parseTypeArray(type);\n      if (arraySize !== 'dynamic' && arraySize !== 0 && value.length > arraySize!) {\n        throw new Error('Elements exceed array size: ' + arraySize);\n      }\n    }\n    const arrayValues = value.map(function (v: any) {\n      return solidityHexValue(subType, v, 256);\n    });\n    return Buffer.concat(arrayValues);\n  } else if (type === 'bytes') {\n    return value;\n  } else if (type === 'string') {\n    return Buffer.from(value, 'utf8');\n  } else if (type === 'bool') {\n    bitsize = bitsize || 8;\n    const padding = Array(bitsize / 4).join('0');\n    return Buffer.from(value ? padding + '1' : padding + '0', 'hex');\n  } else if (type === 'address') {\n    let bytesize = 20;\n    if (bitsize) {\n      bytesize = bitsize / 8;\n    }\n    return setLengthLeft(value, bytesize);\n  } else if (type.startsWith('bytes')) {\n    size = parseTypeN(type);\n    if (size < 1 || size > 32) {\n      throw new Error('Invalid bytes<N> width: ' + size);\n    }\n\n    return setLengthRight(value, size);\n  } else if (type.startsWith('uint')) {\n    size = parseTypeN(type);\n    if (size % 8 || size < 8 || size > 256) {\n      throw new Error('Invalid uint<N> width: ' + size);\n    }\n\n    num = parseNumber(value);\n    if (num.bitLength() > size) {\n      throw new Error('Supplied uint exceeds width: ' + size + ' vs ' + num.bitLength());\n    }\n\n    bitsize = bitsize || size;\n    return num.toArrayLike(Buffer, 'be', bitsize / 8);\n  } else if (type.startsWith('int')) {\n    size = parseTypeN(type);\n    if (size % 8 || size < 8 || size > 256) {\n      throw new Error('Invalid int<N> width: ' + size);\n    }\n\n    num = parseNumber(value);\n    if (num.bitLength() > size) {\n      throw new Error('Supplied int exceeds width: ' + size + ' vs ' + num.bitLength());\n    }\n\n    bitsize = bitsize || size;\n    return num.toTwos(size).toArrayLike(Buffer, 'be', bitsize / 8);\n  } else {\n    // FIXME: support all other types\n    throw new Error('Unsupported or invalid type: ' + type);\n  }\n};\n\nfunction parseTypeN(type: any) {\n  return parseInt(/^\\D+(\\d+)$/.exec(type)![1], 10);\n}\n\nfunction parseTypeArray(type: any) {\n  const tmp = type.match(/(.*)\\[(.*?)\\]$/);\n  if (tmp) {\n    return tmp[2] === '' ? 'dynamic' : parseInt(tmp[2], 10);\n  }\n  return null;\n}\n\nfunction parseNumber(arg: any) {\n  const type = typeof arg;\n  if (type === 'string') {\n    if (isHexPrefixed(arg)) {\n      return new BN(stripHexPrefix(arg), 16);\n    } else {\n      return new BN(arg, 10);\n    }\n  } else if (type === 'number') {\n    return new BN(arg);\n  } else if (arg.toArray) {\n    // assume this is a BN for the moment, replace with BN.isBN soon\n    return arg;\n  } else {\n    throw new Error('Argument is not a number');\n  }\n}\n\nfunction isArray(type: any) {\n  return type.lastIndexOf(']') === type.length - 1;\n}\n\n/**\n * Convert a value to a Buffer. This function should be equivalent to the `toBuffer` function in\n * `ethereumjs-util@5.2.1`.\n *\n * @param value - The value to convert to a Buffer.\n * @returns The given value as a Buffer.\n */\nexport function legacyToBuffer(value: ToBufferInputTypes) {\n  return typeof value === 'string' && !isHexString(value) ? Buffer.from(value) : toBuffer(value);\n}\n", "import { publicToAddress, toChecksumAddress } from '@ethereumjs/util';\nimport type { Ecdsa, EdDsa } from '@particle-network/thresh-sig';\nimport bs58 from 'bs58';\nimport globalConfig from '../config';\nimport { userStorage } from '../storage';\nimport { requireNotNullish } from '../utils/validate';\n\nconst threshSig = {\n  async edDSA(data: string): Promise<EdDsa> {\n    const module = await import('@particle-network/thresh-sig');\n    const { EdDsa } = module.default || module;\n    return EdDsa.from(data);\n  },\n\n  async ecDSA(data: string): Promise<Ecdsa> {\n    const module = await import('@particle-network/thresh-sig');\n    const { Ecdsa } = module.default || module;\n    return Ecdsa.from(data);\n  },\n\n  async refreshEcdsa(p2Key: string): Promise<string> {\n    const module = await import('@particle-network/thresh-sig');\n    const { Ecdsa } = module.default || module;\n    const newP2Key = (await Ecdsa.from(p2Key).refresh(globalConfig.env.baseUrl, this.params())).to();\n    return newP2Key;\n  },\n\n  async decryptData(ciphertext: string, key: string): Promise<string> {\n    try {\n      const module = await import('@particle-network/thresh-sig');\n      const { decryptData } = module.default || module;\n      const plaintext = await decryptData(ciphertext, key);\n      return plaintext;\n    } catch (error) {\n      if (userStorage.hasMasterPassword()) {\n        throw new Error('Master password decryption error');\n      } else {\n        throw new Error('Decryption failed, please try again later.');\n      }\n    }\n  },\n\n  async encryptData(plaintext: string, key: string): Promise<string> {\n    const module = await import('@particle-network/thresh-sig');\n    const { encryptData } = module.default || module;\n    const encrypted = await encryptData(plaintext, key);\n    return encrypted;\n  },\n\n  async generateKey(password: string, uuid: string): Promise<string> {\n    const module = await import('@particle-network/thresh-sig');\n    const { generateKey } = module.default || module;\n    const key = await generateKey(password, uuid);\n    return key;\n  },\n\n  async create(chainName: string) {\n    const endpoint = globalConfig.env.baseUrl;\n    const params = this.params();\n    let p2Key;\n    let address;\n    if (chainName === 'solana') {\n      const module = await import('@particle-network/thresh-sig');\n      const { EdDsa } = module.default || module;\n      const edDSA = await EdDsa.gen(endpoint, params);\n      p2Key = edDSA.to();\n      address = bs58.encode(new Uint8Array(edDSA.pub()));\n    } else {\n      const module = await import('@particle-network/thresh-sig');\n      const { Ecdsa } = module.default || module;\n      const ecDSA = await Ecdsa.gen(endpoint, params);\n      p2Key = ecDSA.to();\n      address = toChecksumAddress('0x' + publicToAddress(ecDSA.pub(), true).toString('hex'));\n    }\n    return {\n      p2Key,\n      address,\n    };\n  },\n\n  params(): string {\n    /* eslint-disable camelcase */\n    const userInfo = requireNotNullish(userStorage.getUserInfo(), 'Please connect AuthCore first!');\n    const value = JSON.stringify({\n      token: userInfo.token,\n      project_uuid: globalConfig.authOptions.projectId,\n      project_client_key: globalConfig.authOptions.clientKey,\n      project_app_uuid: globalConfig.authOptions.appId,\n      sdk_version: globalConfig.version,\n      device_id: globalConfig.deviceId,\n      mac_key: userInfo.mac_key,\n      payment_token: globalConfig.paymentToken,\n    });\n    /* eslint-enable */\n    globalConfig.paymentToken = undefined;\n    return value;\n  },\n};\n\nexport default threshSig;\n", "import { userStorage } from '../storage';\nimport pnApi from './pnApi';\n/**\n * @link https://github.com/aws/aws-sdk-js-v3/tree/5375c91f8a4d2cac6918885843718f47ce82e5d5/packages/credential-providers\n */\nasync function createKMSClient() {\n  const [AWS, fromCognitoIdentity, NotAuthorizedException] = await Promise.all([\n    import('@aws-sdk/client-kms'),\n    import('@aws-sdk/credential-providers').then((m) => m.fromCognitoIdentity),\n    import('@aws-sdk/client-cognito-identity').then((m) => m.NotAuthorizedException),\n  ]);\n\n  const cognitoResult = userStorage.getCognitoResult();\n  if (!cognitoResult) {\n    throw new Error('cognito result not found!');\n  }\n\n  const credentials = fromCognitoIdentity({\n    // Required. The unique identifier for the identity against which credentials\n    // will be issued.\n    identityId: cognitoResult.identity_id,\n    // Optional. A set of name-value pairs that map provider names to provider tokens.\n    // Required when using identities associated with external identity providers such as Facebook.\n    logins: {\n      'cognito-identity.amazonaws.com': cognitoResult.id_token,\n    },\n    // Optional. Custom client config if you need overwrite default Cognito Identity client\n    // configuration.\n    clientConfig: { region: cognitoResult.region },\n  });\n\n  return {\n    kmsClient: new AWS.KMS({\n      region: cognitoResult.region,\n      credentials: credentials,\n    }),\n    NotAuthorizedException,\n  };\n}\n\n// credential provider \u4F1A\u628A Cognito \u7684 NotAuthorizedException \u5305\u88C5\u6210 CredentialsProviderError\uFF0C\n// instanceof \u4E0D\u518D\u6210\u7ACB\uFF0C\u8FD9\u91CC\u6309 name / cause / message \u515C\u5E95\u5224\u65AD token \u8FC7\u671F\u573A\u666F\u3002\nfunction isNotAuthorizedError(e: any, NotAuthorizedException: any): boolean {\n  if (e instanceof NotAuthorizedException) return true;\n  if (e?.name === 'NotAuthorizedException') return true;\n  if (e?.cause?.name === 'NotAuthorizedException') return true;\n  if (typeof e?.message === 'string' && e.message.includes('Token is expired')) return true;\n  return false;\n}\n\nexport async function generateDataKey(): Promise<{ ciphertext: string; plaintext: string }> {\n  const { kmsClient, NotAuthorizedException } = await createKMSClient();\n\n  let output;\n  try {\n    output = await kmsClient.generateDataKey({\n      KeyId: userStorage.getCognitoResult()?.kms_key_id,\n      KeySpec: 'AES_256',\n    });\n  } catch (e) {\n    console.log('generateDataKey', e);\n    if (isNotAuthorizedError(e, NotAuthorizedException)) {\n      await pnApi.loginCognito();\n      return await generateDataKey();\n    } else {\n      throw e;\n    }\n  }\n\n  if (!output.CiphertextBlob || !output.Plaintext) {\n    throw new Error('KMS generate DataKey error.');\n  }\n\n  return {\n    ciphertext: Buffer.from(output.CiphertextBlob).toString('base64'),\n    plaintext: Buffer.from(output.Plaintext).toString('base64'),\n  };\n}\n\nexport async function decryptDataKey(encryptDataKey: string): Promise<string> {\n  const { kmsClient, NotAuthorizedException } = await createKMSClient();\n\n  let dataKey;\n  try {\n    const output = await kmsClient.decrypt({\n      KeyId: userStorage.getCognitoResult()?.kms_key_id,\n      CiphertextBlob: Buffer.from(encryptDataKey, 'base64'),\n    });\n    dataKey = output.Plaintext;\n  } catch (e) {\n    console.log('decrypt data key error', e);\n    if (isNotAuthorizedError(e, NotAuthorizedException)) {\n      await pnApi.loginCognito();\n      const result = await decryptDataKey(encryptDataKey);\n      return result;\n    } else {\n      throw e;\n    }\n  }\n\n  if (!dataKey) {\n    throw new Error('KMS decryption failed, please try again later.');\n  }\n  return Buffer.from(dataKey).toString('base64');\n}\n\n/**\n * decrypt data\n * @param data\n * @param decompress\n * @link https://docs.aws.amazon.com/zh_cn/kms/latest/developerguide/programming-encryption.html\n */\nexport async function decrypt(data: string, decompress = false): Promise<string> {\n  const { kmsClient, NotAuthorizedException } = await createKMSClient();\n\n  let Plaintext;\n  try {\n    const output = await kmsClient.decrypt({\n      KeyId: userStorage.getCognitoResult()?.kms_key_id,\n      CiphertextBlob: Buffer.from(data, 'base64'),\n    });\n    Plaintext = output.Plaintext;\n  } catch (e) {\n    console.log('KMS decrypt error', e);\n    if (isNotAuthorizedError(e, NotAuthorizedException)) {\n      await pnApi.loginCognito();\n      const txt = await decrypt(data, decompress);\n      return txt;\n    } else {\n      throw e;\n    }\n  }\n\n  if (!Plaintext) {\n    throw new Error('KMS decryption failed, please try again later.');\n  }\n\n  if (decompress) {\n    const LZUTF8 = await import('lzutf8').then((m) => m.default);\n    const output = LZUTF8.decompress(Plaintext);\n    return Buffer.from(output).toString('utf8');\n  } else {\n    return Buffer.from(Plaintext).toString('utf8');\n  }\n}\n", "/* eslint-disable camelcase */\nimport { decrypt, decryptDataKey, generateDataKey } from '../api/kms';\nimport pnApi from '../api/pnApi';\nimport { WalletEncryptedType, type WalletInfo } from '../api/types';\nimport { PreferenceKey, encryptedStorage, userStorage } from '../storage';\nimport { check, isNullish, requireNotNullish } from '../utils/validate';\nimport threshSig from './threshSig';\n\n/**\n * evm and solan wallet will be created when set master password\n * @param password\n * @returns\n */\nexport const setupMasterPassword = async (password: string): Promise<boolean> => {\n  const userInfo = userStorage.getUserInfo();\n  if (!userInfo) {\n    throw new Error('user not login');\n  }\n  const { ciphertext, plaintext } = await generateDataKey();\n  const localKey = await threshSig.generateKey(password, userInfo.uuid);\n  const localKMSDataKey = await threshSig.generateKey(plaintext, userInfo.uuid);\n  const requests = userInfo.wallets.map((wallet) => {\n    if (wallet.encrypted_type === WalletEncryptedType.KMS_AES) {\n      if (isNullish(wallet.public_address)) {\n        return createType2Wallet(wallet, localKey, localKMSDataKey);\n      } else {\n        return encryptType0Wallet(wallet, localKey, localKMSDataKey);\n      }\n    } else if (wallet.encrypted_type === WalletEncryptedType.KMS_AES_WITH_DATA_KEY_AND_DEFAULT_MASTER_PASSWORD) {\n      return encryptTypeWallet(wallet, localKey, localKMSDataKey);\n    } else {\n      return encryptTypeWallet(wallet, localKey, localKMSDataKey);\n    }\n  });\n\n  const encryptResults = await Promise.all(requests);\n\n  // check whether can decrypt\n  for (const result of encryptResults) {\n    const decryptResult = await decryptP2Key(result.p2KeyEncrypted2, localKey, localKMSDataKey);\n    check(decryptResult === result.p2Key, 'check decrypt p2Key error');\n  }\n\n  const wallets = encryptResults.map((item) => {\n    const { uuid, public_address } = item.wallet;\n    return {\n      wallet_uuid: uuid,\n      public_address: (item as any).created ? public_address : undefined,\n      encrypted_data: item.p2KeyEncrypted2,\n    };\n  });\n  const encryptedKMSDataKey = ciphertext;\n  const updateResult = await pnApi.updateWallet(userInfo.uuid, {\n    encrypted_type: WalletEncryptedType.KMS_AES_WITH_DATA_KEY_AND_MASTER_PASSWORD,\n    encrypted_kms_data_key: encryptedKMSDataKey,\n    wallets,\n  });\n\n  // save local-key and local-kms-data-key\n  saveLocalKey(localKey);\n  saveLocalKMSDataKey(encryptedKMSDataKey, localKMSDataKey);\n  userInfo.wallets.forEach((wallet) => {\n    const newWallet = wallets.find((item) => item.wallet_uuid === wallet.uuid);\n    if (newWallet?.encrypted_data) {\n      wallet.encrypted_data = newWallet.encrypted_data;\n      wallet.encrypted_kms_data_key = encryptedKMSDataKey;\n      wallet.encrypted_type = WalletEncryptedType.KMS_AES_WITH_DATA_KEY_AND_MASTER_PASSWORD;\n      if (newWallet.public_address) {\n        wallet.public_address = newWallet.public_address;\n      }\n    }\n  });\n  if (userInfo.security_account) {\n    userInfo.security_account.has_set_master_password = true;\n  }\n  userStorage.setUserInfo(userInfo);\n  return updateResult;\n};\n\nexport const createType2Wallet = async (wallet: WalletInfo, localKey: string, localKMSDataKey: string) => {\n  const { p2Key, address } = await threshSig.create(wallet.chain_name);\n  const p2KeyEncrypted2 = await encryptP2Key(p2Key, localKey, localKMSDataKey);\n  wallet.public_address = address;\n  return {\n    p2Key,\n    p2KeyEncrypted2,\n    wallet,\n    created: true,\n  };\n};\n\nexport const createEncryptedWallet = async (\n  wallet: WalletInfo,\n  p2Key: string,\n  address: string,\n  encryptedKMSDataKey: string,\n  localKMSDataKey?: string\n): Promise<boolean> => {\n  const userInfo = userStorage.getUserInfo();\n  if (!userInfo) {\n    throw new Error('user not login');\n  }\n  const encryptedType = userStorage.hasMasterPassword()\n    ? WalletEncryptedType.KMS_AES_WITH_DATA_KEY_AND_MASTER_PASSWORD\n    : WalletEncryptedType.KMS_AES_WITH_DATA_KEY_AND_DEFAULT_MASTER_PASSWORD;\n\n  if (!localKMSDataKey) {\n    localKMSDataKey = await loadLocalKMSDataKey(encryptedKMSDataKey);\n  }\n\n  let localKey;\n  if (encryptedType === WalletEncryptedType.KMS_AES_WITH_DATA_KEY_AND_MASTER_PASSWORD) {\n    localKey = await loadLocalKey();\n  } else {\n    localKey = await threshSig.generateKey('', userInfo.uuid);\n  }\n\n  const p2KeyEncrypted2 = await encryptP2Key(p2Key, localKey, localKMSDataKey);\n\n  // check whether can decrypt\n  const decryptResult = await decryptP2Key(p2KeyEncrypted2, localKey, localKMSDataKey);\n  check(decryptResult === p2Key, 'check decrypt p2Key error');\n\n  const updateResult = await pnApi.updateWallet(userInfo.uuid, {\n    encrypted_type: encryptedType,\n    encrypted_kms_data_key: encryptedKMSDataKey,\n    wallets: [\n      {\n        wallet_uuid: wallet.uuid,\n        encrypted_data: p2KeyEncrypted2,\n        public_address: address,\n      },\n    ],\n  });\n\n  // save local-key and local-kms-data-key\n  saveLocalKey(localKey);\n  saveLocalKMSDataKey(encryptedKMSDataKey, localKMSDataKey);\n\n  const newWallet = userInfo.wallets.find((item) => item.uuid === wallet.uuid);\n  if (newWallet) {\n    newWallet.encrypted_data = p2KeyEncrypted2;\n    newWallet.encrypted_kms_data_key = encryptedKMSDataKey;\n    newWallet.encrypted_type = encryptedType;\n    newWallet.public_address = address;\n  }\n  userStorage.setUserInfo(userInfo);\n  return updateResult;\n};\n\nexport const decryptWallet = async (wallet: WalletInfo): Promise<string> => {\n  let p2Key = '';\n  if (wallet.encrypted_type === WalletEncryptedType.KMS_AES) {\n    p2Key = await decrypt(wallet.encrypted_data, wallet.chain_name === 'evm_chain');\n  } else {\n    const localKey = await loadLocalKey();\n    const localKMSDataKey = await loadLocalKMSDataKey(wallet.encrypted_kms_data_key || '');\n    p2Key = await decryptP2Key(wallet.encrypted_data, localKey, localKMSDataKey);\n  }\n\n  return p2Key;\n};\n\nconst encryptType0Wallet = async (wallet: WalletInfo, localKey: string, localKMSDataKey: string) => {\n  let p2Key = await decrypt(wallet.encrypted_data, wallet.chain_name === 'evm_chain');\n  if (wallet.chain_name === 'evm_chain') {\n    p2Key = await threshSig.refreshEcdsa(p2Key);\n  }\n\n  const p2KeyEncrypted2 = await encryptP2Key(p2Key, localKey, localKMSDataKey);\n  return {\n    p2Key,\n    p2KeyEncrypted2,\n    wallet,\n  };\n};\n\nconst encryptTypeWallet = async (wallet: WalletInfo, localKey: string, localKMSDataKey: string) => {\n  const oldLocalKMSDataKey = await loadLocalKMSDataKey(wallet.encrypted_kms_data_key || '');\n  const oldLocalKey = await loadLocalKey();\n\n  let p2Key = await decryptP2Key(wallet.encrypted_data, oldLocalKey, oldLocalKMSDataKey);\n\n  if (wallet.chain_name === 'evm_chain') {\n    p2Key = await threshSig.refreshEcdsa(p2Key);\n  }\n  const p2KeyEncrypted2 = await encryptP2Key(p2Key, localKey, localKMSDataKey);\n  return {\n    p2Key,\n    p2KeyEncrypted2,\n    wallet,\n  };\n};\n\nconst decryptP2Key = async (p2KeyEncrypted: string, localKey: string, localKMSDataKey: string) => {\n  const p2KeyEncrypted1 = await threshSig.decryptData(p2KeyEncrypted, localKMSDataKey);\n  const p2Key = await threshSig.decryptData(p2KeyEncrypted1, localKey);\n  return p2Key;\n};\n\nconst encryptP2Key = async (p2Key: string, localKey: string, localKMSDataKey: string) => {\n  const p2KeyEncrypted1 = await threshSig.encryptData(p2Key, localKey);\n  const p2KeyEncrypted2 = await threshSig.encryptData(p2KeyEncrypted1, localKMSDataKey);\n  return p2KeyEncrypted2;\n};\n\nexport const checkMasterPassword = async (password: string) => {\n  const userInfo = requireNotNullish(userStorage.getUserInfo(), 'Please connect AuthCore first!');\n  const localKey = await threshSig.generateKey(password, userInfo.uuid);\n  const wallet = userInfo.wallets.find(\n    (item) =>\n      !isNullish(item.public_address) &&\n      item.encrypted_type === WalletEncryptedType.KMS_AES_WITH_DATA_KEY_AND_MASTER_PASSWORD\n  );\n  if (!wallet) {\n    throw new Error('master password not set');\n  }\n  const localKMSDataKey = await loadLocalKMSDataKey(wallet.encrypted_kms_data_key || '');\n  const p2KeyEncrypted1 = await threshSig.decryptData(wallet.encrypted_data, localKMSDataKey);\n  await threshSig.decryptData(p2KeyEncrypted1, localKey);\n  saveLocalKey(localKey);\n};\n\nconst loadLocalKMSDataKey = async (encryptedKMSDataKey: string) => {\n  if (!encryptedKMSDataKey) {\n    throw new Error('encryptedKMSDataKey not found');\n  }\n  const userInfo = userStorage.getUserInfo();\n  check(userInfo, new Error('please login first!'));\n\n  let localKMSDataKey = encryptedStorage.getItem(encryptedKMSDataKey);\n  if (localKMSDataKey) {\n    return localKMSDataKey;\n  }\n  const kmsDataKey = await decryptDataKey(encryptedKMSDataKey);\n  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n  localKMSDataKey = await threshSig.generateKey(kmsDataKey, userStorage.getUserInfo()!.uuid);\n  saveLocalKMSDataKey(encryptedKMSDataKey, localKMSDataKey);\n  return localKMSDataKey;\n};\n\nexport const saveLocalKMSDataKey = (encryptedKMSDataKey: string, localKMSDataKey: string) => {\n  encryptedStorage.setItem(encryptedKMSDataKey, localKMSDataKey);\n};\n\nconst loadLocalKey = async (): Promise<string> => {\n  const localKey = encryptedStorage.getItem(PreferenceKey.LocalKey);\n  if (!localKey) {\n    if (userStorage.hasMasterPassword()) {\n      throw new Error('Local Key not found');\n    } else {\n      const userInfo = userStorage.getUserInfo();\n      check(userInfo, new Error('please login first!'));\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      const localKey = await threshSig.generateKey('', userInfo!.uuid);\n      saveLocalKey(localKey);\n      return localKey;\n    }\n  }\n  return localKey;\n};\n\nexport const hasLocalKey = () => {\n  const localKey = encryptedStorage.getItem(PreferenceKey.LocalKey);\n  return !isNullish(localKey);\n};\n\nexport const clearLocalKey = () => {\n  encryptedStorage.removeItem(PreferenceKey.LocalKey);\n};\n\nexport const saveLocalKey = (localKey: string) => {\n  encryptedStorage.setItem(PreferenceKey.LocalKey, localKey);\n};\n", "import type { Ecdsa, EdDsa } from '@particle-network/thresh-sig';\nimport { generateDataKey } from '../api/kms';\nimport type { WalletInfo } from '../api/types';\nimport { WalletEncryptedType } from '../api/types';\nimport { userStorage } from '../storage';\nimport { type WalletType } from '../types/wallet';\nimport { createEncryptedWallet, decryptWallet } from './masterPassword';\nimport threshSig from './threshSig';\n\nconst wallet = {\n  getWalletInfo(name: WalletType): WalletInfo {\n    const userInfo = userStorage.getUserInfo();\n    if (!userInfo) {\n      throw new Error('please login first!');\n    }\n    return userInfo.wallets.filter((info) => info.chain_name === name)[0];\n  },\n\n  hasType1Wallet(): boolean {\n    return Boolean(\n      userStorage\n        .getUserInfo()\n        ?.wallets?.some(\n          (info) => info.encrypted_type === WalletEncryptedType.KMS_AES_WITH_DATA_KEY_AND_DEFAULT_MASTER_PASSWORD\n        )\n    );\n  },\n\n  publicAddress(name: WalletType): string {\n    const walletInfo = this.getWalletInfo(name);\n    return walletInfo.public_address || '';\n  },\n\n  async gen(name: WalletType): Promise<string> {\n    const userInfo = userStorage.getUserInfo();\n    if (!userInfo) {\n      throw new Error('please login first!');\n    }\n    const walletInfo = this.getWalletInfo(name);\n    let publicAddress: string;\n    if (walletInfo?.public_address) {\n      publicAddress = walletInfo.public_address;\n    } else {\n      const otherWallet = userInfo.wallets.filter((info) => info.chain_name !== name)[0];\n      let encryptedKMSDataKey = otherWallet.encrypted_kms_data_key;\n      let localKMSDataKey;\n      let p2KeyValue;\n\n      if (encryptedKMSDataKey) {\n        const { address, p2Key } = await threshSig.create(walletInfo.chain_name);\n        publicAddress = address;\n        p2KeyValue = p2Key;\n      } else {\n        const [{ p2Key, address }, kmsDataKey] = await Promise.all([\n          threshSig.create(walletInfo.chain_name),\n          generateDataKey().then(({ ciphertext, plaintext }) => {\n            return Promise.all([threshSig.generateKey(plaintext, userInfo.uuid), Promise.resolve(ciphertext)]);\n          }),\n        ]);\n\n        p2KeyValue = p2Key;\n        publicAddress = address;\n        localKMSDataKey = kmsDataKey[0];\n        encryptedKMSDataKey = kmsDataKey[1];\n      }\n\n      await createEncryptedWallet(walletInfo, p2KeyValue, publicAddress, encryptedKMSDataKey, localKMSDataKey);\n      console.log(`wallet gen address: ${publicAddress}`);\n    }\n    return publicAddress;\n  },\n\n  async decryptEcdsa(name: WalletType): Promise<Ecdsa> {\n    const data = await decryptWallet(this.getWalletInfo(name));\n    const ecDSA = await threshSig.ecDSA(data);\n    return ecDSA;\n  },\n\n  async decryptEdDsa(name: WalletType): Promise<EdDsa> {\n    const data = await decryptWallet(this.getWalletInfo(name));\n    const edDSA = await threshSig.edDSA(data);\n    return edDSA;\n  },\n};\n\nexport default wallet;\n", "import { providerErrors } from '@metamask/rpc-errors';\nimport type { PublicKey, Transaction, VersionedTransaction } from '@solana/web3.js';\nimport EventEmitter from 'events';\nimport type { Chain as ViemChain } from 'viem';\nimport solanaApi from '../api/solanaApi';\nimport { mapToUserInfo, type RpcInput, type UserInfo } from '../api/types';\nimport globalConfig from '../config';\nimport { getCurrentSolanaChainId, setCurrentSolanaChainId, userStorage } from '../storage';\nimport { AuthCoreEvent, type ConnectParam } from '../types';\nimport { WalletType } from '../types/wallet';\nimport { getChainType, getSolanaChainInfoById } from '../utils/chainUtils';\nimport events from '../utils/eventUtils';\nimport { check, requireNotNullish } from '../utils/validate';\nimport { isLegacyTransaction } from './../utils/solanaUtils';\nimport { analyticsActive } from './analyticsApi';\nimport { disconnect as logout } from './connectApi';\nimport threshSig from './threshSig';\nimport wallet from './wallet';\n\nexport class SolanaWallet {\n  #events = new EventEmitter();\n\n  readonly isParticleNetwork = true;\n\n  name = 'Particle';\n  url = 'https://particle.network';\n  icon = 'https://static.particle.network/wallet-icons/Particle.png';\n\n  publicKey: PublicKey | null = null;\n\n  isConnected: boolean = false;\n\n  #connecting = false;\n\n  #chainId = 101;\n\n  constructor() {\n    this.#events.setMaxListeners(100);\n    const localChainId = getCurrentSolanaChainId();\n    if (localChainId && getSolanaChainInfoById(localChainId)) {\n      this.#chainId = localChainId;\n    } else {\n      setCurrentSolanaChainId(this.#chainId);\n    }\n\n    events.on(AuthCoreEvent.ParticleAuthDisconnect, () => {\n      this.publicKey = null;\n      this.isConnected = false;\n      this.#events.emit('disconnect');\n    });\n    events.on(AuthCoreEvent.ParticleAuthConnect, () => {\n      if (this.selectedAddress) {\n        this.#events.emit('connect', this.selectedAddress);\n        this.#events.emit('accountsChanged', [this.selectedAddress]);\n      }\n    });\n    events.on('connectWithChain', (viemChain: ViemChain) => {\n      if (getChainType(viemChain) === 'solana') {\n        this.#chainId = viemChain.id;\n        setCurrentSolanaChainId(this.#chainId);\n        this.#events.emit('chainChanged', this.#chainId);\n      }\n    });\n  }\n\n  on(event: string, listener: (...args: any[]) => void): this {\n    this.#events.on(event, listener);\n    return this;\n  }\n\n  once(event: string, listener: (...args: any[]) => void): this {\n    this.#events.once(event, listener);\n    return this;\n  }\n\n  off(event: string, listener: (...args: any[]) => void): this {\n    this.#events.off(event, listener);\n    return this;\n  }\n\n  removeListener(event: string, listener: (...args: any[]) => void): this {\n    this.#events.removeListener(event, listener);\n    return this;\n  }\n\n  get connecting(): boolean {\n    return this.#connecting;\n  }\n\n  get connected(): boolean {\n    return this.selectedAddress !== null;\n  }\n\n  private async loadPublicKey(): Promise<PublicKey | null> {\n    if (this.selectedAddress && !this.publicKey) {\n      const module = await import('@solana/web3.js');\n      const { PublicKey } = module.default || module;\n\n      this.publicKey = new PublicKey(this.selectedAddress);\n    }\n    return this.publicKey;\n  }\n\n  get selectedAddress(): string | null {\n    const address = userStorage.getSolanaWallet()?.public_address;\n    return address ? address : null;\n  }\n\n  get chainId(): number {\n    return this.#chainId;\n  }\n\n  async connect(param?: ConnectParam): Promise<void> {\n    try {\n      this.#connecting = true;\n      if (userStorage.isLogin()) {\n        if (!this.selectedAddress) {\n          await this.#genWallet();\n        }\n      } else {\n        await new Promise<UserInfo>((resolve, reject) => {\n          events.emit(AuthCoreEvent.RequestSolanaAccount, { resolve, reject, param });\n        });\n        if (!userStorage.isLogin()) {\n          throw providerErrors.unauthorized();\n        } else if (!this.selectedAddress) {\n          await this.#genWallet();\n        }\n      }\n\n      if (this.selectedAddress) {\n        this.publicKey = await this.loadPublicKey();\n        this.isConnected = true;\n        this.#events.emit('connect', this.selectedAddress);\n      } else {\n        throw providerErrors.unauthorized();\n      }\n    } catch (e) {\n      return Promise.reject(e);\n    } finally {\n      this.#connecting = false;\n    }\n  }\n\n  async #genWallet() {\n    const address = await wallet.gen(WalletType.Solana);\n    setTimeout(() => this.#events.emit('accountsChanged', [address]), 0);\n  }\n\n  async disconnect(): Promise<void> {\n    await logout();\n    this.publicKey = null;\n    this.isConnected = false;\n    return Promise.resolve();\n  }\n\n  async signTransaction<T extends Transaction | VersionedTransaction>(transaction: T, chainId?: number): Promise<T> {\n    requireNotNullish(this.connected, 'Please connect first!');\n    const pubKey = await this.loadPublicKey();\n    const edDSA = await wallet.decryptEdDsa(WalletType.Solana);\n    //replace recentBlockhash\n    if (transaction.signatures.length === 0) {\n      const blockhash = await solanaApi.getLatestBlockhash(chainId || this.chainId);\n      if (isLegacyTransaction(transaction)) {\n        (transaction as Transaction).recentBlockhash = blockhash;\n      } else {\n        (transaction as VersionedTransaction).message.recentBlockhash = blockhash;\n      }\n    }\n    const message = isLegacyTransaction(transaction)\n      ? (transaction as Transaction).serializeMessage()\n      : (transaction as VersionedTransaction).message.serialize();\n    const signed = await edDSA.sign(globalConfig.env.baseUrl, threshSig.params(), message);\n    transaction.addSignature(requireNotNullish(pubKey), signed);\n    this.#sendAnalyticsActive(chainId);\n    return transaction;\n  }\n\n  async signAllTransactions<T extends Transaction | VersionedTransaction>(\n    transactions: T[],\n    chainId?: number\n  ): Promise<T[]> {\n    requireNotNullish(this.connected, 'Please connect first!');\n    const pubKey = await this.loadPublicKey();\n    //replace recentBlockhash\n    let blockhash;\n    for (let i = 0; i < transactions.length; i++) {\n      const tx = transactions[i];\n      if (tx.signatures.length === 0) {\n        if (!blockhash) {\n          blockhash = await solanaApi.getLatestBlockhash(chainId || this.chainId);\n        }\n        if (isLegacyTransaction(tx)) {\n          (tx as Transaction).recentBlockhash = blockhash;\n        } else {\n          (tx as VersionedTransaction).message.recentBlockhash = blockhash;\n        }\n      }\n    }\n    const edDSA = await wallet.decryptEdDsa(WalletType.Solana);\n    const signatures = await edDSA.batchSign(\n      globalConfig.env.baseUrl,\n      threshSig.params(),\n      transactions.map((tx) => {\n        const message = isLegacyTransaction(tx)\n          ? (tx as Transaction).serializeMessage()\n          : (tx as VersionedTransaction).message.serialize();\n        return Buffer.from(message);\n      })\n    );\n    transactions.forEach((tx, index) => {\n      tx.addSignature(requireNotNullish(pubKey), signatures[index]);\n    });\n    this.#sendAnalyticsActive(chainId);\n    return transactions;\n  }\n\n  async signAndSendTransaction<T extends Transaction | VersionedTransaction>(\n    transaction: T,\n    chainId?: number\n  ): Promise<{ signature: string }> {\n    const signedTx = await this.signTransaction(transaction, chainId);\n    const signature = await solanaApi.request<string>({\n      chainId: chainId || this.chainId,\n      method: 'sendTransaction',\n      params: [\n        Buffer.from(signedTx.serialize()).toString('base64'),\n        { encoding: 'base64', preflightCommitment: 'confirmed' },\n      ],\n    });\n\n    return { signature };\n  }\n\n  async signMessage(message: Uint8Array): Promise<{ signature: Uint8Array }> {\n    check(this.selectedAddress, 'Please connect first!');\n    const edDSA = await wallet.decryptEdDsa(WalletType.Solana);\n    const signature = await edDSA.sign(globalConfig.env.baseUrl, threshSig.params(), message);\n    this.#sendAnalyticsActive();\n    return { signature };\n  }\n\n  async switchChain(chainId: number) {\n    check(typeof chainId === 'number', 'chainId must be a number');\n\n    if (!getSolanaChainInfoById(chainId)) {\n      throw providerErrors.chainDisconnected('The chain is not supported.');\n    }\n\n    const userInfo = userStorage.getUserInfo();\n    if (userInfo) {\n      if (!this.selectedAddress) {\n        // create wallet.\n        await wallet.gen(WalletType.Solana);\n      }\n    }\n\n    this.#chainId = chainId;\n    setCurrentSolanaChainId(chainId);\n    setTimeout(() => this.#events.emit('chainChanged', chainId), 0);\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  async request(data: Partial<RpcInput>): Promise<any> {\n    const result = await solanaApi.request({ ...data, chainId: data.chainId || this.chainId });\n    return result;\n  }\n\n  #sendAnalyticsActive(chainId?: number) {\n    const useInfo = userStorage.getUserInfo();\n    if (useInfo) {\n      try {\n        /* eslint-disable */\n        analyticsActive({\n          chain_id: chainId ?? this.#chainId,\n          identity: useInfo.uuid,\n          login_type: 'particle' as any,\n          action: 'sign' as any,\n          wallet_address: this.selectedAddress!,\n          user_info: JSON.stringify(mapToUserInfo(useInfo)),\n        });\n        /* eslint-enable */\n      } catch (error) {\n        //ignore\n      }\n    }\n  }\n}\n", "import { v4 as uuid } from 'uuid';\nimport globalConfig from '../config';\nimport client from './client';\nimport type { RecentBlockhash, RpcInput, RpcOutput } from './types';\n\nconst solanaApi = {\n  async request<T>(data: Partial<RpcInput>): Promise<T> {\n    const response: RpcOutput<T> = await client\n      .post(\n        '/solana',\n        {\n          ...data,\n          id: data.id || uuid(),\n          jsonrpc: data.jsonrpc || '2.0',\n          chainId: data.chainId || 101,\n        },\n        {\n          headers: {\n            'Auth-Type': 'Basic',\n          },\n          baseURL: globalConfig.env.rpcUrl,\n        }\n      )\n      .then((response) => response.data);\n    return response.result;\n  },\n\n  async getLatestBlockhash(chainId?: number): Promise<string> {\n    const result = await this.request<RecentBlockhash>({\n      chainId,\n      method: 'getLatestBlockhash',\n      params: [\n        {\n          commitment: 'finalized',\n        },\n      ],\n    });\n    return result.value.blockhash;\n  },\n};\n\nexport default solanaApi;\n", "import type { Transaction, VersionedTransaction } from '@solana/web3.js';\n\nexport const isLegacyTransaction = (transaction: Transaction | VersionedTransaction): transaction is Transaction => {\n  const version = (transaction as VersionedTransaction).version;\n  return version == null;\n};\n", "import sha256 from 'crypto-js/sha256.js';\nimport type { AuthType } from '../api/authType';\nimport pnApi from '../api/pnApi';\nimport {\n  mapToUserInfo,\n  type CaptchaRequest,\n  type DeviceInfo,\n  type LoginAccount,\n  type LoginBindRequest,\n  type LoginBindThirdpartyRequest,\n  type OriginalUserInfo,\n  type SecurityAccount,\n  type UserInfo,\n} from '../api/types';\nimport globalConfig from '../config';\nimport { userStorage } from '../storage';\nimport { AuthCoreEvent } from '../types';\nimport events from '../utils/eventUtils';\nimport { check, requireNotNullish } from '../utils/validate';\nimport { checkMasterPassword, hasLocalKey, setupMasterPassword } from './masterPassword';\n\n/**\n * get all login bind accounts\n * @returns login accounts\n */\nexport const getLoginBindAccounts = async (): Promise<LoginAccount[]> => {\n  const result = await pnApi.getLoginBindings();\n  return result;\n};\n\n/**\n * check phone or email whether has been bound login account\n * @param params phone or email\n * @returns true if has been bound\n */\nexport const checkHasBoundLoginPhoneOrEmail = async (\n  params: { phone: string } | { email: string }\n): Promise<boolean> => {\n  const result = await pnApi.loginBindingsCheck(params);\n  return result;\n};\n\n/**\n * bind login account, phone or email or social account.\n * @param params binding account\n * @returns latest user info\n */\nexport const bindLoginAccount = async (params: LoginBindRequest | LoginBindThirdpartyRequest): Promise<UserInfo> => {\n  const userInfo = requireNotNullish(userStorage.getUserInfo(), 'Please connect AuthCore first!');\n  let result: OriginalUserInfo;\n  if ('phone' in params && params.phone) {\n    result = await pnApi.loginBindings(params);\n  } else if ('email' in params && params.email) {\n    result = await pnApi.loginBindings(params);\n  } else if ('provider' in params && params.provider) {\n    result = await pnApi.loginBindingsThirdparty(params);\n  } else {\n    throw new Error('invalid bind login account param');\n  }\n\n  const latestUserInfo = { ...userInfo, ...result };\n  userStorage.setUserInfo(latestUserInfo);\n  return mapToUserInfo(latestUserInfo);\n};\n\n/**\n * request phone or email captcha before bind security account\n * @param data phone or email\n * @returns true if success\n */\nexport const getBindSecurityAccounCaptcha = async (data: CaptchaRequest): Promise<boolean> => {\n  const result = await pnApi.sendSecurityAccountsCode(data);\n  return result;\n};\n\n/**\n * bind security account, phone or email.\n * @param data phone or email and code\n * @returns security account\n */\nexport const bindSecurityAccount = async (\n  data: { phone: string; code: string } | { email: string; code: string }\n): Promise<SecurityAccount> => {\n  const result = await pnApi.bindSecurityAccount(data);\n  userStorage.updateSecurityAccount(result);\n  return result;\n};\n\n/**\n * get security account captcha\n * @param params security account type\n * @returns true if success\n */\nexport const getSecurityAccountCaptcha = async (\n  verifyCodeMethod: AuthType.email | AuthType.phone\n): Promise<boolean> => {\n  const result = await pnApi.getSecurityAccountCode(verifyCodeMethod);\n  return result;\n};\n\n/**\n * get security account verify token\n * @param params security account type and code\n * @returns token\n */\nexport const getSecurityAccountToken = async (params: {\n  verifyCodeMethod: AuthType.email | AuthType.phone;\n  code: string;\n}): Promise<string> => {\n  const result = await pnApi.getSecurityAccountToken(params);\n  return result;\n};\n\n/**\n * whether the user has payment password\n * @returns true or false.\n */\nexport const hasPaymentPassword = (): boolean => {\n  return userStorage.hasPaymentPassword();\n};\n\nfunction hashPassword(pwd: string): string {\n  const userInfo = userStorage.getUserInfo();\n  if (!userInfo) {\n    throw new Error('Please connect AuthCore first!');\n  }\n  return sha256(userInfo.uuid + pwd)\n    .toString()\n    .toLowerCase();\n}\n\n/**\n * set payment password\n * @param password payment password, plaintext\n * @param verifyCodeMethod security account verify type\n * @param code security account verify code\n * @returns security account\n */\nexport const setPaymentPassword = async ({\n  password,\n  verifyCodeMethod,\n  code,\n}: {\n  password: string;\n  verifyCodeMethod: AuthType.email | AuthType.phone;\n  code: string;\n}): Promise<SecurityAccount> => {\n  const result = await pnApi.setPaymentPassword({ password: hashPassword(password), verifyCodeMethod, code });\n  userStorage.updateSecurityAccount(result);\n  return result;\n};\n\n/**\n * update payment password\n * @param password new payment password, plaintext\n * @param oldPassword old payment password, plaintext\n * @returns security account\n */\nexport const updatePaymentPassword = async ({\n  password,\n  oldPassword,\n}: {\n  password: string;\n  oldPassword: string;\n}): Promise<SecurityAccount> => {\n  const result = await pnApi.updatePaymentPassword({\n    password: hashPassword(password),\n    oldPassword: hashPassword(oldPassword),\n  });\n  userStorage.updateSecurityAccount(result);\n  return result;\n};\n\n/**\n * verify payment password\n * @param password payment password\n * @returns token\n * @throws error if password is incorrect\n */\nexport const verifyPaymentPassword = async (password: string) => {\n  const result = await pnApi.verifyPaymentPassword(hashPassword(password));\n  globalConfig.paymentToken = result;\n};\n\n/**\n * delete payment password\n * @param password payment password\n * @returns security account\n */\nexport const deletePaymentPassword = async (password: string): Promise<SecurityAccount> => {\n  const result = await pnApi.deletePaymentPassword(hashPassword(password));\n  userStorage.updateSecurityAccount(result);\n  return result;\n};\n\n/**\n * whether the user has master password\n * @returns true or false.\n */\nexport const hasMasterPassword = (): boolean => {\n  return userStorage.hasMasterPassword();\n};\n\n/**\n * check whether need restore wallet\n * @returns true if need restore wallet\n */\nexport const isNeedRestoreWallet = (): boolean => {\n  return hasMasterPassword() && !hasLocalKey();\n};\n\n/**\n * restore wallet if need, please use {@link isNeedRestoreWallet} to check first.\n * @param masterPassword master password, plaintext\n * @returns true if success\n */\nexport const restoreWallet = async (masterPassword: string): Promise<boolean> => {\n  const result = await verifyMasterPassword(masterPassword);\n  if (result) {\n    events.emit(AuthCoreEvent.ParticleWalletRestored);\n  }\n  return result;\n};\n\n/**\n * set master password\n * @param masterPassword master password, plaintext\n * @returns true if success\n */\nexport const setMastersPassword = async (masterPassword: string): Promise<boolean> => {\n  if (hasMasterPassword()) {\n    check(hasLocalKey(), 'Please restore wallet first!');\n  }\n  const result = await setupMasterPassword(masterPassword);\n  return result;\n};\n\n/**\n * check master password whether is correct\n * @param masterPassword master password, plaintext\n * @returns true if correct\n */\nexport const verifyMasterPassword = async (masterPassword: string): Promise<boolean> => {\n  try {\n    await checkMasterPassword(masterPassword);\n  } catch (error) {\n    if ((error as Error)?.message === 'Master password decryption error') {\n      return false;\n    } else {\n      throw error;\n    }\n  }\n  return true;\n};\n\nexport const getSecurityAccount = (): SecurityAccount => {\n  const info = requireNotNullish(userStorage.getSecurityAccount(), 'Please connect first!');\n  return info;\n};\n\n/**\n * get all authorization dapps\n * @returns dapps infos\n */\nexport const getAuthorizationDApps = async (): Promise<DeviceInfo[]> => {\n  const result = await pnApi.getAuthorizations();\n  return result;\n};\n\n/**\n * delete authorization dapp\n * @param projectAppUuid dapp project app uuid\n * @returns true if success\n */\nexport const deleteAuthorizationDApp = async (projectAppUuid: string): Promise<boolean> => {\n  const result = await pnApi.deleteAuthorization(projectAppUuid);\n  return result;\n};\n"],
  "mappings": "yYAGO,IAAKA,QACVA,IAAA,YAAc,OAAd,cACAA,IAAA,WAAa,OAAb,aACAA,IAAA,mBAAqB,OAArB,qBACAA,IAAA,aAAe,OAAf,eACAA,IAAA,SAAW,OAAX,WAEAA,IAAA,YAAc,OAAd,cACAA,IAAA,WAAa,OAAb,aAEAA,IAAA,sBAAwB,OAAxB,wBACAA,IAAA,qBAAuB,OAAvB,uBAXUA,QAAA,IAeL,SAASC,GAAWC,EAAmB,CAC5C,OAAOA,GAAOA,EAAI,SAAW,OAAOA,EAAI,YAAe,UAAYA,EAAI,WAAa,CACtF,CAGO,SAASC,GAAWD,EAAmB,CAC5C,OAAOA,GAAOA,EAAI,SAAW,OAAOA,EAAI,MAAS,QACnD,CCzBO,IAAKE,QACVA,EAAA,MAAQ,QACRA,EAAA,MAAQ,QACRA,EAAA,SAAW,WACXA,EAAA,OAAS,SACTA,EAAA,MAAQ,QACRA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,OAAS,SACTA,EAAA,OAAS,SACTA,EAAA,UAAY,YACZA,EAAA,SAAW,WAGXA,EAAA,IAAM,MACNA,EAAA,SAAW,WAfDA,QAAA,IAoCCC,GAAoBC,GACxB,CACL,WACA,SACA,QACA,UACA,UACA,SACA,SACA,YACA,UACF,EAAE,SAASA,CAAQ,EC6Ed,IAAKC,QACVA,IAAA,QAAU,GAAV,UACAA,IAAA,kDAAoD,GAApD,oDACAA,IAAA,0CAA4C,GAA5C,4CAHUA,QAAA,ICvEL,IAAKC,QACVA,EAAA,+BAAiC,iCADvBA,QAAA,IAIAC,QACVA,EAAA,uBAAyB,kCACzBA,EAAA,qBAAuB,gCACvBA,EAAA,iBAAmB,4BACnBA,EAAA,SAAW,oBACXA,EAAA,gCAAkC,2CALxBA,QAAA,IAQAC,QACVA,EAAA,eAAiB,kBACjBA,EAAA,eAAiB,iBACjBA,EAAA,cAAgB,gBAChBA,EAAA,eAAiB,kBACjBA,EAAA,gBAAkB,mBAClBA,EAAA,sBAAwB,wBACxBA,EAAA,qBAAuB,uBACvBA,EAAA,oBAAsB,sBACtBA,EAAA,MAAQ,QATEA,QAAA,IAkKAC,QACVA,EAAA,OAAS,SACTA,EAAA,IAAM,MACNA,EAAA,OAAS,SACTA,EAAA,KAAO,OAJGA,QAAA,IC9NL,IAAMC,EAAiBC,GAAiD,CAE7E,GAAM,CAAE,QAAAC,EAAS,eAAAC,EAAgB,QAAAC,KAAYC,CAAS,EAAIJ,EAC1D,MAAO,CACL,GAAGI,EACH,QAASD,EAAQ,IAAKE,GAAW,CAE/B,GAAM,CAAE,KAAAC,EAAM,WAAAC,EAAY,eAAAC,CAAe,EAAIH,EAE7C,MAAO,CAAE,KAAAC,EAAM,WAAAC,EAAY,eAAAC,CAAe,CAC5C,CAAC,CACH,CACF,ECjBO,IAAMC,EAAQ,CAAIC,EAAcC,IAAyB,CAC9D,GAAI,CAACD,EACH,MAAIC,EACE,OAAOA,GAAe,SAClB,IAAI,MAAMA,CAAU,EAEtBA,EAEA,IAAI,MAAM,6BAA6B,CAGnD,EAEaC,EAAoB,CAAIC,EAAMF,IAAyC,CAClF,GAAuBE,GAAM,KAC3B,OAAOA,EAET,MAAIF,EACE,OAAOA,GAAe,SAClB,IAAI,MAAMA,CAAU,EAEpBA,EAGJ,IAAI,MAAM,4BAA4B,CAC9C,EAEO,SAASG,EAAUD,EAAqB,CAC7C,OAA0BA,GAAM,IAClC,CC7BO,IAAKE,QACVA,EAAA,uBAAyB,yBACzBA,EAAA,qBAAuB,uBACvBA,EAAA,oBAAsB,sBACtBA,EAAA,uBAAyB,yBACzBA,EAAA,gBAAkB,kBAClBA,EAAA,sBAAwB,wBACxBA,EAAA,uBAAyB,yBAPfA,QAAA,ICML,IAAKC,QACVA,EAAA,gBAAkB,qCADRA,QAAA,ICNL,IAAKC,QACVA,EAAA,gBAAkB,kBAClBA,EAAA,uBAAyB,yBACzBA,EAAA,YAAc,cACdA,EAAA,oBAAsB,sBAJZA,QAAA,IAOAC,QAEVA,EAAA,mBAAqB,sBACrBA,EAAA,QAAU,WACVA,EAAA,iBAAmB,oBAGnBA,EAAA,mBAAqB,sBACrBA,EAAA,YAAc,eACdA,EAAA,WAAa,cACbA,EAAA,mBAAqB,sBACrBA,EAAA,iBAAmB,oBACnBA,EAAA,mBAAqB,uBACrBA,EAAA,mBAAqB,uBACrBA,EAAA,mBAAqB,uBACrBA,EAAA,aAAe,gBAEfA,EAAA,uBAAyB,4BACzBA,EAAA,iBAAmB,qBAEnBA,EAAA,0BAA4B,6BAC5BA,EAAA,uBAAyB,0BArBfA,QAAA,ICPL,IAAKC,QACVA,EAAA,IAAM,YACNA,EAAA,OAAS,SAFCA,QAAA,ICQL,IAAKC,QACVA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KAHKA,QAAA,ICRZ,OAAS,MAAAC,OAAyD,8BCAlE,OAAS,MAAMC,OAAY,OCA3B,OAAOC,OAAS,mBAChB,OAAOC,OAAU,wBACjB,OAAOC,OAAS,mBCFT,IAAMC,EAAW,IAAM,OAAO,QAAW,YDAhD,IAAAC,GAAAC,EAAAC,EAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAQMC,GAAN,KAAuB,CAAvB,cAOEC,EAAA,KAAAP,IAMAO,EAAA,KAAAL,IAOAK,EAAA,KAAAH,IAnBAG,EAAA,KAAAV,GAAc,uBAEdU,EAAA,KAAAT,EAAS,IAETS,EAAA,KAAAR,EAAa,IAuBb,KAAKS,EAAe,CAClBC,EAAA,KAAKX,EAASU,GAEd,IAAIE,EAAW,mBACX,OAAO,QAAW,cACpBA,EAAW,OAAO,SAAS,QAE7BD,EAAA,KAAKV,EAAaY,GAAI,GAAGD,KAAYE,EAAA,KAAKd,IAAQ,EAAE,SAAS,EAAE,YAAY,EAC7E,CAEA,OAAc,CACZ,IAAMe,EAAuB,CAAC,EACxBC,EAAS,aAAa,OAC5B,QAASC,EAAI,EAAGA,EAAID,EAAQC,IAAK,CAC/B,IAAMC,EAAM,aAAa,IAAID,CAAC,EAC1BC,GAAA,MAAAA,EAAK,WAAWJ,EAAA,KAAKf,MACvBgB,EAAW,KAAKG,CAAG,CAEvB,CACAH,EAAW,QAASG,GAAQ,aAAa,WAAWA,CAAG,CAAC,CAC1D,CAEA,QAAQA,EAA4B,CAClC,GAAI,OAAO,QAAW,YACpB,OAAO,KAET,IAAMC,EAAQ,aAAa,QAAQ,KAAK,cAAcD,CAAG,CAAC,EAC1D,OAAIC,GAAS,MAAQA,EAAM,OAAS,EAC3BC,EAAA,KAAKd,GAAAC,IAAL,UAAcY,GAEhBA,CACT,CAEA,WAAWD,EAAa,CACtB,aAAa,WAAW,KAAK,cAAcA,CAAG,CAAC,CACjD,CAEA,QAAQA,EAAaC,EAAe,CAClC,GAAIE,EAAS,EACX,OAEF,IAAIC,EAAcH,EACdA,EAAM,OAAS,IACjBG,EAAcF,EAAA,KAAKhB,GAAAC,IAAL,UAAcc,IAE9B,aAAa,QAAQ,KAAK,cAAcD,CAAG,EAAGI,CAAW,CAC3D,CAEA,cAAcJ,EAAqB,CACjC,OAAOJ,EAAA,KAAKf,IAAcqB,EAAA,KAAKlB,GAAAC,IAAL,UAAce,EAC1C,CACF,EA9EEnB,GAAA,YAEAC,EAAA,YAEAC,EAAA,YAEAC,GAAA,YAAAC,GAAQ,SAACe,EAAqB,CAC5B,OAAAK,EAAMT,EAAA,KAAKd,GAAQ,6BAA6B,EAEzCa,GAAI,GAAGC,EAAA,KAAKd,MAAUkB,GAAK,EAAE,SAAS,EAAE,YAAY,CAC7D,EAEAd,GAAA,YAAAC,GAAQ,SAACmB,EAA2B,CAClC,OAAAD,EAAMT,EAAA,KAAKb,GAAY,6BAA6B,EAEjCwB,GAAI,QAAQD,EAAWV,EAAA,KAAKb,EAAU,EAAE,SAAS,CAEtE,EAEAK,GAAA,YAAAC,GAAQ,SAACmB,EAA4B,CACnC,OAAAH,EAAMT,EAAA,KAAKb,GAAY,6BAA6B,EAEtCwB,GAAI,QAAQC,EAAYZ,EAAA,KAAKb,EAAU,EAC7B,SAAS0B,EAAI,CAEvC,EAsDF,IAAMC,GAAmB,IAAIpB,GAEtBqB,EAAQD,GE1Ff,OAAOE,OAAkB,SAEzB,IAAMC,GAAS,IAAID,GACnBC,GAAO,gBAAgB,GAAG,EAE1B,IAAOC,EAAQD,GCGf,IAAME,GAAc,CAClB,YAAYC,EAAoC,CAC9C,IAAMC,EAAgB,KAAK,YAAY,EACnCD,EACFE,EAAQ,QAAQ,YAAa,KAAK,UAAUF,CAAI,CAAC,EAEjDE,EAAQ,WAAW,WAAW,EAE5B,KAAK,UAAUD,CAAa,IAAM,KAAK,UAAUD,CAAI,GACvDG,EAAO,uBAAoCH,EAAOI,EAAcJ,CAAI,EAAI,MAAS,CAErF,EAEA,aAA4C,CAC1C,IAAMA,EAAOE,EAAQ,QAAQ,WAAW,EACxC,GAAIF,EACF,OAAO,KAAK,MAAMA,CAAI,CAG1B,EAEA,SAAmB,CACjB,OAAO,QAAQ,KAAK,YAAY,CAAC,CACnC,EAEA,cAAmC,CACjC,IAAMA,EAAO,KAAK,YAAY,EAC9B,GAAIA,EACF,OAAOA,EAAK,KAGhB,EAEA,kBAA8C,CAC5C,IAAMA,EAAO,KAAK,YAAY,EAC9B,GAAIA,EACF,OAAOA,EAAK,cAGhB,EAEA,oBAAkD,CAChD,IAAMA,EAAO,KAAK,YAAY,EAC9B,GAAIA,EACF,OAAOA,EAAK,gBAGhB,EAEA,kBAAkBK,EAA6B,CAC7C,aAAa,QAAQ,iCAAkCA,IAAa,YAAc,UAAYA,CAAQ,CACxG,EAEA,mBAAqC,CACnC,OAAI,OAAO,QAAW,YACP,aAAa,QAAQ,gCAAgC,EAG7D,IACT,EAEA,aAAaL,EAAkB,CAC7B,IAAMM,EAAW,KAAK,YAAY,EAClC,GAAIA,GACF,QAASC,EAAI,EAAGA,EAAID,EAAS,QAAQ,OAAQC,IAC3C,GAAID,EAAS,QAAQC,GAAG,OAASP,EAAK,KAAM,CAC1CM,EAAS,QAAQC,GAAKP,EACtB,KAAK,YAAYM,CAAQ,EACzB,KACF,EAGN,EAEA,oBAAoBE,EAAuB,CACzC,IAAMF,EAAW,KAAK,YAAY,EAC9BA,IAEFA,EAAS,eAAiBE,EAC1B,KAAK,YAAYF,CAAQ,EAE7B,EAEA,sBAAsBG,EAA0B,CAC9C,IAAMH,EAAW,KAAK,YAAY,EAC9BA,IAEFA,EAAS,iBAAmBG,EAC5B,KAAK,YAAYH,CAAQ,EAE7B,EAEA,oBAA8B,CApGhC,IAAAI,EAqGI,OAAO,SAAQA,EAAA,KAAK,mBAAmB,IAAxB,YAAAA,EAA2B,wBAAwB,CACpE,EAEA,mBAA6B,CAxG/B,IAAAA,EAyGI,OAAO,SAAQA,EAAA,KAAK,mBAAmB,IAAxB,YAAAA,EAA2B,uBAAuB,CACnE,EAEA,cAAuC,CACrC,IAAMJ,EAAW,KAAK,YAAY,EAClC,OAAOA,GAAA,YAAAA,EAAU,QAAQ,KAAMK,GAAWA,EAAO,yBACnD,EAEA,iBAA0C,CACxC,IAAML,EAAW,KAAK,YAAY,EAClC,OAAOA,GAAA,YAAAA,EAAU,QAAQ,KAAMK,GAAWA,EAAO,sBACnD,CACF,EAEOC,EAAQb,GC7GR,IAAMc,GAAuB,IAC3B,OAAOC,EAAiB,QAAQ,cAAwB,CAAC,EAGrDC,GAAwBC,GAAe,CAClDF,EAAiB,QAAQ,eAA0BE,EAAG,SAAS,CAAC,CAClE,EAEaC,GAA0B,IAC9B,OAAOH,EAAiB,QAAQ,iBAA2B,CAAC,EAGxDI,GAA2BF,GAAe,CACrDF,EAAiB,QAAQ,kBAA6BE,EAAG,SAAS,CAAC,CACrE,ELxBA,IAAAG,EAAAC,GAAAC,GAAAC,GAcMC,GAAN,KAAmB,CAAnB,cACEC,EAAA,KAAAL,EAAA,QAEA,iBAAc,GAIdK,EAAA,KAAAJ,GAAe,CACb,cAAe,YACf,cAAe,YACf,QAAS,qCACT,OAAQ,qCACR,SAAU,qCACZ,GAEAI,EAAA,KAAAH,GAAmB,CACjB,cAAe,mBACf,cAAe,iCACf,QAAS,+BACT,OAAQ,+BACR,SAAU,+BACZ,GAEAG,EAAA,KAAAF,GAAsB,CACpB,cAAe,mBACf,cAAe,iCACf,QAAS,+BACT,OAAQ,+BACR,SAAU,+BACZ,GAEA,KAAKG,EAA0B,CAC7BC,EAAA,KAAKP,EAAeM,GACpB,KAAK,YAAc,EACrB,CAEA,IAAI,aAA2B,CAC7B,OAAAE,EAAMC,EAAA,KAAKT,GAAc,6BAA6B,EAE/CS,EAAA,KAAKT,EACd,CAEA,IAAI,SAAU,CAEZ,MAAO,mBACT,CAEA,IAAI,UAAW,CACb,GAAI,OAAO,QAAW,YACpB,OAAOU,GAAK,EACP,CACL,IAAMC,EAAW,eACbC,EAAWC,EAAiB,QAAQF,CAAQ,EAChD,OAAKC,IACHA,EAAWF,GAAK,EAChBG,EAAiB,QAAQF,EAAUC,CAAQ,GAEtCA,CACT,CACF,CAEA,IAAI,KAAM,CACR,MAAI,CAACE,EAAS,GAAK,OAAO,2BAA6B,cAC9CL,EAAA,KAAKR,IACH,CAACa,EAAS,GAAK,OAAO,2BAA6B,UACrDL,EAAA,KAAKP,IAELO,EAAA,KAAKN,GAEhB,CACF,EArEEH,EAAA,YAMAC,GAAA,YAQAC,GAAA,YAQAC,GAAA,YAiDF,IAAMY,GAAe,IAAIX,GAClBY,EAAQD,GD7Ef,IAAME,GAAQ,IAAM,CAClB,GAAI,CACG,OAAO,sBACV,OAAO,oBAAsB,IAAIC,GAAG,CAElC,eAAgBC,EAAa,IAAI,QACjC,UAAWA,EAAa,SACxB,YAAaA,EAAa,QAC1B,eAAgB,CACd,aAAcA,EAAa,YAAY,UACvC,YAAaA,EAAa,YAAY,UACtC,iBAAkBA,EAAa,YAAY,KAC7C,CAEF,CAAC,EAEL,MAAE,CAEF,CACA,OAAO,OAAO,mBAChB,EAEaC,GAAmBC,GAA8B,CAhC9D,IAAAC,EAiCOC,EAAS,IACZD,EAAAL,GAAM,IAAN,MAAAK,EAAS,QAAQD,EAErB,EAEaG,GAAmBH,GAA6B,CAtC7D,IAAAC,EAuCOC,EAAS,IACZD,EAAAL,GAAM,IAAN,MAAAK,EAAS,OAAOD,EAEpB,EO1CA,OAAOI,OAAS,uBAChB,OAAOC,OAAe,sBCDtB,IAAMC,GAAW,6DACXC,GAAeD,GAAS,MAAM,EAAE,EAAE,OAAO,CAACE,EAA8BC,EAAGC,KAC/EF,EAAIC,GAAKC,EACFF,GACN,CAAC,CAAC,EAECG,GAAO,GAEAC,GAAYC,GAA2B,CAClD,GAAIA,EAAO,SAAW,EAAG,MAAO,GAEhC,IAAMC,EAAS,CAAC,CAAC,EAEjB,QAASJ,EAAI,EAAGA,EAAIG,EAAO,OAAQH,IAAK,CACtC,QAASK,EAAI,EAAGA,EAAID,EAAO,OAAQC,IAAKD,EAAOC,KAAO,EAEtDD,EAAO,IAAMD,EAAOH,GACpB,IAAIM,EAAQ,EAEZ,QAASD,EAAI,EAAGA,EAAID,EAAO,OAAQ,EAAEC,EACnCD,EAAOC,IAAMC,EACbA,EAASF,EAAOC,GAAKJ,GAAQ,EAC7BG,EAAOC,IAAMJ,GAGf,KAAOK,GACLF,EAAO,KAAKE,EAAQL,EAAI,EACxBK,EAASA,EAAQL,GAAQ,CAE7B,CAEA,QAASD,EAAI,EAAGG,EAAOH,KAAO,GAAKA,EAAIG,EAAO,OAAS,EAAGH,IAAKI,EAAO,KAAK,CAAC,EAE5E,MAAO,CAAC,GAAGA,CAAM,EACd,QAAQ,EACR,IAAKG,GAAUX,GAASW,EAAM,EAC9B,KAAK,EAAE,CACZ,EAEaC,GAAYC,GAA2B,CAClD,GAAIA,EAAK,SAAW,EAAG,MAAO,CAAC,EAE/B,IAAMC,EAAQ,CAAC,CAAC,EAEhB,QAASV,EAAI,EAAGA,EAAIS,EAAK,OAAQT,IAAK,CACpC,IAAMW,EAAIF,EAAKT,GAEf,GAAI,EAAEW,KAAKd,IAAe,MAAM,IAAI,MAAM,sBAAsB,EAEhE,QAASQ,EAAI,EAAGA,EAAIK,EAAM,OAAQL,IAAKK,EAAML,IAAMJ,GAEnDS,EAAM,IAAMb,GAAac,GACzB,IAAIL,EAAQ,EAEZ,QAASD,EAAI,EAAGA,EAAIK,EAAM,OAAQ,EAAEL,EAClCK,EAAML,IAAMC,EACZA,EAAQI,EAAML,IAAM,EACpBK,EAAML,IAAM,IAGd,KAAOC,GACLI,EAAM,KAAKJ,EAAQ,GAAI,EACvBA,IAAU,CAEd,CAEA,QAASN,EAAI,EAAGS,EAAKT,KAAO,KAAOA,EAAIS,EAAK,OAAS,EAAGT,IAAKU,EAAM,KAAK,CAAC,EAEzE,OAAOA,EAAM,QAAQ,CACvB,EDjEA,IAAME,GAAUC,GAAgBC,GAAI,UAAUC,GAAUD,GAAI,MAAMD,CAAG,CAAC,CAAC,EAE1DG,GAAWF,GAAwB,CAC9C,IAAMG,EAAO,KAAKH,EAAI,UAAU,CAAC,IAE3BI,EADeN,GAAOA,GAAOK,CAAI,CAAC,EACV,UAAU,EAAG,CAAC,EACtCE,EAAU,OAAO,KAAKF,EAAOC,EAAU,KAAK,EAElD,OAAOE,GAASD,CAAO,CACzB,EAEaE,GAASC,GAAgC,CACpD,GAAIA,EAAY,QAAU,EAAG,MAAM,IAAI,MAAM,0BAA0B,EAEvE,IAAIH,EAAU,OAAO,KAAKI,GAASD,CAAW,CAAC,EAAE,SAAS,KAAK,EAEzDJ,EAAWC,EAAQ,UAAUA,EAAQ,OAAS,EAAGA,EAAQ,MAAM,EACrEA,EAAUA,EAAQ,UAAU,EAAGA,EAAQ,OAAS,CAAC,EAEjD,IAAMK,EAAYZ,GAAOA,GAAOO,CAAO,CAAC,EAAE,UAAU,EAAG,CAAC,EAExD,GAAI,GAAGD,KAAe,GAAGM,IAAa,MAAO,KAAKL,EAAQ,UAAU,CAAC,IAErE,MAAM,IAAI,MAAM,0BAA0B,CAC5C,EE3BA,OAAS,eAAAM,OAAmB,OAIrB,IAAMC,GAAmB,sEAEnBC,GAASC,GAAY,CAChC,GAAI,IACJ,KAAM,SACN,eAAgB,CACd,SAAU,EACV,KAAM,aACN,OAAQ,KACV,EACA,QAAS,CACP,QAAS,CACP,KAAM,CAAC,qCAAqC,CAC9C,CACF,EACA,eAAgB,CACd,QAAS,CAAE,KAAM,WAAY,IAAK,oBAAqB,CACzD,EACA,OAAQ,CACN,UAAW,QACb,CACF,CAAC,EAOGC,GAAyC,IAAM,CAAC,EAE7C,SAASC,GAAiBC,EAAgC,CAC/DF,GAAaE,CACf,CAEO,SAASC,GAAOC,EAAyC,CAC9D,IAAIC,EACJ,OAAI,OAAOD,GAAU,UAAY,OAAOA,GAAU,SAChDC,EAAYC,EAAoB,OAAOF,CAAK,CAAC,EAE7CC,EAAYC,EAAoBF,EAAM,EAAE,EAEnCC,IAAc,QAAaA,EAAU,KAAK,YAAY,IAAM,MACrE,CAIO,SAASE,GAAaC,EAAqC,CAChE,GAAM,CAAE,GAAAC,CAAG,EAAID,EACf,OAAOE,GAAW,EAAE,KAAMC,GAAiBA,EAAE,KAAOF,CAAE,CACxD,CAEO,IAAMG,EAAgBJ,GAAuC,CAxDpE,IAAAK,EAyDE,QAAQA,EAAAL,GAAA,YAAAA,EAAO,SAAP,YAAAK,EAAe,YAA6C,KACtE,EAEaC,GAAe,IACnBJ,GAAW,EAAE,OAAQC,GAAiBC,EAAaD,CAAC,IAAM,KAAK,EAG3DI,GAAkB,IACtBL,GAAW,EAAE,OAAQC,GAAiBC,EAAaD,CAAC,IAAM,QAAQ,EAG9DK,EAAuBP,GAAe,CApEnD,IAAAI,EAqEE,OAAOA,EAAAC,GAAa,IAAb,YAAAD,EAAgB,KAAMF,GAAiBA,EAAE,KAAOF,EACzD,EAEaQ,GAAgBT,GAAqC,CAxElE,IAAAK,EAAAK,EAyEE,GAAIV,GAAS,OAAOA,GAAU,UAAY,QAAQK,EAAAL,GAAA,YAAAA,EAAqB,SAArB,YAAAK,EAA6B,OAAS,SACtF,OAAQK,EAAAV,EAAoB,SAApB,YAAAU,EAA4B,KAEtC,IAAMC,EAAU,OAAOX,GAAU,SAAWA,EAAQA,EAAM,GAC1D,OAAIY,GAAcD,CAAO,EAChB,uDAAuDA,QAEzD,oDAAoDA,OAC7D,EAEaE,GAAyBC,GAChC,iBAAkBA,GAAQ,yBAA0BA,EAM7CC,GAA0Bd,GAAe,CA1FtD,IAAAI,EA2FE,OAAOA,EAAAE,GAAgB,IAAhB,YAAAF,EAAmB,KAAMF,GAAiBA,EAAE,KAAOF,EAC5D,EAEaW,GAAiBZ,GAA0B,CACtD,IAAMC,EAAK,OAAOD,GAAU,SAAWA,EAAQA,EAAM,GACrD,OAAOC,IAAO,KAAOA,IAAO,KAAOA,IAAO,GAC5C,EC/FO,IAAMe,GAAgB,CAC3B,oBAAoBC,EAAsC,CACxD,OAAIA,yBAA4CA,gCAErCA,oCAKb,EAEA,OAAOA,EAAyB,CAC9B,OAAOA,0BAA4CA,+BACrD,EAEA,kBAAkBA,EAAyB,CACzC,OAAOA,4BAA8CA,uBACvD,CACF,ECpBA,OAAOC,OAAe,YCCtB,OAAOC,OAAW,QAClB,OAAOC,OAAY,sBACnB,OAAOC,OAAe,6BACtB,OAAS,MAAMC,OAAY,OAQ3B,IAAMC,GAASC,GAAM,OAAO,CAC1B,QAASC,EAAa,IAAI,QAC1B,QAAS,IACT,eAAgB,SAAUC,EAAQ,CAChC,OAAOA,GAAU,KAAOA,GAAU,GACpC,EACA,gBAAiB,EACnB,CAAC,EAGDH,GAAO,aAAa,QAAQ,IAAKI,GAAW,CAtB5C,IAAAC,EAAAC,EAwBE,GADiBF,EAAO,SAAWA,EAAO,QAAQ,eAAiB,OAEjE,OAAOA,EAET,IAAIG,EAAS,GAEb,GADkBH,EAAO,SAAWA,EAAO,QAAQ,eAAiB,SAElE,GAAI,CAACI,GAAkBJ,EAAO,OAAO,EAAG,CAClCA,EAAO,UAAYF,EAAa,IAAI,UACtCE,EAAO,QAAUF,EAAa,IAAI,SAEpC,IAAMO,EAAO,CACX,SAAUP,EAAa,IAAI,cAC3B,SAAUA,EAAa,IAAI,aAC7B,EACAK,EAASG,GAAOD,EAAK,SAAWA,EAAK,QAAQ,EAC1C,SAAS,EACT,YAAY,EACfL,EAAO,KAAOK,CAChB,MACK,CAEL,IAAME,EAAWC,EAAY,YAAY,EACzC,GAAI,CAACD,EACH,MAAM,IAAI,MAAM,gCAAgC,EAElD,IAAME,EAAQF,EAAS,MACvBJ,EAASI,EAAS,QAClBP,EAAO,QAAQ,cAAgB,UAAUS,IACrCT,EAAO,UAAYF,EAAa,IAAI,UACtCE,EAAO,QAAUF,EAAa,IAAI,QAEtC,CAMA,GAJKE,EAAO,SACVA,EAAO,OAAS,CAAC,GAGfI,GAAkBJ,EAAO,OAAO,EAClCA,EAAO,OAAS,CACd,GAAGA,EAAO,OACV,UAASC,EAAAD,EAAO,OAAP,YAAAC,EAAa,UAAW,EACjC,YAAaH,EAAa,YAAY,UACtC,WAAYA,EAAa,YAAY,UACrC,QAAQI,EAAAF,EAAO,OAAP,YAAAE,EAAa,MACvB,EACA,OAAOF,EAAO,KAAK,YACd,CACL,IAAMU,EAAoB,KAAK,MAAM,IAAI,KAAK,EAAE,QAAQ,EAAI,GAAI,EAC1DC,EAAoBC,GAAK,EAC/BZ,EAAO,OAAS,CACd,GAAGA,EAAO,OACV,UAAAU,EACA,WAAYC,EACZ,UAAWb,EAAa,SACxB,YAAaA,EAAa,QAC1B,aAAcA,EAAa,YAAY,UACvC,mBAAoBA,EAAa,YAAY,UAC7C,iBAAkBA,EAAa,YAAY,KAC7C,EAEA,IAAMe,EAAS,CAAE,GAAGb,EAAO,MAAO,EAC9BA,EAAO,MACT,OAAO,OAAOa,EAAQ,CAAE,GAAGb,EAAO,IAAK,CAAC,EAE1Ca,EAAO,QAAaV,EACpB,IAAMW,EAAMC,GAAUF,CAAM,EAC5Bb,EAAO,OAAO,IAAMM,GAAOQ,CAAG,EAAE,SAAS,EAAE,YAAY,CACzD,CAEA,OAAOd,CACT,CAAC,EAEDJ,GAAO,aAAa,SAAS,IAAKoB,GAAa,CAC7C,IAAMC,EAAOD,EAAS,KACtB,OAAIA,EAAS,OAAS,KAAOA,EAAS,SAAW,IAC3CE,GAAWD,CAAI,GACbA,EAAK,aAAe,QAEtBE,EAAiB,MAAM,EACvB,WAAW,IAAMC,EAAO,8BAA2CH,CAAI,EAAG,CAAC,GAEtE,QAAQ,OAAOA,CAAI,GACjBA,EAAK,OAASI,GAAWJ,EAAK,KAAK,EACrC,QAAQ,OAAOA,EAAK,KAAK,EAE3B,QAAQ,QAAQD,CAAQ,EAK1B,QAAQ,OAAO,CACpB,KAAMA,EAAS,OACf,QAASA,EAAS,YAAc,gBAChC,KAAMA,EAAS,IACjB,CAAC,CACH,CAAC,EAED,IAAMZ,GAAqBkB,GAClBA,GAAA,YAAAA,EAAS,SAAS,OAGpBC,EAAQ3B,GC3Gf,IAAM4B,GAAQ,CAKZ,MAAM,YAAYC,EAAwC,CAMxD,OALiB,MAAMC,EAAO,KAAK,QAASD,EAAM,CAChD,QAAS,CACP,YAAa,OACf,CACF,CAAC,GACe,KAAK,OACvB,EAMA,MAAM,MAAMA,EAA+C,CAOzD,OANiB,MAAMC,EAAO,KAAK,SAAUD,EAAM,CACjD,QAAS,CACP,YAAa,OACf,CACF,CAAC,GACyB,IAE5B,EAGA,MAAM,oBAAoB,CACxB,SAAAE,EACA,eAAAC,CACF,EAG8B,CAc5B,OAbiB,MAAMF,EAAO,KAC5B,oBACA,CACE,SAAAC,EACA,gBAAiBC,CACnB,EACA,CACE,QAAS,CACP,YAAa,OACf,CACF,CACF,GAC0B,IAE5B,EAQA,MAAM,sBAAsBD,EAA0BE,EAAcC,EAA0C,CAe5G,OAdiB,MAAMJ,EAAO,KAC5B,uBACA,CACE,SAAAC,EACA,gBAAiBE,EACjB,MAAAC,CACF,EACA,CACE,QAAS,CACP,YAAa,OACf,CACF,CACF,GAC0B,IAE5B,EAQA,MAAM,qBACJH,EACAI,EACAC,EACAC,EACkC,CAgBlC,OAfiB,MAAMP,EAAO,KAC5B,uBACA,CACE,SAAAC,EACA,aAAcI,EACd,UAAWC,EACX,OAAAC,CACF,EACA,CACE,QAAS,CACP,YAAa,OACf,CACF,CACF,GACiD,IAEnD,EAIA,MAAM,cAAcR,EAAmD,CAErE,OADiB,MAAMC,EAAO,KAAK,kBAAmBD,CAAI,GAC1C,IAClB,EAGA,MAAM,mBAAmBS,EAAiE,CAIxF,OAHiB,MAAMR,EAAO,IAAI,wBAAyB,CACzD,OAAAQ,CACF,CAAC,GACe,KAAK,MACvB,EAGA,MAAM,kBAA4C,CAEhD,OADiB,MAAMR,EAAO,IAAI,iBAAiB,GACnC,IAClB,EAGA,MAAM,mBAAmBQ,EAA0F,CAIjH,OAHiB,MAAMR,EAAO,OAAO,kBAAmB,CACtD,OAAAQ,CACF,CAAC,GACe,KAAK,OACvB,EAGA,MAAM,wBAAwBT,EAA6D,CAKzF,OAJiB,MAAMC,EAAO,KAAK,6BAA8B,CAC/D,GAAGD,EACH,SAAUA,EAAK,QACjB,CAAC,GACe,IAClB,EAGA,MAAM,iBAAmC,CAMvC,OALiB,MAAMC,EAAO,KAAK,yBAA0B,OAAW,CACtE,QAAS,CACP,YAAa,OACf,CACF,CAAC,GACe,KAAK,WACvB,EAGA,MAAM,cAAsC,CA7K9C,IAAAS,EA+KI,OADiB,MAAMT,EAAO,IAAI,WAAUS,EAAAC,EAAY,YAAY,IAAxB,YAAAD,EAA2B,MAAM,GAC7D,IAClB,EAGA,MAAM,QAA2B,CAE/B,OADiB,MAAMT,EAAO,KAAK,SAAS,GAC5B,KAAK,OACvB,EAGA,MAAM,aAAaW,EAAcH,EAAkD,CAEjF,OADiB,MAAMR,EAAO,MAAM,kBAAkBW,IAAQH,CAAM,GACpD,KAAK,OACvB,EAGA,MAAM,cAAuC,CAE3C,IAAMI,GADW,MAAMZ,EAAO,KAAK,gBAAgB,GAC3B,KACxB,OAAAU,EAAY,oBAAoBE,CAAM,EAC/BA,CACT,EAGA,MAAM,yBAAyBb,EAAwC,CACrE,OAAOC,EAAO,KAAK,0BAA2BD,CAAI,EAAE,KAAMc,GAAaA,EAAS,KAAK,OAAO,CAC9F,EAGA,MAAM,oBACJL,EAC0B,CAG1B,OAFiB,MAAMR,EAAO,KAAK,0BAA2BQ,CAAM,GAC5C,IAE1B,EAGA,MAAM,uBAAuBM,EAAqE,CAChG,OAAOd,EACJ,KAAK,iCAAkC,CAEtC,mBAAoBc,CACtB,CAAC,EACA,KAAMD,GAAaA,EAAS,KAAK,OAAO,CAC7C,EAGA,MAAM,wBAAwB,CAC5B,iBAAAC,EACA,KAAAX,CACF,EAGoB,CAClB,OAAOH,EACJ,KAAK,4BAA6B,CAEjC,mBAAoBc,EACpB,KAAAX,CACF,CAAC,EACA,KAAMU,GAAaA,EAAS,KAAK,KAAK,CAC3C,EAGA,MAAM,mBAAmB,CACvB,SAAAE,EACA,iBAAAD,EACA,KAAAX,CACF,EAI6B,CAO3B,OANiB,MAAMH,EAAO,KAAK,2BAA4B,CAC7D,SAAAe,EAEA,mBAAoBD,EACpB,KAAAX,CACF,CAAC,GACe,IAClB,EAGA,MAAM,sBAAsB,CAC1B,SAAAY,EACA,YAAAC,CACF,EAG6B,CAM3B,OALiB,MAAMhB,EAAO,KAAK,4BAA6B,CAC9D,SAAAe,EAEA,aAAcC,CAChB,CAAC,GACe,IAClB,EAGA,MAAM,sBAAsBD,EAAmC,CAC7D,OAAOf,EAAO,KAAK,4BAA6B,CAAE,SAAAe,CAAS,CAAC,EAAE,KAAMF,GAAaA,EAAS,KAAK,aAAa,CAC9G,EAGA,MAAM,sBAAsBE,EAA4C,CAEtE,OADiB,MAAMf,EAAO,KAAK,6BAA8B,CAAE,SAAAe,CAAS,CAAC,GAC7D,IAClB,EAGA,MAAM,mBAA2C,CAC/C,OAAOf,EAAO,IAAI,iBAAiB,EAAE,KAAMa,GAClCA,EAAS,IACjB,CACH,EAGA,MAAM,oBAAoBI,EAA0C,CAClE,OAAOjB,EAAO,OAAO,mBAAmBiB,GAAgB,EAAE,KAAMJ,GACvDA,EAAS,KAAK,OACtB,CACH,CACF,EAEOK,EAAQpB,GC3Sf,OAAS,WAAAqB,OAAe,cCDxB,OAAS,gBAAAC,GAAc,YAAAC,GAAU,eAAAC,GAAa,YAAAC,OAAgB,mBAC9D,OAAS,aAAAC,OAAiB,yBAC1B,OAAS,kBAAAC,EAAgB,aAAAC,MAAiB,uBAC1C,OAAOC,OAAkB,SCHzB,OAAS,MAAMC,OAAY,OAK3B,IAAMC,GAAS,CACb,MAAM,QAAWC,EAAqC,CAkBpD,OAjB+B,MAAMC,EAClC,KACC,aACA,CACE,GAAGD,EACH,GAAIA,EAAK,IAAME,GAAK,EACpB,QAASF,EAAK,SAAW,MACzB,QAASA,EAAK,SAAW,CAC3B,EACA,CACE,QAAS,CACP,YAAa,OACf,EACA,QAASG,EAAa,IAAI,MAC5B,CACF,EACC,KAAMC,GAAaA,EAAS,IAAI,GACnB,MAClB,CACF,EAEOC,GAAQN,GC5Bf,OACE,eAAAO,GACA,uBAAAC,GACA,iBAAAC,GACA,eAAAC,GACA,iBAAAC,GACA,kBAAAC,GACA,kBAAAC,GACA,YAAAC,OAEK,mBACP,OAAS,kBAAAC,OAAsB,yBAC/B,OAAOC,OAAQ,QACf,OAAS,aAAAC,OAAiB,+BAInB,SAASC,GAAiB,CAAE,KAAAC,CAAK,EAAiC,CACvE,GAAIC,EAAUD,CAAI,EAChB,MAAM,IAAI,MAAM,wBAAwB,EAG1C,IAAME,EAAUC,GAAeH,CAAI,EAEnC,OADgBI,GAAoBF,CAAO,CAE7C,CAEO,SAASG,GAA0E,CACxF,KAAAL,EACA,QAAAM,CACF,EAGG,CACD,GAAIL,EAAUD,CAAI,EAChB,MAAM,IAAI,MAAM,wBAAwB,EAU1C,OANEM,SACIC,GAAoBP,CAAmB,EACvCQ,GAAe,WACbR,EACAM,CACF,CAER,CAWA,SAASC,GAAoBE,EAAgC,CAC3D,IAAMC,EAAQ,IAAI,MAAM,uCAAuC,EAC/D,GAAI,OAAOD,GAAc,UAAY,EAAE,WAAYA,IAAc,CAACA,EAAU,OAC1E,MAAMC,EAGR,IAAMV,EAAOS,EAAU,IAAI,SAAUE,EAAG,CACtC,OAAIA,EAAE,OAAS,QACNA,EAAE,MAGJR,GAAeQ,EAAE,KAAK,CAC/B,CAAC,EACKC,EAAQH,EAAU,IAAI,SAAUE,EAAG,CACvC,OAAOA,EAAE,IACX,CAAC,EACKE,EAASJ,EAAU,IAAI,SAAUE,EAAG,CACxC,GAAI,CAACA,EAAE,KACL,MAAMD,EAER,MAAO,GAAGC,EAAE,QAAQA,EAAE,MACxB,CAAC,EAED,OAAOG,GACLC,GACEC,GACE,CAAC,UAAW,SAAS,EACrB,CACED,GAAUC,GAAa,IAAI,MAAMP,EAAU,MAAM,EAAE,KAAK,QAAQ,EAAGI,CAAM,CAAC,EAC1EE,GAAUC,GAAaJ,EAAOZ,CAAI,CAAC,CACrC,CACF,CACF,CACF,CACF,CAEA,IAAMgB,GAAe,SAAUJ,EAAcK,EAAe,CAC1D,GAAIL,EAAM,SAAWK,EAAO,OAC1B,MAAM,IAAI,MAAM,6CAA6C,EAG/D,IAAMC,EAAM,CAAC,EAEb,QAASC,EAAI,EAAGA,EAAIP,EAAM,OAAQO,IAAK,CACrC,IAAMC,EAAOC,GAAeT,EAAMO,EAAE,EAC9BG,EAAQL,EAAOE,GACrBD,EAAI,KAAKK,GAAiBH,EAAME,EAAO,IAAI,CAAC,CAC9C,CAEA,OAAO,OAAO,OAAOJ,CAAG,CAC1B,EAEA,SAASG,GAAeG,EAAc,CACpC,OAAIA,EAAK,WAAW,MAAM,EACjB,SAAWA,EAAK,MAAM,CAAC,EACrBA,IAAS,MACX,SACEA,EAAK,WAAW,OAAO,EACzB,UAAYA,EAAK,MAAM,CAAC,EACtBA,IAAS,OACX,UACEA,EAAK,WAAW,QAAQ,EAC1B,eAAiBA,EAAK,MAAM,CAAC,EAC3BA,IAAS,QACX,eACEA,EAAK,WAAW,SAAS,EAC3B,gBAAkBA,EAAK,MAAM,CAAC,EAC5BA,IAAS,SACX,gBAEFA,CACT,CAEA,IAAMD,GAAmB,SAAUH,EAAWE,EAAYG,EAAc,CAEtE,IAAIC,EAAMC,EACV,GAAIC,GAAQR,CAAI,EAAG,CACjB,IAAMS,EAAUT,EAAK,QAAQ,UAAW,EAAE,EAC1C,GAAI,CAACQ,GAAQC,CAAO,EAAG,CACrB,IAAMC,EAAYC,GAAeX,CAAI,EACrC,GAAIU,IAAc,WAAaA,IAAc,GAAKR,EAAM,OAASQ,EAC/D,MAAM,IAAI,MAAM,+BAAiCA,CAAS,CAE9D,CACA,IAAME,EAAcV,EAAM,IAAI,SAAUW,EAAQ,CAC9C,OAAOV,GAAiBM,EAASI,EAAG,GAAG,CACzC,CAAC,EACD,OAAO,OAAO,OAAOD,CAAW,CAClC,KAAO,IAAIZ,IAAS,QAClB,OAAOE,EACF,GAAIF,IAAS,SAClB,OAAO,OAAO,KAAKE,EAAO,MAAM,EAC3B,GAAIF,IAAS,OAAQ,CAC1BK,EAAUA,GAAW,EACrB,IAAMS,EAAU,MAAMT,EAAU,CAAC,EAAE,KAAK,GAAG,EAC3C,OAAO,OAAO,KAAKH,EAAQY,EAAU,IAAMA,EAAU,IAAK,KAAK,CACjE,SAAWd,IAAS,UAAW,CAC7B,IAAIe,EAAW,GACf,OAAIV,IACFU,EAAWV,EAAU,GAEhBW,GAAcd,EAAOa,CAAQ,CACtC,SAAWf,EAAK,WAAW,OAAO,EAAG,CAEnC,GADAM,EAAOW,GAAWjB,CAAI,EAClBM,EAAO,GAAKA,EAAO,GACrB,MAAM,IAAI,MAAM,2BAA6BA,CAAI,EAGnD,OAAOY,GAAehB,EAAOI,CAAI,CACnC,SAAWN,EAAK,WAAW,MAAM,EAAG,CAElC,GADAM,EAAOW,GAAWjB,CAAI,EAClBM,EAAO,GAAKA,EAAO,GAAKA,EAAO,IACjC,MAAM,IAAI,MAAM,0BAA4BA,CAAI,EAIlD,GADAC,EAAMY,GAAYjB,CAAK,EACnBK,EAAI,UAAU,EAAID,EACpB,MAAM,IAAI,MAAM,gCAAkCA,EAAO,OAASC,EAAI,UAAU,CAAC,EAGnF,OAAAF,EAAUA,GAAWC,EACdC,EAAI,YAAY,OAAQ,KAAMF,EAAU,CAAC,CAClD,SAAWL,EAAK,WAAW,KAAK,EAAG,CAEjC,GADAM,EAAOW,GAAWjB,CAAI,EAClBM,EAAO,GAAKA,EAAO,GAAKA,EAAO,IACjC,MAAM,IAAI,MAAM,yBAA2BA,CAAI,EAIjD,GADAC,EAAMY,GAAYjB,CAAK,EACnBK,EAAI,UAAU,EAAID,EACpB,MAAM,IAAI,MAAM,+BAAiCA,EAAO,OAASC,EAAI,UAAU,CAAC,EAGlF,OAAAF,EAAUA,GAAWC,EACdC,EAAI,OAAOD,CAAI,EAAE,YAAY,OAAQ,KAAMD,EAAU,CAAC,CAC/D,KAEE,OAAM,IAAI,MAAM,gCAAkCL,CAAI,EAE1D,EAEA,SAASiB,GAAWjB,EAAW,CAC7B,OAAO,SAAS,aAAa,KAAKA,CAAI,EAAG,GAAI,EAAE,CACjD,CAEA,SAASW,GAAeX,EAAW,CACjC,IAAMoB,EAAMpB,EAAK,MAAM,gBAAgB,EACvC,OAAIoB,EACKA,EAAI,KAAO,GAAK,UAAY,SAASA,EAAI,GAAI,EAAE,EAEjD,IACT,CAEA,SAASD,GAAYE,EAAU,CAC7B,IAAMrB,EAAO,OAAOqB,EACpB,GAAIrB,IAAS,SACX,OAAIsB,GAAcD,CAAG,EACZ,IAAIE,GAAGC,GAAeH,CAAG,EAAG,EAAE,EAE9B,IAAIE,GAAGF,EAAK,EAAE,EAElB,GAAIrB,IAAS,SAClB,OAAO,IAAIuB,GAAGF,CAAG,EACZ,GAAIA,EAAI,QAEb,OAAOA,EAEP,MAAM,IAAI,MAAM,0BAA0B,CAE9C,CAEA,SAASb,GAAQR,EAAW,CAC1B,OAAOA,EAAK,YAAY,GAAG,IAAMA,EAAK,OAAS,CACjD,CASO,SAASjB,GAAemB,EAA2B,CACxD,OAAO,OAAOA,GAAU,UAAY,CAACuB,GAAYvB,CAAK,EAAI,OAAO,KAAKA,CAAK,EAAIwB,GAASxB,CAAK,CAC/F,CCjPA,OAAS,mBAAAyB,GAAiB,qBAAAC,OAAyB,mBAEnD,OAAOC,OAAU,OAKjB,IAAMC,GAAY,CAChB,MAAM,MAAMC,EAA8B,CACxC,IAAMC,EAAS,KAAM,QAAO,gCACtB,CAAE,MAAAC,CAAM,EAAID,EAAO,SAAWA,EACpC,OAAOC,EAAM,KAAKF,CAAI,CACxB,EAEA,MAAM,MAAMA,EAA8B,CACxC,IAAMC,EAAS,KAAM,QAAO,gCACtB,CAAE,MAAAE,CAAM,EAAIF,EAAO,SAAWA,EACpC,OAAOE,EAAM,KAAKH,CAAI,CACxB,EAEA,MAAM,aAAaI,EAAgC,CACjD,IAAMH,EAAS,KAAM,QAAO,gCACtB,CAAE,MAAAE,CAAM,EAAIF,EAAO,SAAWA,EAEpC,OADkB,MAAME,EAAM,KAAKC,CAAK,EAAE,QAAQC,EAAa,IAAI,QAAS,KAAK,OAAO,CAAC,GAAG,GAAG,CAEjG,EAEA,MAAM,YAAYC,EAAoBC,EAA8B,CAClE,GAAI,CACF,IAAMN,EAAS,KAAM,QAAO,gCACtB,CAAE,YAAAO,CAAY,EAAIP,EAAO,SAAWA,EAE1C,OADkB,MAAMO,EAAYF,EAAYC,CAAG,CAErD,MAAE,CACA,MAAIE,EAAY,kBAAkB,EAC1B,IAAI,MAAM,kCAAkC,EAE5C,IAAI,MAAM,4CAA4C,CAEhE,CACF,EAEA,MAAM,YAAYC,EAAmBH,EAA8B,CACjE,IAAMN,EAAS,KAAM,QAAO,gCACtB,CAAE,YAAAU,CAAY,EAAIV,EAAO,SAAWA,EAE1C,OADkB,MAAMU,EAAYD,EAAWH,CAAG,CAEpD,EAEA,MAAM,YAAYK,EAAkBC,EAA+B,CACjE,IAAMZ,EAAS,KAAM,QAAO,gCACtB,CAAE,YAAAa,CAAY,EAAIb,EAAO,SAAWA,EAE1C,OADY,MAAMa,EAAYF,EAAUC,CAAI,CAE9C,EAEA,MAAM,OAAOE,EAAmB,CAC9B,IAAMC,EAAWX,EAAa,IAAI,QAC5BY,EAAS,KAAK,OAAO,EACvBb,EACAc,EACJ,GAAIH,IAAc,SAAU,CAC1B,IAAMd,EAAS,KAAM,QAAO,gCACtB,CAAE,MAAAC,CAAM,EAAID,EAAO,SAAWA,EAC9BkB,EAAQ,MAAMjB,EAAM,IAAIc,EAAUC,CAAM,EAC9Cb,EAAQe,EAAM,GAAG,EACjBD,EAAUE,GAAK,OAAO,IAAI,WAAWD,EAAM,IAAI,CAAC,CAAC,CACnD,KAAO,CACL,IAAMlB,EAAS,KAAM,QAAO,gCACtB,CAAE,MAAAE,CAAM,EAAIF,EAAO,SAAWA,EAC9BoB,EAAQ,MAAMlB,EAAM,IAAIa,EAAUC,CAAM,EAC9Cb,EAAQiB,EAAM,GAAG,EACjBH,EAAUI,GAAkB,KAAOC,GAAgBF,EAAM,IAAI,EAAG,EAAI,EAAE,SAAS,KAAK,CAAC,CACvF,CACA,MAAO,CACL,MAAAjB,EACA,QAAAc,CACF,CACF,EAEA,QAAiB,CAEf,IAAMM,EAAWC,EAAkBhB,EAAY,YAAY,EAAG,gCAAgC,EACxFiB,EAAQ,KAAK,UAAU,CAC3B,MAAOF,EAAS,MAChB,aAAcnB,EAAa,YAAY,UACvC,mBAAoBA,EAAa,YAAY,UAC7C,iBAAkBA,EAAa,YAAY,MAC3C,YAAaA,EAAa,QAC1B,UAAWA,EAAa,SACxB,QAASmB,EAAS,QAClB,cAAenB,EAAa,YAC9B,CAAC,EAED,OAAAA,EAAa,aAAe,OACrBqB,CACT,CACF,EAEOC,EAAQ5B,GC9Ff,eAAe6B,IAAkB,CAC/B,GAAM,CAACC,EAAKC,EAAqBC,CAAsB,EAAI,MAAM,QAAQ,IAAI,CAC3E,OAAO,uBACP,OAAO,iCAAiC,KAAMC,GAAMA,EAAE,mBAAmB,EACzE,OAAO,oCAAoC,KAAMA,GAAMA,EAAE,sBAAsB,CACjF,CAAC,EAEKC,EAAgBC,EAAY,iBAAiB,EACnD,GAAI,CAACD,EACH,MAAM,IAAI,MAAM,2BAA2B,EAG7C,IAAME,EAAcL,EAAoB,CAGtC,WAAYG,EAAc,YAG1B,OAAQ,CACN,iCAAkCA,EAAc,QAClD,EAGA,aAAc,CAAE,OAAQA,EAAc,MAAO,CAC/C,CAAC,EAED,MAAO,CACL,UAAW,IAAIJ,EAAI,IAAI,CACrB,OAAQI,EAAc,OACtB,YAAaE,CACf,CAAC,EACD,uBAAAJ,CACF,CACF,CAIA,SAASK,GAAqB,EAAQL,EAAsC,CA1C5E,IAAAM,EA8CE,MAHI,gBAAaN,IACb,iBAAG,QAAS,4BACZM,EAAA,iBAAG,QAAH,YAAAA,EAAU,QAAS,0BACnB,OAAO,iBAAG,UAAY,UAAY,EAAE,QAAQ,SAAS,kBAAkB,EAE7E,CAEA,eAAsBC,IAAsE,CAlD5F,IAAAD,EAmDE,GAAM,CAAE,UAAAE,EAAW,uBAAAR,CAAuB,EAAI,MAAMH,GAAgB,EAEhEY,EACJ,GAAI,CACFA,EAAS,MAAMD,EAAU,gBAAgB,CACvC,OAAOF,EAAAH,EAAY,iBAAiB,IAA7B,YAAAG,EAAgC,WACvC,QAAS,SACX,CAAC,CACH,OAASI,EAAP,CAEA,GAAIL,GAAqBK,EAAGV,CAAsB,EAChD,aAAMW,EAAM,aAAa,EAClB,MAAMJ,GAAgB,EAE7B,MAAMG,CAEV,CAEA,GAAI,CAACD,EAAO,gBAAkB,CAACA,EAAO,UACpC,MAAM,IAAI,MAAM,6BAA6B,EAG/C,MAAO,CACL,WAAY,OAAO,KAAKA,EAAO,cAAc,EAAE,SAAS,QAAQ,EAChE,UAAW,OAAO,KAAKA,EAAO,SAAS,EAAE,SAAS,QAAQ,CAC5D,CACF,CAEA,eAAsBG,GAAeC,EAAyC,CA/E9E,IAAAP,EAgFE,GAAM,CAAE,UAAAE,EAAW,uBAAAR,CAAuB,EAAI,MAAMH,GAAgB,EAEhEiB,EACJ,GAAI,CAKFA,GAJe,MAAMN,EAAU,QAAQ,CACrC,OAAOF,EAAAH,EAAY,iBAAiB,IAA7B,YAAAG,EAAgC,WACvC,eAAgB,OAAO,KAAKO,EAAgB,QAAQ,CACtD,CAAC,GACgB,SACnB,OAASH,EAAP,CAEA,GAAIL,GAAqBK,EAAGV,CAAsB,EAChD,aAAMW,EAAM,aAAa,EACV,MAAMC,GAAeC,CAAc,EAGlD,MAAMH,CAEV,CAEA,GAAI,CAACI,EACH,MAAM,IAAI,MAAM,gDAAgD,EAElE,OAAO,OAAO,KAAKA,CAAO,EAAE,SAAS,QAAQ,CAC/C,CAQA,eAAsBC,GAAQC,EAAcC,EAAa,GAAwB,CAhHjF,IAAAX,EAiHE,GAAM,CAAE,UAAAE,EAAW,uBAAAR,CAAuB,EAAI,MAAMH,GAAgB,EAEhEqB,EACJ,GAAI,CAKFA,GAJe,MAAMV,EAAU,QAAQ,CACrC,OAAOF,EAAAH,EAAY,iBAAiB,IAA7B,YAAAG,EAAgC,WACvC,eAAgB,OAAO,KAAKU,EAAM,QAAQ,CAC5C,CAAC,GACkB,SACrB,OAASN,EAAP,CAEA,GAAIL,GAAqBK,EAAGV,CAAsB,EAChD,aAAMW,EAAM,aAAa,EACb,MAAMI,GAAQC,EAAMC,CAAU,EAG1C,MAAMP,CAEV,CAEA,GAAI,CAACQ,EACH,MAAM,IAAI,MAAM,gDAAgD,EAGlE,GAAID,EAAY,CAEd,IAAMR,GADS,KAAM,QAAO,UAAU,KAAMR,GAAMA,EAAE,OAAO,GACrC,WAAWiB,CAAS,EAC1C,OAAO,OAAO,KAAKT,CAAM,EAAE,SAAS,MAAM,CAC5C,KACE,QAAO,OAAO,KAAKS,CAAS,EAAE,SAAS,MAAM,CAEjD,CCnIO,IAAMC,GAAsB,MAAOC,GAAuC,CAC/E,IAAMC,EAAWC,EAAY,YAAY,EACzC,GAAI,CAACD,EACH,MAAM,IAAI,MAAM,gBAAgB,EAElC,GAAM,CAAE,WAAAE,EAAY,UAAAC,CAAU,EAAI,MAAMC,GAAgB,EAClDC,EAAW,MAAMC,EAAU,YAAYP,EAAUC,EAAS,IAAI,EAC9DO,EAAkB,MAAMD,EAAU,YAAYH,EAAWH,EAAS,IAAI,EACtEQ,EAAWR,EAAS,QAAQ,IAAKS,GACjCA,EAAO,iBAAmB,EACxBC,EAAUD,EAAO,cAAc,EAC1BE,GAAkBF,EAAQJ,EAAUE,CAAe,EAEnDK,GAAmBH,EAAQJ,EAAUE,CAAe,GAEpDE,EAAO,iBAAmB,EAC5BI,GAAkBJ,EAAQJ,EAAUE,CAAe,EAI7D,EAEKO,EAAiB,MAAM,QAAQ,IAAIN,CAAQ,EAGjD,QAAWO,KAAUD,EAAgB,CACnC,IAAME,EAAgB,MAAMC,GAAaF,EAAO,gBAAiBV,EAAUE,CAAe,EAC1FW,EAAMF,IAAkBD,EAAO,MAAO,2BAA2B,CACnE,CAEA,IAAMI,EAAUL,EAAe,IAAKM,GAAS,CAC3C,GAAM,CAAE,KAAAC,EAAM,eAAAC,CAAe,EAAIF,EAAK,OACtC,MAAO,CACL,YAAaC,EACb,eAAiBD,EAAa,QAAUE,EAAiB,OACzD,eAAgBF,EAAK,eACvB,CACF,CAAC,EACKG,EAAsBrB,EACtBsB,EAAe,MAAMC,EAAM,aAAazB,EAAS,KAAM,CAC3D,iBACA,uBAAwBuB,EACxB,QAAAJ,CACF,CAAC,EAGD,OAAAO,GAAarB,CAAQ,EACrBsB,GAAoBJ,EAAqBhB,CAAe,EACxDP,EAAS,QAAQ,QAASS,GAAW,CACnC,IAAMmB,EAAYT,EAAQ,KAAMC,GAASA,EAAK,cAAgBX,EAAO,IAAI,EACrEmB,GAAA,MAAAA,EAAW,iBACbnB,EAAO,eAAiBmB,EAAU,eAClCnB,EAAO,uBAAyBc,EAChCd,EAAO,eAAiB,EACpBmB,EAAU,iBACZnB,EAAO,eAAiBmB,EAAU,gBAGxC,CAAC,EACG5B,EAAS,mBACXA,EAAS,iBAAiB,wBAA0B,IAEtDC,EAAY,YAAYD,CAAQ,EACzBwB,CACT,EAEab,GAAoB,MAAOF,EAAoBJ,EAAkBE,IAA4B,CACxG,GAAM,CAAE,MAAAsB,EAAO,QAAAC,CAAQ,EAAI,MAAMxB,EAAU,OAAOG,EAAO,UAAU,EAC7DsB,EAAkB,MAAMC,GAAaH,EAAOxB,EAAUE,CAAe,EAC3E,OAAAE,EAAO,eAAiBqB,EACjB,CACL,MAAAD,EACA,gBAAAE,EACA,OAAAtB,EACA,QAAS,EACX,CACF,EAEawB,GAAwB,MACnCxB,EACAoB,EACAC,EACAP,EACAhB,IACqB,CACrB,IAAMP,EAAWC,EAAY,YAAY,EACzC,GAAI,CAACD,EACH,MAAM,IAAI,MAAM,gBAAgB,EAElC,IAAMkC,EAAgBjC,EAAY,kBAAkB,MAI/CM,IACHA,EAAkB,MAAM4B,GAAoBZ,CAAmB,GAGjE,IAAIlB,EACA6B,IAAkB,EACpB7B,EAAW,MAAM+B,GAAa,EAE9B/B,EAAW,MAAMC,EAAU,YAAY,GAAIN,EAAS,IAAI,EAG1D,IAAM+B,EAAkB,MAAMC,GAAaH,EAAOxB,EAAUE,CAAe,EAGrES,EAAgB,MAAMC,GAAac,EAAiB1B,EAAUE,CAAe,EACnFW,EAAMF,IAAkBa,EAAO,2BAA2B,EAE1D,IAAML,EAAe,MAAMC,EAAM,aAAazB,EAAS,KAAM,CAC3D,eAAgBkC,EAChB,uBAAwBX,EACxB,QAAS,CACP,CACE,YAAad,EAAO,KACpB,eAAgBsB,EAChB,eAAgBD,CAClB,CACF,CACF,CAAC,EAGDJ,GAAarB,CAAQ,EACrBsB,GAAoBJ,EAAqBhB,CAAe,EAExD,IAAMqB,EAAY5B,EAAS,QAAQ,KAAMoB,GAASA,EAAK,OAASX,EAAO,IAAI,EAC3E,OAAImB,IACFA,EAAU,eAAiBG,EAC3BH,EAAU,uBAAyBL,EACnCK,EAAU,eAAiBM,EAC3BN,EAAU,eAAiBE,GAE7B7B,EAAY,YAAYD,CAAQ,EACzBwB,CACT,EAEaa,GAAgB,MAAO5B,GAAwC,CAC1E,IAAIoB,EAAQ,GACZ,GAAIpB,EAAO,iBAAmB,EAC5BoB,EAAQ,MAAMS,GAAQ7B,EAAO,eAAgBA,EAAO,aAAe,WAAW,MACzE,CACL,IAAMJ,EAAW,MAAM+B,GAAa,EAC9B7B,EAAkB,MAAM4B,GAAoB1B,EAAO,wBAA0B,EAAE,EACrFoB,EAAQ,MAAMZ,GAAaR,EAAO,eAAgBJ,EAAUE,CAAe,CAC7E,CAEA,OAAOsB,CACT,EAEMjB,GAAqB,MAAOH,EAAoBJ,EAAkBE,IAA4B,CAClG,IAAIsB,EAAQ,MAAMS,GAAQ7B,EAAO,eAAgBA,EAAO,aAAe,WAAW,EAC9EA,EAAO,aAAe,cACxBoB,EAAQ,MAAMvB,EAAU,aAAauB,CAAK,GAG5C,IAAME,EAAkB,MAAMC,GAAaH,EAAOxB,EAAUE,CAAe,EAC3E,MAAO,CACL,MAAAsB,EACA,gBAAAE,EACA,OAAAtB,CACF,CACF,EAEMI,GAAoB,MAAOJ,EAAoBJ,EAAkBE,IAA4B,CACjG,IAAMgC,EAAqB,MAAMJ,GAAoB1B,EAAO,wBAA0B,EAAE,EAClF+B,EAAc,MAAMJ,GAAa,EAEnCP,EAAQ,MAAMZ,GAAaR,EAAO,eAAgB+B,EAAaD,CAAkB,EAEjF9B,EAAO,aAAe,cACxBoB,EAAQ,MAAMvB,EAAU,aAAauB,CAAK,GAE5C,IAAME,EAAkB,MAAMC,GAAaH,EAAOxB,EAAUE,CAAe,EAC3E,MAAO,CACL,MAAAsB,EACA,gBAAAE,EACA,OAAAtB,CACF,CACF,EAEMQ,GAAe,MAAOwB,EAAwBpC,EAAkBE,IAA4B,CAChG,IAAMmC,EAAkB,MAAMpC,EAAU,YAAYmC,EAAgBlC,CAAe,EAEnF,OADc,MAAMD,EAAU,YAAYoC,EAAiBrC,CAAQ,CAErE,EAEM2B,GAAe,MAAOH,EAAexB,EAAkBE,IAA4B,CACvF,IAAMmC,EAAkB,MAAMpC,EAAU,YAAYuB,EAAOxB,CAAQ,EAEnE,OADwB,MAAMC,EAAU,YAAYoC,EAAiBnC,CAAe,CAEtF,EAEaoC,GAAsB,MAAO5C,GAAqB,CAC7D,IAAMC,EAAW4C,EAAkB3C,EAAY,YAAY,EAAG,gCAAgC,EACxFI,EAAW,MAAMC,EAAU,YAAYP,EAAUC,EAAS,IAAI,EAC9DS,EAAST,EAAS,QAAQ,KAC7BoB,GACC,CAACV,EAAUU,EAAK,cAAc,GAC9BA,EAAK,iBAAmB,CAC5B,EACA,GAAI,CAACX,EACH,MAAM,IAAI,MAAM,yBAAyB,EAE3C,IAAMF,EAAkB,MAAM4B,GAAoB1B,EAAO,wBAA0B,EAAE,EAC/EiC,EAAkB,MAAMpC,EAAU,YAAYG,EAAO,eAAgBF,CAAe,EAC1F,MAAMD,EAAU,YAAYoC,EAAiBrC,CAAQ,EACrDqB,GAAarB,CAAQ,CACvB,EAEM8B,GAAsB,MAAOZ,GAAgC,CACjE,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,+BAA+B,EAEjD,IAAMvB,EAAWC,EAAY,YAAY,EACzCiB,EAAMlB,EAAU,IAAI,MAAM,qBAAqB,CAAC,EAEhD,IAAIO,EAAkBsC,EAAiB,QAAQtB,CAAmB,EAClE,GAAIhB,EACF,OAAOA,EAET,IAAMuC,EAAa,MAAMC,GAAexB,CAAmB,EAE3D,OAAAhB,EAAkB,MAAMD,EAAU,YAAYwC,EAAY7C,EAAY,YAAY,EAAG,IAAI,EACzF0B,GAAoBJ,EAAqBhB,CAAe,EACjDA,CACT,EAEaoB,GAAsB,CAACJ,EAA6BhB,IAA4B,CAC3FsC,EAAiB,QAAQtB,EAAqBhB,CAAe,CAC/D,EAEM6B,GAAe,SAA6B,CAChD,IAAM/B,EAAWwC,EAAiB,mBAA8B,EAChE,GAAI,CAACxC,EAAU,CACb,GAAIJ,EAAY,kBAAkB,EAChC,MAAM,IAAI,MAAM,qBAAqB,EAChC,CACL,IAAMD,EAAWC,EAAY,YAAY,EACzCiB,EAAMlB,EAAU,IAAI,MAAM,qBAAqB,CAAC,EAEhD,IAAMK,EAAW,MAAMC,EAAU,YAAY,GAAIN,EAAU,IAAI,EAC/D,OAAA0B,GAAarB,CAAQ,EACdA,CACT,CACF,CACA,OAAOA,CACT,EAEa2C,GAAc,IAAM,CAC/B,IAAM3C,EAAWwC,EAAiB,mBAA8B,EAChE,MAAO,CAACnC,EAAUL,CAAQ,CAC5B,EAEa4C,GAAgB,IAAM,CACjCJ,EAAiB,sBAAiC,CACpD,EAEanB,GAAgBrB,GAAqB,CAChDwC,EAAiB,oBAAgCxC,CAAQ,CAC3D,ECxQA,IAAM6C,GAAS,CACb,cAAcC,EAA8B,CAC1C,IAAMC,EAAWC,EAAY,YAAY,EACzC,GAAI,CAACD,EACH,MAAM,IAAI,MAAM,qBAAqB,EAEvC,OAAOA,EAAS,QAAQ,OAAQE,GAASA,EAAK,aAAeH,CAAI,EAAE,EACrE,EAEA,gBAA0B,CAlB5B,IAAAI,EAAAC,EAmBI,OAAO,SACLA,GAAAD,EAAAF,EACG,YAAY,IADf,YAAAE,EAEI,UAFJ,YAAAC,EAEa,KACRF,GAASA,EAAK,iBAAmB,EAExC,CACF,EAEA,cAAcH,EAA0B,CAEtC,OADmB,KAAK,cAAcA,CAAI,EACxB,gBAAkB,EACtC,EAEA,MAAM,IAAIA,EAAmC,CAC3C,IAAMC,EAAWC,EAAY,YAAY,EACzC,GAAI,CAACD,EACH,MAAM,IAAI,MAAM,qBAAqB,EAEvC,IAAMK,EAAa,KAAK,cAAcN,CAAI,EACtCO,EACJ,GAAID,GAAA,MAAAA,EAAY,eACdC,EAAgBD,EAAW,mBACtB,CAEL,IAAIE,EADgBP,EAAS,QAAQ,OAAQE,GAASA,EAAK,aAAeH,CAAI,EAAE,GAC1C,uBAClCS,EACAC,EAEJ,GAAIF,EAAqB,CACvB,GAAM,CAAE,QAAAG,EAAS,MAAAC,CAAM,EAAI,MAAMC,EAAU,OAAOP,EAAW,UAAU,EACvEC,EAAgBI,EAChBD,EAAaE,CACf,KAAO,CACL,GAAM,CAAC,CAAE,MAAAA,EAAO,QAAAD,CAAQ,EAAGG,CAAU,EAAI,MAAM,QAAQ,IAAI,CACzDD,EAAU,OAAOP,EAAW,UAAU,EACtCS,GAAgB,EAAE,KAAK,CAAC,CAAE,WAAAC,EAAY,UAAAC,CAAU,IACvC,QAAQ,IAAI,CAACJ,EAAU,YAAYI,EAAWhB,EAAS,IAAI,EAAG,QAAQ,QAAQe,CAAU,CAAC,CAAC,CAClG,CACH,CAAC,EAEDN,EAAaE,EACbL,EAAgBI,EAChBF,EAAkBK,EAAW,GAC7BN,EAAsBM,EAAW,EACnC,CAEA,MAAMI,GAAsBZ,EAAYI,EAAYH,EAAeC,EAAqBC,CAAe,CAEzG,CACA,OAAOF,CACT,EAEA,MAAM,aAAaP,EAAkC,CACnD,IAAMmB,EAAO,MAAMC,GAAc,KAAK,cAAcpB,CAAI,CAAC,EAEzD,OADc,MAAMa,EAAU,MAAMM,CAAI,CAE1C,EAEA,MAAM,aAAanB,EAAkC,CACnD,IAAMmB,EAAO,MAAMC,GAAc,KAAK,cAAcpB,CAAI,CAAC,EAEzD,OADc,MAAMa,EAAU,MAAMM,CAAI,CAE1C,CACF,EAEOE,EAAQtB,GNrFf,IAAAuB,EAAAC,EAAAC,EAAAC,GAAAC,EAAAC,EAAAC,EAAAC,GAgCaC,GAAN,KAAkD,CAOvD,aAAc,CAkTdC,EAAA,KAAMP,GAKNO,EAAA,KAAAL,GAMAK,EAAA,KAAAH,GAnUAG,EAAA,KAAAT,EAAU,IAAIU,IAEd,KAAS,kBAAoB,GAE7BD,EAAA,KAAAR,EAAW,GAGTU,EAAA,KAAKX,GAAQ,gBAAgB,GAAG,EAChC,IAAMY,EAAeC,GAAqB,EACtCD,GAAgBE,EAAoBF,CAAY,EAClDG,EAAA,KAAKd,EAAWW,GAEhBI,GAAqBL,EAAA,KAAKV,EAAQ,EAGpCgB,EAAO,4BAAyC,IAAM,CACpDN,EAAA,KAAKX,GAAQ,KAAK,YAAY,CAChC,CAAC,EACDiB,EAAO,yBAAsC,IAAM,CAC7C,KAAK,kBACPN,EAAA,KAAKX,GAAQ,KAAK,UAAW,CAAE,QAASkB,GAASP,EAAA,KAAKV,EAAQ,CAAE,CAAC,EACjEU,EAAA,KAAKX,GAAQ,KAAK,kBAAmB,CAAC,KAAK,eAAe,CAAC,EAE/D,CAAC,EACDiB,EAAO,GAAG,mBAAqBE,GAAyB,CAClDC,EAAaD,CAAS,IAAM,QAC9BJ,EAAA,KAAKd,EAAWkB,EAAU,IAC1BH,GAAqBL,EAAA,KAAKV,EAAQ,EAClCU,EAAA,KAAKX,GAAQ,KAAK,eAAgBkB,GAASP,EAAA,KAAKV,EAAQ,CAAC,EAE7D,CAAC,CACH,CAEA,IAAI,iBAAiC,CAlEvC,IAAAoB,EAmEI,IAAMC,GAAUD,EAAAE,EAAY,aAAa,IAAzB,YAAAF,EAA4B,eAC5C,OAAOC,GAAoB,IAC7B,CAEA,IAAI,SAAkB,CACpB,OAAOJ,GAASP,EAAA,KAAKV,EAAQ,CAC/B,CAEA,aAAuB,CACrB,MAAO,CAACuB,EAAU,KAAK,eAAe,CACxC,CAEA,GAAGC,EAAeC,EAA0C,CAC1D,OAAAf,EAAA,KAAKX,GAAQ,GAAGyB,EAAOC,CAAQ,EACxB,IACT,CAEA,KAAKD,EAAeC,EAA0C,CAC5D,OAAAf,EAAA,KAAKX,GAAQ,KAAKyB,EAAOC,CAAQ,EAC1B,IACT,CAEA,IAAID,EAAeC,EAA0C,CAC3D,OAAAf,EAAA,KAAKX,GAAQ,IAAIyB,EAAOC,CAAQ,EACzB,IACT,CAEA,eAAeD,EAAeC,EAA0C,CACtE,OAAAf,EAAA,KAAKX,GAAQ,eAAeyB,EAAOC,CAAQ,EACpC,IACT,CAKA,MAAM,QAA4B,CAChC,OAAO,KAAK,QAAQ,CAClB,4BACF,CAAC,CACH,CAEA,MAAM,YAAa,CACjB,MAAMC,GAAO,CACf,CAEA,MAAM,QAAQC,EAAyC,CACrD,GAAI,KAAK,gBACP,MAAO,CAAC,KAAK,eAAe,EAE5B,GAAIL,EAAY,QAAQ,EACtB,aAAMM,EAAA,KAAK3B,EAAAC,IAAL,WACC,CAAC,KAAK,eAAgB,EAK7B,GAHA,MAAM,IAAI,QAAkB,CAAC2B,EAASC,IAAW,CAC/Cd,EAAO,8BAA2C,CAAE,QAAAa,EAAS,OAAAC,EAAQ,MAAAH,CAAM,CAAC,CAC9E,CAAC,EACG,CAACL,EAAY,QAAQ,EACvB,MAAMS,EAAe,aAAa,EAGpC,OAAK,KAAK,iBACR,MAAMH,EAAA,KAAK3B,EAAAC,IAAL,WAGD,CAAC,KAAK,eAAgB,CAGnC,CAGA,MAAM,QAAQ8B,EAAuC,CAzIvD,IAAAZ,EAAAa,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EA0II,IAAMC,EAASX,EAAK,OACpB,GAAI,CAACW,EACH,MAAMC,EAAU,cAAc,yCAAyC,EAEzE,GAAI,OAAO,OAAOC,EAAY,EAAE,SAASF,CAAsB,EAAG,CAChE,GAAIA,mBACF,OAAI,KAAK,gBACA,CAAC,KAAK,eAAe,EAEvB,CAAC,EACH,GAAIA,0BAET,OADe,MAAM,KAAK,QAAQ,EAE7B,GAAIA,kBACT,OAAO,KAAK,QACP,GAAIA,EAAO,8BAAwC,EAAG,CAC3Df,EAAA,KAAKzB,EAAAC,GAAL,WAMA,IAAM0C,EAAOC,GAAc,kBAAkBJ,CAAM,EAC7CK,EAAOF,GAAO1B,EAAAY,GAAA,YAAAA,EAAM,SAAN,YAAAZ,EAAe,IAAKa,EAAAD,GAAA,YAAAA,EAAM,SAAN,YAAAC,EAAe,GACnDgB,EAAYH,GAAOZ,EAAAF,GAAA,YAAAA,EAAM,SAAN,YAAAE,EAAe,IAAKC,EAAAH,GAAA,YAAAA,EAAM,SAAN,YAAAG,EAAe,GAC1D,GAAI,CAACa,GAAQ,OAAOA,GAAS,SAC3B,MAAMJ,EAAU,cAAc,uDAAuD,EAEvF,GAAI,CAACK,EACH,MAAML,EAAU,cAAc,8CAA8C,EAE9E,GAAII,EAAK,YAAY,MAAMZ,EAAA,KAAK,kBAAL,YAAAA,EAAsB,eAC/C,MAAML,EAAe,aAAa,EAEhC,OAAOkB,GAAc,WACvBA,EAAY,KAAK,MAAMA,CAAS,GAElC,IAAMC,GAAOH,GAAc,OAAOJ,CAAM,EAClCQ,GAAUJ,GAAc,oBAAoBJ,CAAM,EAMxD,OALe,MAAM,KAAK,cAAc,CACtC,KAAMM,EACN,QAAAE,GACA,KAAAD,EACF,CAAC,CAEH,SAAWP,EAAO,0BAAoC,EAAG,CACvDf,EAAA,KAAKzB,EAAAC,GAAL,WACA,IAAIgD,GAAUf,EAAAL,GAAA,YAAAA,EAAM,SAAN,YAAAK,EAAe,GACvBW,GAAOV,EAAAN,GAAA,YAAAA,EAAM,SAAN,YAAAM,EAAe,GAC5B,GAAI,CAACc,GAAW,OAAOA,GAAY,SACjC,MAAMR,EAAU,cAAc,mDAAmD,EAEnF,GAAI,CAACI,GAAQ,OAAOA,GAAS,SAC3B,MAAMJ,EAAU,cAAc,uDAAuD,EAEvF,GAAII,EAAK,YAAY,MAAMT,EAAA,KAAK,kBAAL,YAAAA,EAAsB,eAC/C,MAAMR,EAAe,aAAa,EAG/BsB,GAAYD,CAAO,IACtBA,EAAUE,GAAa,OAAO,KAAKF,CAAO,EAAE,SAAS,KAAK,CAAC,GAE7D,IAAMF,EAAOH,GAAc,OAAOJ,CAAM,EAExC,OADe,MAAM,KAAK,YAAYS,EAA8BF,CAAI,CAE1E,SAAWP,iCAAmD,CAC5Df,EAAA,KAAKzB,EAAAC,GAAL,WAEA,IAAMmD,EAAU,QAAQd,GAAAD,EAAAR,GAAA,YAAAA,EAAM,SAAN,YAAAQ,EAAe,KAAf,YAAAC,EAA2B,OAAO,EAC1D,OAAIc,IAAY7C,EAAA,KAAKV,GACZ,MAAM,KAAK,YAAYuD,CAAO,EAEhC,IACT,SAAWZ,0BAA4C,CACrDf,EAAA,KAAKzB,EAAAC,GAAL,WACA,IAAMoD,GAASd,EAAAV,EAAK,SAAL,YAAAU,EAAc,GAC7B,GAAI,CAACc,EACH,MAAMZ,EAAU,cAAc,uDAAuD,EAGvF,OADe,MAAM,KAAK,gBAAgBY,CAAM,CAElD,KACE,OAAMzB,EAAe,kBAAkB,CAE3C,KAAO,CACAC,EAAK,UACRA,EAAK,QAAUtB,EAAA,KAAKV,IAEtB,IAAIyD,EACJ,GAAI,CACFA,EAAS,MAAMC,GAAO,QAAQ1B,CAAI,CACpC,OAAS2B,EAAP,CAEA,GAAM,CAAE,KAAAC,EAAM,QAAAR,GAAS,MAAAS,EAAM,EAAIF,EACjC,MAAIC,GAAQR,GACJ,CAAE,KAAAQ,EAAM,QAAAR,GAAS,KAAMS,EAAM,EAE7BF,CAEV,CACA,OAAOF,CACT,CACF,CAEA,MAAM,gBAAgBK,EAAsD,CAC1ElC,EAAA,KAAKzB,EAAAC,GAAL,WACA,IAAMmD,EAAU,OAAOO,EAAY,SAAW,KAAK,OAAO,EAE1D,GAAI,CADUjD,EAAoB0C,CAAO,EAEvC,MAAMxB,EAAe,kBAAkB,EAEpC+B,EAAY,UACfA,EAAY,QAAU7C,GAASsC,CAAO,GAEpChC,EAAUuC,EAAY,IAAI,IACdjD,EAAoB0C,CAAO,GAC5BQ,GAAsBD,CAAW,EAE5CA,EAAY,KAAO,MAEnBA,EAAY,KAAO,OAInBvC,EAAUuC,EAAY,KAAK,IAC7BA,EAAY,MAAQ,OAElBvC,EAAUuC,EAAY,IAAI,IAC5BA,EAAY,KAAO,MAGrB,IAAME,EAAQ,MAAMC,EAAO,wBAA2B,EAClDC,EACJ,GAAIC,GAAOZ,CAAO,EAChBW,EAAW,MAAMF,EAAM,WAAWI,EAAa,IAAI,QAASC,EAAU,OAAO,EAAGP,CAAW,MACtF,CACDvC,EAAUuC,EAAY,KAAK,IAC7BA,EAAY,MAAQ,OAEtB,IAAMQ,EAAS,MAAMN,EAAM,OAAOI,EAAa,IAAI,QAASC,EAAU,OAAO,EAAGP,CAAW,EACrFS,EAAS,KAAM,QAAO,kBACtB,CAAE,mBAAAC,CAAmB,EAAID,EAAO,SAAWA,EAC3CE,EAAKD,EAAmB,WAAWF,CAAM,EAC/CJ,EAAWZ,GAAamB,EAAG,UAAU,EAAE,SAAS,KAAK,CAAC,CACxD,CACA,OAAA7C,EAAA,KAAKvB,EAAAC,IAAL,UAA0BiD,GACX,MAAMG,GAAO,QAAgB,CAC1C,QAAAH,EACA,OAAQ,yBACR,OAAQ,CAACW,CAAQ,CACnB,CAAC,CAEH,CAEA,MAAM,YAAYd,EAAqCF,EAAiC,CACtFtB,EAAA,KAAKzB,EAAAC,GAAL,WACA,IAAMsE,EAAOC,GAAiB,CAC5B,KAAMvB,CACR,CAAC,EAEKwB,EAAM,MADE,MAAMX,EAAO,wBAA2B,GAC9B,KAAKG,EAAa,IAAI,QAASC,EAAU,OAAO,EAAGK,EAAMxB,CAAI,EACrF,OAAAtB,EAAA,KAAKvB,EAAAC,IAAL,WACOuE,GAAUC,GAASF,EAAI,EAAI,EAAE,EAAGA,EAAI,EAAGA,EAAI,CAAC,CACrD,CAEA,MAAM,cAAsE,CAC1E,KAAA5C,EACA,QAAAmB,EACA,KAAAD,CACF,EAIoB,CAClBtB,EAAA,KAAKzB,EAAAC,GAAL,WACA,IAAMsE,EAAOK,GAAkB,CAC7B,KAAA/C,EACA,QAAAmB,CACF,CAAC,EAEKyB,EAAM,MADE,MAAMX,EAAO,wBAA2B,GAC9B,KAAKG,EAAa,IAAI,QAASC,EAAU,OAAO,EAAGK,EAAMxB,CAAI,EACrF,OAAAtB,EAAA,KAAKvB,EAAAC,IAAL,WACOuE,GAAUC,GAASF,EAAI,EAAI,EAAE,EAAGA,EAAI,EAAGA,EAAI,CAAC,CACrD,CAEA,MAAM,YAAYrB,EAAqC,CACrD,GAAI,OAAOA,CAAO,IAAM7C,EAAA,KAAKV,GAAU,CACrC,GAAI,CAACa,EAAoB,OAAO0C,CAAO,CAAC,EACtC,MAAMxB,EAAe,kBAAkB,6BAA6B,EAGrDT,EAAY,YAAY,IAElC,KAAK,iBAER,MAAMM,EAAA,KAAK3B,EAAAC,IAAL,YAIVY,EAAA,KAAKd,EAAW,OAAOuD,CAAO,GAC9BxC,GAAqBL,EAAA,KAAKV,EAAQ,EAClC,WAAW,IAAMU,EAAA,KAAKX,GAAQ,KAAK,eAAgBkB,GAASP,EAAA,KAAKV,EAAQ,CAAC,EAAG,CAAC,CAChF,CAEA,OAAO,IACT,CAgCF,EAtVED,EAAA,YAIAC,EAAA,YAoTMC,EAAA,YAAAC,GAAU,gBAAG,CACjB,IAAMmB,EAAU,MAAM4C,EAAO,eAAkB,EAC/C,WAAW,IAAMvD,EAAA,KAAKX,GAAQ,KAAK,kBAAmB,CAACsB,CAAO,CAAC,EAAG,CAAC,CACrE,EAEAlB,EAAA,YAAAC,EAAe,UAAG,CAChB,GAAI,CAAC,KAAK,YAAY,EACpB,MAAM2B,EAAe,aAAa,CAEtC,EAEA1B,EAAA,YAAAC,GAAoB,SAACiD,EAAkB,CACrC,IAAMyB,EAAU1D,EAAY,YAAY,EACxC,GAAI0D,EACF,GAAI,CAEFC,GAAgB,CACd,SAAU1B,GAAA,KAAAA,EAAW7C,EAAA,KAAKV,GAC1B,SAAUgF,EAAQ,KAClB,WAAY,WACZ,OAAQ,OACR,eAAgB,KAAK,gBACrB,UAAW,KAAK,UAAUE,EAAcF,CAAO,CAAC,CAClD,CAAC,CAEH,MAAE,CAEF,CAEJ,EOtXF,OAAS,kBAAAG,OAAsB,uBAE/B,OAAOC,OAAkB,SCFzB,OAAS,MAAMC,OAAY,OAK3B,IAAMC,GAAY,CAChB,MAAM,QAAWC,EAAqC,CAkBpD,OAjB+B,MAAMC,EAClC,KACC,UACA,CACE,GAAGD,EACH,GAAIA,EAAK,IAAME,GAAK,EACpB,QAASF,EAAK,SAAW,MACzB,QAASA,EAAK,SAAW,GAC3B,EACA,CACE,QAAS,CACP,YAAa,OACf,EACA,QAASG,EAAa,IAAI,MAC5B,CACF,EACC,KAAMC,GAAaA,EAAS,IAAI,GACnB,MAClB,EAEA,MAAM,mBAAmBC,EAAmC,CAU1D,OATe,MAAM,KAAK,QAAyB,CACjD,QAAAA,EACA,OAAQ,qBACR,OAAQ,CACN,CACE,WAAY,WACd,CACF,CACF,CAAC,GACa,MAAM,SACtB,CACF,EAEOC,GAAQP,GCvCR,IAAMQ,GAAuBC,GACjBA,EAAqC,SACpC,KFJpB,IAAAC,EAAAC,EAAAC,EAAAC,GAAAC,GAAAC,EAAAC,GAmBaC,GAAN,KAAmB,CAiBxB,aAAc,CA4GdC,EAAA,KAAML,IA4HNK,EAAA,KAAAH,GAxPAG,EAAA,KAAAR,EAAU,IAAIS,IAEd,KAAS,kBAAoB,GAE7B,UAAO,WACP,SAAM,2BACN,UAAO,4DAEP,eAA8B,KAE9B,iBAAuB,GAEvBD,EAAA,KAAAP,EAAc,IAEdO,EAAA,KAAAN,EAAW,KAGTQ,EAAA,KAAKV,GAAQ,gBAAgB,GAAG,EAChC,IAAMW,EAAeC,GAAwB,EACzCD,GAAgBE,GAAuBF,CAAY,EACrDG,EAAA,KAAKZ,EAAWS,GAEhBI,GAAwBL,EAAA,KAAKR,EAAQ,EAGvCc,EAAO,4BAAyC,IAAM,CACpD,KAAK,UAAY,KACjB,KAAK,YAAc,GACnBN,EAAA,KAAKV,GAAQ,KAAK,YAAY,CAChC,CAAC,EACDgB,EAAO,yBAAsC,IAAM,CAC7C,KAAK,kBACPN,EAAA,KAAKV,GAAQ,KAAK,UAAW,KAAK,eAAe,EACjDU,EAAA,KAAKV,GAAQ,KAAK,kBAAmB,CAAC,KAAK,eAAe,CAAC,EAE/D,CAAC,EACDgB,EAAO,GAAG,mBAAqBC,GAAyB,CAClDC,EAAaD,CAAS,IAAM,WAC9BH,EAAA,KAAKZ,EAAWe,EAAU,IAC1BF,GAAwBL,EAAA,KAAKR,EAAQ,EACrCQ,EAAA,KAAKV,GAAQ,KAAK,eAAgBU,EAAA,KAAKR,EAAQ,EAEnD,CAAC,CACH,CAEA,GAAGiB,EAAeC,EAA0C,CAC1D,OAAAV,EAAA,KAAKV,GAAQ,GAAGmB,EAAOC,CAAQ,EACxB,IACT,CAEA,KAAKD,EAAeC,EAA0C,CAC5D,OAAAV,EAAA,KAAKV,GAAQ,KAAKmB,EAAOC,CAAQ,EAC1B,IACT,CAEA,IAAID,EAAeC,EAA0C,CAC3D,OAAAV,EAAA,KAAKV,GAAQ,IAAImB,EAAOC,CAAQ,EACzB,IACT,CAEA,eAAeD,EAAeC,EAA0C,CACtE,OAAAV,EAAA,KAAKV,GAAQ,eAAemB,EAAOC,CAAQ,EACpC,IACT,CAEA,IAAI,YAAsB,CACxB,OAAOV,EAAA,KAAKT,EACd,CAEA,IAAI,WAAqB,CACvB,OAAO,KAAK,kBAAoB,IAClC,CAEA,MAAc,eAA2C,CACvD,GAAI,KAAK,iBAAmB,CAAC,KAAK,UAAW,CAC3C,IAAMoB,EAAS,KAAM,QAAO,mBACtB,CAAE,UAAAC,CAAU,EAAID,EAAO,SAAWA,EAExC,KAAK,UAAY,IAAIC,EAAU,KAAK,eAAe,CACrD,CACA,OAAO,KAAK,SACd,CAEA,IAAI,iBAAiC,CAvGvC,IAAAC,EAwGI,IAAMC,GAAUD,EAAAE,EAAY,gBAAgB,IAA5B,YAAAF,EAA+B,eAC/C,OAAOC,GAAoB,IAC7B,CAEA,IAAI,SAAkB,CACpB,OAAOd,EAAA,KAAKR,EACd,CAEA,MAAM,QAAQwB,EAAqC,CACjD,GAAI,CAEF,GADAZ,EAAA,KAAKb,EAAc,IACfwB,EAAY,QAAQ,EACjB,KAAK,iBACR,MAAME,EAAA,KAAKxB,GAAAC,IAAL,mBAGR,MAAM,IAAI,QAAkB,CAACwB,EAASC,IAAW,CAC/Cb,EAAO,4BAAyC,CAAE,QAAAY,EAAS,OAAAC,EAAQ,MAAAH,CAAM,CAAC,CAC5E,CAAC,EACID,EAAY,QAAQ,EAEb,KAAK,iBACf,MAAME,EAAA,KAAKxB,GAAAC,IAAL,eAFN,OAAM0B,GAAe,aAAa,EAMtC,GAAI,KAAK,gBACP,KAAK,UAAY,MAAM,KAAK,cAAc,EAC1C,KAAK,YAAc,GACnBpB,EAAA,KAAKV,GAAQ,KAAK,UAAW,KAAK,eAAe,MAEjD,OAAM8B,GAAe,aAAa,CAEtC,OAASC,EAAP,CACA,OAAO,QAAQ,OAAOA,CAAC,CACzB,QAAE,CACAjB,EAAA,KAAKb,EAAc,GACrB,CACF,CAOA,MAAM,YAA4B,CAChC,aAAM+B,GAAO,EACb,KAAK,UAAY,KACjB,KAAK,YAAc,GACZ,QAAQ,QAAQ,CACzB,CAEA,MAAM,gBAA8DC,EAAgBC,EAA8B,CAChHC,EAAkB,KAAK,UAAW,uBAAuB,EACzD,IAAMC,EAAS,MAAM,KAAK,cAAc,EAClCC,EAAQ,MAAMC,EAAO,qBAA8B,EAEzD,GAAIL,EAAY,WAAW,SAAW,EAAG,CACvC,IAAMM,EAAY,MAAMC,GAAU,mBAAmBN,GAAW,KAAK,OAAO,EACxEO,GAAoBR,CAAW,EAChCA,EAA4B,gBAAkBM,EAE9CN,EAAqC,QAAQ,gBAAkBM,CAEpE,CACA,IAAMG,EAAUD,GAAoBR,CAAW,EAC1CA,EAA4B,iBAAiB,EAC7CA,EAAqC,QAAQ,UAAU,EACtDU,EAAS,MAAMN,EAAM,KAAKO,EAAa,IAAI,QAASC,EAAU,OAAO,EAAGH,CAAO,EACrF,OAAAT,EAAY,aAAaE,EAAkBC,CAAM,EAAGO,CAAM,EAC1DhB,EAAA,KAAKtB,EAAAC,IAAL,UAA0B4B,GACnBD,CACT,CAEA,MAAM,oBACJa,EACAZ,EACc,CACdC,EAAkB,KAAK,UAAW,uBAAuB,EACzD,IAAMC,EAAS,MAAM,KAAK,cAAc,EAEpCG,EACJ,QAASQ,EAAI,EAAGA,EAAID,EAAa,OAAQC,IAAK,CAC5C,IAAMC,EAAKF,EAAaC,GACpBC,EAAG,WAAW,SAAW,IACtBT,IACHA,EAAY,MAAMC,GAAU,mBAAmBN,GAAW,KAAK,OAAO,GAEpEO,GAAoBO,CAAE,EACvBA,EAAmB,gBAAkBT,EAErCS,EAA4B,QAAQ,gBAAkBT,EAG7D,CAEA,IAAMU,EAAa,MADL,MAAMX,EAAO,qBAA8B,GAC1B,UAC7BM,EAAa,IAAI,QACjBC,EAAU,OAAO,EACjBC,EAAa,IAAKE,GAAO,CACvB,IAAMN,EAAUD,GAAoBO,CAAE,EACjCA,EAAmB,iBAAiB,EACpCA,EAA4B,QAAQ,UAAU,EACnD,OAAO,OAAO,KAAKN,CAAO,CAC5B,CAAC,CACH,EACA,OAAAI,EAAa,QAAQ,CAACE,EAAIE,IAAU,CAClCF,EAAG,aAAab,EAAkBC,CAAM,EAAGa,EAAWC,EAAM,CAC9D,CAAC,EACDvB,EAAA,KAAKtB,EAAAC,IAAL,UAA0B4B,GACnBY,CACT,CAEA,MAAM,uBACJb,EACAC,EACgC,CAChC,IAAMiB,EAAW,MAAM,KAAK,gBAAgBlB,EAAaC,CAAO,EAUhE,MAAO,CAAE,UATS,MAAMM,GAAU,QAAgB,CAChD,QAASN,GAAW,KAAK,QACzB,OAAQ,kBACR,OAAQ,CACN,OAAO,KAAKiB,EAAS,UAAU,CAAC,EAAE,SAAS,QAAQ,EACnD,CAAE,SAAU,SAAU,oBAAqB,WAAY,CACzD,CACF,CAAC,CAEkB,CACrB,CAEA,MAAM,YAAYT,EAAyD,CACzEU,EAAM,KAAK,gBAAiB,uBAAuB,EAEnD,IAAMC,EAAY,MADJ,MAAMf,EAAO,qBAA8B,GAC3B,KAAKM,EAAa,IAAI,QAASC,EAAU,OAAO,EAAGH,CAAO,EACxF,OAAAf,EAAA,KAAKtB,EAAAC,IAAL,WACO,CAAE,UAAA+C,CAAU,CACrB,CAEA,MAAM,YAAYnB,EAAiB,CAGjC,GAFAkB,EAAM,OAAOlB,GAAY,SAAU,0BAA0B,EAEzD,CAACrB,GAAuBqB,CAAO,EACjC,MAAMJ,GAAe,kBAAkB,6BAA6B,EAGrDL,EAAY,YAAY,IAElC,KAAK,iBAER,MAAMa,EAAO,YAAqB,GAItCxB,EAAA,KAAKZ,EAAWgC,GAChBnB,GAAwBmB,CAAO,EAC/B,WAAW,IAAMxB,EAAA,KAAKV,GAAQ,KAAK,eAAgBkC,CAAO,EAAG,CAAC,CAChE,CAGA,MAAM,QAAQoB,EAAuC,CAEnD,OADe,MAAMd,GAAU,QAAQ,CAAE,GAAGc,EAAM,QAASA,EAAK,SAAW,KAAK,OAAQ,CAAC,CAE3F,CAqBF,EA3QEtD,EAAA,YAYAC,EAAA,YAEAC,EAAA,YA8GMC,GAAA,YAAAC,GAAU,gBAAG,CACjB,IAAMoB,EAAU,MAAMc,EAAO,YAAqB,EAClD,WAAW,IAAM5B,EAAA,KAAKV,GAAQ,KAAK,kBAAmB,CAACwB,CAAO,CAAC,EAAG,CAAC,CACrE,EAyHAnB,EAAA,YAAAC,GAAoB,SAAC4B,EAAkB,CACrC,IAAMqB,EAAU9B,EAAY,YAAY,EACxC,GAAI8B,EACF,GAAI,CAEFC,GAAgB,CACd,SAAUtB,GAAA,KAAAA,EAAWxB,EAAA,KAAKR,GAC1B,SAAUqD,EAAQ,KAClB,WAAY,WACZ,OAAQ,OACR,eAAgB,KAAK,gBACrB,UAAW,KAAK,UAAUE,EAAcF,CAAO,CAAC,CAClD,CAAC,CAEH,MAAE,CAEF,CAEJ,ER9RF,IAAAG,EAAAC,EAAAC,GAyBMC,GAAN,KAAe,CAcL,aAAc,CAXtBC,EAAA,KAAAH,EAAA,QAEAG,EAAA,KAAAF,GAAA,QAaA,YAA+C,CAACG,EAAO,CAFvD,CATA,OAAc,aAAwB,CACpC,OAAKC,EAAA,KAAKN,IACRO,EAAA,KAAKP,EAAY,IAAIG,IAEhBG,EAAA,KAAKN,EACd,CASA,IAAI,UAA6B,CAE/B,OADkBQ,EAAkBF,EAAA,KAAKL,GAAW,6BAA6B,CAEnF,CAGA,IAAI,QAAuB,CAEzB,OADgBO,EAAkBF,EAAA,KAAKJ,IAAS,6BAA6B,CAE/E,CAEA,IAAI,SAAkB,CACpB,OAAOO,EAAa,OACtB,CAQA,KAAKC,EAAsB,CACzBC,EACED,GAAWA,EAAQ,WAAaA,EAAQ,WAAaA,EAAQ,MAC7D,oDACF,EACA,KAAK,OAASA,EAAQ,OACtBE,GAAiB,IAAM,KAAK,MAAM,EAElCC,EAAiB,KAAKH,EAAQ,KAAK,EACnCD,EAAa,KAAKC,CAAO,EAEpBJ,EAAA,KAAKL,IACRM,EAAA,KAAKN,EAAY,IAAIa,IAGlBR,EAAA,KAAKJ,KACRK,EAAA,KAAKL,GAAU,IAAIa,IAGjB,OAAO,QAAW,cACpB,OAAO,aAAe,KAI1B,CAEA,GAAGC,EAAsBC,EAA0C,CACjEC,EAAO,GAAGF,EAAOC,CAAQ,CAC3B,CAEA,KAAKD,EAAsBC,EAA0C,CACnEC,EAAO,KAAKF,EAAOC,CAAQ,CAC7B,CAEA,IAAID,EAAsBC,EAA0C,CAClEC,EAAO,IAAIF,EAAOC,CAAQ,CAC5B,CAEA,eAAeD,EAAsBC,EAA0C,CAC7EC,EAAO,eAAeF,EAAOC,CAAQ,CACvC,CACF,EAnFME,GAANhB,GACSH,EAAA,YAEPC,EAAA,YAEAC,GAAA,YAJAE,EADIe,GACGnB,EAAP,QAoFF,IAAIoB,EAESC,GAAe,IAAI,MAAM,CAAC,EAAe,CACpD,IAAIC,EAASC,EAAMC,EAAW,CACvBJ,IACHA,EAAgBD,GAAS,YAAY,GAEvC,IAAMM,EAAQ,QAAQ,IAAIL,EAAeG,EAAMH,CAAa,EAC5D,OAAI,OAAOK,GAAU,WACZA,EAAM,KAAKL,CAAa,EAE1BK,CACT,EACA,IAAIH,EAASC,EAAME,EAAO,CACxB,OAAKL,IACHA,EAAgBD,GAAS,YAAY,GAEhC,QAAQ,IAAIC,EAAeG,EAAME,EAAOL,CAAa,CAC9D,CACF,CAAC,EHtGM,IAAMM,GAAiC,MAAOC,GAAiD,CACpG,IAAMC,EAAS,SAAS,cAAc,QAAQ,EACxCC,EAAQ,QACRC,GAAWH,GAAA,YAAAA,EAAS,WAAY,KACtCC,EAAO,IAAM,GAAGG,EAAa,IAAI,qCAAqCD,WAAkBD,YAExFD,EAAO,UAAU,IAAI,4BAA4B,EAEjD,IAAMI,EAAgC,CACpC,SAAU,WACV,OAAQ,MACR,QAAS,OACT,eAAgB,SAChB,WAAY,SACZ,OAAQ,OACR,WAAY,OACZ,MAAO,QACP,OAAQ,OACR,KAAM,MACN,IAAK,MACL,UAAW,wBACX,YAAa,MACf,EAEA,QAAWC,KAAOD,EAChBJ,EAAO,MAAMK,GAAcD,EAAMC,GAGnC,IAAMC,EAAYP,GAAA,MAAAA,EAAS,aACvB,OAAOA,EAAQ,cAAiB,WAC9BA,EAAQ,aAAa,EACrBA,EAAQ,aACV,SAAS,KAEb,OAAAO,EAAU,YAAYN,CAAM,EAErB,IAAI,QAAQ,CAACO,EAASC,IAAW,CACtC,IAAMC,EAAYC,GAAwB,CACpCA,EAAM,KAAK,OAAS,uCACtB,OAAO,oBAAoB,UAAWD,CAAQ,EAC9CH,EAAU,YAAYN,CAAM,EACdU,EAAM,KAAK,MAEvBH,EAAQG,EAAM,KAAK,KAAK,EAExBF,EAAO,mBAAmB,EAGhC,EACA,OAAO,iBAAiB,UAAWC,CAAQ,CAC7C,CAAC,CACH,EAEaE,GAAmB,MAAOC,GAA2B,CAChE,GAAM,CAAE,SAAAC,EAAU,SAAAC,EAAU,OAAAC,CAAO,EAAIH,EACnC,CAAE,YAAAI,CAAY,EAAIJ,EAEjBI,IACHA,EAAc,OAAO,SAAS,MAGhC,GAAM,CAAE,SAAUC,EAAmB,MAAAC,CAAM,EAAI,MAAMC,EAAM,qBACzDN,EACAG,EACAF,EACAC,CACF,EAEA,GAAIF,IAAa,UAAW,CAC1B,IAAMO,EAAU,KAAK,UAAU,CAC7B,SAAAP,EACA,YAAAG,EACA,kBAAAC,EACA,MAAAC,CACF,CAAC,EACKG,EAAOC,GAAUF,CAAO,EAC9B,MAAO,GAAGjB,EAAa,IAAI,4BAA4BkB,GACzD,CAEA,OAAOJ,CACT,EAQaM,GAAiB,MAAOX,GAA2B,CAC9D,IAAMY,EAAM,MAAMb,GAAiBC,CAAK,EACxC,eAAe,QAAQ,wBAAyB,MAAM,EACtD,OAAO,SAAS,KAAOY,CACzB,EAOaC,GAAoB,MAAOC,IACtCC,EAAMxB,EAAa,YAAa,6BAA6B,EAC9C,MAAMgB,EAAM,YAAYO,CAAK,GASjCE,GAAU,MAAOF,GAA2C,CACvEC,EAAMxB,EAAa,YAAa,6BAA6B,EAC7D,IAAM0B,EAAYH,EAAM,MACpBG,IACFF,EACEG,GAAa,OAAO,KAAMC,GAAUA,EAAM,KAAOF,EAAU,IAAME,EAAM,OAASF,EAAU,IAAI,EAC9F,aAAa,KAAK,UAAUH,EAAM,KAAK,oBACzC,EACA,OAAOA,EAAM,OAGf,IAAIM,EACAC,EACJ,GAAI,UAAWP,GAAS,SAAUA,GAASA,EAAM,OAASA,EAAM,KAE9DM,EAAW,MAAMb,EAAM,MAAMO,CAAqB,EAClDO,kBACS,UAAWP,GAAS,SAAUA,GAASA,EAAM,OAASA,EAAM,KAErEM,EAAW,MAAMb,EAAM,MAAMO,CAAqB,EAClDO,kBACS,aAAcP,GAASA,EAAM,UAAY,mBAAoBA,GAASA,EAAM,eAErFM,EAAW,MAAMb,EAAM,oBAAoB,CAAE,SAAUO,EAAM,SAAU,eAAgBA,EAAM,cAAe,CAAC,EAC7GO,EAAiBP,EAAM,iBAEvB,eAAgBA,GAChBA,EAAM,YACN,SAAUA,GACVA,EAAM,MACN,UAAWA,GACXA,EAAM,MAGNM,EAAW,MAAMb,EAAM,sBAAsBO,EAAM,WAAYA,EAAM,KAAMA,EAAM,KAAK,EACtFO,EAAiBP,EAAM,eAEvB,OAAM,IAAI,MAAM,uBAAuB,EAIzCQ,GAAc,EACdC,EAAY,YAAYH,CAAQ,EAChC,GAAI,CACF,MAAMI,EAAO,IACXP,EAAaQ,EAAaR,CAAS,IAAM,sCAC3C,CACF,OAASS,EAAP,CACA,MAAAH,EAAY,YAAY,MAAS,EAC3BG,CACR,CAGAH,EAAY,kBAAkBF,CAAc,EAExCJ,GACFU,EAAO,KAAK,mBAAoBV,CAAS,EAG3C,IAAMW,EAAOC,EAAcT,CAAQ,EACnC,OAAAU,GAAUF,EAAMd,CAAK,EACdc,CACT,EAKaG,GAAa,SAAY,CACpC,GAAI,CACF,MAAMxB,EAAM,OAAO,CACrB,MAAE,CAEF,CACAyB,EAAiB,MAAM,EACvBC,GAAa,CACf,EAEMH,GAAY,CAACV,EAAoBN,IAAwB,CAtN/D,IAAAoB,EAAAC,EAuNM,eAAgBrB,GAASA,EAAM,YAAc,SAAUA,GAASA,EAAM,MAAQ,UAAWA,GAASA,EAAM,OACtG,OAAO,QAAW,eACfoB,EAAA,OAAe,WAAf,MAAAA,EAAyB,WAC3B,OAAe,SAAS,SAAS,mBAAqB,KAEpDC,EAAA,OAAe,WAAf,MAAAA,EAAyB,SAC3B,OAAe,SAAS,OAAO,mBAAqB,IAEvD,OAAO,cACL,IAAI,YAAY,kCAAmC,CACjD,OAAQ,OAAO,OAAOf,CAAQ,CAChC,CAAC,CACH,GAIJ,WAAW,IAAMO,EAAO,2BAAwCP,CAAQ,EAAG,CAAC,CAC9E,EAEMa,GAAe,IAAM,CACzB,WAAW,IAAMN,EAAO,6BAAyC,EAAG,CAAC,CACvE,EAMaS,GAAc,IAClB,QAAQC,GAAY,CAAC,EAOjBA,GAAc,IAA4B,CACrD,IAAMC,EAAmBf,EAAY,YAAY,EACjD,OAAOe,EAAmBT,EAAcS,CAAgB,EAAI,MAC9D,EAMaC,GAAe,SAA+B,CACzD,IAAMnB,EAAWG,EAAY,YAAY,EACzC,GAAI,CAACH,EACH,MAAM,IAAI,MAAM,uBAAuB,EAEzC,IAAMoB,EAAS,MAAMjC,EAAM,aAAa,EACXiC,EAAO,QAAQ,KAAMC,GAAW,CAC3D,IAAMC,EAActB,EAAS,QAAQ,KAAMuB,GAASA,EAAK,MAAQF,EAAO,IAAI,EAC5E,MAAO,CAACC,GAAeA,EAAY,iBAAmBD,EAAO,cAC/D,CAAC,IAGCnB,GAAc,EACd,WAAW,IAAMK,EAAO,4BAAwC,EAAG,CAAC,GAGtE,IAAMiB,EAAc,CAAE,GAAGxB,EAAU,GAAGoB,CAAO,EAC7C,OAAAjB,EAAY,YAAYqB,CAAW,EAC5Bf,EAAce,CAAW,CAClC,EAMaC,GAAoB,IACxBtB,EAAY,kBAAkB,EAQ1BuB,GAAyB,MAAO3D,GAA4B,CACvE4B,EAAMqB,GAAY,EAAG,uBAAuB,EAC5C,IAAMW,EAAeC,EAAkB9B,GAAa,SAAS,gBAAiB,6BAA6B,EAErG,CAAE,QAAA+B,EAAS,KAAAC,CAAK,EAAI/D,EACpBgE,EAAW,qBAAqBD,KAAQD,KAAWF,IACnDK,EAAiB,aAAa,QAAQD,CAAQ,EACpD,GAAIC,EACF,OAAOA,EAMT,IAAMC,GAJW,MAAMnC,GAAa,SAAS,QAAQ,CACnD,OAAQ,8BACR,OAAQ,CAAC,CAAE,QAAA+B,EAAS,KAAAC,EAAM,aAAAH,CAAa,CAAC,CAC1C,CAAC,GACoC,GAAG,oBACxC,oBAAa,QAAQI,EAAUE,CAAmB,EAC3CA,CACT,EctTA,OAAOC,OAAY,sBAyBZ,IAAMC,GAAuB,SACnB,MAAMC,EAAM,iBAAiB,EASjCC,GAAiC,MAC5CC,GAEe,MAAMF,EAAM,mBAAmBE,CAAM,EASzCC,GAAmB,MAAOD,GAA6E,CAClH,IAAME,EAAWC,EAAkBC,EAAY,YAAY,EAAG,gCAAgC,EAC1FC,EACJ,GAAI,UAAWL,GAAUA,EAAO,MAC9BK,EAAS,MAAMP,EAAM,cAAcE,CAAM,UAChC,UAAWA,GAAUA,EAAO,MACrCK,EAAS,MAAMP,EAAM,cAAcE,CAAM,UAChC,aAAcA,GAAUA,EAAO,SACxCK,EAAS,MAAMP,EAAM,wBAAwBE,CAAM,MAEnD,OAAM,IAAI,MAAM,kCAAkC,EAGpD,IAAMM,EAAiB,CAAE,GAAGJ,EAAU,GAAGG,CAAO,EAChD,OAAAD,EAAY,YAAYE,CAAc,EAC/BC,EAAcD,CAAc,CACrC,EAOaE,GAA+B,MAAOC,GAClC,MAAMX,EAAM,yBAAyBW,CAAI,EAS7CC,GAAsB,MACjCD,GAC6B,CAC7B,IAAMJ,EAAS,MAAMP,EAAM,oBAAoBW,CAAI,EACnD,OAAAL,EAAY,sBAAsBC,CAAM,EACjCA,CACT,EAOaM,GAA4B,MACvCC,GAEe,MAAMd,EAAM,uBAAuBc,CAAgB,EASvDC,GAA0B,MAAOb,GAI7B,MAAMF,EAAM,wBAAwBE,CAAM,EAQ9Cc,GAAqB,IACzBV,EAAY,mBAAmB,EAGxC,SAASW,GAAaC,EAAqB,CACzC,IAAMd,EAAWE,EAAY,YAAY,EACzC,GAAI,CAACF,EACH,MAAM,IAAI,MAAM,gCAAgC,EAElD,OAAOe,GAAOf,EAAS,KAAOc,CAAG,EAC9B,SAAS,EACT,YAAY,CACjB,CASO,IAAME,GAAqB,MAAO,CACvC,SAAAC,EACA,iBAAAP,EACA,KAAAQ,CACF,IAIgC,CAC9B,IAAMf,EAAS,MAAMP,EAAM,mBAAmB,CAAE,SAAUiB,GAAaI,CAAQ,EAAG,iBAAAP,EAAkB,KAAAQ,CAAK,CAAC,EAC1G,OAAAhB,EAAY,sBAAsBC,CAAM,EACjCA,CACT,EAQagB,GAAwB,MAAO,CAC1C,SAAAF,EACA,YAAAG,CACF,IAGgC,CAC9B,IAAMjB,EAAS,MAAMP,EAAM,sBAAsB,CAC/C,SAAUiB,GAAaI,CAAQ,EAC/B,YAAaJ,GAAaO,CAAW,CACvC,CAAC,EACD,OAAAlB,EAAY,sBAAsBC,CAAM,EACjCA,CACT,EAQakB,GAAwB,MAAOJ,GAAqB,CAC/D,IAAMd,EAAS,MAAMP,EAAM,sBAAsBiB,GAAaI,CAAQ,CAAC,EACvEK,EAAa,aAAenB,CAC9B,EAOaoB,GAAwB,MAAON,GAA+C,CACzF,IAAMd,EAAS,MAAMP,EAAM,sBAAsBiB,GAAaI,CAAQ,CAAC,EACvE,OAAAf,EAAY,sBAAsBC,CAAM,EACjCA,CACT,EAMaqB,GAAoB,IACxBtB,EAAY,kBAAkB,EAO1BuB,GAAsB,IAC1BD,GAAkB,GAAK,CAACE,GAAY,EAQhCC,GAAgB,MAAOC,GAA6C,CAC/E,IAAMzB,EAAS,MAAM0B,GAAqBD,CAAc,EACxD,OAAIzB,GACF2B,EAAO,6BAAyC,EAE3C3B,CACT,EAOa4B,GAAqB,MAAOH,IACnCJ,GAAkB,GACpBQ,EAAMN,GAAY,EAAG,8BAA8B,EAEtC,MAAMO,GAAoBL,CAAc,GAS5CC,GAAuB,MAAOD,GAA6C,CACtF,GAAI,CACF,MAAMM,GAAoBN,CAAc,CAC1C,OAASO,EAAP,CACA,IAAKA,GAAA,YAAAA,EAAiB,WAAY,mCAChC,MAAO,GAEP,MAAMA,CAEV,CACA,MAAO,EACT,EAEaC,GAAqB,IACnBnC,EAAkBC,EAAY,mBAAmB,EAAG,uBAAuB,EAQ7EmC,GAAwB,SACpB,MAAMzC,EAAM,kBAAkB,EASlC0C,GAA0B,MAAOC,GAC7B,MAAM3C,EAAM,oBAAoB2C,CAAc",
  "names": ["ApiError", "isApiError", "err", "isRpcError", "AuthType", "isSocialAuthType", "authType", "WalletEncryptedType", "SolanaEnhancedMethod", "EvmEnhancedMethod", "TransactionSmartType", "GasFeeMode", "mapToUserInfo", "originalUserInfo", "mac_key", "cognito_result", "wallets", "userInfo", "wallet", "uuid", "chain_name", "public_address", "check", "condition", "throwError", "requireNotNullish", "x", "isNullish", "AuthCoreEvent", "IframeEvent", "SolanaRpcMethod", "EvmRpcMethod", "WalletType", "SignTypedDataVersion", "BI", "uuid", "aes", "utf8", "md5", "isServer", "_KEY_PREFIX", "_appId", "_secretKey", "_wrapKey", "wrapKey_fn", "_encrypt", "encrypt_fn", "_decrypt", "decrypt_fn", "EncryptedStorage", "__privateAdd", "appId", "__privateSet", "hostname", "md5", "__privateGet", "removeKeys", "length", "i", "key", "value", "__privateMethod", "isServer", "cipherValue", "check", "plaintext", "aes", "ciphertext", "utf8", "encryptedStorage", "encryptedStorage_default", "EventEmitter", "events", "eventUtils_default", "userStorage", "info", "localUserInfo", "encryptedStorage_default", "eventUtils_default", "mapToUserInfo", "authType", "userInfo", "i", "result", "account", "_a", "wallet", "userStorage_default", "getCurrentEvmChainId", "encryptedStorage_default", "setCurrentEvmChainId", "id", "getCurrentSolanaChainId", "setCurrentSolanaChainId", "_authOptions", "_devEnv", "_stagingEnv", "_productionEnv", "GlobalConfig", "__privateAdd", "authOptions", "__privateSet", "check", "__privateGet", "uuid", "storeKey", "deviceId", "encryptedStorage_default", "isServer", "globalConfig", "config_default", "getBI", "BI", "config_default", "analyticsRecord", "params", "_a", "isServer", "analyticsActive", "hex", "sha256Hex", "ALPHABET", "ALPHABET_MAP", "acc", "x", "i", "BASE", "encode58", "buffer", "digits", "j", "carry", "digit", "decode58", "data", "bytes", "c", "sha256", "msg", "hex", "sha256Hex", "fromHex", "addr", "checkSum", "address", "encode58", "toHex", "base58Sting", "decode58", "checkSum1", "defineChain", "defaultTokenIcon", "solana", "defineChain", "_getChains", "setChainProvider", "fn", "isTron", "chain", "chainInfo", "getEVMChainInfoById", "getChainInfo", "chain", "id", "_getChains", "c", "getChainType", "_a", "getEvmChains", "getSolanaChains", "getEVMChainInfoById", "getChainIcon", "_b", "chainId", "isSolanaChain", "isChainSupportEIP1559", "data", "getSolanaChainInfoById", "ethereumUtils", "method", "base64url", "axios", "sha256", "stringify", "uuid", "client", "axios", "config_default", "status", "config", "_a", "_b", "macKey", "isChainRpcRequest", "auth", "sha256", "userInfo", "userStorage_default", "token", "timestamp", "randomStr", "uuid", "merged", "mac", "stringify", "response", "data", "isApiError", "encryptedStorage_default", "eventUtils_default", "isRpcError", "baseUrl", "client_default", "pnApi", "data", "client_default", "provider", "thirdpartyCode", "code", "nonce", "redirectUrl", "appState", "prompt", "params", "_a", "userStorage_default", "uuid", "result", "response", "verifyCodeMethod", "password", "oldPassword", "projectAppUuid", "pnApi_default", "mainnet", "addHexPrefix", "intToHex", "isHexString", "toBuffer", "concatSig", "providerErrors", "rpcErrors", "EventEmitter", "uuid", "evmApi", "data", "client_default", "uuid", "config_default", "response", "evmApi_default", "arrToBufArr", "hashPersonalMessage", "isHexPrefixed", "isHexString", "setLengthLeft", "setLengthRight", "stripHexPrefix", "toBuffer", "TypedDataUtils", "BN", "keccak256", "personalSignHash", "data", "isNullish", "message", "legacyToBuffer", "hashPersonalMessage", "signTypedDataHash", "version", "_typedSignatureHash", "TypedDataUtils", "typedData", "error", "e", "types", "schema", "arrToBufArr", "keccak256", "solidityPack", "values", "ret", "i", "type", "elementaryName", "value", "solidityHexValue", "name", "bitsize", "size", "num", "isArray", "subType", "arraySize", "parseTypeArray", "arrayValues", "v", "padding", "bytesize", "setLengthLeft", "parseTypeN", "setLengthRight", "parseNumber", "tmp", "arg", "isHexPrefixed", "BN", "stripHexPrefix", "isHexString", "toBuffer", "publicToAddress", "toChecksumAddress", "bs58", "threshSig", "data", "module", "EdDsa", "Ecdsa", "p2Key", "config_default", "ciphertext", "key", "decryptData", "userStorage_default", "plaintext", "encryptData", "password", "uuid", "generateKey", "chainName", "endpoint", "params", "address", "edDSA", "bs58", "ecDSA", "toChecksumAddress", "publicToAddress", "userInfo", "requireNotNullish", "value", "threshSig_default", "createKMSClient", "AWS", "fromCognitoIdentity", "NotAuthorizedException", "m", "cognitoResult", "userStorage_default", "credentials", "isNotAuthorizedError", "_a", "generateDataKey", "kmsClient", "output", "e", "pnApi_default", "decryptDataKey", "encryptDataKey", "dataKey", "decrypt", "data", "decompress", "Plaintext", "setupMasterPassword", "password", "userInfo", "userStorage_default", "ciphertext", "plaintext", "generateDataKey", "localKey", "threshSig_default", "localKMSDataKey", "requests", "wallet", "isNullish", "createType2Wallet", "encryptType0Wallet", "encryptTypeWallet", "encryptResults", "result", "decryptResult", "decryptP2Key", "check", "wallets", "item", "uuid", "public_address", "encryptedKMSDataKey", "updateResult", "pnApi_default", "saveLocalKey", "saveLocalKMSDataKey", "newWallet", "p2Key", "address", "p2KeyEncrypted2", "encryptP2Key", "createEncryptedWallet", "encryptedType", "loadLocalKMSDataKey", "loadLocalKey", "decryptWallet", "decrypt", "oldLocalKMSDataKey", "oldLocalKey", "p2KeyEncrypted", "p2KeyEncrypted1", "checkMasterPassword", "requireNotNullish", "encryptedStorage_default", "kmsDataKey", "decryptDataKey", "hasLocalKey", "clearLocalKey", "wallet", "name", "userInfo", "userStorage_default", "info", "_a", "_b", "walletInfo", "publicAddress", "encryptedKMSDataKey", "localKMSDataKey", "p2KeyValue", "address", "p2Key", "threshSig_default", "kmsDataKey", "generateDataKey", "ciphertext", "plaintext", "createEncryptedWallet", "data", "decryptWallet", "wallet_default", "_events", "_chainId", "_genWallet", "genWallet_fn", "_checkConnected", "checkConnected_fn", "_sendAnalyticsActive", "sendAnalyticsActive_fn", "EthereumProvider", "__privateAdd", "EventEmitter", "__privateGet", "localChainId", "getCurrentEvmChainId", "getEVMChainInfoById", "__privateSet", "setCurrentEvmChainId", "eventUtils_default", "intToHex", "chainInfo", "getChainType", "_a", "address", "userStorage_default", "isNullish", "event", "listener", "disconnect", "param", "__privateMethod", "resolve", "reject", "providerErrors", "data", "_b", "_c", "_d", "_e", "_f", "_g", "_h", "_i", "_j", "_k", "method", "rpcErrors", "EvmRpcMethod", "isV1", "ethereumUtils", "from", "typedData", "uniq", "version", "message", "isHexString", "addHexPrefix", "chainId", "txData", "result", "evmApi_default", "error", "code", "extra", "transaction", "isChainSupportEIP1559", "ecDSA", "wallet_default", "signedTx", "isTron", "config_default", "threshSig_default", "signed", "module", "TransactionFactory", "tx", "hash", "personalSignHash", "sig", "concatSig", "toBuffer", "signTypedDataHash", "useInfo", "analyticsActive", "mapToUserInfo", "providerErrors", "EventEmitter", "uuid", "solanaApi", "data", "client_default", "uuid", "config_default", "response", "chainId", "solanaApi_default", "isLegacyTransaction", "transaction", "_events", "_connecting", "_chainId", "_genWallet", "genWallet_fn", "_sendAnalyticsActive", "sendAnalyticsActive_fn", "SolanaWallet", "__privateAdd", "EventEmitter", "__privateGet", "localChainId", "getCurrentSolanaChainId", "getSolanaChainInfoById", "__privateSet", "setCurrentSolanaChainId", "eventUtils_default", "viemChain", "getChainType", "event", "listener", "module", "PublicKey", "_a", "address", "userStorage_default", "param", "__privateMethod", "resolve", "reject", "providerErrors", "e", "disconnect", "transaction", "chainId", "requireNotNullish", "pubKey", "edDSA", "wallet_default", "blockhash", "solanaApi_default", "isLegacyTransaction", "message", "signed", "config_default", "threshSig_default", "transactions", "i", "tx", "signatures", "index", "signedTx", "check", "signature", "data", "useInfo", "analyticsActive", "mapToUserInfo", "_authCore", "_ethereum", "_solana", "_AuthCore", "__privateAdd", "mainnet", "__privateGet", "__privateSet", "requireNotNullish", "config_default", "options", "check", "setChainProvider", "encryptedStorage_default", "EthereumProvider", "SolanaWallet", "event", "listener", "eventUtils_default", "AuthCore", "_particleAuth", "particleAuth", "_target", "prop", "_receiver", "value", "getCloudflareTurnstileResponse", "options", "iframe", "theme", "language", "config_default", "style", "key", "container", "resolve", "reject", "listener", "event", "getSocialAuthUrl", "parms", "authType", "appState", "prompt", "redirectUrl", "thirdpartyAuthUrl", "state", "pnApi_default", "dataStr", "data", "base64url", "thirdpartyAuth", "url", "getConnectCaptcha", "param", "check", "connect", "chainInfo", "particleAuth", "chain", "userInfo", "latestAuthType", "clearLocalKey", "userStorage_default", "wallet_default", "getChainType", "error", "eventUtils_default", "info", "mapToUserInfo", "onConnect", "disconnect", "encryptedStorage_default", "onDisconnect", "_a", "_b", "isConnected", "getUserInfo", "originalUserInfo", "syncUserInfo", "result", "wallet", "localWallet", "item", "newUserInfo", "getLatestAuthType", "getSmartAccountAddress", "ownerAddress", "requireNotNullish", "version", "name", "localKey", "localAAAddress", "smartAccountAddress", "sha256", "getLoginBindAccounts", "pnApi_default", "checkHasBoundLoginPhoneOrEmail", "params", "bindLoginAccount", "userInfo", "requireNotNullish", "userStorage_default", "result", "latestUserInfo", "mapToUserInfo", "getBindSecurityAccounCaptcha", "data", "bindSecurityAccount", "getSecurityAccountCaptcha", "verifyCodeMethod", "getSecurityAccountToken", "hasPaymentPassword", "hashPassword", "pwd", "sha256", "setPaymentPassword", "password", "code", "updatePaymentPassword", "oldPassword", "verifyPaymentPassword", "config_default", "deletePaymentPassword", "hasMasterPassword", "isNeedRestoreWallet", "hasLocalKey", "restoreWallet", "masterPassword", "verifyMasterPassword", "eventUtils_default", "setMastersPassword", "check", "setupMasterPassword", "checkMasterPassword", "error", "getSecurityAccount", "getAuthorizationDApps", "deleteAuthorizationDApp", "projectAppUuid"]
}
