diff --git a/src/internal/abis/repoDeadlineDriver.ts b/src/internal/abis/repoDeadlineDriver.ts new file mode 100644 index 00000000..c4b9eb24 --- /dev/null +++ b/src/internal/abis/repoDeadlineDriver.ts @@ -0,0 +1,372 @@ +export const repoDeadlineDriverAbi = [ + { + inputs: [ + { + internalType: 'contract RepoDriver', + name: 'repoDriver_', + type: 'address', + }, + {internalType: 'uint32', name: 'driverId_', type: 'uint32'}, + ], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'uint256', + name: 'accountId', + type: 'uint256', + }, + { + indexed: false, + internalType: 'uint256', + name: 'repoAccountId', + type: 'uint256', + }, + { + indexed: true, + internalType: 'uint256', + name: 'recipientAccountId', + type: 'uint256', + }, + { + indexed: true, + internalType: 'uint256', + name: 'refundAccountId', + type: 'uint256', + }, + { + indexed: false, + internalType: 'uint32', + name: 'deadline', + type: 'uint32', + }, + ], + name: 'AccountSeen', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'address', + name: 'previousAdmin', + type: 'address', + }, + { + indexed: false, + internalType: 'address', + name: 'newAdmin', + type: 'address', + }, + ], + name: 'AdminChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'beacon', + type: 'address', + }, + ], + name: 'BeaconUpgraded', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'currentAdmin', + type: 'address', + }, + { + indexed: true, + internalType: 'address', + name: 'newAdmin', + type: 'address', + }, + ], + name: 'NewAdminProposed', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'pauser', + type: 'address', + }, + ], + name: 'Paused', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'pauser', + type: 'address', + }, + { + indexed: true, + internalType: 'address', + name: 'admin', + type: 'address', + }, + ], + name: 'PauserGranted', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'pauser', + type: 'address', + }, + { + indexed: true, + internalType: 'address', + name: 'admin', + type: 'address', + }, + ], + name: 'PauserRevoked', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'pauser', + type: 'address', + }, + ], + name: 'Unpaused', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'implementation', + type: 'address', + }, + ], + name: 'Upgraded', + type: 'event', + }, + { + inputs: [], + name: 'acceptAdmin', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'admin', + outputs: [{internalType: 'address', name: '', type: 'address'}], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'allPausers', + outputs: [ + { + internalType: 'address[]', + name: 'pausersList', + type: 'address[]', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + {internalType: 'uint256', name: 'repoAccountId', type: 'uint256'}, + { + internalType: 'uint256', + name: 'recipientAccountId', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'refundAccountId', + type: 'uint256', + }, + {internalType: 'uint32', name: 'deadline', type: 'uint32'}, + ], + name: 'calcAccountId', + outputs: [{internalType: 'uint256', name: 'accountId', type: 'uint256'}], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + {internalType: 'uint256', name: 'repoAccountId', type: 'uint256'}, + { + internalType: 'uint256', + name: 'recipientAccountId', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'refundAccountId', + type: 'uint256', + }, + {internalType: 'uint32', name: 'deadline', type: 'uint32'}, + {internalType: 'contract IERC20', name: 'erc20', type: 'address'}, + ], + name: 'collectAndGive', + outputs: [{internalType: 'uint128', name: 'amt', type: 'uint128'}], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'drips', + outputs: [{internalType: 'contract Drips', name: '', type: 'address'}], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'driverId', + outputs: [{internalType: 'uint32', name: '', type: 'uint32'}], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [{internalType: 'address', name: 'pauser', type: 'address'}], + name: 'grantPauser', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'implementation', + outputs: [{internalType: 'address', name: '', type: 'address'}], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'isPaused', + outputs: [{internalType: 'bool', name: '', type: 'bool'}], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [{internalType: 'address', name: 'pauser', type: 'address'}], + name: 'isPauser', + outputs: [{internalType: 'bool', name: 'isAddrPauser', type: 'bool'}], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'pause', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [{internalType: 'address', name: 'newAdmin', type: 'address'}], + name: 'proposeNewAdmin', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'proposedAdmin', + outputs: [{internalType: 'address', name: '', type: 'address'}], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'proxiableUUID', + outputs: [{internalType: 'bytes32', name: '', type: 'bytes32'}], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'renounceAdmin', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'repoDriver', + outputs: [{internalType: 'contract RepoDriver', name: '', type: 'address'}], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [{internalType: 'address', name: 'pauser', type: 'address'}], + name: 'revokePauser', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'unpause', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'newImplementation', + type: 'address', + }, + ], + name: 'upgradeTo', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'newImplementation', + type: 'address', + }, + {internalType: 'bytes', name: 'data', type: 'bytes'}, + ], + name: 'upgradeToAndCall', + outputs: [], + stateMutability: 'payable', + type: 'function', + }, +] as const; diff --git a/src/internal/config/contractsRegistry.ts b/src/internal/config/contractsRegistry.ts index e1d1373d..dfaec517 100644 --- a/src/internal/config/contractsRegistry.ts +++ b/src/internal/config/contractsRegistry.ts @@ -1,4 +1,7 @@ +import {zeroAddress} from 'viem'; + export const contractsRegistry = { + // Mainnet 1: { repoDriver: { address: '0x770023d55D09A9C110694827F1a6B32D5c2b373E', @@ -16,9 +19,13 @@ export const contractsRegistry = { address: '0x60F25ac5F289Dc7F640f948521d486C964A248e5', }, nativeTokenUnwrapper: { - address: undefined, + address: zeroAddress, + }, + repoDeadlineDriver: { + address: zeroAddress, }, }, + // Polygon Amoy 80002: { repoDriver: { address: '0x54372850Db72915Fd9C5EC745683EB607b4a8642', @@ -36,9 +43,13 @@ export const contractsRegistry = { address: '0x5C7c5AA20b15e13229771CB7De36Fe1F54238372', }, nativeTokenUnwrapper: { - address: undefined, + address: zeroAddress, + }, + repoDeadlineDriver: { + address: zeroAddress, }, }, + // OP Sepolia 11155420: { repoDriver: { address: '0xa71bdf410D48d4AA9aE1517A69D7E1Ef0c179b2B', @@ -56,9 +67,13 @@ export const contractsRegistry = { address: '0x09e04Cb8168bd0E8773A79Cc2099f19C46776Fee', }, nativeTokenUnwrapper: { - address: undefined, + address: zeroAddress, + }, + repoDeadlineDriver: { + address: '0xE57A3111414E0FaB39cc6e8fDe957b1f6471cd49', }, }, + // Sepolia 11155111: { repoDriver: { address: '0xa71bdf410D48d4AA9aE1517A69D7E1Ef0c179b2B', @@ -76,9 +91,13 @@ export const contractsRegistry = { address: '0x09e04Cb8168bd0E8773A79Cc2099f19C46776Fee', }, nativeTokenUnwrapper: { - address: undefined, + address: zeroAddress, + }, + repoDeadlineDriver: { + address: '0x4e576318213e3c9b436d0758a021a485c5d8b929', }, }, + // Local Testnet 31337: { repoDriver: { address: '0x971e08fc533d2A5f228c7944E511611dA3B56B24', @@ -96,9 +115,13 @@ export const contractsRegistry = { address: '0x2eac4218a453B1A52544Be315d2376B9A76614F1', }, nativeTokenUnwrapper: { - address: undefined, + address: zeroAddress, + }, + repoDeadlineDriver: { + address: '0xFD9Aa049A4f3dC1a2CD3355Ce52A943418Fa54e3', }, }, + // Base Sepolia 84532: { repoDriver: { address: '0x54372850Db72915Fd9C5EC745683EB607b4a8642', @@ -116,9 +139,13 @@ export const contractsRegistry = { address: '0x5C7c5AA20b15e13229771CB7De36Fe1F54238372', }, nativeTokenUnwrapper: { - address: undefined, + address: zeroAddress, + }, + repoDeadlineDriver: { + address: zeroAddress, }, }, + // Filecoin 314: { repoDriver: { address: '0xe75f56B26857cAe06b455Bfc9481593Ae0FB4257', @@ -138,7 +165,11 @@ export const contractsRegistry = { nativeTokenUnwrapper: { address: '0x64e0d60C70e9778C2E649FfBc90259C86a6Bf396', }, + repoDeadlineDriver: { + address: '0x0386b66e2b0106ff27ef26e84102ca78a5c0edef', + }, }, + // Metis 1088: { repoDriver: { address: '0xe75f56B26857cAe06b455Bfc9481593Ae0FB4257', @@ -156,9 +187,13 @@ export const contractsRegistry = { address: '0xd6Ab8e72dE3742d45AdF108fAa112Cd232718828', }, nativeTokenUnwrapper: { - address: undefined, + address: zeroAddress, + }, + repoDeadlineDriver: { + address: '0x0386b66e2b0106ff27ef26e84102ca78a5c0edef', }, }, + // OP Mainnet 10: { repoDriver: { address: '0xe75f56B26857cAe06b455Bfc9481593Ae0FB4257', @@ -178,6 +213,9 @@ export const contractsRegistry = { nativeTokenUnwrapper: { address: '0x64e0d60C70e9778C2E649FfBc90259C86a6Bf396', }, + repoDeadlineDriver: { + address: '0x0386b66e2b0106ff27ef26e84102ca78a5c0edef', + }, }, } as const; diff --git a/src/internal/donations/prepareOneTimeDonation.ts b/src/internal/donations/prepareOneTimeDonation.ts index 5b2bb655..a33f4ad6 100644 --- a/src/internal/donations/prepareOneTimeDonation.ts +++ b/src/internal/donations/prepareOneTimeDonation.ts @@ -8,7 +8,19 @@ import { import {requireSupportedChain} from '../shared/assertions'; import {buildTx} from '../shared/buildTx'; import {contractsRegistry} from '../config/contractsRegistry'; -import {resolveReceiverAccountId, SdkReceiver} from '../shared/receiverUtils'; +import { + resolveDeadlineAccount, + resolveReceiverAccountId, + SdkReceiver, +} from '../shared/receiverUtils'; +import {DripsError} from '../shared/DripsError'; + +export type DeadlineConfig = { + /** The deadline by which funds must be claimed. */ + readonly deadline: Date; + /** The address to refund unclaimed funds to. */ + readonly refundAddress: Address; +}; export type OneTimeDonation = { /** The receiver of the donation. */ @@ -23,6 +35,8 @@ export type OneTimeDonation = { readonly tokenDecimals: number; /** Optional transaction overrides for the batched transaction. */ batchedTxOverrides?: BatchedTxOverrides; + /** Optional deadline configuration for the donation. */ + readonly deadlineConfig?: DeadlineConfig; }; export async function prepareOneTimeDonation( @@ -31,9 +45,44 @@ export async function prepareOneTimeDonation( ): Promise { const chainId = await adapter.getChainId(); requireSupportedChain(chainId); - const {receiver, erc20, amount, batchedTxOverrides, tokenDecimals} = donation; + const { + receiver, + erc20, + amount, + batchedTxOverrides, + tokenDecimals, + deadlineConfig, + } = donation; const amountInWei = parseUnits(amount, tokenDecimals); - const receiverId = await resolveReceiverAccountId(adapter, receiver); + + let receiverId: bigint; + + if (deadlineConfig) { + if (receiver.type !== 'project') { + throw new DripsError( + 'Deadline donations only support project receivers', + { + meta: {operation: prepareOneTimeDonation.name, receiver}, + }, + ); + } + + if (deadlineConfig.deadline <= new Date()) { + throw new DripsError('Deadline must be in the future', { + meta: {operation: prepareOneTimeDonation.name, receiver}, + }); + } + + const {deadlineAccountId} = await resolveDeadlineAccount( + adapter, + receiver, + deadlineConfig, + ); + + receiverId = deadlineAccountId; + } else { + receiverId = await resolveReceiverAccountId(adapter, receiver); + } return buildTx({ abi: addressDriverAbi, diff --git a/src/internal/drip-lists/buildDripListMetadata.ts b/src/internal/drip-lists/buildDripListMetadata.ts index da06a1ac..421ea8a0 100644 --- a/src/internal/drip-lists/buildDripListMetadata.ts +++ b/src/internal/drip-lists/buildDripListMetadata.ts @@ -7,6 +7,7 @@ export function buildDripListMetadata( Omit & { dripListId: bigint; receivers: ReadonlyArray; + allowExternalDonations: boolean; }, 'minter' | 'chainId' >, @@ -18,6 +19,7 @@ export function buildDripListMetadata( description, isVisible, latestVotingRoundId, + allowExternalDonations, } = params; return { @@ -30,6 +32,7 @@ export function buildDripListMetadata( name, description: description ?? undefined, isVisible, + allowExternalDonations, recipients: [...receivers], latestVotingRoundId, }; diff --git a/src/internal/drip-lists/createDripList.ts b/src/internal/drip-lists/createDripList.ts index a78c3205..ff330a7f 100644 --- a/src/internal/drip-lists/createDripList.ts +++ b/src/internal/drip-lists/createDripList.ts @@ -15,6 +15,7 @@ export type CreateDripListResult = { dripListId: bigint; txResponse: TxResponse; metadata: DripListMetadata; + allowExternalDonations: boolean; }; export async function createDripList( @@ -22,8 +23,14 @@ export async function createDripList( ipfsMetadataUploaderFn: IpfsMetadataUploaderFn, dripList: NewDripList, ): Promise { - const {salt, ipfsHash, dripListId, preparedTx, metadata} = - await prepareDripListCreation(adapter, ipfsMetadataUploaderFn, dripList); + const { + salt, + ipfsHash, + dripListId, + preparedTx, + metadata, + allowExternalDonations, + } = await prepareDripListCreation(adapter, ipfsMetadataUploaderFn, dripList); const txResponse = await adapter.sendTx(preparedTx); @@ -33,5 +40,6 @@ export async function createDripList( ipfsHash, dripListId, txResponse, + allowExternalDonations, }; } diff --git a/src/internal/drip-lists/prepareDripListCreation.ts b/src/internal/drip-lists/prepareDripListCreation.ts index d9621842..3c451ec1 100644 --- a/src/internal/drip-lists/prepareDripListCreation.ts +++ b/src/internal/drip-lists/prepareDripListCreation.ts @@ -18,11 +18,19 @@ import { import {requireSupportedChain} from '../shared/assertions'; import {parseSplitsReceivers, SdkSplitsReceiver} from '../shared/receiverUtils'; import {calcDripListId} from '../shared/calcDripListId'; +import {calcAddressId} from '../shared/calcAddressId'; import { encodeMetadataKeyValue, USER_METADATA_KEY, } from '../shared/encodeMetadataKeyValue'; +export type DripListDeadlineConfig = { + /** The deadline by which funds must be claimed. */ + readonly deadline: Date; + /** The address to refund unclaimed funds to. */ + readonly refundAddress: Address; +}; + export type NewDripList = { /** Indicates whether the Drip List is visible. */ readonly isVisible: boolean; @@ -46,6 +54,8 @@ export type NewDripList = { readonly batchedTxOverrides?: BatchedTxOverrides; /** Optional latest voting round ID for the Drip List. */ readonly latestVotingRoundId?: string; + /** Optional deadline configuration for the Drip List receivers. */ + readonly deadlineConfig?: DripListDeadlineConfig; }; export type PrepareDripListCreationResult = { @@ -54,6 +64,7 @@ export type PrepareDripListCreationResult = { readonly dripListId: bigint; readonly preparedTx: PreparedTx; readonly metadata: DripListMetadata; + readonly allowExternalDonations: boolean; }; export async function prepareDripListCreation( @@ -73,16 +84,28 @@ export async function prepareDripListCreation( batchedTxOverrides, salt: maybeSalt, latestVotingRoundId, + deadlineConfig, } = dripList; const {metadata: metadataSplitsReceivers, onChain: onChainSplitsReceivers} = - await parseSplitsReceivers(adapter, receivers); + await parseSplitsReceivers( + adapter, + receivers, + deadlineConfig ? {deadlineConfig} : undefined, + ); const salt = maybeSalt ?? calculateRandomSalt(); const {nftDriver, caller} = contractsRegistry[chainId]; const minter = await adapter.getAddress(); + const ownerAddress = transferTo ?? minter; + const ownerAccountId = await calcAddressId(adapter, ownerAddress); const dripListId = await calcDripListId(adapter, {salt, minter}); + // External donations are not allowed if any of the receivers is a deadline and the refund account is the owner. + const allowExternalDonations = !metadataSplitsReceivers + .filter(receiver => receiver.type === 'deadline') + .some(receiver => receiver.refundAccountId === ownerAccountId.toString()); + const metadata = buildDripListMetadata({ name, isVisible, @@ -90,6 +113,7 @@ export async function prepareDripListCreation( description, receivers: metadataSplitsReceivers, latestVotingRoundId, + allowExternalDonations, }); const ipfsHash = await ipfsMetadataUploaderFn(metadata); @@ -102,7 +126,7 @@ export async function prepareDripListCreation( functionName: 'safeMintWithSalt', args: [ salt, - transferTo ?? minter, + ownerAddress, [encodeMetadataKeyValue({key: USER_METADATA_KEY, value: ipfsHash})], ], }); @@ -127,5 +151,12 @@ export async function prepareDripListCreation( batchedTxOverrides, }); - return {preparedTx, metadata, ipfsHash, salt, dripListId}; + return { + preparedTx, + metadata, + ipfsHash, + salt, + dripListId, + allowExternalDonations, + }; } diff --git a/src/internal/drip-lists/prepareDripListUpdate.ts b/src/internal/drip-lists/prepareDripListUpdate.ts index d96ce51c..3c1c69f0 100644 --- a/src/internal/drip-lists/prepareDripListUpdate.ts +++ b/src/internal/drip-lists/prepareDripListUpdate.ts @@ -49,6 +49,7 @@ export type PrepareDripListUpdateResult = { readonly ipfsHash: string; readonly preparedTx: PreparedTx; readonly metadata: DripListMetadata; + readonly allowExternalDonations: boolean; }; export async function prepareDripListUpdate( @@ -91,12 +92,20 @@ export async function prepareDripListUpdate( const {metadata: metadataSplitsReceivers, onChain: onChainSplitsReceivers} = await parseSplitsReceivers(adapter, effectiveSplitsReceivers); + const ownerAccountId = BigInt(dripList.owner.accountId); + + // External donations are not allowed if any of the receivers is a deadline and the refund account is the owner. + const allowExternalDonations = !metadataSplitsReceivers + .filter(receiver => receiver.type === 'deadline') + .some(receiver => receiver.refundAccountId === ownerAccountId.toString()); + const metadata = buildDripListMetadata({ dripListId, receivers: metadataSplitsReceivers, name: maybeMetadata?.name ?? dripList.name, isVisible: maybeMetadata?.isVisible ?? dripList.isVisible, description: maybeMetadata?.description ?? dripList.description, + allowExternalDonations, }); const ipfsHash = await ipfsMetadataUploaderFn(metadata); @@ -139,5 +148,6 @@ export async function prepareDripListUpdate( preparedTx, ipfsHash, metadata, + allowExternalDonations, }; } diff --git a/src/internal/metadata/schemas/common/sources.ts b/src/internal/metadata/schemas/common/sources.ts index 847f7741..e962008f 100644 --- a/src/internal/metadata/schemas/common/sources.ts +++ b/src/internal/metadata/schemas/common/sources.ts @@ -1,6 +1,6 @@ import {z} from 'zod'; -const gitHubSourceSchema = z.object({ +export const gitHubSourceSchema = z.object({ forge: z.literal('github'), repoName: z.string(), ownerName: z.string(), diff --git a/src/internal/metadata/schemas/index.ts b/src/internal/metadata/schemas/index.ts index fa2ae3fd..2f3e09cd 100644 --- a/src/internal/metadata/schemas/index.ts +++ b/src/internal/metadata/schemas/index.ts @@ -1,19 +1,22 @@ import {createVersionedParser} from '@efstajas/versioned-parser'; import {addressDriverAccountMetadataSchemaV1} from './address-driver/v1'; -import {subListMetadataSchemaV1} from './immutable-splits-driver/v1'; import {nftDriverAccountMetadataSchemaV1} from './nft-driver/v1'; import {nftDriverAccountMetadataSchemaV2} from './nft-driver/v2'; import {nftDriverAccountMetadataSchemaV3} from './nft-driver/v3'; -import {nftDriverAccountMetadataSchemaV4} from './nft-driver/v4'; -import {nftDriverAccountMetadataSchemaV5} from './nft-driver/v5'; -import {nftDriverAccountMetadataSchemaV6} from './nft-driver/v6'; import {repoDriverAccountMetadataSchemaV1} from './repo-driver/v1'; import {repoDriverAccountMetadataSchemaV2} from './repo-driver/v2'; import {repoDriverAccountMetadataSchemaV3} from './repo-driver/v3'; import {repoDriverAccountMetadataSchemaV4} from './repo-driver/v4'; +import {nftDriverAccountMetadataSchemaV4} from './nft-driver/v4'; import {repoDriverAccountMetadataSchemaV5} from './repo-driver/v5'; +import {nftDriverAccountMetadataSchemaV5} from './nft-driver/v5'; +import {subListMetadataSchemaV1} from './immutable-splits-driver/v1'; +import {nftDriverAccountMetadataSchemaV6} from './nft-driver/v6'; +import {nftDriverAccountMetadataSchemaV7} from './nft-driver/v7'; +import {repoDriverAccountMetadataSchemaV6} from './repo-driver/v6'; export const nftDriverAccountMetadataParser = createVersionedParser([ + nftDriverAccountMetadataSchemaV7.parse, nftDriverAccountMetadataSchemaV6.parse, nftDriverAccountMetadataSchemaV5.parse, nftDriverAccountMetadataSchemaV4.parse, @@ -27,6 +30,7 @@ export const addressDriverAccountMetadataParser = createVersionedParser([ ]); export const repoDriverAccountMetadataParser = createVersionedParser([ + repoDriverAccountMetadataSchemaV6.parse, repoDriverAccountMetadataSchemaV5.parse, repoDriverAccountMetadataSchemaV4.parse, repoDriverAccountMetadataSchemaV3.parse, diff --git a/src/internal/metadata/schemas/nft-driver/v7.ts b/src/internal/metadata/schemas/nft-driver/v7.ts new file mode 100644 index 00000000..a0d6090f --- /dev/null +++ b/src/internal/metadata/schemas/nft-driver/v7.ts @@ -0,0 +1,55 @@ +import {z} from 'zod'; +import {nftDriverAccountMetadataSchemaV5} from './v5'; +import { + addressDriverSplitReceiverSchema, + repoDriverSplitReceiverSchema, +} from '../repo-driver/v2'; +import {subListSplitReceiverSchema} from '../immutable-splits-driver/v1'; +import {dripListSplitReceiverSchema} from './v2'; +import {repoSubAccountDriverSplitReceiverSchema} from '../common/repoSubAccountDriverSplitReceiverSchema'; +import {emojiAvatarSchema} from '../repo-driver/v4'; +import { + deadlineSplitReceiverSchema, + orcidSplitReceiverSchema, +} from '../repo-driver/v6'; + +const base = nftDriverAccountMetadataSchemaV5 + .omit({ + isDripList: true, + projects: true, + }) + .extend({ + allowExternalDonations: z.boolean().optional(), + }); + +const ecosystemVariant = base.extend({ + type: z.literal('ecosystem'), + recipients: z.array( + z.union([ + repoSubAccountDriverSplitReceiverSchema, + subListSplitReceiverSchema, + deadlineSplitReceiverSchema, // New in v7 + ]), + ), + color: z.string(), + avatar: emojiAvatarSchema, +}); + +const dripListVariant = base.extend({ + type: z.literal('dripList'), + recipients: z.array( + z.union([ + repoDriverSplitReceiverSchema, + subListSplitReceiverSchema, + addressDriverSplitReceiverSchema, + dripListSplitReceiverSchema, + deadlineSplitReceiverSchema, // New in v7 + orcidSplitReceiverSchema, // New in v7 + ]), + ), +}); + +export const nftDriverAccountMetadataSchemaV7 = z.discriminatedUnion('type', [ + ecosystemVariant, + dripListVariant, +]); diff --git a/src/internal/metadata/schemas/repo-driver/v6.ts b/src/internal/metadata/schemas/repo-driver/v6.ts new file mode 100644 index 00000000..62303c71 --- /dev/null +++ b/src/internal/metadata/schemas/repo-driver/v6.ts @@ -0,0 +1,46 @@ +import z from 'zod'; +import {gitHubSourceSchema} from '../common/sources'; +import { + addressDriverSplitReceiverSchema, + repoDriverSplitReceiverSchema, +} from './v2'; +import {dripListSplitReceiverSchema} from '../nft-driver/v2'; +import {repoDriverAccountMetadataSchemaV5} from './v5'; + +export const orcidSplitReceiverSchema = z.object({ + type: z.literal('orcid'), + weight: z.number(), + accountId: z.string(), + orcidId: z.string(), +}); + +export const deadlineSplitReceiverSchema = z.object({ + type: z.literal('deadline'), + weight: z.number(), + accountId: z.string(), + claimableProject: z.object({ + accountId: z.string(), + source: gitHubSourceSchema, + }), + recipientAccountId: z.string(), + refundAccountId: z.string(), + deadline: z.coerce.date(), +}); + +const repoDriverAccountSplitsSchemaV6 = z.object({ + maintainers: z.array(addressDriverSplitReceiverSchema), + dependencies: z.array( + z.union([ + dripListSplitReceiverSchema, + repoDriverSplitReceiverSchema, + addressDriverSplitReceiverSchema, + deadlineSplitReceiverSchema, // New in v6 + orcidSplitReceiverSchema, // New in v6 + ]), + ), +}); + +export const repoDriverAccountMetadataSchemaV6 = + repoDriverAccountMetadataSchemaV5.extend({ + splits: repoDriverAccountSplitsSchemaV6, + }); diff --git a/src/internal/shared/calcDeadlineDriverAccountId.ts b/src/internal/shared/calcDeadlineDriverAccountId.ts new file mode 100644 index 00000000..266af769 --- /dev/null +++ b/src/internal/shared/calcDeadlineDriverAccountId.ts @@ -0,0 +1,39 @@ +import {decodeFunctionResult} from 'viem'; +import {ReadBlockchainAdapter} from '../blockchain/BlockchainAdapter'; +import {buildTx} from './buildTx'; +import {requireSupportedChain} from './assertions'; +import {contractsRegistry} from '../config/contractsRegistry'; +import {repoDeadlineDriverAbi} from '../abis/repoDeadlineDriver'; + +export async function calcDeadlineDriverAccountId( + adapter: ReadBlockchainAdapter, + params: { + repoAccountId: bigint; + recipientAccountId: bigint; + refundAccountId: bigint; + deadlineSeconds: number; + }, +): Promise { + const chainId = await adapter.getChainId(); + const {repoAccountId, recipientAccountId, refundAccountId, deadlineSeconds} = + params; + requireSupportedChain(chainId); + const contract = contractsRegistry[chainId].repoDeadlineDriver.address; + + const calcAccountIdTx = buildTx({ + abi: repoDeadlineDriverAbi, + contract, + functionName: 'calcAccountId', + args: [repoAccountId, recipientAccountId, refundAccountId, deadlineSeconds], + }); + + const encodedResult = await adapter.call(calcAccountIdTx); + + const accountId = decodeFunctionResult({ + abi: repoDeadlineDriverAbi, + functionName: 'calcAccountId', + data: encodedResult, + }); + + return accountId; +} diff --git a/src/internal/shared/receiverUtils.ts b/src/internal/shared/receiverUtils.ts index a4a8571e..e9196c80 100644 --- a/src/internal/shared/receiverUtils.ts +++ b/src/internal/shared/receiverUtils.ts @@ -4,6 +4,7 @@ import {calcProjectId} from '../projects/calcProjectId'; import {destructProjectUrl} from '../projects/destructProjectUrl'; import {calcAddressId} from './calcAddressId'; import {DripsError} from './DripsError'; +import {requireSupportedChain} from './assertions'; import z from 'zod'; import {subListSplitReceiverSchema} from '../metadata/schemas/immutable-splits-driver/v1'; import {dripListSplitReceiverSchema} from '../metadata/schemas/nft-driver/v2'; @@ -11,11 +12,16 @@ import { repoDriverSplitReceiverSchema, addressDriverSplitReceiverSchema, } from '../metadata/schemas/repo-driver/v2'; +import {deadlineSplitReceiverSchema} from '../metadata/schemas/repo-driver/v6'; +import {calcDeadlineDriverAccountId} from './calcDeadlineDriverAccountId'; +import {toDeadlineSeconds} from './toDeadlineSeconds'; import {DripList} from '../drip-lists/getDripListById'; import { AddressReceiver, ProjectReceiver, } from '../graphql/__generated__/base-types'; +import {unreachable} from './unreachable'; +import {DripListDeadlineConfig} from '../drip-lists/prepareDripListCreation'; /** Maximum number of splits receivers of a single account. */ export const MAX_SPLITS_RECEIVERS = 200; @@ -71,14 +77,155 @@ type MetadataAddressReceiver = z.output< typeof addressDriverSplitReceiverSchema >; +type MetadataDeadlineReceiver = z.output; + type SubListMetadataReceiver = z.output; +export type ResolvedDeadlineAccount = { + readonly deadlineAccountId: bigint; + readonly repoAccountId: bigint; + readonly refundAccountId: bigint; + readonly deadlineSeconds: number; + readonly source: { + readonly forge: string; + readonly ownerName: string; + readonly repoName: string; + readonly url: string; + }; +}; + export type MetadataSplitsReceiver = | MetadataProjectReceiver | MetadataDripListReceiver | MetadataAddressReceiver + | MetadataDeadlineReceiver | SubListMetadataReceiver; +export type ParseSplitsReceiversOptions = { + readonly deadlineConfig?: DripListDeadlineConfig; +}; + +export async function resolveDeadlineAccount( + adapter: ReadBlockchainAdapter, + receiver: SdkProjectReceiver, + deadlineConfig: DripListDeadlineConfig, +): Promise { + const {url} = receiver; + const {deadline, refundAddress} = deadlineConfig; + + const {forge, ownerName, repoName} = destructProjectUrl(url); + const repoAccountId = await calcProjectId(adapter, { + forge, + name: `${ownerName}/${repoName}`, + }); + + const refundAccountId = await calcAddressId(adapter, refundAddress); + const deadlineSeconds = toDeadlineSeconds(deadline); + + const deadlineAccountId = await calcDeadlineDriverAccountId(adapter, { + repoAccountId, + recipientAccountId: repoAccountId, + refundAccountId, + deadlineSeconds, + }); + + return { + deadlineAccountId, + repoAccountId, + refundAccountId, + deadlineSeconds, + source: {forge, ownerName, repoName, url}, + } satisfies ResolvedDeadlineAccount; +} + +type ResolvedDeadlineReceiver = { + readonly receiver: SdkSplitsReceiver; + readonly account: ResolvedDeadlineAccount; +}; + +async function parseDeadlineReceivers( + adapter: ReadBlockchainAdapter, + sdkReceivers: ReadonlyArray, + deadlineConfig: DripListDeadlineConfig, +): Promise<{ + onChain: OnChainSplitsReceiver[]; + metadata: MetadataSplitsReceiver[]; +}> { + if (sdkReceivers.length === 0) { + return {onChain: [], metadata: []}; + } + + const chainId = await adapter.getChainId(); + requireSupportedChain(chainId); + + const resolved = await Promise.all( + sdkReceivers.map(async receiver => { + if (receiver.type !== 'project') { + unreachable('Only project receivers can be used with deadlines'); + } + + return { + receiver, + account: await resolveDeadlineAccount( + adapter, + receiver, + deadlineConfig, + ), + } as ResolvedDeadlineReceiver; + }), + ); + + resolved.sort((a, b) => + a.account.deadlineAccountId > b.account.deadlineAccountId ? 1 : -1, + ); + + const onChain: OnChainSplitsReceiver[] = []; + const metadata: MetadataSplitsReceiver[] = []; + + let previousAccountId: bigint | null = null; + + for (const entry of resolved) { + const { + receiver, + account: {deadlineAccountId, repoAccountId, refundAccountId, source}, + } = entry; + const {weight} = receiver; + + if (weight <= 0 || weight > TOTAL_SPLITS_WEIGHT) { + throw new DripsError(`Invalid weight: ${weight}`, { + meta: {operation: parseDeadlineReceivers.name, receiver}, + }); + } + + if (previousAccountId !== null && deadlineAccountId <= previousAccountId) { + throw new DripsError( + `Splits receivers not strictly sorted or deduplicated: ${deadlineAccountId} after ${previousAccountId}`, + { + meta: {operation: parseDeadlineReceivers.name}, + }, + ); + } + + previousAccountId = deadlineAccountId; + + onChain.push({accountId: deadlineAccountId, weight}); + metadata.push({ + type: 'deadline', + weight, + accountId: deadlineAccountId.toString(), + claimableProject: { + accountId: repoAccountId.toString(), + source, + }, + recipientAccountId: repoAccountId.toString(), + refundAccountId: refundAccountId.toString(), + deadline: deadlineConfig.deadline, + } as MetadataDeadlineReceiver); + } + + return {onChain, metadata}; +} + export async function resolveReceiverAccountId( adapter: ReadBlockchainAdapter, receiver: SdkReceiver, @@ -227,6 +374,7 @@ async function mapSdkToMetadataSplitsReceiver( export async function parseSplitsReceivers( adapter: ReadBlockchainAdapter, sdkReceivers: ReadonlyArray, + options?: ParseSplitsReceiversOptions, ): Promise<{ onChain: OnChainSplitsReceiver[]; metadata: MetadataSplitsReceiver[]; @@ -244,15 +392,65 @@ export async function parseSplitsReceivers( ); } - const resolved = await Promise.all( - sdkReceivers.map(async r => ({ - receiver: r, - accountId: await resolveReceiverAccountId(adapter, r), - })), - ); + const resolvedEntries: Array<{ + accountId: bigint; + weight: number; + metadata: MetadataSplitsReceiver; + }> = []; + + if (options?.deadlineConfig) { + const projectReceivers = sdkReceivers.filter(r => r.type === 'project'); + const otherReceivers = sdkReceivers.filter(r => r.type !== 'project'); + + const {onChain: deadlineOnChain, metadata: deadlineMetadata} = + await parseDeadlineReceivers( + adapter, + projectReceivers, + options.deadlineConfig, + ); + + if (deadlineOnChain.length !== deadlineMetadata.length) { + throw new DripsError('Mismatch resolving deadline receivers.', { + meta: {operation: parseSplitsReceivers.name}, + }); + } + + deadlineOnChain.forEach((onChainReceiver, index) => { + resolvedEntries.push({ + accountId: onChainReceiver.accountId, + weight: onChainReceiver.weight, + metadata: deadlineMetadata[index], + }); + }); - // Sort by accountId ascending (strictly increasing) - resolved.sort((a, b) => (a.accountId > b.accountId ? 1 : -1)); + const resolvedOthers = await Promise.all( + otherReceivers.map(async receiver => { + const accountId = await resolveReceiverAccountId(adapter, receiver); + const metadata = await mapSdkToMetadataSplitsReceiver( + accountId, + receiver, + ); + return {accountId, weight: receiver.weight, metadata}; + }), + ); + + resolvedEntries.push(...resolvedOthers); + } else { + const resolved = await Promise.all( + sdkReceivers.map(async receiver => { + const accountId = await resolveReceiverAccountId(adapter, receiver); + const metadata = await mapSdkToMetadataSplitsReceiver( + accountId, + receiver, + ); + return {accountId, weight: receiver.weight, metadata}; + }), + ); + + resolvedEntries.push(...resolved); + } + + resolvedEntries.sort((a, b) => (a.accountId > b.accountId ? 1 : -1)); const onChain: OnChainSplitsReceiver[] = []; const metadata: MetadataSplitsReceiver[] = []; @@ -260,12 +458,12 @@ export async function parseSplitsReceivers( let totalWeight = 0; let prevAccountId: bigint | null = null; - for (const {receiver, accountId} of resolved) { - const {weight} = receiver; + for (const entry of resolvedEntries) { + const {accountId, weight, metadata: metadataEntry} = entry; if (weight <= 0 || weight > TOTAL_SPLITS_WEIGHT) { throw new DripsError(`Invalid weight: ${weight}`, { - meta: {operation: parseSplitsReceivers.name, receiver}, + meta: {operation: parseSplitsReceivers.name}, }); } @@ -282,7 +480,7 @@ export async function parseSplitsReceivers( prevAccountId = accountId; onChain.push({accountId, weight}); - metadata.push(await mapSdkToMetadataSplitsReceiver(accountId, receiver)); + metadata.push(metadataEntry); } if (totalWeight !== TOTAL_SPLITS_WEIGHT) { diff --git a/src/internal/shared/resolveDriverName.ts b/src/internal/shared/resolveDriverName.ts index 273819a9..bb71e50d 100644 --- a/src/internal/shared/resolveDriverName.ts +++ b/src/internal/shared/resolveDriverName.ts @@ -27,6 +27,8 @@ export function resolveDriverName(accountId: bigint) { return 'repo'; case 4n: return 'repoSubAccount'; + case 5n: + return 'repoDeadline'; default: throw new Error(`Unknown for ID ${accountId}.`); } diff --git a/src/internal/shared/toDeadlineSeconds.ts b/src/internal/shared/toDeadlineSeconds.ts new file mode 100644 index 00000000..9fa5115a --- /dev/null +++ b/src/internal/shared/toDeadlineSeconds.ts @@ -0,0 +1,34 @@ +import {DripsError} from './DripsError'; + +const UINT32_MAX = 0xffffffff; + +export function toDeadlineSeconds(deadline: Date): number { + if (!(deadline instanceof Date) || Number.isNaN(deadline.getTime())) { + throw new DripsError('Deadline must be a valid Date.', { + meta: {operation: toDeadlineSeconds.name, deadline}, + }); + } + + const seconds = Math.floor(deadline.getTime() / 1000); + const nowSeconds = Math.floor(Date.now() / 1000); + + if (seconds < 0) { + throw new DripsError('Deadline must not be before Unix epoch.', { + meta: {operation: toDeadlineSeconds.name, deadline}, + }); + } + + if (seconds <= nowSeconds) { + throw new DripsError('Deadline must be in the future.', { + meta: {operation: toDeadlineSeconds.name, deadline}, + }); + } + + if (seconds > UINT32_MAX) { + throw new DripsError('Deadline exceeds supported range.', { + meta: {operation: toDeadlineSeconds.name, deadline}, + }); + } + + return seconds; +} diff --git a/testing-app/.svelte-kit/ambient.d.ts b/testing-app/.svelte-kit/ambient.d.ts deleted file mode 100644 index 43991824..00000000 --- a/testing-app/.svelte-kit/ambient.d.ts +++ /dev/null @@ -1,177 +0,0 @@ - -// this file is generated — do not edit it - - -/// - -/** - * Environment variables [loaded by Vite](https://vitejs.dev/guide/env-and-mode.html#env-files) from `.env` files and `process.env`. Like [`$env/dynamic/private`](https://svelte.dev/docs/kit/$env-dynamic-private), this module cannot be imported into client-side code. This module only includes variables that _do not_ begin with [`config.kit.env.publicPrefix`](https://svelte.dev/docs/kit/configuration#env) _and do_ start with [`config.kit.env.privatePrefix`](https://svelte.dev/docs/kit/configuration#env) (if configured). - * - * _Unlike_ [`$env/dynamic/private`](https://svelte.dev/docs/kit/$env-dynamic-private), the values exported from this module are statically injected into your bundle at build time, enabling optimisations like dead code elimination. - * - * ```ts - * import { API_KEY } from '$env/static/private'; - * ``` - * - * Note that all environment variables referenced in your code should be declared (for example in an `.env` file), even if they don't have a value until the app is deployed: - * - * ``` - * MY_FEATURE_FLAG="" - * ``` - * - * You can override `.env` values from the command line like so: - * - * ```bash - * MY_FEATURE_FLAG="enabled" npm run dev - * ``` - */ -declare module '$env/static/private' { - export const COMMAND_MODE: string; - export const HOME: string; - export const LESS: string; - export const LOGNAME: string; - export const LSCOLORS: string; - export const LS_COLORS: string; - export const LaunchInstanceID: string; - export const MallocNanoZone: string; - export const MallocSpaceEfficient: string; - export const NVM_BIN: string; - export const NVM_CD_FLAGS: string; - export const NVM_DIR: string; - export const NVM_INC: string; - export const OLDPWD: string; - export const ORIGINAL_XDG_CURRENT_DESKTOP: string; - export const PAGER: string; - export const PATH: string; - export const PWD: string; - export const SHELL: string; - export const SHLVL: string; - export const SSH_AUTH_SOCK: string; - export const TMPDIR: string; - export const USER: string; - export const VSCODE_CODE_CACHE_PATH: string; - export const VSCODE_CRASH_REPORTER_PROCESS_TYPE: string; - export const VSCODE_CWD: string; - export const VSCODE_ESM_ENTRYPOINT: string; - export const VSCODE_HANDLES_UNCAUGHT_ERRORS: string; - export const VSCODE_IPC_HOOK: string; - export const VSCODE_NLS_CONFIG: string; - export const VSCODE_PID: string; - export const XPC_FLAGS: string; - export const XPC_SERVICE_NAME: string; - export const ZSH: string; - export const _: string; - export const __CFBundleIdentifier: string; - export const __CF_USER_TEXT_ENCODING: string; - export const ELECTRON_RUN_AS_NODE: string; - export const VITEST_VSCODE_LOG: string; - export const VITEST_VSCODE: string; - export const TEST: string; - export const VITEST_WS_ADDRESS: string; - export const VITEST: string; - export const NODE_ENV: string; - export const PROD: string; - export const DEV: string; - export const BASE_URL: string; - export const MODE: string; -} - -/** - * Similar to [`$env/static/private`](https://svelte.dev/docs/kit/$env-static-private), except that it only includes environment variables that begin with [`config.kit.env.publicPrefix`](https://svelte.dev/docs/kit/configuration#env) (which defaults to `PUBLIC_`), and can therefore safely be exposed to client-side code. - * - * Values are replaced statically at build time. - * - * ```ts - * import { PUBLIC_BASE_URL } from '$env/static/public'; - * ``` - */ -declare module '$env/static/public' { - -} - -/** - * This module provides access to runtime environment variables, as defined by the platform you're running on. For example if you're using [`adapter-node`](https://github.com/sveltejs/kit/tree/main/packages/adapter-node) (or running [`vite preview`](https://svelte.dev/docs/kit/cli)), this is equivalent to `process.env`. This module only includes variables that _do not_ begin with [`config.kit.env.publicPrefix`](https://svelte.dev/docs/kit/configuration#env) _and do_ start with [`config.kit.env.privatePrefix`](https://svelte.dev/docs/kit/configuration#env) (if configured). - * - * This module cannot be imported into client-side code. - * - * Dynamic environment variables cannot be used during prerendering. - * - * ```ts - * import { env } from '$env/dynamic/private'; - * console.log(env.DEPLOYMENT_SPECIFIC_VARIABLE); - * ``` - * - * > In `dev`, `$env/dynamic` always includes environment variables from `.env`. In `prod`, this behavior will depend on your adapter. - */ -declare module '$env/dynamic/private' { - export const env: { - COMMAND_MODE: string; - HOME: string; - LESS: string; - LOGNAME: string; - LSCOLORS: string; - LS_COLORS: string; - LaunchInstanceID: string; - MallocNanoZone: string; - MallocSpaceEfficient: string; - NVM_BIN: string; - NVM_CD_FLAGS: string; - NVM_DIR: string; - NVM_INC: string; - OLDPWD: string; - ORIGINAL_XDG_CURRENT_DESKTOP: string; - PAGER: string; - PATH: string; - PWD: string; - SHELL: string; - SHLVL: string; - SSH_AUTH_SOCK: string; - TMPDIR: string; - USER: string; - VSCODE_CODE_CACHE_PATH: string; - VSCODE_CRASH_REPORTER_PROCESS_TYPE: string; - VSCODE_CWD: string; - VSCODE_ESM_ENTRYPOINT: string; - VSCODE_HANDLES_UNCAUGHT_ERRORS: string; - VSCODE_IPC_HOOK: string; - VSCODE_NLS_CONFIG: string; - VSCODE_PID: string; - XPC_FLAGS: string; - XPC_SERVICE_NAME: string; - ZSH: string; - _: string; - __CFBundleIdentifier: string; - __CF_USER_TEXT_ENCODING: string; - ELECTRON_RUN_AS_NODE: string; - VITEST_VSCODE_LOG: string; - VITEST_VSCODE: string; - TEST: string; - VITEST_WS_ADDRESS: string; - VITEST: string; - NODE_ENV: string; - PROD: string; - DEV: string; - BASE_URL: string; - MODE: string; - [key: `PUBLIC_${string}`]: undefined; - [key: `${string}`]: string | undefined; - } -} - -/** - * Similar to [`$env/dynamic/private`](https://svelte.dev/docs/kit/$env-dynamic-private), but only includes variables that begin with [`config.kit.env.publicPrefix`](https://svelte.dev/docs/kit/configuration#env) (which defaults to `PUBLIC_`), and can therefore safely be exposed to client-side code. - * - * Note that public dynamic environment variables must all be sent from the server to the client, causing larger network requests — when possible, use `$env/static/public` instead. - * - * Dynamic environment variables cannot be used during prerendering. - * - * ```ts - * import { env } from '$env/dynamic/public'; - * console.log(env.PUBLIC_DEPLOYMENT_SPECIFIC_VARIABLE); - * ``` - */ -declare module '$env/dynamic/public' { - export const env: { - [key: `PUBLIC_${string}`]: string | undefined; - } -} diff --git a/testing-app/.svelte-kit/generated/client-optimized/app.js b/testing-app/.svelte-kit/generated/client-optimized/app.js deleted file mode 100644 index fdd5dbfc..00000000 --- a/testing-app/.svelte-kit/generated/client-optimized/app.js +++ /dev/null @@ -1,46 +0,0 @@ -export { matchers } from './matchers.js'; - -export const nodes = [ - () => import('./nodes/0'), - () => import('./nodes/1'), - () => import('./nodes/2'), - () => import('./nodes/3'), - () => import('./nodes/4'), - () => import('./nodes/5'), - () => import('./nodes/6'), - () => import('./nodes/7'), - () => import('./nodes/8'), - () => import('./nodes/9'), - () => import('./nodes/10'), - () => import('./nodes/11') -]; - -export const server_loads = []; - -export const dictionary = { - "/": [2], - "/donations": [3], - "/donations/one-time-viem": [4], - "/drip-lists": [5], - "/drip-lists/create-ethers": [6], - "/drip-lists/create-viem": [7], - "/drip-lists/get": [8], - "/drip-lists/update-ethers": [9], - "/drip-lists/update-viem": [10], - "/utils": [11] - }; - -export const hooks = { - handleError: (({ error }) => { console.error(error) }), - - reroute: (() => {}), - transport: {} -}; - -export const decoders = Object.fromEntries(Object.entries(hooks.transport).map(([k, v]) => [k, v.decode])); - -export const hash = false; - -export const decode = (type, value) => decoders[type](value); - -export { default as root } from '../root.svelte'; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client-optimized/matchers.js b/testing-app/.svelte-kit/generated/client-optimized/matchers.js deleted file mode 100644 index f6bd30a4..00000000 --- a/testing-app/.svelte-kit/generated/client-optimized/matchers.js +++ /dev/null @@ -1 +0,0 @@ -export const matchers = {}; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client-optimized/nodes/0.js b/testing-app/.svelte-kit/generated/client-optimized/nodes/0.js deleted file mode 100644 index fed1375f..00000000 --- a/testing-app/.svelte-kit/generated/client-optimized/nodes/0.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../src/routes/+layout.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client-optimized/nodes/1.js b/testing-app/.svelte-kit/generated/client-optimized/nodes/1.js deleted file mode 100644 index 9cae4f0f..00000000 --- a/testing-app/.svelte-kit/generated/client-optimized/nodes/1.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../node_modules/@sveltejs/kit/src/runtime/components/svelte-4/error.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client-optimized/nodes/10.js b/testing-app/.svelte-kit/generated/client-optimized/nodes/10.js deleted file mode 100644 index 942c631d..00000000 --- a/testing-app/.svelte-kit/generated/client-optimized/nodes/10.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../src/routes/drip-lists/update-viem/+page.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client-optimized/nodes/11.js b/testing-app/.svelte-kit/generated/client-optimized/nodes/11.js deleted file mode 100644 index 88eb6a47..00000000 --- a/testing-app/.svelte-kit/generated/client-optimized/nodes/11.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../src/routes/utils/+page.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client-optimized/nodes/2.js b/testing-app/.svelte-kit/generated/client-optimized/nodes/2.js deleted file mode 100644 index 1cb4f855..00000000 --- a/testing-app/.svelte-kit/generated/client-optimized/nodes/2.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../src/routes/+page.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client-optimized/nodes/3.js b/testing-app/.svelte-kit/generated/client-optimized/nodes/3.js deleted file mode 100644 index bb165204..00000000 --- a/testing-app/.svelte-kit/generated/client-optimized/nodes/3.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../src/routes/donations/+page.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client-optimized/nodes/4.js b/testing-app/.svelte-kit/generated/client-optimized/nodes/4.js deleted file mode 100644 index 5d1041a8..00000000 --- a/testing-app/.svelte-kit/generated/client-optimized/nodes/4.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../src/routes/donations/one-time-viem/+page.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client-optimized/nodes/5.js b/testing-app/.svelte-kit/generated/client-optimized/nodes/5.js deleted file mode 100644 index ee7b51b6..00000000 --- a/testing-app/.svelte-kit/generated/client-optimized/nodes/5.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../src/routes/drip-lists/+page.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client-optimized/nodes/6.js b/testing-app/.svelte-kit/generated/client-optimized/nodes/6.js deleted file mode 100644 index 248af157..00000000 --- a/testing-app/.svelte-kit/generated/client-optimized/nodes/6.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../src/routes/drip-lists/create-ethers/+page.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client-optimized/nodes/7.js b/testing-app/.svelte-kit/generated/client-optimized/nodes/7.js deleted file mode 100644 index 92bec0a7..00000000 --- a/testing-app/.svelte-kit/generated/client-optimized/nodes/7.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../src/routes/drip-lists/create-viem/+page.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client-optimized/nodes/8.js b/testing-app/.svelte-kit/generated/client-optimized/nodes/8.js deleted file mode 100644 index 053489c9..00000000 --- a/testing-app/.svelte-kit/generated/client-optimized/nodes/8.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../src/routes/drip-lists/get/+page.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client-optimized/nodes/9.js b/testing-app/.svelte-kit/generated/client-optimized/nodes/9.js deleted file mode 100644 index 62485a77..00000000 --- a/testing-app/.svelte-kit/generated/client-optimized/nodes/9.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../src/routes/drip-lists/update-ethers/+page.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client/app.js b/testing-app/.svelte-kit/generated/client/app.js deleted file mode 100644 index b0e29192..00000000 --- a/testing-app/.svelte-kit/generated/client/app.js +++ /dev/null @@ -1,54 +0,0 @@ -export { matchers } from './matchers.js'; - -export const nodes = [ - () => import('./nodes/0'), - () => import('./nodes/1'), - () => import('./nodes/2'), - () => import('./nodes/3'), - () => import('./nodes/4'), - () => import('./nodes/5'), - () => import('./nodes/6'), - () => import('./nodes/7'), - () => import('./nodes/8'), - () => import('./nodes/9'), - () => import('./nodes/10'), - () => import('./nodes/11'), - () => import('./nodes/12'), - () => import('./nodes/13'), - () => import('./nodes/14'), - () => import('./nodes/15') -]; - -export const server_loads = []; - -export const dictionary = { - "/": [2], - "/collect": [3], - "/donations": [4], - "/donations/continuous-ethers": [5], - "/donations/continuous-viem": [6], - "/donations/one-time-ethers": [7], - "/donations/one-time-viem": [8], - "/drip-lists": [9], - "/drip-lists/create-ethers": [10], - "/drip-lists/create-viem": [11], - "/drip-lists/get": [12], - "/drip-lists/update-ethers": [13], - "/drip-lists/update-viem": [14], - "/utils": [15] - }; - -export const hooks = { - handleError: (({ error }) => { console.error(error) }), - - reroute: (() => {}), - transport: {} -}; - -export const decoders = Object.fromEntries(Object.entries(hooks.transport).map(([k, v]) => [k, v.decode])); - -export const hash = false; - -export const decode = (type, value) => decoders[type](value); - -export { default as root } from '../root.svelte'; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client/matchers.js b/testing-app/.svelte-kit/generated/client/matchers.js deleted file mode 100644 index f6bd30a4..00000000 --- a/testing-app/.svelte-kit/generated/client/matchers.js +++ /dev/null @@ -1 +0,0 @@ -export const matchers = {}; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client/nodes/0.js b/testing-app/.svelte-kit/generated/client/nodes/0.js deleted file mode 100644 index fed1375f..00000000 --- a/testing-app/.svelte-kit/generated/client/nodes/0.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../src/routes/+layout.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client/nodes/1.js b/testing-app/.svelte-kit/generated/client/nodes/1.js deleted file mode 100644 index 9cae4f0f..00000000 --- a/testing-app/.svelte-kit/generated/client/nodes/1.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../node_modules/@sveltejs/kit/src/runtime/components/svelte-4/error.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client/nodes/10.js b/testing-app/.svelte-kit/generated/client/nodes/10.js deleted file mode 100644 index 248af157..00000000 --- a/testing-app/.svelte-kit/generated/client/nodes/10.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../src/routes/drip-lists/create-ethers/+page.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client/nodes/11.js b/testing-app/.svelte-kit/generated/client/nodes/11.js deleted file mode 100644 index 92bec0a7..00000000 --- a/testing-app/.svelte-kit/generated/client/nodes/11.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../src/routes/drip-lists/create-viem/+page.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client/nodes/12.js b/testing-app/.svelte-kit/generated/client/nodes/12.js deleted file mode 100644 index 053489c9..00000000 --- a/testing-app/.svelte-kit/generated/client/nodes/12.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../src/routes/drip-lists/get/+page.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client/nodes/13.js b/testing-app/.svelte-kit/generated/client/nodes/13.js deleted file mode 100644 index 62485a77..00000000 --- a/testing-app/.svelte-kit/generated/client/nodes/13.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../src/routes/drip-lists/update-ethers/+page.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client/nodes/14.js b/testing-app/.svelte-kit/generated/client/nodes/14.js deleted file mode 100644 index 942c631d..00000000 --- a/testing-app/.svelte-kit/generated/client/nodes/14.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../src/routes/drip-lists/update-viem/+page.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client/nodes/15.js b/testing-app/.svelte-kit/generated/client/nodes/15.js deleted file mode 100644 index 88eb6a47..00000000 --- a/testing-app/.svelte-kit/generated/client/nodes/15.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../src/routes/utils/+page.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client/nodes/2.js b/testing-app/.svelte-kit/generated/client/nodes/2.js deleted file mode 100644 index 1cb4f855..00000000 --- a/testing-app/.svelte-kit/generated/client/nodes/2.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../src/routes/+page.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client/nodes/3.js b/testing-app/.svelte-kit/generated/client/nodes/3.js deleted file mode 100644 index 9fce6018..00000000 --- a/testing-app/.svelte-kit/generated/client/nodes/3.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../src/routes/collect/+page.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client/nodes/4.js b/testing-app/.svelte-kit/generated/client/nodes/4.js deleted file mode 100644 index bb165204..00000000 --- a/testing-app/.svelte-kit/generated/client/nodes/4.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../src/routes/donations/+page.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client/nodes/5.js b/testing-app/.svelte-kit/generated/client/nodes/5.js deleted file mode 100644 index 1113f624..00000000 --- a/testing-app/.svelte-kit/generated/client/nodes/5.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../src/routes/donations/continuous-ethers/+page.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client/nodes/6.js b/testing-app/.svelte-kit/generated/client/nodes/6.js deleted file mode 100644 index c604d4d5..00000000 --- a/testing-app/.svelte-kit/generated/client/nodes/6.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../src/routes/donations/continuous-viem/+page.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client/nodes/7.js b/testing-app/.svelte-kit/generated/client/nodes/7.js deleted file mode 100644 index 7433a3b7..00000000 --- a/testing-app/.svelte-kit/generated/client/nodes/7.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../src/routes/donations/one-time-ethers/+page.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client/nodes/8.js b/testing-app/.svelte-kit/generated/client/nodes/8.js deleted file mode 100644 index 5d1041a8..00000000 --- a/testing-app/.svelte-kit/generated/client/nodes/8.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../src/routes/donations/one-time-viem/+page.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/client/nodes/9.js b/testing-app/.svelte-kit/generated/client/nodes/9.js deleted file mode 100644 index ee7b51b6..00000000 --- a/testing-app/.svelte-kit/generated/client/nodes/9.js +++ /dev/null @@ -1 +0,0 @@ -export { default as component } from "../../../../src/routes/drip-lists/+page.svelte"; \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/root.svelte b/testing-app/.svelte-kit/generated/root.svelte deleted file mode 100644 index 594b8fd2..00000000 --- a/testing-app/.svelte-kit/generated/root.svelte +++ /dev/null @@ -1,61 +0,0 @@ - - - - -{#if constructors[1]} - - - - -{:else} - - -{/if} - -{#if mounted} -
- {#if navigated} - {title} - {/if} -
-{/if} \ No newline at end of file diff --git a/testing-app/.svelte-kit/generated/server/internal.js b/testing-app/.svelte-kit/generated/server/internal.js deleted file mode 100644 index 35d404f9..00000000 --- a/testing-app/.svelte-kit/generated/server/internal.js +++ /dev/null @@ -1,48 +0,0 @@ - -import root from '../root.svelte'; -import { set_building, set_prerendering } from '__sveltekit/environment'; -import { set_assets } from '__sveltekit/paths'; -import { set_manifest, set_read_implementation } from '__sveltekit/server'; -import { set_private_env, set_public_env, set_safe_public_env } from '../../../node_modules/@sveltejs/kit/src/runtime/shared-server.js'; - -export const options = { - app_template_contains_nonce: false, - csp: {"mode":"auto","directives":{"upgrade-insecure-requests":false,"block-all-mixed-content":false},"reportOnly":{"upgrade-insecure-requests":false,"block-all-mixed-content":false}}, - csrf_check_origin: true, - embedded: false, - env_public_prefix: 'PUBLIC_', - env_private_prefix: '', - hash_routing: false, - hooks: null, // added lazily, via `get_hooks` - preload_strategy: "modulepreload", - root, - service_worker: false, - templates: { - app: ({ head, body, assets, nonce, env }) => "\n\n\t\n\t\t\n\t\t\n\t\t\n\t\tDrips SDK Testing App\n\t\t" + head + "\n\t\n\t\n\t\t
" + body + "
\n\t\n\n", - error: ({ status, message }) => "\n\n\t\n\t\t\n\t\t" + message + "\n\n\t\t\n\t\n\t\n\t\t
\n\t\t\t" + status + "\n\t\t\t
\n\t\t\t\t

" + message + "

\n\t\t\t
\n\t\t
\n\t\n\n" - }, - version_hash: "1tl6sya" -}; - -export async function get_hooks() { - let handle; - let handleFetch; - let handleError; - let init; - - - let reroute; - let transport; - - - return { - handle, - handleFetch, - handleError, - init, - reroute, - transport - }; -} - -export { set_assets, set_building, set_manifest, set_prerendering, set_private_env, set_public_env, set_read_implementation, set_safe_public_env }; diff --git a/testing-app/.svelte-kit/non-ambient.d.ts b/testing-app/.svelte-kit/non-ambient.d.ts deleted file mode 100644 index 46bd7fb0..00000000 --- a/testing-app/.svelte-kit/non-ambient.d.ts +++ /dev/null @@ -1,25 +0,0 @@ - -// this file is generated — do not edit it - - -declare module "svelte/elements" { - export interface HTMLAttributes { - 'data-sveltekit-keepfocus'?: true | '' | 'off' | undefined | null; - 'data-sveltekit-noscroll'?: true | '' | 'off' | undefined | null; - 'data-sveltekit-preload-code'?: - | true - | '' - | 'eager' - | 'viewport' - | 'hover' - | 'tap' - | 'off' - | undefined - | null; - 'data-sveltekit-preload-data'?: true | '' | 'hover' | 'tap' | 'off' | undefined | null; - 'data-sveltekit-reload'?: true | '' | 'off' | undefined | null; - 'data-sveltekit-replacestate'?: true | '' | 'off' | undefined | null; - } -} - -export {}; diff --git a/testing-app/.svelte-kit/output/client/.vite/manifest.json b/testing-app/.svelte-kit/output/client/.vite/manifest.json deleted file mode 100644 index baa34839..00000000 --- a/testing-app/.svelte-kit/output/client/.vite/manifest.json +++ /dev/null @@ -1,245 +0,0 @@ -{ - ".svelte-kit/generated/client-optimized/app.js": { - "file": "_app/immutable/entry/app.B2K7GTuH.js", - "name": "entry/app", - "src": ".svelte-kit/generated/client-optimized/app.js", - "isEntry": true, - "imports": [ - "_62BVG-0M.js", - "_IHki7fMi.js" - ], - "dynamicImports": [ - ".svelte-kit/generated/client-optimized/nodes/0.js", - ".svelte-kit/generated/client-optimized/nodes/1.js", - ".svelte-kit/generated/client-optimized/nodes/2.js", - ".svelte-kit/generated/client-optimized/nodes/3.js", - ".svelte-kit/generated/client-optimized/nodes/4.js", - ".svelte-kit/generated/client-optimized/nodes/5.js", - ".svelte-kit/generated/client-optimized/nodes/6.js", - ".svelte-kit/generated/client-optimized/nodes/7.js", - ".svelte-kit/generated/client-optimized/nodes/8.js", - ".svelte-kit/generated/client-optimized/nodes/9.js", - ".svelte-kit/generated/client-optimized/nodes/10.js", - ".svelte-kit/generated/client-optimized/nodes/11.js" - ] - }, - ".svelte-kit/generated/client-optimized/nodes/0.js": { - "file": "_app/immutable/nodes/0.B3WZRA0r.js", - "name": "nodes/0", - "src": ".svelte-kit/generated/client-optimized/nodes/0.js", - "isEntry": true, - "isDynamicEntry": true, - "imports": [ - "_62BVG-0M.js", - "_IHki7fMi.js", - "_BEfn3whw.js", - "_D3xHD3xP.js" - ], - "css": [ - "_app/immutable/assets/0.BYseaBWp.css" - ] - }, - ".svelte-kit/generated/client-optimized/nodes/1.js": { - "file": "_app/immutable/nodes/1.DUa_MPPC.js", - "name": "nodes/1", - "src": ".svelte-kit/generated/client-optimized/nodes/1.js", - "isEntry": true, - "isDynamicEntry": true, - "imports": [ - "_62BVG-0M.js", - "_IHki7fMi.js", - "_BEfn3whw.js" - ] - }, - ".svelte-kit/generated/client-optimized/nodes/10.js": { - "file": "_app/immutable/nodes/10.C_OQQveQ.js", - "name": "nodes/10", - "src": ".svelte-kit/generated/client-optimized/nodes/10.js", - "isEntry": true, - "isDynamicEntry": true, - "imports": [ - "_62BVG-0M.js", - "_IHki7fMi.js" - ], - "css": [ - "_app/immutable/assets/10.DhGtm3er.css" - ] - }, - ".svelte-kit/generated/client-optimized/nodes/11.js": { - "file": "_app/immutable/nodes/11.BcPfXbEK.js", - "name": "nodes/11", - "src": ".svelte-kit/generated/client-optimized/nodes/11.js", - "isEntry": true, - "isDynamicEntry": true, - "imports": [ - "_62BVG-0M.js", - "_IHki7fMi.js" - ], - "css": [ - "_app/immutable/assets/11.DTcCG34U.css" - ] - }, - ".svelte-kit/generated/client-optimized/nodes/2.js": { - "file": "_app/immutable/nodes/2.4Ek1nF8A.js", - "name": "nodes/2", - "src": ".svelte-kit/generated/client-optimized/nodes/2.js", - "isEntry": true, - "isDynamicEntry": true, - "imports": [ - "_62BVG-0M.js", - "_IHki7fMi.js", - "_D3xHD3xP.js" - ], - "css": [ - "_app/immutable/assets/2.CjMuiM7s.css" - ] - }, - ".svelte-kit/generated/client-optimized/nodes/3.js": { - "file": "_app/immutable/nodes/3.6XyjXGPy.js", - "name": "nodes/3", - "src": ".svelte-kit/generated/client-optimized/nodes/3.js", - "isEntry": true, - "isDynamicEntry": true, - "imports": [ - "_62BVG-0M.js", - "_IHki7fMi.js", - "_D3xHD3xP.js" - ], - "css": [ - "_app/immutable/assets/3.BDcQWZi5.css" - ] - }, - ".svelte-kit/generated/client-optimized/nodes/4.js": { - "file": "_app/immutable/nodes/4.B91Ry-vX.js", - "name": "nodes/4", - "src": ".svelte-kit/generated/client-optimized/nodes/4.js", - "isEntry": true, - "isDynamicEntry": true, - "imports": [ - "_62BVG-0M.js", - "_IHki7fMi.js" - ], - "css": [ - "_app/immutable/assets/4.crwMbBlP.css" - ] - }, - ".svelte-kit/generated/client-optimized/nodes/5.js": { - "file": "_app/immutable/nodes/5.ZxJVnQ2V.js", - "name": "nodes/5", - "src": ".svelte-kit/generated/client-optimized/nodes/5.js", - "isEntry": true, - "isDynamicEntry": true, - "imports": [ - "_62BVG-0M.js", - "_IHki7fMi.js", - "_D3xHD3xP.js" - ], - "css": [ - "_app/immutable/assets/5.Bkgd3-bB.css" - ] - }, - ".svelte-kit/generated/client-optimized/nodes/6.js": { - "file": "_app/immutable/nodes/6.CgAFXump.js", - "name": "nodes/6", - "src": ".svelte-kit/generated/client-optimized/nodes/6.js", - "isEntry": true, - "isDynamicEntry": true, - "imports": [ - "_62BVG-0M.js", - "_IHki7fMi.js", - "_D3xHD3xP.js" - ], - "css": [ - "_app/immutable/assets/6.zi60Wocq.css" - ] - }, - ".svelte-kit/generated/client-optimized/nodes/7.js": { - "file": "_app/immutable/nodes/7.B0nUtSqr.js", - "name": "nodes/7", - "src": ".svelte-kit/generated/client-optimized/nodes/7.js", - "isEntry": true, - "isDynamicEntry": true, - "imports": [ - "_62BVG-0M.js", - "_IHki7fMi.js", - "_D3xHD3xP.js" - ], - "css": [ - "_app/immutable/assets/7.DBui5s7P.css" - ] - }, - ".svelte-kit/generated/client-optimized/nodes/8.js": { - "file": "_app/immutable/nodes/8.C8NcTQBU.js", - "name": "nodes/8", - "src": ".svelte-kit/generated/client-optimized/nodes/8.js", - "isEntry": true, - "isDynamicEntry": true, - "imports": [ - "_62BVG-0M.js", - "_IHki7fMi.js" - ], - "css": [ - "_app/immutable/assets/8.Bzrer8Pn.css" - ] - }, - ".svelte-kit/generated/client-optimized/nodes/9.js": { - "file": "_app/immutable/nodes/9.B2KW8haW.js", - "name": "nodes/9", - "src": ".svelte-kit/generated/client-optimized/nodes/9.js", - "isEntry": true, - "isDynamicEntry": true, - "imports": [ - "_62BVG-0M.js", - "_IHki7fMi.js" - ], - "css": [ - "_app/immutable/assets/9.nkHczZI2.css" - ] - }, - "_62BVG-0M.js": { - "file": "_app/immutable/chunks/62BVG-0M.js", - "name": "Component" - }, - "_BEfn3whw.js": { - "file": "_app/immutable/chunks/BEfn3whw.js", - "name": "stores", - "imports": [ - "_BwHU8bWb.js" - ] - }, - "_BTqfQ_O8.js": { - "file": "_app/immutable/chunks/BTqfQ_O8.js", - "name": "index", - "imports": [ - "_62BVG-0M.js" - ] - }, - "_BwHU8bWb.js": { - "file": "_app/immutable/chunks/BwHU8bWb.js", - "name": "entry", - "imports": [ - "_62BVG-0M.js", - "_BTqfQ_O8.js" - ] - }, - "_D3xHD3xP.js": { - "file": "_app/immutable/chunks/D3xHD3xP.js", - "name": "wallet", - "imports": [ - "_BTqfQ_O8.js" - ] - }, - "_IHki7fMi.js": { - "file": "_app/immutable/chunks/IHki7fMi.js", - "name": "index" - }, - "node_modules/@sveltejs/kit/src/runtime/client/entry.js": { - "file": "_app/immutable/entry/start.CiC6nhvn.js", - "name": "entry/start", - "src": "node_modules/@sveltejs/kit/src/runtime/client/entry.js", - "isEntry": true, - "imports": [ - "_BwHU8bWb.js" - ] - } -} \ No newline at end of file diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/assets/0.BYseaBWp.css b/testing-app/.svelte-kit/output/client/_app/immutable/assets/0.BYseaBWp.css deleted file mode 100644 index 1dd5f3de..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/assets/0.BYseaBWp.css +++ /dev/null @@ -1 +0,0 @@ -.wallet-container.svelte-1pdwhqy{display:flex;align-items:center;gap:10px}.wallet-button.svelte-1pdwhqy{background-color:teal;color:#fff;border:2px outset #008080;padding:8px 16px;font-family:Courier New,monospace;font-weight:700;cursor:pointer;font-size:12px}.wallet-button.svelte-1pdwhqy:hover{background-color:#066}.wallet-button.svelte-1pdwhqy:active{border:2px inset #008080}.wallet-button.svelte-1pdwhqy:disabled{background-color:gray;cursor:not-allowed;opacity:.6}.wallet-button.disconnect.svelte-1pdwhqy{background-color:maroon;border-color:maroon}.wallet-button.disconnect.svelte-1pdwhqy:hover{background-color:#600000}.wallet-status.svelte-1pdwhqy{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:700}.status-indicator.svelte-1pdwhqy{width:8px;height:8px;border-radius:50%;background-color:#0f0;animation:svelte-1pdwhqy-pulse 2s infinite}.status-indicator.disconnected.svelte-1pdwhqy{background-color:red;animation:none}.address.svelte-1pdwhqy{background-color:#f0f0f0;border:1px inset #c0c0c0;padding:4px 8px;font-family:Courier New,monospace;font-size:11px;color:navy}.error.svelte-1pdwhqy{color:red;font-size:11px;max-width:200px;word-wrap:break-word}.connecting.svelte-1pdwhqy{color:#f80;font-size:11px}@keyframes svelte-1pdwhqy-pulse{0%{opacity:1}50%{opacity:.5}to{opacity:1}}.metamask-warning.svelte-1pdwhqy{background-color:#fff3cd;border:2px solid #ffeaa7;padding:8px;font-size:11px;color:#856404;margin-top:5px}body{font-family:Courier New,monospace;background-color:silver;margin:0;padding:0}.container.svelte-eu58yt.svelte-eu58yt{max-width:1200px;margin:0 auto;background-color:silver;min-height:100vh}.header.svelte-eu58yt.svelte-eu58yt{background-color:teal;color:#fff;padding:20px;border-bottom:3px solid #000080;display:flex;flex-direction:column;align-items:center;gap:15px}.header-content.svelte-eu58yt.svelte-eu58yt{text-align:center}.header.svelte-eu58yt h1.svelte-eu58yt{margin:0;font-size:24px;text-shadow:2px 2px 0px #000000}.wallet-section.svelte-eu58yt.svelte-eu58yt{display:flex;justify-content:center;width:100%}.nav.svelte-eu58yt.svelte-eu58yt{background-color:gray;border-bottom:2px solid #000000;padding:0}.nav.svelte-eu58yt ul.svelte-eu58yt{list-style:none;margin:0;padding:0;display:flex}.nav.svelte-eu58yt li.svelte-eu58yt{border-right:2px solid #000000}.nav.svelte-eu58yt li.svelte-eu58yt:first-child{border-left:2px solid #000000}.nav.svelte-eu58yt li.svelte-eu58yt:last-child{border-right:2px solid #000000}.nav.svelte-eu58yt a.svelte-eu58yt{display:block;padding:15px 25px;text-decoration:none;color:#000;background-color:silver;border:2px outset #c0c0c0;font-weight:700}.nav.svelte-eu58yt a.svelte-eu58yt:hover{background-color:#e0e0e0}.nav.svelte-eu58yt a.active.svelte-eu58yt{background-color:#fff;border:2px inset #c0c0c0}.content.svelte-eu58yt.svelte-eu58yt{padding:20px;background-color:#fff;margin:10px;border:2px inset #c0c0c0;min-height:500px} diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/assets/10.DhGtm3er.css b/testing-app/.svelte-kit/output/client/_app/immutable/assets/10.DhGtm3er.css deleted file mode 100644 index b62e80c3..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/assets/10.DhGtm3er.css +++ /dev/null @@ -1 +0,0 @@ -.form-container.svelte-ing6in.svelte-ing6in{background-color:#f0f0f0;border:2px inset #c0c0c0;padding:20px;margin:20px 0}.form-group.svelte-ing6in.svelte-ing6in{margin:15px 0}.form-group.svelte-ing6in label.svelte-ing6in{display:block;font-weight:700;margin-bottom:5px;color:navy}.form-group.svelte-ing6in input.svelte-ing6in,.form-group.svelte-ing6in textarea.svelte-ing6in{width:100%;padding:8px;border:2px inset #c0c0c0;font-family:Courier New,monospace;background-color:#fff}.form-group.svelte-ing6in textarea.svelte-ing6in{height:80px;resize:vertical}.receivers-section.svelte-ing6in.svelte-ing6in{background-color:#e0e0e0;border:2px inset #c0c0c0;padding:15px;margin:15px 0}.receiver-item.svelte-ing6in.svelte-ing6in{background-color:#f8f8f8;border:1px solid #808080;padding:10px;margin:10px 0}.receiver-controls.svelte-ing6in.svelte-ing6in{display:flex;gap:10px;align-items:center;margin:10px 0}.receiver-controls.svelte-ing6in select.svelte-ing6in{padding:5px;border:2px inset #c0c0c0}.button.svelte-ing6in.svelte-ing6in{background-color:silver;border:2px outset #c0c0c0;padding:10px 20px;font-family:Courier New,monospace;font-weight:700;cursor:pointer;margin:5px}.button.svelte-ing6in.svelte-ing6in:hover{background-color:#e0e0e0}.button.svelte-ing6in.svelte-ing6in:active{border:2px inset #c0c0c0}.button.primary.svelte-ing6in.svelte-ing6in{background-color:teal;color:#fff}.button.primary.svelte-ing6in.svelte-ing6in:hover{background-color:#066}.button.secondary.svelte-ing6in.svelte-ing6in{background-color:olive;color:#fff}.button.secondary.svelte-ing6in.svelte-ing6in:hover{background-color:#606000}.back-link.svelte-ing6in.svelte-ing6in{margin-bottom:20px}.back-link.svelte-ing6in a.svelte-ing6in{color:navy;text-decoration:underline}.info-box.svelte-ing6in.svelte-ing6in{background-color:#ffc;border:2px solid #ffcc00;padding:15px;margin:20px 0}.step-indicator.svelte-ing6in.svelte-ing6in{background-color:#e0e0e0;border:2px outset #c0c0c0;padding:10px;margin:10px 0;font-weight:700}.phase-separator.svelte-ing6in.svelte-ing6in{background-color:#f66;color:#fff;padding:15px;margin:30px 0;text-align:center;font-weight:700;border:2px solid #cc0000} diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/assets/11.DTcCG34U.css b/testing-app/.svelte-kit/output/client/_app/immutable/assets/11.DTcCG34U.css deleted file mode 100644 index c5ad0f1d..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/assets/11.DTcCG34U.css +++ /dev/null @@ -1 +0,0 @@ -.operations.svelte-s1nhl5.svelte-s1nhl5{display:grid;grid-template-columns:repeat(auto-fit,minmax(400px,1fr));gap:20px;margin:20px 0}.operation.svelte-s1nhl5.svelte-s1nhl5{background-color:#f0f0f0;border:2px outset #c0c0c0;padding:20px}.operation.svelte-s1nhl5 h3.svelte-s1nhl5{margin-top:0;color:navy;border-bottom:2px solid #000080;padding-bottom:5px}.operation.svelte-s1nhl5 p.svelte-s1nhl5{margin:10px 0}.operation.svelte-s1nhl5 a.svelte-s1nhl5{display:inline-block;background-color:silver;border:2px outset #c0c0c0;padding:8px 16px;text-decoration:none;color:#000;font-weight:700;margin:5px 5px 5px 0}.operation.svelte-s1nhl5 a.svelte-s1nhl5:hover{background-color:#e0e0e0}.operation.svelte-s1nhl5 a.svelte-s1nhl5:active{border:2px inset #c0c0c0}.back-link.svelte-s1nhl5.svelte-s1nhl5{margin-bottom:20px}.back-link.svelte-s1nhl5 a.svelte-s1nhl5{color:navy;text-decoration:underline}.utils-info.svelte-s1nhl5.svelte-s1nhl5{background-color:#ffc;border:2px solid #ffcc00;padding:15px;margin:20px 0}.access-indicator.svelte-s1nhl5.svelte-s1nhl5{display:inline-block;font-size:10px;padding:2px 6px;margin-left:8px;border:1px solid;font-weight:700;font-family:Courier New,monospace}.access-indicator.read.svelte-s1nhl5.svelte-s1nhl5{background-color:#cfc;border-color:#6f6;color:#060} diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/assets/2.CjMuiM7s.css b/testing-app/.svelte-kit/output/client/_app/immutable/assets/2.CjMuiM7s.css deleted file mode 100644 index ca8cbbb9..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/assets/2.CjMuiM7s.css +++ /dev/null @@ -1 +0,0 @@ -.welcome.svelte-1piekce.svelte-1piekce{text-align:center;margin:40px 0}.description.svelte-1piekce.svelte-1piekce{background-color:#f0f0f0;border:2px inset #c0c0c0;padding:20px;margin:20px 0}.wallet-info.svelte-1piekce.svelte-1piekce{background-color:#e6f3ff;border:2px solid #0066cc;padding:20px;margin:20px 0}.wallet-info.connected.svelte-1piekce.svelte-1piekce{background-color:#e6ffe6;border-color:#0c0}.wallet-info.disconnected.svelte-1piekce.svelte-1piekce{background-color:#ffe6e6;border-color:#c00}.wallet-address.svelte-1piekce.svelte-1piekce{font-family:Courier New,monospace;background-color:#f0f0f0;padding:8px;border:1px inset #c0c0c0;margin:10px 0;word-break:break-all}.modules.svelte-1piekce.svelte-1piekce{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:20px;margin:30px 0}.module.svelte-1piekce.svelte-1piekce{background-color:#e0e0e0;border:2px outset #c0c0c0;padding:15px}.module.svelte-1piekce h3.svelte-1piekce{margin-top:0;color:navy}.module.svelte-1piekce ul.svelte-1piekce{margin:10px 0;padding-left:20px}.module.svelte-1piekce a.svelte-1piekce{color:navy;text-decoration:underline}.module.svelte-1piekce a.svelte-1piekce:hover{background-color:#ff0} diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/assets/3.BDcQWZi5.css b/testing-app/.svelte-kit/output/client/_app/immutable/assets/3.BDcQWZi5.css deleted file mode 100644 index a3b28a97..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/assets/3.BDcQWZi5.css +++ /dev/null @@ -1 +0,0 @@ -.operations.svelte-1kxhsoz.svelte-1kxhsoz{display:grid;grid-template-columns:repeat(auto-fit,minmax(400px,1fr));gap:20px;margin:20px 0}.operation.svelte-1kxhsoz.svelte-1kxhsoz{background-color:#f0f0f0;border:2px outset #c0c0c0;padding:20px}.operation.svelte-1kxhsoz h3.svelte-1kxhsoz{margin-top:0;color:navy;border-bottom:2px solid #000080;padding-bottom:5px}.operation.svelte-1kxhsoz p.svelte-1kxhsoz{margin:10px 0}.operation.svelte-1kxhsoz a.svelte-1kxhsoz{display:inline-block;background-color:silver;border:2px outset #c0c0c0;padding:8px 16px;text-decoration:none;color:#000;font-weight:700;margin:5px 5px 5px 0}.operation.svelte-1kxhsoz a.svelte-1kxhsoz:hover{background-color:#e0e0e0}.operation.svelte-1kxhsoz a.svelte-1kxhsoz:active{border:2px inset #c0c0c0}.back-link.svelte-1kxhsoz.svelte-1kxhsoz{margin-bottom:20px}.back-link.svelte-1kxhsoz a.svelte-1kxhsoz{color:navy;text-decoration:underline}.donation-types.svelte-1kxhsoz.svelte-1kxhsoz{background-color:#ffc;border:2px solid #ffcc00;padding:15px;margin:20px 0}.access-indicator.svelte-1kxhsoz.svelte-1kxhsoz{display:inline-block;font-size:10px;padding:2px 6px;margin-left:8px;border:1px solid;font-weight:700;font-family:Courier New,monospace}.access-indicator.write.svelte-1kxhsoz.svelte-1kxhsoz{background-color:#fcc;border-color:#f66;color:#c00}.operation.disabled.svelte-1kxhsoz.svelte-1kxhsoz{opacity:.5;pointer-events:none}.operation.disabled.svelte-1kxhsoz .access-indicator.svelte-1kxhsoz{opacity:.7} diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/assets/4.crwMbBlP.css b/testing-app/.svelte-kit/output/client/_app/immutable/assets/4.crwMbBlP.css deleted file mode 100644 index c3f51342..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/assets/4.crwMbBlP.css +++ /dev/null @@ -1 +0,0 @@ -.form-container.svelte-d0c2ur.svelte-d0c2ur{background-color:#f0f0f0;border:2px inset #c0c0c0;padding:20px;margin:20px 0}.form-group.svelte-d0c2ur.svelte-d0c2ur{margin:15px 0}.form-group.svelte-d0c2ur label.svelte-d0c2ur{display:block;font-weight:700;margin-bottom:5px;color:navy}.form-group.svelte-d0c2ur input.svelte-d0c2ur,.form-group.svelte-d0c2ur textarea.svelte-d0c2ur,.form-group.svelte-d0c2ur select.svelte-d0c2ur{width:100%;padding:8px;border:2px inset #c0c0c0;font-family:Courier New,monospace;background-color:#fff}.form-group.svelte-d0c2ur textarea.svelte-d0c2ur{height:80px;resize:vertical}.receivers-section.svelte-d0c2ur.svelte-d0c2ur{background-color:#e0e0e0;border:2px inset #c0c0c0;padding:15px;margin:15px 0}.receiver-item.svelte-d0c2ur.svelte-d0c2ur{background-color:#f8f8f8;border:1px solid #808080;padding:10px;margin:10px 0}.button.svelte-d0c2ur.svelte-d0c2ur{background-color:silver;border:2px outset #c0c0c0;padding:10px 20px;font-family:Courier New,monospace;font-weight:700;cursor:pointer;margin:5px}.button.svelte-d0c2ur.svelte-d0c2ur:hover{background-color:#e0e0e0}.button.svelte-d0c2ur.svelte-d0c2ur:active{border:2px inset #c0c0c0}.button.primary.svelte-d0c2ur.svelte-d0c2ur{background-color:teal;color:#fff}.button.primary.svelte-d0c2ur.svelte-d0c2ur:hover{background-color:#066}.button.secondary.svelte-d0c2ur.svelte-d0c2ur{background-color:olive;color:#fff}.button.secondary.svelte-d0c2ur.svelte-d0c2ur:hover{background-color:#606000}.back-link.svelte-d0c2ur.svelte-d0c2ur{margin-bottom:20px}.back-link.svelte-d0c2ur a.svelte-d0c2ur{color:navy;text-decoration:underline}.info-box.svelte-d0c2ur.svelte-d0c2ur{background-color:#ffc;border:2px solid #ffcc00;padding:15px;margin:20px 0}.step-indicator.svelte-d0c2ur.svelte-d0c2ur{background-color:#e0e0e0;border:2px outset #c0c0c0;padding:10px;margin:10px 0;font-weight:700}.phase-separator.svelte-d0c2ur.svelte-d0c2ur{background-color:#f66;color:#fff;padding:15px;margin:30px 0;text-align:center;font-weight:700;border:2px solid #cc0000} diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/assets/5.Bkgd3-bB.css b/testing-app/.svelte-kit/output/client/_app/immutable/assets/5.Bkgd3-bB.css deleted file mode 100644 index d24c4375..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/assets/5.Bkgd3-bB.css +++ /dev/null @@ -1 +0,0 @@ -.operations.svelte-xp12xz.svelte-xp12xz{display:grid;grid-template-columns:repeat(auto-fit,minmax(400px,1fr));gap:20px;margin:20px 0}.operation.svelte-xp12xz.svelte-xp12xz{background-color:#f0f0f0;border:2px outset #c0c0c0;padding:20px}.operation.svelte-xp12xz h3.svelte-xp12xz{margin-top:0;color:navy;border-bottom:2px solid #000080;padding-bottom:5px}.operation.svelte-xp12xz p.svelte-xp12xz{margin:10px 0}.operation.svelte-xp12xz a.svelte-xp12xz{display:inline-block;background-color:silver;border:2px outset #c0c0c0;padding:8px 16px;text-decoration:none;color:#000;font-weight:700;margin:5px 5px 5px 0}.operation.svelte-xp12xz a.svelte-xp12xz:hover{background-color:#e0e0e0}.operation.svelte-xp12xz a.svelte-xp12xz:active{border:2px inset #c0c0c0}.back-link.svelte-xp12xz.svelte-xp12xz{margin-bottom:20px}.back-link.svelte-xp12xz a.svelte-xp12xz{color:navy;text-decoration:underline}.drip-lists-info.svelte-xp12xz.svelte-xp12xz{background-color:#ffc;border:2px solid #ffcc00;padding:15px;margin:20px 0}.access-indicator.svelte-xp12xz.svelte-xp12xz{display:inline-block;font-size:10px;padding:2px 6px;margin-left:8px;border:1px solid;font-weight:700;font-family:Courier New,monospace}.access-indicator.write.svelte-xp12xz.svelte-xp12xz{background-color:#fcc;border-color:#f66;color:#c00}.access-indicator.read.svelte-xp12xz.svelte-xp12xz{background-color:#cfc;border-color:#6f6;color:#060}.operation.disabled.svelte-xp12xz.svelte-xp12xz{opacity:.5;pointer-events:none}.operation.disabled.svelte-xp12xz .access-indicator.svelte-xp12xz{opacity:.7} diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/assets/6.zi60Wocq.css b/testing-app/.svelte-kit/output/client/_app/immutable/assets/6.zi60Wocq.css deleted file mode 100644 index 75c4e5e8..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/assets/6.zi60Wocq.css +++ /dev/null @@ -1 +0,0 @@ -.form-container.svelte-1hwmnd0.svelte-1hwmnd0{background-color:#f0f0f0;border:2px inset #c0c0c0;padding:20px;margin:20px 0}.form-group.svelte-1hwmnd0.svelte-1hwmnd0{margin:15px 0}.form-group.svelte-1hwmnd0 label.svelte-1hwmnd0{display:block;font-weight:700;margin-bottom:5px;color:navy}.checkbox-group.svelte-1hwmnd0.svelte-1hwmnd0{display:flex;align-items:center;gap:8px}.checkbox-group.svelte-1hwmnd0 label.svelte-1hwmnd0{display:flex;align-items:center;gap:8px;margin-bottom:0}.checkbox-group.svelte-1hwmnd0 input[type=checkbox].svelte-1hwmnd0{width:auto;margin:0}.form-group.svelte-1hwmnd0 input.svelte-1hwmnd0,.form-group.svelte-1hwmnd0 textarea.svelte-1hwmnd0{width:100%;padding:8px;border:2px inset #c0c0c0;font-family:Courier New,monospace;background-color:#fff}.form-group.svelte-1hwmnd0 textarea.svelte-1hwmnd0{height:80px;resize:vertical}.receivers-section.svelte-1hwmnd0.svelte-1hwmnd0{background-color:#e0e0e0;border:2px inset #c0c0c0;padding:15px;margin:15px 0}.receiver-item.svelte-1hwmnd0.svelte-1hwmnd0{background-color:#f8f8f8;border:1px solid #808080;padding:10px;margin:10px 0}.receiver-controls.svelte-1hwmnd0.svelte-1hwmnd0{display:flex;gap:10px;align-items:center;margin:10px 0}.receiver-controls.svelte-1hwmnd0 select.svelte-1hwmnd0{padding:5px;border:2px inset #c0c0c0}.button.svelte-1hwmnd0.svelte-1hwmnd0{background-color:silver;border:2px outset #c0c0c0;padding:10px 20px;font-family:Courier New,monospace;font-weight:700;cursor:pointer;margin:5px}.button.svelte-1hwmnd0.svelte-1hwmnd0:hover{background-color:#e0e0e0}.button.svelte-1hwmnd0.svelte-1hwmnd0:active{border:2px inset #c0c0c0}.button.primary.svelte-1hwmnd0.svelte-1hwmnd0{background-color:purple;color:#fff}.button.primary.svelte-1hwmnd0.svelte-1hwmnd0:hover{background-color:#600060}.back-link.svelte-1hwmnd0.svelte-1hwmnd0{margin-bottom:20px}.back-link.svelte-1hwmnd0 a.svelte-1hwmnd0{color:navy;text-decoration:underline}.info-box.svelte-1hwmnd0.svelte-1hwmnd0{background-color:#ffc;border:2px solid #ffcc00;padding:15px;margin:20px 0}.step-indicator.svelte-1hwmnd0.svelte-1hwmnd0{background-color:#e0e0e0;border:2px outset #c0c0c0;padding:10px;margin:10px 0;font-weight:700}.wallet-status.svelte-1hwmnd0.svelte-1hwmnd0{background-color:#cfc;border:2px solid #66ff66;padding:10px;margin:10px 0;font-weight:700;color:#060}.wallet-status.disconnected.svelte-1hwmnd0.svelte-1hwmnd0{background-color:#fcc;border-color:#f66;color:#c00} diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/assets/7.DBui5s7P.css b/testing-app/.svelte-kit/output/client/_app/immutable/assets/7.DBui5s7P.css deleted file mode 100644 index ea53fd9a..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/assets/7.DBui5s7P.css +++ /dev/null @@ -1 +0,0 @@ -.form-container.svelte-65cwss.svelte-65cwss{background-color:#f0f0f0;border:2px inset #c0c0c0;padding:20px;margin:20px 0}.form-group.svelte-65cwss.svelte-65cwss{margin:15px 0}.form-group.svelte-65cwss label.svelte-65cwss{display:block;font-weight:700;margin-bottom:5px;color:navy}.checkbox-group.svelte-65cwss.svelte-65cwss{display:flex;align-items:center;gap:8px}.checkbox-group.svelte-65cwss label.svelte-65cwss{display:flex;align-items:center;gap:8px;margin-bottom:0}.checkbox-group.svelte-65cwss input[type=checkbox].svelte-65cwss{width:auto;margin:0}.form-group.svelte-65cwss input.svelte-65cwss,.form-group.svelte-65cwss textarea.svelte-65cwss{width:100%;padding:8px;border:2px inset #c0c0c0;font-family:Courier New,monospace;background-color:#fff}.form-group.svelte-65cwss textarea.svelte-65cwss{height:80px;resize:vertical}.receivers-section.svelte-65cwss.svelte-65cwss{background-color:#e0e0e0;border:2px inset #c0c0c0;padding:15px;margin:15px 0}.receiver-item.svelte-65cwss.svelte-65cwss{background-color:#f8f8f8;border:1px solid #808080;padding:10px;margin:10px 0}.receiver-controls.svelte-65cwss.svelte-65cwss{display:flex;gap:10px;align-items:center;margin:10px 0}.receiver-controls.svelte-65cwss select.svelte-65cwss{padding:5px;border:2px inset #c0c0c0}.button.svelte-65cwss.svelte-65cwss{background-color:silver;border:2px outset #c0c0c0;padding:10px 20px;font-family:Courier New,monospace;font-weight:700;cursor:pointer;margin:5px}.button.svelte-65cwss.svelte-65cwss:hover{background-color:#e0e0e0}.button.svelte-65cwss.svelte-65cwss:active{border:2px inset #c0c0c0}.button.primary.svelte-65cwss.svelte-65cwss{background-color:teal;color:#fff}.button.primary.svelte-65cwss.svelte-65cwss:hover{background-color:#066}.back-link.svelte-65cwss.svelte-65cwss{margin-bottom:20px}.back-link.svelte-65cwss a.svelte-65cwss{color:navy;text-decoration:underline}.info-box.svelte-65cwss.svelte-65cwss{background-color:#ffc;border:2px solid #ffcc00;padding:15px;margin:20px 0}.step-indicator.svelte-65cwss.svelte-65cwss{background-color:#e0e0e0;border:2px outset #c0c0c0;padding:10px;margin:10px 0;font-weight:700}.wallet-status.svelte-65cwss.svelte-65cwss{background-color:#cfc;border:2px solid #66ff66;padding:10px;margin:10px 0;font-weight:700;color:#060}.wallet-status.disconnected.svelte-65cwss.svelte-65cwss{background-color:#fcc;border-color:#f66;color:#c00} diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/assets/8.Bzrer8Pn.css b/testing-app/.svelte-kit/output/client/_app/immutable/assets/8.Bzrer8Pn.css deleted file mode 100644 index d8f4a244..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/assets/8.Bzrer8Pn.css +++ /dev/null @@ -1 +0,0 @@ -.form-container.svelte-1met90o.svelte-1met90o{background-color:#f0f0f0;border:2px inset #c0c0c0;padding:20px;margin:20px 0}.form-group.svelte-1met90o.svelte-1met90o{margin:15px 0}.form-group.svelte-1met90o label.svelte-1met90o{display:block;font-weight:700;margin-bottom:5px;color:navy}.form-group.svelte-1met90o input.svelte-1met90o{width:100%;padding:8px;border:2px inset #c0c0c0;font-family:Courier New,monospace;background-color:#fff}.button.svelte-1met90o.svelte-1met90o{background-color:silver;border:2px outset #c0c0c0;padding:10px 20px;font-family:Courier New,monospace;font-weight:700;cursor:pointer;margin:5px}.button.svelte-1met90o.svelte-1met90o:hover{background-color:#e0e0e0}.button.svelte-1met90o.svelte-1met90o:active{border:2px inset #c0c0c0}.button.primary.svelte-1met90o.svelte-1met90o{background-color:teal;color:#fff}.button.primary.svelte-1met90o.svelte-1met90o:hover{background-color:#066}.back-link.svelte-1met90o.svelte-1met90o{margin-bottom:20px}.back-link.svelte-1met90o a.svelte-1met90o{color:navy;text-decoration:underline}.info-box.svelte-1met90o.svelte-1met90o{background-color:#ffc;border:2px solid #ffcc00;padding:15px;margin:20px 0}.step-indicator.svelte-1met90o.svelte-1met90o{background-color:#e0e0e0;border:2px outset #c0c0c0;padding:10px;margin:10px 0;font-weight:700}.result-container.svelte-1met90o.svelte-1met90o{background-color:#f8f8f8;border:2px inset #c0c0c0;padding:15px;margin:20px 0;font-family:Courier New,monospace;font-size:12px} diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/assets/9.nkHczZI2.css b/testing-app/.svelte-kit/output/client/_app/immutable/assets/9.nkHczZI2.css deleted file mode 100644 index bf450fd3..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/assets/9.nkHczZI2.css +++ /dev/null @@ -1 +0,0 @@ -.form-container.svelte-vzfdz3.svelte-vzfdz3{background-color:#f0f0f0;border:2px inset #c0c0c0;padding:20px;margin:20px 0}.form-group.svelte-vzfdz3.svelte-vzfdz3{margin:15px 0}.form-group.svelte-vzfdz3 label.svelte-vzfdz3{display:block;font-weight:700;margin-bottom:5px;color:navy}.form-group.svelte-vzfdz3 input.svelte-vzfdz3,.form-group.svelte-vzfdz3 textarea.svelte-vzfdz3{width:100%;padding:8px;border:2px inset #c0c0c0;font-family:Courier New,monospace;background-color:#fff}.form-group.svelte-vzfdz3 textarea.svelte-vzfdz3{height:80px;resize:vertical}.receivers-section.svelte-vzfdz3.svelte-vzfdz3{background-color:#e0e0e0;border:2px inset #c0c0c0;padding:15px;margin:15px 0}.receiver-item.svelte-vzfdz3.svelte-vzfdz3{background-color:#f8f8f8;border:1px solid #808080;padding:10px;margin:10px 0}.receiver-controls.svelte-vzfdz3.svelte-vzfdz3{display:flex;gap:10px;align-items:center;margin:10px 0}.receiver-controls.svelte-vzfdz3 select.svelte-vzfdz3{padding:5px;border:2px inset #c0c0c0}.button.svelte-vzfdz3.svelte-vzfdz3{background-color:silver;border:2px outset #c0c0c0;padding:10px 20px;font-family:Courier New,monospace;font-weight:700;cursor:pointer;margin:5px}.button.svelte-vzfdz3.svelte-vzfdz3:hover{background-color:#e0e0e0}.button.svelte-vzfdz3.svelte-vzfdz3:active{border:2px inset #c0c0c0}.button.primary.svelte-vzfdz3.svelte-vzfdz3{background-color:purple;color:#fff}.button.primary.svelte-vzfdz3.svelte-vzfdz3:hover{background-color:#600060}.button.secondary.svelte-vzfdz3.svelte-vzfdz3{background-color:olive;color:#fff}.button.secondary.svelte-vzfdz3.svelte-vzfdz3:hover{background-color:#606000}.back-link.svelte-vzfdz3.svelte-vzfdz3{margin-bottom:20px}.back-link.svelte-vzfdz3 a.svelte-vzfdz3{color:navy;text-decoration:underline}.info-box.svelte-vzfdz3.svelte-vzfdz3{background-color:#ffc;border:2px solid #ffcc00;padding:15px;margin:20px 0}.step-indicator.svelte-vzfdz3.svelte-vzfdz3{background-color:#e0e0e0;border:2px outset #c0c0c0;padding:10px;margin:10px 0;font-weight:700}.phase-separator.svelte-vzfdz3.svelte-vzfdz3{background-color:#f66;color:#fff;padding:15px;margin:30px 0;text-align:center;font-weight:700;border:2px solid #cc0000} diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/assets/_layout.BYseaBWp.css b/testing-app/.svelte-kit/output/client/_app/immutable/assets/_layout.BYseaBWp.css deleted file mode 100644 index 1dd5f3de..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/assets/_layout.BYseaBWp.css +++ /dev/null @@ -1 +0,0 @@ -.wallet-container.svelte-1pdwhqy{display:flex;align-items:center;gap:10px}.wallet-button.svelte-1pdwhqy{background-color:teal;color:#fff;border:2px outset #008080;padding:8px 16px;font-family:Courier New,monospace;font-weight:700;cursor:pointer;font-size:12px}.wallet-button.svelte-1pdwhqy:hover{background-color:#066}.wallet-button.svelte-1pdwhqy:active{border:2px inset #008080}.wallet-button.svelte-1pdwhqy:disabled{background-color:gray;cursor:not-allowed;opacity:.6}.wallet-button.disconnect.svelte-1pdwhqy{background-color:maroon;border-color:maroon}.wallet-button.disconnect.svelte-1pdwhqy:hover{background-color:#600000}.wallet-status.svelte-1pdwhqy{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:700}.status-indicator.svelte-1pdwhqy{width:8px;height:8px;border-radius:50%;background-color:#0f0;animation:svelte-1pdwhqy-pulse 2s infinite}.status-indicator.disconnected.svelte-1pdwhqy{background-color:red;animation:none}.address.svelte-1pdwhqy{background-color:#f0f0f0;border:1px inset #c0c0c0;padding:4px 8px;font-family:Courier New,monospace;font-size:11px;color:navy}.error.svelte-1pdwhqy{color:red;font-size:11px;max-width:200px;word-wrap:break-word}.connecting.svelte-1pdwhqy{color:#f80;font-size:11px}@keyframes svelte-1pdwhqy-pulse{0%{opacity:1}50%{opacity:.5}to{opacity:1}}.metamask-warning.svelte-1pdwhqy{background-color:#fff3cd;border:2px solid #ffeaa7;padding:8px;font-size:11px;color:#856404;margin-top:5px}body{font-family:Courier New,monospace;background-color:silver;margin:0;padding:0}.container.svelte-eu58yt.svelte-eu58yt{max-width:1200px;margin:0 auto;background-color:silver;min-height:100vh}.header.svelte-eu58yt.svelte-eu58yt{background-color:teal;color:#fff;padding:20px;border-bottom:3px solid #000080;display:flex;flex-direction:column;align-items:center;gap:15px}.header-content.svelte-eu58yt.svelte-eu58yt{text-align:center}.header.svelte-eu58yt h1.svelte-eu58yt{margin:0;font-size:24px;text-shadow:2px 2px 0px #000000}.wallet-section.svelte-eu58yt.svelte-eu58yt{display:flex;justify-content:center;width:100%}.nav.svelte-eu58yt.svelte-eu58yt{background-color:gray;border-bottom:2px solid #000000;padding:0}.nav.svelte-eu58yt ul.svelte-eu58yt{list-style:none;margin:0;padding:0;display:flex}.nav.svelte-eu58yt li.svelte-eu58yt{border-right:2px solid #000000}.nav.svelte-eu58yt li.svelte-eu58yt:first-child{border-left:2px solid #000000}.nav.svelte-eu58yt li.svelte-eu58yt:last-child{border-right:2px solid #000000}.nav.svelte-eu58yt a.svelte-eu58yt{display:block;padding:15px 25px;text-decoration:none;color:#000;background-color:silver;border:2px outset #c0c0c0;font-weight:700}.nav.svelte-eu58yt a.svelte-eu58yt:hover{background-color:#e0e0e0}.nav.svelte-eu58yt a.active.svelte-eu58yt{background-color:#fff;border:2px inset #c0c0c0}.content.svelte-eu58yt.svelte-eu58yt{padding:20px;background-color:#fff;margin:10px;border:2px inset #c0c0c0;min-height:500px} diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.BDcQWZi5.css b/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.BDcQWZi5.css deleted file mode 100644 index a3b28a97..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.BDcQWZi5.css +++ /dev/null @@ -1 +0,0 @@ -.operations.svelte-1kxhsoz.svelte-1kxhsoz{display:grid;grid-template-columns:repeat(auto-fit,minmax(400px,1fr));gap:20px;margin:20px 0}.operation.svelte-1kxhsoz.svelte-1kxhsoz{background-color:#f0f0f0;border:2px outset #c0c0c0;padding:20px}.operation.svelte-1kxhsoz h3.svelte-1kxhsoz{margin-top:0;color:navy;border-bottom:2px solid #000080;padding-bottom:5px}.operation.svelte-1kxhsoz p.svelte-1kxhsoz{margin:10px 0}.operation.svelte-1kxhsoz a.svelte-1kxhsoz{display:inline-block;background-color:silver;border:2px outset #c0c0c0;padding:8px 16px;text-decoration:none;color:#000;font-weight:700;margin:5px 5px 5px 0}.operation.svelte-1kxhsoz a.svelte-1kxhsoz:hover{background-color:#e0e0e0}.operation.svelte-1kxhsoz a.svelte-1kxhsoz:active{border:2px inset #c0c0c0}.back-link.svelte-1kxhsoz.svelte-1kxhsoz{margin-bottom:20px}.back-link.svelte-1kxhsoz a.svelte-1kxhsoz{color:navy;text-decoration:underline}.donation-types.svelte-1kxhsoz.svelte-1kxhsoz{background-color:#ffc;border:2px solid #ffcc00;padding:15px;margin:20px 0}.access-indicator.svelte-1kxhsoz.svelte-1kxhsoz{display:inline-block;font-size:10px;padding:2px 6px;margin-left:8px;border:1px solid;font-weight:700;font-family:Courier New,monospace}.access-indicator.write.svelte-1kxhsoz.svelte-1kxhsoz{background-color:#fcc;border-color:#f66;color:#c00}.operation.disabled.svelte-1kxhsoz.svelte-1kxhsoz{opacity:.5;pointer-events:none}.operation.disabled.svelte-1kxhsoz .access-indicator.svelte-1kxhsoz{opacity:.7} diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.Bkgd3-bB.css b/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.Bkgd3-bB.css deleted file mode 100644 index d24c4375..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.Bkgd3-bB.css +++ /dev/null @@ -1 +0,0 @@ -.operations.svelte-xp12xz.svelte-xp12xz{display:grid;grid-template-columns:repeat(auto-fit,minmax(400px,1fr));gap:20px;margin:20px 0}.operation.svelte-xp12xz.svelte-xp12xz{background-color:#f0f0f0;border:2px outset #c0c0c0;padding:20px}.operation.svelte-xp12xz h3.svelte-xp12xz{margin-top:0;color:navy;border-bottom:2px solid #000080;padding-bottom:5px}.operation.svelte-xp12xz p.svelte-xp12xz{margin:10px 0}.operation.svelte-xp12xz a.svelte-xp12xz{display:inline-block;background-color:silver;border:2px outset #c0c0c0;padding:8px 16px;text-decoration:none;color:#000;font-weight:700;margin:5px 5px 5px 0}.operation.svelte-xp12xz a.svelte-xp12xz:hover{background-color:#e0e0e0}.operation.svelte-xp12xz a.svelte-xp12xz:active{border:2px inset #c0c0c0}.back-link.svelte-xp12xz.svelte-xp12xz{margin-bottom:20px}.back-link.svelte-xp12xz a.svelte-xp12xz{color:navy;text-decoration:underline}.drip-lists-info.svelte-xp12xz.svelte-xp12xz{background-color:#ffc;border:2px solid #ffcc00;padding:15px;margin:20px 0}.access-indicator.svelte-xp12xz.svelte-xp12xz{display:inline-block;font-size:10px;padding:2px 6px;margin-left:8px;border:1px solid;font-weight:700;font-family:Courier New,monospace}.access-indicator.write.svelte-xp12xz.svelte-xp12xz{background-color:#fcc;border-color:#f66;color:#c00}.access-indicator.read.svelte-xp12xz.svelte-xp12xz{background-color:#cfc;border-color:#6f6;color:#060}.operation.disabled.svelte-xp12xz.svelte-xp12xz{opacity:.5;pointer-events:none}.operation.disabled.svelte-xp12xz .access-indicator.svelte-xp12xz{opacity:.7} diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.Bzrer8Pn.css b/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.Bzrer8Pn.css deleted file mode 100644 index d8f4a244..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.Bzrer8Pn.css +++ /dev/null @@ -1 +0,0 @@ -.form-container.svelte-1met90o.svelte-1met90o{background-color:#f0f0f0;border:2px inset #c0c0c0;padding:20px;margin:20px 0}.form-group.svelte-1met90o.svelte-1met90o{margin:15px 0}.form-group.svelte-1met90o label.svelte-1met90o{display:block;font-weight:700;margin-bottom:5px;color:navy}.form-group.svelte-1met90o input.svelte-1met90o{width:100%;padding:8px;border:2px inset #c0c0c0;font-family:Courier New,monospace;background-color:#fff}.button.svelte-1met90o.svelte-1met90o{background-color:silver;border:2px outset #c0c0c0;padding:10px 20px;font-family:Courier New,monospace;font-weight:700;cursor:pointer;margin:5px}.button.svelte-1met90o.svelte-1met90o:hover{background-color:#e0e0e0}.button.svelte-1met90o.svelte-1met90o:active{border:2px inset #c0c0c0}.button.primary.svelte-1met90o.svelte-1met90o{background-color:teal;color:#fff}.button.primary.svelte-1met90o.svelte-1met90o:hover{background-color:#066}.back-link.svelte-1met90o.svelte-1met90o{margin-bottom:20px}.back-link.svelte-1met90o a.svelte-1met90o{color:navy;text-decoration:underline}.info-box.svelte-1met90o.svelte-1met90o{background-color:#ffc;border:2px solid #ffcc00;padding:15px;margin:20px 0}.step-indicator.svelte-1met90o.svelte-1met90o{background-color:#e0e0e0;border:2px outset #c0c0c0;padding:10px;margin:10px 0;font-weight:700}.result-container.svelte-1met90o.svelte-1met90o{background-color:#f8f8f8;border:2px inset #c0c0c0;padding:15px;margin:20px 0;font-family:Courier New,monospace;font-size:12px} diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.CjMuiM7s.css b/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.CjMuiM7s.css deleted file mode 100644 index ca8cbbb9..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.CjMuiM7s.css +++ /dev/null @@ -1 +0,0 @@ -.welcome.svelte-1piekce.svelte-1piekce{text-align:center;margin:40px 0}.description.svelte-1piekce.svelte-1piekce{background-color:#f0f0f0;border:2px inset #c0c0c0;padding:20px;margin:20px 0}.wallet-info.svelte-1piekce.svelte-1piekce{background-color:#e6f3ff;border:2px solid #0066cc;padding:20px;margin:20px 0}.wallet-info.connected.svelte-1piekce.svelte-1piekce{background-color:#e6ffe6;border-color:#0c0}.wallet-info.disconnected.svelte-1piekce.svelte-1piekce{background-color:#ffe6e6;border-color:#c00}.wallet-address.svelte-1piekce.svelte-1piekce{font-family:Courier New,monospace;background-color:#f0f0f0;padding:8px;border:1px inset #c0c0c0;margin:10px 0;word-break:break-all}.modules.svelte-1piekce.svelte-1piekce{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:20px;margin:30px 0}.module.svelte-1piekce.svelte-1piekce{background-color:#e0e0e0;border:2px outset #c0c0c0;padding:15px}.module.svelte-1piekce h3.svelte-1piekce{margin-top:0;color:navy}.module.svelte-1piekce ul.svelte-1piekce{margin:10px 0;padding-left:20px}.module.svelte-1piekce a.svelte-1piekce{color:navy;text-decoration:underline}.module.svelte-1piekce a.svelte-1piekce:hover{background-color:#ff0} diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.DBui5s7P.css b/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.DBui5s7P.css deleted file mode 100644 index ea53fd9a..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.DBui5s7P.css +++ /dev/null @@ -1 +0,0 @@ -.form-container.svelte-65cwss.svelte-65cwss{background-color:#f0f0f0;border:2px inset #c0c0c0;padding:20px;margin:20px 0}.form-group.svelte-65cwss.svelte-65cwss{margin:15px 0}.form-group.svelte-65cwss label.svelte-65cwss{display:block;font-weight:700;margin-bottom:5px;color:navy}.checkbox-group.svelte-65cwss.svelte-65cwss{display:flex;align-items:center;gap:8px}.checkbox-group.svelte-65cwss label.svelte-65cwss{display:flex;align-items:center;gap:8px;margin-bottom:0}.checkbox-group.svelte-65cwss input[type=checkbox].svelte-65cwss{width:auto;margin:0}.form-group.svelte-65cwss input.svelte-65cwss,.form-group.svelte-65cwss textarea.svelte-65cwss{width:100%;padding:8px;border:2px inset #c0c0c0;font-family:Courier New,monospace;background-color:#fff}.form-group.svelte-65cwss textarea.svelte-65cwss{height:80px;resize:vertical}.receivers-section.svelte-65cwss.svelte-65cwss{background-color:#e0e0e0;border:2px inset #c0c0c0;padding:15px;margin:15px 0}.receiver-item.svelte-65cwss.svelte-65cwss{background-color:#f8f8f8;border:1px solid #808080;padding:10px;margin:10px 0}.receiver-controls.svelte-65cwss.svelte-65cwss{display:flex;gap:10px;align-items:center;margin:10px 0}.receiver-controls.svelte-65cwss select.svelte-65cwss{padding:5px;border:2px inset #c0c0c0}.button.svelte-65cwss.svelte-65cwss{background-color:silver;border:2px outset #c0c0c0;padding:10px 20px;font-family:Courier New,monospace;font-weight:700;cursor:pointer;margin:5px}.button.svelte-65cwss.svelte-65cwss:hover{background-color:#e0e0e0}.button.svelte-65cwss.svelte-65cwss:active{border:2px inset #c0c0c0}.button.primary.svelte-65cwss.svelte-65cwss{background-color:teal;color:#fff}.button.primary.svelte-65cwss.svelte-65cwss:hover{background-color:#066}.back-link.svelte-65cwss.svelte-65cwss{margin-bottom:20px}.back-link.svelte-65cwss a.svelte-65cwss{color:navy;text-decoration:underline}.info-box.svelte-65cwss.svelte-65cwss{background-color:#ffc;border:2px solid #ffcc00;padding:15px;margin:20px 0}.step-indicator.svelte-65cwss.svelte-65cwss{background-color:#e0e0e0;border:2px outset #c0c0c0;padding:10px;margin:10px 0;font-weight:700}.wallet-status.svelte-65cwss.svelte-65cwss{background-color:#cfc;border:2px solid #66ff66;padding:10px;margin:10px 0;font-weight:700;color:#060}.wallet-status.disconnected.svelte-65cwss.svelte-65cwss{background-color:#fcc;border-color:#f66;color:#c00} diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.DTcCG34U.css b/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.DTcCG34U.css deleted file mode 100644 index c5ad0f1d..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.DTcCG34U.css +++ /dev/null @@ -1 +0,0 @@ -.operations.svelte-s1nhl5.svelte-s1nhl5{display:grid;grid-template-columns:repeat(auto-fit,minmax(400px,1fr));gap:20px;margin:20px 0}.operation.svelte-s1nhl5.svelte-s1nhl5{background-color:#f0f0f0;border:2px outset #c0c0c0;padding:20px}.operation.svelte-s1nhl5 h3.svelte-s1nhl5{margin-top:0;color:navy;border-bottom:2px solid #000080;padding-bottom:5px}.operation.svelte-s1nhl5 p.svelte-s1nhl5{margin:10px 0}.operation.svelte-s1nhl5 a.svelte-s1nhl5{display:inline-block;background-color:silver;border:2px outset #c0c0c0;padding:8px 16px;text-decoration:none;color:#000;font-weight:700;margin:5px 5px 5px 0}.operation.svelte-s1nhl5 a.svelte-s1nhl5:hover{background-color:#e0e0e0}.operation.svelte-s1nhl5 a.svelte-s1nhl5:active{border:2px inset #c0c0c0}.back-link.svelte-s1nhl5.svelte-s1nhl5{margin-bottom:20px}.back-link.svelte-s1nhl5 a.svelte-s1nhl5{color:navy;text-decoration:underline}.utils-info.svelte-s1nhl5.svelte-s1nhl5{background-color:#ffc;border:2px solid #ffcc00;padding:15px;margin:20px 0}.access-indicator.svelte-s1nhl5.svelte-s1nhl5{display:inline-block;font-size:10px;padding:2px 6px;margin-left:8px;border:1px solid;font-weight:700;font-family:Courier New,monospace}.access-indicator.read.svelte-s1nhl5.svelte-s1nhl5{background-color:#cfc;border-color:#6f6;color:#060} diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.DhGtm3er.css b/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.DhGtm3er.css deleted file mode 100644 index b62e80c3..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.DhGtm3er.css +++ /dev/null @@ -1 +0,0 @@ -.form-container.svelte-ing6in.svelte-ing6in{background-color:#f0f0f0;border:2px inset #c0c0c0;padding:20px;margin:20px 0}.form-group.svelte-ing6in.svelte-ing6in{margin:15px 0}.form-group.svelte-ing6in label.svelte-ing6in{display:block;font-weight:700;margin-bottom:5px;color:navy}.form-group.svelte-ing6in input.svelte-ing6in,.form-group.svelte-ing6in textarea.svelte-ing6in{width:100%;padding:8px;border:2px inset #c0c0c0;font-family:Courier New,monospace;background-color:#fff}.form-group.svelte-ing6in textarea.svelte-ing6in{height:80px;resize:vertical}.receivers-section.svelte-ing6in.svelte-ing6in{background-color:#e0e0e0;border:2px inset #c0c0c0;padding:15px;margin:15px 0}.receiver-item.svelte-ing6in.svelte-ing6in{background-color:#f8f8f8;border:1px solid #808080;padding:10px;margin:10px 0}.receiver-controls.svelte-ing6in.svelte-ing6in{display:flex;gap:10px;align-items:center;margin:10px 0}.receiver-controls.svelte-ing6in select.svelte-ing6in{padding:5px;border:2px inset #c0c0c0}.button.svelte-ing6in.svelte-ing6in{background-color:silver;border:2px outset #c0c0c0;padding:10px 20px;font-family:Courier New,monospace;font-weight:700;cursor:pointer;margin:5px}.button.svelte-ing6in.svelte-ing6in:hover{background-color:#e0e0e0}.button.svelte-ing6in.svelte-ing6in:active{border:2px inset #c0c0c0}.button.primary.svelte-ing6in.svelte-ing6in{background-color:teal;color:#fff}.button.primary.svelte-ing6in.svelte-ing6in:hover{background-color:#066}.button.secondary.svelte-ing6in.svelte-ing6in{background-color:olive;color:#fff}.button.secondary.svelte-ing6in.svelte-ing6in:hover{background-color:#606000}.back-link.svelte-ing6in.svelte-ing6in{margin-bottom:20px}.back-link.svelte-ing6in a.svelte-ing6in{color:navy;text-decoration:underline}.info-box.svelte-ing6in.svelte-ing6in{background-color:#ffc;border:2px solid #ffcc00;padding:15px;margin:20px 0}.step-indicator.svelte-ing6in.svelte-ing6in{background-color:#e0e0e0;border:2px outset #c0c0c0;padding:10px;margin:10px 0;font-weight:700}.phase-separator.svelte-ing6in.svelte-ing6in{background-color:#f66;color:#fff;padding:15px;margin:30px 0;text-align:center;font-weight:700;border:2px solid #cc0000} diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.crwMbBlP.css b/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.crwMbBlP.css deleted file mode 100644 index c3f51342..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.crwMbBlP.css +++ /dev/null @@ -1 +0,0 @@ -.form-container.svelte-d0c2ur.svelte-d0c2ur{background-color:#f0f0f0;border:2px inset #c0c0c0;padding:20px;margin:20px 0}.form-group.svelte-d0c2ur.svelte-d0c2ur{margin:15px 0}.form-group.svelte-d0c2ur label.svelte-d0c2ur{display:block;font-weight:700;margin-bottom:5px;color:navy}.form-group.svelte-d0c2ur input.svelte-d0c2ur,.form-group.svelte-d0c2ur textarea.svelte-d0c2ur,.form-group.svelte-d0c2ur select.svelte-d0c2ur{width:100%;padding:8px;border:2px inset #c0c0c0;font-family:Courier New,monospace;background-color:#fff}.form-group.svelte-d0c2ur textarea.svelte-d0c2ur{height:80px;resize:vertical}.receivers-section.svelte-d0c2ur.svelte-d0c2ur{background-color:#e0e0e0;border:2px inset #c0c0c0;padding:15px;margin:15px 0}.receiver-item.svelte-d0c2ur.svelte-d0c2ur{background-color:#f8f8f8;border:1px solid #808080;padding:10px;margin:10px 0}.button.svelte-d0c2ur.svelte-d0c2ur{background-color:silver;border:2px outset #c0c0c0;padding:10px 20px;font-family:Courier New,monospace;font-weight:700;cursor:pointer;margin:5px}.button.svelte-d0c2ur.svelte-d0c2ur:hover{background-color:#e0e0e0}.button.svelte-d0c2ur.svelte-d0c2ur:active{border:2px inset #c0c0c0}.button.primary.svelte-d0c2ur.svelte-d0c2ur{background-color:teal;color:#fff}.button.primary.svelte-d0c2ur.svelte-d0c2ur:hover{background-color:#066}.button.secondary.svelte-d0c2ur.svelte-d0c2ur{background-color:olive;color:#fff}.button.secondary.svelte-d0c2ur.svelte-d0c2ur:hover{background-color:#606000}.back-link.svelte-d0c2ur.svelte-d0c2ur{margin-bottom:20px}.back-link.svelte-d0c2ur a.svelte-d0c2ur{color:navy;text-decoration:underline}.info-box.svelte-d0c2ur.svelte-d0c2ur{background-color:#ffc;border:2px solid #ffcc00;padding:15px;margin:20px 0}.step-indicator.svelte-d0c2ur.svelte-d0c2ur{background-color:#e0e0e0;border:2px outset #c0c0c0;padding:10px;margin:10px 0;font-weight:700}.phase-separator.svelte-d0c2ur.svelte-d0c2ur{background-color:#f66;color:#fff;padding:15px;margin:30px 0;text-align:center;font-weight:700;border:2px solid #cc0000} diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.nkHczZI2.css b/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.nkHczZI2.css deleted file mode 100644 index bf450fd3..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.nkHczZI2.css +++ /dev/null @@ -1 +0,0 @@ -.form-container.svelte-vzfdz3.svelte-vzfdz3{background-color:#f0f0f0;border:2px inset #c0c0c0;padding:20px;margin:20px 0}.form-group.svelte-vzfdz3.svelte-vzfdz3{margin:15px 0}.form-group.svelte-vzfdz3 label.svelte-vzfdz3{display:block;font-weight:700;margin-bottom:5px;color:navy}.form-group.svelte-vzfdz3 input.svelte-vzfdz3,.form-group.svelte-vzfdz3 textarea.svelte-vzfdz3{width:100%;padding:8px;border:2px inset #c0c0c0;font-family:Courier New,monospace;background-color:#fff}.form-group.svelte-vzfdz3 textarea.svelte-vzfdz3{height:80px;resize:vertical}.receivers-section.svelte-vzfdz3.svelte-vzfdz3{background-color:#e0e0e0;border:2px inset #c0c0c0;padding:15px;margin:15px 0}.receiver-item.svelte-vzfdz3.svelte-vzfdz3{background-color:#f8f8f8;border:1px solid #808080;padding:10px;margin:10px 0}.receiver-controls.svelte-vzfdz3.svelte-vzfdz3{display:flex;gap:10px;align-items:center;margin:10px 0}.receiver-controls.svelte-vzfdz3 select.svelte-vzfdz3{padding:5px;border:2px inset #c0c0c0}.button.svelte-vzfdz3.svelte-vzfdz3{background-color:silver;border:2px outset #c0c0c0;padding:10px 20px;font-family:Courier New,monospace;font-weight:700;cursor:pointer;margin:5px}.button.svelte-vzfdz3.svelte-vzfdz3:hover{background-color:#e0e0e0}.button.svelte-vzfdz3.svelte-vzfdz3:active{border:2px inset #c0c0c0}.button.primary.svelte-vzfdz3.svelte-vzfdz3{background-color:purple;color:#fff}.button.primary.svelte-vzfdz3.svelte-vzfdz3:hover{background-color:#600060}.button.secondary.svelte-vzfdz3.svelte-vzfdz3{background-color:olive;color:#fff}.button.secondary.svelte-vzfdz3.svelte-vzfdz3:hover{background-color:#606000}.back-link.svelte-vzfdz3.svelte-vzfdz3{margin-bottom:20px}.back-link.svelte-vzfdz3 a.svelte-vzfdz3{color:navy;text-decoration:underline}.info-box.svelte-vzfdz3.svelte-vzfdz3{background-color:#ffc;border:2px solid #ffcc00;padding:15px;margin:20px 0}.step-indicator.svelte-vzfdz3.svelte-vzfdz3{background-color:#e0e0e0;border:2px outset #c0c0c0;padding:10px;margin:10px 0;font-weight:700}.phase-separator.svelte-vzfdz3.svelte-vzfdz3{background-color:#f66;color:#fff;padding:15px;margin:30px 0;text-align:center;font-weight:700;border:2px solid #cc0000} diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.zi60Wocq.css b/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.zi60Wocq.css deleted file mode 100644 index 75c4e5e8..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/assets/_page.zi60Wocq.css +++ /dev/null @@ -1 +0,0 @@ -.form-container.svelte-1hwmnd0.svelte-1hwmnd0{background-color:#f0f0f0;border:2px inset #c0c0c0;padding:20px;margin:20px 0}.form-group.svelte-1hwmnd0.svelte-1hwmnd0{margin:15px 0}.form-group.svelte-1hwmnd0 label.svelte-1hwmnd0{display:block;font-weight:700;margin-bottom:5px;color:navy}.checkbox-group.svelte-1hwmnd0.svelte-1hwmnd0{display:flex;align-items:center;gap:8px}.checkbox-group.svelte-1hwmnd0 label.svelte-1hwmnd0{display:flex;align-items:center;gap:8px;margin-bottom:0}.checkbox-group.svelte-1hwmnd0 input[type=checkbox].svelte-1hwmnd0{width:auto;margin:0}.form-group.svelte-1hwmnd0 input.svelte-1hwmnd0,.form-group.svelte-1hwmnd0 textarea.svelte-1hwmnd0{width:100%;padding:8px;border:2px inset #c0c0c0;font-family:Courier New,monospace;background-color:#fff}.form-group.svelte-1hwmnd0 textarea.svelte-1hwmnd0{height:80px;resize:vertical}.receivers-section.svelte-1hwmnd0.svelte-1hwmnd0{background-color:#e0e0e0;border:2px inset #c0c0c0;padding:15px;margin:15px 0}.receiver-item.svelte-1hwmnd0.svelte-1hwmnd0{background-color:#f8f8f8;border:1px solid #808080;padding:10px;margin:10px 0}.receiver-controls.svelte-1hwmnd0.svelte-1hwmnd0{display:flex;gap:10px;align-items:center;margin:10px 0}.receiver-controls.svelte-1hwmnd0 select.svelte-1hwmnd0{padding:5px;border:2px inset #c0c0c0}.button.svelte-1hwmnd0.svelte-1hwmnd0{background-color:silver;border:2px outset #c0c0c0;padding:10px 20px;font-family:Courier New,monospace;font-weight:700;cursor:pointer;margin:5px}.button.svelte-1hwmnd0.svelte-1hwmnd0:hover{background-color:#e0e0e0}.button.svelte-1hwmnd0.svelte-1hwmnd0:active{border:2px inset #c0c0c0}.button.primary.svelte-1hwmnd0.svelte-1hwmnd0{background-color:purple;color:#fff}.button.primary.svelte-1hwmnd0.svelte-1hwmnd0:hover{background-color:#600060}.back-link.svelte-1hwmnd0.svelte-1hwmnd0{margin-bottom:20px}.back-link.svelte-1hwmnd0 a.svelte-1hwmnd0{color:navy;text-decoration:underline}.info-box.svelte-1hwmnd0.svelte-1hwmnd0{background-color:#ffc;border:2px solid #ffcc00;padding:15px;margin:20px 0}.step-indicator.svelte-1hwmnd0.svelte-1hwmnd0{background-color:#e0e0e0;border:2px outset #c0c0c0;padding:10px;margin:10px 0;font-weight:700}.wallet-status.svelte-1hwmnd0.svelte-1hwmnd0{background-color:#cfc;border:2px solid #66ff66;padding:10px;margin:10px 0;font-weight:700;color:#060}.wallet-status.disconnected.svelte-1hwmnd0.svelte-1hwmnd0{background-color:#fcc;border-color:#f66;color:#c00} diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/chunks/62BVG-0M.js b/testing-app/.svelte-kit/output/client/_app/immutable/chunks/62BVG-0M.js deleted file mode 100644 index e90e3b8f..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/chunks/62BVG-0M.js +++ /dev/null @@ -1 +0,0 @@ -var q=Object.defineProperty;var z=(t,n,e)=>n in t?q(t,n,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[n]=e;var E=(t,n,e)=>z(t,typeof n!="symbol"?n+"":n,e);function v(){}function F(t,n){for(const e in n)t[e]=n[e];return t}function D(t){return t()}function O(){return Object.create(null)}function g(t){t.forEach(D)}function L(t){return typeof t=="function"}function ft(t,n){return t!=t?n==n:t!==n||t&&typeof t=="object"||typeof t=="function"}function G(t){return Object.keys(t).length===0}function J(t,...n){if(t==null){for(const i of n)i(void 0);return v}const e=t.subscribe(...n);return e.unsubscribe?()=>e.unsubscribe():e}function dt(t,n,e){t.$$.on_destroy.push(J(n,e))}function _t(t,n,e,i){if(t){const r=M(t,n,e,i);return t[0](r)}}function M(t,n,e,i){return t[1]&&i?F(e.ctx.slice(),t[1](i(n))):e.ctx}function ht(t,n,e,i){return t[2],n.dirty}function mt(t,n,e,i,r,o){if(r){const c=M(n,e,i,o);t.p(c,r)}}function pt(t){if(t.ctx.length>32){const n=[],e=t.ctx.length/32;for(let i=0;i>1);e(r)<=i?t=r+1:n=r}return t}function V(t){if(t.hydrate_init)return;t.hydrate_init=!0;let n=t.childNodes;if(t.nodeName==="HEAD"){const s=[];for(let u=0;u0&&n[e[r]].claim_order<=u?r+1:R(1,r,x=>n[e[x]].claim_order,u))-1;i[s]=e[f]+1;const a=f+1;e[a]=s,r=Math.max(a,r)}const o=[],c=[];let l=n.length-1;for(let s=e[r]+1;s!=0;s=i[s-1]){for(o.push(n[s-1]);l>=s;l--)c.push(n[l]);l--}for(;l>=0;l--)c.push(n[l]);o.reverse(),c.sort((s,u)=>s.claim_order-u.claim_order);for(let s=0,u=0;s=o[u].claim_order;)u++;const f=ut.removeEventListener(n,e,i)}function vt(t,n,e){e==null?t.removeAttribute(n):t.getAttribute(n)!==e&&t.setAttribute(n,e)}function wt(t){return t.dataset.svelteH}function Z(t){return Array.from(t.childNodes)}function tt(t){t.claim_info===void 0&&(t.claim_info={last_index:0,total_claimed:0})}function T(t,n,e,i,r=!1){tt(t);const o=(()=>{for(let c=t.claim_info.last_index;c=0;c--){const l=t[c];if(n(l)){const s=e(l);return s===void 0?t.splice(c,1):t[c]=s,r?s===void 0&&t.claim_info.last_index--:t.claim_info.last_index=c,l}}return i()})();return o.claim_order=t.claim_info.total_claimed,t.claim_info.total_claimed+=1,o}function nt(t,n,e,i){return T(t,r=>r.nodeName===n,r=>{const o=[];for(let c=0;cr.removeAttribute(c))},()=>i(n))}function Et(t,n,e){return nt(t,n,e,Y)}function et(t,n){return T(t,e=>e.nodeType===3,e=>{const i=""+n;if(e.data.startsWith(i)){if(e.data.length!==i.length)return e.splitText(i.length)}else e.data=i},()=>S(n),!0)}function Nt(t){return et(t," ")}function At(t,n){n=""+n,t.data!==n&&(t.data=n)}function Ct(t,n){t.value=n??""}function St(t,n,e,i){e==null?t.style.removeProperty(n):t.style.setProperty(n,e,"")}function jt(t,n,e){t.classList.toggle(n,!!e)}function it(t,n,{bubbles:e=!1,cancelable:i=!1}={}){return new CustomEvent(t,{detail:n,bubbles:e,cancelable:i})}function kt(t,n){return new t(n)}let y;function $(t){y=t}function d(){if(!y)throw new Error("Function called outside component initialization");return y}function Ot(t){d().$$.before_update.push(t)}function Pt(t){d().$$.on_mount.push(t)}function Bt(t){d().$$.after_update.push(t)}function Dt(t){d().$$.on_destroy.push(t)}function Lt(){const t=d();return(n,e,{cancelable:i=!1}={})=>{const r=t.$$.callbacks[n];if(r){const o=it(n,e,{cancelable:i});return r.slice().forEach(c=>{c.call(t,o)}),!o.defaultPrevented}return!0}}function Mt(t,n){return d().$$.context.set(t,n),n}function Tt(t){return d().$$.context.get(t)}function Ht(){return d().$$.context}function It(t){return d().$$.context.has(t)}const m=[],P=[];let p=[];const B=[],H=Promise.resolve();let A=!1;function I(){A||(A=!0,H.then(U))}function Ut(){return I(),H}function C(t){p.push(t)}const N=new Set;let h=0;function U(){if(h!==0)return;const t=y;do{try{for(;ht.indexOf(i)===-1?n.push(i):e.push(i)),e.forEach(i=>i()),p=n}const b=new Set;let _;function qt(){_={r:0,c:[],p:_}}function zt(){_.r||g(_.c),_=_.p}function st(t,n){t&&t.i&&(b.delete(t),t.i(n))}function Ft(t,n,e,i){if(t&&t.o){if(b.has(t))return;b.add(t),_.c.push(()=>{b.delete(t),i&&(e&&t.d(1),i())}),t.o(n)}else i&&i()}function Gt(t){t&&t.c()}function Jt(t,n){t&&t.l(n)}function ut(t,n,e){const{fragment:i,after_update:r}=t.$$;i&&i.m(n,e),C(()=>{const o=t.$$.on_mount.map(D).filter(L);t.$$.on_destroy?t.$$.on_destroy.push(...o):g(o),t.$$.on_mount=[]}),r.forEach(C)}function ot(t,n){const e=t.$$;e.fragment!==null&&(ct(e.after_update),g(e.on_destroy),e.fragment&&e.fragment.d(n),e.on_destroy=e.fragment=null,e.ctx=[])}function lt(t,n){t.$$.dirty[0]===-1&&(m.push(t),I(),t.$$.dirty.fill(0)),t.$$.dirty[n/31|0]|=1<{const k=j.length?j[0]:x;return u.ctx&&r(u.ctx[a],u.ctx[a]=k)&&(!u.skip_bound&&u.bound[a]&&u.bound[a](k),f&<(t,a)),x}):[],u.update(),f=!0,g(u.before_update),u.fragment=i?i(u.ctx):!1,n.target){if(n.hydrate){K();const a=Z(n.target);u.fragment&&u.fragment.l(a),a.forEach(X)}else u.fragment&&u.fragment.c();n.intro&&st(t.$$.fragment),ut(t,n.target,n.anchor),Q(),U()}$(s)}class Qt{constructor(){E(this,"$$");E(this,"$$set")}$destroy(){ot(this,1),this.$destroy=v}$on(n,e){if(!L(e))return v;const i=this.$$.callbacks[n]||(this.$$.callbacks[n]=[]);return i.push(e),()=>{const r=i.indexOf(e);r!==-1&&i.splice(r,1)}}$set(n){this.$$set&&!G(n)&&(this.$$.skip_bound=!0,this.$$set(n),this.$$.skip_bound=!1)}}export{Ut as A,kt as B,ot as C,Gt as D,ut as E,Jt as F,St as G,P as H,bt as I,_t as J,yt as K,mt as L,pt as M,ht as N,Ot as O,Lt as P,Ht as Q,Tt as R,Qt as S,It as T,Dt as U,Mt as V,At as a,$t as b,W as c,X as d,Et as e,Z as f,et as g,Nt as h,Kt as i,Y as j,gt as k,dt as l,jt as m,v as n,vt as o,wt as p,Ct as q,Ft as r,ft as s,S as t,st as u,qt as v,zt as w,xt as x,Bt as y,Pt as z}; diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/chunks/BEfn3whw.js b/testing-app/.svelte-kit/output/client/_app/immutable/chunks/BEfn3whw.js deleted file mode 100644 index 537528c7..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/chunks/BEfn3whw.js +++ /dev/null @@ -1 +0,0 @@ -import{s as e}from"./BwHU8bWb.js";const r=()=>{const s=e;return{page:{subscribe:s.page.subscribe},navigating:{subscribe:s.navigating.subscribe},updated:s.updated}},b={subscribe(s){return r().page.subscribe(s)}};export{b as p}; diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/chunks/BTqfQ_O8.js b/testing-app/.svelte-kit/output/client/_app/immutable/chunks/BTqfQ_O8.js deleted file mode 100644 index d3d2e220..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/chunks/BTqfQ_O8.js +++ /dev/null @@ -1 +0,0 @@ -import{n as f,s as l}from"./62BVG-0M.js";const e=[];function h(n,b=f){let i;const o=new Set;function r(t){if(l(n,t)&&(n=t,i)){const c=!e.length;for(const s of o)s[1](),e.push(s,n);if(c){for(let s=0;s{o.delete(s),o.size===0&&i&&(i(),i=null)}}return{set:r,update:u,subscribe:p}}export{h as w}; diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/chunks/BwHU8bWb.js b/testing-app/.svelte-kit/output/client/_app/immutable/chunks/BwHU8bWb.js deleted file mode 100644 index 01ea3374..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/chunks/BwHU8bWb.js +++ /dev/null @@ -1,3 +0,0 @@ -var _t=Object.defineProperty;var vt=(e,t,n)=>t in e?_t(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var I=(e,t,n)=>vt(e,typeof t!="symbol"?t+"":t,n);import{S as bt,y as St,O as At,P as kt,Q as Et,R as Rt,T as It,U as Ut,z as we,V as Tt,A as Lt}from"./62BVG-0M.js";import{w as Ae}from"./BTqfQ_O8.js";class Ye extends bt{constructor(n){if(!n||!n.target&&!n.$$inline)throw new Error("'target' is a required option");super();I(this,"$$prop_def");I(this,"$$events_def");I(this,"$$slot_def")}$destroy(){super.$destroy(),this.$destroy=()=>{console.warn("Component was already destroyed")}}$capture_state(){}$inject_state(){}}class $t extends Ye{}const xt=Object.freeze(Object.defineProperty({__proto__:null,SvelteComponent:Ye,SvelteComponentTyped:$t,afterUpdate:St,beforeUpdate:At,createEventDispatcher:kt,getAllContexts:Et,getContext:Rt,hasContext:It,onDestroy:Ut,onMount:we,setContext:Tt,tick:Lt},Symbol.toStringTag,{value:"Module"}));new URL("sveltekit-internal://");function Ct(e,t){return e==="/"||t==="ignore"?e:t==="never"?e.endsWith("/")?e.slice(0,-1):e:t==="always"&&!e.endsWith("/")?e+"/":e}function Pt(e){return e.split("%25").map(decodeURI).join("%25")}function Ot(e){for(const t in e)e[t]=decodeURIComponent(e[t]);return e}function pe({href:e}){return e.split("#")[0]}function Nt(e,t,n,r=!1){const a=new URL(e);Object.defineProperty(a,"searchParams",{value:new Proxy(a.searchParams,{get(i,o){if(o==="get"||o==="getAll"||o==="has")return l=>(n(l),i[o](l));t();const c=Reflect.get(i,o);return typeof c=="function"?c.bind(i):c}}),enumerable:!0,configurable:!0});const s=["href","pathname","search","toString","toJSON"];r&&s.push("hash");for(const i of s)Object.defineProperty(a,i,{get(){return t(),e[i]},enumerable:!0,configurable:!0});return a}function jt(...e){let t=5381;for(const n of e)if(typeof n=="string"){let r=n.length;for(;r;)t=t*33^n.charCodeAt(--r)}else if(ArrayBuffer.isView(n)){const r=new Uint8Array(n.buffer,n.byteOffset,n.byteLength);let a=r.length;for(;a;)t=t*33^r[--a]}else throw new TypeError("value must be a string or TypedArray");return(t>>>0).toString(36)}function Dt(e){const t=atob(e),n=new Uint8Array(t.length);for(let r=0;r((e instanceof Request?e.method:(t==null?void 0:t.method)||"GET")!=="GET"&&M.delete(ke(e)),Vt(e,t));const M=new Map;function Bt(e,t){const n=ke(e,t),r=document.querySelector(n);if(r!=null&&r.textContent){let{body:a,...s}=JSON.parse(r.textContent);const i=r.getAttribute("data-ttl");return i&&M.set(n,{body:a,init:s,ttl:1e3*Number(i)}),r.getAttribute("data-b64")!==null&&(a=Dt(a)),Promise.resolve(new Response(a,s))}return window.fetch(e,t)}function Ft(e,t,n){if(M.size>0){const r=ke(e,n),a=M.get(r);if(a){if(performance.now(){const a=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(r);if(a)return t.push({name:a[1],matcher:a[2],optional:!1,rest:!0,chained:!0}),"(?:/(.*))?";const s=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(r);if(s)return t.push({name:s[1],matcher:s[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!r)return;const i=r.split(/\[(.+?)\](?!\])/);return"/"+i.map((c,l)=>{if(l%2){if(c.startsWith("x+"))return ge(String.fromCharCode(parseInt(c.slice(2),16)));if(c.startsWith("u+"))return ge(String.fromCharCode(...c.slice(2).split("-").map(d=>parseInt(d,16))));const p=qt.exec(c),[,u,y,f,m]=p;return t.push({name:f,matcher:m,optional:!!u,rest:!!y,chained:y?l===1&&i[0]==="":!1}),y?"(.*?)":u?"([^/]*)?":"([^/]+?)"}return ge(c)}).join("")}).join("")}/?$`),params:t}}function Gt(e){return!/^\([^)]+\)$/.test(e)}function Ht(e){return e.slice(1).split("/").filter(Gt)}function Kt(e,t,n){const r={},a=e.slice(1),s=a.filter(o=>o!==void 0);let i=0;for(let o=0;op).join("/"),i=0),l===void 0){c.rest&&(r[c.name]="");continue}if(!c.matcher||n[c.matcher](l)){r[c.name]=l;const p=t[o+1],u=a[o+1];p&&!p.rest&&p.optional&&u&&c.chained&&(i=0),!p&&!u&&Object.keys(r).length===s.length&&(i=0);continue}if(c.optional&&c.chained){i++;continue}return}if(!i)return r}function ge(e){return e.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}function Wt({nodes:e,server_loads:t,dictionary:n,matchers:r}){const a=new Set(t);return Object.entries(n).map(([o,[c,l,p]])=>{const{pattern:u,params:y}=Mt(o),f={id:o,exec:m=>{const d=u.exec(m);if(d)return Kt(d,y,r)},errors:[1,...p||[]].map(m=>e[m]),layouts:[0,...l||[]].map(i),leaf:s(c)};return f.errors.length=f.layouts.length=Math.max(f.errors.length,f.layouts.length),f});function s(o){const c=o<0;return c&&(o=~o),[c,e[o]]}function i(o){return o===void 0?o:[a.has(o),e[o]]}}function ze(e,t=JSON.parse){try{return t(sessionStorage[e])}catch{}}function je(e,t,n=JSON.stringify){const r=n(t);try{sessionStorage[e]=r}catch{}}var Ke;const $=((Ke=globalThis.__sveltekit_y1wvqt)==null?void 0:Ke.base)??"";var We;const Yt=((We=globalThis.__sveltekit_y1wvqt)==null?void 0:We.assets)??$,zt="1751463575958",Je="sveltekit:snapshot",Xe="sveltekit:scroll",Qe="sveltekit:states",Jt="sveltekit:pageurl",V="sveltekit:history",W="sveltekit:navigation",O={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},se=location.origin;function Ze(e){if(e instanceof URL)return e;let t=document.baseURI;if(!t){const n=document.getElementsByTagName("base");t=n.length?n[0].href:document.URL}return new URL(e,t)}function ie(){return{x:pageXOffset,y:pageYOffset}}function D(e,t){return e.getAttribute(`data-sveltekit-${t}`)}const De={...O,"":O.hover};function et(e){let t=e.assignedSlot??e.parentNode;return(t==null?void 0:t.nodeType)===11&&(t=t.host),t}function tt(e,t){for(;e&&e!==t;){if(e.nodeName.toUpperCase()==="A"&&e.hasAttribute("href"))return e;e=et(e)}}function _e(e,t,n){let r;try{if(r=new URL(e instanceof SVGAElement?e.href.baseVal:e.href,document.baseURI),n&&r.hash.match(/^#[^/]/)){const o=location.hash.split("#")[1]||"/";r.hash=`#${o}${r.hash}`}}catch{}const a=e instanceof SVGAElement?e.target.baseVal:e.target,s=!r||!!a||ce(r,t,n)||(e.getAttribute("rel")||"").split(/\s+/).includes("external"),i=(r==null?void 0:r.origin)===se&&e.hasAttribute("download");return{url:r,external:s,target:a,download:i}}function Q(e){let t=null,n=null,r=null,a=null,s=null,i=null,o=e;for(;o&&o!==document.documentElement;)r===null&&(r=D(o,"preload-code")),a===null&&(a=D(o,"preload-data")),t===null&&(t=D(o,"keepfocus")),n===null&&(n=D(o,"noscroll")),s===null&&(s=D(o,"reload")),i===null&&(i=D(o,"replacestate")),o=et(o);function c(l){switch(l){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:De[r??"off"],preload_data:De[a??"off"],keepfocus:c(t),noscroll:c(n),reload:c(s),replace_state:c(i)}}function Ve(e){const t=Ae(e);let n=!0;function r(){n=!0,t.update(i=>i)}function a(i){n=!1,t.set(i)}function s(i){let o;return t.subscribe(c=>{(o===void 0||n&&c!==o)&&i(o=c)})}return{notify:r,set:a,subscribe:s}}const nt={v:()=>{}};function Xt(){const{set:e,subscribe:t}=Ae(!1);let n;async function r(){clearTimeout(n);try{const a=await fetch(`${Yt}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!a.ok)return!1;const i=(await a.json()).version!==zt;return i&&(e(!0),nt.v(),clearTimeout(n)),i}catch{return!1}}return{subscribe:t,check:r}}function ce(e,t,n){return e.origin!==se||!e.pathname.startsWith(t)?!0:n?!(e.pathname===t+"/"||e.pathname===t+"/index.html"||e.protocol==="file:"&&e.pathname.replace(/\/[^/]+\.html?$/,"")===t):!1}function jn(e){}function Be(e){const t=Zt(e),n=new ArrayBuffer(t.length),r=new DataView(n);for(let a=0;a>16),t+=String.fromCharCode((n&65280)>>8),t+=String.fromCharCode(n&255),n=r=0);return r===12?(n>>=4,t+=String.fromCharCode(n)):r===18&&(n>>=2,t+=String.fromCharCode((n&65280)>>8),t+=String.fromCharCode(n&255)),t}const en=-1,tn=-2,nn=-3,an=-4,rn=-5,on=-6;function sn(e,t){if(typeof e=="number")return a(e,!0);if(!Array.isArray(e)||e.length===0)throw new Error("Invalid input");const n=e,r=Array(n.length);function a(s,i=!1){if(s===en)return;if(s===nn)return NaN;if(s===an)return 1/0;if(s===rn)return-1/0;if(s===on)return-0;if(i)throw new Error("Invalid input");if(s in r)return r[s];const o=n[s];if(!o||typeof o!="object")r[s]=o;else if(Array.isArray(o))if(typeof o[0]=="string"){const c=o[0],l=t==null?void 0:t[c];if(l)return r[s]=l(a(o[1]));switch(c){case"Date":r[s]=new Date(o[1]);break;case"Set":const p=new Set;r[s]=p;for(let f=1;ft!=null)}class le{constructor(t,n){this.status=t,typeof n=="string"?this.body={message:n}:n?this.body=n:this.body={message:`Error: ${t}`}}toString(){return JSON.stringify(this.body)}}class Ee{constructor(t,n){this.status=t,this.location=n}}class Re extends Error{constructor(t,n,r){super(r),this.status=t,this.text=n}}const fn="x-sveltekit-invalidated",un="x-sveltekit-trailing-slash";function Z(e){return e instanceof le||e instanceof Re?e.status:500}function dn(e){return e instanceof Re?e.text:"Internal Error"}let U,Y,me;const hn=we.toString().includes("$$")||/function \w+\(\) \{\}/.test(we.toString());hn?(U={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL("https://example.com")},Y={current:null},me={current:!1}):(U=new class{constructor(){I(this,"data",$state.raw({}));I(this,"form",$state.raw(null));I(this,"error",$state.raw(null));I(this,"params",$state.raw({}));I(this,"route",$state.raw({id:null}));I(this,"state",$state.raw({}));I(this,"status",$state.raw(-1));I(this,"url",$state.raw(new URL("https://example.com")))}},Y=new class{constructor(){I(this,"current",$state.raw(null))}},me=new class{constructor(){I(this,"current",$state.raw(!1))}},nt.v=()=>me.current=!0);function pn(e){Object.assign(U,e)}const gn="/__data.json",mn=".html__data.json";function yn(e){return e.endsWith(".html")?e.replace(/\.html$/,mn):e.replace(/\/$/,"")+gn}const{tick:wn}=xt,_n=new Set(["icon","shortcut icon","apple-touch-icon"]),j=ze(Xe)??{},z=ze(Je)??{},C={url:Ve({}),page:Ve({}),navigating:Ae(null),updated:Xt()};function Ie(e){j[e]=ie()}function vn(e,t){let n=e+1;for(;j[n];)delete j[n],n+=1;for(n=t+1;z[n];)delete z[n],n+=1}function F(e){return location.href=e.href,new Promise(()=>{})}async function rt(){if("serviceWorker"in navigator){const e=await navigator.serviceWorker.getRegistration($||"/");e&&await e.update()}}function Fe(){}let Ue,ve,ee,x,be,S;const te=[],ne=[];let T=null;const X=new Map,ot=new Set,bn=new Set,G=new Set;let v={branch:[],error:null,url:null},Te=!1,ae=!1,qe=!0,J=!1,q=!1,st=!1,Le=!1,it,k,L,N;const H=new Set;async function Fn(e,t,n){var s,i,o,c;document.URL!==location.href&&(location.href=location.href),S=e,await((i=(s=e.hooks).init)==null?void 0:i.call(s)),Ue=Wt(e),x=document.documentElement,be=t,ve=e.nodes[0],ee=e.nodes[1],ve(),ee(),k=(o=history.state)==null?void 0:o[V],L=(c=history.state)==null?void 0:c[W],k||(k=L=Date.now(),history.replaceState({...history.state,[V]:k,[W]:L},""));const r=j[k];function a(){r&&(history.scrollRestoration="manual",scrollTo(r.x,r.y))}n?(a(),await $n(be,n)):(await K({type:"enter",url:Ze(S.hash?Cn(new URL(location.href)):location.href),replace_state:!0}),a()),Ln()}function Sn(){te.length=0,Le=!1}function ct(e){ne.some(t=>t==null?void 0:t.snapshot)&&(z[e]=ne.map(t=>{var n;return(n=t==null?void 0:t.snapshot)==null?void 0:n.capture()}))}function lt(e){var t;(t=z[e])==null||t.forEach((n,r)=>{var a,s;(s=(a=ne[r])==null?void 0:a.snapshot)==null||s.restore(n)})}function Me(){Ie(k),je(Xe,j),ct(L),je(Je,z)}async function ft(e,t,n,r){return K({type:"goto",url:Ze(e),keepfocus:t.keepFocus,noscroll:t.noScroll,replace_state:t.replaceState,state:t.state,redirect_count:n,nav_token:r,accept:()=>{t.invalidateAll&&(Le=!0),t.invalidate&&t.invalidate.forEach(Tn)}})}async function An(e){if(e.id!==(T==null?void 0:T.id)){const t={};H.add(t),T={id:e.id,token:t,promise:ht({...e,preload:t}).then(n=>(H.delete(t),n.type==="loaded"&&n.state.error&&(T=null),n))}}return T.promise}async function ye(e){var n;const t=(n=await ue(e,!1))==null?void 0:n.route;t&&await Promise.all([...t.layouts,t.leaf].map(r=>r==null?void 0:r[1]()))}function ut(e,t,n){var a;v=e.state;const r=document.querySelector("style[data-sveltekit]");if(r&&r.remove(),Object.assign(U,e.props.page),it=new S.root({target:t,props:{...e.props,stores:C,components:ne},hydrate:n,sync:!1}),lt(L),n){const s={from:null,to:{params:v.params,route:{id:((a=v.route)==null?void 0:a.id)??null},url:new URL(location.href)},willUnload:!1,type:"enter",complete:Promise.resolve()};G.forEach(i=>i(s))}ae=!0}function re({url:e,params:t,branch:n,status:r,error:a,route:s,form:i}){let o="never";if($&&(e.pathname===$||e.pathname===$+"/"))o="always";else for(const f of n)(f==null?void 0:f.slash)!==void 0&&(o=f.slash);e.pathname=Ct(e.pathname,o),e.search=e.search;const c={type:"loaded",state:{url:e,params:t,branch:n,error:a,route:s},props:{constructors:ln(n).map(f=>f.node.component),page:Pe(U)}};i!==void 0&&(c.props.form=i);let l={},p=!U,u=0;for(let f=0;f(o&&(c.route=!0),d[h])}),params:new Proxy(r,{get:(d,h)=>(o&&c.params.add(h),d[h])}),data:(s==null?void 0:s.data)??null,url:Nt(n,()=>{o&&(c.url=!0)},d=>{o&&c.search_params.add(d)},S.hash),async fetch(d,h){d instanceof Request&&(h={body:d.method==="GET"||d.method==="HEAD"?void 0:await d.blob(),cache:d.cache,credentials:d.credentials,headers:[...d.headers].length>0?d==null?void 0:d.headers:void 0,integrity:d.integrity,keepalive:d.keepalive,method:d.method,mode:d.mode,redirect:d.redirect,referrer:d.referrer,referrerPolicy:d.referrerPolicy,signal:d.signal,...h});const{resolved:_,promise:E}=dt(d,h,n);return o&&f(_.href),E},setHeaders:()=>{},depends:f,parent(){return o&&(c.parent=!0),t()},untrack(d){o=!1;try{return d()}finally{o=!0}}};i=await l.universal.load.call(null,m)??null}return{node:l,loader:e,server:s,universal:(u=l.universal)!=null&&u.load?{type:"data",data:i,uses:c}:null,data:i??(s==null?void 0:s.data)??null,slash:((y=l.universal)==null?void 0:y.trailingSlash)??(s==null?void 0:s.slash)}}function dt(e,t,n){let r=e instanceof Request?e.url:e;const a=new URL(r,n);a.origin===n.origin&&(r=a.href.slice(n.origin.length));const s=ae?Ft(r,a.href,t):Bt(r,t);return{resolved:a,promise:s}}function Ge(e,t,n,r,a,s){if(Le)return!0;if(!a)return!1;if(a.parent&&e||a.route&&t||a.url&&n)return!0;for(const i of a.search_params)if(r.has(i))return!0;for(const i of a.params)if(s[i]!==v.params[i])return!0;for(const i of a.dependencies)if(te.some(o=>o(new URL(i))))return!0;return!1}function xe(e,t){return(e==null?void 0:e.type)==="data"?e:(e==null?void 0:e.type)==="skip"?t??null:null}function kn(e,t){if(!e)return new Set(t.searchParams.keys());const n=new Set([...e.searchParams.keys(),...t.searchParams.keys()]);for(const r of n){const a=e.searchParams.getAll(r),s=t.searchParams.getAll(r);a.every(i=>s.includes(i))&&s.every(i=>a.includes(i))&&n.delete(r)}return n}function He({error:e,url:t,route:n,params:r}){return{type:"loaded",state:{error:e,url:t,route:n,params:r,branch:[]},props:{page:Pe(U),constructors:[]}}}async function ht({id:e,invalidating:t,url:n,params:r,route:a,preload:s}){if((T==null?void 0:T.id)===e)return H.delete(T.token),T.promise;const{errors:i,layouts:o,leaf:c}=a,l=[...o,c];i.forEach(g=>g==null?void 0:g().catch(()=>{})),l.forEach(g=>g==null?void 0:g[1]().catch(()=>{}));let p=null;const u=v.url?e!==oe(v.url):!1,y=v.route?a.id!==v.route.id:!1,f=kn(v.url,n);let m=!1;const d=l.map((g,w)=>{var P;const b=v.branch[w],A=!!(g!=null&&g[0])&&((b==null?void 0:b.loader)!==g[1]||Ge(m,y,u,f,(P=b.server)==null?void 0:P.uses,r));return A&&(m=!0),A});if(d.some(Boolean)){try{p=await mt(n,d)}catch(g){const w=await B(g,{url:n,params:r,route:{id:e}});return H.has(s)?He({error:w,url:n,params:r,route:a}):fe({status:Z(g),error:w,url:n,route:a})}if(p.type==="redirect")return p}const h=p==null?void 0:p.nodes;let _=!1;const E=l.map(async(g,w)=>{var de;if(!g)return;const b=v.branch[w],A=h==null?void 0:h[w];if((!A||A.type==="skip")&&g[1]===(b==null?void 0:b.loader)&&!Ge(_,y,u,f,(de=b.universal)==null?void 0:de.uses,r))return b;if(_=!0,(A==null?void 0:A.type)==="error")throw A;return $e({loader:g[1],url:n,params:r,route:a,parent:async()=>{var Ne;const Oe={};for(let he=0;he{});const R=[];for(let g=0;gPromise.resolve({}),server_data_node:xe(s)}),c={node:await ee(),loader:ee,universal:null,server:null,data:null};return re({url:n,params:a,branch:[o,c],status:e,error:t,route:null})}catch(o){if(o instanceof Ee)return ft(new URL(o.location,location.href),{},0);throw o}}async function Rn(e){const t=e.href;if(X.has(t))return X.get(t);let n;try{const r=(async()=>{let a=await S.hooks.reroute({url:new URL(e),fetch:async(s,i)=>dt(s,i,e).promise})??e;if(typeof a=="string"){const s=new URL(e);S.hash?s.hash=a:s.pathname=a,a=s}return a})();X.set(t,r),n=await r}catch{X.delete(t);return}return n}async function ue(e,t){if(e&&!ce(e,$,S.hash)){const n=await Rn(e);if(!n)return;const r=In(n);for(const a of Ue){const s=a.exec(r);if(s)return{id:oe(e),invalidating:t,route:a,params:Ot(s),url:e}}}}function In(e){return Pt(S.hash?e.hash.replace(/^#/,"").replace(/[?#].+/,""):e.pathname.slice($.length))||"/"}function oe(e){return(S.hash?e.hash.replace(/^#/,""):e.pathname)+e.search}function pt({url:e,type:t,intent:n,delta:r}){let a=!1;const s=Ce(v,n,e,t);r!==void 0&&(s.navigation.delta=r);const i={...s.navigation,cancel:()=>{a=!0,s.reject(new Error("navigation cancelled"))}};return J||ot.forEach(o=>o(i)),a?null:s}async function K({type:e,url:t,popped:n,keepfocus:r,noscroll:a,replace_state:s,state:i={},redirect_count:o=0,nav_token:c={},accept:l=Fe,block:p=Fe}){const u=N;N=c;const y=await ue(t,!1),f=e==="enter"?Ce(v,y,t,e):pt({url:t,type:e,delta:n==null?void 0:n.delta,intent:y});if(!f){p(),N===c&&(N=u);return}const m=k,d=L;l(),J=!0,ae&&f.navigation.type!=="enter"&&C.navigating.set(Y.current=f.navigation);let h=y&&await ht(y);if(!h){if(ce(t,$,S.hash))return await F(t);h=await gt(t,{id:null},await B(new Re(404,"Not Found",`Not found: ${t.pathname}`),{url:t,params:{},route:{id:null}}),404)}if(t=(y==null?void 0:y.url)||t,N!==c)return f.reject(new Error("navigation aborted")),!1;if(h.type==="redirect")if(o>=20)h=await fe({status:500,error:await B(new Error("Redirect loop"),{url:t,params:{},route:{id:null}}),url:t,route:{id:null}});else return await ft(new URL(h.location,t).href,{},o+1,c),!1;else h.props.page.status>=400&&await C.updated.check()&&(await rt(),await F(t));if(Sn(),Ie(m),ct(d),h.props.page.url.pathname!==t.pathname&&(t.pathname=h.props.page.url.pathname),i=n?n.state:i,!n){const g=s?0:1,w={[V]:k+=g,[W]:L+=g,[Qe]:i};(s?history.replaceState:history.pushState).call(history,w,"",t),s||vn(k,L)}if(T=null,h.props.page.state=i,ae){v=h.state,h.props.page&&(h.props.page.url=t);const g=(await Promise.all(Array.from(bn,w=>w(f.navigation)))).filter(w=>typeof w=="function");if(g.length>0){let w=function(){g.forEach(b=>{G.delete(b)})};g.push(w),g.forEach(b=>{G.add(b)})}it.$set(h.props),pn(h.props.page),st=!0}else ut(h,be,!1);const{activeElement:_}=document;await wn();const E=n?n.scroll:a?ie():null;if(qe){const g=t.hash&&document.getElementById(wt(t));E?scrollTo(E.x,E.y):g?g.scrollIntoView():scrollTo(0,0)}const R=document.activeElement!==_&&document.activeElement!==document.body;!r&&!R&&xn(t),qe=!0,h.props.page&&Object.assign(U,h.props.page),J=!1,e==="popstate"&<(L),f.fulfil(void 0),G.forEach(g=>g(f.navigation)),C.navigating.set(Y.current=null)}async function gt(e,t,n,r){return e.origin===se&&e.pathname===location.pathname&&!Te?await fe({status:r,error:n,url:e,route:t}):await F(e)}function Un(){let e,t,n;x.addEventListener("mousemove",o=>{const c=o.target;clearTimeout(e),e=setTimeout(()=>{s(c,O.hover)},20)});function r(o){o.defaultPrevented||s(o.composedPath()[0],O.tap)}x.addEventListener("mousedown",r),x.addEventListener("touchstart",r,{passive:!0});const a=new IntersectionObserver(o=>{for(const c of o)c.isIntersecting&&(ye(new URL(c.target.href)),a.unobserve(c.target))},{threshold:0});async function s(o,c){const l=tt(o,x),p=l===t&&c>=n;if(!l||p)return;const{url:u,external:y,download:f}=_e(l,$,S.hash);if(y||f)return;const m=Q(l),d=u&&oe(v.url)===oe(u);if(!(m.reload||d))if(c<=m.preload_data){t=l,n=O.tap;const h=await ue(u,!1);if(!h)return;An(h)}else c<=m.preload_code&&(t=l,n=c,ye(u))}function i(){a.disconnect();for(const o of x.querySelectorAll("a")){const{url:c,external:l,download:p}=_e(o,$,S.hash);if(l||p)continue;const u=Q(o);u.reload||(u.preload_code===O.viewport&&a.observe(o),u.preload_code===O.eager&&ye(c))}}G.add(i),i()}function B(e,t){if(e instanceof le)return e.body;const n=Z(e),r=dn(e);return S.hooks.handleError({error:e,event:t,status:n,message:r})??{message:r}}function Tn(e){if(typeof e=="function")te.push(e);else{const{href:t}=new URL(e,location.href);te.push(n=>n.href===t)}}function Ln(){var t;history.scrollRestoration="manual",addEventListener("beforeunload",n=>{let r=!1;if(Me(),!J){const a=Ce(v,void 0,null,"leave"),s={...a.navigation,cancel:()=>{r=!0,a.reject(new Error("navigation cancelled"))}};ot.forEach(i=>i(s))}r?(n.preventDefault(),n.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&Me()}),(t=navigator.connection)!=null&&t.saveData||Un(),x.addEventListener("click",async n=>{if(n.button||n.which!==1||n.metaKey||n.ctrlKey||n.shiftKey||n.altKey||n.defaultPrevented)return;const r=tt(n.composedPath()[0],x);if(!r)return;const{url:a,external:s,target:i,download:o}=_e(r,$,S.hash);if(!a)return;if(i==="_parent"||i==="_top"){if(window.parent!==window)return}else if(i&&i!=="_self")return;const c=Q(r);if(!(r instanceof SVGAElement)&&a.protocol!==location.protocol&&!(a.protocol==="https:"||a.protocol==="http:")||o)return;const[p,u]=(S.hash?a.hash.replace(/^#/,""):a.href).split("#"),y=p===pe(location);if(s||c.reload&&(!y||!u)){pt({url:a,type:"link"})?J=!0:n.preventDefault();return}if(u!==void 0&&y){const[,f]=v.url.href.split("#");if(f===u){if(n.preventDefault(),u===""||u==="top"&&r.ownerDocument.getElementById("top")===null)window.scrollTo({top:0});else{const m=r.ownerDocument.getElementById(decodeURIComponent(u));m&&(m.scrollIntoView(),m.focus())}return}if(q=!0,Ie(k),e(a),!c.replace_state)return;q=!1}n.preventDefault(),await new Promise(f=>{requestAnimationFrame(()=>{setTimeout(f,0)}),setTimeout(f,100)}),await K({type:"link",url:a,keepfocus:c.keepfocus,noscroll:c.noscroll,replace_state:c.replace_state??a.href===location.href})}),x.addEventListener("submit",n=>{if(n.defaultPrevented)return;const r=HTMLFormElement.prototype.cloneNode.call(n.target),a=n.submitter;if(((a==null?void 0:a.formTarget)||r.target)==="_blank"||((a==null?void 0:a.formMethod)||r.method)!=="get")return;const o=new URL((a==null?void 0:a.hasAttribute("formaction"))&&(a==null?void 0:a.formAction)||r.action);if(ce(o,$,!1))return;const c=n.target,l=Q(c);if(l.reload)return;n.preventDefault(),n.stopPropagation();const p=new FormData(c),u=a==null?void 0:a.getAttribute("name");u&&p.append(u,(a==null?void 0:a.getAttribute("value"))??""),o.search=new URLSearchParams(p).toString(),K({type:"form",url:o,keepfocus:l.keepfocus,noscroll:l.noscroll,replace_state:l.replace_state??o.href===location.href})}),addEventListener("popstate",async n=>{var r;if(!Se){if((r=n.state)!=null&&r[V]){const a=n.state[V];if(N={},a===k)return;const s=j[a],i=n.state[Qe]??{},o=new URL(n.state[Jt]??location.href),c=n.state[W],l=v.url?pe(location)===pe(v.url):!1;if(c===L&&(st||l)){i!==U.state&&(U.state=i),e(o),j[k]=ie(),s&&scrollTo(s.x,s.y),k=a;return}const u=a-k;await K({type:"popstate",url:o,popped:{state:i,scroll:s,delta:u},accept:()=>{k=a,L=c},block:()=>{history.go(-u)},nav_token:N})}else if(!q){const a=new URL(location.href);e(a),S.hash&&location.reload()}}}),addEventListener("hashchange",()=>{q&&(q=!1,history.replaceState({...history.state,[V]:++k,[W]:L},"",location.href))});for(const n of document.querySelectorAll("link"))_n.has(n.rel)&&(n.href=n.href);addEventListener("pageshow",n=>{n.persisted&&C.navigating.set(Y.current=null)});function e(n){v.url=U.url=n,C.page.set(Pe(U)),C.page.notify()}}async function $n(e,{status:t=200,error:n,node_ids:r,params:a,route:s,server_route:i,data:o,form:c}){Te=!0;const l=new URL(location.href);let p;({params:a={},route:s={id:null}}=await ue(l,!1)||{}),p=Ue.find(({id:f})=>f===s.id);let u,y=!0;try{const f=r.map(async(d,h)=>{const _=o[h];return _!=null&&_.uses&&(_.uses=yt(_.uses)),$e({loader:S.nodes[d],url:l,params:a,route:s,parent:async()=>{const E={};for(let R=0;Ri?"1":"0").join(""));const r=window.fetch,a=await r(n.href,{});if(!a.ok){let i;throw(s=a.headers.get("content-type"))!=null&&s.includes("application/json")?i=await a.json():a.status===404?i="Not Found":a.status===500&&(i="Internal Error"),new le(a.status,i)}return new Promise(async i=>{var y;const o=new Map,c=a.body.getReader(),l=new TextDecoder;function p(f){return sn(f,{...S.decoders,Promise:m=>new Promise((d,h)=>{o.set(m,{fulfil:d,reject:h})})})}let u="";for(;;){const{done:f,value:m}=await c.read();if(f&&!u)break;for(u+=!m&&u?` -`:l.decode(m,{stream:!0});;){const d=u.indexOf(` -`);if(d===-1)break;const h=JSON.parse(u.slice(0,d));if(u=u.slice(d+1),h.type==="redirect")return i(h);if(h.type==="data")(y=h.nodes)==null||y.forEach(_=>{(_==null?void 0:_.type)==="data"&&(_.uses=yt(_.uses),_.data=p(_.data))}),i(h);else if(h.type==="chunk"){const{id:_,data:E,error:R}=h,g=o.get(_);o.delete(_),R?g.reject(p(R)):g.fulfil(p(E))}}}})}function yt(e){return{dependencies:new Set((e==null?void 0:e.dependencies)??[]),params:new Set((e==null?void 0:e.params)??[]),parent:!!(e!=null&&e.parent),route:!!(e!=null&&e.route),url:!!(e!=null&&e.url),search_params:new Set((e==null?void 0:e.search_params)??[])}}let Se=!1;function xn(e){const t=document.querySelector("[autofocus]");if(t)t.focus();else{const n=wt(e);if(n&&document.getElementById(n)){const{x:a,y:s}=ie();setTimeout(()=>{const i=history.state;Se=!0,location.replace(`#${n}`),S.hash&&location.replace(e.hash),history.replaceState(i,"",e.hash),scrollTo(a,s),Se=!1})}else{const a=document.body,s=a.getAttribute("tabindex");a.tabIndex=-1,a.focus({preventScroll:!0,focusVisible:!1}),s!==null?a.setAttribute("tabindex",s):a.removeAttribute("tabindex")}const r=getSelection();if(r&&r.type!=="None"){const a=[];for(let s=0;s{if(r.rangeCount===a.length){for(let s=0;s{a=p,s=u});return i.catch(()=>{}),{navigation:{from:{params:e.params,route:{id:((c=e.route)==null?void 0:c.id)??null},url:e.url},to:n&&{params:(t==null?void 0:t.params)??null,route:{id:((l=t==null?void 0:t.route)==null?void 0:l.id)??null},url:n},willUnload:!t,type:r,complete:i},fulfil:a,reject:s}}function Pe(e){return{data:e.data,error:e.error,form:e.form,params:e.params,route:e.route,state:e.state,status:e.status,url:e.url}}function Cn(e){const t=new URL(e);return t.hash=decodeURIComponent(e.hash),t}function wt(e){let t;if(S.hash){const[,,n]=e.hash.split("#",3);t=n??""}else t=e.hash.slice(1);return decodeURIComponent(t)}export{Fn as a,jn as l,C as s}; diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/chunks/D3xHD3xP.js b/testing-app/.svelte-kit/output/client/_app/immutable/chunks/D3xHD3xP.js deleted file mode 100644 index 7b81b705..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/chunks/D3xHD3xP.js +++ /dev/null @@ -1 +0,0 @@ -var Ju=Object.defineProperty;var Ua=r=>{throw TypeError(r)};var Ku=(r,t,e)=>t in r?Ju(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e;var w=(r,t,e)=>Ku(r,typeof t!="symbol"?t+"":t,e),uo=(r,t,e)=>t.has(r)||Ua("Cannot "+e);var u=(r,t,e)=>(uo(r,t,"read from private field"),e?e.call(r):t.get(r)),A=(r,t,e)=>t.has(r)?Ua("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(r):t.set(r,e),d=(r,t,e,n)=>(uo(r,t,"write to private field"),n?n.call(r,e):t.set(r,e),e),C=(r,t,e)=>(uo(r,t,"access private method"),e);var Ps=(r,t,e,n)=>({set _(s){d(r,t,s,e)},get _(){return u(r,t,n)}});import{w as _u}from"./BTqfQ_O8.js";const Zu="6.14.4";function ju(r,t,e){const n=t.split("|").map(i=>i.trim());for(let i=0;iPromise.resolve(r[n])))).reduce((n,s,i)=>(n[t[i]]=s,n),{})}function L(r,t,e){for(let n in t){let s=t[n];const i=e?e[n]:null;i&&ju(s,i,n),Object.defineProperty(r,n,{enumerable:!0,value:s,writable:!1})}}function yr(r,t){if(r==null)return"null";if(t==null&&(t=new Set),typeof r=="object"){if(t.has(r))return"[Circular]";t.add(r)}if(Array.isArray(r))return"[ "+r.map(e=>yr(e,t)).join(", ")+" ]";if(r instanceof Uint8Array){const e="0123456789abcdef";let n="0x";for(let s=0;s>4],n+=e[r[s]&15];return n}if(typeof r=="object"&&typeof r.toJSON=="function")return yr(r.toJSON(),t);switch(typeof r){case"boolean":case"number":case"symbol":return r.toString();case"bigint":return BigInt(r).toString();case"string":return JSON.stringify(r);case"object":{const e=Object.keys(r);return e.sort(),"{ "+e.map(n=>`${yr(n,t)}: ${yr(r[n],t)}`).join(", ")+" }"}}return"[ COULD NOT SERIALIZE ]"}function mt(r,t){return r&&r.code===t}function ca(r){return mt(r,"CALL_EXCEPTION")}function tt(r,t,e){let n=r;{const i=[];if(e){if("message"in e||"code"in e||"name"in e)throw new Error(`value will overwrite populated values: ${yr(e)}`);for(const o in e){if(o==="shortMessage")continue;const a=e[o];i.push(o+"="+yr(a))}}i.push(`code=${t}`),i.push(`version=${Zu}`),i.length&&(r+=" ("+i.join(", ")+")")}let s;switch(t){case"INVALID_ARGUMENT":s=new TypeError(r);break;case"NUMERIC_FAULT":case"BUFFER_OVERRUN":s=new RangeError(r);break;default:s=new Error(r)}return L(s,{code:t}),e&&Object.assign(s,e),s.shortMessage==null&&L(s,{shortMessage:n}),s}function P(r,t,e,n){if(!r)throw tt(t,e,n)}function g(r,t,e,n){P(r,t,"INVALID_ARGUMENT",{argument:e,value:n})}function jc(r,t,e){e==null&&(e=""),e&&(e=": "+e),P(r>=t,"missing argument"+e,"MISSING_ARGUMENT",{count:r,expectedCount:t}),P(r<=t,"too many arguments"+e,"UNEXPECTED_ARGUMENT",{count:r,expectedCount:t})}["NFD","NFC","NFKD","NFKC"].reduce((r,t)=>{try{if("test".normalize(t)!=="test")throw new Error("bad");if(t==="NFD"&&"é".normalize("NFD")!=="é")throw new Error("broken");r.push(t)}catch{}return r},[]);function ji(r,t,e){if(e==null&&(e=""),r!==t){let n=e,s="new";e&&(n+=".",s+=" "+e),P(!1,`private constructor; use ${n}from* methods`,"UNSUPPORTED_OPERATION",{operation:s})}}function Wc(r,t,e){if(r instanceof Uint8Array)return e?new Uint8Array(r):r;if(typeof r=="string"&&r.match(/^0x(?:[0-9a-f][0-9a-f])*$/i)){const n=new Uint8Array((r.length-2)/2);let s=2;for(let i=0;i>4]+La[s&15]}return e}function rt(r){return"0x"+r.map(t=>I(t).substring(2)).join("")}function xr(r){return q(r,!0)?(r.length-2)/2:G(r).length}function nt(r,t,e){const n=G(r);return e!=null&&e>n.length&&P(!1,"cannot slice beyond data bounds","BUFFER_OVERRUN",{buffer:n,length:n.length,offset:e}),I(n.slice(t??0,e??n.length))}function Yc(r,t,e){const n=G(r);P(t>=n.length,"padding exceeds data length","BUFFER_OVERRUN",{buffer:new Uint8Array(n),length:t,offset:t+1});const s=new Uint8Array(t);return s.fill(0),e?s.set(n,t-n.length):s.set(n,0),I(s)}function Qe(r,t){return Yc(r,t,!0)}function Wu(r,t){return Yc(r,t,!1)}const Wi=BigInt(0),ie=BigInt(1),wr=9007199254740991;function Yu(r,t){const e=Yi(r,"value"),n=BigInt(Q(t,"width"));if(P(e>>n===Wi,"overflow","NUMERIC_FAULT",{operation:"fromTwos",fault:"overflow",value:r}),e>>n-ie){const s=(ie<=-wr&&r<=wr,"overflow",t||"value",r),BigInt(r);case"string":try{if(r==="")throw new Error("empty string");return r[0]==="-"&&r[1]!=="-"?-BigInt(r.substring(1)):BigInt(r)}catch(e){g(!1,`invalid BigNumberish string: ${e.message}`,t||"value",r)}}g(!1,"invalid BigNumberish value",t||"value",r)}function Yi(r,t){const e=k(r,t);return P(e>=Wi,"unsigned value cannot be negative","NUMERIC_FAULT",{fault:"overflow",operation:"getUint",value:r}),e}const Fa="0123456789abcdef";function ua(r){if(r instanceof Uint8Array){let t="0x0";for(const e of r)t+=Fa[e>>4],t+=Fa[e&15];return BigInt(t)}return k(r)}function Q(r,t){switch(typeof r){case"bigint":return g(r>=-wr&&r<=wr,"overflow",t||"value",r),Number(r);case"number":return g(Number.isInteger(r),"underflow",t||"value",r),g(r>=-wr&&r<=wr,"overflow",t||"value",r),r;case"string":try{if(r==="")throw new Error("empty string");return Q(BigInt(r),t)}catch(e){g(!1,`invalid numeric string: ${e.message}`,t||"value",r)}}g(!1,"invalid numeric value",t||"value",r)}function Xu(r){return Q(ua(r))}function yn(r,t){let n=Yi(r,"value").toString(16);if(t==null)n.length%2&&(n="0"+n);else{const s=Q(t,"width");for(P(s*2>=n.length,`value exceeds width (${s} bytes)`,"NUMERIC_FAULT",{operation:"toBeHex",fault:"overflow",value:r});n.length>6===2;o++)i++;return i}return r==="OVERRUN"?e.length-t-1:0}function nf(r,t,e,n,s){return r==="OVERLONG"?(g(typeof s=="number","invalid bad code point for replacement","badCodepoint",s),n.push(s),0):(n.push(65533),$c(r,t,e))}const rf=Object.freeze({error:ef,ignore:$c,replace:nf});function sf(r,t){t==null&&(t=rf.error);const e=G(r,"bytes"),n=[];let s=0;for(;s>7)){n.push(i);continue}let o=null,a=null;if((i&224)===192)o=1,a=127;else if((i&240)===224)o=2,a=2047;else if((i&248)===240)o=3,a=65535;else{(i&192)===128?s+=t("UNEXPECTED_CONTINUE",s-1,e,n):s+=t("BAD_PREFIX",s-1,e,n);continue}if(s-1+o>=e.length){s+=t("OVERRUN",s-1,e,n);continue}let c=i&(1<<8-o-1)-1;for(let l=0;l1114111){s+=t("OUT_OF_RANGE",s-1-o,e,n,c);continue}if(c>=55296&&c<=57343){s+=t("UTF16_SURROGATE",s-1-o,e,n,c);continue}if(c<=a){s+=t("OVERLONG",s-1-o,e,n,c);continue}n.push(c)}}return n}function Ge(r,t){g(typeof r=="string","invalid string value","str",r);let e=[];for(let n=0;n>6|192),e.push(s&63|128);else if((s&64512)==55296){n++;const i=r.charCodeAt(n);g(n>18|240),e.push(o>>12&63|128),e.push(o>>6&63|128),e.push(o&63|128)}else e.push(s>>12|224),e.push(s>>6&63|128),e.push(s&63|128)}return new Uint8Array(e)}function of(r){return r.map(t=>t<=65535?String.fromCharCode(t):(t-=65536,String.fromCharCode((t>>10&1023)+55296,(t&1023)+56320))).join("")}function vi(r,t){return of(sf(r,t))}function tl(r){async function t(e,n){P(n==null||!n.cancelled,"request cancelled before sending","CANCELLED");const s=e.url.split(":")[0].toLowerCase();P(s==="http"||s==="https",`unsupported protocol ${s}`,"UNSUPPORTED_OPERATION",{info:{protocol:s},operation:"request"}),P(s==="https"||!e.credentials||e.allowInsecureAuthentication,"insecure authorized connections unsupported","UNSUPPORTED_OPERATION",{operation:"request"});let i=null;const o=new AbortController,a=setTimeout(()=>{i=tt("request timeout","TIMEOUT"),o.abort()},e.timeout);n&&n.addListener(()=>{i=tt("request cancelled","CANCELLED"),o.abort()});const c=Object.assign({},r,{method:e.method,headers:new Headers(Array.from(e)),body:e.body||void 0,signal:o.signal});let l;try{l=await fetch(e.url,c)}catch(m){throw clearTimeout(a),i||m}clearTimeout(a);const f={};l.headers.forEach((m,b)=>{f[b.toLowerCase()]=m});const h=await l.arrayBuffer(),p=h==null?null:new Uint8Array(h);return{statusCode:l.status,statusMessage:l.statusText,headers:f,body:p}}return t}const af=12,cf=250;let Ga=tl();const lf=new RegExp("^data:([^;:]*)?(;base64)?,(.*)$","i"),uf=new RegExp("^ipfs://(ipfs/)?(.*)$","i");let fo=!1;async function el(r,t){try{const e=r.match(lf);if(!e)throw new Error("invalid data");return new mn(200,"OK",{"content-type":e[1]||"text/plain"},e[2]?$u(e[3]):hf(e[3]))}catch{return new mn(599,"BAD REQUEST (invalid data: URI)",{},null,new wn(r))}}function nl(r){async function t(e,n){try{const s=e.match(uf);if(!s)throw new Error("invalid link");return new wn(`${r}${s[2]}`)}catch{return new mn(599,"BAD REQUEST (invalid IPFS URI)",{},null,new wn(e))}}return t}const li={data:el,ipfs:nl("https://gateway.ipfs.io/ipfs/")},rl=new WeakMap;var Sn,qe;class ff{constructor(t){A(this,Sn);A(this,qe);d(this,Sn,[]),d(this,qe,!1),rl.set(t,()=>{if(!u(this,qe)){d(this,qe,!0);for(const e of u(this,Sn))setTimeout(()=>{e()},0);d(this,Sn,[])}})}addListener(t){P(!u(this,qe),"singal already cancelled","UNSUPPORTED_OPERATION",{operation:"fetchCancelSignal.addCancelListener"}),u(this,Sn).push(t)}get cancelled(){return u(this,qe)}checkSignal(){P(!this.cancelled,"cancelled","CANCELLED",{})}}Sn=new WeakMap,qe=new WeakMap;function ui(r){if(r==null)throw new Error("missing signal; should not happen");return r.checkSignal(),r}var Cr,Ir,$t,Ce,Or,vr,ut,Mt,Ie,Un,Ln,Fn,fe,te,$e,Dn,Is;const Qi=class Qi{constructor(t){A(this,Dn);A(this,Cr);A(this,Ir);A(this,$t);A(this,Ce);A(this,Or);A(this,vr);A(this,ut);A(this,Mt);A(this,Ie);A(this,Un);A(this,Ln);A(this,Fn);A(this,fe);A(this,te);A(this,$e);d(this,vr,String(t)),d(this,Cr,!1),d(this,Ir,!0),d(this,$t,{}),d(this,Ce,""),d(this,Or,3e5),d(this,te,{slotInterval:cf,maxAttempts:af}),d(this,$e,null)}get url(){return u(this,vr)}set url(t){d(this,vr,String(t))}get body(){return u(this,ut)==null?null:new Uint8Array(u(this,ut))}set body(t){if(t==null)d(this,ut,void 0),d(this,Mt,void 0);else if(typeof t=="string")d(this,ut,Ge(t)),d(this,Mt,"text/plain");else if(t instanceof Uint8Array)d(this,ut,t),d(this,Mt,"application/octet-stream");else if(typeof t=="object")d(this,ut,Ge(JSON.stringify(t))),d(this,Mt,"application/json");else throw new Error("invalid body")}hasBody(){return u(this,ut)!=null}get method(){return u(this,Ce)?u(this,Ce):this.hasBody()?"POST":"GET"}set method(t){t==null&&(t=""),d(this,Ce,String(t).toUpperCase())}get headers(){const t=Object.assign({},u(this,$t));return u(this,Ie)&&(t.authorization=`Basic ${tf(Ge(u(this,Ie)))}`),this.allowGzip&&(t["accept-encoding"]="gzip"),t["content-type"]==null&&u(this,Mt)&&(t["content-type"]=u(this,Mt)),this.body&&(t["content-length"]=String(this.body.length)),t}getHeader(t){return this.headers[t.toLowerCase()]}setHeader(t,e){u(this,$t)[String(t).toLowerCase()]=String(e)}clearHeaders(){d(this,$t,{})}[Symbol.iterator](){const t=this.headers,e=Object.keys(t);let n=0;return{next:()=>{if(n=0,"timeout must be non-zero","timeout",t),d(this,Or,t)}get preflightFunc(){return u(this,Un)||null}set preflightFunc(t){d(this,Un,t)}get processFunc(){return u(this,Ln)||null}set processFunc(t){d(this,Ln,t)}get retryFunc(){return u(this,Fn)||null}set retryFunc(t){d(this,Fn,t)}get getUrlFunc(){return u(this,$e)||Ga}set getUrlFunc(t){d(this,$e,t)}toString(){return``}setThrottleParams(t){t.slotInterval!=null&&(u(this,te).slotInterval=t.slotInterval),t.maxAttempts!=null&&(u(this,te).maxAttempts=t.maxAttempts)}send(){return P(u(this,fe)==null,"request already sent","UNSUPPORTED_OPERATION",{operation:"fetchRequest.send"}),d(this,fe,new ff(this)),C(this,Dn,Is).call(this,0,Ha()+this.timeout,0,this,new mn(0,"",{},null,this))}cancel(){P(u(this,fe)!=null,"request has not been sent","UNSUPPORTED_OPERATION",{operation:"fetchRequest.cancel"});const t=rl.get(this);if(!t)throw new Error("missing signal; should not happen");t()}redirect(t){const e=this.url.split(":")[0].toLowerCase(),n=t.split(":")[0].toLowerCase();P(this.method==="GET"&&(e!=="https"||n!=="http")&&t.match(/^https?:/),"unsupported redirect","UNSUPPORTED_OPERATION",{operation:`redirect(${this.method} ${JSON.stringify(this.url)} => ${JSON.stringify(t)})`});const s=new Qi(t);return s.method="GET",s.allowGzip=this.allowGzip,s.timeout=this.timeout,d(s,$t,Object.assign({},u(this,$t))),u(this,ut)&&d(s,ut,new Uint8Array(u(this,ut))),d(s,Mt,u(this,Mt)),s}clone(){const t=new Qi(this.url);return d(t,Ce,u(this,Ce)),u(this,ut)&&d(t,ut,u(this,ut)),d(t,Mt,u(this,Mt)),d(t,$t,Object.assign({},u(this,$t))),d(t,Ie,u(this,Ie)),this.allowGzip&&(t.allowGzip=!0),t.timeout=this.timeout,this.allowInsecureAuthentication&&(t.allowInsecureAuthentication=!0),d(t,Un,u(this,Un)),d(t,Ln,u(this,Ln)),d(t,Fn,u(this,Fn)),d(t,te,Object.assign({},u(this,te))),d(t,$e,u(this,$e)),t}static lockConfig(){fo=!0}static getGateway(t){return li[t.toLowerCase()]||null}static registerGateway(t,e){if(t=t.toLowerCase(),t==="http"||t==="https")throw new Error(`cannot intercept ${t}; use registerGetUrl`);if(fo)throw new Error("gateways locked");li[t]=e}static registerGetUrl(t){if(fo)throw new Error("gateways locked");Ga=t}static createGetUrlFunc(t){return tl(t)}static createDataGateway(){return el}static createIpfsGatewayFunc(t){return nl(t)}};Cr=new WeakMap,Ir=new WeakMap,$t=new WeakMap,Ce=new WeakMap,Or=new WeakMap,vr=new WeakMap,ut=new WeakMap,Mt=new WeakMap,Ie=new WeakMap,Un=new WeakMap,Ln=new WeakMap,Fn=new WeakMap,fe=new WeakMap,te=new WeakMap,$e=new WeakMap,Dn=new WeakSet,Is=async function(t,e,n,s,i){var f,h,p;if(t>=u(this,te).maxAttempts)return i.makeServerError("exceeded maximum retry limit");P(Ha()<=e,"timeout","TIMEOUT",{operation:"request.send",reason:"timeout",request:s}),n>0&&await df(n);let o=this.clone();const a=(o.url.split(":")[0]||"").toLowerCase();if(a in li){const m=await li[a](o.url,ui(u(s,fe)));if(m instanceof mn){let b=m;if(this.processFunc){ui(u(s,fe));try{b=await this.processFunc(o,b)}catch(y){(y.throttle==null||typeof y.stall!="number")&&b.makeServerError("error in post-processing function",y).assertOk()}}return b}o=m}this.preflightFunc&&(o=await this.preflightFunc(o));const c=await this.getUrlFunc(o,ui(u(s,fe)));let l=new mn(c.statusCode,c.statusMessage,c.headers,c.body,s);if(l.statusCode===301||l.statusCode===302){try{const m=l.headers.location||"";return C(f=o.redirect(m),Dn,Is).call(f,t+1,e,0,s,l)}catch{}return l}else if(l.statusCode===429&&(this.retryFunc==null||await this.retryFunc(o,l,t))){const m=l.headers["retry-after"];let b=u(this,te).slotInterval*Math.trunc(Math.random()*Math.pow(2,t));return typeof m=="string"&&m.match(/^[1-9][0-9]*$/)&&(b=parseInt(m)),C(h=o.clone(),Dn,Is).call(h,t+1,e,b,s,l)}if(this.processFunc){ui(u(s,fe));try{l=await this.processFunc(o,l)}catch(m){(m.throttle==null||typeof m.stall!="number")&&l.makeServerError("error in post-processing function",m).assertOk();let b=u(this,te).slotInterval*Math.trunc(Math.random()*Math.pow(2,t));return m.stall>=0&&(b=m.stall),C(p=o.clone(),Dn,Is).call(p,t+1,e,b,s,l)}}return l};let wn=Qi;var _s,Zs,js,Gt,kr,Mn;const Oa=class Oa{constructor(t,e,n,s,i){A(this,_s);A(this,Zs);A(this,js);A(this,Gt);A(this,kr);A(this,Mn);d(this,_s,t),d(this,Zs,e),d(this,js,Object.keys(n).reduce((o,a)=>(o[a.toLowerCase()]=String(n[a]),o),{})),d(this,Gt,s==null?null:new Uint8Array(s)),d(this,kr,i||null),d(this,Mn,{message:""})}toString(){return``}get statusCode(){return u(this,_s)}get statusMessage(){return u(this,Zs)}get headers(){return Object.assign({},u(this,js))}get body(){return u(this,Gt)==null?null:new Uint8Array(u(this,Gt))}get bodyText(){try{return u(this,Gt)==null?"":vi(u(this,Gt))}catch{P(!1,"response body is not valid UTF-8 data","UNSUPPORTED_OPERATION",{operation:"bodyText",info:{response:this}})}}get bodyJson(){try{return JSON.parse(this.bodyText)}catch{P(!1,"response body is not valid JSON","UNSUPPORTED_OPERATION",{operation:"bodyJson",info:{response:this}})}}[Symbol.iterator](){const t=this.headers,e=Object.keys(t);let n=0;return{next:()=>{if(n=0,"invalid stall timeout","stall",e);const n=new Error(t||"throttling requests");throw L(n,{stall:e,throttle:!0}),n}getHeader(t){return this.headers[t.toLowerCase()]}hasBody(){return u(this,Gt)!=null}get request(){return u(this,kr)}ok(){return u(this,Mn).message===""&&this.statusCode>=200&&this.statusCode<300}assertOk(){if(this.ok())return;let{message:t,error:e}=u(this,Mn);t===""&&(t=`server response ${this.statusCode} ${this.statusMessage}`);let n=null;this.request&&(n=this.request.url);let s=null;try{u(this,Gt)&&(s=vi(u(this,Gt)))}catch{}P(!1,t,"SERVER_ERROR",{request:this.request||"unknown request",response:this,error:e,info:{requestUrl:n,responseBody:s,responseStatus:`${this.statusCode} ${this.statusMessage}`}})}};_s=new WeakMap,Zs=new WeakMap,js=new WeakMap,Gt=new WeakMap,kr=new WeakMap,Mn=new WeakMap;let mn=Oa;function Ha(){return new Date().getTime()}function hf(r){return Ge(r.replace(/%([0-9a-f][0-9a-f])/gi,(t,e)=>String.fromCharCode(parseInt(e,16))))}function df(r){return new Promise(t=>setTimeout(t,r))}function pf(r){let t=r.toString(16);for(;t.length<2;)t="0"+t;return"0x"+t}function Qa(r,t,e){let n=0;for(let s=0;s{P(n<=r.length,"data short segment too short","BUFFER_OVERRUN",{buffer:r,length:r.length,offset:n})};if(r[t]>=248){const n=r[t]-247;e(t+1+n);const s=Qa(r,t+1,n);return e(t+1+n+s),Va(r,t,t+1+n,n+s)}else if(r[t]>=192){const n=r[t]-192;return e(t+1+n),Va(r,t,t+1,n)}else if(r[t]>=184){const n=r[t]-183;e(t+1+n);const s=Qa(r,t+1,n);e(t+1+n+s);const i=I(r.slice(t+1+n,t+1+n+s));return{consumed:1+n+s,result:i}}else if(r[t]>=128){const n=r[t]-128;e(t+1+n);const s=I(r.slice(t+1,t+1+n));return{consumed:1+n,result:s}}return{consumed:1,result:pf(r[t])}}function si(r){const t=G(r,"data"),e=sl(t,0);return g(e.consumed===t.length,"unexpected junk after rlp payload","data",r),e.result}function za(r){const t=[];for(;r;)t.unshift(r&255),r>>=8;return t}function il(r){if(Array.isArray(r)){let n=[];if(r.forEach(function(i){n=n.concat(il(i))}),n.length<=55)return n.unshift(192+n.length),n;const s=za(n.length);return s.unshift(247+s.length),s.concat(n)}const t=Array.prototype.slice.call(G(r,"object"));if(t.length===1&&t[0]<=127)return t;if(t.length<=55)return t.unshift(128+t.length),t;const e=za(t.length);return e.unshift(183+e.length),e.concat(t)}const Ja="0123456789abcdef";function An(r){let t="0x";for(const e of il(r))t+=Ja[e>>4],t+=Ja[e&15];return t}const Bt=32,vo=new Uint8Array(Bt),gf=["then"],fi={},ol=new WeakMap;function Bn(r){return ol.get(r)}function Ka(r,t){ol.set(r,t)}function Ns(r,t){const e=new Error(`deferred error during ABI decoding triggered accessing ${r}`);throw e.error=t,e}function ko(r,t,e){return r.indexOf(null)>=0?t.map((n,s)=>n instanceof hs?ko(Bn(n),n,e):n):r.reduce((n,s,i)=>{let o=t.getValue(s);return s in n||(e&&o instanceof hs&&(o=ko(Bn(o),o,e)),n[s]=o),n},{})}var Rr;const Ar=class Ar extends Array{constructor(...e){const n=e[0];let s=e[1],i=(e[2]||[]).slice(),o=!0;n!==fi&&(s=e,i=[],o=!1);super(s.length);A(this,Rr);s.forEach((l,f)=>{this[f]=l});const a=i.reduce((l,f)=>(typeof f=="string"&&l.set(f,(l.get(f)||0)+1),l),new Map);if(Ka(this,Object.freeze(s.map((l,f)=>{const h=i[f];return h!=null&&a.get(h)===1?h:null}))),d(this,Rr,[]),u(this,Rr)==null&&u(this,Rr),!o)return;Object.freeze(this);const c=new Proxy(this,{get:(l,f,h)=>{if(typeof f=="string"){if(f.match(/^[0-9]+$/)){const m=Q(f,"%index");if(m<0||m>=this.length)throw new RangeError("out of result range");const b=l[m];return b instanceof Error&&Ns(`index ${m}`,b),b}if(gf.indexOf(f)>=0)return Reflect.get(l,f,h);const p=l[f];if(p instanceof Function)return function(...m){return p.apply(this===h?l:this,m)};if(!(f in l))return l.getValue.apply(this===h?l:this,[f])}return Reflect.get(l,f,h)}});return Ka(c,Bn(this)),c}toArray(e){const n=[];return this.forEach((s,i)=>{s instanceof Error&&Ns(`index ${i}`,s),e&&s instanceof Ar&&(s=s.toArray(e)),n.push(s)}),n}toObject(e){const n=Bn(this);return n.reduce((s,i,o)=>(P(i!=null,`value at index ${o} unnamed`,"UNSUPPORTED_OPERATION",{operation:"toObject()"}),ko(n,this,e)),{})}slice(e,n){e==null&&(e=0),e<0&&(e+=this.length,e<0&&(e=0)),n==null&&(n=this.length),n<0&&(n+=this.length,n<0&&(n=0)),n>this.length&&(n=this.length);const s=Bn(this),i=[],o=[];for(let a=e;a{u(this,Oe)[t]=_a(e)}}}Oe=new WeakMap,Gn=new WeakMap,Tr=new WeakSet,wi=function(t){return u(this,Oe).push(t),d(this,Gn,u(this,Gn)+t.length),t.length};var Ot,Ht,Hn,Qn,tn,ir,So,al;const va=class va{constructor(t,e,n){A(this,ir);w(this,"allowLoose");A(this,Ot);A(this,Ht);A(this,Hn);A(this,Qn);A(this,tn);L(this,{allowLoose:!!e}),d(this,Ot,Nt(t)),d(this,Hn,0),d(this,Qn,null),d(this,tn,n??1024),d(this,Ht,0)}get data(){return I(u(this,Ot))}get dataLength(){return u(this,Ot).length}get consumed(){return u(this,Ht)}get bytes(){return new Uint8Array(u(this,Ot))}subReader(t){const e=new va(u(this,Ot).slice(u(this,Ht)+t),this.allowLoose,u(this,tn));return d(e,Qn,this),e}readBytes(t,e){let n=C(this,ir,al).call(this,0,t,!!e);return C(this,ir,So).call(this,t),d(this,Ht,u(this,Ht)+n.length),n.slice(0,t)}readValue(){return ua(this.readBytes(Bt))}readIndex(){return Xu(this.readBytes(Bt))}};Ot=new WeakMap,Ht=new WeakMap,Hn=new WeakMap,Qn=new WeakMap,tn=new WeakMap,ir=new WeakSet,So=function(t){var e;if(u(this,Qn))return C(e=u(this,Qn),ir,So).call(e,t);d(this,Hn,u(this,Hn)+t),P(u(this,tn)<1||u(this,Hn)<=u(this,tn)*this.dataLength,`compressed ABI data exceeds inflation ratio of ${u(this,tn)} ( see: https://github.com/ethers-io/ethers.js/issues/4537 )`,"BUFFER_OVERRUN",{buffer:Nt(u(this,Ot)),offset:u(this,Ht),length:t,info:{bytesRead:u(this,Hn),dataLength:this.dataLength}})},al=function(t,e,n){let s=Math.ceil(e/Bt)*Bt;return u(this,Ht)+s>u(this,Ot).length&&(this.allowLoose&&n&&u(this,Ht)+e<=u(this,Ot).length?s=e:P(!1,"data out-of-bounds","BUFFER_OVERRUN",{buffer:Nt(u(this,Ot)),length:u(this,Ot).length,offset:u(this,Ht)+s})),u(this,Ot).slice(u(this,Ht),u(this,Ht)+s)};let To=va;function ki(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`Wrong positive integer: ${r}`)}function fa(r,...t){if(!(r instanceof Uint8Array))throw new Error("Expected Uint8Array");if(t.length>0&&!t.includes(r.length))throw new Error(`Expected Uint8Array of length ${t}, not of length=${r.length}`)}function mf(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");ki(r.outputLen),ki(r.blockLen)}function ds(r,t=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(t&&r.finished)throw new Error("Hash#digest() has already been called")}function cl(r,t){fa(r);const e=t.outputLen;if(r.lengthr instanceof Uint8Array,yf=r=>new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4)),po=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),le=(r,t)=>r<<32-t|r>>>t,wf=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!wf)throw new Error("Non little-endian hardware is not supported");function Af(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function Xi(r){if(typeof r=="string"&&(r=Af(r)),!ll(r))throw new Error(`expected Uint8Array, got ${typeof r}`);return r}function bf(...r){const t=new Uint8Array(r.reduce((n,s)=>n+s.length,0));let e=0;return r.forEach(n=>{if(!ll(n))throw new Error("Uint8Array expected");t.set(n,e),e+=n.length}),t}class ha{clone(){return this._cloneInto()}}function da(r){const t=n=>r().update(Xi(n)).digest(),e=r();return t.outputLen=e.outputLen,t.blockLen=e.blockLen,t.create=()=>r(),t}function Ef(r=32){if(ho&&typeof ho.getRandomValues=="function")return ho.getRandomValues(new Uint8Array(r));throw new Error("crypto.getRandomValues must be defined")}class ul extends ha{constructor(t,e){super(),this.finished=!1,this.destroyed=!1,mf(t);const n=Xi(e);if(this.iHash=t.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;const s=this.blockLen,i=new Uint8Array(s);i.set(n.length>s?t.create().update(n).digest():n);for(let o=0;onew ul(r,t).update(e).digest();fl.create=(r,t)=>new ul(r,t);function xf(r,t,e,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(t,e,n);const s=BigInt(32),i=BigInt(4294967295),o=Number(e>>s&i),a=Number(e&i),c=n?4:0,l=n?0:4;r.setUint32(t+c,o,n),r.setUint32(t+l,a,n)}class hl extends ha{constructor(t,e,n,s){super(),this.blockLen=t,this.outputLen=e,this.padOffset=n,this.isLE=s,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(t),this.view=po(this.buffer)}update(t){ds(this);const{view:e,buffer:n,blockLen:s}=this;t=Xi(t);const i=t.length;for(let o=0;os-o&&(this.process(n,0),o=0);for(let h=o;hf.length)throw new Error("_sha2: outputLen bigger than state");for(let h=0;hr&t^~r&e,Nf=(r,t,e)=>r&t^r&e^t&e,Bf=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Ze=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),je=new Uint32Array(64);class Cf extends hl{constructor(){super(64,32,8,!1),this.A=Ze[0]|0,this.B=Ze[1]|0,this.C=Ze[2]|0,this.D=Ze[3]|0,this.E=Ze[4]|0,this.F=Ze[5]|0,this.G=Ze[6]|0,this.H=Ze[7]|0}get(){const{A:t,B:e,C:n,D:s,E:i,F:o,G:a,H:c}=this;return[t,e,n,s,i,o,a,c]}set(t,e,n,s,i,o,a,c){this.A=t|0,this.B=e|0,this.C=n|0,this.D=s|0,this.E=i|0,this.F=o|0,this.G=a|0,this.H=c|0}process(t,e){for(let h=0;h<16;h++,e+=4)je[h]=t.getUint32(e,!1);for(let h=16;h<64;h++){const p=je[h-15],m=je[h-2],b=le(p,7)^le(p,18)^p>>>3,y=le(m,17)^le(m,19)^m>>>10;je[h]=y+je[h-7]+b+je[h-16]|0}let{A:n,B:s,C:i,D:o,E:a,F:c,G:l,H:f}=this;for(let h=0;h<64;h++){const p=le(a,6)^le(a,11)^le(a,25),m=f+p+Pf(a,c,l)+Bf[h]+je[h]|0,y=(le(n,2)^le(n,13)^le(n,22))+Nf(n,s,i)|0;f=l,l=c,c=a,a=o+m|0,o=i,i=s,s=n,n=m+y|0}n=n+this.A|0,s=s+this.B|0,i=i+this.C|0,o=o+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,f=f+this.H|0,this.set(n,s,i,o,a,c,l,f)}roundClean(){je.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}}const dl=da(()=>new Cf),hi=BigInt(2**32-1),Uo=BigInt(32);function pl(r,t=!1){return t?{h:Number(r&hi),l:Number(r>>Uo&hi)}:{h:Number(r>>Uo&hi)|0,l:Number(r&hi)|0}}function gl(r,t=!1){let e=new Uint32Array(r.length),n=new Uint32Array(r.length);for(let s=0;sBigInt(r>>>0)<>>0),Of=(r,t,e)=>r>>>e,vf=(r,t,e)=>r<<32-e|t>>>e,kf=(r,t,e)=>r>>>e|t<<32-e,Rf=(r,t,e)=>r<<32-e|t>>>e,Tf=(r,t,e)=>r<<64-e|t>>>e-32,Sf=(r,t,e)=>r>>>e-32|t<<64-e,Uf=(r,t)=>t,Lf=(r,t)=>r,ml=(r,t,e)=>r<>>32-e,yl=(r,t,e)=>t<>>32-e,wl=(r,t,e)=>t<>>64-e,Al=(r,t,e)=>r<>>64-e;function Ff(r,t,e,n){const s=(t>>>0)+(n>>>0);return{h:r+e+(s/2**32|0)|0,l:s|0}}const Df=(r,t,e)=>(r>>>0)+(t>>>0)+(e>>>0),Mf=(r,t,e,n)=>t+e+n+(r/2**32|0)|0,Gf=(r,t,e,n)=>(r>>>0)+(t>>>0)+(e>>>0)+(n>>>0),Hf=(r,t,e,n,s)=>t+e+n+s+(r/2**32|0)|0,Qf=(r,t,e,n,s)=>(r>>>0)+(t>>>0)+(e>>>0)+(n>>>0)+(s>>>0),Vf=(r,t,e,n,s,i)=>t+e+n+s+i+(r/2**32|0)|0,M={fromBig:pl,split:gl,toBig:If,shrSH:Of,shrSL:vf,rotrSH:kf,rotrSL:Rf,rotrBH:Tf,rotrBL:Sf,rotr32H:Uf,rotr32L:Lf,rotlSH:ml,rotlSL:yl,rotlBH:wl,rotlBL:Al,add:Ff,add3L:Df,add3H:Mf,add4L:Gf,add4H:Hf,add5H:Vf,add5L:Qf},[zf,Jf]=M.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(r=>BigInt(r))),We=new Uint32Array(80),Ye=new Uint32Array(80);class Kf extends hl{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){const{Ah:t,Al:e,Bh:n,Bl:s,Ch:i,Cl:o,Dh:a,Dl:c,Eh:l,El:f,Fh:h,Fl:p,Gh:m,Gl:b,Hh:y,Hl:E}=this;return[t,e,n,s,i,o,a,c,l,f,h,p,m,b,y,E]}set(t,e,n,s,i,o,a,c,l,f,h,p,m,b,y,E){this.Ah=t|0,this.Al=e|0,this.Bh=n|0,this.Bl=s|0,this.Ch=i|0,this.Cl=o|0,this.Dh=a|0,this.Dl=c|0,this.Eh=l|0,this.El=f|0,this.Fh=h|0,this.Fl=p|0,this.Gh=m|0,this.Gl=b|0,this.Hh=y|0,this.Hl=E|0}process(t,e){for(let N=0;N<16;N++,e+=4)We[N]=t.getUint32(e),Ye[N]=t.getUint32(e+=4);for(let N=16;N<80;N++){const D=We[N-15]|0,U=Ye[N-15]|0,R=M.rotrSH(D,U,1)^M.rotrSH(D,U,8)^M.shrSH(D,U,7),F=M.rotrSL(D,U,1)^M.rotrSL(D,U,8)^M.shrSL(D,U,7),S=We[N-2]|0,j=Ye[N-2]|0,K=M.rotrSH(S,j,19)^M.rotrBH(S,j,61)^M.shrSH(S,j,6),_=M.rotrSL(S,j,19)^M.rotrBL(S,j,61)^M.shrSL(S,j,6),ct=M.add4L(F,_,Ye[N-7],Ye[N-16]),dt=M.add4H(ct,R,K,We[N-7],We[N-16]);We[N]=dt|0,Ye[N]=ct|0}let{Ah:n,Al:s,Bh:i,Bl:o,Ch:a,Cl:c,Dh:l,Dl:f,Eh:h,El:p,Fh:m,Fl:b,Gh:y,Gl:E,Hh:x,Hl:O}=this;for(let N=0;N<80;N++){const D=M.rotrSH(h,p,14)^M.rotrSH(h,p,18)^M.rotrBH(h,p,41),U=M.rotrSL(h,p,14)^M.rotrSL(h,p,18)^M.rotrBL(h,p,41),R=h&m^~h&y,F=p&b^~p&E,S=M.add5L(O,U,F,Jf[N],Ye[N]),j=M.add5H(S,x,D,R,zf[N],We[N]),K=S|0,_=M.rotrSH(n,s,28)^M.rotrBH(n,s,34)^M.rotrBH(n,s,39),ct=M.rotrSL(n,s,28)^M.rotrBL(n,s,34)^M.rotrBL(n,s,39),dt=n&i^n&a^i&a,ce=s&o^s&c^o&c;x=y|0,O=E|0,y=m|0,E=b|0,m=h|0,b=p|0,{h,l:p}=M.add(l|0,f|0,j|0,K|0),l=a|0,f=c|0,a=i|0,c=o|0,i=n|0,o=s|0;const B=M.add3L(K,ct,ce);n=M.add3H(B,j,_,dt),s=B|0}({h:n,l:s}=M.add(this.Ah|0,this.Al|0,n|0,s|0)),{h:i,l:o}=M.add(this.Bh|0,this.Bl|0,i|0,o|0),{h:a,l:c}=M.add(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:f}=M.add(this.Dh|0,this.Dl|0,l|0,f|0),{h,l:p}=M.add(this.Eh|0,this.El|0,h|0,p|0),{h:m,l:b}=M.add(this.Fh|0,this.Fl|0,m|0,b|0),{h:y,l:E}=M.add(this.Gh|0,this.Gl|0,y|0,E|0),{h:x,l:O}=M.add(this.Hh|0,this.Hl|0,x|0,O|0),this.set(n,s,i,o,a,c,l,f,h,p,m,b,y,E,x,O)}roundClean(){We.fill(0),Ye.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}}const _f=da(()=>new Kf);function Zf(){if(typeof self<"u")return self;if(typeof window<"u")return window;if(typeof global<"u")return global;throw new Error("unable to locate global object")}const Za=Zf();Za.crypto||Za.msCrypto;function jf(r){switch(r){case"sha256":return dl.create();case"sha512":return _f.create()}g(!1,"invalid hashing algorithm name","algorithm",r)}const[bl,El,xl]=[[],[],[]],Wf=BigInt(0),Bs=BigInt(1),Yf=BigInt(2),Xf=BigInt(7),qf=BigInt(256),$f=BigInt(113);for(let r=0,t=Bs,e=1,n=0;r<24;r++){[e,n]=[n,(2*e+3*n)%5],bl.push(2*(5*n+e)),El.push((r+1)*(r+2)/2%64);let s=Wf;for(let i=0;i<7;i++)t=(t<>Xf)*$f)%qf,t&Yf&&(s^=Bs<<(Bs<e>32?wl(r,t,e):ml(r,t,e),Wa=(r,t,e)=>e>32?Al(r,t,e):yl(r,t,e);function nh(r,t=24){const e=new Uint32Array(10);for(let n=24-t;n<24;n++){for(let o=0;o<10;o++)e[o]=r[o]^r[o+10]^r[o+20]^r[o+30]^r[o+40];for(let o=0;o<10;o+=2){const a=(o+8)%10,c=(o+2)%10,l=e[c],f=e[c+1],h=ja(l,f,1)^e[a],p=Wa(l,f,1)^e[a+1];for(let m=0;m<50;m+=10)r[o+m]^=h,r[o+m+1]^=p}let s=r[2],i=r[3];for(let o=0;o<24;o++){const a=El[o],c=ja(s,i,a),l=Wa(s,i,a),f=bl[o];s=r[f],i=r[f+1],r[f]=c,r[f+1]=l}for(let o=0;o<50;o+=10){for(let a=0;a<10;a++)e[a]=r[o+a];for(let a=0;a<10;a++)r[o+a]^=~e[(a+2)%10]&e[(a+4)%10]}r[0]^=th[n],r[1]^=eh[n]}e.fill(0)}class pa extends ha{constructor(t,e,n,s=!1,i=24){if(super(),this.blockLen=t,this.suffix=e,this.outputLen=n,this.enableXOF=s,this.rounds=i,this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,ki(n),0>=this.blockLen||this.blockLen>=200)throw new Error("Sha3 supports only keccak-f1600 function");this.state=new Uint8Array(200),this.state32=yf(this.state)}keccak(){nh(this.state32,this.rounds),this.posOut=0,this.pos=0}update(t){ds(this);const{blockLen:e,state:n}=this;t=Xi(t);const s=t.length;for(let i=0;i=n&&this.keccak();const o=Math.min(n-this.posOut,i-s);t.set(e.subarray(this.posOut,this.posOut+o),s),this.posOut+=o,s+=o}return t}xofInto(t){if(!this.enableXOF)throw new Error("XOF is not possible for this instance");return this.writeInto(t)}xof(t){return ki(t),this.xofInto(new Uint8Array(t))}digestInto(t){if(cl(t,this),this.finished)throw new Error("digest() was already called");return this.writeInto(t),this.destroy(),t}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,this.state.fill(0)}_cloneInto(t){const{blockLen:e,suffix:n,outputLen:s,rounds:i,enableXOF:o}=this;return t||(t=new pa(e,n,s,o,i)),t.state32.set(this.state32),t.pos=this.pos,t.posOut=this.posOut,t.finished=this.finished,t.rounds=i,t.suffix=n,t.outputLen=s,t.enableXOF=o,t.destroyed=this.destroyed,t}}const rh=(r,t,e)=>da(()=>new pa(t,r,e)),sh=rh(1,136,256/8);let Pl=!1;const Nl=function(r){return sh(r)};let Bl=Nl;function ot(r){const t=G(r,"data");return I(Bl(t))}ot._=Nl;ot.lock=function(){Pl=!0};ot.register=function(r){if(Pl)throw new TypeError("keccak256 is locked");Bl=r};Object.freeze(ot);const Cl=function(r){return jf("sha256").update(r).digest()};let Il=Cl,Ol=!1;function bs(r){const t=G(r,"data");return I(Il(t))}bs._=Cl;bs.lock=function(){Ol=!0};bs.register=function(r){if(Ol)throw new Error("sha256 is locked");Il=r};Object.freeze(bs);Object.freeze(bs);/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const vl=BigInt(0),qi=BigInt(1),ih=BigInt(2),$i=r=>r instanceof Uint8Array,oh=Array.from({length:256},(r,t)=>t.toString(16).padStart(2,"0"));function ps(r){if(!$i(r))throw new Error("Uint8Array expected");let t="";for(let e=0;en+s.length,0));let e=0;return r.forEach(n=>{if(!$i(n))throw new Error("Uint8Array expected");t.set(n,e),e+=n.length}),t}function ch(r,t){if(r.length!==t.length)return!1;for(let e=0;evl;r>>=qi,t+=1);return t}function fh(r,t){return r>>BigInt(t)&qi}const hh=(r,t,e)=>r|(e?qi:vl)<(ih<new Uint8Array(r),Ya=r=>Uint8Array.from(r);function Rl(r,t,e){if(typeof r!="number"||r<2)throw new Error("hashLen must be a number");if(typeof t!="number"||t<2)throw new Error("qByteLen must be a number");if(typeof e!="function")throw new Error("hmacFn must be a function");let n=go(r),s=go(r),i=0;const o=()=>{n.fill(1),s.fill(0),i=0},a=(...h)=>e(s,n,...h),c=(h=go())=>{s=a(Ya([0]),h),n=a(),h.length!==0&&(s=a(Ya([1]),h),n=a())},l=()=>{if(i++>=1e3)throw new Error("drbg: tried 1000 values");let h=0;const p=[];for(;h{o(),c(h);let m;for(;!(m=p(l()));)c();return o(),m}}const dh={bigint:r=>typeof r=="bigint",function:r=>typeof r=="function",boolean:r=>typeof r=="boolean",string:r=>typeof r=="string",stringOrUint8Array:r=>typeof r=="string"||r instanceof Uint8Array,isSafeInteger:r=>Number.isSafeInteger(r),array:r=>Array.isArray(r),field:(r,t)=>t.Fp.isValid(r),hash:r=>typeof r=="function"&&Number.isSafeInteger(r.outputLen)};function ii(r,t,e={}){const n=(s,i,o)=>{const a=dh[i];if(typeof a!="function")throw new Error(`Invalid validator "${i}", expected function`);const c=r[s];if(!(o&&c===void 0)&&!a(c,r))throw new Error(`Invalid param ${String(s)}=${c} (${typeof c}), expected ${i}`)};for(const[s,i]of Object.entries(t))n(s,i,!1);for(const[s,i]of Object.entries(e))n(s,i,!0);return r}const ph=Object.freeze(Object.defineProperty({__proto__:null,bitGet:fh,bitLen:uh,bitMask:wa,bitSet:hh,bytesToHex:ps,bytesToNumberBE:$n,bytesToNumberLE:ma,concatBytes:Ls,createHmacDrbg:Rl,ensureBytes:qt,equalBytes:ch,hexToBytes:gs,hexToNumber:ga,numberToBytesBE:ms,numberToBytesLE:ya,numberToHexUnpadded:kl,numberToVarBytesBE:ah,utf8ToBytes:lh,validateObject:ii},Symbol.toStringTag,{value:"Module"}));/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const ht=BigInt(0),it=BigInt(1),Cn=BigInt(2),gh=BigInt(3),Lo=BigInt(4),Xa=BigInt(5),qa=BigInt(8);BigInt(9);BigInt(16);function kt(r,t){const e=r%t;return e>=ht?e:t+e}function mh(r,t,e){if(e<=ht||t 0");if(e===it)return ht;let n=it;for(;t>ht;)t&it&&(n=n*r%e),r=r*r%e,t>>=it;return n}function Vt(r,t,e){let n=r;for(;t-- >ht;)n*=n,n%=e;return n}function Fo(r,t){if(r===ht||t<=ht)throw new Error(`invert: expected positive integers, got n=${r} mod=${t}`);let e=kt(r,t),n=t,s=ht,i=it;for(;e!==ht;){const a=n/e,c=n%e,l=s-i*a;n=e,e=c,s=i,i=l}if(n!==it)throw new Error("invert: does not exist");return kt(s,t)}function yh(r){const t=(r-it)/Cn;let e,n,s;for(e=r-it,n=0;e%Cn===ht;e/=Cn,n++);for(s=Cn;s(n[s]="function",n),t);return ii(r,e)}function Eh(r,t,e){if(e 0");if(e===ht)return r.ONE;if(e===it)return t;let n=r.ONE,s=t;for(;e>ht;)e&it&&(n=r.mul(n,s)),s=r.sqr(s),e>>=it;return n}function xh(r,t){const e=new Array(t.length),n=t.reduce((i,o,a)=>r.is0(o)?i:(e[a]=i,r.mul(i,o)),r.ONE),s=r.inv(n);return t.reduceRight((i,o,a)=>r.is0(o)?i:(e[a]=r.mul(i,e[a]),r.mul(i,o)),s),e}function Tl(r,t){const e=t!==void 0?t:r.toString(2).length,n=Math.ceil(e/8);return{nBitLength:e,nByteLength:n}}function Ph(r,t,e=!1,n={}){if(r<=ht)throw new Error(`Expected Field ORDER > 0, got ${r}`);const{nBitLength:s,nByteLength:i}=Tl(r,t);if(i>2048)throw new Error("Field lengths over 2048 bytes are not supported");const o=wh(r),a=Object.freeze({ORDER:r,BITS:s,BYTES:i,MASK:wa(s),ZERO:ht,ONE:it,create:c=>kt(c,r),isValid:c=>{if(typeof c!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof c}`);return ht<=c&&cc===ht,isOdd:c=>(c&it)===it,neg:c=>kt(-c,r),eql:(c,l)=>c===l,sqr:c=>kt(c*c,r),add:(c,l)=>kt(c+l,r),sub:(c,l)=>kt(c-l,r),mul:(c,l)=>kt(c*l,r),pow:(c,l)=>Eh(a,c,l),div:(c,l)=>kt(c*Fo(l,r),r),sqrN:c=>c*c,addN:(c,l)=>c+l,subN:(c,l)=>c-l,mulN:(c,l)=>c*l,inv:c=>Fo(c,r),sqrt:n.sqrt||(c=>o(a,c)),invertBatch:c=>xh(a,c),cmov:(c,l,f)=>f?l:c,toBytes:c=>e?ya(c,i):ms(c,i),fromBytes:c=>{if(c.length!==i)throw new Error(`Fp.fromBytes: expected ${i}, got ${c.length}`);return e?ma(c):$n(c)}});return Object.freeze(a)}function Sl(r){if(typeof r!="bigint")throw new Error("field order must be bigint");const t=r.toString(2).length;return Math.ceil(t/8)}function Ul(r){const t=Sl(r);return t+Math.ceil(t/2)}function Nh(r,t,e=!1){const n=r.length,s=Sl(t),i=Ul(t);if(n<16||n1024)throw new Error(`expected ${i}-1024 bytes of input, got ${n}`);const o=e?$n(r):ma(r),a=kt(o,t-it)+it;return e?ya(a,s):ms(a,s)}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const Bh=BigInt(0),mo=BigInt(1);function Ch(r,t){const e=(s,i)=>{const o=i.negate();return s?o:i},n=s=>{const i=Math.ceil(t/s)+1,o=2**(s-1);return{windows:i,windowSize:o}};return{constTimeNegate:e,unsafeLadder(s,i){let o=r.ZERO,a=s;for(;i>Bh;)i&mo&&(o=o.add(a)),a=a.double(),i>>=mo;return o},precomputeWindow(s,i){const{windows:o,windowSize:a}=n(i),c=[];let l=s,f=l;for(let h=0;h>=m,E>c&&(E-=p,o+=mo);const x=y,O=y+Math.abs(E)-1,N=b%2!==0,D=E<0;E===0?f=f.add(e(N,i[x])):l=l.add(e(D,i[O]))}return{p:l,f}},wNAFCached(s,i,o,a){const c=s._WINDOW_SIZE||1;let l=i.get(s);return l||(l=this.precomputeWindow(s,c),c!==1&&i.set(s,a(l))),this.wNAF(c,l,o)}}}function Ll(r){return bh(r.Fp),ii(r,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...Tl(r.n,r.nBitLength),...r,p:r.Fp.ORDER})}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function Ih(r){const t=Ll(r);ii(t,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});const{endo:e,Fp:n,a:s}=t;if(e){if(!n.eql(s,n.ZERO))throw new Error("Endomorphism can only be defined for Koblitz curves that have a=0");if(typeof e!="object"||typeof e.beta!="bigint"||typeof e.splitScalar!="function")throw new Error("Expected endomorphism with beta: bigint and splitScalar: function")}return Object.freeze({...t})}const{bytesToNumberBE:Oh,hexToBytes:vh}=ph,kn={Err:class extends Error{constructor(t=""){super(t)}},_parseInt(r){const{Err:t}=kn;if(r.length<2||r[0]!==2)throw new t("Invalid signature integer tag");const e=r[1],n=r.subarray(2,e+2);if(!e||n.length!==e)throw new t("Invalid signature integer: wrong length");if(n[0]&128)throw new t("Invalid signature integer: negative");if(n[0]===0&&!(n[1]&128))throw new t("Invalid signature integer: unnecessary leading zero");return{d:Oh(n),l:r.subarray(e+2)}},toSig(r){const{Err:t}=kn,e=typeof r=="string"?vh(r):r;if(!(e instanceof Uint8Array))throw new Error("ui8a expected");let n=e.length;if(n<2||e[0]!=48)throw new t("Invalid signature tag");if(e[1]!==n-2)throw new t("Invalid signature: incorrect length");const{d:s,l:i}=kn._parseInt(e.subarray(2)),{d:o,l:a}=kn._parseInt(i);if(a.length)throw new t("Invalid signature: left bytes after parsing");return{r:s,s:o}},hexFromSig(r){const t=l=>Number.parseInt(l[0],16)&8?"00"+l:l,e=l=>{const f=l.toString(16);return f.length&1?`0${f}`:f},n=t(e(r.s)),s=t(e(r.r)),i=n.length/2,o=s.length/2,a=e(i),c=e(o);return`30${e(o+i+4)}02${c}${s}02${a}${n}`}},De=BigInt(0),Wt=BigInt(1);BigInt(2);const $a=BigInt(3);BigInt(4);function kh(r){const t=Ih(r),{Fp:e}=t,n=t.toBytes||((b,y,E)=>{const x=y.toAffine();return Ls(Uint8Array.from([4]),e.toBytes(x.x),e.toBytes(x.y))}),s=t.fromBytes||(b=>{const y=b.subarray(1),E=e.fromBytes(y.subarray(0,e.BYTES)),x=e.fromBytes(y.subarray(e.BYTES,2*e.BYTES));return{x:E,y:x}});function i(b){const{a:y,b:E}=t,x=e.sqr(b),O=e.mul(x,b);return e.add(e.add(O,e.mul(b,y)),E)}if(!e.eql(e.sqr(t.Gy),i(t.Gx)))throw new Error("bad generator point: equation left != right");function o(b){return typeof b=="bigint"&&Dee.eql(N,e.ZERO);return O(E)&&O(x)?h.ZERO:new h(E,x,e.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(y){const E=e.invertBatch(y.map(x=>x.pz));return y.map((x,O)=>x.toAffine(E[O])).map(h.fromAffine)}static fromHex(y){const E=h.fromAffine(s(qt("pointHex",y)));return E.assertValidity(),E}static fromPrivateKey(y){return h.BASE.multiply(c(y))}_setWindowSize(y){this._WINDOW_SIZE=y,l.delete(this)}assertValidity(){if(this.is0()){if(t.allowInfinityPoint&&!e.is0(this.py))return;throw new Error("bad point: ZERO")}const{x:y,y:E}=this.toAffine();if(!e.isValid(y)||!e.isValid(E))throw new Error("bad point: x or y not FE");const x=e.sqr(E),O=i(y);if(!e.eql(x,O))throw new Error("bad point: equation left != right");if(!this.isTorsionFree())throw new Error("bad point: not in prime-order subgroup")}hasEvenY(){const{y}=this.toAffine();if(e.isOdd)return!e.isOdd(y);throw new Error("Field doesn't support isOdd")}equals(y){f(y);const{px:E,py:x,pz:O}=this,{px:N,py:D,pz:U}=y,R=e.eql(e.mul(E,U),e.mul(N,O)),F=e.eql(e.mul(x,U),e.mul(D,O));return R&&F}negate(){return new h(this.px,e.neg(this.py),this.pz)}double(){const{a:y,b:E}=t,x=e.mul(E,$a),{px:O,py:N,pz:D}=this;let U=e.ZERO,R=e.ZERO,F=e.ZERO,S=e.mul(O,O),j=e.mul(N,N),K=e.mul(D,D),_=e.mul(O,N);return _=e.add(_,_),F=e.mul(O,D),F=e.add(F,F),U=e.mul(y,F),R=e.mul(x,K),R=e.add(U,R),U=e.sub(j,R),R=e.add(j,R),R=e.mul(U,R),U=e.mul(_,U),F=e.mul(x,F),K=e.mul(y,K),_=e.sub(S,K),_=e.mul(y,_),_=e.add(_,F),F=e.add(S,S),S=e.add(F,S),S=e.add(S,K),S=e.mul(S,_),R=e.add(R,S),K=e.mul(N,D),K=e.add(K,K),S=e.mul(K,_),U=e.sub(U,S),F=e.mul(K,j),F=e.add(F,F),F=e.add(F,F),new h(U,R,F)}add(y){f(y);const{px:E,py:x,pz:O}=this,{px:N,py:D,pz:U}=y;let R=e.ZERO,F=e.ZERO,S=e.ZERO;const j=t.a,K=e.mul(t.b,$a);let _=e.mul(E,N),ct=e.mul(x,D),dt=e.mul(O,U),ce=e.add(E,x),B=e.add(N,D);ce=e.mul(ce,B),B=e.add(_,ct),ce=e.sub(ce,B),B=e.add(E,O);let T=e.add(N,U);return B=e.mul(B,T),T=e.add(_,dt),B=e.sub(B,T),T=e.add(x,O),R=e.add(D,U),T=e.mul(T,R),R=e.add(ct,dt),T=e.sub(T,R),S=e.mul(j,B),R=e.mul(K,dt),S=e.add(R,S),R=e.sub(ct,S),S=e.add(ct,S),F=e.mul(R,S),ct=e.add(_,_),ct=e.add(ct,_),dt=e.mul(j,dt),B=e.mul(K,B),ct=e.add(ct,dt),dt=e.sub(_,dt),dt=e.mul(j,dt),B=e.add(B,dt),_=e.mul(ct,B),F=e.add(F,_),_=e.mul(T,B),R=e.mul(ce,R),R=e.sub(R,_),_=e.mul(ce,ct),S=e.mul(T,S),S=e.add(S,_),new h(R,F,S)}subtract(y){return this.add(y.negate())}is0(){return this.equals(h.ZERO)}wNAF(y){return m.wNAFCached(this,l,y,E=>{const x=e.invertBatch(E.map(O=>O.pz));return E.map((O,N)=>O.toAffine(x[N])).map(h.fromAffine)})}multiplyUnsafe(y){const E=h.ZERO;if(y===De)return E;if(a(y),y===Wt)return this;const{endo:x}=t;if(!x)return m.unsafeLadder(this,y);let{k1neg:O,k1:N,k2neg:D,k2:U}=x.splitScalar(y),R=E,F=E,S=this;for(;N>De||U>De;)N&Wt&&(R=R.add(S)),U&Wt&&(F=F.add(S)),S=S.double(),N>>=Wt,U>>=Wt;return O&&(R=R.negate()),D&&(F=F.negate()),F=new h(e.mul(F.px,x.beta),F.py,F.pz),R.add(F)}multiply(y){a(y);let E=y,x,O;const{endo:N}=t;if(N){const{k1neg:D,k1:U,k2neg:R,k2:F}=N.splitScalar(E);let{p:S,f:j}=this.wNAF(U),{p:K,f:_}=this.wNAF(F);S=m.constTimeNegate(D,S),K=m.constTimeNegate(R,K),K=new h(e.mul(K.px,N.beta),K.py,K.pz),x=S.add(K),O=j.add(_)}else{const{p:D,f:U}=this.wNAF(E);x=D,O=U}return h.normalizeZ([x,O])[0]}multiplyAndAddUnsafe(y,E,x){const O=h.BASE,N=(U,R)=>R===De||R===Wt||!U.equals(O)?U.multiplyUnsafe(R):U.multiply(R),D=N(this,E).add(N(y,x));return D.is0()?void 0:D}toAffine(y){const{px:E,py:x,pz:O}=this,N=this.is0();y==null&&(y=N?e.ONE:e.inv(O));const D=e.mul(E,y),U=e.mul(x,y),R=e.mul(O,y);if(N)return{x:e.ZERO,y:e.ZERO};if(!e.eql(R,e.ONE))throw new Error("invZ was invalid");return{x:D,y:U}}isTorsionFree(){const{h:y,isTorsionFree:E}=t;if(y===Wt)return!0;if(E)return E(h,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){const{h:y,clearCofactor:E}=t;return y===Wt?this:E?E(h,this):this.multiplyUnsafe(t.h)}toRawBytes(y=!0){return this.assertValidity(),n(h,this,y)}toHex(y=!0){return ps(this.toRawBytes(y))}}h.BASE=new h(t.Gx,t.Gy,e.ONE),h.ZERO=new h(e.ZERO,e.ONE,e.ZERO);const p=t.nBitLength,m=Ch(h,t.endo?Math.ceil(p/2):p);return{CURVE:t,ProjectivePoint:h,normPrivateKeyToScalar:c,weierstrassEquation:i,isWithinCurveOrder:o}}function Rh(r){const t=Ll(r);return ii(t,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...t})}function Th(r){const t=Rh(r),{Fp:e,n}=t,s=e.BYTES+1,i=2*e.BYTES+1;function o(B){return Deps(ms(B,t.nByteLength));function b(B){const T=n>>Wt;return B>T}function y(B){return b(B)?a(-B):B}const E=(B,T,V)=>$n(B.slice(T,V));class x{constructor(T,V,$){this.r=T,this.s=V,this.recovery=$,this.assertValidity()}static fromCompact(T){const V=t.nByteLength;return T=qt("compactSignature",T,V*2),new x(E(T,0,V),E(T,V,2*V))}static fromDER(T){const{r:V,s:$}=kn.toSig(qt("DER",T));return new x(V,$)}assertValidity(){if(!p(this.r))throw new Error("r must be 0 < r < CURVE.n");if(!p(this.s))throw new Error("s must be 0 < s < CURVE.n")}addRecoveryBit(T){return new x(this.r,this.s,T)}recoverPublicKey(T){const{r:V,s:$,recovery:X}=this,lt=F(qt("msgHash",T));if(X==null||![0,1,2,3].includes(X))throw new Error("recovery id invalid");const Ut=X===2||X===3?V+t.n:V;if(Ut>=e.ORDER)throw new Error("recovery id 2 or 3 invalid");const Lt=X&1?"03":"02",Je=l.fromHex(Lt+m(Ut)),Ke=c(Ut),cr=a(-lt*Ke),xs=a($*Ke),_e=l.BASE.multiplyAndAddUnsafe(Je,cr,xs);if(!_e)throw new Error("point at infinify");return _e.assertValidity(),_e}hasHighS(){return b(this.s)}normalizeS(){return this.hasHighS()?new x(this.r,a(-this.s),this.recovery):this}toDERRawBytes(){return gs(this.toDERHex())}toDERHex(){return kn.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return gs(this.toCompactHex())}toCompactHex(){return m(this.r)+m(this.s)}}const O={isValidPrivateKey(B){try{return f(B),!0}catch{return!1}},normPrivateKeyToScalar:f,randomPrivateKey:()=>{const B=Ul(t.n);return Nh(t.randomBytes(B),t.n)},precompute(B=8,T=l.BASE){return T._setWindowSize(B),T.multiply(BigInt(3)),T}};function N(B,T=!0){return l.fromPrivateKey(B).toRawBytes(T)}function D(B){const T=B instanceof Uint8Array,V=typeof B=="string",$=(T||V)&&B.length;return T?$===s||$===i:V?$===2*s||$===2*i:B instanceof l}function U(B,T,V=!0){if(D(B))throw new Error("first arg must be private key");if(!D(T))throw new Error("second arg must be public key");return l.fromHex(T).multiply(f(B)).toRawBytes(V)}const R=t.bits2int||function(B){const T=$n(B),V=B.length*8-t.nBitLength;return V>0?T>>BigInt(V):T},F=t.bits2int_modN||function(B){return a(R(B))},S=wa(t.nBitLength);function j(B){if(typeof B!="bigint")throw new Error("bigint expected");if(!(De<=B&&Bxn in V))throw new Error("sign() legacy options not supported");const{hash:$,randomBytes:X}=t;let{lowS:lt,prehash:Ut,extraEntropy:Lt}=V;lt==null&&(lt=!0),B=qt("msgHash",B),Ut&&(B=qt("prehashed msgHash",$(B)));const Je=F(B),Ke=f(T),cr=[j(Ke),j(Je)];if(Lt!=null){const xn=Lt===!0?X(e.BYTES):Lt;cr.push(qt("extraEntropy",xn))}const xs=Ls(...cr),_e=Je;function lo(xn){const lr=R(xn);if(!p(lr))return;const Ra=c(lr),ur=l.BASE.multiply(lr).toAffine(),Yt=a(ur.x);if(Yt===De)return;const fr=a(Ra*a(_e+Yt*Ke));if(fr===De)return;let Ta=(ur.x===Yt?0:2)|Number(ur.y&Wt),Sa=fr;return lt&&b(fr)&&(Sa=y(fr),Ta^=1),new x(Yt,Sa,Ta)}return{seed:xs,k2sig:lo}}const _={lowS:t.lowS,prehash:!1},ct={lowS:t.lowS,prehash:!1};function dt(B,T,V=_){const{seed:$,k2sig:X}=K(B,T,V),lt=t;return Rl(lt.hash.outputLen,lt.nByteLength,lt.hmac)($,X)}l.BASE._setWindowSize(8);function ce(B,T,V,$=ct){var ur;const X=B;if(T=qt("msgHash",T),V=qt("publicKey",V),"strict"in $)throw new Error("options.strict was renamed to lowS");const{lowS:lt,prehash:Ut}=$;let Lt,Je;try{if(typeof X=="string"||X instanceof Uint8Array)try{Lt=x.fromDER(X)}catch(Yt){if(!(Yt instanceof kn.Err))throw Yt;Lt=x.fromCompact(X)}else if(typeof X=="object"&&typeof X.r=="bigint"&&typeof X.s=="bigint"){const{r:Yt,s:fr}=X;Lt=new x(Yt,fr)}else throw new Error("PARSE");Je=l.fromHex(V)}catch(Yt){if(Yt.message==="PARSE")throw new Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(lt&&Lt.hasHighS())return!1;Ut&&(T=t.hash(T));const{r:Ke,s:cr}=Lt,xs=F(T),_e=c(cr),lo=a(xs*_e),xn=a(Ke*_e),lr=(ur=l.BASE.multiplyAndAddUnsafe(Je,lo,xn))==null?void 0:ur.toAffine();return lr?a(lr.x)===Ke:!1}return{CURVE:t,getPublicKey:N,getSharedSecret:U,sign:dt,verify:ce,ProjectivePoint:l,Signature:x,utils:O}}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function Sh(r){return{hash:r,hmac:(t,...e)=>fl(r,t,bf(...e)),randomBytes:Ef}}function Uh(r,t){const e=n=>Th({...r,...Sh(n)});return Object.freeze({...e(t),create:e})}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const Fl=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),tc=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),Lh=BigInt(1),Do=BigInt(2),ec=(r,t)=>(r+t/Do)/t;function Fh(r){const t=Fl,e=BigInt(3),n=BigInt(6),s=BigInt(11),i=BigInt(22),o=BigInt(23),a=BigInt(44),c=BigInt(88),l=r*r*r%t,f=l*l*r%t,h=Vt(f,e,t)*f%t,p=Vt(h,e,t)*f%t,m=Vt(p,Do,t)*l%t,b=Vt(m,s,t)*m%t,y=Vt(b,i,t)*b%t,E=Vt(y,a,t)*y%t,x=Vt(E,c,t)*E%t,O=Vt(x,a,t)*y%t,N=Vt(O,e,t)*f%t,D=Vt(N,o,t)*b%t,U=Vt(D,n,t)*l%t,R=Vt(U,Do,t);if(!Mo.eql(Mo.sqr(R),r))throw new Error("Cannot find square root");return R}const Mo=Ph(Fl,void 0,void 0,{sqrt:Fh}),Xe=Uh({a:BigInt(0),b:BigInt(7),Fp:Mo,n:tc,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:r=>{const t=tc,e=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-Lh*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),s=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),i=e,o=BigInt("0x100000000000000000000000000000000"),a=ec(i*r,t),c=ec(-n*r,t);let l=kt(r-a*e-c*s,t),f=kt(-a*n-c*i,t);const h=l>o,p=f>o;if(h&&(l=t-l),p&&(f=t-f),l>o||f>o)throw new Error("splitScalar: Endomorphism failed, k="+r);return{k1neg:h,k1:l,k2neg:p,k2:f}}}},dl);BigInt(0);Xe.ProjectivePoint;const Fs="0x0000000000000000000000000000000000000000",nc="0x0000000000000000000000000000000000000000000000000000000000000000",rc=BigInt(0),sc=BigInt(1),ic=BigInt(2),oc=BigInt(27),ac=BigInt(28),di=BigInt(35),hr={};function cc(r){return Qe(at(r),32)}var Sr,Ur,Lr,Vn;const Xt=class Xt{constructor(t,e,n,s){A(this,Sr);A(this,Ur);A(this,Lr);A(this,Vn);ji(t,hr,"Signature"),d(this,Sr,e),d(this,Ur,n),d(this,Lr,s),d(this,Vn,null)}get r(){return u(this,Sr)}set r(t){g(xr(t)===32,"invalid r","value",t),d(this,Sr,I(t))}get s(){return u(this,Ur)}set s(t){g(xr(t)===32,"invalid s","value",t);const e=I(t);g(parseInt(e.substring(0,3))<8,"non-canonical s","value",e),d(this,Ur,e)}get v(){return u(this,Lr)}set v(t){const e=Q(t,"value");g(e===27||e===28,"invalid v","v",t),d(this,Lr,e)}get networkV(){return u(this,Vn)}get legacyChainId(){const t=this.networkV;return t==null?null:Xt.getChainId(t)}get yParity(){return this.v===27?0:1}get yParityAndS(){const t=G(this.s);return this.yParity&&(t[0]|=128),I(t)}get compactSerialized(){return rt([this.r,this.yParityAndS])}get serialized(){return rt([this.r,this.s,this.yParity?"0x1c":"0x1b"])}[Symbol.for("nodejs.util.inspect.custom")](){return`Signature { r: "${this.r}", s: "${this.s}", yParity: ${this.yParity}, networkV: ${this.networkV} }`}clone(){const t=new Xt(hr,this.r,this.s,this.v);return this.networkV&&d(t,Vn,this.networkV),t}toJSON(){const t=this.networkV;return{_type:"signature",networkV:t!=null?t.toString():null,r:this.r,s:this.s,v:this.v}}static getChainId(t){const e=k(t,"v");return e==oc||e==ac?rc:(g(e>=di,"invalid EIP-155 v","v",t),(e-di)/ic)}static getChainIdV(t,e){return k(t)*ic+BigInt(35+e-27)}static getNormalizedV(t){const e=k(t);return e===rc||e===oc?27:e===sc||e===ac?28:(g(e>=di,"invalid v","v",t),e&sc?27:28)}static from(t){function e(l,f){g(l,f,"signature",t)}if(t==null)return new Xt(hr,nc,nc,27);if(typeof t=="string"){const l=G(t,"signature");if(l.length===64){const f=I(l.slice(0,32)),h=l.slice(32,64),p=h[0]&128?28:27;return h[0]&=127,new Xt(hr,f,I(h),p)}if(l.length===65){const f=I(l.slice(0,32)),h=l.slice(32,64);e((h[0]&128)===0,"non-canonical s");const p=Xt.getNormalizedV(l[64]);return new Xt(hr,f,I(h),p)}e(!1,"invalid raw signature length")}if(t instanceof Xt)return t.clone();const n=t.r;e(n!=null,"missing r");const s=cc(n),i=function(l,f){if(l!=null)return cc(l);if(f!=null){e(q(f,32),"invalid yParityAndS");const h=G(f);return h[0]&=127,I(h)}e(!1,"missing s")}(t.s,t.yParityAndS);e((G(i)[0]&128)==0,"non-canonical s");const{networkV:o,v:a}=function(l,f,h){if(l!=null){const p=k(l);return{networkV:p>=di?p:void 0,v:Xt.getNormalizedV(p)}}if(f!=null)return e(q(f,32),"invalid yParityAndS"),{v:G(f)[0]&128?28:27};if(h!=null){switch(Q(h,"sig.yParity")){case 0:return{v:27};case 1:return{v:28}}e(!1,"invalid yParity")}e(!1,"missing v")}(t.v,t.yParityAndS,t.yParity),c=new Xt(hr,s,i,a);return o&&d(c,Vn,o),e(t.yParity==null||Q(t.yParity,"sig.yParity")===c.yParity,"yParity mismatch"),e(t.yParityAndS==null||t.yParityAndS===c.yParityAndS,"yParityAndS mismatch"),c}};Sr=new WeakMap,Ur=new WeakMap,Lr=new WeakMap,Vn=new WeakMap;let Tt=Xt;var ve;const In=class In{constructor(t){A(this,ve);g(xr(t)===32,"invalid private key","privateKey","[REDACTED]"),d(this,ve,I(t))}get privateKey(){return u(this,ve)}get publicKey(){return In.computePublicKey(u(this,ve))}get compressedPublicKey(){return In.computePublicKey(u(this,ve),!0)}sign(t){g(xr(t)===32,"invalid digest length","digest",t);const e=Xe.sign(Nt(t),Nt(u(this,ve)),{lowS:!0});return Tt.from({r:yn(e.r,32),s:yn(e.s,32),v:e.recovery?28:27})}computeSharedSecret(t){const e=In.computePublicKey(t);return I(Xe.getSharedSecret(Nt(u(this,ve)),G(e),!1))}static computePublicKey(t,e){let n=G(t,"key");if(n.length===32){const i=Xe.getPublicKey(n,!!e);return I(i)}if(n.length===64){const i=new Uint8Array(65);i[0]=4,i.set(n,1),n=i}const s=Xe.ProjectivePoint.fromHex(n);return I(s.toRawBytes(e))}static recoverPublicKey(t,e){g(xr(t)===32,"invalid digest length","digest",t);const n=Tt.from(e);let s=Xe.Signature.fromCompact(Nt(rt([n.r,n.s])));s=s.addRecoveryBit(n.yParity);const i=s.recoverPublicKey(Nt(t));return g(i!=null,"invalid signature for digest","signature",e),"0x"+i.toHex(!1)}static addPoints(t,e,n){const s=Xe.ProjectivePoint.fromHex(In.computePublicKey(t).substring(2)),i=Xe.ProjectivePoint.fromHex(In.computePublicKey(e).substring(2));return"0x"+s.add(i).toHex(!!n)}};ve=new WeakMap;let Ds=In;const Dh=BigInt(0),Mh=BigInt(36);function lc(r){r=r.toLowerCase();const t=r.substring(2).split(""),e=new Uint8Array(40);for(let s=0;s<40;s++)e[s]=t[s].charCodeAt(0);const n=G(ot(e));for(let s=0;s<40;s+=2)n[s>>1]>>4>=8&&(t[s]=t[s].toUpperCase()),(n[s>>1]&15)>=8&&(t[s+1]=t[s+1].toUpperCase());return"0x"+t.join("")}const Aa={};for(let r=0;r<10;r++)Aa[String(r)]=String(r);for(let r=0;r<26;r++)Aa[String.fromCharCode(65+r)]=String(10+r);const uc=15;function Gh(r){r=r.toUpperCase(),r=r.substring(4)+r.substring(0,2)+"00";let t=r.split("").map(n=>Aa[n]).join("");for(;t.length>=uc;){let n=t.substring(0,uc);t=parseInt(n,10)%97+t.substring(n.length)}let e=String(98-parseInt(t,10)%97);for(;e.length<2;)e="0"+e;return e}const Hh=function(){const r={};for(let t=0;t<36;t++){const e="0123456789abcdefghijklmnopqrstuvwxyz"[t];r[e]=BigInt(t)}return r}();function Qh(r){r=r.toLowerCase();let t=Dh;for(let e=0;et.format()).join(",")})`:this.type}defaultValue(){return 0}minValue(){return 0}maxValue(){return 0}isBigInt(){return!!this.type.match(/^u?int[0-9]+$/)}isData(){return this.type.startsWith("bytes")}isString(){return this.type==="string"}get tupleName(){if(this.type!=="tuple")throw TypeError("not a tuple");return u(this,zn)}get arrayLength(){if(this.type!=="array")throw TypeError("not an array");return u(this,zn)===!0?-1:u(this,zn)===!1?this.value.length:null}static from(t,e){return new Ne(Pe,t,e)}static uint8(t){return v(t,8)}static uint16(t){return v(t,16)}static uint24(t){return v(t,24)}static uint32(t){return v(t,32)}static uint40(t){return v(t,40)}static uint48(t){return v(t,48)}static uint56(t){return v(t,56)}static uint64(t){return v(t,64)}static uint72(t){return v(t,72)}static uint80(t){return v(t,80)}static uint88(t){return v(t,88)}static uint96(t){return v(t,96)}static uint104(t){return v(t,104)}static uint112(t){return v(t,112)}static uint120(t){return v(t,120)}static uint128(t){return v(t,128)}static uint136(t){return v(t,136)}static uint144(t){return v(t,144)}static uint152(t){return v(t,152)}static uint160(t){return v(t,160)}static uint168(t){return v(t,168)}static uint176(t){return v(t,176)}static uint184(t){return v(t,184)}static uint192(t){return v(t,192)}static uint200(t){return v(t,200)}static uint208(t){return v(t,208)}static uint216(t){return v(t,216)}static uint224(t){return v(t,224)}static uint232(t){return v(t,232)}static uint240(t){return v(t,240)}static uint248(t){return v(t,248)}static uint256(t){return v(t,256)}static uint(t){return v(t,256)}static int8(t){return v(t,-8)}static int16(t){return v(t,-16)}static int24(t){return v(t,-24)}static int32(t){return v(t,-32)}static int40(t){return v(t,-40)}static int48(t){return v(t,-48)}static int56(t){return v(t,-56)}static int64(t){return v(t,-64)}static int72(t){return v(t,-72)}static int80(t){return v(t,-80)}static int88(t){return v(t,-88)}static int96(t){return v(t,-96)}static int104(t){return v(t,-104)}static int112(t){return v(t,-112)}static int120(t){return v(t,-120)}static int128(t){return v(t,-128)}static int136(t){return v(t,-136)}static int144(t){return v(t,-144)}static int152(t){return v(t,-152)}static int160(t){return v(t,-160)}static int168(t){return v(t,-168)}static int176(t){return v(t,-176)}static int184(t){return v(t,-184)}static int192(t){return v(t,-192)}static int200(t){return v(t,-200)}static int208(t){return v(t,-208)}static int216(t){return v(t,-216)}static int224(t){return v(t,-224)}static int232(t){return v(t,-232)}static int240(t){return v(t,-240)}static int248(t){return v(t,-248)}static int256(t){return v(t,-256)}static int(t){return v(t,-256)}static bytes1(t){return Z(t,1)}static bytes2(t){return Z(t,2)}static bytes3(t){return Z(t,3)}static bytes4(t){return Z(t,4)}static bytes5(t){return Z(t,5)}static bytes6(t){return Z(t,6)}static bytes7(t){return Z(t,7)}static bytes8(t){return Z(t,8)}static bytes9(t){return Z(t,9)}static bytes10(t){return Z(t,10)}static bytes11(t){return Z(t,11)}static bytes12(t){return Z(t,12)}static bytes13(t){return Z(t,13)}static bytes14(t){return Z(t,14)}static bytes15(t){return Z(t,15)}static bytes16(t){return Z(t,16)}static bytes17(t){return Z(t,17)}static bytes18(t){return Z(t,18)}static bytes19(t){return Z(t,19)}static bytes20(t){return Z(t,20)}static bytes21(t){return Z(t,21)}static bytes22(t){return Z(t,22)}static bytes23(t){return Z(t,23)}static bytes24(t){return Z(t,24)}static bytes25(t){return Z(t,25)}static bytes26(t){return Z(t,26)}static bytes27(t){return Z(t,27)}static bytes28(t){return Z(t,28)}static bytes29(t){return Z(t,29)}static bytes30(t){return Z(t,30)}static bytes31(t){return Z(t,31)}static bytes32(t){return Z(t,32)}static address(t){return new Ne(Pe,"address",t)}static bool(t){return new Ne(Pe,"bool",!!t)}static bytes(t){return new Ne(Pe,"bytes",t)}static string(t){return new Ne(Pe,"string",t)}static array(t,e){throw new Error("not implemented yet")}static tuple(t,e){throw new Error("not implemented yet")}static overrides(t){return new Ne(Pe,"overrides",Object.assign({},t))}static isTyped(t){return t&&typeof t=="object"&&"_typedSymbol"in t&&t._typedSymbol===fc}static dereference(t,e){if(Ne.isTyped(t)){if(t.type!==e)throw new Error(`invalid type: expecetd ${e}, got ${t.type}`);return t.value}return t}};zn=new WeakMap;let Et=Ne;class zh extends ze{constructor(t){super("address","address",t,!1)}defaultValue(){return"0x0000000000000000000000000000000000000000"}encode(t,e){let n=Et.dereference(e,"string");try{n=W(n)}catch(s){return this._throwError(s.message,e)}return t.writeValue(n)}decode(t){return W(yn(t.readValue(),20))}}class Jh extends ze{constructor(e){super(e.name,e.type,"_",e.dynamic);w(this,"coder");this.coder=e}defaultValue(){return this.coder.defaultValue()}encode(e,n){return this.coder.encode(e,n)}decode(e){return this.coder.decode(e)}}function Ml(r,t,e){let n=[];if(Array.isArray(e))n=e;else if(e&&typeof e=="object"){let c={};n=t.map(l=>{const f=l.localName;return P(f,"cannot encode object for signature with missing names","INVALID_ARGUMENT",{argument:"values",info:{coder:l},value:e}),P(!c[f],"cannot encode object for signature with duplicate names","INVALID_ARGUMENT",{argument:"values",info:{coder:l},value:e}),c[f]=!0,e[f]})}else g(!1,"invalid tuple value","tuple",e);g(t.length===n.length,"types/value length mismatch","tuple",e);let s=new Ro,i=new Ro,o=[];t.forEach((c,l)=>{let f=n[l];if(c.dynamic){let h=i.length;c.encode(i,f);let p=s.writeUpdatableValue();o.push(m=>{p(m+h)})}else c.encode(s,f)}),o.forEach(c=>{c(s.length)});let a=r.appendWriter(s);return a+=r.appendWriter(i),a}function Gl(r,t){let e=[],n=[],s=r.subReader(0);return t.forEach(i=>{let o=null;if(i.dynamic){let a=r.readIndex(),c=s.subReader(a);try{o=i.decode(c)}catch(l){if(mt(l,"BUFFER_OVERRUN"))throw l;o=l,o.baseType=i.name,o.name=i.localName,o.type=i.type}}else try{o=i.decode(r)}catch(a){if(mt(a,"BUFFER_OVERRUN"))throw a;o=a,o.baseType=i.name,o.name=i.localName,o.type=i.type}if(o==null)throw new Error("investigate");e.push(o),n.push(i.localName||null)}),hs.fromItems(e,n)}class Kh extends ze{constructor(e,n,s){const i=e.type+"["+(n>=0?n:"")+"]",o=n===-1||e.dynamic;super("array",i,s,o);w(this,"coder");w(this,"length");L(this,{coder:e,length:n})}defaultValue(){const e=this.coder.defaultValue(),n=[];for(let s=0;so||s<-(o+qh))&&this._throwError("value out-of-bounds",n),s=Xc(s,8*Bt)}else(sCs(i,this.size*8))&&this._throwError("value out-of-bounds",n);return e.writeValue(s)}decode(e){let n=Cs(e.readValue(),this.size*8);return this.signed&&(n=Yu(n,this.size*8)),n}}class ed extends Hl{constructor(t){super("string",t)}defaultValue(){return""}encode(t,e){return super.encode(t,Ge(Et.dereference(e,"string")))}decode(t){return vi(super.decode(t))}}class pi extends ze{constructor(e,n){let s=!1;const i=[];e.forEach(a=>{a.dynamic&&(s=!0),i.push(a.type)});const o="tuple("+i.join(",")+")";super("tuple",o,n,s);w(this,"coders");L(this,{coders:Object.freeze(e.slice())})}defaultValue(){const e=[];this.coders.forEach(s=>{e.push(s.defaultValue())});const n=this.coders.reduce((s,i)=>{const o=i.localName;return o&&(s[o]||(s[o]=0),s[o]++),s},{});return this.coders.forEach((s,i)=>{let o=s.localName;!o||n[o]!==1||(o==="length"&&(o="_length"),e[o]==null&&(e[o]=e[i]))}),Object.freeze(e)}encode(e,n){const s=Et.dereference(n,"tuple");return Ml(e,this.coders,s)}decode(e){return Gl(e,this.coders)}}function wo(r,t){return{address:W(r),storageKeys:t.map((e,n)=>(g(q(e,32),"invalid slot",`storageKeys[${n}]`,e),e.toLowerCase()))}}function or(r){if(Array.isArray(r))return r.map((e,n)=>Array.isArray(e)?(g(e.length===2,"invalid slot set",`value[${n}]`,e),wo(e[0],e[1])):(g(e!=null&&typeof e=="object","invalid address-slot set","value",r),wo(e.address,e.storageKeys)));g(r!=null&&typeof r=="object","invalid access list","value",r);const t=Object.keys(r).map(e=>{const n=r[e].reduce((s,i)=>(s[i]=!0,s),{});return wo(e,Object.keys(n).sort())});return t.sort((e,n)=>e.address.localeCompare(n.address)),t}function Ql(r){return{address:W(r.address),nonce:k(r.nonce!=null?r.nonce:0),chainId:k(r.chainId!=null?r.chainId:0),signature:Tt.from(r.signature)}}function nd(r){let t;return typeof r=="string"?t=Ds.computePublicKey(r,!1):t=r.publicKey,W(ot("0x"+t.substring(4)).substring(26))}function rd(r,t){return nd(Ds.recoverPublicKey(r,t))}const ft=BigInt(0),sd=BigInt(2),id=BigInt(27),od=BigInt(28),ad=BigInt(35),cd=BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),Ao=4096*32;function ld(r){return{blobToKzgCommitment:n=>{if("computeBlobProof"in r){if("blobToKzgCommitment"in r&&typeof r.blobToKzgCommitment=="function")return G(r.blobToKzgCommitment(I(n)))}else if("blobToKzgCommitment"in r&&typeof r.blobToKzgCommitment=="function")return G(r.blobToKzgCommitment(n));if("blobToKZGCommitment"in r&&typeof r.blobToKZGCommitment=="function")return G(r.blobToKZGCommitment(I(n)));g(!1,"unsupported KZG library","kzg",r)},computeBlobKzgProof:(n,s)=>{if("computeBlobProof"in r&&typeof r.computeBlobProof=="function")return G(r.computeBlobProof(I(n),I(s)));if("computeBlobKzgProof"in r&&typeof r.computeBlobKzgProof=="function")return r.computeBlobKzgProof(n,s);if("computeBlobKZGProof"in r&&typeof r.computeBlobKZGProof=="function")return G(r.computeBlobKZGProof(I(n),I(s)));g(!1,"unsupported KZG library","kzg",r)}}}function hc(r,t){let e=r.toString(16);for(;e.length<2;)e="0"+e;return e+=bs(t).substring(4),"0x"+e}function Es(r){return r==="0x"?null:W(r)}function to(r,t){try{return or(r)}catch(e){g(!1,e.message,t,r)}}function ud(r,t){try{if(!Array.isArray(r))throw new Error("authorizationList: invalid array");const e=[];for(let n=0;n[t.address,t.storageKeys])}function fd(r){return r.map(t=>[J(t.chainId,"chainId"),t.address,J(t.nonce,"nonce"),J(t.signature.yParity,"yParity"),at(t.signature.r),at(t.signature.s)])}function hd(r,t){g(Array.isArray(r),`invalid ${t}`,"value",r);for(let e=0;es.data),e.map(s=>s.commitment),e.map(s=>s.proof)])]):rt(["0x03",An(n)])}function Ed(r){const t=si(G(r).slice(1));g(Array.isArray(t)&&(t.length===10||t.length===13),"invalid field count for transaction type: 4","data",I(r));const e={type:4,chainId:Y(t[0],"chainId"),nonce:ar(t[1],"nonce"),maxPriorityFeePerGas:Y(t[2],"maxPriorityFeePerGas"),maxFeePerGas:Y(t[3],"maxFeePerGas"),gasPrice:null,gasLimit:Y(t[4],"gasLimit"),to:Es(t[5]),value:Y(t[6],"value"),data:I(t[7]),accessList:to(t[8],"accessList"),authorizationList:ud(t[9],"authorizationList")};return t.length===10||no(e,t.slice(10)),e}function xd(r,t){const e=[J(r.chainId,"chainId"),J(r.nonce,"nonce"),J(r.maxPriorityFeePerGas||0,"maxPriorityFeePerGas"),J(r.maxFeePerGas||0,"maxFeePerGas"),J(r.gasLimit,"gasLimit"),r.to||"0x",J(r.value,"value"),r.data,eo(r.accessList||[]),fd(r.authorizationList||[])];return t&&(e.push(J(t.yParity,"yParity")),e.push(at(t.r)),e.push(at(t.s))),rt(["0x04",An(e)])}var ee,Fr,Dr,Mr,Gr,Hr,Qr,Vr,zr,Jr,Kr,_r,Jn,en,he,nn,Zr,jr,Ai;const ue=class ue{constructor(){A(this,jr);A(this,ee);A(this,Fr);A(this,Dr);A(this,Mr);A(this,Gr);A(this,Hr);A(this,Qr);A(this,Vr);A(this,zr);A(this,Jr);A(this,Kr);A(this,_r);A(this,Jn);A(this,en);A(this,he);A(this,nn);A(this,Zr);d(this,ee,null),d(this,Fr,null),d(this,Mr,0),d(this,Gr,ft),d(this,Hr,null),d(this,Qr,null),d(this,Vr,null),d(this,Dr,"0x"),d(this,zr,ft),d(this,Jr,ft),d(this,Kr,null),d(this,_r,null),d(this,Jn,null),d(this,en,null),d(this,he,null),d(this,nn,null),d(this,Zr,null)}get type(){return u(this,ee)}set type(t){switch(t){case null:d(this,ee,null);break;case 0:case"legacy":d(this,ee,0);break;case 1:case"berlin":case"eip-2930":d(this,ee,1);break;case 2:case"london":case"eip-1559":d(this,ee,2);break;case 3:case"cancun":case"eip-4844":d(this,ee,3);break;case 4:case"pectra":case"eip-7702":d(this,ee,4);break;default:g(!1,"unsupported transaction type","type",t)}}get typeName(){switch(this.type){case 0:return"legacy";case 1:return"eip-2930";case 2:return"eip-1559";case 3:return"eip-4844";case 4:return"eip-7702"}return null}get to(){const t=u(this,Fr);return t==null&&this.type===3?Fs:t}set to(t){d(this,Fr,t==null?null:W(t))}get nonce(){return u(this,Mr)}set nonce(t){d(this,Mr,Q(t,"value"))}get gasLimit(){return u(this,Gr)}set gasLimit(t){d(this,Gr,k(t))}get gasPrice(){const t=u(this,Hr);return t==null&&(this.type===0||this.type===1)?ft:t}set gasPrice(t){d(this,Hr,t==null?null:k(t,"gasPrice"))}get maxPriorityFeePerGas(){const t=u(this,Qr);return t??(this.type===2||this.type===3?ft:null)}set maxPriorityFeePerGas(t){d(this,Qr,t==null?null:k(t,"maxPriorityFeePerGas"))}get maxFeePerGas(){const t=u(this,Vr);return t??(this.type===2||this.type===3?ft:null)}set maxFeePerGas(t){d(this,Vr,t==null?null:k(t,"maxFeePerGas"))}get data(){return u(this,Dr)}set data(t){d(this,Dr,I(t))}get value(){return u(this,zr)}set value(t){d(this,zr,k(t,"value"))}get chainId(){return u(this,Jr)}set chainId(t){d(this,Jr,k(t))}get signature(){return u(this,Kr)||null}set signature(t){d(this,Kr,t==null?null:Tt.from(t))}get accessList(){const t=u(this,_r)||null;return t??(this.type===1||this.type===2||this.type===3?[]:null)}set accessList(t){d(this,_r,t==null?null:or(t))}get authorizationList(){const t=u(this,Zr)||null;return t==null&&this.type===4?[]:t}set authorizationList(t){d(this,Zr,t==null?null:t.map(e=>Ql(e)))}get maxFeePerBlobGas(){const t=u(this,Jn);return t==null&&this.type===3?ft:t}set maxFeePerBlobGas(t){d(this,Jn,t==null?null:k(t,"maxFeePerBlobGas"))}get blobVersionedHashes(){let t=u(this,en);return t==null&&this.type===3?[]:t}set blobVersionedHashes(t){if(t!=null){g(Array.isArray(t),"blobVersionedHashes must be an Array","value",t),t=t.slice();for(let e=0;eObject.assign({},t))}set blobs(t){if(t==null){d(this,nn,null);return}const e=[],n=[];for(let s=0;s=0?2:t.pop()}inferTypes(){const t=this.gasPrice!=null,e=this.maxFeePerGas!=null||this.maxPriorityFeePerGas!=null,n=this.accessList!=null,s=u(this,Jn)!=null||u(this,en);this.maxFeePerGas!=null&&this.maxPriorityFeePerGas!=null&&P(this.maxFeePerGas>=this.maxPriorityFeePerGas,"priorityFee cannot be more than maxFee","BAD_DATA",{value:this}),P(!e||this.type!==0&&this.type!==1,"transaction type cannot have maxFeePerGas or maxPriorityFeePerGas","BAD_DATA",{value:this}),P(this.type!==0||!n,"legacy transaction cannot have accessList","BAD_DATA",{value:this});const i=[];return this.type!=null?i.push(this.type):this.authorizationList&&this.authorizationList.length?i.push(4):e?i.push(2):t?(i.push(1),n||i.push(0)):n?(i.push(1),i.push(2)):(s&&this.to||(i.push(0),i.push(1),i.push(2)),i.push(3)),i.sort(),i}isLegacy(){return this.type===0}isBerlin(){return this.type===1}isLondon(){return this.type===2}isCancun(){return this.type===3}clone(){return ue.from(this)}toJSON(){const t=e=>e==null?null:e.toString();return{type:this.type,to:this.to,data:this.data,nonce:this.nonce,gasLimit:t(this.gasLimit),gasPrice:t(this.gasPrice),maxPriorityFeePerGas:t(this.maxPriorityFeePerGas),maxFeePerGas:t(this.maxFeePerGas),value:t(this.value),chainId:t(this.chainId),sig:this.signature?this.signature.toJSON():null,accessList:this.accessList}}static from(t){if(t==null)return new ue;if(typeof t=="string"){const n=G(t);if(n[0]>=127)return ue.from(dd(n));switch(n[0]){case 1:return ue.from(yd(n));case 2:return ue.from(gd(n));case 3:return ue.from(Ad(n));case 4:return ue.from(Ed(n))}P(!1,"unsupported transaction type","UNSUPPORTED_OPERATION",{operation:"from"})}const e=new ue;return t.type!=null&&(e.type=t.type),t.to!=null&&(e.to=t.to),t.nonce!=null&&(e.nonce=t.nonce),t.gasLimit!=null&&(e.gasLimit=t.gasLimit),t.gasPrice!=null&&(e.gasPrice=t.gasPrice),t.maxPriorityFeePerGas!=null&&(e.maxPriorityFeePerGas=t.maxPriorityFeePerGas),t.maxFeePerGas!=null&&(e.maxFeePerGas=t.maxFeePerGas),t.maxFeePerBlobGas!=null&&(e.maxFeePerBlobGas=t.maxFeePerBlobGas),t.data!=null&&(e.data=t.data),t.value!=null&&(e.value=t.value),t.chainId!=null&&(e.chainId=t.chainId),t.signature!=null&&(e.signature=Tt.from(t.signature)),t.accessList!=null&&(e.accessList=t.accessList),t.authorizationList!=null&&(e.authorizationList=t.authorizationList),t.blobVersionedHashes!=null&&(e.blobVersionedHashes=t.blobVersionedHashes),t.kzg!=null&&(e.kzg=t.kzg),t.blobs!=null&&(e.blobs=t.blobs),t.hash!=null&&(g(e.isSigned(),"unsigned transaction cannot define '.hash'","tx",t),g(e.hash===t.hash,"hash mismatch","tx",t)),t.from!=null&&(g(e.isSigned(),"unsigned transaction cannot define '.from'","tx",t),g(e.from.toLowerCase()===(t.from||"").toLowerCase(),"from mismatch","tx",t)),e}};ee=new WeakMap,Fr=new WeakMap,Dr=new WeakMap,Mr=new WeakMap,Gr=new WeakMap,Hr=new WeakMap,Qr=new WeakMap,Vr=new WeakMap,zr=new WeakMap,Jr=new WeakMap,Kr=new WeakMap,_r=new WeakMap,Jn=new WeakMap,en=new WeakMap,he=new WeakMap,nn=new WeakMap,Zr=new WeakMap,jr=new WeakSet,Ai=function(t,e){P(!t||this.signature!=null,"cannot serialize unsigned transaction; maybe you meant .unsignedSerialized","UNSUPPORTED_OPERATION",{operation:".serialized"});const n=t?this.signature:null;switch(this.inferType()){case 0:return pd(this,n);case 1:return wd(this,n);case 2:return md(this,n);case 3:return bd(this,n,e?this.blobs:null);case 4:return xd(this,n)}P(!1,"unsupported transaction type","UNSUPPORTED_OPERATION",{operation:".serialized"})};let Ri=ue;function er(r){return ot(Ge(r))}var Pd="AEEUdwmgDS8BxQKKAP4BOgDjATAAngDUAIMAoABoAOAAagCOAEQAhABMAHIAOwA9ACsANgAmAGIAHgAuACgAJwAXAC0AGgAjAB8ALwAUACkAEgAeAAkAGwARABkAFgA5ACgALQArADcAFQApABAAHgAiABAAGgAeABMAGAUhBe8BFxREN8sF2wC5AK5HAW8ArQkDzQCuhzc3NzcBP68NEfMABQdHBuw5BV8FYAA9MzkI9r4ZBg7QyQAWA9CeOwLNCjcCjqkChuA/lm+RAsXTAoP6ASfnEQDytQFJAjWVCkeXAOsA6godAB/cwdAUE0WlBCN/AQUCQRjFD/MRBjHxDQSJbw0jBzUAswBxme+tnIcAYwabAysG8QAjAEMMmxcDqgPKQyDXCMMxA7kUQwD3NXOrAKmFIAAfBC0D3x4BJQDBGdUFAhEgVD8JnwmQJiNWYUzrg0oAGwAUAB0AFnNcACkAFgBP9h3gPfsDOWDKneY2ChglX1UDYD30ABsAFAAdABZzIGRAnwDD8wAjAEEMzRbDqgMB2sAFYwXqAtCnAsS4AwpUJKRtFHsadUz9AMMVbwLpABM1NJEX0ZkCgYMBEyMAxRVvAukAEzUBUFAtmUwSAy4DBTER33EftQHfSwB5MxJ/AjkWKQLzL8E/cwBB6QH9LQDPDtO9ASNriQC5DQANAwCK21EFI91zHwCoL9kBqQcHBwcHKzUDowBvAQohPvU3fAQgHwCyAc8CKQMA5zMSezr7ULgFmDp/LzVQBgEGAi8FYQVgt8AFcTtlQhpCWEmfe5tmZ6IAExsDzQ8t+X8rBKtTAltbAn0jsy8Bl6utPWMDTR8Ei2kRANkDBrNHNysDBzECQWUAcwFpJ3kAiyUhAJ0BUb8AL3EfAbfNAz81KUsFWwF3YQZtAm0A+VEfAzEJDQBRSQCzAQBlAHsAM70GD/v3IZWHBwARKQAxALsjTwHZAeMPEzmXgIHwABIAGQA8AEUAQDt3gdvIEGcQZAkGTRFMdEIVEwK0D64L7REdDNkq09PgADSxB/MDWwfzA1sDWwfzB/MDWwfzA1sDWwNbA1scEvAi28gQZw9QBHUFlgWTBN4IiyZREYkHMAjaVBV0JhxPA00BBCMtSSQ7mzMTJUpMFE0LCAQ2SmyvfUADTzGzVP2QqgPTMlc5dAkGHnkSqAAyD3skNb1OhnpPcagKU0+2tYdJak5vAsY6sEAACikJm2/Dd1YGRRAfJ6kQ+ww3AbkBPw3xS9wE9QY/BM0fgRkdD9GVoAipLeEM8SbnLqWAXiP5KocF8Uv4POELUVFsD10LaQnnOmeBUgMlAREijwrhDT0IcRD3Cs1vDekRSQc9A9lJngCpBwULFR05FbkmFGKwCw05ewb/GvoLkyazEy17AAXXGiUGUQEtGwMA0y7rhbRaNVwgT2MGBwspI8sUrFAkDSlAu3hMGh8HGSWtApVDdEqLUToelyH6PEENai4XUYAH+TwJGVMLhTyiRq9FEhHWPpE9TCJNTDAEOYMsMyePCdMPiQy9fHYBXQklCbUMdRM1ERs3yQg9Bx0xlygnGQglRplgngT7owP3E9UDDwVDCUUHFwO5HDETMhUtBRGBKNsC9zbZLrcCk1aEARsFzw8pH+MQVEfkDu0InwJpA4cl7wAxFSUAGyKfCEdnAGOP3FMJLs8Iy2pwI3gDaxTrZRF3B5UOWwerHDcVwxzlcMxeD4YMKKezCV8BeQmdAWME5wgNNV+MpCBFZ1eLXBifIGVBQ14AAjUMaRWjRMGHfAKPD28SHwE5AXcHPQ0FAnsR8RFvEJkI74YINbkz/DopBFMhhyAVCisDU2zSCysm/Qz8bQGnEmYDEDRBd/Jnr2C6KBgBBx0yyUFkIfULlk/RDKAaxRhGVDIZ6AfDA/ca9yfuQVsGAwOnBxc6UTPyBMELbQiPCUMATQ6nGwfbGG4KdYzUATWPAbudA1uVhwJzkwY7Bw8Aaw+LBX3pACECqwinAAkA0wNbAD0CsQehAB0AiUUBQQMrMwEl6QKTA5cINc8BmTMB9y0EH8cMGQD7O25OAsO1AoBuZqYF4VwCkgJNOQFRKQQJUktVA7N15QDfAE8GF+NLARmvTs8e50cB43MvAMsA/wAJOQcJRQHRAfdxALsBYws1Caa3uQFR7S0AhwAZbwHbAo0A4QA5AIP1AVcAUQVd/QXXAlNNARU1HC9bZQG/AyMBNwERAH0Gz5GpzQsjBHEH1wIQHxXlAu8yB7kFAyLjE9FCyQK94lkAMhoKPAqrCqpgX2Q3CjV2PVQAEh+sPss/UgVVO1c7XDtXO1w7VztcO1c7XDtXO1wDm8Pmw+YKcF9JYe8Mqg3YRMw6TRPfYFVgNhPMLbsUxRXSJVoZQRrAJwkl6FUNDwgt12Y0CDA0eRfAAEMpbINFY4oeNApPHOtTlVT8LR8AtUumM7MNsBsZREQFS3XxYi4WEgomAmSFAmJGX1GzAV83JAKh+wJonAJmDQKfiDgfDwJmPwJmKgRyBIMDfxcDfpY5Cjl7GzmGOicnAmwhAjI6OA4CbcsCbbLzjgM3a0kvAWsA4gDlAE4JB5wMkQECD8YAEbkCdzMCdqZDAnlPRwJ4viFg30WyRvcCfEMCeswCfQ0CfPRIBEiBZygALxlJXEpfGRtK0ALRBQLQ0EsrA4hTA4fqRMmRNgLypV0HAwOyS9JMMSkH001QTbMCi0MCitzFHwshR2sJuwKOOwKOYESbhQKO3QKOYHxRuFM5AQ5S2FSJApP/ApMQAO0AIFUiVbNV1AosHymZijLleGpFPz0Cl6MC77ZYJawAXSkClpMCloCgAK1ZsFoNhVEAPwKWuQKWUlxIXNUCmc8CmWhczl0LHQKcnznGOqECnBoCn58CnryOACETNS4TAp31Ap6WALlBYThh8wKe1wKgcgGtAp6jIwKeUqljzGQrKS8CJ7MCJoICoP8CoFDbAqYzAqXSAqgDAIECp/ZogGi1AAdNaiBq1QKs5wKssgKtawKtBgJXIQJV4AKx5dsDH1JsmwKywRECsuwbbORtZ21MYwMl0QK2YD9DbpQDKUkCuGICuUsZArkue3A6cOUCvR0DLbYDMhUCvoxyBgMzdQK+HnMmc1MCw88CwwhzhnRPOUl05AM8qwEDPJ4DPcMCxYACxksCxhSNAshtVQLISALJUwLJMgJkoQLd1nh9ZXiyeSlL1AMYp2cGAmH4GfeVKHsPXpZevxUCz28Cz3AzT1fW9xejAMqxAs93AS3uA04Wfk8JAtwrAtuOAtJTA1JgA1NjAQUDVZCAjUMEzxrxZEl5A4LSg5EC2ssC2eKEFIRNp0ADhqkAMwNkEoZ1Xf0AWQLfaQLevHd7AuIz7RgB8zQrAfSfAfLWiwLr9wLpdH0DAur9AuroAP1LAb0C7o0C66CWrpcHAu5DA4XkmH1w5HGlAvMHAG0DjhqZlwL3FwORcgOSiwL3nAL53QL4apogmq+/O5siA52HAv7+AR8APZ8gAZ+3AwWRA6ZuA6bdANXJAwZuoYyiCQ0DDE0BEwEjB3EGZb1rCQC/BG/DFY8etxEAG3k9ACcDNxJRA42DAWcrJQCM8wAlAOanC6OVCLsGI6fJBgCvBRnDBvElRUYFFoAFcD9GSDNCKUK8X3kZX8QAls0FOgCQVCGbwTsuYDoZutcONxjOGJHJ/gVfBWAFXwVgBWsFYAVfBWAFXwVgBV8FYAVfBWBOHQjfjW8KCgoKbF7xMwTRA7kGN8PDAMMEr8MA70gxFroFTj5xPnhCR0K+X30/X/AAWBkzswCNBsxzzASm70aCRS4rDDMeLz49fnXfcsH5GcoscQFz13Y4HwVnBXLJycnACNdRYwgICAqEXoWTxgA7P4kACxbZBu21Kw0AjMsTAwkVAOVtJUUsJ1JCuULESUArXy9gPi9AKwnJRQYKTD9LPoA+iT54PnkCkULEUUpDX9NWV3JVEjQAc1w3A3IBE3YnX+g7QiMJb6MKaiszRCUuQrNCxDPMCcwEX9EWJzYREBEEBwIHKn6l33JCNVIfybPJtAltydPUCmhBZw/tEKsZAJOVJU1CLRuxbUHOQAo7P0s+eEJHHA8SJVRPdGM0NVrpvBoKhfUlM0JHHGUQUhEWO1xLSj8MO0ucNAqJIzVCRxv9EFsqKyA4OQgNj2nwZgp5ZNFgE2A1K3YHS2AhQQojJmC7DgpzGG1WYFUZCQYHZO9gHWCdYIVgu2BTYJlwFh8GvRbcXbG8YgtDHrMBwzPVyQonHQgkCyYBgQJ0Ajc4nVqIAwGSCsBPIgDsK3SWEtIVBa5N8gGjAo+kVwVIZwD/AEUSCDweX4ITrRQsJ8K3TwBXFDwEAB0TvzVcAtoTS20RIwDgVgZ9BBImYgA5AL4Coi8LFnezOkCnIQFjAY4KBAPh9RcGsgZSBsEAJctdsWIRu2kTkQstRw7DAcMBKgpPBGIGMDAwKCYnKTQaLg4AKRSVAFwCdl+YUZ0JdicFD3lPAdt1F9ZZKCGxuE3yBxkFVGcA/wBFEgiCBwAOLHQSjxOtQDg1z7deFRMAZ8QTAGtKb1ApIiPHADkAvgKiLy1DFtYCmBiDAlDDWNB0eo7fpaMO/aEVRRv0ATEQZBIODyMEAc8JQhCbDRgzFD4TAEMAu9YBCgCsAOkAm5I3ABwAYxvONnR+MhXJAxgKQyxL2+kkJhMbhQKDBMkSsvF0AD9BNQ6uQC7WqSQHwxEAEEIu1hkhAH2z4iQPwyJPHNWpdyYBRSpnJALzoBAEVPPsH20MxA0CCEQKRgAFyAtFAlMNwwjEDUQJRArELtapMg7DDZgJIw+TGukEIwvDFkMAqAtDEMMMBhioe+QAO3MMRAACrgnEBSPY9Q0FDnbSBoMAB8MSYxkSxAEJAPIJAAB8FWMOFtMc/HcXwxhDAC7DAvOowwAewwJdKDKHAAHDAALrFUQVwwAbwyvzpWMWv8wA/ABpAy++bcYDUKPD0KhDCwKmJ1MAAmMA5+UZwxAagwipBRL/eADfw6fDGOMCGsOjk3l6BwOpo4sAEsMOGxMAA5sAbcMOAAvDp0MJGkMDwgipnNIPAwfIqUMGAOGDAAPzABXDAAcDAAnDAGmTABrDAA7DChjDjnEWAwABYwAOcwAuUyYABsMAF8MIKQANUgC6wy4AA8MADqMq8wCyYgAcIwAB8wqpAAXOCx0V4wAHowBCwwEKAGnDAAuDAB3DAAjDCakABdIAbqcZ3QCZCCkABdIAAAFDAAfjAB2jCCkABqIACYMAGzMAbSMA5sOIAAhjAAhDABTDBAkpAAbSAOOTAAlDC6kOzPtnAAdDAG6kQFAATwAKwwwAA0MACbUDPwAHIwAZgwACE6cDAAojAApDAAoDp/MGwwAJIwADEwAQQwgAFEMAEXMAD5MADfMADcMAGRMOFiMAFUMAbqMWuwHDAMIAE0MLAGkzEgDhUwACQwAEWgAXgwUjAAbYABjDBSYBgzBaAEFNALcQBxUMegAwMngBrA0IZgJ0KxQHBREPd1N0ZzKRJwaIHAZqNT4DqQq8BwngAB4DAwt2AX56T1ocKQNXAh1GATQGC3tOxYNagkgAMQA5CQADAQEAWxLjAIOYNAEzAH7tFRk6TglSAF8NAAlYAQ+S1ACAQwQorQBiAN4dAJ1wPyeTANVzuQDX3AIeEMp9eyMgXiUAEdkBkJizKltbVVAaRMqRAAEAhyQ/SDEz6BmfVwB6ATEsOClKIRcDOF0E/832AFNt5AByAnkCRxGCOs94NjXdAwINGBonDBwPALW2AwICAgAAAAAAAAYDBQMDARrUAwAtAAAAAgEGBgYGBgYFBQUFBQUEBQYHCAkEBQUFBQQAAAICAAAAIgCNAJAAlT0A6gC7ANwApEQAwgCyAK0AqADuAKYA2gCjAOcBCAEDAMcAgQBiANIA1AEDAN4A8gCQAKkBMQDqAN8A3AsBCQ8yO9ra2tq8xuLT1tRJOB0BUgFcNU0BWgFpAWgBWwFMUUlLbhMBUxsNEAs6PhMOACcUKy0vMj5AQENDQ0RFFEYGJFdXV1dZWVhZL1pbXVxcI2NnZ2ZoZypsbnZ1eHh4eHh4enp6enp6enp6enp8fH18e2IARPIASQCaAHgAMgBm+ACOAFcAVwA3AnbvAIsABfj4AGQAk/IAnwBPAGIAZP//sACFAIUAaQBWALEAJAC2AIMCQAJDAPwA5wD+AP4A6AD/AOkA6QDoAOYALwJ7AVEBQAE+AVQBPgE+AT4BOQE4ATgBOAEcAVgXADEQCAEAUx8SHgsdHhYAjgCWAKYAUQBqIAIxAHYAbwCXAxUDJzIDIUlGTzEAkQJPAMcCVwKkAMAClgKWApYClgKWApYCiwKWApYClgKWApYClgKVApUCmAKgApcClgKWApQClAKUApQCkgKVAnUB1AKXAp8ClgKWApUeAIETBQD+DQOfAmECOh8BVBg9AuIZEjMbAU4/G1WZAXusRAFpYQEFA0FPAQYAmTEeIJdyADFoAHEANgCRA5zMk/C2jGINwjMWygIZCaXdfDILBCs5dAE7YnQBugDlhoiHhoiGiYqKhouOjIaNkI6Ij4qQipGGkoaThpSSlYaWhpeKmIaZhpqGm4aci52QnoqfhuIC4XTpAt90AIp0LHSoAIsAdHQEQwRABEIERQRDBEkERgRBBEcESQRIBEQERgRJAJ5udACrA490ALxuAQ10ANFZdHQA13QCFHQA/mJ0AP4BIQD+APwA/AD9APwDhGZ03ASMK23HAP4A/AD8AP0A/CR0dACRYnQA/gCRASEA/gCRAvQA/gCRA4RmdNwEjCttxyR0AP9idAEhAP4A/gD8APwA/QD8AP8A/AD8AP0A/AOEZnTcBIwrbcckdHQAkWJ0ASEA/gCRAP4AkQL0AP4AkQOEZnTcBIwrbcckdAJLAT50AlIBQXQCU8l0dAJfdHQDpgL0A6YDpgOnA6cDpwOnA4RmdNwEjCttxyR0dACRYnQBIQOmAJEDpgCRAvQDpgCRA4RmdNwEjCttxyR0BDh0AJEEOQCRDpU5dSgCADR03gV2CwArdAEFAM5iCnR0AF1iAAYcOgp0dACRCnQAXAEIwWZ0CnRmdHQAkWZ0CnRmdEXgAFF03gp0dEY0tlT2u3SOAQTwscwhjZZKrhYcBSfFp9XNbKiVDOD2b+cpe4/Z17mQnbtzzhaeQtE2GGj0IDNTjRUSyTxxw/RPHW/+vS7d1NfRt9z9QPZg4X7QFfhCnkvgNPIItOsC2eV6hPannZNHlZ9xrwZXIMOlu3jSoQSq78WEjwLjw1ELSlF1aBvfzwk5ZX7AUvQzjPQKbDuQ+sm4wNOp4A6AdVuRS0t1y/DZpg4R6m7FNjM9HgvW7Bi88zaMjOo6lM8wtBBdj8LP4ylv3zCXPhebMKJc066o9sF71oFW/8JXu86HJbwDID5lzw5GWLR/LhT0Qqnp2JQxNZNfcbLIzPy+YypqRm/lBmGmex+82+PisxUumSeJkALIT6rJezxMH+CTJmQtt5uwTVbL3ptmjDUQzlSIvWi8Tl7ng1NpuRn1Ng4n14Qc+3Iil7OwkvNWogLSPkn3pihIFytyIGmMhOe3n1tWsuMy9BdKyqF4Z3v2SgggTL9KVvMXPnCbRe+oOuFFP3HejBG/w9gvmfNYvg6JuWia2lcSSN1uIjBktzoIazOHPJZ7kKHPz8mRWVdW3lA8WGF9dQF6Bm673boov3BUWDU2JNcahR23GtfHKLOz/viZ+rYnZFaIznXO67CYEJ1fXuTRpZhYZkKe54xeoagkNGLs+NTZHE0rX45/XvQ2RGADX6vcAvdxIUBV27wxGm2zjZo4X3ILgAlrOFheuZ6wtsvaIj4yLY7qqawlliaIcrz2G+c3vscAnCkCuMzMmZvMfu9lLwTvfX+3cVSyPdN9ZwgDZhfjRgNJcLiJ67b9xx8JHswprbiE3v9UphotAPIgnXVIN5KmMc0piXhc6cChPnN+MRhG9adtdttQTTwSIpl8I4/j//d3sz1326qTBTpPRM/Hgh3kzqEXs8ZAk4ErQhNO8hzrQ0DLkWMA/N+91tn2MdOJnWC2FCZehkQrwzwbKOjhvZsbM95QoeL9skYyMf4srVPVJSgg7pOLUtr/n9eT99oe9nLtFRpjA9okV2Kj8h9k5HaC0oivRD8VyXkJ81tcd4fHNXPCfloIQasxsuO18/46dR2jgul/UIet2G0kRvnyONMKhHs6J26FEoqSqd+rfYjeEGwHWVDpX1fh1jBBcKGMqRepju9Y00mDVHC+Xdij/j44rKfvfjGinNs1jO/0F3jB83XCDINN/HB84axlP+3E/klktRo+vl3U/aiyMJbIodE1XSsDn6UAzIoMtUObY2+k/4gY/l+AkZJ5Sj2vQrkyLm3FoxjhDX+31UXBFf9XrAH31fFqoBmDEZvhvvpnZ87N+oZEu7U9O/nnk+QWj3x8uyoRbEnf+O5UMr9i0nHP38IF5AvzrBW8YWBUR0mIAzIvndQq9N3v/Jto3aPjPXUPl8ASdPPyAp7jENf8bk7VMM9ol9XGmlBmeDMuGqt+WzuL6CXAxXjIhCPM5vACchgMJ/8XBGLO/D1isVvGhwwHHr1DLaI5mn2Jr/b1pUD90uciDaS8cXNDzCWvNmT/PhQe5e8nTnnnkt8Ds/SIjibcum/fqDhKopxAY8AkSrPn+IGDEKOO+U3XOP6djFs2H5N9+orhOahiQk5KnEUWa+CzkVzhp8bMHRbg81qhjjXuIKbHjSLSIBKWqockGtKinY+z4/RdBUF6pcc3JmnlxVcNgrI4SEzKUZSwcD2QCyxzKve+gAmg6ZuSRkpPFa6mfThu7LJNu3H5K42uCpNvPAsoedolKV/LHe/eJ+BbaG5MG0NaSGVPRUmNFMFFSSpXEcXwbVh7UETOZZtoVNRGOIbbkig3McEtR68cG0RZAoJevWYo7Dg/lZ1CQzblWeUvVHmr8fY4Nqd9JJiH/zEX24mJviH60fAyFr0A3c4bC1j3yZU60VgJxXn8JgJXLUIsiBnmKmMYz+7yBQFBvqb2eYnuW59joZBf56/wXvWIR4R8wTmV80i1mZy+S4+BUES+hzjk0uXpC///z/IlqHZ1monzlXp8aCfhGKMti73FI1KbL1q6IKO4fuBuZ59gagjn5xU79muMpHXg6S+e+gDM/U9BKLHbl9l6o8czQKl4RUkJJiqftQG2i3BMg/TQlUYFkJDYBOOvAugYuzYSDnZbDDd/aSd9x0Oe6F+bJcHfl9+gp6L5/TgA+BdFFovbfCrQ40s5vMPw8866pNX8zyFGeFWdxIpPVp9Rg1UPOVFbFZrvaFq/YAzHQgqMWpahMYfqHpmwXfHL1/kpYmGuHFwT55mQu0dylfNuq2Oq0hTMCPwqfxnuBIPLXfci4Y1ANy+1CUipQxld/izVh16WyG2Q0CQQ9NqtAnx1HCHwDj7sYxOSB0wopZSnOzxQOcExmxrVTF2BkOthVpGfuhaGECfCJpJKpjnihY+xOT2QJxN61+9K6QSqtv2Shr82I3jgJrqBg0wELFZPjvHpvzTtaJnLK6Vb97Yn933koO/saN7fsjwNKzp4l2lJVx2orjCGzC/4ZL4zCver6aQYtC5sdoychuFE6ufOiog+VWi5UDkbmvmtah/3aArEBIi39s5ILUnlFLgilcGuz9CQshEY7fw2ouoILAYPVT/gyAIq3TFAIwVsl+ktkRz/qGfnCDGrm5gsl/l9QdvCWGsjPz3dU7XuqKfdUrr/6XIgjp4rey6AJBmCmUJMjITHVdFb5m1p+dLMCL8t55zD42cmftmLEJC0Da04YiRCVUBLLa8D071/N5UBNBXDh0LFsmhV/5B5ExOB4j3WVG/S3lfK5o+V6ELHvy6RR9n4ac+VsK4VE4yphPvV+kG9FegTBH4ZRXL2HytUHCduJazB/KykjfetYxOXTLws267aGOd+I+JhKP//+VnXmS90OD/jvLcVu0asyqcuYN1mSb6XTlCkqv1vigZPIYwNF/zpWcT1GR/6aEIRjkh0yhg4LXJfaGobYJTY4JI58KiAKgmmgAKWdl5nYCeLqavRJGQNuYuZtZFGx+IkI4w4NS2xwbetNMunOjBu/hmKCI/w7tfiiyUd//4rbTeWt4izBY8YvGIN6vyKYmP/8X8wHKCeN+WRcKM70+tXKNGyevU9H2Dg5BsljnTf8YbsJ1TmMs74Ce2XlHisleguhyeg44rQOHZuw/6HTkhnnurK2d62q6yS7210SsAIaR+jXMQA+svkrLpsUY+F30Uw89uOdGAR6vo4FIME0EfVVeHTu6eKicfhSqOeXJhbftcd08sWEnNUL1C9fnprTgd83IMut8onVUF0hvqzZfHduPjbjwEXIcoYmy+P6tcJZHmeOv6VrvEdkHDJecjHuHeWANe79VG662qTjA/HCvumVv3qL+LrOcpqGps2ZGwQdFJ7PU4iuyRlBrwfO+xnPyr47s2cXVbWzAyznDiBGjCM3ksxjjqM62GE9C8f5U38kB3VjtabKp/nRdvMESPGDG90bWRLAt1Qk5DyLuazRR1YzdC1c+hZXvAWV8xA72S4A8B67vjVhbba3MMop293FeEXpe7zItMWrJG/LOH9ByOXmYnNJfjmfuX9KbrpgLOba4nZ+fl8Gbdv/ihv+6wFGKHCYrVwmhFC0J3V2bn2tIB1wCc1CST3d3X2OyxhguXcs4sm679UngzofuSeBewMFJboIQHbUh/m2JhW2hG9DIvG2t7yZIzKBTz9wBtnNC+2pCRYhSIuQ1j8xsz5VvqnyUIthvuoyyu7fNIrg/KQUVmGQaqkqZk/Vx5b33/gsEs8yX7SC1J+NV4icz6bvIE7C5G6McBaI8rVg56q5QBJWxn/87Q1sPK4+sQa8fLU5gXo4paaq4cOcQ4wR0VBHPGjKh+UlPCbA1nLXyEUX45qZ8J7/Ln4FPJE2TdzD0Z8MLSNQiykMMmSyOCiFfy84Rq60emYB2vD09KjYwsoIpeDcBDTElBbXxND72yhd9pC/1CMid/5HUMvAL27OtcIJDzNKpRPNqPOpyt2aPGz9QWIs9hQ9LiX5s8m9hjTUu/f7MyIatjjd+tSfQ3ufZxPpmJhTaBtZtKLUcfOCUqADuO+QoH8B9v6U+P0HV1GLQmtoNFTb3s74ivZgjES0qfK+8RdGgBbcCMSy8eBvh98+et1KIFqSe1KQPyXULBMTsIYnysIwiZBJYdI20vseV+wuJkcqGemehKjaAb9L57xZm3g2zX0bZ2xk/fU+bCo7TlnbW7JuF1YdURo/2Gw7VclDG1W7LOtas2LX4upifZ/23rzpsnY/ALfRgrcWP5hYmV9VxVOQA1fZvp9F2UNU+7d7xRyVm5wiLp3/0dlV7vdw1PMiZrbDAYzIVqEjRY2YU03sJhPnlwIPcZUG5ltL6S8XCxU1eYS5cjr34veBmXAvy7yN4ZjArIG0dfD/5UpBNlX1ZPoxJOwyqRi3wQWtOzd4oNKh0LkoTm8cwqgIfKhqqGOhwo71I+zXnMemTv2B2AUzABWyFztGgGULjDDzWYwJUVBTjKCn5K2QGMK1CQT7SzziOjo+BhAmqBjzuc3xYym2eedGeOIRJVyTwDw37iCMe4g5Vbnsb5ZBdxOAnMT7HU4DHpxWGuQ7GeiY30Cpbvzss55+5Km1YsbD5ea3NI9QNYIXol5apgSu9dZ8f8xS5dtHpido5BclDuLWY4lhik0tbJa07yJhH0BOyEut/GRbYTS6RfiTYWGMCkNpfSHi7HvdiTglEVHKZXaVhezH4kkXiIvKopYAlPusftpE4a5IZwvw1x/eLvoDIh/zpo9FiQInsTb2SAkKHV42XYBjpJDg4374XiVb3ws4qM0s9eSQ5HzsMU4OZJKuopFjBM+dAZEl8RUMx5uU2N486Kr141tVsGQfGjORYMCJAMsxELeNT4RmWjRcpdTGBwcx6XN9drWqPmJzcrGrH4+DRc7+n1w3kPZwu0BkNr6hQrqgo7JTB9A5kdJ/H7P4cWBMwsmuixAzJB3yrQpnGIq90lxAXLzDCdn1LPibsRt7rHNjgQBklRgPZ8vTbjXdgXrTWQsK5MdrXXQVPp0Rinq3frzZKJ0qD6Qhc40VzAraUXlob1gvkhK3vpmHgI6FRlQZNx6eRqkp0zy4AQlX813fAPtL3jMRaitGFFjo0zmErloC+h+YYdVQ6k4F/epxAoF0BmqEoKNTt6j4vQZNQ2BoqF9Vj53TOIoNmDiu9Xp15RkIgQIGcoLpfoIbenzpGUAtqFJp5W+LLnx38jHeECTJ/navKY1NWfN0sY1T8/pB8kIH3DU3DX+u6W3YwpypBMYOhbSxGjq84RZ84fWJow8pyHqn4S/9J15EcCMsXqrfwyd9mhiu3+rEo9pPpoJkdZqHjra4NvzFwuThNKy6hao/SlLw3ZADUcUp3w3SRVfW2rhl80zOgTYnKE0Hs2qp1J6H3xqPqIkvUDRMFDYyRbsFI3M9MEyovPk8rlw7/0a81cDVLmBsR2ze2pBuKb23fbeZC0uXoIvDppfTwIDxk1Oq2dGesGc+oJXWJLGkOha3CX+DUnzgAp9HGH9RsPZN63Hn4RMA5eSVhPHO+9RcRb/IOgtW31V1Q5IPGtoxPjC+MEJbVlIMYADd9aHYWUIQKopuPOHmoqSkubnAKnzgKHqgIOfW5RdAgotN6BN+O2ZYHkuemLnvQ8U9THVrS1RtLmKbcC7PeeDsYznvqzeg6VCNwmr0Yyx1wnLjyT84BZz3EJyCptD3yeueAyDWIs0L2qs/VQ3HUyqfrja0V1LdDzqAikeWuV4sc7RLIB69jEIBjCkyZedoUHqCrOvShVzyd73OdrJW0hPOuQv2qOoHDc9xVb6Yu6uq3Xqp2ZaH46A7lzevbxQEmfrzvAYSJuZ4WDk1Hz3QX1LVdiUK0EvlAGAYlG3Md30r7dcPN63yqBCIj25prpvZP0nI4+EgWoFG95V596CurXpKRBGRjQlHCvy5Ib/iW8nZJWwrET3mgd6mEhfP4KCuaLjopWs7h+MdXFdIv8dHQJgg1xi1eYqB0uDYjxwVmri0Sv5XKut/onqapC+FQiC2C1lvYJ9MVco6yDYsS3AANUfMtvtbYI2hfwZatiSsnoUeMZd34GVjkMMKA+XnjJpXgRW2SHTZplVowPmJsvXy6w3cfO1AK2dvtZEKTkC/TY9LFiKHCG0DnrMQdGm2lzlBHM9iEYynH2UcVMhUEjsc0oDBTgo2ZSQ1gzkAHeWeBXYFjYLuuf8yzTCy7/RFR81WDjXMbq2BOH5dURnxo6oivmxL3cKzKInlZkD31nvpHB9Kk7GfcfE1t+1V64b9LtgeJGlpRFxQCAqWJ5DoY77ski8gsOEOr2uywZaoO/NGa0X0y1pNQHBi3b2SUGNpcZxDT7rLbBf1FSnQ8guxGW3W+36BW0gBje4DOz6Ba6SVk0xiKgt+q2JOFyr4SYfnu+Ic1QZYIuwHBrgzr6UvOcSCzPTOo7D6IC4ISeS7zkl4h+2VoeHpnG/uWR3+ysNgPcOIXQbv0n4mr3BwQcdKJxgPSeyuP/z1Jjg4e9nUvoXegqQVIE30EHx5GHv+FAVUNTowYDJgyFhf5IvlYmEqRif6+WN1MkEJmDcQITx9FX23a4mxy1AQRsOHO/+eImX9l8EMJI3oPWzVXxSOeHU1dUWYr2uAA7AMb+vAEZSbU3qob9ibCyXeypEMpZ6863o6QPqlqGHZkuWABSTVNd4cOh9hv3qEpSx2Zy/DJMP6cItEmiBJ5PFqQnDEIt3NrA3COlOSgz43D7gpNFNJ5MBh4oFzhDPiglC2ypsNU4ISywY2erkyb1NC3Qh/IfWj0eDgZI4/ln8WPfBsT3meTjq1Uqt1E7Zl/qftqkx6aM9KueMCekSnMrcHj1CqTWWzEzPsZGcDe3Ue4Ws+XFYVxNbOFF8ezkvQGR6ZOtOLU2lQEnMBStx47vE6Pb7AYMBRj2OOfZXfisjJnpTfSNjo6sZ6qSvNxZNmDeS7Gk3yYyCk1HtKN2UnhMIjOXUzAqDv90lx9O/q/AT1ZMnit5XQe9wmQxnE/WSH0CqZ9/2Hy+Sfmpeg8RwsHI5Z8kC8H293m/LHVVM/BA7HaTJYg5Enk7M/xWpq0192ACfBai2LA/qrCjCr6Dh1BIMzMXINBmX96MJ5Hn2nxln/RXPFhwHxUmSV0EV2V0jm86/dxxuYSU1W7sVkEbN9EzkG0QFwPhyHKyb3t+Fj5WoUUTErcazE/N6EW6Lvp0d//SDPj7EV9UdJN+Amnf3Wwk3A0SlJ9Z00yvXZ7n3z70G47Hfsow8Wq1JXcfwnA+Yxa5mFsgV464KKP4T31wqIgzFPd3eCe3j5ory5fBF2hgCFyVFrLzI9eetNXvM7oQqyFgDo4CTp/hDV9NMX9JDHQ/nyHTLvZLNLF6ftn2OxjGm8+PqOwhxnPHWipkE/8wbtyri80Sr7pMNkQGMfo4ZYK9OcCC4ESVFFbLMIvlxSoRqWie0wxqnLfcLSXMSpMMQEJYDVObYsXIQNv4TGNwjq1kvT1UOkicTrG3IaBZ3XdScS3u8sgeZPVpOLkbiF940FjbCeNRINNvDbd01EPBrTCPpm12m43ze1bBB59Ia6Ovhnur/Nvx3IxwSWol+3H2qfCJR8df6aQf4v6WiONxkK+IqT4pKQrZK/LplgDI/PJZbOep8dtbV7oCr6CgfpWa8NczOkPx81iSHbsNhVSJBOtrLIMrL31LK9TqHqAbAHe0RLmmV806kRLDLNEhUEJfm9u0sxpkL93Zgd6rw+tqBfTMi59xqXHLXSHwSbSBl0EK0+loECOPtrl+/nsaFe197di4yUgoe4jKoAJDXc6DGDjrQOoFDWZJ9HXwt8xDrQP+7aRwWKWI1GF8s8O4KzxWBBcwnl3vnl1Oez3oh6Ea1vjR7/z7DDTrFtqU2W/KAEzAuXDNZ7MY73MF216dzdSbWmUp4lcm7keJfWaMHgut9x5C9mj66Z0lJ+yhsjVvyiWrfk1lzPOTdhG15Y7gQlXtacvI7qv/XNSscDwqkgwHT/gUsD5yB7LdRRvJxQGYINn9hTpodKFVSTPrtGvyQw+HlRFXIkodErAGu9Iy1YpfSPc3jkFh5CX3lPxv7aqjE/JAfTIpEjGb/H7MO0e2vsViSW1qa/Lmi4/n4DEI3g7lYrcanspDfEpKkdV1OjSLOy0BCUqVoECaB55vs06rXl4jqmLsPsFM/7vYJ0vrBhDCm/00A/H81l1uekJ/6Lml3Hb9+NKiLqATJmDpyzfYZFHumEjC662L0Bwkxi7E9U4cQA0XMVDuMYAIeLMPgQaMVOd8fmt5SflFIfuBoszeAw7ow5gXPE2Y/yBc/7jExARUf/BxIHQBF5Sn3i61w4z5xJdCyO1F1X3+3ax+JSvMeZ7S6QSKp1Fp/sjYz6Z+VgCZzibGeEoujryfMulH7Rai5kAft9ebcW50DyJr2uo2z97mTWIu45YsSnNSMrrNUuG1XsYBtD9TDYzQffKB87vWbkM4EbPAFgoBV4GQS+vtFDUqOFAoi1nTtmIOvg38N4hT2Sn8r8clmBCXspBlMBYTnrqFJGBT3wZOzAyJDre9dHH7+x7qaaKDOB4UQALD5ecS0DE4obubQEiuJZ0EpBVpLuYcce8Aa4PYd/V4DLDAJBYKQPCWTcrEaZ5HYbJi11Gd6hjGom1ii18VHYnG28NKpkz2UKVPxlhYSp8uZr367iOmoy7zsxehW9wzcy2zG0a80PBMCRQMb32hnaHeOR8fnNDzZhaNYhkOdDsBUZ3loDMa1YP0uS0cjUP3b/6DBlqmZOeNABDsLl5BI5QJups8uxAuWJdkUB/pO6Zax6tsg7fN5mjjDgMGngO+DPcKqiHIDbFIGudxtPTIyDi9SFMKBDcfdGQRv41q1AqmxgkVfJMnP8w/Bc7N9/TR6C7mGObFqFkIEom8sKi2xYqJLTCHK7cxzaZvqODo22c3wisBCP4HeAgcRbNPAsBkNRhSmD48dHupdBRw4mIvtS5oeF6zeT1KMCyhMnmhpkFAGWnGscoNkwvQ8ZM5lE/vgTHFYL99OuNxdFBxTEDd5v2qLR8y9WkXsWgG6kZNndFG+pO/UAkOCipqIhL3hq7cRSdrCq7YhUsTocEcnaFa6nVkhnSeRYUA1YO0z5itF9Sly3VlxYDw239TJJH6f3EUfYO5lb7bcFcz8Bp7Oo8QmnsUHOz/fagVUBtKEw1iT88j+aKkv8cscKNkMxjYr8344D1kFoZ7/td1W6LCNYN594301tUGRmFjAzeRg5vyoM1F6+bJZ/Q54jN/k8SFd3DxPTYaAUsivsBfgTn7Mx8H2SpPt4GOdYRnEJOH6jHM2p6SgB0gzIRq6fHxGMmSmqaPCmlfwxiuloaVIitLGN8wie2CDWhkzLoCJcODh7KIOAqbHEvXdUxaS4TTTs07Clzj/6GmVs9kiZDerMxEnhUB6QQPlcfqkG9882RqHoLiHGBoHfQuXIsAG8GTAtao2KVwRnvvam8jo1e312GQAKWEa4sUVEAMG4G6ckcONDwRcg1e2D3+ohXgY4UAWF8wHKQMrSnzCgfFpsxh+aHXMGtPQroQasRY4U6UdG0rz1Vjbka0MekOGRZQEvqQFlxseFor8zWFgHek3v29+WqN6gaK5gZOTOMZzpQIC1201LkMCXild3vWXSc5UX9xcFYfbRPzGFa1FDcPfPB/jUEq/FeGt419CI3YmBlVoHsa4KdcwQP5ZSwHHhFJ7/Ph/Rap/4vmG91eDwPP0lDfCDRCLszTqfzM71xpmiKi2HwS4WlqvGNwtvwF5Dqpn6KTq8ax00UMPkxDcZrEEEsIvHiUXXEphdb4GB4FymlPwBz4Gperqq5pW7TQ6/yNRhW8VT5NhuP0udlxo4gILq5ZxAZk8ZGh3g4CqxJlPKY7AQxupfUcVpWT5VItp1+30UqoyP4wWsRo3olRRgkWZZ2ZN6VC3OZFeXB8NbnUrSdikNptD1QiGuKkr8EmSR/AK9Rw+FF3s5uwuPbvHGiPeFOViltMK7AUaOsq9+x9cndk3iJEE5LKZRlWJbKOZweROzmPNVPkjE3K/TyA57Rs68TkZ3MR8akKpm7cFjnjPd/DdkWjgYoKHSr5Wu5ssoBYU4acRs5g2DHxUmdq8VXOXRbunD8QN0LhgkssgahcdoYsNvuXGUK/KXD/7oFb+VGdhqIn02veuM5bLudJOc2Ky0GMaG4W/xWBxIJcL7yliJOXOpx0AkBqUgzlDczmLT4iILXDxxtRR1oZa2JWFgiAb43obrJnG/TZC2KSK2wqOzRZTXavZZFMb1f3bXvVaNaK828w9TO610gk8JNf3gMfETzXXsbcvRGCG9JWQZ6+cDPqc4466Yo2RcKH+PILeKOqtnlbInR3MmBeGG3FH10yzkybuqEC2HSQwpA0An7d9+73BkDUTm30bZmoP/RGbgFN+GrCOfADgqr0WbI1a1okpFms8iHYw9hm0zUvlEMivBRxModrbJJ+9/p3jUdQQ9BCtQdxnOGrT5dzRUmw0593/mbRSdBg0nRvRZM5/E16m7ZHmDEtWhwvfdZCZ8J8M12W0yRMszXamWfQTwIZ4ayYktrnscQuWr8idp3PjT2eF/jmtdhIfcpMnb+IfZY2FebW6UY/AK3jP4u3Tu4zE4qlnQgLFbM19EBIsNf7KhjdbqQ/D6yiDb+NlEi2SKD+ivXVUK8ib0oBo366gXkR8ZxGjpJIDcEgZPa9TcYe0TIbiPl/rPUQDu3XBJ9X/GNq3FAUsKsll57DzaGMrjcT+gctp+9MLYXCq+sqP81eVQ0r9lt+gcQfZbACRbEjvlMskztZG8gbC8Qn9tt26Q7y7nDrbZq/LEz7kR6Jc6pg3N9rVX8Y5MJrGlML9p9lU4jbTkKqCveeZUJjHB03m2KRKR2TytoFkTXOLg7keU1s1lrPMQJpoOKLuAAC+y1HlJucU6ysB5hsXhvSPPLq5J7JtnqHKZ4vYjC4Vy8153QY+6780xDuGARsGbOs1WqzH0QS765rnSKEbbKlkO8oI/VDwUd0is13tKpqILu1mDJFNy/iJAWcvDgjxvusIT+PGz3ST/J9r9Mtfd0jpaGeiLYIqXc7DiHSS8TcjFVksi66PEkxW1z6ujbLLUGNNYnzOWpH8BZGK4bCK7iR+MbIv8ncDAz1u4StN3vTTzewr9IQjk9wxFxn+6N1ddKs0vffJiS08N3a4G1SVrlZ97Q/M+8G9fe5AP6d9/Qq4WRnORVhofPIKEdCr3llspUfE0oKIIYoByBRPh+bX1HLS3JWGJRhIvE1aW4NTd8ePi4Z+kXb+Z8snYfSNcqijhAgVsx4RCM54cXUiYkjeBmmC4ajOHrChoELscJJC7+9jjMjw5BagZKlgRMiSNYz7h7vvZIoQqbtQmspc0cUk1G/73iXtSpROl5wtLgQi0mW2Ex8i3WULhcggx6E1LMVHUsdc9GHI1PH3U2Ko0PyGdn9KdVOLm7FPBui0i9a0HpA60MsewVE4z8CAt5d401Gv6zXlIT5Ybit1VIA0FCs7wtvYreru1fUyW3oLAZ/+aTnZrOcYRNVA8spoRtlRoWflsRClFcgzkqiHOrf0/SVw+EpVaFlJ0g4Kxq1MMOmiQdpMNpte8lMMQqm6cIFXlnGbfJllysKDi+0JJMotkqgIxOSQgU9dn/lWkeVf8nUm3iwX2Nl3WDw9i6AUK3vBAbZZrcJpDQ/N64AVwjT07Jef30GSSmtNu2WlW7YoyW2FlWfZFQUwk867EdLYKk9VG6JgEnBiBxkY7LMo4YLQJJlAo9l/oTvJkSARDF/XtyAzM8O2t3eT/iXa6wDN3WewNmQHdPfsxChU/KtLG2Mn8i4ZqKdSlIaBZadxJmRzVS/o4yA65RTSViq60oa395Lqw0pzY4SipwE0SXXsKV+GZraGSkr/RW08wPRvqvSUkYBMA9lPx4m24az+IHmCbXA+0faxTRE9wuGeO06DIXa6QlKJ3puIyiuAVfPr736vzo2pBirS+Vxel3TMm3JKhz9o2ZoRvaFVpIkykb0Hcm4oHFBMcNSNj7/4GJt43ogonY2Vg4nsDQIWxAcorpXACzgBqQPjYsE/VUpXpwNManEru4NwMCFPkXvMoqvoeLN3qyu/N1eWEHttMD65v19l/0kH2mR35iv/FI+yjoHJ9gPMz67af3Mq/BoWXqu3rphiWMXVkmnPSEkpGpUI2h1MThideGFEOK6YZHPwYzMBvpNC7+ZHxPb7epfefGyIB4JzO9DTNEYnDLVVHdQyvOEVefrk6Uv5kTQYVYWWdqrdcIl7yljwwIWdfQ/y+2QB3eR/qxYObuYyB4gTbo2in4PzarU1sO9nETkmj9/AoxDA+JM3GMqQtJR4jtduHtnoCLxd1gQUscHRB/MoRYIEsP2pDZ9KvHgtlk1iTbWWbHhohwFEYX7y51fUV2nuUmnoUcqnWIQAAgl9LTVX+Bc0QGNEhChxHR4YjfE51PUdGfsSFE6ck7BL3/hTf9jLq4G1IafINxOLKeAtO7quulYvH5YOBc+zX7CrMgWnW47/jfRsWnJjYYoE7xMfWV2HN2iyIqLI";const dc=new Map([[8217,"apostrophe"],[8260,"fraction slash"],[12539,"middle dot"]]),pc=4;function Nd(r){let t=0;function e(){return r[t++]<<8|r[t++]}let n=e(),s=1,i=[0,1];for(let U=1;U>--c&1}const h=31,p=2**h,m=p>>>1,b=m>>1,y=p-1;let E=0;for(let U=0;U1;){let K=R+F>>>1;U>>1|f(),S=S<<1^m,j=(j^m)<<1|m|1;O=S,N=1+j-S}let D=n-4;return x.map(U=>{switch(U-D){case 3:return D+65792+(r[a++]<<16|r[a++]<<8|r[a++]);case 2:return D+256+(r[a++]<<8|r[a++]);case 1:return D+r[a++];default:return U-1}})}function Bd(r){let t=0;return()=>r[t++]}function Vl(r){return Bd(Nd(Cd(r)))}function Cd(r){let t=[];[..."ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"].forEach((s,i)=>t[s.charCodeAt(0)]=i);let e=r.length,n=new Uint8Array(6*e>>3);for(let s=0,i=0,o=0,a=0;s=8&&(n[i++]=a>>(o-=8));return n}function Id(r){return r&1?~r>>1:r>>1}function Od(r,t){let e=Array(r);for(let n=0,s=0;n{let t=Ms(r);if(t.length)return t})}function Jl(r){let t=[];for(;;){let e=r();if(e==0)break;t.push(vd(e,r))}for(;;){let e=r()-1;if(e<0)break;t.push(kd(e,r))}return t.flat()}function Gs(r){let t=[];for(;;){let e=r(t.length);if(!e)break;t.push(e)}return t}function Kl(r,t,e){let n=Array(r).fill().map(()=>[]);for(let s=0;sn[o].push(i));return n}function vd(r,t){let e=1+t(),n=t(),s=Gs(t);return Kl(s.length,1+r,t).flatMap((o,a)=>{let[c,...l]=o;return Array(s[a]).fill().map((f,h)=>{let p=h*n;return[c+h*e,l.map(m=>m+p)]})})}function kd(r,t){let e=1+t();return Kl(e,1+r,t).map(s=>[s[0],s.slice(1)])}function Rd(r){let t=[],e=Ms(r);return s(n([]),[]),t;function n(i){let o=r(),a=Gs(()=>{let c=Ms(r).map(l=>e[l]);if(c.length)return n(c)});return{S:o,B:a,Q:i}}function s({S:i,B:o},a,c){if(!(i&4&&c===a[a.length-1])){i&2&&(c=a[a.length-1]),i&1&&t.push(a);for(let l of o)for(let f of l.Q)s(l,[...a,f],c)}}}function Td(r){return r.toString(16).toUpperCase().padStart(2,"0")}function _l(r){return`{${Td(r)}}`}function Sd(r){let t=[];for(let e=0,n=r.length;e>24&255}function Wl(r){return r&16777215}let Go,gc,Ho,bi;function Qd(){let r=Vl(Ld);Go=new Map(zl(r).flatMap((t,e)=>t.map(n=>[n,e+1<<24]))),gc=new Set(Ms(r)),Ho=new Map,bi=new Map;for(let[t,e]of Jl(r)){if(!gc.has(t)&&e.length==2){let[n,s]=e,i=bi.get(n);i||(i=new Map,bi.set(n,i)),i.set(s,t)}Ho.set(t,e.reverse())}}function Yl(r){return r>=Hs&&r=Ti&&r=Si&&tUi&&t0&&s(Ui+l)}else{let o=Ho.get(i);o?e.push(...o):s(i)}if(!e.length)break;i=e.pop()}if(n&&t.length>1){let i=Os(t[0]);for(let o=1;o0&&s>=o)o==0?(t.push(n,...e),e.length=0,n=a):e.push(a),s=o;else{let c=Vd(n,a);c>=0?n=c:s==0&&o==0?(t.push(n),n=a):(e.push(a),s=o)}}return n>=0&&t.push(n,...e),t}function ql(r){return Xl(r).map(Wl)}function Jd(r){return zd(Xl(r))}const mc=45,$l=".",tu=65039,eu=1,Fi=r=>Array.from(r);function Qs(r,t){return r.P.has(t)||r.Q.has(t)}class Kd extends Array{get is_emoji(){return!0}}let Qo,nu,Rn,Vo,ru,Pr,bo,pr,Nn,yc,zo;function ba(){if(Qo)return;let r=Vl(Pd);const t=()=>Ms(r),e=()=>new Set(t()),n=(f,h)=>h.forEach(p=>f.add(p));Qo=new Map(Jl(r)),nu=e(),Rn=t(),Vo=new Set(t().map(f=>Rn[f])),Rn=new Set(Rn),ru=e(),e();let s=zl(r),i=r();const o=()=>{let f=new Set;return t().forEach(h=>n(f,s[h])),n(f,t()),f};Pr=Gs(f=>{let h=Gs(r).map(p=>p+96);if(h.length){let p=f>=i;h[0]-=32,h=ys(h),p&&(h=`Restricted[${h}]`);let m=o(),b=o(),y=!r();return{N:h,P:m,Q:b,M:y,R:p}}}),bo=e(),pr=new Map;let a=t().concat(Fi(bo)).sort((f,h)=>f-h);a.forEach((f,h)=>{let p=r(),m=a[h]=p?a[h-p]:{V:[],M:new Map};m.V.push(f),bo.has(f)||pr.set(f,m)});for(let{V:f,M:h}of new Set(pr.values())){let p=[];for(let b of f){let y=Pr.filter(x=>Qs(x,b)),E=p.find(({G:x})=>y.some(O=>x.has(O)));E||(E={G:new Set,V:[]},p.push(E)),E.V.push(b),n(E.G,y)}let m=p.flatMap(b=>Fi(b.G));for(let{G:b,V:y}of p){let E=new Set(m.filter(x=>!b.has(x)));for(let x of y)h.set(x,E)}}Nn=new Set;let c=new Set;const l=f=>Nn.has(f)?c.add(f):Nn.add(f);for(let f of Pr){for(let h of f.P)l(h);for(let h of f.Q)l(h)}for(let f of Nn)!pr.has(f)&&!c.has(f)&&pr.set(f,eu);n(Nn,ql(Nn)),yc=Rd(r).map(f=>Kd.from(f)).sort(Ud),zo=new Map;for(let f of yc){let h=[zo];for(let p of f){let m=h.map(b=>{let y=b.get(p);return y||(y=new Map,b.set(p,y)),y});p===tu?h.push(...m):h=m}for(let p of h)p.V=f}}function Ea(r){return(su(r)?"":`${xa(ro([r]))} `)+_l(r)}function xa(r){return`"${r}"‎`}function _d(r){if(r.length>=4&&r[2]==mc&&r[3]==mc)throw new Error(`invalid label extension: "${ys(r.slice(0,4))}"`)}function Zd(r){for(let e=r.lastIndexOf(95);e>0;)if(r[--e]!==95)throw new Error("underscore allowed only at start")}function jd(r){let t=r[0],e=dc.get(t);if(e)throw Ts(`leading ${e}`);let n=r.length,s=-1;for(let i=1;it&&(t>>=1,r=[...r.slice(0,t),8230,...r.slice(-t)]);let s=0,i=r.length;for(let o=0;o{let i=Sd(s),o={input:i,offset:n};n+=i.length+1;try{let a=o.tokens=np(i,t,e),c=a.length,l;if(!c)throw new Error("empty label");let f=o.output=a.flat();if(Zd(f),!(o.emoji=c>1||a[0].is_emoji)&&f.every(p=>p<128))_d(f),l="ASCII";else{let p=a.flatMap(m=>m.is_emoji?[]:m);if(!p.length)l="Emoji";else{if(Rn.has(f[0]))throw Ts("leading combining mark");for(let y=1;yo.has(a)):Fi(o),!e.length)return}else n.push(s)}if(e){for(let s of e)if(n.every(i=>Qs(s,i)))throw new Error(`whole-script confusable: ${r.N}/${s.N}`)}}function $d(r){let t=Pr;for(let e of r){let n=t.filter(s=>Qs(s,e));if(!n.length)throw Pr.some(s=>Qs(s,e))?ou(t[0],e):iu(e);if(t=n,n.length==1)break}return t}function tp(r){return r.map(({input:t,error:e,output:n})=>{if(e){let s=e.message;throw new Error(r.length==1?s:`Invalid label ${xa(ro(t,63))}: ${s}`)}return ys(n)}).join($l)}function iu(r){return new Error(`disallowed character: ${Ea(r)}`)}function ou(r,t){let e=Ea(t),n=Pr.find(s=>s.P.has(t));return n&&(e=`${n.N} ${e}`),new Error(`illegal mixture: ${r.N} + ${e}`)}function Ts(r){return new Error(`illegal placement: ${r}`)}function ep(r,t){for(let e of t)if(!Qs(r,e))throw ou(r,e);if(r.M){let e=ql(t);for(let n=1,s=e.length;npc)throw new Error(`excessive non-spacing marks: ${xa(ro(e.slice(n-1,i)))} (${i-n}/${pc})`);n=i}}}function np(r,t,e){let n=[],s=[];for(r=r.slice().reverse();r.length;){let i=sp(r);if(i)s.length&&(n.push(t(s)),s=[]),n.push(e(i));else{let o=r.pop();if(Nn.has(o))s.push(o);else{let a=Qo.get(o);if(a)s.push(...a);else if(!nu.has(o))throw iu(o)}}}return s.length&&n.push(t(s)),n}function rp(r){return r.filter(t=>t!=tu)}function sp(r,t){let e=zo,n,s=r.length;for(;s&&(e=e.get(r[--s]),!!e);){let{V:i}=e;i&&(n=i,r.length=s)}return n}const au=new Uint8Array(32);au.fill(0);function wc(r){return g(r.length!==0,"invalid ENS name; empty component","comp",r),r}function cu(r){const t=Ge(ip(r)),e=[];if(r.length===0)return e;let n=0;for(let s=0;s{g(n.length<=e,`label ${JSON.stringify(r)} exceeds ${e} bytes`,"name",r);const s=new Uint8Array(n.length+1);return s.set(n,1),s[0]=s.length-1,s})))+"00"}const lu=new Uint8Array(32);lu.fill(0);const ap=BigInt(-1),uu=BigInt(0),fu=BigInt(1),cp=BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");function lp(r){const t=G(r),e=t.length%32;return e?rt([t,lu.slice(e)]):I(t)}const up=yn(fu,32),fp=yn(uu,32),Ac={name:"string",version:"string",chainId:"uint256",verifyingContract:"address",salt:"bytes32"},Eo=["name","version","chainId","verifyingContract","salt"];function bc(r){return function(t){return g(typeof t=="string",`invalid domain value for ${JSON.stringify(r)}`,`domain.${r}`,t),t}}const hp={name:bc("name"),version:bc("version"),chainId:function(r){const t=k(r,"domain.chainId");return g(t>=0,"invalid chain ID","domain.chainId",r),Number.isSafeInteger(t)?Number(t):se(t)},verifyingContract:function(r){try{return W(r).toLowerCase()}catch{}g(!1,'invalid domain value "verifyingContract"',"domain.verifyingContract",r)},salt:function(r){const t=G(r,"domain.salt");return g(t.length===32,'invalid domain value "salt"',"domain.salt",r),I(t)}};function xo(r){{const t=r.match(/^(u?)int(\d+)$/);if(t){const e=t[1]==="",n=parseInt(t[2]);g(n%8===0&&n!==0&&n<=256&&t[2]===String(n),"invalid numeric width","type",r);const s=Cs(cp,e?n-1:n),i=e?(s+fu)*ap:uu;return function(o){const a=k(o,"value");return g(a>=i&&a<=s,`value out-of-bounds for ${r}`,"value",a),yn(e?Xc(a,256):a,32)}}}{const t=r.match(/^bytes(\d+)$/);if(t){const e=parseInt(t[1]);return g(e!==0&&e<=32&&t[1]===String(e),"invalid bytes width","type",r),function(n){const s=G(n);return g(s.length===e,`invalid length for ${r}`,"value",n),lp(n)}}}switch(r){case"address":return function(t){return Qe(W(t),32)};case"bool":return function(t){return t?up:fp};case"bytes":return function(t){return ot(t)};case"string":return function(t){return er(t)}}return null}function Ec(r,t){return`${r}(${t.map(({name:e,type:n})=>n+" "+e).join(",")})`}function gi(r){const t=r.match(/^([^\x5b]*)((\x5b\d*\x5d)*)(\x5b(\d*)\x5d)$/);return t?{base:t[1],index:t[2]+t[4],array:{base:t[1],prefix:t[1]+t[2],count:t[5]?parseInt(t[5]):-1}}:{base:r}}var Ws,ke,Wr,Vi,hu;const zt=class zt{constructor(t){A(this,Vi);w(this,"primaryType");A(this,Ws);A(this,ke);A(this,Wr);d(this,ke,new Map),d(this,Wr,new Map);const e=new Map,n=new Map,s=new Map,i={};Object.keys(t).forEach(c=>{i[c]=t[c].map(({name:l,type:f})=>{let{base:h,index:p}=gi(f);return h==="int"&&!t.int&&(h="int256"),h==="uint"&&!t.uint&&(h="uint256"),{name:l,type:h+(p||"")}}),e.set(c,new Set),n.set(c,[]),s.set(c,new Set)}),d(this,Ws,JSON.stringify(i));for(const c in i){const l=new Set;for(const f of i[c]){g(!l.has(f.name),`duplicate variable name ${JSON.stringify(f.name)} in ${JSON.stringify(c)}`,"types",t),l.add(f.name);const h=gi(f.type).base;g(h!==c,`circular type reference to ${JSON.stringify(h)}`,"types",t),!xo(h)&&(g(n.has(h),`unknown type ${JSON.stringify(h)}`,"types",t),n.get(h).push(c),e.get(c).add(h))}}const o=Array.from(n.keys()).filter(c=>n.get(c).length===0);g(o.length!==0,"missing primary type","types",t),g(o.length===1,`ambiguous primary types or unused types: ${o.map(c=>JSON.stringify(c)).join(", ")}`,"types",t),L(this,{primaryType:o[0]});function a(c,l){g(!l.has(c),`circular type reference to ${JSON.stringify(c)}`,"types",t),l.add(c);for(const f of e.get(c))if(n.has(f)){a(f,l);for(const h of l)s.get(h).add(f)}l.delete(c)}a(this.primaryType,new Set);for(const[c,l]of s){const f=Array.from(l);f.sort(),u(this,ke).set(c,Ec(c,i[c])+f.map(h=>Ec(h,i[h])).join(""))}}get types(){return JSON.parse(u(this,Ws))}getEncoder(t){let e=u(this,Wr).get(t);return e||(e=C(this,Vi,hu).call(this,t),u(this,Wr).set(t,e)),e}encodeType(t){const e=u(this,ke).get(t);return g(e,`unknown type: ${JSON.stringify(t)}`,"name",t),e}encodeData(t,e){return this.getEncoder(t)(e)}hashStruct(t,e){return ot(this.encodeData(t,e))}encode(t){return this.encodeData(this.primaryType,t)}hash(t){return this.hashStruct(this.primaryType,t)}_visit(t,e,n){if(xo(t))return n(t,e);const s=gi(t).array;if(s)return g(s.count===-1||s.count===e.length,`array length mismatch; expected length ${s.count}`,"value",e),e.map(o=>this._visit(s.prefix,o,n));const i=this.types[t];if(i)return i.reduce((o,{name:a,type:c})=>(o[a]=this._visit(c,e[a],n),o),{});g(!1,`unknown type: ${t}`,"type",t)}visit(t,e){return this._visit(this.primaryType,t,e)}static from(t){return new zt(t)}static getPrimaryType(t){return zt.from(t).primaryType}static hashStruct(t,e,n){return zt.from(e).hashStruct(t,n)}static hashDomain(t){const e=[];for(const n in t){if(t[n]==null)continue;const s=Ac[n];g(s,`invalid typed-data domain key: ${JSON.stringify(n)}`,"domain",t),e.push({name:n,type:s})}return e.sort((n,s)=>Eo.indexOf(n.name)-Eo.indexOf(s.name)),zt.hashStruct("EIP712Domain",{EIP712Domain:e},t)}static encode(t,e,n){return rt(["0x1901",zt.hashDomain(t),zt.from(e).hash(n)])}static hash(t,e,n){return ot(zt.encode(t,e,n))}static async resolveNames(t,e,n,s){t=Object.assign({},t);for(const a in t)t[a]==null&&delete t[a];const i={};t.verifyingContract&&!q(t.verifyingContract,20)&&(i[t.verifyingContract]="0x");const o=zt.from(e);o.visit(n,(a,c)=>(a==="address"&&!q(c,20)&&(i[c]="0x"),c));for(const a in i)i[a]=await s(a);return t.verifyingContract&&i[t.verifyingContract]&&(t.verifyingContract=i[t.verifyingContract]),n=o.visit(n,(a,c)=>a==="address"&&i[c]?i[c]:c),{domain:t,value:n}}static getPayload(t,e,n){zt.hashDomain(t);const s={},i=[];Eo.forEach(c=>{const l=t[c];l!=null&&(s[c]=hp[c](l),i.push({name:c,type:Ac[c]}))});const o=zt.from(e);e=o.types;const a=Object.assign({},e);return g(a.EIP712Domain==null,"types must not contain EIP712Domain type","types.EIP712Domain",e),a.EIP712Domain=i,o.encode(n),{types:a,domain:s,primaryType:o.primaryType,message:o.visit(n,(c,l)=>{if(c.match(/^bytes(\d*)/))return I(G(l));if(c.match(/^u?int/))return k(l).toString();switch(c){case"address":return l.toLowerCase();case"bool":return!!l;case"string":return g(typeof l=="string","invalid string","value",l),l}g(!1,"unsupported type","type",c)})}}};Ws=new WeakMap,ke=new WeakMap,Wr=new WeakMap,Vi=new WeakSet,hu=function(t){{const s=xo(t);if(s)return s}const e=gi(t).array;if(e){const s=e.prefix,i=this.getEncoder(s);return o=>{g(e.count===-1||e.count===o.length,`array length mismatch; expected length ${e.count}`,"value",o);let a=o.map(i);return u(this,ke).has(s)&&(a=a.map(ot)),ot(rt(a))}}const n=this.types[t];if(n){const s=er(u(this,ke).get(t));return i=>{const o=n.map(({name:a,type:c})=>{const l=this.getEncoder(c)(i[a]);return u(this,ke).has(c)?ot(l):l});return o.unshift(s),rt(o)}}g(!1,`unknown type: ${t}`,"type",t)};let Di=zt;function It(r){const t=new Set;return r.forEach(e=>t.add(e)),Object.freeze(t)}const dp="external public payable override",pp=It(dp.split(" ")),du="constant external internal payable private public pure view override",gp=It(du.split(" ")),pu="constructor error event fallback function receive struct",gu=It(pu.split(" ")),mu="calldata memory storage payable indexed",mp=It(mu.split(" ")),yp="tuple returns",wp=[pu,mu,yp,du].join(" "),Ap=It(wp.split(" ")),bp={"(":"OPEN_PAREN",")":"CLOSE_PAREN","[":"OPEN_BRACKET","]":"CLOSE_BRACKET",",":"COMMA","@":"AT"},Ep=new RegExp("^(\\s*)"),xp=new RegExp("^([0-9]+)"),Pp=new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)"),yu=new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)$"),wu=new RegExp("^(address|bool|bytes([0-9]*)|string|u?int([0-9]*))$");var pt,ne,Ys,Ko;const zi=class zi{constructor(t){A(this,Ys);A(this,pt);A(this,ne);d(this,pt,0),d(this,ne,t.slice())}get offset(){return u(this,pt)}get length(){return u(this,ne).length-u(this,pt)}clone(){return new zi(u(this,ne))}reset(){d(this,pt,0)}popKeyword(t){const e=this.peek();if(e.type!=="KEYWORD"||!t.has(e.text))throw new Error(`expected keyword ${e.text}`);return this.pop().text}popType(t){if(this.peek().type!==t){const e=this.peek();throw new Error(`expected ${t}; got ${e.type} ${JSON.stringify(e.text)}`)}return this.pop().text}popParen(){const t=this.peek();if(t.type!=="OPEN_PAREN")throw new Error("bad start");const e=C(this,Ys,Ko).call(this,u(this,pt)+1,t.match+1);return d(this,pt,t.match+1),e}popParams(){const t=this.peek();if(t.type!=="OPEN_PAREN")throw new Error("bad start");const e=[];for(;u(this,pt)=u(this,ne).length)throw new Error("out-of-bounds");return u(this,ne)[u(this,pt)]}peekKeyword(t){const e=this.peekType("KEYWORD");return e!=null&&t.has(e)?e:null}peekType(t){if(this.length===0)return null;const e=this.peek();return e.type===t?e.text:null}pop(){const t=this.peek();return Ps(this,pt)._++,t}toString(){const t=[];for(let e=u(this,pt);e`}};pt=new WeakMap,ne=new WeakMap,Ys=new WeakSet,Ko=function(t=0,e=0){return new zi(u(this,ne).slice(t,e).map(n=>Object.freeze(Object.assign({},n,{match:n.match-t,linkBack:n.linkBack-t,linkNext:n.linkNext-t}))))};let oe=zi;function En(r){const t=[],e=o=>{const a=i0&&t[t.length-1].type==="NUMBER"){const h=t.pop().text;f=h+f,t[t.length-1].value=Q(h)}if(t.length===0||t[t.length-1].type!=="BRACKET")throw new Error("missing opening bracket");t[t.length-1].text+=f}continue}if(a=o.match(Pp),a){if(c.text=a[1],i+=c.text.length,Ap.has(c.text)){c.type="KEYWORD";continue}if(c.text.match(wu)){c.type="TYPE";continue}c.type="ID";continue}if(a=o.match(xp),a){c.text=a[1],c.type="NUMBER",i+=c.text.length;continue}throw new Error(`unexpected token ${JSON.stringify(o[0])} at position ${i}`)}return new oe(t.map(o=>Object.freeze(o)))}function xc(r,t){let e=[];for(const n in t.keys())r.has(n)&&e.push(n);if(e.length>1)throw new Error(`conflicting types: ${e.join(", ")}`)}function so(r,t){if(t.peekKeyword(gu)){const e=t.pop().text;if(e!==r)throw new Error(`expected ${r}, got ${e}`)}return t.popType("ID")}function Ve(r,t){const e=new Set;for(;;){const n=r.peekType("KEYWORD");if(n==null||t&&!t.has(n))break;if(r.pop(),e.has(n))throw new Error(`duplicate keywords: ${JSON.stringify(n)}`);e.add(n)}return Object.freeze(e)}function Au(r){let t=Ve(r,gp);return xc(t,It("constant payable nonpayable".split(" "))),xc(t,It("pure view payable nonpayable".split(" "))),t.has("view")?"view":t.has("pure")?"pure":t.has("payable")?"payable":t.has("nonpayable")?"nonpayable":t.has("constant")?"view":"nonpayable"}function He(r,t){return r.popParams().map(e=>yt.from(e,t))}function bu(r){if(r.peekType("AT")){if(r.pop(),r.peekType("NUMBER"))return k(r.pop().text);throw new Error("invalid gas")}return null}function nr(r){if(r.length)throw new Error(`unexpected tokens at offset ${r.offset}: ${r.toString()}`)}const Np=new RegExp(/^(.*)\[([0-9]*)\]$/);function Pc(r){const t=r.match(wu);if(g(t,"invalid type","type",r),r==="uint")return"uint256";if(r==="int")return"int256";if(t[2]){const e=parseInt(t[2]);g(e!==0&&e<=32,"invalid bytes length","type",r)}else if(t[3]){const e=parseInt(t[3]);g(e!==0&&e<=256&&e%8===0,"invalid numeric width","type",r)}return r}const et={},St=Symbol.for("_ethers_internal"),Nc="_ParamTypeInternal",Bc="_ErrorInternal",Cc="_EventInternal",Ic="_ConstructorInternal",Oc="_FallbackInternal",vc="_FunctionInternal",kc="_StructInternal";var Yr,Ei;const Jt=class Jt{constructor(t,e,n,s,i,o,a,c){A(this,Yr);w(this,"name");w(this,"type");w(this,"baseType");w(this,"indexed");w(this,"components");w(this,"arrayLength");w(this,"arrayChildren");if(ji(t,et,"ParamType"),Object.defineProperty(this,St,{value:Nc}),o&&(o=Object.freeze(o.slice())),s==="array"){if(a==null||c==null)throw new Error("")}else if(a!=null||c!=null)throw new Error("");if(s==="tuple"){if(o==null)throw new Error("")}else if(o!=null)throw new Error("");L(this,{name:e,type:n,baseType:s,indexed:i,components:o,arrayLength:a,arrayChildren:c})}format(t){if(t==null&&(t="sighash"),t==="json"){const n=this.name||"";if(this.isArray()){const i=JSON.parse(this.arrayChildren.format("json"));return i.name=n,i.type+=`[${this.arrayLength<0?"":String(this.arrayLength)}]`,JSON.stringify(i)}const s={type:this.baseType==="tuple"?"tuple":this.type,name:n};return typeof this.indexed=="boolean"&&(s.indexed=this.indexed),this.isTuple()&&(s.components=this.components.map(i=>JSON.parse(i.format(t)))),JSON.stringify(s)}let e="";return this.isArray()?(e+=this.arrayChildren.format(t),e+=`[${this.arrayLength<0?"":String(this.arrayLength)}]`):this.isTuple()?e+="("+this.components.map(n=>n.format(t)).join(t==="full"?", ":",")+")":e+=this.type,t!=="sighash"&&(this.indexed===!0&&(e+=" indexed"),t==="full"&&this.name&&(e+=" "+this.name)),e}isArray(){return this.baseType==="array"}isTuple(){return this.baseType==="tuple"}isIndexable(){return this.indexed!=null}walk(t,e){if(this.isArray()){if(!Array.isArray(t))throw new Error("invalid array value");if(this.arrayLength!==-1&&t.length!==this.arrayLength)throw new Error("array is wrong length");const n=this;return t.map(s=>n.arrayChildren.walk(s,e))}if(this.isTuple()){if(!Array.isArray(t))throw new Error("invalid tuple value");if(t.length!==this.components.length)throw new Error("array is wrong length");const n=this;return t.map((s,i)=>n.components[i].walk(s,e))}return e(this.type,t)}async walkAsync(t,e){const n=[],s=[t];return C(this,Yr,Ei).call(this,n,t,e,i=>{s[0]=i}),n.length&&await Promise.all(n),s[0]}static from(t,e){if(Jt.isParamType(t))return t;if(typeof t=="string")try{return Jt.from(En(t),e)}catch{g(!1,"invalid param type","obj",t)}else if(t instanceof oe){let a="",c="",l=null;Ve(t,It(["tuple"])).has("tuple")||t.peekType("OPEN_PAREN")?(c="tuple",l=t.popParams().map(y=>Jt.from(y)),a=`tuple(${l.map(y=>y.format()).join(",")})`):(a=Pc(t.popType("TYPE")),c=a);let f=null,h=null;for(;t.length&&t.peekType("BRACKET");){const y=t.pop();f=new Jt(et,"",a,c,null,l,h,f),h=y.value,a+=y.text,c="array",l=null}let p=null;if(Ve(t,mp).has("indexed")){if(!e)throw new Error("");p=!0}const b=t.peekType("ID")?t.pop().text:"";if(t.length)throw new Error("leftover tokens");return new Jt(et,b,a,c,p,l,h,f)}const n=t.name;g(!n||typeof n=="string"&&n.match(yu),"invalid name","obj.name",n);let s=t.indexed;s!=null&&(g(e,"parameter cannot be indexed","obj.indexed",t.indexed),s=!!s);let i=t.type,o=i.match(Np);if(o){const a=parseInt(o[2]||"-1"),c=Jt.from({type:o[1],components:t.components});return new Jt(et,n||"",i,"array",s,null,a,c)}if(i==="tuple"||i.startsWith("tuple(")||i.startsWith("(")){const a=t.components!=null?t.components.map(l=>Jt.from(l)):null;return new Jt(et,n||"",i,"tuple",s,a,null,null)}return i=Pc(t.type),new Jt(et,n||"",i,i,s,null,null,null)}static isParamType(t){return t&&t[St]===Nc}};Yr=new WeakSet,Ei=function(t,e,n,s){if(this.isArray()){if(!Array.isArray(e))throw new Error("invalid array value");if(this.arrayLength!==-1&&e.length!==this.arrayLength)throw new Error("array is wrong length");const o=this.arrayChildren,a=e.slice();a.forEach((c,l)=>{var f;C(f=o,Yr,Ei).call(f,t,c,n,h=>{a[l]=h})}),s(a);return}if(this.isTuple()){const o=this.components;let a;if(Array.isArray(e))a=e.slice();else{if(e==null||typeof e!="object")throw new Error("invalid tuple value");a=o.map(c=>{if(!c.name)throw new Error("cannot use object value with unnamed components");if(!(c.name in e))throw new Error(`missing value for component ${c.name}`);return e[c.name]})}if(a.length!==this.components.length)throw new Error("array is wrong length");a.forEach((c,l)=>{var f;C(f=o[l],Yr,Ei).call(f,t,c,n,h=>{a[l]=h})}),s(a);return}const i=n(this.type,e);i.then?t.push(async function(){s(await i)}()):s(i)};let yt=Jt;class rr{constructor(t,e,n){w(this,"type");w(this,"inputs");ji(t,et,"Fragment"),n=Object.freeze(n.slice()),L(this,{type:e,inputs:n})}static from(t){if(typeof t=="string"){try{rr.from(JSON.parse(t))}catch{}return rr.from(En(t))}if(t instanceof oe)switch(t.peekKeyword(gu)){case"constructor":return Me.from(t);case"error":return Rt.from(t);case"event":return Ae.from(t);case"fallback":case"receive":return Be.from(t);case"function":return be.from(t);case"struct":return tr.from(t)}else if(typeof t=="object"){switch(t.type){case"constructor":return Me.from(t);case"error":return Rt.from(t);case"event":return Ae.from(t);case"fallback":case"receive":return Be.from(t);case"function":return be.from(t);case"struct":return tr.from(t)}P(!1,`unsupported type: ${t.type}`,"UNSUPPORTED_OPERATION",{operation:"Fragment.from"})}g(!1,"unsupported frgament object","obj",t)}static isConstructor(t){return Me.isFragment(t)}static isError(t){return Rt.isFragment(t)}static isEvent(t){return Ae.isFragment(t)}static isFunction(t){return be.isFragment(t)}static isStruct(t){return tr.isFragment(t)}}class io extends rr{constructor(e,n,s,i){super(e,n,i);w(this,"name");g(typeof s=="string"&&s.match(yu),"invalid identifier","name",s),i=Object.freeze(i.slice()),L(this,{name:s})}}function Vs(r,t){return"("+t.map(e=>e.format(r)).join(r==="full"?", ":",")+")"}class Rt extends io{constructor(t,e,n){super(t,"error",e,n),Object.defineProperty(this,St,{value:Bc})}get selector(){return er(this.format("sighash")).substring(0,10)}format(t){if(t==null&&(t="sighash"),t==="json")return JSON.stringify({type:"error",name:this.name,inputs:this.inputs.map(n=>JSON.parse(n.format(t)))});const e=[];return t!=="sighash"&&e.push("error"),e.push(this.name+Vs(t,this.inputs)),e.join(" ")}static from(t){if(Rt.isFragment(t))return t;if(typeof t=="string")return Rt.from(En(t));if(t instanceof oe){const e=so("error",t),n=He(t);return nr(t),new Rt(et,e,n)}return new Rt(et,t.name,t.inputs?t.inputs.map(yt.from):[])}static isFragment(t){return t&&t[St]===Bc}}class Ae extends io{constructor(e,n,s,i){super(e,"event",n,s);w(this,"anonymous");Object.defineProperty(this,St,{value:Cc}),L(this,{anonymous:i})}get topicHash(){return er(this.format("sighash"))}format(e){if(e==null&&(e="sighash"),e==="json")return JSON.stringify({type:"event",anonymous:this.anonymous,name:this.name,inputs:this.inputs.map(s=>JSON.parse(s.format(e)))});const n=[];return e!=="sighash"&&n.push("event"),n.push(this.name+Vs(e,this.inputs)),e!=="sighash"&&this.anonymous&&n.push("anonymous"),n.join(" ")}static getTopicHash(e,n){return n=(n||[]).map(i=>yt.from(i)),new Ae(et,e,n,!1).topicHash}static from(e){if(Ae.isFragment(e))return e;if(typeof e=="string")try{return Ae.from(En(e))}catch{g(!1,"invalid event fragment","obj",e)}else if(e instanceof oe){const n=so("event",e),s=He(e,!0),i=!!Ve(e,It(["anonymous"])).has("anonymous");return nr(e),new Ae(et,n,s,i)}return new Ae(et,e.name,e.inputs?e.inputs.map(n=>yt.from(n,!0)):[],!!e.anonymous)}static isFragment(e){return e&&e[St]===Cc}}class Me extends rr{constructor(e,n,s,i,o){super(e,n,s);w(this,"payable");w(this,"gas");Object.defineProperty(this,St,{value:Ic}),L(this,{payable:i,gas:o})}format(e){if(P(e!=null&&e!=="sighash","cannot format a constructor for sighash","UNSUPPORTED_OPERATION",{operation:"format(sighash)"}),e==="json")return JSON.stringify({type:"constructor",stateMutability:this.payable?"payable":"undefined",payable:this.payable,gas:this.gas!=null?this.gas:void 0,inputs:this.inputs.map(s=>JSON.parse(s.format(e)))});const n=[`constructor${Vs(e,this.inputs)}`];return this.payable&&n.push("payable"),this.gas!=null&&n.push(`@${this.gas.toString()}`),n.join(" ")}static from(e){if(Me.isFragment(e))return e;if(typeof e=="string")try{return Me.from(En(e))}catch{g(!1,"invalid constuctor fragment","obj",e)}else if(e instanceof oe){Ve(e,It(["constructor"]));const n=He(e),s=!!Ve(e,pp).has("payable"),i=bu(e);return nr(e),new Me(et,"constructor",n,s,i)}return new Me(et,"constructor",e.inputs?e.inputs.map(yt.from):[],!!e.payable,e.gas!=null?e.gas:null)}static isFragment(e){return e&&e[St]===Ic}}class Be extends rr{constructor(e,n,s){super(e,"fallback",n);w(this,"payable");Object.defineProperty(this,St,{value:Oc}),L(this,{payable:s})}format(e){const n=this.inputs.length===0?"receive":"fallback";if(e==="json"){const s=this.payable?"payable":"nonpayable";return JSON.stringify({type:n,stateMutability:s})}return`${n}()${this.payable?" payable":""}`}static from(e){if(Be.isFragment(e))return e;if(typeof e=="string")try{return Be.from(En(e))}catch{g(!1,"invalid fallback fragment","obj",e)}else if(e instanceof oe){const n=e.toString(),s=e.peekKeyword(It(["fallback","receive"]));if(g(s,"type must be fallback or receive","obj",n),e.popKeyword(It(["fallback","receive"]))==="receive"){const c=He(e);return g(c.length===0,"receive cannot have arguments","obj.inputs",c),Ve(e,It(["payable"])),nr(e),new Be(et,[],!0)}let o=He(e);o.length?g(o.length===1&&o[0].type==="bytes","invalid fallback inputs","obj.inputs",o.map(c=>c.format("minimal")).join(", ")):o=[yt.from("bytes")];const a=Au(e);if(g(a==="nonpayable"||a==="payable","fallback cannot be constants","obj.stateMutability",a),Ve(e,It(["returns"])).has("returns")){const c=He(e);g(c.length===1&&c[0].type==="bytes","invalid fallback outputs","obj.outputs",c.map(l=>l.format("minimal")).join(", "))}return nr(e),new Be(et,o,a==="payable")}if(e.type==="receive")return new Be(et,[],!0);if(e.type==="fallback"){const n=[yt.from("bytes")],s=e.stateMutability==="payable";return new Be(et,n,s)}g(!1,"invalid fallback description","obj",e)}static isFragment(e){return e&&e[St]===Oc}}class be extends io{constructor(e,n,s,i,o,a){super(e,"function",n,i);w(this,"constant");w(this,"outputs");w(this,"stateMutability");w(this,"payable");w(this,"gas");Object.defineProperty(this,St,{value:vc}),o=Object.freeze(o.slice()),L(this,{constant:s==="view"||s==="pure",gas:a,outputs:o,payable:s==="payable",stateMutability:s})}get selector(){return er(this.format("sighash")).substring(0,10)}format(e){if(e==null&&(e="sighash"),e==="json")return JSON.stringify({type:"function",name:this.name,constant:this.constant,stateMutability:this.stateMutability!=="nonpayable"?this.stateMutability:void 0,payable:this.payable,gas:this.gas!=null?this.gas:void 0,inputs:this.inputs.map(s=>JSON.parse(s.format(e))),outputs:this.outputs.map(s=>JSON.parse(s.format(e)))});const n=[];return e!=="sighash"&&n.push("function"),n.push(this.name+Vs(e,this.inputs)),e!=="sighash"&&(this.stateMutability!=="nonpayable"&&n.push(this.stateMutability),this.outputs&&this.outputs.length&&(n.push("returns"),n.push(Vs(e,this.outputs))),this.gas!=null&&n.push(`@${this.gas.toString()}`)),n.join(" ")}static getSelector(e,n){return n=(n||[]).map(i=>yt.from(i)),new be(et,e,"view",n,[],null).selector}static from(e){if(be.isFragment(e))return e;if(typeof e=="string")try{return be.from(En(e))}catch{g(!1,"invalid function fragment","obj",e)}else if(e instanceof oe){const s=so("function",e),i=He(e),o=Au(e);let a=[];Ve(e,It(["returns"])).has("returns")&&(a=He(e));const c=bu(e);return nr(e),new be(et,s,o,i,a,c)}let n=e.stateMutability;return n==null&&(n="payable",typeof e.constant=="boolean"?(n="view",e.constant||(n="payable",typeof e.payable=="boolean"&&!e.payable&&(n="nonpayable"))):typeof e.payable=="boolean"&&!e.payable&&(n="nonpayable")),new be(et,e.name,n,e.inputs?e.inputs.map(yt.from):[],e.outputs?e.outputs.map(yt.from):[],e.gas!=null?e.gas:null)}static isFragment(e){return e&&e[St]===vc}}class tr extends io{constructor(t,e,n){super(t,"struct",e,n),Object.defineProperty(this,St,{value:kc})}format(){throw new Error("@TODO")}static from(t){if(typeof t=="string")try{return tr.from(En(t))}catch{g(!1,"invalid struct fragment","obj",t)}else if(t instanceof oe){const e=so("struct",t),n=He(t);return nr(t),new tr(et,e,n)}return new tr(et,t.name,t.inputs?t.inputs.map(yt.from):[])}static isFragment(t){return t&&t[St]===kc}}const ae=new Map;ae.set(0,"GENERIC_PANIC");ae.set(1,"ASSERT_FALSE");ae.set(17,"OVERFLOW");ae.set(18,"DIVIDE_BY_ZERO");ae.set(33,"ENUM_RANGE_ERROR");ae.set(34,"BAD_STORAGE_DATA");ae.set(49,"STACK_UNDERFLOW");ae.set(50,"ARRAY_RANGE_ERROR");ae.set(65,"OUT_OF_MEMORY");ae.set(81,"UNINITIALIZED_FUNCTION_CALL");const Bp=new RegExp(/^bytes([0-9]*)$/),Cp=new RegExp(/^(u?int)([0-9]*)$/);let Po=null,Rc=1024;function Ip(r,t,e,n){let s="missing revert data",i=null;const o=null;let a=null;if(e){s="execution reverted";const l=G(e);if(e=I(e),l.length===0)s+=" (no data present; likely require(false) occurred",i="require(false)";else if(l.length%32!==4)s+=" (could not decode reason; invalid data length)";else if(I(l.slice(0,4))==="0x08c379a0")try{i=n.decode(["string"],l.slice(4))[0],a={signature:"Error(string)",name:"Error",args:[i]},s+=`: ${JSON.stringify(i)}`}catch{s+=" (could not decode reason; invalid string data)"}else if(I(l.slice(0,4))==="0x4e487b71")try{const f=Number(n.decode(["uint256"],l.slice(4))[0]);a={signature:"Panic(uint256)",name:"Panic",args:[f]},i=`Panic due to ${ae.get(f)||"UNKNOWN"}(${f})`,s+=`: ${i}`}catch{s+=" (could not decode panic code)"}else s+=" (unknown custom error)"}const c={to:t.to?W(t.to):null,data:t.data||"0x"};return t.from&&(c.from=W(t.from)),tt(s,"CALL_EXCEPTION",{action:r,data:e,reason:i,transaction:c,invocation:o,revert:a})}var rn,gr;const Ji=class Ji{constructor(){A(this,rn)}getDefaultValue(t){const e=t.map(s=>C(this,rn,gr).call(this,yt.from(s)));return new pi(e,"_").defaultValue()}encode(t,e){jc(e.length,t.length,"types/values length mismatch");const n=t.map(o=>C(this,rn,gr).call(this,yt.from(o))),s=new pi(n,"_"),i=new Ro;return s.encode(i,e),i.data}decode(t,e,n){const s=t.map(o=>C(this,rn,gr).call(this,yt.from(o)));return new pi(s,"_").decode(new To(e,n,Rc))}static _setDefaultMaxInflation(t){g(typeof t=="number"&&Number.isInteger(t),"invalid defaultMaxInflation factor","value",t),Rc=t}static defaultAbiCoder(){return Po==null&&(Po=new Ji),Po}static getBuiltinCallException(t,e,n){return Ip(t,e,n,Ji.defaultAbiCoder())}};rn=new WeakSet,gr=function(t){if(t.isArray())return new Kh(C(this,rn,gr).call(this,t.arrayChildren),t.arrayLength,t.name);if(t.isTuple())return new pi(t.components.map(n=>C(this,rn,gr).call(this,n)),t.name);switch(t.baseType){case"address":return new zh(t.name);case"bool":return new _h(t.name);case"string":return new ed(t.name);case"bytes":return new Zh(t.name);case"":return new Yh(t.name)}let e=t.type.match(Cp);if(e){let n=parseInt(e[2]||"256");return g(n!==0&&n<=256&&n%8===0,"invalid "+e[1]+" bit length","param",t),new td(n/8,e[1]==="int",t.name)}if(e=t.type.match(Bp),e){let n=parseInt(e[1]);return g(n!==0&&n<=32,"invalid bytes length","param",t),new jh(n,t.name)}g(!1,"invalid type","type",t.type)};let zs=Ji;class Op{constructor(t,e,n){w(this,"fragment");w(this,"name");w(this,"signature");w(this,"topic");w(this,"args");const s=t.name,i=t.format();L(this,{fragment:t,name:s,signature:i,topic:e,args:n})}}class vp{constructor(t,e,n,s){w(this,"fragment");w(this,"name");w(this,"args");w(this,"signature");w(this,"selector");w(this,"value");const i=t.name,o=t.format();L(this,{fragment:t,name:i,args:n,signature:o,selector:e,value:s})}}class kp{constructor(t,e,n){w(this,"fragment");w(this,"name");w(this,"args");w(this,"signature");w(this,"selector");const s=t.name,i=t.format();L(this,{fragment:t,name:s,args:n,signature:i,selector:e})}}class Tc{constructor(t){w(this,"hash");w(this,"_isIndexed");L(this,{hash:t,_isIndexed:!0})}static isIndexed(t){return!!(t&&t._isIndexed)}}const Sc={0:"generic panic",1:"assert(false)",17:"arithmetic overflow",18:"division or modulo by zero",33:"enum overflow",34:"invalid encoded storage byte array accessed",49:"out-of-bounds array access; popping on an empty array",50:"out-of-bounds access of an array or bytesN",65:"out of memory",81:"uninitialized function"},Uc={"0x08c379a0":{signature:"Error(string)",name:"Error",inputs:["string"],reason:r=>`reverted with reason string ${JSON.stringify(r)}`},"0x4e487b71":{signature:"Panic(uint256)",name:"Panic",inputs:["uint256"],reason:r=>{let t="unknown panic code";return r>=0&&r<=255&&Sc[r.toString()]&&(t=Sc[r.toString()]),`reverted with panic code 0x${r.toString(16)} (${t})`}}};var de,pe,ge,wt,xe,xi,Pi;const On=class On{constructor(t){A(this,xe);w(this,"fragments");w(this,"deploy");w(this,"fallback");w(this,"receive");A(this,de);A(this,pe);A(this,ge);A(this,wt);let e=[];typeof t=="string"?e=JSON.parse(t):e=t,d(this,ge,new Map),d(this,de,new Map),d(this,pe,new Map);const n=[];for(const o of e)try{n.push(rr.from(o))}catch(a){console.log(`[Warning] Invalid Fragment ${JSON.stringify(o)}:`,a.message)}L(this,{fragments:Object.freeze(n)});let s=null,i=!1;d(this,wt,this.getAbiCoder()),this.fragments.forEach((o,a)=>{let c;switch(o.type){case"constructor":if(this.deploy){console.log("duplicate definition - constructor");return}L(this,{deploy:o});return;case"fallback":o.inputs.length===0?i=!0:(g(!s||o.payable!==s.payable,"conflicting fallback fragments",`fragments[${a}]`,o),s=o,i=s.payable);return;case"function":c=u(this,ge);break;case"event":c=u(this,pe);break;case"error":c=u(this,de);break;default:return}const l=o.format();c.has(l)||c.set(l,o)}),this.deploy||L(this,{deploy:Me.from("constructor()")}),L(this,{fallback:s,receive:i})}format(t){const e=t?"minimal":"full";return this.fragments.map(s=>s.format(e))}formatJson(){const t=this.fragments.map(e=>e.format("json"));return JSON.stringify(t.map(e=>JSON.parse(e)))}getAbiCoder(){return zs.defaultAbiCoder()}getFunctionName(t){const e=C(this,xe,xi).call(this,t,null,!1);return g(e,"no matching function","key",t),e.name}hasFunction(t){return!!C(this,xe,xi).call(this,t,null,!1)}getFunction(t,e){return C(this,xe,xi).call(this,t,e||null,!0)}forEachFunction(t){const e=Array.from(u(this,ge).keys());e.sort((n,s)=>n.localeCompare(s));for(let n=0;nn.localeCompare(s));for(let n=0;n1){const i=s.map(o=>JSON.stringify(o.format())).join(", ");g(!1,`ambiguous error description (i.e. ${i})`,"name",t)}return s[0]}if(t=Rt.from(t).format(),t==="Error(string)")return Rt.from("error Error(string)");if(t==="Panic(uint256)")return Rt.from("error Panic(uint256)");const n=u(this,de).get(t);return n||null}forEachError(t){const e=Array.from(u(this,de).keys());e.sort((n,s)=>n.localeCompare(s));for(let n=0;ni.type==="string"?er(o):i.type==="bytes"?ot(I(o)):(i.type==="bool"&&typeof o=="boolean"?o=o?"0x01":"0x00":i.type.match(/^u?int/)?o=yn(o):i.type.match(/^bytes/)?o=Wu(o,32):i.type==="address"&&u(this,wt).encode(["address"],[o]),Qe(I(o),32));for(e.forEach((i,o)=>{const a=t.inputs[o];if(!a.indexed){g(i==null,"cannot filter non-indexed parameters; must be null","contract."+a.name,i);return}i==null?n.push(null):a.baseType==="array"||a.baseType==="tuple"?g(!1,"filtering with tuples or arrays not supported","contract."+a.name,i):Array.isArray(i)?n.push(i.map(c=>s(a,c))):n.push(s(a,i))});n.length&&n[n.length-1]===null;)n.pop();return n}encodeEventLog(t,e){if(typeof t=="string"){const o=this.getEvent(t);g(o,"unknown event","eventFragment",t),t=o}const n=[],s=[],i=[];return t.anonymous||n.push(t.topicHash),g(e.length===t.inputs.length,"event arguments/values mismatch","values",e),t.inputs.forEach((o,a)=>{const c=e[a];if(o.indexed)if(o.type==="string")n.push(er(c));else if(o.type==="bytes")n.push(ot(c));else{if(o.baseType==="tuple"||o.baseType==="array")throw new Error("not implemented");n.push(u(this,wt).encode([o.type],[c]))}else s.push(o),i.push(c)}),{data:u(this,wt).encode(s,i),topics:n}}decodeEventLog(t,e,n){if(typeof t=="string"){const m=this.getEvent(t);g(m,"unknown event","eventFragment",t),t=m}if(n!=null&&!t.anonymous){const m=t.topicHash;g(q(n[0],32)&&n[0].toLowerCase()===m,"fragment/topic mismatch","topics[0]",n[0]),n=n.slice(1)}const s=[],i=[],o=[];t.inputs.forEach((m,b)=>{m.indexed?m.type==="string"||m.type==="bytes"||m.baseType==="tuple"||m.baseType==="array"?(s.push(yt.from({type:"bytes32",name:m.name})),o.push(!0)):(s.push(m),o.push(!1)):(i.push(m),o.push(!1))});const a=n!=null?u(this,wt).decode(s,rt(n)):null,c=u(this,wt).decode(i,e,!0),l=[],f=[];let h=0,p=0;return t.inputs.forEach((m,b)=>{let y=null;if(m.indexed)if(a==null)y=new Tc(null);else if(o[b])y=new Tc(a[p++]);else try{y=a[p++]}catch(E){y=E}else try{y=c[h++]}catch(E){y=E}l.push(y),f.push(m.name||null)}),hs.fromItems(l,f)}parseTransaction(t){const e=G(t.data,"tx.data"),n=k(t.value!=null?t.value:0,"tx.value"),s=this.getFunction(I(e.slice(0,4)));if(!s)return null;const i=u(this,wt).decode(s.inputs,e.slice(4));return new vp(s,s.selector,i,n)}parseCallResult(t){throw new Error("@TODO")}parseLog(t){const e=this.getEvent(t.topics[0]);return!e||e.anonymous?null:new Op(e,e.topicHash,this.decodeEventLog(e,t.data,t.topics))}parseError(t){const e=I(t),n=this.getError(nt(e,0,4));if(!n)return null;const s=u(this,wt).decode(n.inputs,nt(e,4));return new kp(n,n.selector,s)}static from(t){return t instanceof On?t:typeof t=="string"?new On(JSON.parse(t)):typeof t.formatJson=="function"?new On(t.formatJson()):typeof t.format=="function"?new On(t.format("json")):new On(t)}};de=new WeakMap,pe=new WeakMap,ge=new WeakMap,wt=new WeakMap,xe=new WeakSet,xi=function(t,e,n){if(q(t)){const i=t.toLowerCase();for(const o of u(this,ge).values())if(i===o.selector)return o;return null}if(t.indexOf("(")===-1){const i=[];for(const[o,a]of u(this,ge))o.split("(")[0]===t&&i.push(a);if(e){const o=e.length>0?e[e.length-1]:null;let a=e.length,c=!0;Et.isTyped(o)&&o.type==="overrides"&&(c=!1,a--);for(let l=i.length-1;l>=0;l--){const f=i[l].inputs.length;f!==a&&(!c||f!==a-1)&&i.splice(l,1)}for(let l=i.length-1;l>=0;l--){const f=i[l].inputs;for(let h=0;h=f.length){if(e[h].type==="overrides")continue;i.splice(l,1);break}if(e[h].type!==f[h].baseType){i.splice(l,1);break}}}}if(i.length===1&&e&&e.length!==i[0].inputs.length){const o=e[e.length-1];(o==null||Array.isArray(o)||typeof o!="object")&&i.splice(0,1)}if(i.length===0)return null;if(i.length>1&&n){const o=i.map(a=>JSON.stringify(a.format())).join(", ");g(!1,`ambiguous function description (i.e. matches ${o})`,"key",t)}return i[0]}const s=u(this,ge).get(be.from(t).format());return s||null},Pi=function(t,e,n){if(q(t)){const i=t.toLowerCase();for(const o of u(this,pe).values())if(i===o.topicHash)return o;return null}if(t.indexOf("(")===-1){const i=[];for(const[o,a]of u(this,pe))o.split("(")[0]===t&&i.push(a);if(e){for(let o=i.length-1;o>=0;o--)i[o].inputs.length=0;o--){const a=i[o].inputs;for(let c=0;c1&&n){const o=i.map(a=>JSON.stringify(a.format())).join(", ");g(!1,`ambiguous event description (i.e. matches ${o})`,"key",t)}return i[0]}const s=u(this,pe).get(Ae.from(t).format());return s||null};let _o=On;const Eu=BigInt(0);function Nr(r){return r??null}function st(r){return r==null?null:r.toString()}class Lc{constructor(t,e,n){w(this,"gasPrice");w(this,"maxFeePerGas");w(this,"maxPriorityFeePerGas");L(this,{gasPrice:Nr(t),maxFeePerGas:Nr(e),maxPriorityFeePerGas:Nr(n)})}toJSON(){const{gasPrice:t,maxFeePerGas:e,maxPriorityFeePerGas:n}=this;return{_type:"FeeData",gasPrice:st(t),maxFeePerGas:st(e),maxPriorityFeePerGas:st(n)}}}function Mi(r){const t={};r.to&&(t.to=r.to),r.from&&(t.from=r.from),r.data&&(t.data=I(r.data));const e="chainId,gasLimit,gasPrice,maxFeePerBlobGas,maxFeePerGas,maxPriorityFeePerGas,value".split(/,/);for(const s of e)!(s in r)||r[s]==null||(t[s]=k(r[s],`request.${s}`));const n="type,nonce".split(/,/);for(const s of n)!(s in r)||r[s]==null||(t[s]=Q(r[s],`request.${s}`));return r.accessList&&(t.accessList=or(r.accessList)),r.authorizationList&&(t.authorizationList=r.authorizationList.slice()),"blockTag"in r&&(t.blockTag=r.blockTag),"enableCcipRead"in r&&(t.enableCcipRead=!!r.enableCcipRead),"customData"in r&&(t.customData=r.customData),"blobVersionedHashes"in r&&r.blobVersionedHashes&&(t.blobVersionedHashes=r.blobVersionedHashes.slice()),"kzg"in r&&(t.kzg=r.kzg),"blobs"in r&&r.blobs&&(t.blobs=r.blobs.map(s=>la(s)?I(s):Object.assign({},s))),t}var Re;class Rp{constructor(t,e){w(this,"provider");w(this,"number");w(this,"hash");w(this,"timestamp");w(this,"parentHash");w(this,"parentBeaconBlockRoot");w(this,"nonce");w(this,"difficulty");w(this,"gasLimit");w(this,"gasUsed");w(this,"stateRoot");w(this,"receiptsRoot");w(this,"blobGasUsed");w(this,"excessBlobGas");w(this,"miner");w(this,"prevRandao");w(this,"extraData");w(this,"baseFeePerGas");A(this,Re);d(this,Re,t.transactions.map(n=>typeof n!="string"?new Js(n,e):n)),L(this,{provider:e,hash:Nr(t.hash),number:t.number,timestamp:t.timestamp,parentHash:t.parentHash,parentBeaconBlockRoot:t.parentBeaconBlockRoot,nonce:t.nonce,difficulty:t.difficulty,gasLimit:t.gasLimit,gasUsed:t.gasUsed,blobGasUsed:t.blobGasUsed,excessBlobGas:t.excessBlobGas,miner:t.miner,prevRandao:Nr(t.prevRandao),extraData:t.extraData,baseFeePerGas:Nr(t.baseFeePerGas),stateRoot:t.stateRoot,receiptsRoot:t.receiptsRoot})}get transactions(){return u(this,Re).map(t=>typeof t=="string"?t:t.hash)}get prefetchedTransactions(){const t=u(this,Re).slice();return t.length===0?[]:(P(typeof t[0]=="object","transactions were not prefetched with block request","UNSUPPORTED_OPERATION",{operation:"transactionResponses()"}),t)}toJSON(){const{baseFeePerGas:t,difficulty:e,extraData:n,gasLimit:s,gasUsed:i,hash:o,miner:a,prevRandao:c,nonce:l,number:f,parentHash:h,parentBeaconBlockRoot:p,stateRoot:m,receiptsRoot:b,timestamp:y,transactions:E}=this;return{_type:"Block",baseFeePerGas:st(t),difficulty:st(e),extraData:n,gasLimit:st(s),gasUsed:st(i),blobGasUsed:st(this.blobGasUsed),excessBlobGas:st(this.excessBlobGas),hash:o,miner:a,prevRandao:c,nonce:l,number:f,parentHash:h,timestamp:y,parentBeaconBlockRoot:p,stateRoot:m,receiptsRoot:b,transactions:E}}[Symbol.iterator](){let t=0;const e=this.transactions;return{next:()=>tnew oi(s,e))));let n=Eu;t.effectiveGasPrice!=null?n=t.effectiveGasPrice:t.gasPrice!=null&&(n=t.gasPrice),L(this,{provider:e,to:t.to,from:t.from,contractAddress:t.contractAddress,hash:t.hash,index:t.index,blockHash:t.blockHash,blockNumber:t.blockNumber,logsBloom:t.logsBloom,gasUsed:t.gasUsed,cumulativeGasUsed:t.cumulativeGasUsed,blobGasUsed:t.blobGasUsed,gasPrice:n,blobGasPrice:t.blobGasPrice,type:t.type,status:t.status,root:t.root})}get logs(){return u(this,Xs)}toJSON(){const{to:t,from:e,contractAddress:n,hash:s,index:i,blockHash:o,blockNumber:a,logsBloom:c,logs:l,status:f,root:h}=this;return{_type:"TransactionReceipt",blockHash:o,blockNumber:a,contractAddress:n,cumulativeGasUsed:st(this.cumulativeGasUsed),from:e,gasPrice:st(this.gasPrice),blobGasUsed:st(this.blobGasUsed),blobGasPrice:st(this.blobGasPrice),gasUsed:st(this.gasUsed),hash:s,index:i,logs:l,logsBloom:c,root:h,status:f,to:t}}get length(){return this.logs.length}[Symbol.iterator](){let t=0;return{next:()=>t{if(a)return null;const{blockNumber:p,nonce:m}=await Pt({blockNumber:this.provider.getBlockNumber(),nonce:this.provider.getTransactionCount(this.from)});if(m{if(p==null||p.status!==0)return p;P(!1,"transaction execution reverted","CALL_EXCEPTION",{action:"sendTransaction",data:null,reason:null,invocation:null,revert:null,transaction:{to:p.to,from:p.from,data:""},receipt:p})},f=await this.provider.getTransactionReceipt(this.hash);if(n===0)return l(f);if(f){if(n===1||await f.confirmations()>=n)return l(f)}else if(await c(),n===0)return null;return await new Promise((p,m)=>{const b=[],y=()=>{b.forEach(x=>x())};if(b.push(()=>{a=!0}),s>0){const x=setTimeout(()=>{y(),m(tt("wait for transaction timeout","TIMEOUT"))},s);b.push(()=>{clearTimeout(x)})}const E=async x=>{if(await x.confirmations()>=n){y();try{p(l(x))}catch(O){m(O)}}};if(b.push(()=>{this.provider.off(this.hash,E)}),this.provider.on(this.hash,E),i>=0){const x=async()=>{try{await c()}catch(O){if(mt(O,"TRANSACTION_REPLACED")){y(),m(O);return}}a||this.provider.once("block",x)};b.push(()=>{this.provider.off("block",x)}),this.provider.once("block",x)}})}isMined(){return this.blockHash!=null}isLegacy(){return this.type===0}isBerlin(){return this.type===1}isLondon(){return this.type===2}isCancun(){return this.type===3}removedEvent(){return P(this.isMined(),"unmined transaction canot be orphaned","UNSUPPORTED_OPERATION",{operation:"removeEvent()"}),Nu(this)}reorderedEvent(t){return P(this.isMined(),"unmined transaction canot be orphaned","UNSUPPORTED_OPERATION",{operation:"removeEvent()"}),P(!t||t.isMined(),"unmined 'other' transaction canot be orphaned","UNSUPPORTED_OPERATION",{operation:"removeEvent()"}),Pu(this,t)}replaceableTransaction(t){g(Number.isInteger(t)&&t>=0,"invalid startBlock","startBlock",t);const e=new ka(this,this.provider);return d(e,sn,t),e}};sn=new WeakMap;let Js=ka;function Tp(r){return{orphan:"drop-block",hash:r.hash,number:r.number}}function Pu(r,t){return{orphan:"reorder-transaction",tx:r,other:t}}function Nu(r){return{orphan:"drop-transaction",tx:r}}function Sp(r){return{orphan:"drop-log",log:{transactionHash:r.transactionHash,blockHash:r.blockHash,blockNumber:r.blockNumber,address:r.address,data:r.data,topics:Object.freeze(r.topics.slice()),index:r.index}}}class Pa extends oi{constructor(e,n,s){super(e,e.provider);w(this,"interface");w(this,"fragment");w(this,"args");const i=n.decodeEventLog(s,e.data,e.topics);L(this,{args:i,fragment:s,interface:n})}get eventName(){return this.fragment.name}get eventSignature(){return this.fragment.format()}}class Bu extends oi{constructor(e,n){super(e,e.provider);w(this,"error");L(this,{error:n})}}var Xr;class Up extends xu{constructor(e,n,s){super(s,n);A(this,Xr);d(this,Xr,e)}get logs(){return super.logs.map(e=>{const n=e.topics.length?u(this,Xr).getEvent(e.topics[0]):null;if(n)try{return new Pa(e,u(this,Xr),n)}catch(s){return new Bu(e,s)}return e})}}Xr=new WeakMap;var qs;class Na extends Js{constructor(e,n,s){super(s,n);A(this,qs);d(this,qs,e)}async wait(e,n){const s=await super.wait(e,n);return s==null?null:new Up(u(this,qs),this.provider,s)}}qs=new WeakMap;class Cu extends qc{constructor(e,n,s,i){super(e,n,s);w(this,"log");L(this,{log:i})}async getBlock(){return await this.log.getBlock()}async getTransaction(){return await this.log.getTransaction()}async getTransactionReceipt(){return await this.log.getTransactionReceipt()}}class Lp extends Cu{constructor(t,e,n,s,i){super(t,e,n,new Pa(i,t.interface,s));const o=t.interface.decodeEventLog(s,this.log.data,this.log.topics);L(this,{args:o,fragment:s})}get eventName(){return this.fragment.name}get eventSignature(){return this.fragment.format()}}const Fc=BigInt(0);function Iu(r){return r&&typeof r.call=="function"}function Ou(r){return r&&typeof r.estimateGas=="function"}function oo(r){return r&&typeof r.resolveName=="function"}function vu(r){return r&&typeof r.sendTransaction=="function"}function ku(r){if(r!=null){if(oo(r))return r;if(r.provider)return r.provider}}var $s;class Fp{constructor(t,e,n){A(this,$s);w(this,"fragment");if(L(this,{fragment:e}),e.inputs.lengthn[c]==null?null:a.walkAsync(n[c],(f,h)=>f==="address"?Array.isArray(h)?Promise.all(h.map(p=>Ct(p,i))):Ct(h,i):h)));return t.interface.encodeFilterTopics(e,o)}())}getTopicFilter(){return u(this,$s)}}$s=new WeakMap;function sr(r,t){return r==null?null:typeof r[t]=="function"?r:r.provider&&typeof r.provider[t]=="function"?r.provider:null}function Tn(r){return r==null?null:r.provider||null}async function Ru(r,t){const e=Et.dereference(r,"overrides");g(typeof e=="object","invalid overrides parameter","overrides",r);const n=Mi(e);return g(n.to==null||(t||[]).indexOf("to")>=0,"cannot override to","overrides.to",n.to),g(n.data==null||(t||[]).indexOf("data")>=0,"cannot override data","overrides.data",n.data),n.from&&(n.from=n.from),n}async function Dp(r,t,e){const n=sr(r,"resolveName"),s=oo(n)?n:null;return await Promise.all(t.map((i,o)=>i.walkAsync(e[o],(a,c)=>(c=Et.dereference(c,a),a==="address"?Ct(c,s):c))))}function Mp(r){const t=async function(o){const a=await Ru(o,["data"]);a.to=await r.getAddress(),a.from&&(a.from=await Ct(a.from,ku(r.runner)));const c=r.interface,l=k(a.value||Fc,"overrides.value")===Fc,f=(a.data||"0x")==="0x";c.fallback&&!c.fallback.payable&&c.receive&&!f&&!l&&g(!1,"cannot send data to receive or send value to non-payable fallback","overrides",o),g(c.fallback||f,"cannot send data to receive-only contract","overrides.data",a.data);const h=c.receive||c.fallback&&c.fallback.payable;return g(h||l,"cannot send value to non-payable fallback","overrides.value",a.value),g(c.fallback||f,"cannot send data to receive-only contract","overrides.data",a.data),a},e=async function(o){const a=sr(r.runner,"call");P(Iu(a),"contract runner does not support calling","UNSUPPORTED_OPERATION",{operation:"call"});const c=await t(o);try{return await a.call(c)}catch(l){throw ca(l)&&l.data?r.interface.makeError(l.data,c):l}},n=async function(o){const a=r.runner;P(vu(a),"contract runner does not support sending transactions","UNSUPPORTED_OPERATION",{operation:"sendTransaction"});const c=await a.sendTransaction(await t(o)),l=Tn(r.runner);return new Na(r.interface,l,c)},s=async function(o){const a=sr(r.runner,"estimateGas");return P(Ou(a),"contract runner does not support gas estimation","UNSUPPORTED_OPERATION",{operation:"estimateGas"}),await a.estimateGas(await t(o))},i=async o=>await n(o);return L(i,{_contract:r,estimateGas:s,populateTransaction:t,send:n,staticCall:e}),i}function Gp(r,t){const e=function(...l){const f=r.interface.getFunction(t,l);return P(f,"no matching fragment","UNSUPPORTED_OPERATION",{operation:"fragment",info:{key:t,args:l}}),f},n=async function(...l){const f=e(...l);let h={};if(f.inputs.length+1===l.length&&(h=await Ru(l.pop()),h.from&&(h.from=await Ct(h.from,ku(r.runner)))),f.inputs.length!==l.length)throw new Error("internal error: fragment inputs doesn't match arguments; should not happen");const p=await Dp(r.runner,f.inputs,l);return Object.assign({},h,await Pt({to:r.getAddress(),data:r.interface.encodeFunctionData(f,p)}))},s=async function(...l){const f=await a(...l);return f.length===1?f[0]:f},i=async function(...l){const f=r.runner;P(vu(f),"contract runner does not support sending transactions","UNSUPPORTED_OPERATION",{operation:"sendTransaction"});const h=await f.sendTransaction(await n(...l)),p=Tn(r.runner);return new Na(r.interface,p,h)},o=async function(...l){const f=sr(r.runner,"estimateGas");return P(Ou(f),"contract runner does not support gas estimation","UNSUPPORTED_OPERATION",{operation:"estimateGas"}),await f.estimateGas(await n(...l))},a=async function(...l){const f=sr(r.runner,"call");P(Iu(f),"contract runner does not support calling","UNSUPPORTED_OPERATION",{operation:"call"});const h=await n(...l);let p="0x";try{p=await f.call(h)}catch(b){throw ca(b)&&b.data?r.interface.makeError(b.data,h):b}const m=e(...l);return r.interface.decodeFunctionResult(m,p)},c=async(...l)=>e(...l).constant?await s(...l):await i(...l);return L(c,{name:r.interface.getFunctionName(t),_contract:r,_key:t,getFragment:e,estimateGas:o,populateTransaction:n,send:i,staticCall:s,staticCallResult:a}),Object.defineProperty(c,"fragment",{configurable:!1,enumerable:!0,get:()=>{const l=r.interface.getFunction(t);return P(l,"no matching fragment","UNSUPPORTED_OPERATION",{operation:"fragment",info:{key:t}}),l}}),c}function Hp(r,t){const e=function(...s){const i=r.interface.getEvent(t,s);return P(i,"no matching fragment","UNSUPPORTED_OPERATION",{operation:"fragment",info:{key:t,args:s}}),i},n=function(...s){return new Fp(r,e(...s),s)};return L(n,{name:r.interface.getEventName(t),_contract:r,_key:t,getFragment:e}),Object.defineProperty(n,"fragment",{configurable:!1,enumerable:!0,get:()=>{const s=r.interface.getEvent(t);return P(s,"no matching fragment","UNSUPPORTED_OPERATION",{operation:"fragment",info:{key:t}}),s}}),n}const Gi=Symbol.for("_ethersInternal_contract"),Tu=new WeakMap;function Qp(r,t){Tu.set(r[Gi],t)}function Dt(r){return Tu.get(r[Gi])}function Vp(r){return r&&typeof r=="object"&&"getTopicFilter"in r&&typeof r.getTopicFilter=="function"&&r.fragment}async function Ba(r,t){let e,n=null;if(Array.isArray(t)){const i=function(o){if(q(o,32))return o;const a=r.interface.getEvent(o);return g(a,"unknown fragment","name",o),a.topicHash};e=t.map(o=>o==null?null:Array.isArray(o)?o.map(i):i(o))}else t==="*"?e=[null]:typeof t=="string"?q(t,32)?e=[t]:(n=r.interface.getEvent(t),g(n,"unknown fragment","event",t),e=[n.topicHash]):Vp(t)?e=await t.getTopicFilter():"fragment"in t?(n=t.fragment,e=[n.topicHash]):g(!1,"unknown event name","event",t);e=e.map(i=>{if(i==null)return null;if(Array.isArray(i)){const o=Array.from(new Set(i.map(a=>a.toLowerCase())).values());return o.length===1?o[0]:(o.sort(),o)}return i.toLowerCase()});const s=e.map(i=>i==null?"null":Array.isArray(i)?i.join("|"):i).join("&");return{fragment:n,tag:s,topics:e}}async function vs(r,t){const{subs:e}=Dt(r);return e.get((await Ba(r,t)).tag)||null}async function Dc(r,t,e){const n=Tn(r.runner);P(n,"contract runner does not support subscribing","UNSUPPORTED_OPERATION",{operation:t});const{fragment:s,tag:i,topics:o}=await Ba(r,e),{addr:a,subs:c}=Dt(r);let l=c.get(i);if(!l){const h={address:a||r,topics:o},p=E=>{let x=s;if(x==null)try{x=r.interface.getEvent(E.topics[0])}catch{}if(x){const O=x,N=s?r.interface.decodeEventLog(s,E.data,E.topics):[];jo(r,e,N,D=>new Lp(r,D,e,O,E))}else jo(r,e,[],O=>new Cu(r,O,e,E))};let m=[];l={tag:i,listeners:[],start:()=>{m.length||m.push(n.on(h,p))},stop:async()=>{if(m.length==0)return;let E=m;m=[],await Promise.all(E),n.off(h,p)}},c.set(i,l)}return l}let Zo=Promise.resolve();async function zp(r,t,e,n){await Zo;const s=await vs(r,t);if(!s)return!1;const i=s.listeners.length;return s.listeners=s.listeners.filter(({listener:o,once:a})=>{const c=Array.from(e);n&&c.push(n(a?null:o));try{o.call(r,...c)}catch{}return!a}),s.listeners.length===0&&(s.stop(),Dt(r).subs.delete(s.tag)),i>0}async function jo(r,t,e,n){try{await Zo}catch{}const s=zp(r,t,e,n);return Zo=s,await s}const mi=["then"];var Zc;Zc=Gi;const Us=class Us{constructor(t,e,n,s){w(this,"target");w(this,"interface");w(this,"runner");w(this,"filters");w(this,Zc);w(this,"fallback");g(typeof t=="string"||Dl(t),"invalid value for Contract target","target",t),n==null&&(n=null);const i=_o.from(e);L(this,{target:t,runner:n,interface:i}),Object.defineProperty(this,Gi,{value:{}});let o,a=null,c=null;if(s){const h=Tn(n);c=new Na(this.interface,h,s)}let l=new Map;if(typeof t=="string")if(q(t))a=t,o=Promise.resolve(t);else{const h=sr(n,"resolveName");if(!oo(h))throw tt("contract runner does not support name resolution","UNSUPPORTED_OPERATION",{operation:"resolveName"});o=h.resolveName(t).then(p=>{if(p==null)throw tt("an ENS name used for a contract target must be correctly configured","UNCONFIGURED_NAME",{value:t});return Dt(this).addr=p,p})}else o=t.getAddress().then(h=>{if(h==null)throw new Error("TODO");return Dt(this).addr=h,h});Qp(this,{addrPromise:o,addr:a,deployTx:c,subs:l});const f=new Proxy({},{get:(h,p,m)=>{if(typeof p=="symbol"||mi.indexOf(p)>=0)return Reflect.get(h,p,m);try{return this.getEvent(p)}catch(b){if(!mt(b,"INVALID_ARGUMENT")||b.argument!=="key")throw b}},has:(h,p)=>mi.indexOf(p)>=0?Reflect.has(h,p):Reflect.has(h,p)||this.interface.hasEvent(String(p))});return L(this,{filters:f}),L(this,{fallback:i.receive||i.fallback?Mp(this):null}),new Proxy(this,{get:(h,p,m)=>{if(typeof p=="symbol"||p in h||mi.indexOf(p)>=0)return Reflect.get(h,p,m);try{return h.getFunction(p)}catch(b){if(!mt(b,"INVALID_ARGUMENT")||b.argument!=="key")throw b}},has:(h,p)=>typeof p=="symbol"||p in h||mi.indexOf(p)>=0?Reflect.has(h,p):h.interface.hasFunction(p)})}connect(t){return new Us(this.target,this.interface,t)}attach(t){return new Us(t,this.interface,this.runner)}async getAddress(){return await Dt(this).addrPromise}async getDeployedCode(){const t=Tn(this.runner);P(t,"runner does not support .provider","UNSUPPORTED_OPERATION",{operation:"getDeployedCode"});const e=await t.getCode(await this.getAddress());return e==="0x"?null:e}async waitForDeployment(){const t=this.deploymentTransaction();if(t)return await t.wait(),this;if(await this.getDeployedCode()!=null)return this;const n=Tn(this.runner);return P(n!=null,"contract runner does not support .provider","UNSUPPORTED_OPERATION",{operation:"waitForDeployment"}),new Promise((s,i)=>{const o=async()=>{try{if(await this.getDeployedCode()!=null)return s(this);n.once("block",o)}catch(a){i(a)}};o()})}deploymentTransaction(){return Dt(this).deployTx}getFunction(t){return typeof t!="string"&&(t=t.format()),Gp(this,t)}getEvent(t){return typeof t!="string"&&(t=t.format()),Hp(this,t)}async queryTransaction(t){throw new Error("@TODO")}async queryFilter(t,e,n){e==null&&(e=0),n==null&&(n="latest");const{addr:s,addrPromise:i}=Dt(this),o=s||await i,{fragment:a,topics:c}=await Ba(this,t),l={address:o,topics:c,fromBlock:e,toBlock:n},f=Tn(this.runner);return P(f,"contract runner does not have a provider","UNSUPPORTED_OPERATION",{operation:"queryFilter"}),(await f.getLogs(l)).map(h=>{let p=a;if(p==null)try{p=this.interface.getEvent(h.topics[0])}catch{}if(p)try{return new Pa(h,this.interface,p)}catch(m){return new Bu(h,m)}return new oi(h,f)})}async on(t,e){const n=await Dc(this,"on",t);return n.listeners.push({listener:e,once:!1}),n.start(),this}async once(t,e){const n=await Dc(this,"once",t);return n.listeners.push({listener:e,once:!0}),n.start(),this}async emit(t,...e){return await jo(this,t,e,null)}async listenerCount(t){if(t){const s=await vs(this,t);return s?s.listeners.length:0}const{subs:e}=Dt(this);let n=0;for(const{listeners:s}of e.values())n+=s.length;return n}async listeners(t){if(t){const s=await vs(this,t);return s?s.listeners.map(({listener:i})=>i):[]}const{subs:e}=Dt(this);let n=[];for(const{listeners:s}of e.values())n=n.concat(s.map(({listener:i})=>i));return n}async off(t,e){const n=await vs(this,t);if(!n)return this;if(e){const s=n.listeners.map(({listener:i})=>i).indexOf(e);s>=0&&n.listeners.splice(s,1)}return(e==null||n.listeners.length===0)&&(n.stop(),Dt(this).subs.delete(n.tag)),this}async removeAllListeners(t){if(t){const e=await vs(this,t);if(!e)return this;e.stop(),Dt(this).subs.delete(e.tag)}else{const{subs:e}=Dt(this);for(const{tag:n,stop:s}of e.values())s(),e.delete(n)}return this}async addListener(t,e){return await this.on(t,e)}async removeListener(t,e){return await this.off(t,e)}static buildClass(t){class e extends Us{constructor(s,i=null){super(s,t,i)}}return e}static from(t,e,n){return n==null&&(n=null),new this(t,e,n)}};let Wo=Us;function Jp(){return Wo}class Ss extends Jp(){}function No(r){return r.match(/^ipfs:\/\/ipfs\//i)?r=r.substring(12):r.match(/^ipfs:\/\//i)?r=r.substring(7):g(!1,"unsupported IPFS format","link",r),`https://gateway.ipfs.io/ipfs/${r}`}class Kp{constructor(t){w(this,"name");L(this,{name:t})}connect(t){return this}supportsCoinType(t){return!1}async encodeAddress(t,e){throw new Error("unsupported coin")}async decodeAddress(t,e){throw new Error("unsupported coin")}}const Su=new RegExp("^(ipfs)://(.*)$","i"),Mc=[new RegExp("^(https)://(.*)$","i"),new RegExp("^(data):(.*)$","i"),Su,new RegExp("^eip155:[0-9]+/(erc[0-9]+):(.*)$","i")];var on,Kn,an,mr,Ki,Uu;const br=class br{constructor(t,e,n){A(this,an);w(this,"provider");w(this,"address");w(this,"name");A(this,on);A(this,Kn);L(this,{provider:t,address:e,name:n}),d(this,on,null),d(this,Kn,new Ss(e,["function supportsInterface(bytes4) view returns (bool)","function resolve(bytes, bytes) view returns (bytes)","function addr(bytes32) view returns (address)","function addr(bytes32, uint) view returns (bytes)","function text(bytes32, string) view returns (string)","function contenthash(bytes32) view returns (bytes)"],t))}async supportsWildcard(){return u(this,on)==null&&d(this,on,(async()=>{try{return await u(this,Kn).supportsInterface("0x9061b923")}catch(t){if(mt(t,"CALL_EXCEPTION"))return!1;throw d(this,on,null),t}})()),await u(this,on)}async getAddress(t){if(t==null&&(t=60),t===60)try{const i=await C(this,an,mr).call(this,"addr(bytes32)");return i==null||i===Fs?null:i}catch(i){if(mt(i,"CALL_EXCEPTION"))return null;throw i}if(t>=0&&t<2147483648){let i=t+2147483648;const o=await C(this,an,mr).call(this,"addr(bytes32,uint)",[i]);if(q(o,20))return W(o)}let e=null;for(const i of this.provider.plugins)if(i instanceof Kp&&i.supportsCoinType(t)){e=i;break}if(e==null)return null;const n=await C(this,an,mr).call(this,"addr(bytes32,uint)",[t]);if(n==null||n==="0x")return null;const s=await e.decodeAddress(t,n);if(s!=null)return s;P(!1,"invalid coin data","UNSUPPORTED_OPERATION",{operation:`getAddress(${t})`,info:{coinType:t,data:n}})}async getText(t){const e=await C(this,an,mr).call(this,"text(bytes32,string)",[t]);return e==null||e==="0x"?null:e}async getContentHash(){const t=await C(this,an,mr).call(this,"contenthash(bytes32)");if(t==null||t==="0x")return null;const e=t.match(/^0x(e3010170|e5010172)(([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f]*))$/);if(e){const s=e[1]==="e3010170"?"ipfs":"ipns",i=parseInt(e[4],16);if(e[5].length===i*2)return`${s}://${qu("0x"+e[2])}`}const n=t.match(/^0xe40101fa011b20([0-9a-f]*)$/);if(n&&n[1].length===64)return`bzz://${n[1]}`;P(!1,"invalid or unsupported content hash data","UNSUPPORTED_OPERATION",{operation:"getContentHash()",info:{data:t}})}async getAvatar(){return(await this._getAvatar()).url}async _getAvatar(){const t=[{type:"name",value:this.name}];try{const e=await this.getText("avatar");if(e==null)return t.push({type:"!avatar",value:""}),{url:null,linkage:t};t.push({type:"avatar",value:e});for(let n=0;n{if(t&&e==null)return null;if(!Array.isArray(e))throw new Error("not an array");return e.map(n=>r(n))}}function ai(r,t){return e=>{const n={};for(const s in r){let i=s;if(t&&s in t&&!(i in e)){for(const o of t[s])if(o in e){i=o;break}}try{const o=r[s](e[i]);o!==void 0&&(n[s]=o)}catch(o){const a=o instanceof Error?o.message:"not-an-error";P(!1,`invalid value for value.${s} (${a})`,"BAD_DATA",{value:e})}}return n}}function _p(r){switch(r){case!0:case"true":return!0;case!1:case"false":return!1}g(!1,`invalid boolean; ${JSON.stringify(r)}`,"value",r)}function As(r){return g(q(r,!0),"invalid data","value",r),r}function gt(r){return g(q(r,32),"invalid hash","value",r),r}const Zp=ai({address:W,blockHash:gt,blockNumber:Q,data:As,index:Q,removed:z(_p,!1),topics:Ks(gt),transactionHash:gt,transactionIndex:Q},{index:["logIndex"]});function jp(r){return Zp(r)}const Wp=ai({hash:z(gt),parentHash:gt,parentBeaconBlockRoot:z(gt,null),number:Q,timestamp:Q,nonce:z(As),difficulty:k,gasLimit:k,gasUsed:k,stateRoot:z(gt,null),receiptsRoot:z(gt,null),blobGasUsed:z(k,null),excessBlobGas:z(k,null),miner:z(W),prevRandao:z(gt,null),extraData:As,baseFeePerGas:z(k)},{prevRandao:["mixHash"]});function Yp(r){const t=Wp(r);return t.transactions=r.transactions.map(e=>typeof e=="string"?e:Lu(e)),t}const Xp=ai({transactionIndex:Q,blockNumber:Q,transactionHash:gt,address:W,topics:Ks(gt),data:As,index:Q,blockHash:gt},{index:["logIndex"]});function qp(r){return Xp(r)}const $p=ai({to:z(W,null),from:z(W,null),contractAddress:z(W,null),index:Q,root:z(I),gasUsed:k,blobGasUsed:z(k,null),logsBloom:z(As),blockHash:gt,hash:gt,logs:Ks(qp),blockNumber:Q,cumulativeGasUsed:k,effectiveGasPrice:z(k),blobGasPrice:z(k,null),status:z(Q),type:z(Q,0)},{effectiveGasPrice:["gasPrice"],hash:["transactionHash"],index:["transactionIndex"]});function tg(r){return $p(r)}function Lu(r){r.to&&k(r.to)===Gc&&(r.to="0x0000000000000000000000000000000000000000");const t=ai({hash:gt,index:z(Q,void 0),type:e=>e==="0x"||e==null?0:Q(e),accessList:z(or,null),blobVersionedHashes:z(Ks(gt,!0),null),authorizationList:z(Ks(e=>{let n;if(e.signature)n=e.signature;else{let s=e.yParity;s==="0x1b"?s=0:s==="0x1c"&&(s=1),n=Object.assign({},e,{yParity:s})}return{address:W(e.address),chainId:k(e.chainId),nonce:k(e.nonce),signature:Tt.from(n)}},!1),null),blockHash:z(gt,null),blockNumber:z(Q,null),transactionIndex:z(Q,null),from:W,gasPrice:z(k),maxPriorityFeePerGas:z(k),maxFeePerGas:z(k),maxFeePerBlobGas:z(k,null),gasLimit:k,to:z(W,null),value:k,nonce:Q,data:As,creates:z(W,null),chainId:z(k,null)},{data:["input"],gasLimit:["gas"],index:["transactionIndex"]})(r);if(t.to==null&&t.creates==null&&(t.creates=Vh(t)),(r.type===1||r.type===2)&&r.accessList==null&&(t.accessList=[]),r.signature?t.signature=Tt.from(r.signature):t.signature=Tt.from(r),t.chainId==null){const e=t.signature.legacyChainId;e!=null&&(t.chainId=e)}return t.blockHash&&k(t.blockHash)===Gc&&(t.blockHash=null),t}const eg="0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e";class ci{constructor(t){w(this,"name");L(this,{name:t})}clone(){return new ci(this.name)}}class ao extends ci{constructor(e,n){e==null&&(e=0);super(`org.ethers.network.plugins.GasCost#${e||0}`);w(this,"effectiveBlock");w(this,"txBase");w(this,"txCreate");w(this,"txDataZero");w(this,"txDataNonzero");w(this,"txAccessListStorageKey");w(this,"txAccessListAddress");const s={effectiveBlock:e};function i(o,a){let c=(n||{})[o];c==null&&(c=a),g(typeof c=="number",`invalud value for ${o}`,"costs",n),s[o]=c}i("txBase",21e3),i("txCreate",32e3),i("txDataZero",4),i("txDataNonzero",16),i("txAccessListStorageKey",1900),i("txAccessListAddress",2400),L(this,s)}clone(){return new ao(this.effectiveBlock,this)}}class co extends ci{constructor(e,n){super("org.ethers.plugins.network.Ens");w(this,"address");w(this,"targetNetwork");L(this,{address:e||eg,targetNetwork:n??1})}clone(){return new co(this.address,this.targetNetwork)}}var ti,ei;class ng extends ci{constructor(e,n){super("org.ethers.plugins.network.FetchUrlFeeDataPlugin");A(this,ti);A(this,ei);d(this,ti,e),d(this,ei,n)}get url(){return u(this,ti)}get processFunc(){return u(this,ei)}clone(){return this}}ti=new WeakMap,ei=new WeakMap;const Bo=new Map;var qr,$r,cn;const Er=class Er{constructor(t,e){A(this,qr);A(this,$r);A(this,cn);d(this,qr,t),d(this,$r,k(e)),d(this,cn,new Map)}toJSON(){return{name:this.name,chainId:String(this.chainId)}}get name(){return u(this,qr)}set name(t){d(this,qr,t)}get chainId(){return u(this,$r)}set chainId(t){d(this,$r,k(t,"chainId"))}matches(t){if(t==null)return!1;if(typeof t=="string"){try{return this.chainId===k(t)}catch{}return this.name===t}if(typeof t=="number"||typeof t=="bigint"){try{return this.chainId===k(t)}catch{}return!1}if(typeof t=="object"){if(t.chainId!=null){try{return this.chainId===k(t.chainId)}catch{}return!1}return t.name!=null?this.name===t.name:!1}return!1}get plugins(){return Array.from(u(this,cn).values())}attachPlugin(t){if(u(this,cn).get(t.name))throw new Error(`cannot replace existing plugin: ${t.name} `);return u(this,cn).set(t.name,t.clone()),this}getPlugin(t){return u(this,cn).get(t)||null}getPlugins(t){return this.plugins.filter(e=>e.name.split("#")[0]===t)}clone(){const t=new Er(this.name,this.chainId);return this.plugins.forEach(e=>{t.attachPlugin(e.clone())}),t}computeIntrinsicGas(t){const e=this.getPlugin("org.ethers.plugins.network.GasCost")||new ao;let n=e.txBase;if(t.to==null&&(n+=e.txCreate),t.data)for(let s=2;s9){let s=BigInt(n[1].substring(0,9));n[1].substring(9).match(/^0+$/)||s++,n[1]=s.toString()}return BigInt(n[0]+n[1])}function Qc(r){return new ng(r,async(t,e,n)=>{n.setHeader("User-Agent","ethers");let s;try{const[i,o]=await Promise.all([n.send(),t()]);s=i;const a=s.bodyJson.standard;return{gasPrice:o.gasPrice,maxFeePerGas:Hc(a.maxFee,9),maxPriorityFeePerGas:Hc(a.maxPriorityFee,9)}}catch(i){P(!1,`error encountered with polygon gas station (${JSON.stringify(n.url)})`,"SERVER_ERROR",{request:n,response:s,error:i})}})}let Vc=!1;function rg(){if(Vc)return;Vc=!0;function r(t,e,n){const s=function(){const i=new Ee(t,e);return n.ensNetwork!=null&&i.attachPlugin(new co(null,n.ensNetwork)),i.attachPlugin(new ao),(n.plugins||[]).forEach(o=>{i.attachPlugin(o)}),i};Ee.register(t,s),Ee.register(e,s),n.altNames&&n.altNames.forEach(i=>{Ee.register(i,s)})}r("mainnet",1,{ensNetwork:1,altNames:["homestead"]}),r("ropsten",3,{ensNetwork:3}),r("rinkeby",4,{ensNetwork:4}),r("goerli",5,{ensNetwork:5}),r("kovan",42,{ensNetwork:42}),r("sepolia",11155111,{ensNetwork:11155111}),r("holesky",17e3,{ensNetwork:17e3}),r("classic",61,{}),r("classicKotti",6,{}),r("arbitrum",42161,{ensNetwork:1}),r("arbitrum-goerli",421613,{}),r("arbitrum-sepolia",421614,{}),r("base",8453,{ensNetwork:1}),r("base-goerli",84531,{}),r("base-sepolia",84532,{}),r("bnb",56,{ensNetwork:1}),r("bnbt",97,{}),r("linea",59144,{ensNetwork:1}),r("linea-goerli",59140,{}),r("linea-sepolia",59141,{}),r("matic",137,{ensNetwork:1,plugins:[Qc("https://gasstation.polygon.technology/v2")]}),r("matic-amoy",80002,{}),r("matic-mumbai",80001,{altNames:["maticMumbai","maticmum"],plugins:[Qc("https://gasstation-testnet.polygon.technology/v2")]}),r("optimism",10,{ensNetwork:1,plugins:[]}),r("optimism-goerli",420,{}),r("optimism-sepolia",11155420,{}),r("xdai",100,{ensNetwork:1})}function Yo(r){return JSON.parse(JSON.stringify(r))}var Te,Kt,ln,me,ts,Ni;class sg{constructor(t){A(this,ts);A(this,Te);A(this,Kt);A(this,ln);A(this,me);d(this,Te,t),d(this,Kt,null),d(this,ln,4e3),d(this,me,-2)}get pollingInterval(){return u(this,ln)}set pollingInterval(t){d(this,ln,t)}start(){u(this,Kt)||(d(this,Kt,u(this,Te)._setTimeout(C(this,ts,Ni).bind(this),u(this,ln))),C(this,ts,Ni).call(this))}stop(){u(this,Kt)&&(u(this,Te)._clearTimeout(u(this,Kt)),d(this,Kt,null))}pause(t){this.stop(),t&&d(this,me,-2)}resume(){this.start()}}Te=new WeakMap,Kt=new WeakMap,ln=new WeakMap,me=new WeakMap,ts=new WeakSet,Ni=async function(){try{const t=await u(this,Te).getBlockNumber();if(u(this,me)===-2){d(this,me,t);return}if(t!==u(this,me)){for(let e=u(this,me)+1;e<=t;e++){if(u(this,Kt)==null)return;await u(this,Te).emit("block",e)}d(this,me,t)}}catch{}u(this,Kt)!=null&&d(this,Kt,u(this,Te)._setTimeout(C(this,ts,Ni).bind(this),u(this,ln)))};var _n,Zn,un;class Ca{constructor(t){A(this,_n);A(this,Zn);A(this,un);d(this,_n,t),d(this,un,!1),d(this,Zn,e=>{this._poll(e,u(this,_n))})}async _poll(t,e){throw new Error("sub-classes must override this")}start(){u(this,un)||(d(this,un,!0),u(this,Zn).call(this,-2),u(this,_n).on("block",u(this,Zn)))}stop(){u(this,un)&&(d(this,un,!1),u(this,_n).off("block",u(this,Zn)))}pause(t){this.stop()}resume(){this.start()}}_n=new WeakMap,Zn=new WeakMap,un=new WeakMap;var es,Se;class ig extends Ca{constructor(e,n){super(e);A(this,es);A(this,Se);d(this,es,n),d(this,Se,-2)}pause(e){e&&d(this,Se,-2),super.pause(e)}async _poll(e,n){const s=await n.getBlock(u(this,es));s!=null&&(u(this,Se)===-2?d(this,Se,s.number):s.number>u(this,Se)&&(n.emit(u(this,es),s.number),d(this,Se,s.number)))}}es=new WeakMap,Se=new WeakMap;var _i;class og extends Ca{constructor(e,n){super(e);A(this,_i);d(this,_i,Yo(n))}async _poll(e,n){throw new Error("@TODO")}}_i=new WeakMap;var ns;class ag extends Ca{constructor(e,n){super(e);A(this,ns);d(this,ns,n)}async _poll(e,n){const s=await n.getTransactionReceipt(u(this,ns));s&&n.emit(u(this,ns),s)}}ns=new WeakMap;var Ue,rs,ss,fn,_t,Zi,Fu;class Ia{constructor(t,e){A(this,Zi);A(this,Ue);A(this,rs);A(this,ss);A(this,fn);A(this,_t);d(this,Ue,t),d(this,rs,Yo(e)),d(this,ss,C(this,Zi,Fu).bind(this)),d(this,fn,!1),d(this,_t,-2)}start(){u(this,fn)||(d(this,fn,!0),u(this,_t)===-2&&u(this,Ue).getBlockNumber().then(t=>{d(this,_t,t)}),u(this,Ue).on("block",u(this,ss)))}stop(){u(this,fn)&&(d(this,fn,!1),u(this,Ue).off("block",u(this,ss)))}pause(t){this.stop(),t&&d(this,_t,-2)}resume(){this.start()}}Ue=new WeakMap,rs=new WeakMap,ss=new WeakMap,fn=new WeakMap,_t=new WeakMap,Zi=new WeakSet,Fu=async function(t){if(u(this,_t)===-2)return;const e=Yo(u(this,rs));e.fromBlock=u(this,_t)+1,e.toBlock=t;const n=await u(this,Ue).getLogs(e);if(n.length===0){u(this,_t){if(n==null)return"null";if(typeof n=="bigint")return`bigint:${n.toString()}`;if(typeof n=="string")return n.toLowerCase();if(typeof n=="object"&&!Array.isArray(n)){const s=Object.keys(n);return s.sort(),s.reduce((i,o)=>(i[o]=n[o],i),{})}return n})}class Du{constructor(t){w(this,"name");L(this,{name:t})}start(){}stop(){}pause(t){}resume(){}}function ug(r){return JSON.parse(JSON.stringify(r))}function Xo(r){return r=Array.from(new Set(r).values()),r.sort(),r}async function Co(r,t){if(r==null)throw new Error("invalid event");if(Array.isArray(r)&&(r={topics:r}),typeof r=="string")switch(r){case"block":case"debug":case"error":case"finalized":case"network":case"pending":case"safe":return{type:r,tag:r}}if(q(r,32)){const e=r.toLowerCase();return{type:"transaction",tag:Bi("tx",{hash:e}),hash:e}}if(r.orphan){const e=r;return{type:"orphan",tag:Bi("orphan",e),filter:ug(e)}}if(r.address||r.topics){const e=r,n={topics:(e.topics||[]).map(s=>s==null?null:Array.isArray(s)?Xo(s.map(i=>i.toLowerCase())):s.toLowerCase())};if(e.address){const s=[],i=[],o=a=>{q(a)?s.push(a):i.push((async()=>{s.push(await Ct(a,t))})())};Array.isArray(e.address)?e.address.forEach(o):o(e.address),i.length&&await Promise.all(i),n.address=Xo(s.map(a=>a.toLowerCase()))}return{filter:n,tag:Bi("event",n),type:"event"}}g(!1,"unknown ProviderEvent","event",r)}function Io(){return new Date().getTime()}const fg={cacheTimeout:250,pollingInterval:4e3};var At,hn,bt,is,Qt,jn,dn,Le,ni,Zt,os,as,H,Ft,qo,$o,ks,ta,Rs,Ci;class hg{constructor(t,e){A(this,H);A(this,At);A(this,hn);A(this,bt);A(this,is);A(this,Qt);A(this,jn);A(this,dn);A(this,Le);A(this,ni);A(this,Zt);A(this,os);A(this,as);if(d(this,as,Object.assign({},fg,e||{})),t==="any")d(this,jn,!0),d(this,Qt,null);else if(t){const n=Ee.from(t);d(this,jn,!1),d(this,Qt,Promise.resolve(n)),setTimeout(()=>{this.emit("network",n,null)},0)}else d(this,jn,!1),d(this,Qt,null);d(this,Le,-1),d(this,dn,new Map),d(this,At,new Map),d(this,hn,new Map),d(this,bt,null),d(this,is,!1),d(this,ni,1),d(this,Zt,new Map),d(this,os,!1)}get pollingInterval(){return u(this,as).pollingInterval}get provider(){return this}get plugins(){return Array.from(u(this,hn).values())}attachPlugin(t){if(u(this,hn).get(t.name))throw new Error(`cannot replace existing plugin: ${t.name} `);return u(this,hn).set(t.name,t.connect(this)),this}getPlugin(t){return u(this,hn).get(t)||null}get disableCcipRead(){return u(this,os)}set disableCcipRead(t){d(this,os,!!t)}async ccipReadFetch(t,e,n){if(this.disableCcipRead||n.length===0||t.to==null)return null;const s=t.to.toLowerCase(),i=e.toLowerCase(),o=[];for(let a=0;a=500,`response not found during CCIP fetch: ${h}`,"OFFCHAIN_FAULT",{reason:"404_MISSING_RESOURCE",transaction:t,info:{url:c,errorMessage:h}}),o.push(h)}P(!1,`error encountered during CCIP fetch: ${o.map(a=>JSON.stringify(a)).join(", ")}`,"OFFCHAIN_FAULT",{reason:"500_SERVER_ERROR",transaction:t,info:{urls:n,errorMessages:o}})}_wrapBlock(t,e){return new Rp(Yp(t),this)}_wrapLog(t,e){return new oi(jp(t),this)}_wrapTransactionReceipt(t,e){return new xu(tg(t),this)}_wrapTransactionResponse(t,e){return new Js(Lu(t),this)}_detectNetwork(){P(!1,"sub-classes must implement this","UNSUPPORTED_OPERATION",{operation:"_detectNetwork"})}async _perform(t){P(!1,`unsupported method: ${t.method}`,"UNSUPPORTED_OPERATION",{operation:t.method,info:t})}async getBlockNumber(){const t=Q(await C(this,H,Ft).call(this,{method:"getBlockNumber"}),"%response");return u(this,Le)>=0&&d(this,Le,t),t}_getAddress(t){return Ct(t,this)}_getBlockTag(t){if(t==null)return"latest";switch(t){case"earliest":return"0x0";case"finalized":case"latest":case"pending":case"safe":return t}if(q(t))return q(t,32)?t:se(t);if(typeof t=="bigint"&&(t=Q(t,"blockTag")),typeof t=="number")return t>=0?se(t):u(this,Le)>=0?se(u(this,Le)+t):this.getBlockNumber().then(e=>se(e+t));g(!1,"invalid blockTag","blockTag",t)}_getFilter(t){const e=(t.topics||[]).map(c=>c==null?null:Array.isArray(c)?Xo(c.map(l=>l.toLowerCase())):c.toLowerCase()),n="blockHash"in t?t.blockHash:void 0,s=(c,l,f)=>{let h;switch(c.length){case 0:break;case 1:h=c[0];break;default:c.sort(),h=c}if(n&&(l!=null||f!=null))throw new Error("invalid filter");const p={};return h&&(p.address=h),e.length&&(p.topics=e),l&&(p.fromBlock=l),f&&(p.toBlock=f),n&&(p.blockHash=n),p};let i=[];if(t.address)if(Array.isArray(t.address))for(const c of t.address)i.push(this._getAddress(c));else i.push(this._getAddress(t.address));let o;"fromBlock"in t&&(o=this._getBlockTag(t.fromBlock));let a;return"toBlock"in t&&(a=this._getBlockTag(t.toBlock)),i.filter(c=>typeof c!="string").length||o!=null&&typeof o!="string"||a!=null&&typeof a!="string"?Promise.all([Promise.all(i),o,a]).then(c=>s(c[0],c[1],c[2])):s(i,o,a)}_getTransactionRequest(t){const e=Mi(t),n=[];if(["to","from"].forEach(s=>{if(e[s]==null)return;const i=Ct(e[s],this);yi(i)?n.push(async function(){e[s]=await i}()):e[s]=i}),e.blockTag!=null){const s=this._getBlockTag(e.blockTag);yi(s)?n.push(async function(){e.blockTag=await s}()):e.blockTag=s}return n.length?async function(){return await Promise.all(n),e}():e}async getNetwork(){if(u(this,Qt)==null){const s=(async()=>{try{const i=await this._detectNetwork();return this.emit("network",i,null),i}catch(i){throw u(this,Qt)===s&&d(this,Qt,null),i}})();return d(this,Qt,s),(await s).clone()}const t=u(this,Qt),[e,n]=await Promise.all([t,this._detectNetwork()]);return e.chainId!==n.chainId&&(u(this,jn)?(this.emit("network",n,e),u(this,Qt)===t&&d(this,Qt,Promise.resolve(n))):P(!1,`network changed: ${e.chainId} => ${n.chainId} `,"NETWORK_ERROR",{event:"changed"})),e.clone()}async getFeeData(){const t=await this.getNetwork(),e=async()=>{const{_block:s,gasPrice:i,priorityFee:o}=await Pt({_block:C(this,H,ta).call(this,"latest",!1),gasPrice:(async()=>{try{const f=await C(this,H,Ft).call(this,{method:"getGasPrice"});return k(f,"%response")}catch{}return null})(),priorityFee:(async()=>{try{const f=await C(this,H,Ft).call(this,{method:"getPriorityFee"});return k(f,"%response")}catch{}return null})()});let a=null,c=null;const l=this._wrapBlock(s,t);return l&&l.baseFeePerGas&&(c=o??BigInt("1000000000"),a=l.baseFeePerGas*cg+c),new Lc(i,a,c)},n=t.getPlugin("org.ethers.plugins.network.FetchUrlFeeDataPlugin");if(n){const s=new wn(n.url),i=await n.processFunc(e,this,s);return new Lc(i.gasPrice,i.maxFeePerGas,i.maxPriorityFeePerGas)}return await e()}async estimateGas(t){let e=this._getTransactionRequest(t);return yi(e)&&(e=await e),k(await C(this,H,Ft).call(this,{method:"estimateGas",transaction:e}),"%response")}async call(t){const{tx:e,blockTag:n}=await Pt({tx:this._getTransactionRequest(t),blockTag:this._getBlockTag(t.blockTag)});return await C(this,H,$o).call(this,C(this,H,qo).call(this,e,n,t.enableCcipRead?0:-1))}async getBalance(t,e){return k(await C(this,H,ks).call(this,{method:"getBalance"},t,e),"%response")}async getTransactionCount(t,e){return Q(await C(this,H,ks).call(this,{method:"getTransactionCount"},t,e),"%response")}async getCode(t,e){return I(await C(this,H,ks).call(this,{method:"getCode"},t,e))}async getStorage(t,e,n){const s=k(e,"position");return I(await C(this,H,ks).call(this,{method:"getStorage",position:s},t,n))}async broadcastTransaction(t){const{blockNumber:e,hash:n,network:s}=await Pt({blockNumber:this.getBlockNumber(),hash:this._perform({method:"broadcastTransaction",signedTransaction:t}),network:this.getNetwork()}),i=Ri.from(t);if(i.hash!==n)throw new Error("@TODO: the returned hash did not match");return this._wrapTransactionResponse(i,s).replaceableTransaction(e)}async getBlock(t,e){const{network:n,params:s}=await Pt({network:this.getNetwork(),params:C(this,H,ta).call(this,t,!!e)});return s==null?null:this._wrapBlock(s,n)}async getTransaction(t){const{network:e,params:n}=await Pt({network:this.getNetwork(),params:C(this,H,Ft).call(this,{method:"getTransaction",hash:t})});return n==null?null:this._wrapTransactionResponse(n,e)}async getTransactionReceipt(t){const{network:e,params:n}=await Pt({network:this.getNetwork(),params:C(this,H,Ft).call(this,{method:"getTransactionReceipt",hash:t})});if(n==null)return null;if(n.gasPrice==null&&n.effectiveGasPrice==null){const s=await C(this,H,Ft).call(this,{method:"getTransaction",hash:t});if(s==null)throw new Error("report this; could not find tx or effectiveGasPrice");n.effectiveGasPrice=s.gasPrice}return this._wrapTransactionReceipt(n,e)}async getTransactionResult(t){const{result:e}=await Pt({network:this.getNetwork(),result:C(this,H,Ft).call(this,{method:"getTransactionResult",hash:t})});return e==null?null:I(e)}async getLogs(t){let e=this._getFilter(t);yi(e)&&(e=await e);const{network:n,params:s}=await Pt({network:this.getNetwork(),params:C(this,H,Ft).call(this,{method:"getLogs",filter:e})});return s.map(i=>this._wrapLog(i,n))}_getProvider(t){P(!1,"provider cannot connect to target network","UNSUPPORTED_OPERATION",{operation:"_getProvider()"})}async getResolver(t){return await Hi.fromName(this,t)}async getAvatar(t){const e=await this.getResolver(t);return e?await e.getAvatar():null}async resolveName(t){const e=await this.getResolver(t);return e?await e.getAddress():null}async lookupAddress(t){t=W(t);const e=Jo(t.substring(2).toLowerCase()+".addr.reverse");try{const n=await Hi.getEnsAddress(this),i=await new Ss(n,["function resolver(bytes32) view returns (address)"],this).resolver(e);if(i==null||i===Fs)return null;const a=await new Ss(i,["function name(bytes32) view returns (string)"],this).name(e);return await this.resolveName(a)!==t?null:a}catch(n){if(mt(n,"BAD_DATA")&&n.value==="0x"||mt(n,"CALL_EXCEPTION"))return null;throw n}return null}async waitForTransaction(t,e,n){const s=e??1;return s===0?this.getTransactionReceipt(t):new Promise(async(i,o)=>{let a=null;const c=async l=>{try{const f=await this.getTransactionReceipt(t);if(f!=null&&l-f.blockNumber+1>=s){i(f),a&&(clearTimeout(a),a=null);return}}catch(f){console.log("EEE",f)}this.once("block",c)};n!=null&&(a=setTimeout(()=>{a!=null&&(a=null,this.off("block",c),o(tt("timeout","TIMEOUT",{reason:"timeout"})))},n)),c(await this.getBlockNumber())})}async waitForBlock(t){P(!1,"not implemented yet","NOT_IMPLEMENTED",{operation:"waitForBlock"})}_clearTimeout(t){const e=u(this,Zt).get(t);e&&(e.timer&&clearTimeout(e.timer),u(this,Zt).delete(t))}_setTimeout(t,e){e==null&&(e=0);const n=Ps(this,ni)._++,s=()=>{u(this,Zt).delete(n),t()};if(this.paused)u(this,Zt).set(n,{timer:null,func:s,time:e});else{const i=setTimeout(s,e);u(this,Zt).set(n,{timer:i,func:s,time:Io()})}return n}_forEachSubscriber(t){for(const e of u(this,At).values())t(e.subscriber)}_getSubscriber(t){switch(t.type){case"debug":case"error":case"network":return new Du(t.type);case"block":{const e=new sg(this);return e.pollingInterval=this.pollingInterval,e}case"safe":case"finalized":return new ig(this,t.type);case"event":return new Ia(this,t.filter);case"transaction":return new ag(this,t.hash);case"orphan":return new og(this,t.filter)}throw new Error(`unsupported event: ${t.type}`)}_recoverSubscriber(t,e){for(const n of u(this,At).values())if(n.subscriber===t){n.started&&n.subscriber.stop(),n.subscriber=e,n.started&&e.start(),u(this,bt)!=null&&e.pause(u(this,bt));break}}async on(t,e){const n=await C(this,H,Ci).call(this,t);return n.listeners.push({listener:e,once:!1}),n.started||(n.subscriber.start(),n.started=!0,u(this,bt)!=null&&n.subscriber.pause(u(this,bt))),this}async once(t,e){const n=await C(this,H,Ci).call(this,t);return n.listeners.push({listener:e,once:!0}),n.started||(n.subscriber.start(),n.started=!0,u(this,bt)!=null&&n.subscriber.pause(u(this,bt))),this}async emit(t,...e){const n=await C(this,H,Rs).call(this,t,e);if(!n||n.listeners.length===0)return!1;const s=n.listeners.length;return n.listeners=n.listeners.filter(({listener:i,once:o})=>{const a=new qc(this,o?null:i,t);try{i.call(this,...e,a)}catch{}return!o}),n.listeners.length===0&&(n.started&&n.subscriber.stop(),u(this,At).delete(n.tag)),s>0}async listenerCount(t){if(t){const n=await C(this,H,Rs).call(this,t);return n?n.listeners.length:0}let e=0;for(const{listeners:n}of u(this,At).values())e+=n.length;return e}async listeners(t){if(t){const n=await C(this,H,Rs).call(this,t);return n?n.listeners.map(({listener:s})=>s):[]}let e=[];for(const{listeners:n}of u(this,At).values())e=e.concat(n.map(({listener:s})=>s));return e}async off(t,e){const n=await C(this,H,Rs).call(this,t);if(!n)return this;if(e){const s=n.listeners.map(({listener:i})=>i).indexOf(e);s>=0&&n.listeners.splice(s,1)}return(!e||n.listeners.length===0)&&(n.started&&n.subscriber.stop(),u(this,At).delete(n.tag)),this}async removeAllListeners(t){if(t){const{tag:e,started:n,subscriber:s}=await C(this,H,Ci).call(this,t);n&&s.stop(),u(this,At).delete(e)}else for(const[e,{started:n,subscriber:s}]of u(this,At))n&&s.stop(),u(this,At).delete(e);return this}async addListener(t,e){return await this.on(t,e)}async removeListener(t,e){return this.off(t,e)}get destroyed(){return u(this,is)}destroy(){this.removeAllListeners();for(const t of u(this,Zt).keys())this._clearTimeout(t);d(this,is,!0)}get paused(){return u(this,bt)!=null}set paused(t){!!t!==this.paused&&(this.paused?this.resume():this.pause(!1))}pause(t){if(d(this,Le,-1),u(this,bt)!=null){if(u(this,bt)==!!t)return;P(!1,"cannot change pause type; resume first","UNSUPPORTED_OPERATION",{operation:"pause"})}this._forEachSubscriber(e=>e.pause(t)),d(this,bt,!!t);for(const e of u(this,Zt).values())e.timer&&clearTimeout(e.timer),e.time=Io()-e.time}resume(){if(u(this,bt)!=null){this._forEachSubscriber(t=>t.resume()),d(this,bt,null);for(const t of u(this,Zt).values()){let e=t.time;e<0&&(e=0),t.time=Io(),setTimeout(t.func,e)}}}}At=new WeakMap,hn=new WeakMap,bt=new WeakMap,is=new WeakMap,Qt=new WeakMap,jn=new WeakMap,dn=new WeakMap,Le=new WeakMap,ni=new WeakMap,Zt=new WeakMap,os=new WeakMap,as=new WeakMap,H=new WeakSet,Ft=async function(t){const e=u(this,as).cacheTimeout;if(e<0)return await this._perform(t);const n=Bi(t.method,t);let s=u(this,dn).get(n);return s||(s=this._perform(t),u(this,dn).set(n,s),setTimeout(()=>{u(this,dn).get(n)===s&&u(this,dn).delete(n)},e)),await s},qo=async function(t,e,n){P(n=0&&e==="latest"&&s.to!=null&&nt(i.data,0,4)==="0x556f1830"){const o=i.data,a=await Ct(s.to,this);let c;try{c=yg(nt(i.data,4))}catch(h){P(!1,h.message,"OFFCHAIN_FAULT",{reason:"BAD_DATA",transaction:s,info:{data:o}})}P(c.sender.toLowerCase()===a.toLowerCase(),"CCIP Read sender mismatch","CALL_EXCEPTION",{action:"call",data:o,reason:"OffchainLookup",transaction:s,invocation:null,revert:{signature:"OffchainLookup(address,string[],bytes,bytes4,bytes)",name:"OffchainLookup",args:c.errorArgs}});const l=await this.ccipReadFetch(s,c.calldata,c.urls);P(l!=null,"CCIP Read failed to fetch data","OFFCHAIN_FAULT",{reason:"FETCH_FAILED",transaction:s,info:{data:i.data,errorArgs:c.errorArgs}});const f={to:a,data:rt([c.selector,mg([l,c.extraData])])};this.emit("debug",{action:"sendCcipReadCall",transaction:f});try{const h=await C(this,H,qo).call(this,f,e,n+1);return this.emit("debug",{action:"receiveCcipReadCallResult",transaction:Object.assign({},f),result:h}),h}catch(h){throw this.emit("debug",{action:"receiveCcipReadCallError",transaction:Object.assign({},f),error:h}),h}}throw i}},$o=async function(t){const{value:e}=await Pt({network:this.getNetwork(),value:t});return e},ks=async function(t,e,n){let s=this._getAddress(e),i=this._getBlockTag(n);return(typeof s!="string"||typeof i!="string")&&([s,i]=await Promise.all([s,i])),await C(this,H,$o).call(this,C(this,H,Ft).call(this,Object.assign(t,{address:s,blockTag:i})))},ta=async function(t,e){if(q(t,32))return await C(this,H,Ft).call(this,{method:"getBlock",blockHash:t,includeTransactions:e});let n=this._getBlockTag(t);return typeof n!="string"&&(n=await n),await C(this,H,Ft).call(this,{method:"getBlock",blockTag:n,includeTransactions:e})},Rs=async function(t,e){let n=await Co(t,this);return n.type==="event"&&e&&e.length>0&&e[0].removed===!0&&(n=await Co({orphan:"drop-log",log:e[0]},this)),u(this,At).get(n.tag)||null},Ci=async function(t){const e=await Co(t,this),n=e.tag;let s=u(this,At).get(n);return s||(s={subscriber:this._getSubscriber(e),tag:n,addressableMap:new WeakMap,nameMap:new Map,started:!1,listeners:[]},u(this,At).set(n,s)),s};function dg(r,t){try{const e=ea(r,t);if(e)return vi(e)}catch{}return null}function ea(r,t){if(r==="0x")return null;try{const e=Q(nt(r,t,t+32)),n=Q(nt(r,e,e+32));return nt(r,e+32,e+32+n)}catch{}return null}function zc(r){const t=at(r);if(t.length>32)throw new Error("internal; should not happen");const e=new Uint8Array(32);return e.set(t,32-t.length),e}function pg(r){if(r.length%32===0)return r;const t=new Uint8Array(Math.ceil(r.length/32)*32);return t.set(r),t}const gg=new Uint8Array([]);function mg(r){const t=[];let e=0;for(let n=0;n=5*32,"insufficient OffchainLookup data","OFFCHAIN_FAULT",{reason:"insufficient OffchainLookup data"});const e=nt(r,0,32);P(nt(e,0,12)===nt(Jc,0,12),"corrupt OffchainLookup sender","OFFCHAIN_FAULT",{reason:"corrupt OffchainLookup sender"}),t.sender=nt(e,12);try{const n=[],s=Q(nt(r,32,64)),i=Q(nt(r,s,s+32)),o=nt(r,s+32);for(let a=0;at[n]),t}function Pn(r,t){if(r.provider)return r.provider;P(!1,"missing provider","UNSUPPORTED_OPERATION",{operation:t})}async function Kc(r,t){let e=Mi(t);if(e.to!=null&&(e.to=Ct(e.to,r)),e.from!=null){const n=e.from;e.from=Promise.all([r.getAddress(),Ct(n,r)]).then(([s,i])=>(g(s.toLowerCase()===i.toLowerCase(),"transaction from mismatch","tx.from",i),s))}else e.from=r.getAddress();return await Pt(e)}class wg{constructor(t){w(this,"provider");L(this,{provider:t||null})}async getNonce(t){return Pn(this,"getTransactionCount").getTransactionCount(await this.getAddress(),t)}async populateCall(t){return await Kc(this,t)}async populateTransaction(t){const e=Pn(this,"populateTransaction"),n=await Kc(this,t);n.nonce==null&&(n.nonce=await this.getNonce("pending")),n.gasLimit==null&&(n.gasLimit=await this.estimateGas(n));const s=await this.provider.getNetwork();if(n.chainId!=null){const o=k(n.chainId);g(o===s.chainId,"transaction chainId mismatch","tx.chainId",t.chainId)}else n.chainId=s.chainId;const i=n.maxFeePerGas!=null||n.maxPriorityFeePerGas!=null;if(n.gasPrice!=null&&(n.type===2||i)?g(!1,"eip-1559 transaction do not support gasPrice","tx",t):(n.type===0||n.type===1)&&i&&g(!1,"pre-eip-1559 transaction do not support maxFeePerGas/maxPriorityFeePerGas","tx",t),(n.type===2||n.type==null)&&n.maxFeePerGas!=null&&n.maxPriorityFeePerGas!=null)n.type=2;else if(n.type===0||n.type===1){const o=await e.getFeeData();P(o.gasPrice!=null,"network does not support gasPrice","UNSUPPORTED_OPERATION",{operation:"getGasPrice"}),n.gasPrice==null&&(n.gasPrice=o.gasPrice)}else{const o=await e.getFeeData();if(n.type==null)if(o.maxFeePerGas!=null&&o.maxPriorityFeePerGas!=null)if(n.authorizationList&&n.authorizationList.length?n.type=4:n.type=2,n.gasPrice!=null){const a=n.gasPrice;delete n.gasPrice,n.maxFeePerGas=a,n.maxPriorityFeePerGas=a}else n.maxFeePerGas==null&&(n.maxFeePerGas=o.maxFeePerGas),n.maxPriorityFeePerGas==null&&(n.maxPriorityFeePerGas=o.maxPriorityFeePerGas);else o.gasPrice!=null?(P(!i,"network does not support EIP-1559","UNSUPPORTED_OPERATION",{operation:"populateTransaction"}),n.gasPrice==null&&(n.gasPrice=o.gasPrice),n.type=0):P(!1,"failed to get consistent fee data","UNSUPPORTED_OPERATION",{operation:"signer.getFeeData"});else(n.type===2||n.type===3||n.type===4)&&(n.maxFeePerGas==null&&(n.maxFeePerGas=o.maxFeePerGas),n.maxPriorityFeePerGas==null&&(n.maxPriorityFeePerGas=o.maxPriorityFeePerGas))}return await Pt(n)}async populateAuthorization(t){const e=Object.assign({},t);return e.chainId==null&&(e.chainId=(await Pn(this,"getNetwork").getNetwork()).chainId),e.nonce==null&&(e.nonce=await this.getNonce()),e}async estimateGas(t){return Pn(this,"estimateGas").estimateGas(await this.populateCall(t))}async call(t){return Pn(this,"call").call(await this.populateCall(t))}async resolveName(t){return await Pn(this,"resolveName").resolveName(t)}async sendTransaction(t){const e=Pn(this,"sendTransaction"),n=await this.populateTransaction(t);delete n.from;const s=Ri.from(n);return await e.broadcastTransaction(await this.signTransaction(s))}authorize(t){P(!1,"authorization not implemented for this signer","UNSUPPORTED_OPERATION",{operation:"authorize"})}}function Ag(r){return JSON.parse(JSON.stringify(r))}var xt,ye,Wn,pn,Yn,cs,bn,na,ra;class Mu{constructor(t){A(this,bn);A(this,xt);A(this,ye);A(this,Wn);A(this,pn);A(this,Yn);A(this,cs);d(this,xt,t),d(this,ye,null),d(this,Wn,C(this,bn,na).bind(this)),d(this,pn,!1),d(this,Yn,null),d(this,cs,!1)}_subscribe(t){throw new Error("subclasses must override this")}_emitResults(t,e){throw new Error("subclasses must override this")}_recover(t){throw new Error("subclasses must override this")}start(){u(this,pn)||(d(this,pn,!0),C(this,bn,na).call(this,-2))}stop(){u(this,pn)&&(d(this,pn,!1),d(this,cs,!0),C(this,bn,ra).call(this),u(this,xt).off("block",u(this,Wn)))}pause(t){t&&C(this,bn,ra).call(this),u(this,xt).off("block",u(this,Wn))}resume(){this.start()}}xt=new WeakMap,ye=new WeakMap,Wn=new WeakMap,pn=new WeakMap,Yn=new WeakMap,cs=new WeakMap,bn=new WeakSet,na=async function(t){try{u(this,ye)==null&&d(this,ye,this._subscribe(u(this,xt)));let e=null;try{e=await u(this,ye)}catch(i){if(!mt(i,"UNSUPPORTED_OPERATION")||i.operation!=="eth_newFilter")throw i}if(e==null){d(this,ye,null),u(this,xt)._recoverSubscriber(this,this._recover(u(this,xt)));return}const n=await u(this,xt).getNetwork();if(u(this,Yn)||d(this,Yn,n),u(this,Yn).chainId!==n.chainId)throw new Error("chaid changed");if(u(this,cs))return;const s=await u(this,xt).send("eth_getFilterChanges",[e]);await this._emitResults(u(this,xt),s)}catch(e){console.log("@TODO",e)}u(this,xt).once("block",u(this,Wn))},ra=function(){const t=u(this,ye);t&&(d(this,ye,null),t.then(e=>{u(this,xt).destroyed||u(this,xt).send("eth_uninstallFilter",[e])}))};var Xn;class bg extends Mu{constructor(e,n){super(e);A(this,Xn);d(this,Xn,Ag(n))}_recover(e){return new Ia(e,u(this,Xn))}async _subscribe(e){return await e.send("eth_newFilter",[u(this,Xn)])}async _emitResults(e,n){for(const s of n)e.emit(u(this,Xn),e._wrapLog(s,e._network))}}Xn=new WeakMap;class Eg extends Mu{async _subscribe(t){return await t.send("eth_newPendingTransactionFilter",[])}async _emitResults(t,e){for(const n of e)t.emit("pending",n)}}const xg="bigint,boolean,function,number,string,symbol".split(/,/g);function Ii(r){if(r==null||xg.indexOf(typeof r)>=0||typeof r.getAddress=="function")return r;if(Array.isArray(r))return r.map(Ii);if(typeof r=="object")return Object.keys(r).reduce((t,e)=>(t[e]=r[e],t),{});throw new Error(`should not happen: ${r} (${typeof r})`)}function Pg(r){return new Promise(t=>{setTimeout(t,r)})}function dr(r){return r&&r.toLowerCase()}function _c(r){return r&&typeof r.pollingInterval=="number"}const Gu={polling:!1,staticNetwork:null,batchStallTime:10,batchMaxSize:1<<20,batchMaxCount:100,cacheTimeout:250,pollingInterval:4e3};class Oo extends wg{constructor(e,n){super(e);w(this,"address");n=W(n),L(this,{address:n})}connect(e){P(!1,"cannot reconnect JsonRpcSigner","UNSUPPORTED_OPERATION",{operation:"signer.connect"})}async getAddress(){return this.address}async populateTransaction(e){return await this.populateCall(e)}async sendUncheckedTransaction(e){const n=Ii(e),s=[];if(n.from){const o=n.from;s.push((async()=>{const a=await Ct(o,this.provider);g(a!=null&&a.toLowerCase()===this.address.toLowerCase(),"from address mismatch","transaction",e),n.from=a})())}else n.from=this.address;if(n.gasLimit==null&&s.push((async()=>{n.gasLimit=await this.provider.estimateGas({...n,from:this.address})})()),n.to!=null){const o=n.to;s.push((async()=>{n.to=await Ct(o,this.provider)})())}s.length&&await Promise.all(s);const i=this.provider.getRpcTransaction(n);return this.provider.send("eth_sendTransaction",[i])}async sendTransaction(e){const n=await this.provider.getBlockNumber(),s=await this.sendUncheckedTransaction(e);return await new Promise((i,o)=>{const a=[1e3,100];let c=0;const l=async()=>{try{const f=await this.provider.getTransaction(s);if(f!=null){i(f.replaceableTransaction(n));return}}catch(f){if(mt(f,"CANCELLED")||mt(f,"BAD_DATA")||mt(f,"NETWORK_ERROR")||mt(f,"UNSUPPORTED_OPERATION")){f.info==null&&(f.info={}),f.info.sendTransactionHash=s,o(f);return}if(mt(f,"INVALID_ARGUMENT")&&(c++,f.info==null&&(f.info={}),f.info.sendTransactionHash=s,c>10)){o(f);return}this.provider.emit("error",tt("failed to fetch transation after sending (will try again)","UNKNOWN_ERROR",{error:f}))}this.provider._setTimeout(()=>{l()},a.pop()||4e3)};l()})}async signTransaction(e){const n=Ii(e);if(n.from){const i=await Ct(n.from,this.provider);g(i!=null&&i.toLowerCase()===this.address.toLowerCase(),"from address mismatch","transaction",e),n.from=i}else n.from=this.address;const s=this.provider.getRpcTransaction(n);return await this.provider.send("eth_signTransaction",[s])}async signMessage(e){const n=typeof e=="string"?Ge(e):e;return await this.provider.send("personal_sign",[I(n),this.address.toLowerCase()])}async signTypedData(e,n,s){const i=Ii(s),o=await Di.resolveNames(e,n,i,async a=>{const c=await Ct(a);return g(c!=null,"TypedData does not support null address","value",a),c});return await this.provider.send("eth_signTypedData_v4",[this.address.toLowerCase(),JSON.stringify(Di.getPayload(o.domain,n,o.value))])}async unlock(e){return this.provider.send("personal_unlockAccount",[this.address.toLowerCase(),e,null])}async _legacySignMessage(e){const n=typeof e=="string"?Ge(e):e;return await this.provider.send("eth_sign",[this.address.toLowerCase(),I(n)])}}var qn,ls,Fe,we,re,jt,vt,ri,sa;class Ng extends hg{constructor(e,n){super(e,n);A(this,ri);A(this,qn);A(this,ls);A(this,Fe);A(this,we);A(this,re);A(this,jt);A(this,vt);d(this,ls,1),d(this,qn,Object.assign({},Gu,n||{})),d(this,Fe,[]),d(this,we,null),d(this,jt,null),d(this,vt,null);{let i=null;const o=new Promise(a=>{i=a});d(this,re,{promise:o,resolve:i})}const s=this._getOption("staticNetwork");typeof s=="boolean"?(g(!s||e!=="any","staticNetwork cannot be used on special network 'any'","options",n),s&&e!=null&&d(this,jt,Ee.from(e))):s&&(g(e==null||s.matches(e),"staticNetwork MUST match network object","options",n),d(this,jt,s))}_getOption(e){return u(this,qn)[e]}get _network(){return P(u(this,jt),"network is not available yet","NETWORK_ERROR"),u(this,jt)}async _perform(e){if(e.method==="call"||e.method==="estimateGas"){let s=e.transaction;if(s&&s.type!=null&&k(s.type)&&s.maxFeePerGas==null&&s.maxPriorityFeePerGas==null){const i=await this.getFeeData();i.maxFeePerGas==null&&i.maxPriorityFeePerGas==null&&(e=Object.assign({},e,{transaction:Object.assign({},s,{type:void 0})}))}}const n=this.getRpcRequest(e);return n!=null?await this.send(n.method,n.args):super._perform(e)}async _detectNetwork(){const e=this._getOption("staticNetwork");if(e)if(e===!0){if(u(this,jt))return u(this,jt)}else return e;return u(this,vt)?await u(this,vt):this.ready?(d(this,vt,(async()=>{try{const n=Ee.from(k(await this.send("eth_chainId",[])));return d(this,vt,null),n}catch(n){throw d(this,vt,null),n}})()),await u(this,vt)):(d(this,vt,(async()=>{const n={id:Ps(this,ls)._++,method:"eth_chainId",params:[],jsonrpc:"2.0"};this.emit("debug",{action:"sendRpcPayload",payload:n});let s;try{s=(await this._send(n))[0],d(this,vt,null)}catch(i){throw d(this,vt,null),this.emit("debug",{action:"receiveRpcError",error:i}),i}if(this.emit("debug",{action:"receiveRpcResult",result:s}),"result"in s)return Ee.from(k(s.result));throw this.getRpcError(n,s)})()),await u(this,vt))}_start(){u(this,re)==null||u(this,re).resolve==null||(u(this,re).resolve(),d(this,re,null),(async()=>{for(;u(this,jt)==null&&!this.destroyed;)try{d(this,jt,await this._detectNetwork())}catch(e){if(this.destroyed)break;console.log("JsonRpcProvider failed to detect network and cannot start up; retry in 1s (perhaps the URL is wrong or the node is not started)"),this.emit("error",tt("failed to bootstrap network detection","NETWORK_ERROR",{event:"initial-network-discovery",info:{error:e}})),await Pg(1e3)}C(this,ri,sa).call(this)})())}async _waitUntilReady(){if(u(this,re)!=null)return await u(this,re).promise}_getSubscriber(e){return e.type==="pending"?new Eg(this):e.type==="event"?this._getOption("polling")?new Ia(this,e.filter):new bg(this,e.filter):e.type==="orphan"&&e.filter.orphan==="drop-log"?new Du("orphan"):super._getSubscriber(e)}get ready(){return u(this,re)==null}getRpcTransaction(e){const n={};return["chainId","gasLimit","gasPrice","type","maxFeePerGas","maxPriorityFeePerGas","nonce","value"].forEach(s=>{if(e[s]==null)return;let i=s;s==="gasLimit"&&(i="gas"),n[i]=se(k(e[s],`tx.${s}`))}),["from","to","data"].forEach(s=>{e[s]!=null&&(n[s]=I(e[s]))}),e.accessList&&(n.accessList=or(e.accessList)),e.blobVersionedHashes&&(n.blobVersionedHashes=e.blobVersionedHashes.map(s=>s.toLowerCase())),e.authorizationList&&(n.authorizationList=e.authorizationList.map(s=>{const i=Ql(s);return{address:i.address,nonce:se(i.nonce),chainId:se(i.chainId),yParity:se(i.signature.yParity),r:se(i.signature.r),s:se(i.signature.s)}})),n}getRpcRequest(e){switch(e.method){case"chainId":return{method:"eth_chainId",args:[]};case"getBlockNumber":return{method:"eth_blockNumber",args:[]};case"getGasPrice":return{method:"eth_gasPrice",args:[]};case"getPriorityFee":return{method:"eth_maxPriorityFeePerGas",args:[]};case"getBalance":return{method:"eth_getBalance",args:[dr(e.address),e.blockTag]};case"getTransactionCount":return{method:"eth_getTransactionCount",args:[dr(e.address),e.blockTag]};case"getCode":return{method:"eth_getCode",args:[dr(e.address),e.blockTag]};case"getStorage":return{method:"eth_getStorageAt",args:[dr(e.address),"0x"+e.position.toString(16),e.blockTag]};case"broadcastTransaction":return{method:"eth_sendRawTransaction",args:[e.signedTransaction]};case"getBlock":if("blockTag"in e)return{method:"eth_getBlockByNumber",args:[e.blockTag,!!e.includeTransactions]};if("blockHash"in e)return{method:"eth_getBlockByHash",args:[e.blockHash,!!e.includeTransactions]};break;case"getTransaction":return{method:"eth_getTransactionByHash",args:[e.hash]};case"getTransactionReceipt":return{method:"eth_getTransactionReceipt",args:[e.hash]};case"call":return{method:"eth_call",args:[this.getRpcTransaction(e.transaction),e.blockTag]};case"estimateGas":return{method:"eth_estimateGas",args:[this.getRpcTransaction(e.transaction)]};case"getLogs":return e.filter&&e.filter.address!=null&&(Array.isArray(e.filter.address)?e.filter.address=e.filter.address.map(dr):e.filter.address=dr(e.filter.address)),{method:"eth_getLogs",args:[e.filter]}}return null}getRpcError(e,n){const{method:s}=e,{error:i}=n;if(s==="eth_estimateGas"&&i.message){const c=i.message;if(!c.match(/revert/i)&&c.match(/insufficient funds/i))return tt("insufficient funds","INSUFFICIENT_FUNDS",{transaction:e.params[0],info:{payload:e,error:i}});if(c.match(/nonce/i)&&c.match(/too low/i))return tt("nonce has already been used","NONCE_EXPIRED",{transaction:e.params[0],info:{payload:e,error:i}})}if(s==="eth_call"||s==="eth_estimateGas"){const c=ia(i),l=zs.getBuiltinCallException(s==="eth_call"?"call":"estimateGas",e.params[0],c?c.data:null);return l.info={error:i,payload:e},l}const o=JSON.stringify(Cg(i));if(typeof i.message=="string"&&i.message.match(/user denied|ethers-user-denied/i))return tt("user rejected action","ACTION_REJECTED",{action:{eth_sign:"signMessage",personal_sign:"signMessage",eth_signTypedData_v4:"signTypedData",eth_signTransaction:"signTransaction",eth_sendTransaction:"sendTransaction",eth_requestAccounts:"requestAccess",wallet_requestAccounts:"requestAccess"}[s]||"unknown",reason:"rejected",info:{payload:e,error:i}});if(s==="eth_sendRawTransaction"||s==="eth_sendTransaction"){const c=e.params[0];if(o.match(/insufficient funds|base fee exceeds gas limit/i))return tt("insufficient funds for intrinsic transaction cost","INSUFFICIENT_FUNDS",{transaction:c,info:{error:i}});if(o.match(/nonce/i)&&o.match(/too low/i))return tt("nonce has already been used","NONCE_EXPIRED",{transaction:c,info:{error:i}});if(o.match(/replacement transaction/i)&&o.match(/underpriced/i))return tt("replacement fee too low","REPLACEMENT_UNDERPRICED",{transaction:c,info:{error:i}});if(o.match(/only replay-protected/i))return tt("legacy pre-eip-155 transactions not supported","UNSUPPORTED_OPERATION",{operation:s,info:{transaction:c,info:{error:i}}})}let a=!!o.match(/the method .* does not exist/i);return a||i&&i.details&&i.details.startsWith("Unauthorized method:")&&(a=!0),a?tt("unsupported operation","UNSUPPORTED_OPERATION",{operation:e.method,info:{error:i,payload:e}}):tt("could not coalesce error","UNKNOWN_ERROR",{error:i,payload:e})}send(e,n){if(this.destroyed)return Promise.reject(tt("provider destroyed; cancelled request","UNSUPPORTED_OPERATION",{operation:e}));const s=Ps(this,ls)._++,i=new Promise((o,a)=>{u(this,Fe).push({resolve:o,reject:a,payload:{method:e,params:n,id:s,jsonrpc:"2.0"}})});return C(this,ri,sa).call(this),i}async getSigner(e){e==null&&(e=0);const n=this.send("eth_accounts",[]);if(typeof e=="number"){const i=await n;if(e>=i.length)throw new Error("no such account");return new Oo(this,i[e])}const{accounts:s}=await Pt({network:this.getNetwork(),accounts:n});e=W(e);for(const i of s)if(W(i)===e)return new Oo(this,e);throw new Error("invalid account")}async listAccounts(){return(await this.send("eth_accounts",[])).map(n=>new Oo(this,n))}destroy(){u(this,we)&&(clearTimeout(u(this,we)),d(this,we,null));for(const{payload:e,reject:n}of u(this,Fe))n(tt("provider destroyed; cancelled request","UNSUPPORTED_OPERATION",{operation:e.method}));d(this,Fe,[]),super.destroy()}}qn=new WeakMap,ls=new WeakMap,Fe=new WeakMap,we=new WeakMap,re=new WeakMap,jt=new WeakMap,vt=new WeakMap,ri=new WeakSet,sa=function(){if(u(this,we))return;const e=this._getOption("batchMaxCount")===1?0:this._getOption("batchStallTime");d(this,we,setTimeout(()=>{d(this,we,null);const n=u(this,Fe);for(d(this,Fe,[]);n.length;){const s=[n.shift()];for(;n.length&&s.length!==u(this,qn).batchMaxCount;)if(s.push(n.shift()),JSON.stringify(s.map(o=>o.payload)).length>u(this,qn).batchMaxSize){n.unshift(s.pop());break}(async()=>{const i=s.length===1?s[0].payload:s.map(o=>o.payload);this.emit("debug",{action:"sendRpcPayload",payload:i});try{const o=await this._send(i);this.emit("debug",{action:"receiveRpcResult",result:o});for(const{resolve:a,reject:c,payload:l}of s){if(this.destroyed){c(tt("provider destroyed; cancelled request","UNSUPPORTED_OPERATION",{operation:l.method}));continue}const f=o.filter(h=>h.id===l.id)[0];if(f==null){const h=tt("missing response for request","BAD_DATA",{value:o,info:{payload:l}});this.emit("error",h),c(h);continue}if("error"in f){c(this.getRpcError(l,f));continue}a(f.result)}}catch(o){this.emit("debug",{action:"receiveRpcError",error:o});for(const{reject:a}of s)a(o)}})()}},e))};var gn;class Bg extends Ng{constructor(e,n){super(e,n);A(this,gn);let s=this._getOption("pollingInterval");s==null&&(s=Gu.pollingInterval),d(this,gn,s)}_getSubscriber(e){const n=super._getSubscriber(e);return _c(n)&&(n.pollingInterval=u(this,gn)),n}get pollingInterval(){return u(this,gn)}set pollingInterval(e){if(!Number.isInteger(e)||e<0)throw new Error("invalid interval");d(this,gn,e),this._forEachSubscriber(n=>{_c(n)&&(n.pollingInterval=u(this,gn))})}}gn=new WeakMap;function ia(r){if(r==null)return null;if(typeof r.message=="string"&&r.message.match(/revert/i)&&q(r.data))return{message:r.message,data:r.data};if(typeof r=="object"){for(const t in r){const e=ia(r[t]);if(e)return e}return null}if(typeof r=="string")try{return ia(JSON.parse(r))}catch{}return null}function oa(r,t){if(r!=null){if(typeof r.message=="string"&&t.push(r.message),typeof r=="object")for(const e in r)oa(r[e],t);if(typeof r=="string")try{return oa(JSON.parse(r),t)}catch{}}}function Cg(r){const t=[];return oa(r,t),t}var us,fs;const vn=class vn extends Bg{constructor(e,n,s){const i=Object.assign({},s??{},{batchMaxCount:1});g(e&&e.request,"invalid EIP-1193 provider","ethereum",e);super(n,i);A(this,us);A(this,fs);d(this,fs,null),s&&s.providerInfo&&d(this,fs,s.providerInfo),d(this,us,async(o,a)=>{const c={method:o,params:a};this.emit("debug",{action:"sendEip1193Request",payload:c});try{const l=await e.request(c);return this.emit("debug",{action:"receiveEip1193Result",result:l}),l}catch(l){const f=new Error(l.message);throw f.code=l.code,f.data=l.data,f.payload=c,this.emit("debug",{action:"receiveEip1193Error",error:f}),f}})}get providerInfo(){return u(this,fs)}async send(e,n){return await this._start(),await super.send(e,n)}async _send(e){g(!Array.isArray(e),"EIP-1193 does not support batch request","payload",e);try{const n=await u(this,us).call(this,e.method,e.params||[]);return[{id:e.id,result:n}]}catch(n){return[{id:e.id,error:{code:n.code,data:n.data,message:n.message}}]}}getRpcError(e,n){switch(n=JSON.parse(JSON.stringify(n)),n.error.code||-1){case 4001:n.error.message=`ethers-user-denied: ${n.error.message}`;break;case 4200:n.error.message=`ethers-unsupported: ${n.error.message}`;break}return super.getRpcError(e,n)}async hasSigner(e){e==null&&(e=0);const n=await this.send("eth_accounts",[]);return typeof e=="number"?n.length>e:(e=e.toLowerCase(),n.filter(s=>s.toLowerCase()===e).length!==0)}async getSigner(e){if(e==null&&(e=0),!await this.hasSigner(e))try{await u(this,us).call(this,"eth_requestAccounts",[])}catch(n){const s=n.payload;throw this.getRpcError(s,{id:s.id,error:n})}return await super.getSigner(e)}static async discover(e){if(e==null&&(e={}),e.provider)return new vn(e.provider);const n=e.window?e.window:typeof window<"u"?window:null;if(n==null)return null;const s=e.anyProvider;if(s&&n.ethereum)return new vn(n.ethereum);if(!("addEventListener"in n&&"dispatchEvent"in n&&"removeEventListener"in n))return null;const i=e.timeout?e.timeout:300;return i===0?null:await new Promise((o,a)=>{let c=[];const l=p=>{c.push(p.detail),s&&f()},f=()=>{if(clearTimeout(h),c.length)if(e&&e.filter){const p=e.filter(c.map(m=>Object.assign({},m.info)));if(p==null)o(null);else if(p instanceof vn)o(p);else{let m=null;if(p.uuid&&(m=c.filter(y=>p.uuid===y.info.uuid)[0]),m){const{provider:b,info:y}=m;o(new vn(b,void 0,{providerInfo:y}))}else a(tt("filter returned unknown info","UNSUPPORTED_OPERATION",{value:p}))}}else{const{provider:p,info:m}=c[0];o(new vn(p,void 0,{providerInfo:m}))}else o(null);n.removeEventListener("eip6963:announceProvider",l)},h=setTimeout(()=>{f()},i);n.addEventListener("eip6963:announceProvider",l),n.dispatchEvent(new Event("eip6963:requestProvider"))})}};us=new WeakMap,fs=new WeakMap;let aa=vn;const Oi=_u({isConnected:!1,address:null,provider:null,signer:null,isConnecting:!1,error:null});function Hu(){return typeof window.ethereum<"u"}async function Qu(){Oi.update(r=>({...r,isConnecting:!0,error:null}));try{if(!Hu())throw new Error("MetaMask is not installed. Please install MetaMask to continue.");if((await window.ethereum.request({method:"eth_requestAccounts"})).length===0)throw new Error("No accounts found. Please make sure MetaMask is unlocked.");const t=new aa(window.ethereum),e=await t.getSigner(),n=await e.getAddress();Oi.set({isConnected:!0,address:n,provider:t,signer:e,isConnecting:!1,error:null}),window.ethereum.on("accountsChanged",Vu),window.ethereum.on("chainChanged",zu)}catch(r){console.error("Failed to connect wallet:",r);const t=r instanceof Error?r.message:"Unknown error occurred";Oi.update(e=>({...e,isConnecting:!1,error:t}))}}function Ig(){window.ethereum&&(window.ethereum.removeListener("accountsChanged",Vu),window.ethereum.removeListener("chainChanged",zu)),Oi.set({isConnected:!1,address:null,provider:null,signer:null,isConnecting:!1,error:null})}function Vu(r){r.length===0?Ig():Qu()}function zu(){window.location.reload()}async function Rg(){if(Hu())try{(await window.ethereum.request({method:"eth_accounts"})).length>0&&await Qu()}catch(r){console.error("Failed to check connection:",r)}}function Tg(r){return r?`${r.slice(0,6)}...${r.slice(-4)}`:""}export{Qu as a,Rg as c,Ig as d,Tg as f,Hu as i,Oi as w}; diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/chunks/IHki7fMi.js b/testing-app/.svelte-kit/output/client/_app/immutable/chunks/IHki7fMi.js deleted file mode 100644 index c9c5925a..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/chunks/IHki7fMi.js +++ /dev/null @@ -1 +0,0 @@ -const e="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(e); diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/entry/app.B2K7GTuH.js b/testing-app/.svelte-kit/output/client/_app/immutable/entry/app.B2K7GTuH.js deleted file mode 100644 index 40a440a3..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/entry/app.B2K7GTuH.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.B3WZRA0r.js","../chunks/62BVG-0M.js","../chunks/IHki7fMi.js","../chunks/BEfn3whw.js","../chunks/BwHU8bWb.js","../chunks/BTqfQ_O8.js","../chunks/D3xHD3xP.js","../assets/0.BYseaBWp.css","../nodes/1.DUa_MPPC.js","../nodes/2.4Ek1nF8A.js","../assets/2.CjMuiM7s.css","../nodes/3.6XyjXGPy.js","../assets/3.BDcQWZi5.css","../nodes/4.B91Ry-vX.js","../assets/4.crwMbBlP.css","../nodes/5.ZxJVnQ2V.js","../assets/5.Bkgd3-bB.css","../nodes/6.CgAFXump.js","../assets/6.zi60Wocq.css","../nodes/7.B0nUtSqr.js","../assets/7.DBui5s7P.css","../nodes/8.C8NcTQBU.js","../assets/8.Bzrer8Pn.css","../nodes/9.B2KW8haW.js","../assets/9.nkHczZI2.css","../nodes/10.C_OQQveQ.js","../assets/10.DhGtm3er.css","../nodes/11.BcPfXbEK.js","../assets/11.DTcCG34U.css"])))=>i.map(i=>d[i]); -import{S as B,i as N,s as q,d as h,r as g,u as E,v as y,w as D,b as k,h as U,x as w,k as z,y as F,z as G,A as H,B as R,C as L,D as A,E as O,F as V,o as I,G as p,e as W,f as J,j as K,H as T,a as Q,g as X,t as Y}from"../chunks/62BVG-0M.js";import"../chunks/IHki7fMi.js";const Z="modulepreload",M=function(o,e){return new URL(o,e).href},S={},m=function(e,n,r){let s=Promise.resolve();if(n&&n.length>0){const t=document.getElementsByTagName("link"),i=document.querySelector("meta[property=csp-nonce]"),l=(i==null?void 0:i.nonce)||(i==null?void 0:i.getAttribute("nonce"));s=Promise.allSettled(n.map(c=>{if(c=M(c,r),c in S)return;S[c]=!0;const a=c.endsWith(".css"),u=a?'[rel="stylesheet"]':"";if(!!r)for(let b=t.length-1;b>=0;b--){const P=t[b];if(P.href===c&&(!a||P.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${c}"]${u}`))return;const d=document.createElement("link");if(d.rel=a?"stylesheet":Z,a||(d.as="script"),d.crossOrigin="",d.href=c,l&&d.setAttribute("nonce",l),document.head.appendChild(d),a)return new Promise((b,P)=>{d.addEventListener("load",b),d.addEventListener("error",()=>P(new Error(`Unable to preload CSS for ${c}`)))})}))}function _(t){const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=t,window.dispatchEvent(i),!i.defaultPrevented)throw t}return s.then(t=>{for(const i of t||[])i.status==="rejected"&&_(i.reason);return e().catch(_)})},ae={};function $(o){let e,n,r;var s=o[1][0];function _(t,i){return{props:{data:t[3],form:t[2]}}}return s&&(e=R(s,_(o)),o[12](e)),{c(){e&&A(e.$$.fragment),n=w()},l(t){e&&V(e.$$.fragment,t),n=w()},m(t,i){e&&O(e,t,i),k(t,n,i),r=!0},p(t,i){if(i&2&&s!==(s=t[1][0])){if(e){y();const l=e;g(l.$$.fragment,1,0,()=>{L(l,1)}),D()}s?(e=R(s,_(t)),t[12](e),A(e.$$.fragment),E(e.$$.fragment,1),O(e,n.parentNode,n)):e=null}else if(s){const l={};i&8&&(l.data=t[3]),i&4&&(l.form=t[2]),e.$set(l)}},i(t){r||(e&&E(e.$$.fragment,t),r=!0)},o(t){e&&g(e.$$.fragment,t),r=!1},d(t){t&&h(n),o[12](null),e&&L(e,t)}}}function x(o){let e,n,r;var s=o[1][0];function _(t,i){return{props:{data:t[3],$$slots:{default:[ee]},$$scope:{ctx:t}}}}return s&&(e=R(s,_(o)),o[11](e)),{c(){e&&A(e.$$.fragment),n=w()},l(t){e&&V(e.$$.fragment,t),n=w()},m(t,i){e&&O(e,t,i),k(t,n,i),r=!0},p(t,i){if(i&2&&s!==(s=t[1][0])){if(e){y();const l=e;g(l.$$.fragment,1,0,()=>{L(l,1)}),D()}s?(e=R(s,_(t)),t[11](e),A(e.$$.fragment),E(e.$$.fragment,1),O(e,n.parentNode,n)):e=null}else if(s){const l={};i&8&&(l.data=t[3]),i&8215&&(l.$$scope={dirty:i,ctx:t}),e.$set(l)}},i(t){r||(e&&E(e.$$.fragment,t),r=!0)},o(t){e&&g(e.$$.fragment,t),r=!1},d(t){t&&h(n),o[11](null),e&&L(e,t)}}}function ee(o){let e,n,r;var s=o[1][1];function _(t,i){return{props:{data:t[4],form:t[2]}}}return s&&(e=R(s,_(o)),o[10](e)),{c(){e&&A(e.$$.fragment),n=w()},l(t){e&&V(e.$$.fragment,t),n=w()},m(t,i){e&&O(e,t,i),k(t,n,i),r=!0},p(t,i){if(i&2&&s!==(s=t[1][1])){if(e){y();const l=e;g(l.$$.fragment,1,0,()=>{L(l,1)}),D()}s?(e=R(s,_(t)),t[10](e),A(e.$$.fragment),E(e.$$.fragment,1),O(e,n.parentNode,n)):e=null}else if(s){const l={};i&16&&(l.data=t[4]),i&4&&(l.form=t[2]),e.$set(l)}},i(t){r||(e&&E(e.$$.fragment,t),r=!0)},o(t){e&&g(e.$$.fragment,t),r=!1},d(t){t&&h(n),o[10](null),e&&L(e,t)}}}function C(o){let e,n=o[6]&&j(o);return{c(){e=K("div"),n&&n.c(),this.h()},l(r){e=W(r,"DIV",{id:!0,"aria-live":!0,"aria-atomic":!0,style:!0});var s=J(e);n&&n.l(s),s.forEach(h),this.h()},h(){I(e,"id","svelte-announcer"),I(e,"aria-live","assertive"),I(e,"aria-atomic","true"),p(e,"position","absolute"),p(e,"left","0"),p(e,"top","0"),p(e,"clip","rect(0 0 0 0)"),p(e,"clip-path","inset(50%)"),p(e,"overflow","hidden"),p(e,"white-space","nowrap"),p(e,"width","1px"),p(e,"height","1px")},m(r,s){k(r,e,s),n&&n.m(e,null)},p(r,s){r[6]?n?n.p(r,s):(n=j(r),n.c(),n.m(e,null)):n&&(n.d(1),n=null)},d(r){r&&h(e),n&&n.d()}}}function j(o){let e;return{c(){e=Y(o[7])},l(n){e=X(n,o[7])},m(n,r){k(n,e,r)},p(n,r){r&128&&Q(e,n[7])},d(n){n&&h(e)}}}function te(o){let e,n,r,s,_;const t=[x,$],i=[];function l(a,u){return a[1][1]?0:1}e=l(o),n=i[e]=t[e](o);let c=o[5]&&C(o);return{c(){n.c(),r=z(),c&&c.c(),s=w()},l(a){n.l(a),r=U(a),c&&c.l(a),s=w()},m(a,u){i[e].m(a,u),k(a,r,u),c&&c.m(a,u),k(a,s,u),_=!0},p(a,[u]){let v=e;e=l(a),e===v?i[e].p(a,u):(y(),g(i[v],1,1,()=>{i[v]=null}),D(),n=i[e],n?n.p(a,u):(n=i[e]=t[e](a),n.c()),E(n,1),n.m(r.parentNode,r)),a[5]?c?c.p(a,u):(c=C(a),c.c(),c.m(s.parentNode,s)):c&&(c.d(1),c=null)},i(a){_||(E(n),_=!0)},o(a){g(n),_=!1},d(a){a&&(h(r),h(s)),i[e].d(a),c&&c.d(a)}}}function ne(o,e,n){let{stores:r}=e,{page:s}=e,{constructors:_}=e,{components:t=[]}=e,{form:i}=e,{data_0:l=null}=e,{data_1:c=null}=e;F(r.page.notify);let a=!1,u=!1,v=null;G(()=>{const f=r.page.subscribe(()=>{a&&(n(6,u=!0),H().then(()=>{n(7,v=document.title||"untitled page")}))});return n(5,a=!0),f});function d(f){T[f?"unshift":"push"](()=>{t[1]=f,n(0,t)})}function b(f){T[f?"unshift":"push"](()=>{t[0]=f,n(0,t)})}function P(f){T[f?"unshift":"push"](()=>{t[0]=f,n(0,t)})}return o.$$set=f=>{"stores"in f&&n(8,r=f.stores),"page"in f&&n(9,s=f.page),"constructors"in f&&n(1,_=f.constructors),"components"in f&&n(0,t=f.components),"form"in f&&n(2,i=f.form),"data_0"in f&&n(3,l=f.data_0),"data_1"in f&&n(4,c=f.data_1)},o.$$.update=()=>{o.$$.dirty&768&&r.page.set(s)},[t,_,i,l,c,a,u,v,r,s,d,b,P]}class le extends B{constructor(e){super(),N(this,e,ne,te,q,{stores:8,page:9,constructors:1,components:0,form:2,data_0:3,data_1:4})}}const ce=[()=>m(()=>import("../nodes/0.B3WZRA0r.js"),__vite__mapDeps([0,1,2,3,4,5,6,7]),import.meta.url),()=>m(()=>import("../nodes/1.DUa_MPPC.js"),__vite__mapDeps([8,1,2,3,4,5]),import.meta.url),()=>m(()=>import("../nodes/2.4Ek1nF8A.js"),__vite__mapDeps([9,1,2,6,5,10]),import.meta.url),()=>m(()=>import("../nodes/3.6XyjXGPy.js"),__vite__mapDeps([11,1,2,6,5,12]),import.meta.url),()=>m(()=>import("../nodes/4.B91Ry-vX.js"),__vite__mapDeps([13,1,2,14]),import.meta.url),()=>m(()=>import("../nodes/5.ZxJVnQ2V.js"),__vite__mapDeps([15,1,2,6,5,16]),import.meta.url),()=>m(()=>import("../nodes/6.CgAFXump.js"),__vite__mapDeps([17,1,2,6,5,18]),import.meta.url),()=>m(()=>import("../nodes/7.B0nUtSqr.js"),__vite__mapDeps([19,1,2,6,5,20]),import.meta.url),()=>m(()=>import("../nodes/8.C8NcTQBU.js"),__vite__mapDeps([21,1,2,22]),import.meta.url),()=>m(()=>import("../nodes/9.B2KW8haW.js"),__vite__mapDeps([23,1,2,24]),import.meta.url),()=>m(()=>import("../nodes/10.C_OQQveQ.js"),__vite__mapDeps([25,1,2,26]),import.meta.url),()=>m(()=>import("../nodes/11.BcPfXbEK.js"),__vite__mapDeps([27,1,2,28]),import.meta.url)],fe=[],_e={"/":[2],"/donations":[3],"/donations/one-time-viem":[4],"/drip-lists":[5],"/drip-lists/create-ethers":[6],"/drip-lists/create-viem":[7],"/drip-lists/get":[8],"/drip-lists/update-ethers":[9],"/drip-lists/update-viem":[10],"/utils":[11]},ie={handleError:({error:o})=>{console.error(o)},reroute:()=>{},transport:{}},re=Object.fromEntries(Object.entries(ie.transport).map(([o,e])=>[o,e.decode])),ue=!1,me=(o,e)=>re[o](e);export{me as decode,re as decoders,_e as dictionary,ue as hash,ie as hooks,ae as matchers,ce as nodes,le as root,fe as server_loads}; diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/entry/start.CiC6nhvn.js b/testing-app/.svelte-kit/output/client/_app/immutable/entry/start.CiC6nhvn.js deleted file mode 100644 index adcee34d..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/entry/start.CiC6nhvn.js +++ /dev/null @@ -1 +0,0 @@ -import{l as o,a as r}from"../chunks/BwHU8bWb.js";export{o as load_css,r as start}; diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/nodes/0.B3WZRA0r.js b/testing-app/.svelte-kit/output/client/_app/immutable/nodes/0.B3WZRA0r.js deleted file mode 100644 index 0972d6ca..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/nodes/0.B3WZRA0r.js +++ /dev/null @@ -1 +0,0 @@ -import{S as Y,i as Z,s as ee,n as N,d as h,b as I,c as d,o as f,e as p,f as D,h as M,j as m,k as q,l as te,z as ne,a as se,g as H,t as P,p as V,I as le,J as ae,C as ie,K as oe,r as O,u as R,m as W,L as ce,M as re,N as ue,E as he,F as de,D as fe}from"../chunks/62BVG-0M.js";import"../chunks/IHki7fMi.js";import{p as ve}from"../chunks/BEfn3whw.js";import{c as pe,a as me,d as _e,f as F,i as Ce,w as we}from"../chunks/D3xHD3xP.js";function G(a){return(a==null?void 0:a.length)!==void 0?a:Array.from(a)}function ye(a){let e,s='
Not Connected',t,i,c="Connect MetaMask",l,n;return{c(){e=m("div"),e.innerHTML=s,t=q(),i=m("button"),i.textContent=c,this.h()},l(o){e=p(o,"DIV",{class:!0,"data-svelte-h":!0}),V(e)!=="svelte-114j4a3"&&(e.innerHTML=s),t=M(o),i=p(o,"BUTTON",{class:!0,"data-svelte-h":!0}),V(i)!=="svelte-ez1jo1"&&(i.textContent=c),this.h()},h(){f(e,"class","wallet-status svelte-1pdwhqy"),f(i,"class","wallet-button svelte-1pdwhqy")},m(o,u){I(o,e,u),I(o,t,u),I(o,i,u),l||(n=le(i,"click",a[1]),l=!0)},p:N,d(o){o&&(h(e),h(t),h(i)),l=!1,n()}}}function be(a){let e,s,t,i,c="Connected:",l,n,o=F(a[0].address)+"",u,b,w,E="Disconnect",A,L;return{c(){e=m("div"),s=m("div"),t=q(),i=m("span"),i.textContent=c,l=q(),n=m("div"),u=P(o),b=q(),w=m("button"),w.textContent=E,this.h()},l(y){e=p(y,"DIV",{class:!0});var _=D(e);s=p(_,"DIV",{class:!0}),D(s).forEach(h),t=M(_),i=p(_,"SPAN",{"data-svelte-h":!0}),V(i)!=="svelte-1c29itd"&&(i.textContent=c),l=M(_),n=p(_,"DIV",{class:!0});var k=D(n);u=H(k,o),k.forEach(h),_.forEach(h),b=M(y),w=p(y,"BUTTON",{class:!0,"data-svelte-h":!0}),V(w)!=="svelte-3ennoa"&&(w.textContent=E),this.h()},h(){f(s,"class","status-indicator svelte-1pdwhqy"),f(n,"class","address svelte-1pdwhqy"),f(e,"class","wallet-status svelte-1pdwhqy"),f(w,"class","wallet-button disconnect svelte-1pdwhqy")},m(y,_){I(y,e,_),d(e,s),d(e,t),d(e,i),d(e,l),d(e,n),d(n,u),I(y,b,_),I(y,w,_),A||(L=le(w,"click",a[2]),A=!0)},p(y,_){_&1&&o!==(o=F(y[0].address)+"")&&se(u,o)},d(y){y&&(h(e),h(b),h(w)),A=!1,L()}}}function ge(a){let e,s="🔄 Connecting...";return{c(){e=m("div"),e.textContent=s,this.h()},l(t){e=p(t,"DIV",{class:!0,"data-svelte-h":!0}),V(e)!=="svelte-fu4bj0"&&(e.textContent=s),this.h()},h(){f(e,"class","connecting svelte-1pdwhqy")},m(t,i){I(t,e,i)},p:N,d(t){t&&h(e)}}}function De(a){let e,s="⚠️ MetaMask not detected. Please install MetaMask to connect your wallet.";return{c(){e=m("div"),e.textContent=s,this.h()},l(t){e=p(t,"DIV",{class:!0,"data-svelte-h":!0}),V(e)!=="svelte-o8eiiy"&&(e.textContent=s),this.h()},h(){f(e,"class","metamask-warning svelte-1pdwhqy")},m(t,i){I(t,e,i)},p:N,d(t){t&&h(e)}}}function J(a){let e,s,t=a[0].error+"",i;return{c(){e=m("div"),s=P("❌ "),i=P(t),this.h()},l(c){e=p(c,"DIV",{class:!0});var l=D(e);s=H(l,"❌ "),i=H(l,t),l.forEach(h),this.h()},h(){f(e,"class","error svelte-1pdwhqy")},m(c,l){I(c,e,l),d(e,s),d(e,i)},p(c,l){l&1&&t!==(t=c[0].error+"")&&se(i,t)},d(c){c&&h(e)}}}function Ee(a){let e,s,t;function i(o,u){return s==null&&(s=!Ce()),s?De:o[0].isConnecting?ge:o[0].isConnected?be:ye}let c=i(a),l=c(a),n=a[0].error&&J(a);return{c(){e=m("div"),l.c(),t=q(),n&&n.c(),this.h()},l(o){e=p(o,"DIV",{class:!0});var u=D(e);l.l(u),t=M(u),n&&n.l(u),u.forEach(h),this.h()},h(){f(e,"class","wallet-container svelte-1pdwhqy")},m(o,u){I(o,e,u),l.m(e,null),d(e,t),n&&n.m(e,null)},p(o,[u]){c===(c=i(o))&&l?l.p(o,u):(l.d(1),l=c(o),l&&(l.c(),l.m(e,t))),o[0].error?n?n.p(o,u):(n=J(o),n.c(),n.m(e,null)):n&&(n.d(1),n=null)},i:N,o:N,d(o){o&&h(e),l.d(),n&&n.d()}}}function $e(a,e,s){let t;te(a,we,l=>s(0,t=l)),ne(()=>{pe()});function i(){me()}function c(){_e()}return[t,i,c]}class Ie extends Y{constructor(e){super(),Z(this,e,$e,Ee,ee,{})}}function Q(a,e,s){const t=a.slice();return t[4]=e[s],t}function X(a){let e,s,t=a[4].name+"",i,c;return{c(){e=m("li"),s=m("a"),i=P(t),c=q(),this.h()},l(l){e=p(l,"LI",{class:!0});var n=D(e);s=p(n,"A",{href:!0,class:!0});var o=D(s);i=H(o,t),o.forEach(h),c=M(n),n.forEach(h),this.h()},h(){f(s,"href",a[4].path),f(s,"class","svelte-eu58yt"),W(s,"active",a[0].url.pathname.startsWith(a[4].path)),f(e,"class","svelte-eu58yt")},m(l,n){I(l,e,n),d(e,s),d(s,i),d(e,c)},p(l,n){n&3&&W(s,"active",l[0].url.pathname.startsWith(l[4].path))},d(l){l&&h(e)}}}function ke(a){let e,s,t,i='

🚰 DRIPS SDK TESTING APP 🚰

Explore the Drips SDK through a simple web interface

',c,l,n,o,u,b,w,E,A="Home",L,y,_,k;n=new Ie({});let T=G(a[1]),C=[];for(let r=0;rs(0,t=n));let{$$slots:i={},$$scope:c}=e;const l=[{name:"Drip Lists",path:"/drip-lists"},{name:"Donations",path:"/donations"},{name:"Utils",path:"/utils"}];return a.$$set=n=>{"$$scope"in n&&s(2,c=n.$$scope)},[t,l,c,i]}class Te extends Y{constructor(e){super(),Z(this,e,Me,ke,ee,{})}}export{Te as component}; diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/nodes/1.DUa_MPPC.js b/testing-app/.svelte-kit/output/client/_app/immutable/nodes/1.DUa_MPPC.js deleted file mode 100644 index ff2cda73..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/nodes/1.DUa_MPPC.js +++ /dev/null @@ -1 +0,0 @@ -import{S as x,i as S,s as j,n as u,d as c,a as h,b as _,c as d,e as v,f as g,g as b,h as k,j as E,t as $,k as q,l as y}from"../chunks/62BVG-0M.js";import"../chunks/IHki7fMi.js";import{p as C}from"../chunks/BEfn3whw.js";function H(p){var f;let a,s=p[0].status+"",r,n,o,i=((f=p[0].error)==null?void 0:f.message)+"",m;return{c(){a=E("h1"),r=$(s),n=q(),o=E("p"),m=$(i)},l(e){a=v(e,"H1",{});var t=g(a);r=b(t,s),t.forEach(c),n=k(e),o=v(e,"P",{});var l=g(o);m=b(l,i),l.forEach(c)},m(e,t){_(e,a,t),d(a,r),_(e,n,t),_(e,o,t),d(o,m)},p(e,[t]){var l;t&1&&s!==(s=e[0].status+"")&&h(r,s),t&1&&i!==(i=((l=e[0].error)==null?void 0:l.message)+"")&&h(m,i)},i:u,o:u,d(e){e&&(c(a),c(n),c(o))}}}function P(p,a,s){let r;return y(p,C,n=>s(0,r=n)),[r]}class B extends x{constructor(a){super(),S(this,a,P,H,j,{})}}export{B as component}; diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/nodes/10.C_OQQveQ.js b/testing-app/.svelte-kit/output/client/_app/immutable/nodes/10.C_OQQveQ.js deleted file mode 100644 index e9462e91..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/nodes/10.C_OQQveQ.js +++ /dev/null @@ -1,6 +0,0 @@ -import{S as Sl,i as Al,s as Nl,n as wt,d as s,b as d,c as t,o as v,q as p,e as l,p as n,h as r,f as u,j as i,k as o}from"../chunks/62BVG-0M.js";import"../chunks/IHki7fMi.js";function ql(wl){let _,St='← Back to Drip Lists',Ae,oe,At="Update Drip List (Viem)",Ne,q,Nt=`📝 About this operation:
- This page replicates the "Update Drip List using Viem" integration test. It will first create an initial drip list, - then update its metadata and receivers, and verify the changes were applied correctly.`,qe,U,qt="Step 1: Configure Wallet and Network Settings",Ue,k,Ut='
',ke,j,kt="Step 2: Configure IPFS Settings",je,R,jt='
',Re,W,Rt="PHASE 1: CREATE INITIAL DRIP LIST",We,B,Wt="Step 3: Define Initial Drip List Metadata",Be,F,Bt=`
`,Fe,G,Ft="Step 4: Configure Initial Split Receivers",Ge,x,me,Gt="Initial Split Receivers",dt,Le,Jt="Define the initial receivers (total weight must equal 1,000,000).",ct,C,J,De,zt="Type:",ut,z,g,Kt="Project",V,Qt="Address",H,Yt="Drip List",pt,de,Xt=' ',xt,ce,Zt=' ',ft,h,K,Ie,$t="Type:",_t,Q,M,el="Project",b,tl="Address",E,ll="Drip List",Ct,ue,il=' ',gt,pe,sl=' ',Je,Y,nl="PHASE 2: UPDATE THE DRIP LIST",ze,X,al="Step 5: Define Updated Drip List Metadata",Ke,Z,vl=`
`,Qe,$,rl="Step 6: Configure Updated Split Receivers",Ye,c,Te,ol="Updated Split Receivers",ht,ye,dl="Define the updated receivers with new weights and an additional receiver.",bt,m,ee,Ve,cl="Type:",mt,te,L,ul="Project",P,pl="Address",O,xl="Drip List",Lt,xe,fl=' ',Dt,fe,_l=' ',It,D,le,He,Cl="Type:",Tt,ie,w,gl="Project",I,hl="Address",S,bl="Drip List",yt,_e,ml=' ',Vt,Ce,Ll=' ',Ht,T,se,Me,Dl="Type:",Mt,ne,A,Il="Project",y,Tl="Address",N,yl="Drip List",Et,ge,Vl=' ',Pt,he,Hl=' ',Ot,be,Ml="+ Add Receiver",Xe,ae,El="Step 7: Execute Operation",Ze,ve,Pl=' ',$e,re,Ol=`⚠️ Note: This operation involves two blockchain transactions and IPFS uploads. - Make sure you have sufficient funds for gas fees and valid API credentials.`;return{c(){_=i("div"),_.innerHTML=St,Ae=o(),oe=i("h1"),oe.textContent=At,Ne=o(),q=i("div"),q.innerHTML=Nt,qe=o(),U=i("div"),U.textContent=qt,Ue=o(),k=i("div"),k.innerHTML=Ut,ke=o(),j=i("div"),j.textContent=kt,je=o(),R=i("div"),R.innerHTML=jt,Re=o(),W=i("div"),W.textContent=Rt,We=o(),B=i("div"),B.textContent=Wt,Be=o(),F=i("div"),F.innerHTML=Bt,Fe=o(),G=i("div"),G.textContent=Ft,Ge=o(),x=i("div"),me=i("h3"),me.textContent=Gt,dt=o(),Le=i("p"),Le.textContent=Jt,ct=o(),C=i("div"),J=i("div"),De=i("label"),De.textContent=zt,ut=o(),z=i("select"),g=i("option"),g.textContent=Kt,V=i("option"),V.textContent=Qt,H=i("option"),H.textContent=Yt,pt=o(),de=i("div"),de.innerHTML=Xt,xt=o(),ce=i("div"),ce.innerHTML=Zt,ft=o(),h=i("div"),K=i("div"),Ie=i("label"),Ie.textContent=$t,_t=o(),Q=i("select"),M=i("option"),M.textContent=el,b=i("option"),b.textContent=tl,E=i("option"),E.textContent=ll,Ct=o(),ue=i("div"),ue.innerHTML=il,gt=o(),pe=i("div"),pe.innerHTML=sl,Je=o(),Y=i("div"),Y.textContent=nl,ze=o(),X=i("div"),X.textContent=al,Ke=o(),Z=i("div"),Z.innerHTML=vl,Qe=o(),$=i("div"),$.textContent=rl,Ye=o(),c=i("div"),Te=i("h3"),Te.textContent=ol,ht=o(),ye=i("p"),ye.textContent=dl,bt=o(),m=i("div"),ee=i("div"),Ve=i("label"),Ve.textContent=cl,mt=o(),te=i("select"),L=i("option"),L.textContent=ul,P=i("option"),P.textContent=pl,O=i("option"),O.textContent=xl,Lt=o(),xe=i("div"),xe.innerHTML=fl,Dt=o(),fe=i("div"),fe.innerHTML=_l,It=o(),D=i("div"),le=i("div"),He=i("label"),He.textContent=Cl,Tt=o(),ie=i("select"),w=i("option"),w.textContent=gl,I=i("option"),I.textContent=hl,S=i("option"),S.textContent=bl,yt=o(),_e=i("div"),_e.innerHTML=ml,Vt=o(),Ce=i("div"),Ce.innerHTML=Ll,Ht=o(),T=i("div"),se=i("div"),Me=i("label"),Me.textContent=Dl,Mt=o(),ne=i("select"),A=i("option"),A.textContent=Il,y=i("option"),y.textContent=Tl,N=i("option"),N.textContent=yl,Et=o(),ge=i("div"),ge.innerHTML=Vl,Pt=o(),he=i("div"),he.innerHTML=Hl,Ot=o(),be=i("button"),be.textContent=Ml,Xe=o(),ae=i("div"),ae.textContent=El,Ze=o(),ve=i("div"),ve.innerHTML=Pl,$e=o(),re=i("div"),re.innerHTML=Ol,this.h()},l(e){_=l(e,"DIV",{class:!0,"data-svelte-h":!0}),n(_)!=="svelte-m7gd4h"&&(_.innerHTML=St),Ae=r(e),oe=l(e,"H1",{"data-svelte-h":!0}),n(oe)!=="svelte-1pb8ln8"&&(oe.textContent=At),Ne=r(e),q=l(e,"DIV",{class:!0,"data-svelte-h":!0}),n(q)!=="svelte-1wygto0"&&(q.innerHTML=Nt),qe=r(e),U=l(e,"DIV",{class:!0,"data-svelte-h":!0}),n(U)!=="svelte-1srdtj0"&&(U.textContent=qt),Ue=r(e),k=l(e,"DIV",{class:!0,"data-svelte-h":!0}),n(k)!=="svelte-1t0r7wc"&&(k.innerHTML=Ut),ke=r(e),j=l(e,"DIV",{class:!0,"data-svelte-h":!0}),n(j)!=="svelte-1ty33rx"&&(j.textContent=kt),je=r(e),R=l(e,"DIV",{class:!0,"data-svelte-h":!0}),n(R)!=="svelte-pcazou"&&(R.innerHTML=jt),Re=r(e),W=l(e,"DIV",{class:!0,"data-svelte-h":!0}),n(W)!=="svelte-8bh8a4"&&(W.textContent=Rt),We=r(e),B=l(e,"DIV",{class:!0,"data-svelte-h":!0}),n(B)!=="svelte-1vxuyuu"&&(B.textContent=Wt),Be=r(e),F=l(e,"DIV",{class:!0,"data-svelte-h":!0}),n(F)!=="svelte-iaz4ao"&&(F.innerHTML=Bt),Fe=r(e),G=l(e,"DIV",{class:!0,"data-svelte-h":!0}),n(G)!=="svelte-1oig5vo"&&(G.textContent=Ft),Ge=r(e),x=l(e,"DIV",{class:!0});var a=u(x);me=l(a,"H3",{"data-svelte-h":!0}),n(me)!=="svelte-1s7qcj8"&&(me.textContent=Gt),dt=r(a),Le=l(a,"P",{"data-svelte-h":!0}),n(Le)!=="svelte-11g4rl"&&(Le.textContent=Jt),ct=r(a),C=l(a,"DIV",{class:!0});var Ee=u(C);J=l(Ee,"DIV",{class:!0});var et=u(J);De=l(et,"LABEL",{"data-svelte-h":!0}),n(De)!=="svelte-1r3qowe"&&(De.textContent=zt),ut=r(et),z=l(et,"SELECT",{class:!0});var tt=u(z);g=l(tt,"OPTION",{"data-svelte-h":!0}),n(g)!=="svelte-1mortop"&&(g.textContent=Kt),V=l(tt,"OPTION",{"data-svelte-h":!0}),n(V)!=="svelte-12qs08i"&&(V.textContent=Qt),H=l(tt,"OPTION",{"data-svelte-h":!0}),n(H)!=="svelte-1vd24y3"&&(H.textContent=Yt),tt.forEach(s),et.forEach(s),pt=r(Ee),de=l(Ee,"DIV",{class:!0,"data-svelte-h":!0}),n(de)!=="svelte-13gcqrh"&&(de.innerHTML=Xt),xt=r(Ee),ce=l(Ee,"DIV",{class:!0,"data-svelte-h":!0}),n(ce)!=="svelte-rp3oo"&&(ce.innerHTML=Zt),Ee.forEach(s),ft=r(a),h=l(a,"DIV",{class:!0});var Pe=u(h);K=l(Pe,"DIV",{class:!0});var lt=u(K);Ie=l(lt,"LABEL",{"data-svelte-h":!0}),n(Ie)!=="svelte-1r3qowe"&&(Ie.textContent=$t),_t=r(lt),Q=l(lt,"SELECT",{class:!0});var it=u(Q);M=l(it,"OPTION",{"data-svelte-h":!0}),n(M)!=="svelte-1y3alm4"&&(M.textContent=el),b=l(it,"OPTION",{"data-svelte-h":!0}),n(b)!=="svelte-8dw449"&&(b.textContent=tl),E=l(it,"OPTION",{"data-svelte-h":!0}),n(E)!=="svelte-1vd24y3"&&(E.textContent=ll),it.forEach(s),lt.forEach(s),Ct=r(Pe),ue=l(Pe,"DIV",{class:!0,"data-svelte-h":!0}),n(ue)!=="svelte-1n3qnm6"&&(ue.innerHTML=il),gt=r(Pe),pe=l(Pe,"DIV",{class:!0,"data-svelte-h":!0}),n(pe)!=="svelte-rp3oo"&&(pe.innerHTML=sl),Pe.forEach(s),a.forEach(s),Je=r(e),Y=l(e,"DIV",{class:!0,"data-svelte-h":!0}),n(Y)!=="svelte-66f6gv"&&(Y.textContent=nl),ze=r(e),X=l(e,"DIV",{class:!0,"data-svelte-h":!0}),n(X)!=="svelte-rlgkuv"&&(X.textContent=al),Ke=r(e),Z=l(e,"DIV",{class:!0,"data-svelte-h":!0}),n(Z)!=="svelte-1xxo4ce"&&(Z.innerHTML=vl),Qe=r(e),$=l(e,"DIV",{class:!0,"data-svelte-h":!0}),n($)!=="svelte-p8huvr"&&($.textContent=rl),Ye=r(e),c=l(e,"DIV",{class:!0});var f=u(c);Te=l(f,"H3",{"data-svelte-h":!0}),n(Te)!=="svelte-1qgpxx"&&(Te.textContent=ol),ht=r(f),ye=l(f,"P",{"data-svelte-h":!0}),n(ye)!=="svelte-1lk749o"&&(ye.textContent=dl),bt=r(f),m=l(f,"DIV",{class:!0});var Oe=u(m);ee=l(Oe,"DIV",{class:!0});var st=u(ee);Ve=l(st,"LABEL",{"data-svelte-h":!0}),n(Ve)!=="svelte-1r3qowe"&&(Ve.textContent=cl),mt=r(st),te=l(st,"SELECT",{class:!0});var nt=u(te);L=l(nt,"OPTION",{"data-svelte-h":!0}),n(L)!=="svelte-1mortop"&&(L.textContent=ul),P=l(nt,"OPTION",{"data-svelte-h":!0}),n(P)!=="svelte-12qs08i"&&(P.textContent=pl),O=l(nt,"OPTION",{"data-svelte-h":!0}),n(O)!=="svelte-1vd24y3"&&(O.textContent=xl),nt.forEach(s),st.forEach(s),Lt=r(Oe),xe=l(Oe,"DIV",{class:!0,"data-svelte-h":!0}),n(xe)!=="svelte-13gcqrh"&&(xe.innerHTML=fl),Dt=r(Oe),fe=l(Oe,"DIV",{class:!0,"data-svelte-h":!0}),n(fe)!=="svelte-1vjkx1j"&&(fe.innerHTML=_l),Oe.forEach(s),It=r(f),D=l(f,"DIV",{class:!0});var we=u(D);le=l(we,"DIV",{class:!0});var at=u(le);He=l(at,"LABEL",{"data-svelte-h":!0}),n(He)!=="svelte-1r3qowe"&&(He.textContent=Cl),Tt=r(at),ie=l(at,"SELECT",{class:!0});var vt=u(ie);w=l(vt,"OPTION",{"data-svelte-h":!0}),n(w)!=="svelte-1y3alm4"&&(w.textContent=gl),I=l(vt,"OPTION",{"data-svelte-h":!0}),n(I)!=="svelte-8dw449"&&(I.textContent=hl),S=l(vt,"OPTION",{"data-svelte-h":!0}),n(S)!=="svelte-1vd24y3"&&(S.textContent=bl),vt.forEach(s),at.forEach(s),yt=r(we),_e=l(we,"DIV",{class:!0,"data-svelte-h":!0}),n(_e)!=="svelte-1n3qnm6"&&(_e.innerHTML=ml),Vt=r(we),Ce=l(we,"DIV",{class:!0,"data-svelte-h":!0}),n(Ce)!=="svelte-1x1w7v8"&&(Ce.innerHTML=Ll),we.forEach(s),Ht=r(f),T=l(f,"DIV",{class:!0});var Se=u(T);se=l(Se,"DIV",{class:!0});var rt=u(se);Me=l(rt,"LABEL",{"data-svelte-h":!0}),n(Me)!=="svelte-1r3qowe"&&(Me.textContent=Dl),Mt=r(rt),ne=l(rt,"SELECT",{class:!0});var ot=u(ne);A=l(ot,"OPTION",{"data-svelte-h":!0}),n(A)!=="svelte-1y3alm4"&&(A.textContent=Il),y=l(ot,"OPTION",{"data-svelte-h":!0}),n(y)!=="svelte-8dw449"&&(y.textContent=Tl),N=l(ot,"OPTION",{"data-svelte-h":!0}),n(N)!=="svelte-1vd24y3"&&(N.textContent=yl),ot.forEach(s),rt.forEach(s),Et=r(Se),ge=l(Se,"DIV",{class:!0,"data-svelte-h":!0}),n(ge)!=="svelte-6i4zgn"&&(ge.innerHTML=Vl),Pt=r(Se),he=l(Se,"DIV",{class:!0,"data-svelte-h":!0}),n(he)!=="svelte-18tou36"&&(he.innerHTML=Hl),Se.forEach(s),Ot=r(f),be=l(f,"BUTTON",{class:!0,"data-svelte-h":!0}),n(be)!=="svelte-1x879b4"&&(be.textContent=Ml),f.forEach(s),Xe=r(e),ae=l(e,"DIV",{class:!0,"data-svelte-h":!0}),n(ae)!=="svelte-fejlb5"&&(ae.textContent=El),Ze=r(e),ve=l(e,"DIV",{class:!0,"data-svelte-h":!0}),n(ve)!=="svelte-19mjc9h"&&(ve.innerHTML=Pl),$e=r(e),re=l(e,"DIV",{class:!0,"data-svelte-h":!0}),n(re)!=="svelte-1dla8qa"&&(re.innerHTML=Ol),this.h()},h(){v(_,"class","back-link svelte-ing6in"),v(q,"class","info-box svelte-ing6in"),v(U,"class","step-indicator svelte-ing6in"),v(k,"class","form-container svelte-ing6in"),v(j,"class","step-indicator svelte-ing6in"),v(R,"class","form-container svelte-ing6in"),v(W,"class","phase-separator svelte-ing6in"),v(B,"class","step-indicator svelte-ing6in"),v(F,"class","form-container svelte-ing6in"),v(G,"class","step-indicator svelte-ing6in"),g.__value="project",p(g,g.__value),g.selected=!0,V.__value="address",p(V,V.__value),H.__value="drip-list",p(H,H.__value),v(z,"class","svelte-ing6in"),v(J,"class","receiver-controls svelte-ing6in"),v(de,"class","form-group svelte-ing6in"),v(ce,"class","form-group svelte-ing6in"),v(C,"class","receiver-item svelte-ing6in"),M.__value="project",p(M,M.__value),b.__value="address",p(b,b.__value),b.selected=!0,E.__value="drip-list",p(E,E.__value),v(Q,"class","svelte-ing6in"),v(K,"class","receiver-controls svelte-ing6in"),v(ue,"class","form-group svelte-ing6in"),v(pe,"class","form-group svelte-ing6in"),v(h,"class","receiver-item svelte-ing6in"),v(x,"class","receivers-section svelte-ing6in"),v(Y,"class","phase-separator svelte-ing6in"),v(X,"class","step-indicator svelte-ing6in"),v(Z,"class","form-container svelte-ing6in"),v($,"class","step-indicator svelte-ing6in"),L.__value="project",p(L,L.__value),L.selected=!0,P.__value="address",p(P,P.__value),O.__value="drip-list",p(O,O.__value),v(te,"class","svelte-ing6in"),v(ee,"class","receiver-controls svelte-ing6in"),v(xe,"class","form-group svelte-ing6in"),v(fe,"class","form-group svelte-ing6in"),v(m,"class","receiver-item svelte-ing6in"),w.__value="project",p(w,w.__value),I.__value="address",p(I,I.__value),I.selected=!0,S.__value="drip-list",p(S,S.__value),v(ie,"class","svelte-ing6in"),v(le,"class","receiver-controls svelte-ing6in"),v(_e,"class","form-group svelte-ing6in"),v(Ce,"class","form-group svelte-ing6in"),v(D,"class","receiver-item svelte-ing6in"),A.__value="project",p(A,A.__value),y.__value="address",p(y,y.__value),y.selected=!0,N.__value="drip-list",p(N,N.__value),v(ne,"class","svelte-ing6in"),v(se,"class","receiver-controls svelte-ing6in"),v(ge,"class","form-group svelte-ing6in"),v(he,"class","form-group svelte-ing6in"),v(T,"class","receiver-item svelte-ing6in"),v(be,"class","button svelte-ing6in"),v(c,"class","receivers-section svelte-ing6in"),v(ae,"class","step-indicator svelte-ing6in"),v(ve,"class","form-container svelte-ing6in"),v(re,"class","info-box svelte-ing6in")},m(e,a){d(e,_,a),d(e,Ae,a),d(e,oe,a),d(e,Ne,a),d(e,q,a),d(e,qe,a),d(e,U,a),d(e,Ue,a),d(e,k,a),d(e,ke,a),d(e,j,a),d(e,je,a),d(e,R,a),d(e,Re,a),d(e,W,a),d(e,We,a),d(e,B,a),d(e,Be,a),d(e,F,a),d(e,Fe,a),d(e,G,a),d(e,Ge,a),d(e,x,a),t(x,me),t(x,dt),t(x,Le),t(x,ct),t(x,C),t(C,J),t(J,De),t(J,ut),t(J,z),t(z,g),t(z,V),t(z,H),t(C,pt),t(C,de),t(C,xt),t(C,ce),t(x,ft),t(x,h),t(h,K),t(K,Ie),t(K,_t),t(K,Q),t(Q,M),t(Q,b),t(Q,E),t(h,Ct),t(h,ue),t(h,gt),t(h,pe),d(e,Je,a),d(e,Y,a),d(e,ze,a),d(e,X,a),d(e,Ke,a),d(e,Z,a),d(e,Qe,a),d(e,$,a),d(e,Ye,a),d(e,c,a),t(c,Te),t(c,ht),t(c,ye),t(c,bt),t(c,m),t(m,ee),t(ee,Ve),t(ee,mt),t(ee,te),t(te,L),t(te,P),t(te,O),t(m,Lt),t(m,xe),t(m,Dt),t(m,fe),t(c,It),t(c,D),t(D,le),t(le,He),t(le,Tt),t(le,ie),t(ie,w),t(ie,I),t(ie,S),t(D,yt),t(D,_e),t(D,Vt),t(D,Ce),t(c,Ht),t(c,T),t(T,se),t(se,Me),t(se,Mt),t(se,ne),t(ne,A),t(ne,y),t(ne,N),t(T,Et),t(T,ge),t(T,Pt),t(T,he),t(c,Ot),t(c,be),d(e,Xe,a),d(e,ae,a),d(e,Ze,a),d(e,ve,a),d(e,$e,a),d(e,re,a)},p:wt,i:wt,o:wt,d(e){e&&(s(_),s(Ae),s(oe),s(Ne),s(q),s(qe),s(U),s(Ue),s(k),s(ke),s(j),s(je),s(R),s(Re),s(W),s(We),s(B),s(Be),s(F),s(Fe),s(G),s(Ge),s(x),s(Je),s(Y),s(ze),s(X),s(Ke),s(Z),s(Qe),s($),s(Ye),s(c),s(Xe),s(ae),s(Ze),s(ve),s($e),s(re))}}}class jl extends Sl{constructor(_){super(),Al(this,_,null,ql,Nl,{})}}export{jl as component}; diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/nodes/11.BcPfXbEK.js b/testing-app/.svelte-kit/output/client/_app/immutable/nodes/11.BcPfXbEK.js deleted file mode 100644 index f6fbea8a..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/nodes/11.BcPfXbEK.js +++ /dev/null @@ -1,3 +0,0 @@ -import{S as T,i as k,s as P,n as I,d as l,b as a,o as C,e as r,p as d,h as f,j as h,k as D}from"../chunks/62BVG-0M.js";import"../chunks/IHki7fMi.js";function L(_){let e,g='← Back to Home',u,o,x="🔧 Utils Module",p,c,j=`The utils module provides helper functions and tools for working with the Drips SDK. - These utilities help with common tasks like calculating account IDs, working with metadata, - and other SDK-related operations.`,v,i,H="

Utility Categories:

  • Account ID Calculators: Calculate account IDs for addresses and drip lists
  • Project ID Tools: Calculate project IDs from GitHub URLs
  • Metadata Helpers: Work with IPFS metadata and schemas
",m,n,M='

Calculate Account IDs 👁️ READ

Calculate account IDs for different types of accounts in the Drips ecosystem:

  • Address account IDs
  • Drip list account IDs
  • Project account IDs
Calculate Account IDs →

Calculate Project IDs 👁️ READ

Calculate project IDs from GitHub repository URLs and other project identifiers:

  • GitHub project ID calculation
  • Project URL parsing
  • Forge and name extraction
Calculate Project IDs →

Metadata Tools 👁️ READ

Work with IPFS metadata, schemas, and other metadata-related operations:

  • Metadata schema validation
  • IPFS hash generation
  • Metadata encoding/decoding
Metadata Tools →
';return{c(){e=h("div"),e.innerHTML=g,u=D(),o=h("h1"),o.textContent=x,p=D(),c=h("p"),c.textContent=j,v=D(),i=h("div"),i.innerHTML=H,m=D(),n=h("div"),n.innerHTML=M,this.h()},l(t){e=r(t,"DIV",{class:!0,"data-svelte-h":!0}),d(e)!=="svelte-15g6gdr"&&(e.innerHTML=g),u=f(t),o=r(t,"H1",{"data-svelte-h":!0}),d(o)!=="svelte-139wjd7"&&(o.textContent=x),p=f(t),c=r(t,"P",{"data-svelte-h":!0}),d(c)!=="svelte-1g00zma"&&(c.textContent=j),v=f(t),i=r(t,"DIV",{class:!0,"data-svelte-h":!0}),d(i)!=="svelte-5dpil8"&&(i.innerHTML=H),m=f(t),n=r(t,"DIV",{class:!0,"data-svelte-h":!0}),d(n)!=="svelte-fz487n"&&(n.innerHTML=M),this.h()},h(){C(e,"class","back-link svelte-s1nhl5"),C(i,"class","utils-info svelte-s1nhl5"),C(n,"class","operations svelte-s1nhl5")},m(t,s){a(t,e,s),a(t,u,s),a(t,o,s),a(t,p,s),a(t,c,s),a(t,v,s),a(t,i,s),a(t,m,s),a(t,n,s)},p:I,i:I,o:I,d(t){t&&(l(e),l(u),l(o),l(p),l(c),l(v),l(i),l(m),l(n))}}}class S extends T{constructor(e){super(),k(this,e,null,L,P,{})}}export{S as component}; diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/nodes/2.4Ek1nF8A.js b/testing-app/.svelte-kit/output/client/_app/immutable/nodes/2.4Ek1nF8A.js deleted file mode 100644 index b5a3941f..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/nodes/2.4Ek1nF8A.js +++ /dev/null @@ -1,4 +0,0 @@ -import{S as V,i as P,s as E,n as S,d as a,m as H,b as o,c as M,o as y,e as u,p as C,h as x,f as g,j as h,k as w,l as I,a as K,g as A,t as j}from"../chunks/62BVG-0M.js";import"../chunks/IHki7fMi.js";import{w as q}from"../chunks/D3xHD3xP.js";function U(_){let l,D="❌ Wallet Not Connected",c,i,v="Connect your MetaMask wallet using the button in the header to interact with blockchain features.",f,n,r="Some features may require a connected wallet to function properly.";return{c(){l=h("p"),l.innerHTML=D,c=w(),i=h("p"),i.textContent=v,f=w(),n=h("p"),n.innerHTML=r},l(s){l=u(s,"P",{"data-svelte-h":!0}),C(l)!=="svelte-1l4cnjk"&&(l.innerHTML=D),c=x(s),i=u(s,"P",{"data-svelte-h":!0}),C(i)!=="svelte-msh2i9"&&(i.textContent=v),f=x(s),n=u(s,"P",{"data-svelte-h":!0}),C(n)!=="svelte-1ml8jdf"&&(n.innerHTML=r)},m(s,m){o(s,l,m),o(s,c,m),o(s,i,m),o(s,f,m),o(s,n,m)},p:S,d(s){s&&(a(l),a(c),a(i),a(f),a(n))}}}function W(_){let l,D="✅ Wallet Connected!",c,i,v="Your wallet is connected and ready to interact with the Drips SDK.",f,n,r,s="Connected Address:",m,T,p=_[0].address+"",L,b,k,d="You can now use all the SDK features that require wallet interaction.";return{c(){l=h("p"),l.innerHTML=D,c=w(),i=h("p"),i.textContent=v,f=w(),n=h("div"),r=h("strong"),r.textContent=s,m=h("br"),T=w(),L=j(p),b=w(),k=h("p"),k.innerHTML=d,this.h()},l(e){l=u(e,"P",{"data-svelte-h":!0}),C(l)!=="svelte-1ahyqdf"&&(l.innerHTML=D),c=x(e),i=u(e,"P",{"data-svelte-h":!0}),C(i)!=="svelte-b3yz8x"&&(i.textContent=v),f=x(e),n=u(e,"DIV",{class:!0});var t=g(n);r=u(t,"STRONG",{"data-svelte-h":!0}),C(r)!=="svelte-18nhnlf"&&(r.textContent=s),m=u(t,"BR",{}),T=x(t),L=A(t,p),t.forEach(a),b=x(e),k=u(e,"P",{"data-svelte-h":!0}),C(k)!=="svelte-1kldnxx"&&(k.innerHTML=d),this.h()},h(){y(n,"class","wallet-address svelte-1piekce")},m(e,t){o(e,l,t),o(e,c,t),o(e,i,t),o(e,f,t),o(e,n,t),M(n,r),M(n,m),M(n,T),M(n,L),o(e,b,t),o(e,k,t)},p(e,t){t&1&&p!==(p=e[0].address+"")&&K(L,p)},d(e){e&&(a(l),a(c),a(i),a(f),a(n),a(b),a(k))}}}function N(_){let l,D="

Welcome to the Drips SDK Testing App

This simple interface allows you to test and explore the Drips SDK functionality

",c,i,v,f="🔗 Wallet Connection",n,r,s,m=`

About This App

This testing application provides a user interface to replicate the integration tests - found in the Drips SDK. Each module corresponds to different SDK functionality, - allowing you to interact with the blockchain through a simple web interface.

Note: This is a testing interface designed for development and - exploration purposes. All operations will interact with the configured blockchain network.

`,T,p,L='

🗂️ Drip Lists

Create and manage drip lists - collections of receivers that split incoming funds.

💰 Donations

Send one-time and continuous donations to drip lists and other receivers.

🔧 Utils

Utility functions and helper tools for working with the Drips SDK.

';function b(e,t){return e[0].isConnected?W:U}let k=b(_),d=k(_);return{c(){l=h("div"),l.innerHTML=D,c=w(),i=h("div"),v=h("h2"),v.textContent=f,n=w(),d.c(),r=w(),s=h("div"),s.innerHTML=m,T=w(),p=h("div"),p.innerHTML=L,this.h()},l(e){l=u(e,"DIV",{class:!0,"data-svelte-h":!0}),C(l)!=="svelte-y105an"&&(l.innerHTML=D),c=x(e),i=u(e,"DIV",{class:!0});var t=g(i);v=u(t,"H2",{"data-svelte-h":!0}),C(v)!=="svelte-18z92x"&&(v.textContent=f),n=x(t),d.l(t),t.forEach(a),r=x(e),s=u(e,"DIV",{class:!0,"data-svelte-h":!0}),C(s)!=="svelte-1acwaxg"&&(s.innerHTML=m),T=x(e),p=u(e,"DIV",{class:!0,"data-svelte-h":!0}),C(p)!=="svelte-1x66o8q"&&(p.innerHTML=L),this.h()},h(){y(l,"class","welcome svelte-1piekce"),y(i,"class","wallet-info svelte-1piekce"),H(i,"connected",_[0].isConnected),H(i,"disconnected",!_[0].isConnected),y(s,"class","description svelte-1piekce"),y(p,"class","modules svelte-1piekce")},m(e,t){o(e,l,t),o(e,c,t),o(e,i,t),M(i,v),M(i,n),d.m(i,null),o(e,r,t),o(e,s,t),o(e,T,t),o(e,p,t)},p(e,[t]){k===(k=b(e))&&d?d.p(e,t):(d.d(1),d=k(e),d&&(d.c(),d.m(i,null))),t&1&&H(i,"connected",e[0].isConnected),t&1&&H(i,"disconnected",!e[0].isConnected)},i:S,o:S,d(e){e&&(a(l),a(c),a(i),a(r),a(s),a(T),a(p)),d.d()}}}function O(_,l,D){let c;return I(_,q,i=>D(0,c=i)),[c]}class Y extends V{constructor(l){super(),P(this,l,O,N,E,{})}}export{Y as component}; diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/nodes/3.6XyjXGPy.js b/testing-app/.svelte-kit/output/client/_app/immutable/nodes/3.6XyjXGPy.js deleted file mode 100644 index aa440d3b..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/nodes/3.6XyjXGPy.js +++ /dev/null @@ -1,2 +0,0 @@ -import{S as W,i as $,s as j,n as A,d as n,m as v,b as h,c as x,o as T,e as c,p as m,h as z,f as P,j as p,k as w,l as q}from"../chunks/62BVG-0M.js";import"../chunks/IHki7fMi.js";import{w as B}from"../chunks/D3xHD3xP.js";function Y(f){let i,S='← Back to Home',k,a,g="💰 Donations Module",V,C,M=`The donations module allows you to send funds to drip lists and other receivers. - You can send one-time donations (immediate transfers) or continuous donations (streams over time).`,_,u,L="

Donation Types:

  • One-Time Donations: Send a fixed amount immediately to a receiver
  • Continuous Donations: Set up a stream that sends tokens over time at a specified rate
",b,s,l,I='

One-Time Donation (Viem) 🔒 WRITE

Send a one-time donation using the Viem blockchain adapter. This operation will:

  • Create a drip list to receive the donation
  • Set up a Viem wallet client
  • Approve ERC20 token spending
  • Send the one-time donation
  • Verify the donation was received
Send One-Time (Viem) →',D,o,y='

One-Time Donation (Ethers) 🔒 WRITE

Send a one-time donation using the Ethers blockchain adapter. This operation will:

  • Create a drip list to receive the donation
  • Set up an Ethers wallet/signer
  • Approve ERC20 token spending
  • Send the one-time donation
  • Verify the donation was received
Send One-Time (Ethers) →',E,r,R='

Continuous Donation (Viem) 🔒 WRITE

Set up a continuous donation stream using the Viem blockchain adapter. This operation will:

  • Create a drip list to receive the stream
  • Set up a Viem wallet client
  • Configure stream parameters (rate, duration)
  • Approve and top-up the stream
  • Verify the stream was created
Send Continuous (Viem) →',H,d,O='

Continuous Donation (Ethers) 🔒 WRITE

Set up a continuous donation stream using the Ethers blockchain adapter. This operation will:

  • Create a drip list to receive the stream
  • Set up an Ethers wallet/signer
  • Configure stream parameters (rate, duration)
  • Approve and top-up the stream
  • Verify the stream was created
Send Continuous (Ethers) →';return{c(){i=p("div"),i.innerHTML=S,k=w(),a=p("h1"),a.textContent=g,V=w(),C=p("p"),C.textContent=M,_=w(),u=p("div"),u.innerHTML=L,b=w(),s=p("div"),l=p("div"),l.innerHTML=I,D=w(),o=p("div"),o.innerHTML=y,E=w(),r=p("div"),r.innerHTML=R,H=w(),d=p("div"),d.innerHTML=O,this.h()},l(e){i=c(e,"DIV",{class:!0,"data-svelte-h":!0}),m(i)!=="svelte-15g6gdr"&&(i.innerHTML=S),k=z(e),a=c(e,"H1",{"data-svelte-h":!0}),m(a)!=="svelte-1fpel1k"&&(a.textContent=g),V=z(e),C=c(e,"P",{"data-svelte-h":!0}),m(C)!=="svelte-j5lnf4"&&(C.textContent=M),_=z(e),u=c(e,"DIV",{class:!0,"data-svelte-h":!0}),m(u)!=="svelte-1rbay9"&&(u.innerHTML=L),b=z(e),s=c(e,"DIV",{class:!0});var t=P(s);l=c(t,"DIV",{class:!0,"data-svelte-h":!0}),m(l)!=="svelte-1y2f1d3"&&(l.innerHTML=I),D=z(t),o=c(t,"DIV",{class:!0,"data-svelte-h":!0}),m(o)!=="svelte-1v0nsv7"&&(o.innerHTML=y),E=z(t),r=c(t,"DIV",{class:!0,"data-svelte-h":!0}),m(r)!=="svelte-1uf28th"&&(r.innerHTML=R),H=z(t),d=c(t,"DIV",{class:!0,"data-svelte-h":!0}),m(d)!=="svelte-15ulldv"&&(d.innerHTML=O),t.forEach(n),this.h()},h(){T(i,"class","back-link svelte-1kxhsoz"),T(u,"class","donation-types svelte-1kxhsoz"),T(l,"class","operation svelte-1kxhsoz"),v(l,"disabled",!f[0].isConnected),T(o,"class","operation svelte-1kxhsoz"),v(o,"disabled",!f[0].isConnected),T(r,"class","operation svelte-1kxhsoz"),v(r,"disabled",!f[0].isConnected),T(d,"class","operation svelte-1kxhsoz"),v(d,"disabled",!f[0].isConnected),T(s,"class","operations svelte-1kxhsoz")},m(e,t){h(e,i,t),h(e,k,t),h(e,a,t),h(e,V,t),h(e,C,t),h(e,_,t),h(e,u,t),h(e,b,t),h(e,s,t),x(s,l),x(s,D),x(s,o),x(s,E),x(s,r),x(s,H),x(s,d)},p(e,[t]){t&1&&v(l,"disabled",!e[0].isConnected),t&1&&v(o,"disabled",!e[0].isConnected),t&1&&v(r,"disabled",!e[0].isConnected),t&1&&v(d,"disabled",!e[0].isConnected)},i:A,o:A,d(e){e&&(n(i),n(k),n(a),n(V),n(C),n(_),n(u),n(b),n(s))}}}function F(f,i,S){let k;return q(f,B,a=>S(0,k=a)),[k]}class N extends W{constructor(i){super(),$(this,i,F,Y,j,{})}}export{N as component}; diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/nodes/4.B91Ry-vX.js b/testing-app/.svelte-kit/output/client/_app/immutable/nodes/4.B91Ry-vX.js deleted file mode 100644 index 88cda14c..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/nodes/4.B91Ry-vX.js +++ /dev/null @@ -1,7 +0,0 @@ -import{S as Ee,i as Se,s as Oe,n as ae,d as l,b as s,c as u,o as n,q as ne,e as i,p as r,h as o,f as re,j as a,k as v}from"../chunks/62BVG-0M.js";import"../chunks/IHki7fMi.js";function ge(Ae){let c,oe='← Back to Donations',P,O,ve="One-Time Donation (Viem)",R,C,de=`📝 About this operation:
- This page replicates the "One-Time Donation using Viem" integration test. It will create a drip list, - set up a Viem wallet client, approve token spending, send the donation, and verify it was received.`,q,b,ue="Step 1: Configure Wallet and Network Settings",j,h,ce='
',U,_,pe="Step 2: Configure IPFS Settings",F,D,fe='
',G,T,xe="PHASE 1: CREATE DRIP LIST TO RECEIVE DONATION",z,L,me="Step 3: Define Drip List for Receiving Donation",J,y,Ce=`
`,W,I,be='

Split Receivers for Drip List

Define who will receive the donated funds (total weight must equal 1,000,000).

',K,V,he="PHASE 2: CONFIGURE AND SEND DONATION",B,H,_e="Step 4: Configure Donation Parameters",Q,d,g,De=' Amount in token units (e.g., 1 = 1 token)',le,N,Te=' Address of the ERC20 token to donate',se,M,k,Le="Receiver Type:",ie,f,p,ye="Drip List (created above)",x,Ie="Direct Address",m,Ve="Project",Y,w,He="Step 5: Execute Operation",X,A,Me=' ',Z,E,ke=`⚠️ Note: This operation involves multiple blockchain transactions: -
  1. Create the drip list to receive donations
  2. Approve ERC20 token spending
  3. Send the one-time donation
- Make sure you have sufficient funds for gas fees and the donation amount.`,$,S,we=`🔍 Verification: After sending the donation, the system will wait for indexing - and verify that the donation appears in the drip list's support data with the correct amount and token.`;return{c(){c=a("div"),c.innerHTML=oe,P=v(),O=a("h1"),O.textContent=ve,R=v(),C=a("div"),C.innerHTML=de,q=v(),b=a("div"),b.textContent=ue,j=v(),h=a("div"),h.innerHTML=ce,U=v(),_=a("div"),_.textContent=pe,F=v(),D=a("div"),D.innerHTML=fe,G=v(),T=a("div"),T.textContent=xe,z=v(),L=a("div"),L.textContent=me,J=v(),y=a("div"),y.innerHTML=Ce,W=v(),I=a("div"),I.innerHTML=be,K=v(),V=a("div"),V.textContent=he,B=v(),H=a("div"),H.textContent=_e,Q=v(),d=a("div"),g=a("div"),g.innerHTML=De,le=v(),N=a("div"),N.innerHTML=Te,se=v(),M=a("div"),k=a("label"),k.textContent=Le,ie=v(),f=a("select"),p=a("option"),p.textContent=ye,x=a("option"),x.textContent=Ie,m=a("option"),m.textContent=Ve,Y=v(),w=a("div"),w.textContent=He,X=v(),A=a("div"),A.innerHTML=Me,Z=v(),E=a("div"),E.innerHTML=ke,$=v(),S=a("div"),S.innerHTML=we,this.h()},l(e){c=i(e,"DIV",{class:!0,"data-svelte-h":!0}),r(c)!=="svelte-1tsiebk"&&(c.innerHTML=oe),P=o(e),O=i(e,"H1",{"data-svelte-h":!0}),r(O)!=="svelte-1jyd3au"&&(O.textContent=ve),R=o(e),C=i(e,"DIV",{class:!0,"data-svelte-h":!0}),r(C)!=="svelte-jnogo4"&&(C.innerHTML=de),q=o(e),b=i(e,"DIV",{class:!0,"data-svelte-h":!0}),r(b)!=="svelte-1srdtj0"&&(b.textContent=ue),j=o(e),h=i(e,"DIV",{class:!0,"data-svelte-h":!0}),r(h)!=="svelte-1t0r7wc"&&(h.innerHTML=ce),U=o(e),_=i(e,"DIV",{class:!0,"data-svelte-h":!0}),r(_)!=="svelte-1ty33rx"&&(_.textContent=pe),F=o(e),D=i(e,"DIV",{class:!0,"data-svelte-h":!0}),r(D)!=="svelte-pcazou"&&(D.innerHTML=fe),G=o(e),T=i(e,"DIV",{class:!0,"data-svelte-h":!0}),r(T)!=="svelte-1lzhqa2"&&(T.textContent=xe),z=o(e),L=i(e,"DIV",{class:!0,"data-svelte-h":!0}),r(L)!=="svelte-1g1yt2i"&&(L.textContent=me),J=o(e),y=i(e,"DIV",{class:!0,"data-svelte-h":!0}),r(y)!=="svelte-1vn5bu6"&&(y.innerHTML=Ce),W=o(e),I=i(e,"DIV",{class:!0,"data-svelte-h":!0}),r(I)!=="svelte-2ft1kp"&&(I.innerHTML=be),K=o(e),V=i(e,"DIV",{class:!0,"data-svelte-h":!0}),r(V)!=="svelte-athcbx"&&(V.textContent=he),B=o(e),H=i(e,"DIV",{class:!0,"data-svelte-h":!0}),r(H)!=="svelte-17llfcs"&&(H.textContent=_e),Q=o(e),d=i(e,"DIV",{class:!0});var t=re(d);g=i(t,"DIV",{class:!0,"data-svelte-h":!0}),r(g)!=="svelte-6gqhk4"&&(g.innerHTML=De),le=o(t),N=i(t,"DIV",{class:!0,"data-svelte-h":!0}),r(N)!=="svelte-wi0rud"&&(N.innerHTML=Te),se=o(t),M=i(t,"DIV",{class:!0});var ee=re(M);k=i(ee,"LABEL",{for:!0,class:!0,"data-svelte-h":!0}),r(k)!=="svelte-yt6y4w"&&(k.textContent=Le),ie=o(ee),f=i(ee,"SELECT",{id:!0,class:!0});var te=re(f);p=i(te,"OPTION",{"data-svelte-h":!0}),r(p)!=="svelte-1xa3t62"&&(p.textContent=ye),x=i(te,"OPTION",{"data-svelte-h":!0}),r(x)!=="svelte-1otfs1x"&&(x.textContent=Ie),m=i(te,"OPTION",{"data-svelte-h":!0}),r(m)!=="svelte-1y3alm4"&&(m.textContent=Ve),te.forEach(l),ee.forEach(l),t.forEach(l),Y=o(e),w=i(e,"DIV",{class:!0,"data-svelte-h":!0}),r(w)!=="svelte-1vt0z73"&&(w.textContent=He),X=o(e),A=i(e,"DIV",{class:!0,"data-svelte-h":!0}),r(A)!=="svelte-g6xjep"&&(A.innerHTML=Me),Z=o(e),E=i(e,"DIV",{class:!0,"data-svelte-h":!0}),r(E)!=="svelte-10dh658"&&(E.innerHTML=ke),$=o(e),S=i(e,"DIV",{class:!0,"data-svelte-h":!0}),r(S)!=="svelte-t7njqz"&&(S.innerHTML=we),this.h()},h(){n(c,"class","back-link svelte-d0c2ur"),n(C,"class","info-box svelte-d0c2ur"),n(b,"class","step-indicator svelte-d0c2ur"),n(h,"class","form-container svelte-d0c2ur"),n(_,"class","step-indicator svelte-d0c2ur"),n(D,"class","form-container svelte-d0c2ur"),n(T,"class","phase-separator svelte-d0c2ur"),n(L,"class","step-indicator svelte-d0c2ur"),n(y,"class","form-container svelte-d0c2ur"),n(I,"class","receivers-section svelte-d0c2ur"),n(V,"class","phase-separator svelte-d0c2ur"),n(H,"class","step-indicator svelte-d0c2ur"),n(g,"class","form-group svelte-d0c2ur"),n(N,"class","form-group svelte-d0c2ur"),n(k,"for","receiverType"),n(k,"class","svelte-d0c2ur"),p.__value="drip-list",ne(p,p.__value),p.selected=!0,x.__value="address",ne(x,x.__value),m.__value="project",ne(m,m.__value),n(f,"id","receiverType"),n(f,"class","svelte-d0c2ur"),n(M,"class","form-group svelte-d0c2ur"),n(d,"class","form-container svelte-d0c2ur"),n(w,"class","step-indicator svelte-d0c2ur"),n(A,"class","form-container svelte-d0c2ur"),n(E,"class","info-box svelte-d0c2ur"),n(S,"class","info-box svelte-d0c2ur")},m(e,t){s(e,c,t),s(e,P,t),s(e,O,t),s(e,R,t),s(e,C,t),s(e,q,t),s(e,b,t),s(e,j,t),s(e,h,t),s(e,U,t),s(e,_,t),s(e,F,t),s(e,D,t),s(e,G,t),s(e,T,t),s(e,z,t),s(e,L,t),s(e,J,t),s(e,y,t),s(e,W,t),s(e,I,t),s(e,K,t),s(e,V,t),s(e,B,t),s(e,H,t),s(e,Q,t),s(e,d,t),u(d,g),u(d,le),u(d,N),u(d,se),u(d,M),u(M,k),u(M,ie),u(M,f),u(f,p),u(f,x),u(f,m),s(e,Y,t),s(e,w,t),s(e,X,t),s(e,A,t),s(e,Z,t),s(e,E,t),s(e,$,t),s(e,S,t)},p:ae,i:ae,o:ae,d(e){e&&(l(c),l(P),l(O),l(R),l(C),l(q),l(b),l(j),l(h),l(U),l(_),l(F),l(D),l(G),l(T),l(z),l(L),l(J),l(y),l(W),l(I),l(K),l(V),l(B),l(H),l(Q),l(d),l(Y),l(w),l(X),l(A),l(Z),l(E),l($),l(S))}}}class Re extends Ee{constructor(c){super(),Se(this,c,null,ge,Oe,{})}}export{Re as component}; diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/nodes/5.ZxJVnQ2V.js b/testing-app/.svelte-kit/output/client/_app/immutable/nodes/5.ZxJVnQ2V.js deleted file mode 100644 index 7568c0bb..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/nodes/5.ZxJVnQ2V.js +++ /dev/null @@ -1,3 +0,0 @@ -import{S as q,i as A,s as G,n as R,d as l,m as f,b as h,c as v,o as m,e as a,p as x,h as w,f as Q,j as n,k as C,l as $}from"../chunks/62BVG-0M.js";import"../chunks/IHki7fMi.js";import{w as B}from"../chunks/D3xHD3xP.js";function O(z){let s,T='← Back to Home',g,r,E="🗂️ Drip Lists Module",b,D,S=`Drip Lists are collections of receivers (addresses, projects, or other drip lists) that - automatically split incoming funds according to specified weights. This module allows you - to create and update drip lists using either Viem or Ethers blockchain adapters.`,_,u,U="

Drip List Operations:

  • Create: Deploy a new drip list with specified receivers and weights
  • Update: Modify existing drip list metadata and receiver configurations
  • Split Distribution: Automatically distribute incoming funds based on weights
",I,i,p,k='

Create Drip List (Viem) 🔒 WRITE

Create a new drip list using the Viem blockchain adapter. This operation will:

  • Set up a Viem wallet client
  • Define split receivers with weights
  • Create and deploy the drip list
  • Upload metadata to IPFS
  • Wait for indexing and verification
Create with Viem →',M,d,P='

Create Drip List (Ethers) 🔒 WRITE

Create a new drip list using the Ethers blockchain adapter. This operation will:

  • Set up an Ethers wallet/signer
  • Define split receivers with weights
  • Create and deploy the drip list
  • Upload metadata to IPFS
  • Wait for indexing and verification
Create with Ethers →',V,o,j='

Update Drip List (Viem) 🔒 WRITE

Update an existing drip list using the Viem blockchain adapter. This operation will:

  • Create an initial drip list
  • Modify metadata and receivers
  • Update the drip list on-chain
  • Upload new metadata to IPFS
  • Verify the updates were applied
Update with Viem →',y,c,F='

Update Drip List (Ethers) 🔒 WRITE

Update an existing drip list using the Ethers blockchain adapter. This operation will:

  • Create an initial drip list
  • Modify metadata and receivers
  • Update the drip list on-chain
  • Upload new metadata to IPFS
  • Verify the updates were applied
Update with Ethers →',H,L,W='

Get Drip List 👁️ READ

Query and retrieve drip list information from the network. This operation will:

  • Connect to the GraphQL API
  • Query drip list by ID
  • Fetch metadata from IPFS
  • Display receivers and weights
  • Show current balance and statistics
Get Drip List →';return{c(){s=n("div"),s.innerHTML=T,g=C(),r=n("h1"),r.textContent=E,b=C(),D=n("p"),D.textContent=S,_=C(),u=n("div"),u.innerHTML=U,I=C(),i=n("div"),p=n("div"),p.innerHTML=k,M=C(),d=n("div"),d.innerHTML=P,V=C(),o=n("div"),o.innerHTML=j,y=C(),c=n("div"),c.innerHTML=F,H=C(),L=n("div"),L.innerHTML=W,this.h()},l(e){s=a(e,"DIV",{class:!0,"data-svelte-h":!0}),x(s)!=="svelte-15g6gdr"&&(s.innerHTML=T),g=w(e),r=a(e,"H1",{"data-svelte-h":!0}),x(r)!=="svelte-1qu2r2w"&&(r.textContent=E),b=w(e),D=a(e,"P",{"data-svelte-h":!0}),x(D)!=="svelte-byyjht"&&(D.textContent=S),_=w(e),u=a(e,"DIV",{class:!0,"data-svelte-h":!0}),x(u)!=="svelte-1id7x34"&&(u.innerHTML=U),I=w(e),i=a(e,"DIV",{class:!0});var t=Q(i);p=a(t,"DIV",{class:!0,"data-svelte-h":!0}),x(p)!=="svelte-1i8w55"&&(p.innerHTML=k),M=w(t),d=a(t,"DIV",{class:!0,"data-svelte-h":!0}),x(d)!=="svelte-15aljz3"&&(d.innerHTML=P),V=w(t),o=a(t,"DIV",{class:!0,"data-svelte-h":!0}),x(o)!=="svelte-1d78o2n"&&(o.innerHTML=j),y=w(t),c=a(t,"DIV",{class:!0,"data-svelte-h":!0}),x(c)!=="svelte-19aohj7"&&(c.innerHTML=F),H=w(t),L=a(t,"DIV",{class:!0,"data-svelte-h":!0}),x(L)!=="svelte-18hqjpp"&&(L.innerHTML=W),t.forEach(l),this.h()},h(){m(s,"class","back-link svelte-xp12xz"),m(u,"class","drip-lists-info svelte-xp12xz"),m(p,"class","operation svelte-xp12xz"),f(p,"disabled",!z[0].isConnected),m(d,"class","operation svelte-xp12xz"),f(d,"disabled",!z[0].isConnected),m(o,"class","operation svelte-xp12xz"),f(o,"disabled",!z[0].isConnected),m(c,"class","operation svelte-xp12xz"),f(c,"disabled",!z[0].isConnected),m(L,"class","operation svelte-xp12xz"),m(i,"class","operations svelte-xp12xz")},m(e,t){h(e,s,t),h(e,g,t),h(e,r,t),h(e,b,t),h(e,D,t),h(e,_,t),h(e,u,t),h(e,I,t),h(e,i,t),v(i,p),v(i,M),v(i,d),v(i,V),v(i,o),v(i,y),v(i,c),v(i,H),v(i,L)},p(e,[t]){t&1&&f(p,"disabled",!e[0].isConnected),t&1&&f(d,"disabled",!e[0].isConnected),t&1&&f(o,"disabled",!e[0].isConnected),t&1&&f(c,"disabled",!e[0].isConnected)},i:R,o:R,d(e){e&&(l(s),l(g),l(r),l(b),l(D),l(_),l(u),l(I),l(i))}}}function J(z,s,T){let g;return $(z,B,r=>T(0,g=r)),[g]}class Y extends q{constructor(s){super(),A(this,s,J,O,G,{})}}export{Y as component}; diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/nodes/6.CgAFXump.js b/testing-app/.svelte-kit/output/client/_app/immutable/nodes/6.CgAFXump.js deleted file mode 100644 index 89751528..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/nodes/6.CgAFXump.js +++ /dev/null @@ -1,5 +0,0 @@ -import{S as ce,i as ue,s as pe,n as At,d as n,b as v,c as s,o as d,q as dt,e,p as r,h as o,f as S,j as l,k as c,l as he,a as oe,g as yt,t as Mt}from"../chunks/62BVG-0M.js";import"../chunks/IHki7fMi.js";import{w as me}from"../chunks/D3xHD3xP.js";function fe(H){let a,b="❌ No Wallet Connected - Using Private Key Input",m,u,V=' ';return{c(){a=l("div"),a.textContent=b,m=c(),u=l("div"),u.innerHTML=V,this.h()},l(h){a=e(h,"DIV",{class:!0,"data-svelte-h":!0}),r(a)!=="svelte-1503yvp"&&(a.textContent=b),m=o(h),u=e(h,"DIV",{class:!0,"data-svelte-h":!0}),r(u)!=="svelte-16hks87"&&(u.innerHTML=V),this.h()},h(){d(a,"class","wallet-status disconnected svelte-1hwmnd0"),d(u,"class","form-group svelte-1hwmnd0")},m(h,f){v(h,a,f),v(h,m,f),v(h,u,f)},p:At,d(h){h&&(n(a),n(m),n(u))}}}function xe(H){var $,w;let a,b,m=(($=H[0].address)==null?void 0:$.slice(0,6))+"",u,V,h=((w=H[0].address)==null?void 0:w.slice(-4))+"",f,et,q,x,ot="Using connected wallet for transactions";return{c(){a=l("div"),b=Mt("✅ Wallet Connected: "),u=Mt(m),V=Mt("..."),f=Mt(h),et=c(),q=l("br"),x=l("small"),x.textContent=ot,this.h()},l(C){a=e(C,"DIV",{class:!0});var p=S(a);b=yt(p,"✅ Wallet Connected: "),u=yt(p,m),V=yt(p,"..."),f=yt(p,h),et=o(p),q=e(p,"BR",{}),x=e(p,"SMALL",{"data-svelte-h":!0}),r(x)!=="svelte-14a96vu"&&(x.textContent=ot),p.forEach(n),this.h()},h(){d(a,"class","wallet-status svelte-1hwmnd0")},m(C,p){v(C,a,p),s(a,b),s(a,u),s(a,V),s(a,f),s(a,et),s(a,q),s(a,x)},p(C,p){var ct,lt;p&1&&m!==(m=((ct=C[0].address)==null?void 0:ct.slice(0,6))+"")&&oe(u,m),p&1&&h!==(h=((lt=C[0].address)==null?void 0:lt.slice(-4))+"")&&oe(f,h)},d(C){C&&n(a)}}}function we(H){let a,b='← Back to Drip Lists',m,u,V="Create Drip List (Ethers)",h,f,et=`📝 About this operation:
- This page replicates the "Create Drip List using Ethers" integration test. It will set up an Ethers wallet/signer, - define split receivers, create the drip list, upload metadata to IPFS, and verify the creation.`,q,x,ot="Step 1: Configure Wallet and Network Settings",$,w,C,p,ct=' ',lt,z,Ut=' ',ut,O,jt="Step 2: Configure IPFS Settings",pt,N,Rt='
',ht,A,Wt="Step 3: Define Drip List Metadata",mt,U,Bt=`
`,ft,j,Ft="Step 4: Configure Split Receivers",xt,_,st,Gt="Split Receivers",Ht,nt,Jt="Define who will receive the funds and their respective weights (total must equal 1,000,000).",Vt,T,R,it,Kt="Type:",Et,W,E,$t="Project",D,zt="Address",k,Qt="Drip List",kt,Q,Yt=' ',Pt,Y,Xt=' ',gt,I,B,at,Zt="Type:",St,F,y,te="Project",P,ee="Address",g,le="Drip List",qt,X,se=' ',Ot,Z,ne=' ',Nt,tt,ie="+ Add Receiver",wt,G,ae="Step 5: Execute Operation",_t,J,re=' ',Ct,K,ve=`⚠️ Note: This operation will interact with the blockchain and IPFS. - Make sure you have sufficient funds for gas fees and valid API credentials.`;function de(t,i){return t[0].isConnected?xe:fe}let bt=de(H),L=bt(H);return{c(){a=l("div"),a.innerHTML=b,m=c(),u=l("h1"),u.textContent=V,h=c(),f=l("div"),f.innerHTML=et,q=c(),x=l("div"),x.textContent=ot,$=c(),w=l("div"),L.c(),C=c(),p=l("div"),p.innerHTML=ct,lt=c(),z=l("div"),z.innerHTML=Ut,ut=c(),O=l("div"),O.textContent=jt,pt=c(),N=l("div"),N.innerHTML=Rt,ht=c(),A=l("div"),A.textContent=Wt,mt=c(),U=l("div"),U.innerHTML=Bt,ft=c(),j=l("div"),j.textContent=Ft,xt=c(),_=l("div"),st=l("h3"),st.textContent=Gt,Ht=c(),nt=l("p"),nt.textContent=Jt,Vt=c(),T=l("div"),R=l("div"),it=l("label"),it.textContent=Kt,Et=c(),W=l("select"),E=l("option"),E.textContent=$t,D=l("option"),D.textContent=zt,k=l("option"),k.textContent=Qt,kt=c(),Q=l("div"),Q.innerHTML=Yt,Pt=c(),Y=l("div"),Y.innerHTML=Xt,gt=c(),I=l("div"),B=l("div"),at=l("label"),at.textContent=Zt,St=c(),F=l("select"),y=l("option"),y.textContent=te,P=l("option"),P.textContent=ee,g=l("option"),g.textContent=le,qt=c(),X=l("div"),X.innerHTML=se,Ot=c(),Z=l("div"),Z.innerHTML=ne,Nt=c(),tt=l("button"),tt.textContent=ie,wt=c(),G=l("div"),G.textContent=ae,_t=c(),J=l("div"),J.innerHTML=re,Ct=c(),K=l("div"),K.innerHTML=ve,this.h()},l(t){a=e(t,"DIV",{class:!0,"data-svelte-h":!0}),r(a)!=="svelte-m7gd4h"&&(a.innerHTML=b),m=o(t),u=e(t,"H1",{"data-svelte-h":!0}),r(u)!=="svelte-16da75v"&&(u.textContent=V),h=o(t),f=e(t,"DIV",{class:!0,"data-svelte-h":!0}),r(f)!=="svelte-sfrigb"&&(f.innerHTML=et),q=o(t),x=e(t,"DIV",{class:!0,"data-svelte-h":!0}),r(x)!=="svelte-1srdtj0"&&(x.textContent=ot),$=o(t),w=e(t,"DIV",{class:!0});var i=S(w);L.l(i),C=o(i),p=e(i,"DIV",{class:!0,"data-svelte-h":!0}),r(p)!=="svelte-tlxti1"&&(p.innerHTML=ct),lt=o(i),z=e(i,"DIV",{class:!0,"data-svelte-h":!0}),r(z)!=="svelte-1c3yq9y"&&(z.innerHTML=Ut),i.forEach(n),ut=o(t),O=e(t,"DIV",{class:!0,"data-svelte-h":!0}),r(O)!=="svelte-1ty33rx"&&(O.textContent=jt),pt=o(t),N=e(t,"DIV",{class:!0,"data-svelte-h":!0}),r(N)!=="svelte-pcazou"&&(N.innerHTML=Rt),ht=o(t),A=e(t,"DIV",{class:!0,"data-svelte-h":!0}),r(A)!=="svelte-1rpvubi"&&(A.textContent=Wt),mt=o(t),U=e(t,"DIV",{class:!0,"data-svelte-h":!0}),r(U)!=="svelte-1omirj5"&&(U.innerHTML=Bt),ft=o(t),j=e(t,"DIV",{class:!0,"data-svelte-h":!0}),r(j)!=="svelte-i617nk"&&(j.textContent=Ft),xt=o(t),_=e(t,"DIV",{class:!0});var M=S(_);st=e(M,"H3",{"data-svelte-h":!0}),r(st)!=="svelte-1h1g9m4"&&(st.textContent=Gt),Ht=o(M),nt=e(M,"P",{"data-svelte-h":!0}),r(nt)!=="svelte-ihp9q0"&&(nt.textContent=Jt),Vt=o(M),T=e(M,"DIV",{class:!0});var rt=S(T);R=e(rt,"DIV",{class:!0});var Lt=S(R);it=e(Lt,"LABEL",{"data-svelte-h":!0}),r(it)!=="svelte-1r3qowe"&&(it.textContent=Kt),Et=o(Lt),W=e(Lt,"SELECT",{class:!0});var Tt=S(W);E=e(Tt,"OPTION",{"data-svelte-h":!0}),r(E)!=="svelte-1y3alm4"&&(E.textContent=$t),D=e(Tt,"OPTION",{"data-svelte-h":!0}),r(D)!=="svelte-8dw449"&&(D.textContent=zt),k=e(Tt,"OPTION",{"data-svelte-h":!0}),r(k)!=="svelte-1vd24y3"&&(k.textContent=Qt),Tt.forEach(n),Lt.forEach(n),kt=o(rt),Q=e(rt,"DIV",{class:!0,"data-svelte-h":!0}),r(Q)!=="svelte-1n3qnm6"&&(Q.innerHTML=Yt),Pt=o(rt),Y=e(rt,"DIV",{class:!0,"data-svelte-h":!0}),r(Y)!=="svelte-rp3oo"&&(Y.innerHTML=Xt),rt.forEach(n),gt=o(M),I=e(M,"DIV",{class:!0});var vt=S(I);B=e(vt,"DIV",{class:!0});var Dt=S(B);at=e(Dt,"LABEL",{"data-svelte-h":!0}),r(at)!=="svelte-1r3qowe"&&(at.textContent=Zt),St=o(Dt),F=e(Dt,"SELECT",{class:!0});var It=S(F);y=e(It,"OPTION",{"data-svelte-h":!0}),r(y)!=="svelte-1mortop"&&(y.textContent=te),P=e(It,"OPTION",{"data-svelte-h":!0}),r(P)!=="svelte-12qs08i"&&(P.textContent=ee),g=e(It,"OPTION",{"data-svelte-h":!0}),r(g)!=="svelte-1vd24y3"&&(g.textContent=le),It.forEach(n),Dt.forEach(n),qt=o(vt),X=e(vt,"DIV",{class:!0,"data-svelte-h":!0}),r(X)!=="svelte-13gcqrh"&&(X.innerHTML=se),Ot=o(vt),Z=e(vt,"DIV",{class:!0,"data-svelte-h":!0}),r(Z)!=="svelte-rp3oo"&&(Z.innerHTML=ne),vt.forEach(n),Nt=o(M),tt=e(M,"BUTTON",{class:!0,"data-svelte-h":!0}),r(tt)!=="svelte-1x879b4"&&(tt.textContent=ie),M.forEach(n),wt=o(t),G=e(t,"DIV",{class:!0,"data-svelte-h":!0}),r(G)!=="svelte-1vt0z73"&&(G.textContent=ae),_t=o(t),J=e(t,"DIV",{class:!0,"data-svelte-h":!0}),r(J)!=="svelte-1l06egc"&&(J.innerHTML=re),Ct=o(t),K=e(t,"DIV",{class:!0,"data-svelte-h":!0}),r(K)!=="svelte-r67myi"&&(K.innerHTML=ve),this.h()},h(){d(a,"class","back-link svelte-1hwmnd0"),d(f,"class","info-box svelte-1hwmnd0"),d(x,"class","step-indicator svelte-1hwmnd0"),d(p,"class","form-group svelte-1hwmnd0"),d(z,"class","form-group svelte-1hwmnd0"),d(w,"class","form-container svelte-1hwmnd0"),d(O,"class","step-indicator svelte-1hwmnd0"),d(N,"class","form-container svelte-1hwmnd0"),d(A,"class","step-indicator svelte-1hwmnd0"),d(U,"class","form-container svelte-1hwmnd0"),d(j,"class","step-indicator svelte-1hwmnd0"),E.__value="project",dt(E,E.__value),D.__value="address",dt(D,D.__value),D.selected=!0,k.__value="drip-list",dt(k,k.__value),d(W,"class","svelte-1hwmnd0"),d(R,"class","receiver-controls svelte-1hwmnd0"),d(Q,"class","form-group svelte-1hwmnd0"),d(Y,"class","form-group svelte-1hwmnd0"),d(T,"class","receiver-item svelte-1hwmnd0"),y.__value="project",dt(y,y.__value),y.selected=!0,P.__value="address",dt(P,P.__value),g.__value="drip-list",dt(g,g.__value),d(F,"class","svelte-1hwmnd0"),d(B,"class","receiver-controls svelte-1hwmnd0"),d(X,"class","form-group svelte-1hwmnd0"),d(Z,"class","form-group svelte-1hwmnd0"),d(I,"class","receiver-item svelte-1hwmnd0"),d(tt,"class","button svelte-1hwmnd0"),d(_,"class","receivers-section svelte-1hwmnd0"),d(G,"class","step-indicator svelte-1hwmnd0"),d(J,"class","form-container svelte-1hwmnd0"),d(K,"class","info-box svelte-1hwmnd0")},m(t,i){v(t,a,i),v(t,m,i),v(t,u,i),v(t,h,i),v(t,f,i),v(t,q,i),v(t,x,i),v(t,$,i),v(t,w,i),L.m(w,null),s(w,C),s(w,p),s(w,lt),s(w,z),v(t,ut,i),v(t,O,i),v(t,pt,i),v(t,N,i),v(t,ht,i),v(t,A,i),v(t,mt,i),v(t,U,i),v(t,ft,i),v(t,j,i),v(t,xt,i),v(t,_,i),s(_,st),s(_,Ht),s(_,nt),s(_,Vt),s(_,T),s(T,R),s(R,it),s(R,Et),s(R,W),s(W,E),s(W,D),s(W,k),s(T,kt),s(T,Q),s(T,Pt),s(T,Y),s(_,gt),s(_,I),s(I,B),s(B,at),s(B,St),s(B,F),s(F,y),s(F,P),s(F,g),s(I,qt),s(I,X),s(I,Ot),s(I,Z),s(_,Nt),s(_,tt),v(t,wt,i),v(t,G,i),v(t,_t,i),v(t,J,i),v(t,Ct,i),v(t,K,i)},p(t,[i]){bt===(bt=de(t))&&L?L.p(t,i):(L.d(1),L=bt(t),L&&(L.c(),L.m(w,C)))},i:At,o:At,d(t){t&&(n(a),n(m),n(u),n(h),n(f),n(q),n(x),n($),n(w),n(ut),n(O),n(pt),n(N),n(ht),n(A),n(mt),n(U),n(ft),n(j),n(xt),n(_),n(wt),n(G),n(_t),n(J),n(Ct),n(K)),L.d()}}}function _e(H,a,b){let m;return he(H,me,u=>b(0,m=u)),[m]}class Te extends ce{constructor(a){super(),ue(this,a,_e,we,pe,{})}}export{Te as component}; diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/nodes/7.B0nUtSqr.js b/testing-app/.svelte-kit/output/client/_app/immutable/nodes/7.B0nUtSqr.js deleted file mode 100644 index 9c4a6374..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/nodes/7.B0nUtSqr.js +++ /dev/null @@ -1,5 +0,0 @@ -import{S as de,i as ue,s as pe,n as At,d as i,b as v,c as l,o as c,q as ct,e,p as r,h as o,f as E,j as s,k as d,l as fe,a as oe,g as It,t as Vt}from"../chunks/62BVG-0M.js";import"../chunks/IHki7fMi.js";import{w as xe}from"../chunks/D3xHD3xP.js";function we(M){let n,b="❌ No Wallet Connected - Using Private Key Input",x,u,H=' ';return{c(){n=s("div"),n.textContent=b,x=d(),u=s("div"),u.innerHTML=H,this.h()},l(f){n=e(f,"DIV",{class:!0,"data-svelte-h":!0}),r(n)!=="svelte-1503yvp"&&(n.textContent=b),x=o(f),u=e(f,"DIV",{class:!0,"data-svelte-h":!0}),r(u)!=="svelte-16hks87"&&(u.innerHTML=H),this.h()},h(){c(n,"class","wallet-status disconnected svelte-65cwss"),c(u,"class","form-group svelte-65cwss")},m(f,w){v(f,n,w),v(f,x,w),v(f,u,w)},p:At,d(f){f&&(i(n),i(x),i(u))}}}function _e(M){var $,C;let n,b,x=(($=M[0].address)==null?void 0:$.slice(0,6))+"",u,H,f=((C=M[0].address)==null?void 0:C.slice(-4))+"",w,et,q,_,ot="Using connected wallet for transactions";return{c(){n=s("div"),b=Vt("✅ Wallet Connected: "),u=Vt(x),H=Vt("..."),w=Vt(f),et=d(),q=s("br"),_=s("small"),_.textContent=ot,this.h()},l(m){n=e(m,"DIV",{class:!0});var p=E(n);b=It(p,"✅ Wallet Connected: "),u=It(p,x),H=It(p,"..."),w=It(p,f),et=o(p),q=e(p,"BR",{}),_=e(p,"SMALL",{"data-svelte-h":!0}),r(_)!=="svelte-14a96vu"&&(_.textContent=ot),p.forEach(i),this.h()},h(){c(n,"class","wallet-status svelte-65cwss")},m(m,p){v(m,n,p),l(n,b),l(n,u),l(n,H),l(n,w),l(n,et),l(n,q),l(n,_)},p(m,p){var dt,st;p&1&&x!==(x=((dt=m[0].address)==null?void 0:dt.slice(0,6))+"")&&oe(u,x),p&1&&f!==(f=((st=m[0].address)==null?void 0:st.slice(-4))+"")&&oe(w,f)},d(m){m&&i(n)}}}function Ce(M){let n,b='← Back to Drip Lists',x,u,H="Create Drip List (Viem)",f,w,et=`📝 About this operation:
- This page replicates the "Create Drip List using Viem" integration test. It will set up a Viem wallet client, - define split receivers, create the drip list, upload metadata to IPFS, and verify the creation.`,q,_,ot="Step 1: Configure Wallet and Network Settings",$,C,m,p,dt=' ',st,z,Ut=' ',ut,O,jt="Step 2: Configure IPFS Settings",pt,N,Rt='
',ft,A,Wt="Step 3: Define Drip List Metadata",xt,U,Bt=`
`,wt,j,Ft="Step 4: Configure Split Receivers",_t,h,lt,Gt="Split Receivers",Mt,it,Jt="Define who will receive the funds and their respective weights (total must equal 1,000,000).",Ht,T,R,at,Kt="Type:",kt,W,k,$t="Project",D,zt="Address",P,Qt="Drip List",Pt,Q,Yt=' ',St,Y,Xt=' ',gt,y,B,nt,Zt="Type:",Et,F,I,te="Project",S,ee="Address",g,se="Drip List",qt,X,le=' ',Ot,Z,ie=' ',Nt,tt,ae="+ Add Receiver",Ct,G,ne="Step 5: Execute Operation",ht,J,re=' ',mt,K,ve=`⚠️ Note: This operation will interact with the blockchain and IPFS. - Make sure you have sufficient funds for gas fees and valid API credentials.`;function ce(t,a){return t[0].isConnected?_e:we}let bt=ce(M),L=bt(M);return{c(){n=s("div"),n.innerHTML=b,x=d(),u=s("h1"),u.textContent=H,f=d(),w=s("div"),w.innerHTML=et,q=d(),_=s("div"),_.textContent=ot,$=d(),C=s("div"),L.c(),m=d(),p=s("div"),p.innerHTML=dt,st=d(),z=s("div"),z.innerHTML=Ut,ut=d(),O=s("div"),O.textContent=jt,pt=d(),N=s("div"),N.innerHTML=Rt,ft=d(),A=s("div"),A.textContent=Wt,xt=d(),U=s("div"),U.innerHTML=Bt,wt=d(),j=s("div"),j.textContent=Ft,_t=d(),h=s("div"),lt=s("h3"),lt.textContent=Gt,Mt=d(),it=s("p"),it.textContent=Jt,Ht=d(),T=s("div"),R=s("div"),at=s("label"),at.textContent=Kt,kt=d(),W=s("select"),k=s("option"),k.textContent=$t,D=s("option"),D.textContent=zt,P=s("option"),P.textContent=Qt,Pt=d(),Q=s("div"),Q.innerHTML=Yt,St=d(),Y=s("div"),Y.innerHTML=Xt,gt=d(),y=s("div"),B=s("div"),nt=s("label"),nt.textContent=Zt,Et=d(),F=s("select"),I=s("option"),I.textContent=te,S=s("option"),S.textContent=ee,g=s("option"),g.textContent=se,qt=d(),X=s("div"),X.innerHTML=le,Ot=d(),Z=s("div"),Z.innerHTML=ie,Nt=d(),tt=s("button"),tt.textContent=ae,Ct=d(),G=s("div"),G.textContent=ne,ht=d(),J=s("div"),J.innerHTML=re,mt=d(),K=s("div"),K.innerHTML=ve,this.h()},l(t){n=e(t,"DIV",{class:!0,"data-svelte-h":!0}),r(n)!=="svelte-m7gd4h"&&(n.innerHTML=b),x=o(t),u=e(t,"H1",{"data-svelte-h":!0}),r(u)!=="svelte-1c8ak7x"&&(u.textContent=H),f=o(t),w=e(t,"DIV",{class:!0,"data-svelte-h":!0}),r(w)!=="svelte-n078yj"&&(w.innerHTML=et),q=o(t),_=e(t,"DIV",{class:!0,"data-svelte-h":!0}),r(_)!=="svelte-1srdtj0"&&(_.textContent=ot),$=o(t),C=e(t,"DIV",{class:!0});var a=E(C);L.l(a),m=o(a),p=e(a,"DIV",{class:!0,"data-svelte-h":!0}),r(p)!=="svelte-tlxti1"&&(p.innerHTML=dt),st=o(a),z=e(a,"DIV",{class:!0,"data-svelte-h":!0}),r(z)!=="svelte-1c3yq9y"&&(z.innerHTML=Ut),a.forEach(i),ut=o(t),O=e(t,"DIV",{class:!0,"data-svelte-h":!0}),r(O)!=="svelte-1ty33rx"&&(O.textContent=jt),pt=o(t),N=e(t,"DIV",{class:!0,"data-svelte-h":!0}),r(N)!=="svelte-pcazou"&&(N.innerHTML=Rt),ft=o(t),A=e(t,"DIV",{class:!0,"data-svelte-h":!0}),r(A)!=="svelte-1rpvubi"&&(A.textContent=Wt),xt=o(t),U=e(t,"DIV",{class:!0,"data-svelte-h":!0}),r(U)!=="svelte-cdf7lp"&&(U.innerHTML=Bt),wt=o(t),j=e(t,"DIV",{class:!0,"data-svelte-h":!0}),r(j)!=="svelte-i617nk"&&(j.textContent=Ft),_t=o(t),h=e(t,"DIV",{class:!0});var V=E(h);lt=e(V,"H3",{"data-svelte-h":!0}),r(lt)!=="svelte-1h1g9m4"&&(lt.textContent=Gt),Mt=o(V),it=e(V,"P",{"data-svelte-h":!0}),r(it)!=="svelte-ihp9q0"&&(it.textContent=Jt),Ht=o(V),T=e(V,"DIV",{class:!0});var rt=E(T);R=e(rt,"DIV",{class:!0});var Lt=E(R);at=e(Lt,"LABEL",{"data-svelte-h":!0}),r(at)!=="svelte-1r3qowe"&&(at.textContent=Kt),kt=o(Lt),W=e(Lt,"SELECT",{class:!0});var Tt=E(W);k=e(Tt,"OPTION",{"data-svelte-h":!0}),r(k)!=="svelte-1y3alm4"&&(k.textContent=$t),D=e(Tt,"OPTION",{"data-svelte-h":!0}),r(D)!=="svelte-8dw449"&&(D.textContent=zt),P=e(Tt,"OPTION",{"data-svelte-h":!0}),r(P)!=="svelte-1vd24y3"&&(P.textContent=Qt),Tt.forEach(i),Lt.forEach(i),Pt=o(rt),Q=e(rt,"DIV",{class:!0,"data-svelte-h":!0}),r(Q)!=="svelte-1n3qnm6"&&(Q.innerHTML=Yt),St=o(rt),Y=e(rt,"DIV",{class:!0,"data-svelte-h":!0}),r(Y)!=="svelte-rp3oo"&&(Y.innerHTML=Xt),rt.forEach(i),gt=o(V),y=e(V,"DIV",{class:!0});var vt=E(y);B=e(vt,"DIV",{class:!0});var Dt=E(B);nt=e(Dt,"LABEL",{"data-svelte-h":!0}),r(nt)!=="svelte-1r3qowe"&&(nt.textContent=Zt),Et=o(Dt),F=e(Dt,"SELECT",{class:!0});var yt=E(F);I=e(yt,"OPTION",{"data-svelte-h":!0}),r(I)!=="svelte-1mortop"&&(I.textContent=te),S=e(yt,"OPTION",{"data-svelte-h":!0}),r(S)!=="svelte-12qs08i"&&(S.textContent=ee),g=e(yt,"OPTION",{"data-svelte-h":!0}),r(g)!=="svelte-1vd24y3"&&(g.textContent=se),yt.forEach(i),Dt.forEach(i),qt=o(vt),X=e(vt,"DIV",{class:!0,"data-svelte-h":!0}),r(X)!=="svelte-13gcqrh"&&(X.innerHTML=le),Ot=o(vt),Z=e(vt,"DIV",{class:!0,"data-svelte-h":!0}),r(Z)!=="svelte-rp3oo"&&(Z.innerHTML=ie),vt.forEach(i),Nt=o(V),tt=e(V,"BUTTON",{class:!0,"data-svelte-h":!0}),r(tt)!=="svelte-1x879b4"&&(tt.textContent=ae),V.forEach(i),Ct=o(t),G=e(t,"DIV",{class:!0,"data-svelte-h":!0}),r(G)!=="svelte-1vt0z73"&&(G.textContent=ne),ht=o(t),J=e(t,"DIV",{class:!0,"data-svelte-h":!0}),r(J)!=="svelte-rrpds2"&&(J.innerHTML=re),mt=o(t),K=e(t,"DIV",{class:!0,"data-svelte-h":!0}),r(K)!=="svelte-r67myi"&&(K.innerHTML=ve),this.h()},h(){c(n,"class","back-link svelte-65cwss"),c(w,"class","info-box svelte-65cwss"),c(_,"class","step-indicator svelte-65cwss"),c(p,"class","form-group svelte-65cwss"),c(z,"class","form-group svelte-65cwss"),c(C,"class","form-container svelte-65cwss"),c(O,"class","step-indicator svelte-65cwss"),c(N,"class","form-container svelte-65cwss"),c(A,"class","step-indicator svelte-65cwss"),c(U,"class","form-container svelte-65cwss"),c(j,"class","step-indicator svelte-65cwss"),k.__value="project",ct(k,k.__value),D.__value="address",ct(D,D.__value),D.selected=!0,P.__value="drip-list",ct(P,P.__value),c(W,"class","svelte-65cwss"),c(R,"class","receiver-controls svelte-65cwss"),c(Q,"class","form-group svelte-65cwss"),c(Y,"class","form-group svelte-65cwss"),c(T,"class","receiver-item svelte-65cwss"),I.__value="project",ct(I,I.__value),I.selected=!0,S.__value="address",ct(S,S.__value),g.__value="drip-list",ct(g,g.__value),c(F,"class","svelte-65cwss"),c(B,"class","receiver-controls svelte-65cwss"),c(X,"class","form-group svelte-65cwss"),c(Z,"class","form-group svelte-65cwss"),c(y,"class","receiver-item svelte-65cwss"),c(tt,"class","button svelte-65cwss"),c(h,"class","receivers-section svelte-65cwss"),c(G,"class","step-indicator svelte-65cwss"),c(J,"class","form-container svelte-65cwss"),c(K,"class","info-box svelte-65cwss")},m(t,a){v(t,n,a),v(t,x,a),v(t,u,a),v(t,f,a),v(t,w,a),v(t,q,a),v(t,_,a),v(t,$,a),v(t,C,a),L.m(C,null),l(C,m),l(C,p),l(C,st),l(C,z),v(t,ut,a),v(t,O,a),v(t,pt,a),v(t,N,a),v(t,ft,a),v(t,A,a),v(t,xt,a),v(t,U,a),v(t,wt,a),v(t,j,a),v(t,_t,a),v(t,h,a),l(h,lt),l(h,Mt),l(h,it),l(h,Ht),l(h,T),l(T,R),l(R,at),l(R,kt),l(R,W),l(W,k),l(W,D),l(W,P),l(T,Pt),l(T,Q),l(T,St),l(T,Y),l(h,gt),l(h,y),l(y,B),l(B,nt),l(B,Et),l(B,F),l(F,I),l(F,S),l(F,g),l(y,qt),l(y,X),l(y,Ot),l(y,Z),l(h,Nt),l(h,tt),v(t,Ct,a),v(t,G,a),v(t,ht,a),v(t,J,a),v(t,mt,a),v(t,K,a)},p(t,[a]){bt===(bt=ce(t))&&L?L.p(t,a):(L.d(1),L=bt(t),L&&(L.c(),L.m(C,m)))},i:At,o:At,d(t){t&&(i(n),i(x),i(u),i(f),i(w),i(q),i(_),i($),i(C),i(ut),i(O),i(pt),i(N),i(ft),i(A),i(xt),i(U),i(wt),i(j),i(_t),i(h),i(Ct),i(G),i(ht),i(J),i(mt),i(K)),L.d()}}}function he(M,n,b){let x;return fe(M,xe,u=>b(0,x=u)),[x]}class Te extends de{constructor(n){super(),ue(this,n,he,Ce,pe,{})}}export{Te as component}; diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/nodes/8.C8NcTQBU.js b/testing-app/.svelte-kit/output/client/_app/immutable/nodes/8.C8NcTQBU.js deleted file mode 100644 index 94217e23..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/nodes/8.C8NcTQBU.js +++ /dev/null @@ -1,6 +0,0 @@ -import{S as K,i as O,s as W,n as g,d as s,b as l,o as n,e as i,p as a,h as r,j as o,k as v}from"../chunks/62BVG-0M.js";import"../chunks/IHki7fMi.js";function X(J){let c,G='← Back to Drip Lists',I,y,F="Get Drip List",D,p,P=`📖 About this operation:
- This operation queries the Drips network to retrieve information about an existing drip list. - It will fetch the drip list metadata, receivers, weights, and current statistics from the GraphQL API and IPFS.`,_,u,Q="Step 1: Configure Network Settings",M,d,R='
',T,m,z="Step 2: Specify Drip List to Query",H,f,E=`
`,k,h,U="Step 3: Execute Query",q,x,A=' ',w,b,N="Results",S,C,j="Query results will appear here...

Click "Get Drip List" to execute the query and see the drip list information.",V,L,B=`ℹ️ Note: This is a read-only operation that doesn't require wallet connection or gas fees. - It only queries existing data from the network.`;return{c(){c=o("div"),c.innerHTML=G,I=v(),y=o("h1"),y.textContent=F,D=v(),p=o("div"),p.innerHTML=P,_=v(),u=o("div"),u.textContent=Q,M=v(),d=o("div"),d.innerHTML=R,T=v(),m=o("div"),m.textContent=z,H=v(),f=o("div"),f.innerHTML=E,k=v(),h=o("div"),h.textContent=U,q=v(),x=o("div"),x.innerHTML=A,w=v(),b=o("div"),b.textContent=N,S=v(),C=o("div"),C.innerHTML=j,V=v(),L=o("div"),L.innerHTML=B,this.h()},l(t){c=i(t,"DIV",{class:!0,"data-svelte-h":!0}),a(c)!=="svelte-m7gd4h"&&(c.innerHTML=G),I=r(t),y=i(t,"H1",{"data-svelte-h":!0}),a(y)!=="svelte-1fz6y6d"&&(y.textContent=F),D=r(t),p=i(t,"DIV",{class:!0,"data-svelte-h":!0}),a(p)!=="svelte-1gsr9h0"&&(p.innerHTML=P),_=r(t),u=i(t,"DIV",{class:!0,"data-svelte-h":!0}),a(u)!=="svelte-1bwl3oc"&&(u.textContent=Q),M=r(t),d=i(t,"DIV",{class:!0,"data-svelte-h":!0}),a(d)!=="svelte-7b8dhc"&&(d.innerHTML=R),T=r(t),m=i(t,"DIV",{class:!0,"data-svelte-h":!0}),a(m)!=="svelte-1r7bd51"&&(m.textContent=z),H=r(t),f=i(t,"DIV",{class:!0,"data-svelte-h":!0}),a(f)!=="svelte-1kz2qyh"&&(f.innerHTML=E),k=r(t),h=i(t,"DIV",{class:!0,"data-svelte-h":!0}),a(h)!=="svelte-10e5ugi"&&(h.textContent=U),q=r(t),x=i(t,"DIV",{class:!0,"data-svelte-h":!0}),a(x)!=="svelte-p6qrcc"&&(x.innerHTML=A),w=r(t),b=i(t,"DIV",{class:!0,"data-svelte-h":!0}),a(b)!=="svelte-g8zgo0"&&(b.textContent=N),S=r(t),C=i(t,"DIV",{class:!0,"data-svelte-h":!0}),a(C)!=="svelte-17mrnio"&&(C.innerHTML=j),V=r(t),L=i(t,"DIV",{class:!0,"data-svelte-h":!0}),a(L)!=="svelte-lst5ys"&&(L.innerHTML=B),this.h()},h(){n(c,"class","back-link svelte-1met90o"),n(p,"class","info-box svelte-1met90o"),n(u,"class","step-indicator svelte-1met90o"),n(d,"class","form-container svelte-1met90o"),n(m,"class","step-indicator svelte-1met90o"),n(f,"class","form-container svelte-1met90o"),n(h,"class","step-indicator svelte-1met90o"),n(x,"class","form-container svelte-1met90o"),n(b,"class","step-indicator svelte-1met90o"),n(C,"class","result-container svelte-1met90o"),n(L,"class","info-box svelte-1met90o")},m(t,e){l(t,c,e),l(t,I,e),l(t,y,e),l(t,D,e),l(t,p,e),l(t,_,e),l(t,u,e),l(t,M,e),l(t,d,e),l(t,T,e),l(t,m,e),l(t,H,e),l(t,f,e),l(t,k,e),l(t,h,e),l(t,q,e),l(t,x,e),l(t,w,e),l(t,b,e),l(t,S,e),l(t,C,e),l(t,V,e),l(t,L,e)},p:g,i:g,o:g,d(t){t&&(s(c),s(I),s(y),s(D),s(p),s(_),s(u),s(M),s(d),s(T),s(m),s(H),s(f),s(k),s(h),s(q),s(x),s(w),s(b),s(S),s(C),s(V),s(L))}}}class $ extends K{constructor(c){super(),O(this,c,null,X,W,{})}}export{$ as component}; diff --git a/testing-app/.svelte-kit/output/client/_app/immutable/nodes/9.B2KW8haW.js b/testing-app/.svelte-kit/output/client/_app/immutable/nodes/9.B2KW8haW.js deleted file mode 100644 index 3706498c..00000000 --- a/testing-app/.svelte-kit/output/client/_app/immutable/nodes/9.B2KW8haW.js +++ /dev/null @@ -1,6 +0,0 @@ -import{S as wl,i as Sl,s as Al,n as ge,d as i,b as o,c as e,o as n,q as p,e as l,p as v,h as d,f as u,j as s,k as r}from"../chunks/62BVG-0M.js";import"../chunks/IHki7fMi.js";function Nl(gl){let x,we='← Back to Drip Lists',St,rt,Se="Update Drip List (Ethers)",At,N,Ae=`📝 About this operation:
- This page replicates the "Update Drip List using Ethers" integration test. It will first create an initial drip list, - then update its metadata and receivers, and verify the changes were applied correctly.`,Nt,q,Ne="Step 1: Configure Wallet and Network Settings",qt,k,qe='
',kt,U,ke="Step 2: Configure IPFS Settings",Ut,j,Ue='
',jt,R,je="PHASE 1: CREATE INITIAL DRIP LIST",Rt,W,Re="Step 3: Define Initial Drip List Metadata",Wt,B,We=`
`,Bt,F,Be="Step 4: Configure Initial Split Receivers",Ft,f,Lt,Fe="Initial Split Receivers",oe,mt,Ge="Define the initial receivers (total weight must equal 1,000,000).",ce,_,G,Dt,Je="Type:",ue,J,C,Ke="Project",E,Qe="Address",V,Ye="Drip List",pe,ot,Xe=' ',fe,ct,Ze=' ',ze,h,K,It,$e="Type:",xe,Q,H,tl="Project",b,el="Address",M,ll="Drip List",_e,ut,sl=' ',Ce,pt,il=' ',Gt,Y,vl="PHASE 2: UPDATE THE DRIP LIST",Jt,X,al="Step 5: Define Updated Drip List Metadata",Kt,Z,nl=`
`,Qt,$,dl="Step 6: Configure Updated Split Receivers",Yt,c,Tt,rl="Updated Split Receivers",he,yt,ol="Define the updated receivers with new weights and an additional receiver.",be,L,tt,Et,cl="Type:",Le,et,m,ul="Project",P,pl="Address",O,fl="Drip List",me,ft,zl=' ',De,zt,xl=' ',Ie,D,lt,Vt,_l="Type:",Te,st,g,Cl="Project",I,hl="Address",w,bl="Drip List",ye,xt,Ll=' ',Ee,_t,ml=' ',Ve,T,it,Ht,Dl="Type:",He,vt,S,Il="Project",y,Tl="Address",A,yl="Drip List",Me,Ct,El=' ',Pe,ht,Vl=' ',Oe,bt,Hl="+ Add Receiver",Xt,at,Ml="Step 7: Execute Operation",Zt,nt,Pl=' ',$t,dt,Ol=`⚠️ Note: This operation involves two blockchain transactions and IPFS uploads. - Make sure you have sufficient funds for gas fees and valid API credentials.`;return{c(){x=s("div"),x.innerHTML=we,St=r(),rt=s("h1"),rt.textContent=Se,At=r(),N=s("div"),N.innerHTML=Ae,Nt=r(),q=s("div"),q.textContent=Ne,qt=r(),k=s("div"),k.innerHTML=qe,kt=r(),U=s("div"),U.textContent=ke,Ut=r(),j=s("div"),j.innerHTML=Ue,jt=r(),R=s("div"),R.textContent=je,Rt=r(),W=s("div"),W.textContent=Re,Wt=r(),B=s("div"),B.innerHTML=We,Bt=r(),F=s("div"),F.textContent=Be,Ft=r(),f=s("div"),Lt=s("h3"),Lt.textContent=Fe,oe=r(),mt=s("p"),mt.textContent=Ge,ce=r(),_=s("div"),G=s("div"),Dt=s("label"),Dt.textContent=Je,ue=r(),J=s("select"),C=s("option"),C.textContent=Ke,E=s("option"),E.textContent=Qe,V=s("option"),V.textContent=Ye,pe=r(),ot=s("div"),ot.innerHTML=Xe,fe=r(),ct=s("div"),ct.innerHTML=Ze,ze=r(),h=s("div"),K=s("div"),It=s("label"),It.textContent=$e,xe=r(),Q=s("select"),H=s("option"),H.textContent=tl,b=s("option"),b.textContent=el,M=s("option"),M.textContent=ll,_e=r(),ut=s("div"),ut.innerHTML=sl,Ce=r(),pt=s("div"),pt.innerHTML=il,Gt=r(),Y=s("div"),Y.textContent=vl,Jt=r(),X=s("div"),X.textContent=al,Kt=r(),Z=s("div"),Z.innerHTML=nl,Qt=r(),$=s("div"),$.textContent=dl,Yt=r(),c=s("div"),Tt=s("h3"),Tt.textContent=rl,he=r(),yt=s("p"),yt.textContent=ol,be=r(),L=s("div"),tt=s("div"),Et=s("label"),Et.textContent=cl,Le=r(),et=s("select"),m=s("option"),m.textContent=ul,P=s("option"),P.textContent=pl,O=s("option"),O.textContent=fl,me=r(),ft=s("div"),ft.innerHTML=zl,De=r(),zt=s("div"),zt.innerHTML=xl,Ie=r(),D=s("div"),lt=s("div"),Vt=s("label"),Vt.textContent=_l,Te=r(),st=s("select"),g=s("option"),g.textContent=Cl,I=s("option"),I.textContent=hl,w=s("option"),w.textContent=bl,ye=r(),xt=s("div"),xt.innerHTML=Ll,Ee=r(),_t=s("div"),_t.innerHTML=ml,Ve=r(),T=s("div"),it=s("div"),Ht=s("label"),Ht.textContent=Dl,He=r(),vt=s("select"),S=s("option"),S.textContent=Il,y=s("option"),y.textContent=Tl,A=s("option"),A.textContent=yl,Me=r(),Ct=s("div"),Ct.innerHTML=El,Pe=r(),ht=s("div"),ht.innerHTML=Vl,Oe=r(),bt=s("button"),bt.textContent=Hl,Xt=r(),at=s("div"),at.textContent=Ml,Zt=r(),nt=s("div"),nt.innerHTML=Pl,$t=r(),dt=s("div"),dt.innerHTML=Ol,this.h()},l(t){x=l(t,"DIV",{class:!0,"data-svelte-h":!0}),v(x)!=="svelte-m7gd4h"&&(x.innerHTML=we),St=d(t),rt=l(t,"H1",{"data-svelte-h":!0}),v(rt)!=="svelte-1kr5qfm"&&(rt.textContent=Se),At=d(t),N=l(t,"DIV",{class:!0,"data-svelte-h":!0}),v(N)!=="svelte-bl2gc2"&&(N.innerHTML=Ae),Nt=d(t),q=l(t,"DIV",{class:!0,"data-svelte-h":!0}),v(q)!=="svelte-1srdtj0"&&(q.textContent=Ne),qt=d(t),k=l(t,"DIV",{class:!0,"data-svelte-h":!0}),v(k)!=="svelte-1t0r7wc"&&(k.innerHTML=qe),kt=d(t),U=l(t,"DIV",{class:!0,"data-svelte-h":!0}),v(U)!=="svelte-1ty33rx"&&(U.textContent=ke),Ut=d(t),j=l(t,"DIV",{class:!0,"data-svelte-h":!0}),v(j)!=="svelte-pcazou"&&(j.innerHTML=Ue),jt=d(t),R=l(t,"DIV",{class:!0,"data-svelte-h":!0}),v(R)!=="svelte-8bh8a4"&&(R.textContent=je),Rt=d(t),W=l(t,"DIV",{class:!0,"data-svelte-h":!0}),v(W)!=="svelte-1vxuyuu"&&(W.textContent=Re),Wt=d(t),B=l(t,"DIV",{class:!0,"data-svelte-h":!0}),v(B)!=="svelte-9unjy4"&&(B.innerHTML=We),Bt=d(t),F=l(t,"DIV",{class:!0,"data-svelte-h":!0}),v(F)!=="svelte-1oig5vo"&&(F.textContent=Be),Ft=d(t),f=l(t,"DIV",{class:!0});var a=u(f);Lt=l(a,"H3",{"data-svelte-h":!0}),v(Lt)!=="svelte-1s7qcj8"&&(Lt.textContent=Fe),oe=d(a),mt=l(a,"P",{"data-svelte-h":!0}),v(mt)!=="svelte-11g4rl"&&(mt.textContent=Ge),ce=d(a),_=l(a,"DIV",{class:!0});var Mt=u(_);G=l(Mt,"DIV",{class:!0});var te=u(G);Dt=l(te,"LABEL",{"data-svelte-h":!0}),v(Dt)!=="svelte-1r3qowe"&&(Dt.textContent=Je),ue=d(te),J=l(te,"SELECT",{class:!0});var ee=u(J);C=l(ee,"OPTION",{"data-svelte-h":!0}),v(C)!=="svelte-1mortop"&&(C.textContent=Ke),E=l(ee,"OPTION",{"data-svelte-h":!0}),v(E)!=="svelte-12qs08i"&&(E.textContent=Qe),V=l(ee,"OPTION",{"data-svelte-h":!0}),v(V)!=="svelte-1vd24y3"&&(V.textContent=Ye),ee.forEach(i),te.forEach(i),pe=d(Mt),ot=l(Mt,"DIV",{class:!0,"data-svelte-h":!0}),v(ot)!=="svelte-13gcqrh"&&(ot.innerHTML=Xe),fe=d(Mt),ct=l(Mt,"DIV",{class:!0,"data-svelte-h":!0}),v(ct)!=="svelte-rp3oo"&&(ct.innerHTML=Ze),Mt.forEach(i),ze=d(a),h=l(a,"DIV",{class:!0});var Pt=u(h);K=l(Pt,"DIV",{class:!0});var le=u(K);It=l(le,"LABEL",{"data-svelte-h":!0}),v(It)!=="svelte-1r3qowe"&&(It.textContent=$e),xe=d(le),Q=l(le,"SELECT",{class:!0});var se=u(Q);H=l(se,"OPTION",{"data-svelte-h":!0}),v(H)!=="svelte-1y3alm4"&&(H.textContent=tl),b=l(se,"OPTION",{"data-svelte-h":!0}),v(b)!=="svelte-8dw449"&&(b.textContent=el),M=l(se,"OPTION",{"data-svelte-h":!0}),v(M)!=="svelte-1vd24y3"&&(M.textContent=ll),se.forEach(i),le.forEach(i),_e=d(Pt),ut=l(Pt,"DIV",{class:!0,"data-svelte-h":!0}),v(ut)!=="svelte-1n3qnm6"&&(ut.innerHTML=sl),Ce=d(Pt),pt=l(Pt,"DIV",{class:!0,"data-svelte-h":!0}),v(pt)!=="svelte-rp3oo"&&(pt.innerHTML=il),Pt.forEach(i),a.forEach(i),Gt=d(t),Y=l(t,"DIV",{class:!0,"data-svelte-h":!0}),v(Y)!=="svelte-66f6gv"&&(Y.textContent=vl),Jt=d(t),X=l(t,"DIV",{class:!0,"data-svelte-h":!0}),v(X)!=="svelte-rlgkuv"&&(X.textContent=al),Kt=d(t),Z=l(t,"DIV",{class:!0,"data-svelte-h":!0}),v(Z)!=="svelte-ec1xt6"&&(Z.innerHTML=nl),Qt=d(t),$=l(t,"DIV",{class:!0,"data-svelte-h":!0}),v($)!=="svelte-p8huvr"&&($.textContent=dl),Yt=d(t),c=l(t,"DIV",{class:!0});var z=u(c);Tt=l(z,"H3",{"data-svelte-h":!0}),v(Tt)!=="svelte-1qgpxx"&&(Tt.textContent=rl),he=d(z),yt=l(z,"P",{"data-svelte-h":!0}),v(yt)!=="svelte-1lk749o"&&(yt.textContent=ol),be=d(z),L=l(z,"DIV",{class:!0});var Ot=u(L);tt=l(Ot,"DIV",{class:!0});var ie=u(tt);Et=l(ie,"LABEL",{"data-svelte-h":!0}),v(Et)!=="svelte-1r3qowe"&&(Et.textContent=cl),Le=d(ie),et=l(ie,"SELECT",{class:!0});var ve=u(et);m=l(ve,"OPTION",{"data-svelte-h":!0}),v(m)!=="svelte-1mortop"&&(m.textContent=ul),P=l(ve,"OPTION",{"data-svelte-h":!0}),v(P)!=="svelte-12qs08i"&&(P.textContent=pl),O=l(ve,"OPTION",{"data-svelte-h":!0}),v(O)!=="svelte-1vd24y3"&&(O.textContent=fl),ve.forEach(i),ie.forEach(i),me=d(Ot),ft=l(Ot,"DIV",{class:!0,"data-svelte-h":!0}),v(ft)!=="svelte-13gcqrh"&&(ft.innerHTML=zl),De=d(Ot),zt=l(Ot,"DIV",{class:!0,"data-svelte-h":!0}),v(zt)!=="svelte-1vjkx1j"&&(zt.innerHTML=xl),Ot.forEach(i),Ie=d(z),D=l(z,"DIV",{class:!0});var gt=u(D);lt=l(gt,"DIV",{class:!0});var ae=u(lt);Vt=l(ae,"LABEL",{"data-svelte-h":!0}),v(Vt)!=="svelte-1r3qowe"&&(Vt.textContent=_l),Te=d(ae),st=l(ae,"SELECT",{class:!0});var ne=u(st);g=l(ne,"OPTION",{"data-svelte-h":!0}),v(g)!=="svelte-1y3alm4"&&(g.textContent=Cl),I=l(ne,"OPTION",{"data-svelte-h":!0}),v(I)!=="svelte-8dw449"&&(I.textContent=hl),w=l(ne,"OPTION",{"data-svelte-h":!0}),v(w)!=="svelte-1vd24y3"&&(w.textContent=bl),ne.forEach(i),ae.forEach(i),ye=d(gt),xt=l(gt,"DIV",{class:!0,"data-svelte-h":!0}),v(xt)!=="svelte-1n3qnm6"&&(xt.innerHTML=Ll),Ee=d(gt),_t=l(gt,"DIV",{class:!0,"data-svelte-h":!0}),v(_t)!=="svelte-1x1w7v8"&&(_t.innerHTML=ml),gt.forEach(i),Ve=d(z),T=l(z,"DIV",{class:!0});var wt=u(T);it=l(wt,"DIV",{class:!0});var de=u(it);Ht=l(de,"LABEL",{"data-svelte-h":!0}),v(Ht)!=="svelte-1r3qowe"&&(Ht.textContent=Dl),He=d(de),vt=l(de,"SELECT",{class:!0});var re=u(vt);S=l(re,"OPTION",{"data-svelte-h":!0}),v(S)!=="svelte-1y3alm4"&&(S.textContent=Il),y=l(re,"OPTION",{"data-svelte-h":!0}),v(y)!=="svelte-8dw449"&&(y.textContent=Tl),A=l(re,"OPTION",{"data-svelte-h":!0}),v(A)!=="svelte-1vd24y3"&&(A.textContent=yl),re.forEach(i),de.forEach(i),Me=d(wt),Ct=l(wt,"DIV",{class:!0,"data-svelte-h":!0}),v(Ct)!=="svelte-6i4zgn"&&(Ct.innerHTML=El),Pe=d(wt),ht=l(wt,"DIV",{class:!0,"data-svelte-h":!0}),v(ht)!=="svelte-18tou36"&&(ht.innerHTML=Vl),wt.forEach(i),Oe=d(z),bt=l(z,"BUTTON",{class:!0,"data-svelte-h":!0}),v(bt)!=="svelte-1x879b4"&&(bt.textContent=Hl),z.forEach(i),Xt=d(t),at=l(t,"DIV",{class:!0,"data-svelte-h":!0}),v(at)!=="svelte-fejlb5"&&(at.textContent=Ml),Zt=d(t),nt=l(t,"DIV",{class:!0,"data-svelte-h":!0}),v(nt)!=="svelte-tduf2v"&&(nt.innerHTML=Pl),$t=d(t),dt=l(t,"DIV",{class:!0,"data-svelte-h":!0}),v(dt)!=="svelte-1dla8qa"&&(dt.innerHTML=Ol),this.h()},h(){n(x,"class","back-link svelte-vzfdz3"),n(N,"class","info-box svelte-vzfdz3"),n(q,"class","step-indicator svelte-vzfdz3"),n(k,"class","form-container svelte-vzfdz3"),n(U,"class","step-indicator svelte-vzfdz3"),n(j,"class","form-container svelte-vzfdz3"),n(R,"class","phase-separator svelte-vzfdz3"),n(W,"class","step-indicator svelte-vzfdz3"),n(B,"class","form-container svelte-vzfdz3"),n(F,"class","step-indicator svelte-vzfdz3"),C.__value="project",p(C,C.__value),C.selected=!0,E.__value="address",p(E,E.__value),V.__value="drip-list",p(V,V.__value),n(J,"class","svelte-vzfdz3"),n(G,"class","receiver-controls svelte-vzfdz3"),n(ot,"class","form-group svelte-vzfdz3"),n(ct,"class","form-group svelte-vzfdz3"),n(_,"class","receiver-item svelte-vzfdz3"),H.__value="project",p(H,H.__value),b.__value="address",p(b,b.__value),b.selected=!0,M.__value="drip-list",p(M,M.__value),n(Q,"class","svelte-vzfdz3"),n(K,"class","receiver-controls svelte-vzfdz3"),n(ut,"class","form-group svelte-vzfdz3"),n(pt,"class","form-group svelte-vzfdz3"),n(h,"class","receiver-item svelte-vzfdz3"),n(f,"class","receivers-section svelte-vzfdz3"),n(Y,"class","phase-separator svelte-vzfdz3"),n(X,"class","step-indicator svelte-vzfdz3"),n(Z,"class","form-container svelte-vzfdz3"),n($,"class","step-indicator svelte-vzfdz3"),m.__value="project",p(m,m.__value),m.selected=!0,P.__value="address",p(P,P.__value),O.__value="drip-list",p(O,O.__value),n(et,"class","svelte-vzfdz3"),n(tt,"class","receiver-controls svelte-vzfdz3"),n(ft,"class","form-group svelte-vzfdz3"),n(zt,"class","form-group svelte-vzfdz3"),n(L,"class","receiver-item svelte-vzfdz3"),g.__value="project",p(g,g.__value),I.__value="address",p(I,I.__value),I.selected=!0,w.__value="drip-list",p(w,w.__value),n(st,"class","svelte-vzfdz3"),n(lt,"class","receiver-controls svelte-vzfdz3"),n(xt,"class","form-group svelte-vzfdz3"),n(_t,"class","form-group svelte-vzfdz3"),n(D,"class","receiver-item svelte-vzfdz3"),S.__value="project",p(S,S.__value),y.__value="address",p(y,y.__value),y.selected=!0,A.__value="drip-list",p(A,A.__value),n(vt,"class","svelte-vzfdz3"),n(it,"class","receiver-controls svelte-vzfdz3"),n(Ct,"class","form-group svelte-vzfdz3"),n(ht,"class","form-group svelte-vzfdz3"),n(T,"class","receiver-item svelte-vzfdz3"),n(bt,"class","button svelte-vzfdz3"),n(c,"class","receivers-section svelte-vzfdz3"),n(at,"class","step-indicator svelte-vzfdz3"),n(nt,"class","form-container svelte-vzfdz3"),n(dt,"class","info-box svelte-vzfdz3")},m(t,a){o(t,x,a),o(t,St,a),o(t,rt,a),o(t,At,a),o(t,N,a),o(t,Nt,a),o(t,q,a),o(t,qt,a),o(t,k,a),o(t,kt,a),o(t,U,a),o(t,Ut,a),o(t,j,a),o(t,jt,a),o(t,R,a),o(t,Rt,a),o(t,W,a),o(t,Wt,a),o(t,B,a),o(t,Bt,a),o(t,F,a),o(t,Ft,a),o(t,f,a),e(f,Lt),e(f,oe),e(f,mt),e(f,ce),e(f,_),e(_,G),e(G,Dt),e(G,ue),e(G,J),e(J,C),e(J,E),e(J,V),e(_,pe),e(_,ot),e(_,fe),e(_,ct),e(f,ze),e(f,h),e(h,K),e(K,It),e(K,xe),e(K,Q),e(Q,H),e(Q,b),e(Q,M),e(h,_e),e(h,ut),e(h,Ce),e(h,pt),o(t,Gt,a),o(t,Y,a),o(t,Jt,a),o(t,X,a),o(t,Kt,a),o(t,Z,a),o(t,Qt,a),o(t,$,a),o(t,Yt,a),o(t,c,a),e(c,Tt),e(c,he),e(c,yt),e(c,be),e(c,L),e(L,tt),e(tt,Et),e(tt,Le),e(tt,et),e(et,m),e(et,P),e(et,O),e(L,me),e(L,ft),e(L,De),e(L,zt),e(c,Ie),e(c,D),e(D,lt),e(lt,Vt),e(lt,Te),e(lt,st),e(st,g),e(st,I),e(st,w),e(D,ye),e(D,xt),e(D,Ee),e(D,_t),e(c,Ve),e(c,T),e(T,it),e(it,Ht),e(it,He),e(it,vt),e(vt,S),e(vt,y),e(vt,A),e(T,Me),e(T,Ct),e(T,Pe),e(T,ht),e(c,Oe),e(c,bt),o(t,Xt,a),o(t,at,a),o(t,Zt,a),o(t,nt,a),o(t,$t,a),o(t,dt,a)},p:ge,i:ge,o:ge,d(t){t&&(i(x),i(St),i(rt),i(At),i(N),i(Nt),i(q),i(qt),i(k),i(kt),i(U),i(Ut),i(j),i(jt),i(R),i(Rt),i(W),i(Wt),i(B),i(Bt),i(F),i(Ft),i(f),i(Gt),i(Y),i(Jt),i(X),i(Kt),i(Z),i(Qt),i($),i(Yt),i(c),i(Xt),i(at),i(Zt),i(nt),i($t),i(dt))}}}class Ul extends wl{constructor(x){super(),Sl(this,x,null,Nl,Al,{})}}export{Ul as component}; diff --git a/testing-app/.svelte-kit/output/client/_app/version.json b/testing-app/.svelte-kit/output/client/_app/version.json deleted file mode 100644 index 65ce4273..00000000 --- a/testing-app/.svelte-kit/output/client/_app/version.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1751463575958"} \ No newline at end of file diff --git a/testing-app/.svelte-kit/output/client/favicon.png b/testing-app/.svelte-kit/output/client/favicon.png deleted file mode 100644 index e69de29b..00000000 diff --git a/testing-app/.svelte-kit/output/server/.vite/manifest.json b/testing-app/.svelte-kit/output/server/.vite/manifest.json deleted file mode 100644 index f5984038..00000000 --- a/testing-app/.svelte-kit/output/server/.vite/manifest.json +++ /dev/null @@ -1,214 +0,0 @@ -{ - ".svelte-kit/generated/server/internal.js": { - "file": "internal.js", - "name": "internal", - "src": ".svelte-kit/generated/server/internal.js", - "isEntry": true, - "imports": [ - "_internal.js" - ] - }, - "_exports.js": { - "file": "chunks/exports.js", - "name": "exports" - }, - "_index.js": { - "file": "chunks/index.js", - "name": "index", - "imports": [ - "_ssr.js" - ] - }, - "_internal.js": { - "file": "chunks/internal.js", - "name": "internal", - "imports": [ - "_ssr.js", - "_ssr2.js" - ] - }, - "_ssr.js": { - "file": "chunks/ssr.js", - "name": "ssr" - }, - "_ssr2.js": { - "file": "chunks/ssr2.js", - "name": "ssr" - }, - "_stores.js": { - "file": "chunks/stores.js", - "name": "stores", - "imports": [ - "_ssr.js", - "_exports.js", - "_ssr2.js" - ] - }, - "_wallet.js": { - "file": "chunks/wallet.js", - "name": "wallet", - "imports": [ - "_index.js" - ] - }, - "node_modules/@sveltejs/kit/src/runtime/components/svelte-4/error.svelte": { - "file": "entries/fallbacks/error.svelte.js", - "name": "entries/fallbacks/error.svelte", - "src": "node_modules/@sveltejs/kit/src/runtime/components/svelte-4/error.svelte", - "isEntry": true, - "imports": [ - "_ssr.js", - "_stores.js" - ] - }, - "node_modules/@sveltejs/kit/src/runtime/server/index.js": { - "file": "index.js", - "name": "index", - "src": "node_modules/@sveltejs/kit/src/runtime/server/index.js", - "isEntry": true, - "imports": [ - "_internal.js", - "_exports.js", - "_index.js" - ] - }, - "src/routes/+layout.svelte": { - "file": "entries/pages/_layout.svelte.js", - "name": "entries/pages/_layout.svelte", - "src": "src/routes/+layout.svelte", - "isEntry": true, - "imports": [ - "_ssr.js", - "_stores.js", - "_wallet.js" - ], - "css": [ - "_app/immutable/assets/_layout.BYseaBWp.css" - ] - }, - "src/routes/+page.svelte": { - "file": "entries/pages/_page.svelte.js", - "name": "entries/pages/_page.svelte", - "src": "src/routes/+page.svelte", - "isEntry": true, - "imports": [ - "_ssr.js", - "_wallet.js" - ], - "css": [ - "_app/immutable/assets/_page.CjMuiM7s.css" - ] - }, - "src/routes/donations/+page.svelte": { - "file": "entries/pages/donations/_page.svelte.js", - "name": "entries/pages/donations/_page.svelte", - "src": "src/routes/donations/+page.svelte", - "isEntry": true, - "imports": [ - "_ssr.js", - "_wallet.js" - ], - "css": [ - "_app/immutable/assets/_page.BDcQWZi5.css" - ] - }, - "src/routes/donations/one-time-viem/+page.svelte": { - "file": "entries/pages/donations/one-time-viem/_page.svelte.js", - "name": "entries/pages/donations/one-time-viem/_page.svelte", - "src": "src/routes/donations/one-time-viem/+page.svelte", - "isEntry": true, - "imports": [ - "_ssr.js" - ], - "css": [ - "_app/immutable/assets/_page.crwMbBlP.css" - ] - }, - "src/routes/drip-lists/+page.svelte": { - "file": "entries/pages/drip-lists/_page.svelte.js", - "name": "entries/pages/drip-lists/_page.svelte", - "src": "src/routes/drip-lists/+page.svelte", - "isEntry": true, - "imports": [ - "_ssr.js", - "_wallet.js" - ], - "css": [ - "_app/immutable/assets/_page.Bkgd3-bB.css" - ] - }, - "src/routes/drip-lists/create-ethers/+page.svelte": { - "file": "entries/pages/drip-lists/create-ethers/_page.svelte.js", - "name": "entries/pages/drip-lists/create-ethers/_page.svelte", - "src": "src/routes/drip-lists/create-ethers/+page.svelte", - "isEntry": true, - "imports": [ - "_ssr.js", - "_wallet.js" - ], - "css": [ - "_app/immutable/assets/_page.zi60Wocq.css" - ] - }, - "src/routes/drip-lists/create-viem/+page.svelte": { - "file": "entries/pages/drip-lists/create-viem/_page.svelte.js", - "name": "entries/pages/drip-lists/create-viem/_page.svelte", - "src": "src/routes/drip-lists/create-viem/+page.svelte", - "isEntry": true, - "imports": [ - "_ssr.js", - "_wallet.js" - ], - "css": [ - "_app/immutable/assets/_page.DBui5s7P.css" - ] - }, - "src/routes/drip-lists/get/+page.svelte": { - "file": "entries/pages/drip-lists/get/_page.svelte.js", - "name": "entries/pages/drip-lists/get/_page.svelte", - "src": "src/routes/drip-lists/get/+page.svelte", - "isEntry": true, - "imports": [ - "_ssr.js" - ], - "css": [ - "_app/immutable/assets/_page.Bzrer8Pn.css" - ] - }, - "src/routes/drip-lists/update-ethers/+page.svelte": { - "file": "entries/pages/drip-lists/update-ethers/_page.svelte.js", - "name": "entries/pages/drip-lists/update-ethers/_page.svelte", - "src": "src/routes/drip-lists/update-ethers/+page.svelte", - "isEntry": true, - "imports": [ - "_ssr.js" - ], - "css": [ - "_app/immutable/assets/_page.nkHczZI2.css" - ] - }, - "src/routes/drip-lists/update-viem/+page.svelte": { - "file": "entries/pages/drip-lists/update-viem/_page.svelte.js", - "name": "entries/pages/drip-lists/update-viem/_page.svelte", - "src": "src/routes/drip-lists/update-viem/+page.svelte", - "isEntry": true, - "imports": [ - "_ssr.js" - ], - "css": [ - "_app/immutable/assets/_page.DhGtm3er.css" - ] - }, - "src/routes/utils/+page.svelte": { - "file": "entries/pages/utils/_page.svelte.js", - "name": "entries/pages/utils/_page.svelte", - "src": "src/routes/utils/+page.svelte", - "isEntry": true, - "imports": [ - "_ssr.js" - ], - "css": [ - "_app/immutable/assets/_page.DTcCG34U.css" - ] - } -} \ No newline at end of file diff --git a/testing-app/.svelte-kit/output/server/_app/immutable/assets/_layout.BYseaBWp.css b/testing-app/.svelte-kit/output/server/_app/immutable/assets/_layout.BYseaBWp.css deleted file mode 100644 index 1dd5f3de..00000000 --- a/testing-app/.svelte-kit/output/server/_app/immutable/assets/_layout.BYseaBWp.css +++ /dev/null @@ -1 +0,0 @@ -.wallet-container.svelte-1pdwhqy{display:flex;align-items:center;gap:10px}.wallet-button.svelte-1pdwhqy{background-color:teal;color:#fff;border:2px outset #008080;padding:8px 16px;font-family:Courier New,monospace;font-weight:700;cursor:pointer;font-size:12px}.wallet-button.svelte-1pdwhqy:hover{background-color:#066}.wallet-button.svelte-1pdwhqy:active{border:2px inset #008080}.wallet-button.svelte-1pdwhqy:disabled{background-color:gray;cursor:not-allowed;opacity:.6}.wallet-button.disconnect.svelte-1pdwhqy{background-color:maroon;border-color:maroon}.wallet-button.disconnect.svelte-1pdwhqy:hover{background-color:#600000}.wallet-status.svelte-1pdwhqy{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:700}.status-indicator.svelte-1pdwhqy{width:8px;height:8px;border-radius:50%;background-color:#0f0;animation:svelte-1pdwhqy-pulse 2s infinite}.status-indicator.disconnected.svelte-1pdwhqy{background-color:red;animation:none}.address.svelte-1pdwhqy{background-color:#f0f0f0;border:1px inset #c0c0c0;padding:4px 8px;font-family:Courier New,monospace;font-size:11px;color:navy}.error.svelte-1pdwhqy{color:red;font-size:11px;max-width:200px;word-wrap:break-word}.connecting.svelte-1pdwhqy{color:#f80;font-size:11px}@keyframes svelte-1pdwhqy-pulse{0%{opacity:1}50%{opacity:.5}to{opacity:1}}.metamask-warning.svelte-1pdwhqy{background-color:#fff3cd;border:2px solid #ffeaa7;padding:8px;font-size:11px;color:#856404;margin-top:5px}body{font-family:Courier New,monospace;background-color:silver;margin:0;padding:0}.container.svelte-eu58yt.svelte-eu58yt{max-width:1200px;margin:0 auto;background-color:silver;min-height:100vh}.header.svelte-eu58yt.svelte-eu58yt{background-color:teal;color:#fff;padding:20px;border-bottom:3px solid #000080;display:flex;flex-direction:column;align-items:center;gap:15px}.header-content.svelte-eu58yt.svelte-eu58yt{text-align:center}.header.svelte-eu58yt h1.svelte-eu58yt{margin:0;font-size:24px;text-shadow:2px 2px 0px #000000}.wallet-section.svelte-eu58yt.svelte-eu58yt{display:flex;justify-content:center;width:100%}.nav.svelte-eu58yt.svelte-eu58yt{background-color:gray;border-bottom:2px solid #000000;padding:0}.nav.svelte-eu58yt ul.svelte-eu58yt{list-style:none;margin:0;padding:0;display:flex}.nav.svelte-eu58yt li.svelte-eu58yt{border-right:2px solid #000000}.nav.svelte-eu58yt li.svelte-eu58yt:first-child{border-left:2px solid #000000}.nav.svelte-eu58yt li.svelte-eu58yt:last-child{border-right:2px solid #000000}.nav.svelte-eu58yt a.svelte-eu58yt{display:block;padding:15px 25px;text-decoration:none;color:#000;background-color:silver;border:2px outset #c0c0c0;font-weight:700}.nav.svelte-eu58yt a.svelte-eu58yt:hover{background-color:#e0e0e0}.nav.svelte-eu58yt a.active.svelte-eu58yt{background-color:#fff;border:2px inset #c0c0c0}.content.svelte-eu58yt.svelte-eu58yt{padding:20px;background-color:#fff;margin:10px;border:2px inset #c0c0c0;min-height:500px} diff --git a/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.BDcQWZi5.css b/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.BDcQWZi5.css deleted file mode 100644 index a3b28a97..00000000 --- a/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.BDcQWZi5.css +++ /dev/null @@ -1 +0,0 @@ -.operations.svelte-1kxhsoz.svelte-1kxhsoz{display:grid;grid-template-columns:repeat(auto-fit,minmax(400px,1fr));gap:20px;margin:20px 0}.operation.svelte-1kxhsoz.svelte-1kxhsoz{background-color:#f0f0f0;border:2px outset #c0c0c0;padding:20px}.operation.svelte-1kxhsoz h3.svelte-1kxhsoz{margin-top:0;color:navy;border-bottom:2px solid #000080;padding-bottom:5px}.operation.svelte-1kxhsoz p.svelte-1kxhsoz{margin:10px 0}.operation.svelte-1kxhsoz a.svelte-1kxhsoz{display:inline-block;background-color:silver;border:2px outset #c0c0c0;padding:8px 16px;text-decoration:none;color:#000;font-weight:700;margin:5px 5px 5px 0}.operation.svelte-1kxhsoz a.svelte-1kxhsoz:hover{background-color:#e0e0e0}.operation.svelte-1kxhsoz a.svelte-1kxhsoz:active{border:2px inset #c0c0c0}.back-link.svelte-1kxhsoz.svelte-1kxhsoz{margin-bottom:20px}.back-link.svelte-1kxhsoz a.svelte-1kxhsoz{color:navy;text-decoration:underline}.donation-types.svelte-1kxhsoz.svelte-1kxhsoz{background-color:#ffc;border:2px solid #ffcc00;padding:15px;margin:20px 0}.access-indicator.svelte-1kxhsoz.svelte-1kxhsoz{display:inline-block;font-size:10px;padding:2px 6px;margin-left:8px;border:1px solid;font-weight:700;font-family:Courier New,monospace}.access-indicator.write.svelte-1kxhsoz.svelte-1kxhsoz{background-color:#fcc;border-color:#f66;color:#c00}.operation.disabled.svelte-1kxhsoz.svelte-1kxhsoz{opacity:.5;pointer-events:none}.operation.disabled.svelte-1kxhsoz .access-indicator.svelte-1kxhsoz{opacity:.7} diff --git a/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.Bkgd3-bB.css b/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.Bkgd3-bB.css deleted file mode 100644 index d24c4375..00000000 --- a/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.Bkgd3-bB.css +++ /dev/null @@ -1 +0,0 @@ -.operations.svelte-xp12xz.svelte-xp12xz{display:grid;grid-template-columns:repeat(auto-fit,minmax(400px,1fr));gap:20px;margin:20px 0}.operation.svelte-xp12xz.svelte-xp12xz{background-color:#f0f0f0;border:2px outset #c0c0c0;padding:20px}.operation.svelte-xp12xz h3.svelte-xp12xz{margin-top:0;color:navy;border-bottom:2px solid #000080;padding-bottom:5px}.operation.svelte-xp12xz p.svelte-xp12xz{margin:10px 0}.operation.svelte-xp12xz a.svelte-xp12xz{display:inline-block;background-color:silver;border:2px outset #c0c0c0;padding:8px 16px;text-decoration:none;color:#000;font-weight:700;margin:5px 5px 5px 0}.operation.svelte-xp12xz a.svelte-xp12xz:hover{background-color:#e0e0e0}.operation.svelte-xp12xz a.svelte-xp12xz:active{border:2px inset #c0c0c0}.back-link.svelte-xp12xz.svelte-xp12xz{margin-bottom:20px}.back-link.svelte-xp12xz a.svelte-xp12xz{color:navy;text-decoration:underline}.drip-lists-info.svelte-xp12xz.svelte-xp12xz{background-color:#ffc;border:2px solid #ffcc00;padding:15px;margin:20px 0}.access-indicator.svelte-xp12xz.svelte-xp12xz{display:inline-block;font-size:10px;padding:2px 6px;margin-left:8px;border:1px solid;font-weight:700;font-family:Courier New,monospace}.access-indicator.write.svelte-xp12xz.svelte-xp12xz{background-color:#fcc;border-color:#f66;color:#c00}.access-indicator.read.svelte-xp12xz.svelte-xp12xz{background-color:#cfc;border-color:#6f6;color:#060}.operation.disabled.svelte-xp12xz.svelte-xp12xz{opacity:.5;pointer-events:none}.operation.disabled.svelte-xp12xz .access-indicator.svelte-xp12xz{opacity:.7} diff --git a/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.Bzrer8Pn.css b/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.Bzrer8Pn.css deleted file mode 100644 index d8f4a244..00000000 --- a/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.Bzrer8Pn.css +++ /dev/null @@ -1 +0,0 @@ -.form-container.svelte-1met90o.svelte-1met90o{background-color:#f0f0f0;border:2px inset #c0c0c0;padding:20px;margin:20px 0}.form-group.svelte-1met90o.svelte-1met90o{margin:15px 0}.form-group.svelte-1met90o label.svelte-1met90o{display:block;font-weight:700;margin-bottom:5px;color:navy}.form-group.svelte-1met90o input.svelte-1met90o{width:100%;padding:8px;border:2px inset #c0c0c0;font-family:Courier New,monospace;background-color:#fff}.button.svelte-1met90o.svelte-1met90o{background-color:silver;border:2px outset #c0c0c0;padding:10px 20px;font-family:Courier New,monospace;font-weight:700;cursor:pointer;margin:5px}.button.svelte-1met90o.svelte-1met90o:hover{background-color:#e0e0e0}.button.svelte-1met90o.svelte-1met90o:active{border:2px inset #c0c0c0}.button.primary.svelte-1met90o.svelte-1met90o{background-color:teal;color:#fff}.button.primary.svelte-1met90o.svelte-1met90o:hover{background-color:#066}.back-link.svelte-1met90o.svelte-1met90o{margin-bottom:20px}.back-link.svelte-1met90o a.svelte-1met90o{color:navy;text-decoration:underline}.info-box.svelte-1met90o.svelte-1met90o{background-color:#ffc;border:2px solid #ffcc00;padding:15px;margin:20px 0}.step-indicator.svelte-1met90o.svelte-1met90o{background-color:#e0e0e0;border:2px outset #c0c0c0;padding:10px;margin:10px 0;font-weight:700}.result-container.svelte-1met90o.svelte-1met90o{background-color:#f8f8f8;border:2px inset #c0c0c0;padding:15px;margin:20px 0;font-family:Courier New,monospace;font-size:12px} diff --git a/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.CjMuiM7s.css b/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.CjMuiM7s.css deleted file mode 100644 index ca8cbbb9..00000000 --- a/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.CjMuiM7s.css +++ /dev/null @@ -1 +0,0 @@ -.welcome.svelte-1piekce.svelte-1piekce{text-align:center;margin:40px 0}.description.svelte-1piekce.svelte-1piekce{background-color:#f0f0f0;border:2px inset #c0c0c0;padding:20px;margin:20px 0}.wallet-info.svelte-1piekce.svelte-1piekce{background-color:#e6f3ff;border:2px solid #0066cc;padding:20px;margin:20px 0}.wallet-info.connected.svelte-1piekce.svelte-1piekce{background-color:#e6ffe6;border-color:#0c0}.wallet-info.disconnected.svelte-1piekce.svelte-1piekce{background-color:#ffe6e6;border-color:#c00}.wallet-address.svelte-1piekce.svelte-1piekce{font-family:Courier New,monospace;background-color:#f0f0f0;padding:8px;border:1px inset #c0c0c0;margin:10px 0;word-break:break-all}.modules.svelte-1piekce.svelte-1piekce{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:20px;margin:30px 0}.module.svelte-1piekce.svelte-1piekce{background-color:#e0e0e0;border:2px outset #c0c0c0;padding:15px}.module.svelte-1piekce h3.svelte-1piekce{margin-top:0;color:navy}.module.svelte-1piekce ul.svelte-1piekce{margin:10px 0;padding-left:20px}.module.svelte-1piekce a.svelte-1piekce{color:navy;text-decoration:underline}.module.svelte-1piekce a.svelte-1piekce:hover{background-color:#ff0} diff --git a/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.DBui5s7P.css b/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.DBui5s7P.css deleted file mode 100644 index ea53fd9a..00000000 --- a/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.DBui5s7P.css +++ /dev/null @@ -1 +0,0 @@ -.form-container.svelte-65cwss.svelte-65cwss{background-color:#f0f0f0;border:2px inset #c0c0c0;padding:20px;margin:20px 0}.form-group.svelte-65cwss.svelte-65cwss{margin:15px 0}.form-group.svelte-65cwss label.svelte-65cwss{display:block;font-weight:700;margin-bottom:5px;color:navy}.checkbox-group.svelte-65cwss.svelte-65cwss{display:flex;align-items:center;gap:8px}.checkbox-group.svelte-65cwss label.svelte-65cwss{display:flex;align-items:center;gap:8px;margin-bottom:0}.checkbox-group.svelte-65cwss input[type=checkbox].svelte-65cwss{width:auto;margin:0}.form-group.svelte-65cwss input.svelte-65cwss,.form-group.svelte-65cwss textarea.svelte-65cwss{width:100%;padding:8px;border:2px inset #c0c0c0;font-family:Courier New,monospace;background-color:#fff}.form-group.svelte-65cwss textarea.svelte-65cwss{height:80px;resize:vertical}.receivers-section.svelte-65cwss.svelte-65cwss{background-color:#e0e0e0;border:2px inset #c0c0c0;padding:15px;margin:15px 0}.receiver-item.svelte-65cwss.svelte-65cwss{background-color:#f8f8f8;border:1px solid #808080;padding:10px;margin:10px 0}.receiver-controls.svelte-65cwss.svelte-65cwss{display:flex;gap:10px;align-items:center;margin:10px 0}.receiver-controls.svelte-65cwss select.svelte-65cwss{padding:5px;border:2px inset #c0c0c0}.button.svelte-65cwss.svelte-65cwss{background-color:silver;border:2px outset #c0c0c0;padding:10px 20px;font-family:Courier New,monospace;font-weight:700;cursor:pointer;margin:5px}.button.svelte-65cwss.svelte-65cwss:hover{background-color:#e0e0e0}.button.svelte-65cwss.svelte-65cwss:active{border:2px inset #c0c0c0}.button.primary.svelte-65cwss.svelte-65cwss{background-color:teal;color:#fff}.button.primary.svelte-65cwss.svelte-65cwss:hover{background-color:#066}.back-link.svelte-65cwss.svelte-65cwss{margin-bottom:20px}.back-link.svelte-65cwss a.svelte-65cwss{color:navy;text-decoration:underline}.info-box.svelte-65cwss.svelte-65cwss{background-color:#ffc;border:2px solid #ffcc00;padding:15px;margin:20px 0}.step-indicator.svelte-65cwss.svelte-65cwss{background-color:#e0e0e0;border:2px outset #c0c0c0;padding:10px;margin:10px 0;font-weight:700}.wallet-status.svelte-65cwss.svelte-65cwss{background-color:#cfc;border:2px solid #66ff66;padding:10px;margin:10px 0;font-weight:700;color:#060}.wallet-status.disconnected.svelte-65cwss.svelte-65cwss{background-color:#fcc;border-color:#f66;color:#c00} diff --git a/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.DTcCG34U.css b/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.DTcCG34U.css deleted file mode 100644 index c5ad0f1d..00000000 --- a/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.DTcCG34U.css +++ /dev/null @@ -1 +0,0 @@ -.operations.svelte-s1nhl5.svelte-s1nhl5{display:grid;grid-template-columns:repeat(auto-fit,minmax(400px,1fr));gap:20px;margin:20px 0}.operation.svelte-s1nhl5.svelte-s1nhl5{background-color:#f0f0f0;border:2px outset #c0c0c0;padding:20px}.operation.svelte-s1nhl5 h3.svelte-s1nhl5{margin-top:0;color:navy;border-bottom:2px solid #000080;padding-bottom:5px}.operation.svelte-s1nhl5 p.svelte-s1nhl5{margin:10px 0}.operation.svelte-s1nhl5 a.svelte-s1nhl5{display:inline-block;background-color:silver;border:2px outset #c0c0c0;padding:8px 16px;text-decoration:none;color:#000;font-weight:700;margin:5px 5px 5px 0}.operation.svelte-s1nhl5 a.svelte-s1nhl5:hover{background-color:#e0e0e0}.operation.svelte-s1nhl5 a.svelte-s1nhl5:active{border:2px inset #c0c0c0}.back-link.svelte-s1nhl5.svelte-s1nhl5{margin-bottom:20px}.back-link.svelte-s1nhl5 a.svelte-s1nhl5{color:navy;text-decoration:underline}.utils-info.svelte-s1nhl5.svelte-s1nhl5{background-color:#ffc;border:2px solid #ffcc00;padding:15px;margin:20px 0}.access-indicator.svelte-s1nhl5.svelte-s1nhl5{display:inline-block;font-size:10px;padding:2px 6px;margin-left:8px;border:1px solid;font-weight:700;font-family:Courier New,monospace}.access-indicator.read.svelte-s1nhl5.svelte-s1nhl5{background-color:#cfc;border-color:#6f6;color:#060} diff --git a/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.DhGtm3er.css b/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.DhGtm3er.css deleted file mode 100644 index b62e80c3..00000000 --- a/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.DhGtm3er.css +++ /dev/null @@ -1 +0,0 @@ -.form-container.svelte-ing6in.svelte-ing6in{background-color:#f0f0f0;border:2px inset #c0c0c0;padding:20px;margin:20px 0}.form-group.svelte-ing6in.svelte-ing6in{margin:15px 0}.form-group.svelte-ing6in label.svelte-ing6in{display:block;font-weight:700;margin-bottom:5px;color:navy}.form-group.svelte-ing6in input.svelte-ing6in,.form-group.svelte-ing6in textarea.svelte-ing6in{width:100%;padding:8px;border:2px inset #c0c0c0;font-family:Courier New,monospace;background-color:#fff}.form-group.svelte-ing6in textarea.svelte-ing6in{height:80px;resize:vertical}.receivers-section.svelte-ing6in.svelte-ing6in{background-color:#e0e0e0;border:2px inset #c0c0c0;padding:15px;margin:15px 0}.receiver-item.svelte-ing6in.svelte-ing6in{background-color:#f8f8f8;border:1px solid #808080;padding:10px;margin:10px 0}.receiver-controls.svelte-ing6in.svelte-ing6in{display:flex;gap:10px;align-items:center;margin:10px 0}.receiver-controls.svelte-ing6in select.svelte-ing6in{padding:5px;border:2px inset #c0c0c0}.button.svelte-ing6in.svelte-ing6in{background-color:silver;border:2px outset #c0c0c0;padding:10px 20px;font-family:Courier New,monospace;font-weight:700;cursor:pointer;margin:5px}.button.svelte-ing6in.svelte-ing6in:hover{background-color:#e0e0e0}.button.svelte-ing6in.svelte-ing6in:active{border:2px inset #c0c0c0}.button.primary.svelte-ing6in.svelte-ing6in{background-color:teal;color:#fff}.button.primary.svelte-ing6in.svelte-ing6in:hover{background-color:#066}.button.secondary.svelte-ing6in.svelte-ing6in{background-color:olive;color:#fff}.button.secondary.svelte-ing6in.svelte-ing6in:hover{background-color:#606000}.back-link.svelte-ing6in.svelte-ing6in{margin-bottom:20px}.back-link.svelte-ing6in a.svelte-ing6in{color:navy;text-decoration:underline}.info-box.svelte-ing6in.svelte-ing6in{background-color:#ffc;border:2px solid #ffcc00;padding:15px;margin:20px 0}.step-indicator.svelte-ing6in.svelte-ing6in{background-color:#e0e0e0;border:2px outset #c0c0c0;padding:10px;margin:10px 0;font-weight:700}.phase-separator.svelte-ing6in.svelte-ing6in{background-color:#f66;color:#fff;padding:15px;margin:30px 0;text-align:center;font-weight:700;border:2px solid #cc0000} diff --git a/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.crwMbBlP.css b/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.crwMbBlP.css deleted file mode 100644 index c3f51342..00000000 --- a/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.crwMbBlP.css +++ /dev/null @@ -1 +0,0 @@ -.form-container.svelte-d0c2ur.svelte-d0c2ur{background-color:#f0f0f0;border:2px inset #c0c0c0;padding:20px;margin:20px 0}.form-group.svelte-d0c2ur.svelte-d0c2ur{margin:15px 0}.form-group.svelte-d0c2ur label.svelte-d0c2ur{display:block;font-weight:700;margin-bottom:5px;color:navy}.form-group.svelte-d0c2ur input.svelte-d0c2ur,.form-group.svelte-d0c2ur textarea.svelte-d0c2ur,.form-group.svelte-d0c2ur select.svelte-d0c2ur{width:100%;padding:8px;border:2px inset #c0c0c0;font-family:Courier New,monospace;background-color:#fff}.form-group.svelte-d0c2ur textarea.svelte-d0c2ur{height:80px;resize:vertical}.receivers-section.svelte-d0c2ur.svelte-d0c2ur{background-color:#e0e0e0;border:2px inset #c0c0c0;padding:15px;margin:15px 0}.receiver-item.svelte-d0c2ur.svelte-d0c2ur{background-color:#f8f8f8;border:1px solid #808080;padding:10px;margin:10px 0}.button.svelte-d0c2ur.svelte-d0c2ur{background-color:silver;border:2px outset #c0c0c0;padding:10px 20px;font-family:Courier New,monospace;font-weight:700;cursor:pointer;margin:5px}.button.svelte-d0c2ur.svelte-d0c2ur:hover{background-color:#e0e0e0}.button.svelte-d0c2ur.svelte-d0c2ur:active{border:2px inset #c0c0c0}.button.primary.svelte-d0c2ur.svelte-d0c2ur{background-color:teal;color:#fff}.button.primary.svelte-d0c2ur.svelte-d0c2ur:hover{background-color:#066}.button.secondary.svelte-d0c2ur.svelte-d0c2ur{background-color:olive;color:#fff}.button.secondary.svelte-d0c2ur.svelte-d0c2ur:hover{background-color:#606000}.back-link.svelte-d0c2ur.svelte-d0c2ur{margin-bottom:20px}.back-link.svelte-d0c2ur a.svelte-d0c2ur{color:navy;text-decoration:underline}.info-box.svelte-d0c2ur.svelte-d0c2ur{background-color:#ffc;border:2px solid #ffcc00;padding:15px;margin:20px 0}.step-indicator.svelte-d0c2ur.svelte-d0c2ur{background-color:#e0e0e0;border:2px outset #c0c0c0;padding:10px;margin:10px 0;font-weight:700}.phase-separator.svelte-d0c2ur.svelte-d0c2ur{background-color:#f66;color:#fff;padding:15px;margin:30px 0;text-align:center;font-weight:700;border:2px solid #cc0000} diff --git a/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.nkHczZI2.css b/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.nkHczZI2.css deleted file mode 100644 index bf450fd3..00000000 --- a/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.nkHczZI2.css +++ /dev/null @@ -1 +0,0 @@ -.form-container.svelte-vzfdz3.svelte-vzfdz3{background-color:#f0f0f0;border:2px inset #c0c0c0;padding:20px;margin:20px 0}.form-group.svelte-vzfdz3.svelte-vzfdz3{margin:15px 0}.form-group.svelte-vzfdz3 label.svelte-vzfdz3{display:block;font-weight:700;margin-bottom:5px;color:navy}.form-group.svelte-vzfdz3 input.svelte-vzfdz3,.form-group.svelte-vzfdz3 textarea.svelte-vzfdz3{width:100%;padding:8px;border:2px inset #c0c0c0;font-family:Courier New,monospace;background-color:#fff}.form-group.svelte-vzfdz3 textarea.svelte-vzfdz3{height:80px;resize:vertical}.receivers-section.svelte-vzfdz3.svelte-vzfdz3{background-color:#e0e0e0;border:2px inset #c0c0c0;padding:15px;margin:15px 0}.receiver-item.svelte-vzfdz3.svelte-vzfdz3{background-color:#f8f8f8;border:1px solid #808080;padding:10px;margin:10px 0}.receiver-controls.svelte-vzfdz3.svelte-vzfdz3{display:flex;gap:10px;align-items:center;margin:10px 0}.receiver-controls.svelte-vzfdz3 select.svelte-vzfdz3{padding:5px;border:2px inset #c0c0c0}.button.svelte-vzfdz3.svelte-vzfdz3{background-color:silver;border:2px outset #c0c0c0;padding:10px 20px;font-family:Courier New,monospace;font-weight:700;cursor:pointer;margin:5px}.button.svelte-vzfdz3.svelte-vzfdz3:hover{background-color:#e0e0e0}.button.svelte-vzfdz3.svelte-vzfdz3:active{border:2px inset #c0c0c0}.button.primary.svelte-vzfdz3.svelte-vzfdz3{background-color:purple;color:#fff}.button.primary.svelte-vzfdz3.svelte-vzfdz3:hover{background-color:#600060}.button.secondary.svelte-vzfdz3.svelte-vzfdz3{background-color:olive;color:#fff}.button.secondary.svelte-vzfdz3.svelte-vzfdz3:hover{background-color:#606000}.back-link.svelte-vzfdz3.svelte-vzfdz3{margin-bottom:20px}.back-link.svelte-vzfdz3 a.svelte-vzfdz3{color:navy;text-decoration:underline}.info-box.svelte-vzfdz3.svelte-vzfdz3{background-color:#ffc;border:2px solid #ffcc00;padding:15px;margin:20px 0}.step-indicator.svelte-vzfdz3.svelte-vzfdz3{background-color:#e0e0e0;border:2px outset #c0c0c0;padding:10px;margin:10px 0;font-weight:700}.phase-separator.svelte-vzfdz3.svelte-vzfdz3{background-color:#f66;color:#fff;padding:15px;margin:30px 0;text-align:center;font-weight:700;border:2px solid #cc0000} diff --git a/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.zi60Wocq.css b/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.zi60Wocq.css deleted file mode 100644 index 75c4e5e8..00000000 --- a/testing-app/.svelte-kit/output/server/_app/immutable/assets/_page.zi60Wocq.css +++ /dev/null @@ -1 +0,0 @@ -.form-container.svelte-1hwmnd0.svelte-1hwmnd0{background-color:#f0f0f0;border:2px inset #c0c0c0;padding:20px;margin:20px 0}.form-group.svelte-1hwmnd0.svelte-1hwmnd0{margin:15px 0}.form-group.svelte-1hwmnd0 label.svelte-1hwmnd0{display:block;font-weight:700;margin-bottom:5px;color:navy}.checkbox-group.svelte-1hwmnd0.svelte-1hwmnd0{display:flex;align-items:center;gap:8px}.checkbox-group.svelte-1hwmnd0 label.svelte-1hwmnd0{display:flex;align-items:center;gap:8px;margin-bottom:0}.checkbox-group.svelte-1hwmnd0 input[type=checkbox].svelte-1hwmnd0{width:auto;margin:0}.form-group.svelte-1hwmnd0 input.svelte-1hwmnd0,.form-group.svelte-1hwmnd0 textarea.svelte-1hwmnd0{width:100%;padding:8px;border:2px inset #c0c0c0;font-family:Courier New,monospace;background-color:#fff}.form-group.svelte-1hwmnd0 textarea.svelte-1hwmnd0{height:80px;resize:vertical}.receivers-section.svelte-1hwmnd0.svelte-1hwmnd0{background-color:#e0e0e0;border:2px inset #c0c0c0;padding:15px;margin:15px 0}.receiver-item.svelte-1hwmnd0.svelte-1hwmnd0{background-color:#f8f8f8;border:1px solid #808080;padding:10px;margin:10px 0}.receiver-controls.svelte-1hwmnd0.svelte-1hwmnd0{display:flex;gap:10px;align-items:center;margin:10px 0}.receiver-controls.svelte-1hwmnd0 select.svelte-1hwmnd0{padding:5px;border:2px inset #c0c0c0}.button.svelte-1hwmnd0.svelte-1hwmnd0{background-color:silver;border:2px outset #c0c0c0;padding:10px 20px;font-family:Courier New,monospace;font-weight:700;cursor:pointer;margin:5px}.button.svelte-1hwmnd0.svelte-1hwmnd0:hover{background-color:#e0e0e0}.button.svelte-1hwmnd0.svelte-1hwmnd0:active{border:2px inset #c0c0c0}.button.primary.svelte-1hwmnd0.svelte-1hwmnd0{background-color:purple;color:#fff}.button.primary.svelte-1hwmnd0.svelte-1hwmnd0:hover{background-color:#600060}.back-link.svelte-1hwmnd0.svelte-1hwmnd0{margin-bottom:20px}.back-link.svelte-1hwmnd0 a.svelte-1hwmnd0{color:navy;text-decoration:underline}.info-box.svelte-1hwmnd0.svelte-1hwmnd0{background-color:#ffc;border:2px solid #ffcc00;padding:15px;margin:20px 0}.step-indicator.svelte-1hwmnd0.svelte-1hwmnd0{background-color:#e0e0e0;border:2px outset #c0c0c0;padding:10px;margin:10px 0;font-weight:700}.wallet-status.svelte-1hwmnd0.svelte-1hwmnd0{background-color:#cfc;border:2px solid #66ff66;padding:10px;margin:10px 0;font-weight:700;color:#060}.wallet-status.disconnected.svelte-1hwmnd0.svelte-1hwmnd0{background-color:#fcc;border-color:#f66;color:#c00} diff --git a/testing-app/.svelte-kit/output/server/chunks/exports.js b/testing-app/.svelte-kit/output/server/chunks/exports.js deleted file mode 100644 index 4307ce33..00000000 --- a/testing-app/.svelte-kit/output/server/chunks/exports.js +++ /dev/null @@ -1,172 +0,0 @@ -const internal = new URL("sveltekit-internal://"); -function resolve(base, path) { - if (path[0] === "/" && path[1] === "/") return path; - let url = new URL(base, internal); - url = new URL(path, url); - return url.protocol === internal.protocol ? url.pathname + url.search + url.hash : url.href; -} -function normalize_path(path, trailing_slash) { - if (path === "/" || trailing_slash === "ignore") return path; - if (trailing_slash === "never") { - return path.endsWith("/") ? path.slice(0, -1) : path; - } else if (trailing_slash === "always" && !path.endsWith("/")) { - return path + "/"; - } - return path; -} -function decode_pathname(pathname) { - return pathname.split("%25").map(decodeURI).join("%25"); -} -function decode_params(params) { - for (const key in params) { - params[key] = decodeURIComponent(params[key]); - } - return params; -} -function make_trackable(url, callback, search_params_callback, allow_hash = false) { - const tracked = new URL(url); - Object.defineProperty(tracked, "searchParams", { - value: new Proxy(tracked.searchParams, { - get(obj, key) { - if (key === "get" || key === "getAll" || key === "has") { - return (param) => { - search_params_callback(param); - return obj[key](param); - }; - } - callback(); - const value = Reflect.get(obj, key); - return typeof value === "function" ? value.bind(obj) : value; - } - }), - enumerable: true, - configurable: true - }); - const tracked_url_properties = ["href", "pathname", "search", "toString", "toJSON"]; - if (allow_hash) tracked_url_properties.push("hash"); - for (const property of tracked_url_properties) { - Object.defineProperty(tracked, property, { - get() { - callback(); - return url[property]; - }, - enumerable: true, - configurable: true - }); - } - { - tracked[Symbol.for("nodejs.util.inspect.custom")] = (depth, opts, inspect) => { - return inspect(url, opts); - }; - tracked.searchParams[Symbol.for("nodejs.util.inspect.custom")] = (depth, opts, inspect) => { - return inspect(url.searchParams, opts); - }; - } - if (!allow_hash) { - disable_hash(tracked); - } - return tracked; -} -function disable_hash(url) { - allow_nodejs_console_log(url); - Object.defineProperty(url, "hash", { - get() { - throw new Error( - "Cannot access event.url.hash. Consider using `page.url.hash` inside a component instead" - ); - } - }); -} -function disable_search(url) { - allow_nodejs_console_log(url); - for (const property of ["search", "searchParams"]) { - Object.defineProperty(url, property, { - get() { - throw new Error(`Cannot access url.${property} on a page with prerendering enabled`); - } - }); - } -} -function allow_nodejs_console_log(url) { - { - url[Symbol.for("nodejs.util.inspect.custom")] = (depth, opts, inspect) => { - return inspect(new URL(url), opts); - }; - } -} -function validator(expected) { - function validate(module, file) { - if (!module) return; - for (const key in module) { - if (key[0] === "_" || expected.has(key)) continue; - const values = [...expected.values()]; - const hint = hint_for_supported_files(key, file?.slice(file.lastIndexOf("."))) ?? `valid exports are ${values.join(", ")}, or anything with a '_' prefix`; - throw new Error(`Invalid export '${key}'${file ? ` in ${file}` : ""} (${hint})`); - } - } - return validate; -} -function hint_for_supported_files(key, ext = ".js") { - const supported_files = []; - if (valid_layout_exports.has(key)) { - supported_files.push(`+layout${ext}`); - } - if (valid_page_exports.has(key)) { - supported_files.push(`+page${ext}`); - } - if (valid_layout_server_exports.has(key)) { - supported_files.push(`+layout.server${ext}`); - } - if (valid_page_server_exports.has(key)) { - supported_files.push(`+page.server${ext}`); - } - if (valid_server_exports.has(key)) { - supported_files.push(`+server${ext}`); - } - if (supported_files.length > 0) { - return `'${key}' is a valid export in ${supported_files.slice(0, -1).join(", ")}${supported_files.length > 1 ? " or " : ""}${supported_files.at(-1)}`; - } -} -const valid_layout_exports = /* @__PURE__ */ new Set([ - "load", - "prerender", - "csr", - "ssr", - "trailingSlash", - "config" -]); -const valid_page_exports = /* @__PURE__ */ new Set([...valid_layout_exports, "entries"]); -const valid_layout_server_exports = /* @__PURE__ */ new Set([...valid_layout_exports]); -const valid_page_server_exports = /* @__PURE__ */ new Set([...valid_layout_server_exports, "actions", "entries"]); -const valid_server_exports = /* @__PURE__ */ new Set([ - "GET", - "POST", - "PATCH", - "PUT", - "DELETE", - "OPTIONS", - "HEAD", - "fallback", - "prerender", - "trailingSlash", - "config", - "entries" -]); -const validate_layout_exports = validator(valid_layout_exports); -const validate_page_exports = validator(valid_page_exports); -const validate_layout_server_exports = validator(valid_layout_server_exports); -const validate_page_server_exports = validator(valid_page_server_exports); -const validate_server_exports = validator(valid_server_exports); -export { - decode_params as a, - validate_layout_exports as b, - validate_page_server_exports as c, - disable_search as d, - validate_page_exports as e, - decode_pathname as f, - validate_server_exports as g, - make_trackable as m, - normalize_path as n, - resolve as r, - validate_layout_server_exports as v -}; diff --git a/testing-app/.svelte-kit/output/server/chunks/index.js b/testing-app/.svelte-kit/output/server/chunks/index.js deleted file mode 100644 index 5bda1186..00000000 --- a/testing-app/.svelte-kit/output/server/chunks/index.js +++ /dev/null @@ -1,52 +0,0 @@ -import { n as noop, f as safe_not_equal } from "./ssr.js"; -const subscriber_queue = []; -function readable(value, start) { - return { - subscribe: writable(value, start).subscribe - }; -} -function writable(value, start = noop) { - let stop; - const subscribers = /* @__PURE__ */ new Set(); - function set(new_value) { - if (safe_not_equal(value, new_value)) { - value = new_value; - if (stop) { - const run_queue = !subscriber_queue.length; - for (const subscriber of subscribers) { - subscriber[1](); - subscriber_queue.push(subscriber, value); - } - if (run_queue) { - for (let i = 0; i < subscriber_queue.length; i += 2) { - subscriber_queue[i][0](subscriber_queue[i + 1]); - } - subscriber_queue.length = 0; - } - } - } - } - function update(fn) { - set(fn(value)); - } - function subscribe(run, invalidate = noop) { - const subscriber = [run, invalidate]; - subscribers.add(subscriber); - if (subscribers.size === 1) { - stop = start(set, update) || noop; - } - run(value); - return () => { - subscribers.delete(subscriber); - if (subscribers.size === 0 && stop) { - stop(); - stop = null; - } - }; - } - return { set, update, subscribe }; -} -export { - readable as r, - writable as w -}; diff --git a/testing-app/.svelte-kit/output/server/chunks/internal.js b/testing-app/.svelte-kit/output/server/chunks/internal.js deleted file mode 100644 index 75be1914..00000000 --- a/testing-app/.svelte-kit/output/server/chunks/internal.js +++ /dev/null @@ -1,230 +0,0 @@ -import { c as create_ssr_component, s as setContext, v as validate_component, m as missing_component } from "./ssr.js"; -import { a as afterUpdate } from "./ssr2.js"; -let base = ""; -let assets = base; -const app_dir = "_app"; -const initial = { base, assets }; -function override(paths) { - base = paths.base; - assets = paths.assets; -} -function reset() { - base = initial.base; - assets = initial.assets; -} -function set_assets(path) { - assets = initial.assets = path; -} -let public_env = {}; -let safe_public_env = {}; -function set_private_env(environment) { -} -function set_public_env(environment) { - public_env = environment; -} -function set_safe_public_env(environment) { - safe_public_env = environment; -} -let read_implementation = null; -function set_read_implementation(fn) { - read_implementation = fn; -} -function set_manifest(_) { -} -let prerendering = false; -function set_building() { -} -function set_prerendering() { - prerendering = true; -} -const Root = create_ssr_component(($$result, $$props, $$bindings, slots) => { - let { stores } = $$props; - let { page } = $$props; - let { constructors } = $$props; - let { components = [] } = $$props; - let { form } = $$props; - let { data_0 = null } = $$props; - let { data_1 = null } = $$props; - { - setContext("__svelte__", stores); - } - afterUpdate(stores.page.notify); - if ($$props.stores === void 0 && $$bindings.stores && stores !== void 0) $$bindings.stores(stores); - if ($$props.page === void 0 && $$bindings.page && page !== void 0) $$bindings.page(page); - if ($$props.constructors === void 0 && $$bindings.constructors && constructors !== void 0) $$bindings.constructors(constructors); - if ($$props.components === void 0 && $$bindings.components && components !== void 0) $$bindings.components(components); - if ($$props.form === void 0 && $$bindings.form && form !== void 0) $$bindings.form(form); - if ($$props.data_0 === void 0 && $$bindings.data_0 && data_0 !== void 0) $$bindings.data_0(data_0); - if ($$props.data_1 === void 0 && $$bindings.data_1 && data_1 !== void 0) $$bindings.data_1(data_1); - let $$settled; - let $$rendered; - let previous_head = $$result.head; - do { - $$settled = true; - $$result.head = previous_head; - { - stores.page.set(page); - } - $$rendered = ` ${constructors[1] ? `${validate_component(constructors[0] || missing_component, "svelte:component").$$render( - $$result, - { data: data_0, this: components[0] }, - { - this: ($$value) => { - components[0] = $$value; - $$settled = false; - } - }, - { - default: () => { - return `${validate_component(constructors[1] || missing_component, "svelte:component").$$render( - $$result, - { data: data_1, form, this: components[1] }, - { - this: ($$value) => { - components[1] = $$value; - $$settled = false; - } - }, - {} - )}`; - } - } - )}` : `${validate_component(constructors[0] || missing_component, "svelte:component").$$render( - $$result, - { data: data_0, form, this: components[0] }, - { - this: ($$value) => { - components[0] = $$value; - $$settled = false; - } - }, - {} - )}`} ${``}`; - } while (!$$settled); - return $$rendered; -}); -const options = { - app_template_contains_nonce: false, - csp: { "mode": "auto", "directives": { "upgrade-insecure-requests": false, "block-all-mixed-content": false }, "reportOnly": { "upgrade-insecure-requests": false, "block-all-mixed-content": false } }, - csrf_check_origin: true, - embedded: false, - env_public_prefix: "PUBLIC_", - env_private_prefix: "", - hash_routing: false, - hooks: null, - // added lazily, via `get_hooks` - preload_strategy: "modulepreload", - root: Root, - service_worker: false, - templates: { - app: ({ head, body, assets: assets2, nonce, env }) => '\n\n \n \n \n \n Drips SDK Testing App\n ' + head + '\n \n \n
' + body + "
\n \n\n", - error: ({ status, message }) => '\n\n \n \n ' + message + ` - - - - -
- ` + status + '\n
\n

' + message + "

\n
\n
\n \n\n" - }, - version_hash: "y1wvqt" -}; -async function get_hooks() { - let handle; - let handleFetch; - let handleError; - let init; - let reroute; - let transport; - return { - handle, - handleFetch, - handleError, - init, - reroute, - transport - }; -} -export { - assets as a, - base as b, - app_dir as c, - read_implementation as d, - options as e, - set_private_env as f, - get_hooks as g, - prerendering as h, - set_public_env as i, - set_safe_public_env as j, - set_read_implementation as k, - set_assets as l, - set_building as m, - set_manifest as n, - override as o, - public_env as p, - set_prerendering as q, - reset as r, - safe_public_env as s -}; diff --git a/testing-app/.svelte-kit/output/server/chunks/ssr.js b/testing-app/.svelte-kit/output/server/chunks/ssr.js deleted file mode 100644 index 7b2f0177..00000000 --- a/testing-app/.svelte-kit/output/server/chunks/ssr.js +++ /dev/null @@ -1,133 +0,0 @@ -function noop() { -} -function run(fn) { - return fn(); -} -function blank_object() { - return /* @__PURE__ */ Object.create(null); -} -function run_all(fns) { - fns.forEach(run); -} -function safe_not_equal(a, b) { - return a != a ? b == b : a !== b || a && typeof a === "object" || typeof a === "function"; -} -function subscribe(store, ...callbacks) { - if (store == null) { - for (const callback of callbacks) { - callback(void 0); - } - return noop; - } - const unsub = store.subscribe(...callbacks); - return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; -} -let current_component; -function set_current_component(component) { - current_component = component; -} -function get_current_component() { - if (!current_component) throw new Error("Function called outside component initialization"); - return current_component; -} -function setContext(key, context) { - get_current_component().$$.context.set(key, context); - return context; -} -function getContext(key) { - return get_current_component().$$.context.get(key); -} -function ensure_array_like(array_like_or_iterator) { - return array_like_or_iterator?.length !== void 0 ? array_like_or_iterator : Array.from(array_like_or_iterator); -} -const ATTR_REGEX = /[&"<]/g; -const CONTENT_REGEX = /[&<]/g; -function escape(value, is_attr = false) { - const str = String(value); - const pattern = is_attr ? ATTR_REGEX : CONTENT_REGEX; - pattern.lastIndex = 0; - let escaped = ""; - let last = 0; - while (pattern.test(str)) { - const i = pattern.lastIndex - 1; - const ch = str[i]; - escaped += str.substring(last, i) + (ch === "&" ? "&" : ch === '"' ? """ : "<"); - last = i + 1; - } - return escaped + str.substring(last); -} -function each(items, fn) { - items = ensure_array_like(items); - let str = ""; - for (let i = 0; i < items.length; i += 1) { - str += fn(items[i], i); - } - return str; -} -const missing_component = { - $$render: () => "" -}; -function validate_component(component, name) { - if (!component || !component.$$render) { - if (name === "svelte:component") name += " this={...}"; - throw new Error( - `<${name}> is not a valid SSR component. You may need to review your build config to ensure that dependencies are compiled, rather than imported as pre-compiled modules. Otherwise you may need to fix a <${name}>.` - ); - } - return component; -} -let on_destroy; -function create_ssr_component(fn) { - function $$render(result, props, bindings, slots, context) { - const parent_component = current_component; - const $$ = { - on_destroy, - context: new Map(context || (parent_component ? parent_component.$$.context : [])), - // these will be immediately discarded - on_mount: [], - before_update: [], - after_update: [], - callbacks: blank_object() - }; - set_current_component({ $$ }); - const html = fn(result, props, bindings, slots); - set_current_component(parent_component); - return html; - } - return { - render: (props = {}, { $$slots = {}, context = /* @__PURE__ */ new Map() } = {}) => { - on_destroy = []; - const result = { title: "", head: "", css: /* @__PURE__ */ new Set() }; - const html = $$render(result, props, {}, $$slots, context); - run_all(on_destroy); - return { - html, - css: { - code: Array.from(result.css).map((css) => css.code).join("\n"), - map: null - // TODO - }, - head: result.title + result.head - }; - }, - $$render - }; -} -function add_attribute(name, value, boolean) { - if (value == null || boolean) return ""; - const assignment = `="${escape(value, true)}"`; - return ` ${name}${assignment}`; -} -export { - subscribe as a, - each as b, - create_ssr_component as c, - add_attribute as d, - escape as e, - safe_not_equal as f, - getContext as g, - missing_component as m, - noop as n, - setContext as s, - validate_component as v -}; diff --git a/testing-app/.svelte-kit/output/server/chunks/ssr2.js b/testing-app/.svelte-kit/output/server/chunks/ssr2.js deleted file mode 100644 index 83594d62..00000000 --- a/testing-app/.svelte-kit/output/server/chunks/ssr2.js +++ /dev/null @@ -1,8 +0,0 @@ -function onMount() { -} -function afterUpdate() { -} -export { - afterUpdate as a, - onMount as o -}; diff --git a/testing-app/.svelte-kit/output/server/chunks/stores.js b/testing-app/.svelte-kit/output/server/chunks/stores.js deleted file mode 100644 index 817a69a0..00000000 --- a/testing-app/.svelte-kit/output/server/chunks/stores.js +++ /dev/null @@ -1,50 +0,0 @@ -import { g as getContext } from "./ssr.js"; -import "./exports.js"; -import { o as onMount } from "./ssr2.js"; -function get(key, parse = JSON.parse) { - try { - return parse(sessionStorage[key]); - } catch { - } -} -const SNAPSHOT_KEY = "sveltekit:snapshot"; -const SCROLL_KEY = "sveltekit:scroll"; -const is_legacy = onMount.toString().includes("$$") || /function \w+\(\) \{\}/.test(onMount.toString()); -if (is_legacy) { - ({ - data: {}, - form: null, - error: null, - params: {}, - route: { id: null }, - state: {}, - status: -1, - url: new URL("https://example.com") - }); -} -get(SCROLL_KEY) ?? {}; -get(SNAPSHOT_KEY) ?? {}; -const getStores = () => { - const stores = getContext("__svelte__"); - return { - /** @type {typeof page} */ - page: { - subscribe: stores.page.subscribe - }, - /** @type {typeof navigating} */ - navigating: { - subscribe: stores.navigating.subscribe - }, - /** @type {typeof updated} */ - updated: stores.updated - }; -}; -const page = { - subscribe(fn) { - const store = getStores().page; - return store.subscribe(fn); - } -}; -export { - page as p -}; diff --git a/testing-app/.svelte-kit/output/server/chunks/wallet.js b/testing-app/.svelte-kit/output/server/chunks/wallet.js deleted file mode 100644 index f691fd3e..00000000 --- a/testing-app/.svelte-kit/output/server/chunks/wallet.js +++ /dev/null @@ -1,12 +0,0 @@ -import { w as writable } from "./index.js"; -const walletStore = writable({ - isConnected: false, - address: null, - provider: null, - signer: null, - isConnecting: false, - error: null -}); -export { - walletStore as w -}; diff --git a/testing-app/.svelte-kit/output/server/entries/fallbacks/error.svelte.js b/testing-app/.svelte-kit/output/server/entries/fallbacks/error.svelte.js deleted file mode 100644 index 65281b89..00000000 --- a/testing-app/.svelte-kit/output/server/entries/fallbacks/error.svelte.js +++ /dev/null @@ -1,11 +0,0 @@ -import { c as create_ssr_component, a as subscribe, e as escape } from "../../chunks/ssr.js"; -import { p as page } from "../../chunks/stores.js"; -const Error = create_ssr_component(($$result, $$props, $$bindings, slots) => { - let $page, $$unsubscribe_page; - $$unsubscribe_page = subscribe(page, (value) => $page = value); - $$unsubscribe_page(); - return `

${escape($page.status)}

${escape($page.error?.message)}

`; -}); -export { - Error as default -}; diff --git a/testing-app/.svelte-kit/output/server/entries/pages/_layout.svelte.js b/testing-app/.svelte-kit/output/server/entries/pages/_layout.svelte.js deleted file mode 100644 index 3ec3253a..00000000 --- a/testing-app/.svelte-kit/output/server/entries/pages/_layout.svelte.js +++ /dev/null @@ -1,35 +0,0 @@ -import { c as create_ssr_component, a as subscribe, e as escape, v as validate_component, b as each, d as add_attribute } from "../../chunks/ssr.js"; -import { p as page } from "../../chunks/stores.js"; -import { w as walletStore } from "../../chunks/wallet.js"; -const css$1 = { - code: ".wallet-container.svelte-1pdwhqy{display:flex;align-items:center;gap:10px}.wallet-button.svelte-1pdwhqy{background-color:#008080;color:white;border:2px outset #008080;padding:8px 16px;font-family:'Courier New', monospace;font-weight:bold;cursor:pointer;font-size:12px}.wallet-button.svelte-1pdwhqy:hover{background-color:#006666}.wallet-button.svelte-1pdwhqy:active{border:2px inset #008080}.wallet-button.svelte-1pdwhqy:disabled{background-color:#808080;cursor:not-allowed;opacity:0.6}.wallet-button.disconnect.svelte-1pdwhqy{background-color:#800000;border-color:#800000}.wallet-button.disconnect.svelte-1pdwhqy:hover{background-color:#600000}.wallet-status.svelte-1pdwhqy{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:bold}.status-indicator.svelte-1pdwhqy{width:8px;height:8px;border-radius:50%;background-color:#00ff00;animation:svelte-1pdwhqy-pulse 2s infinite}.status-indicator.disconnected.svelte-1pdwhqy{background-color:#ff0000;animation:none}.address.svelte-1pdwhqy{background-color:#f0f0f0;border:1px inset #c0c0c0;padding:4px 8px;font-family:'Courier New', monospace;font-size:11px;color:#000080}.error.svelte-1pdwhqy{color:#ff0000;font-size:11px;max-width:200px;word-wrap:break-word}.connecting.svelte-1pdwhqy{color:#ff8800;font-size:11px}@keyframes svelte-1pdwhqy-pulse{0%{opacity:1}50%{opacity:0.5}100%{opacity:1}}.metamask-warning.svelte-1pdwhqy{background-color:#fff3cd;border:2px solid #ffeaa7;padding:8px;font-size:11px;color:#856404;margin-top:5px}", - map: `{"version":3,"file":"WalletConnect.svelte","sources":["WalletConnect.svelte"],"sourcesContent":[" - - - -
- {#if !metaMaskAvailable} -
- ⚠️ MetaMask not detected. You can still perform write operations by manually entering a private key on operation pages. -
- {:else if $walletStore.isConnecting} -
🔄 Connecting...
- {:else if $walletStore.isConnected} -
-
- Connected: -
{formatAddress($walletStore.address)}
-
- - {:else} -
-
- Not Connected -
- - {/if} - - {#if $walletStore.error} -
- ❌ {$walletStore.error} -
- {/if} -
diff --git a/testing-app/src/lib/stores/sdk.ts b/testing-app/src/lib/stores/sdk.ts deleted file mode 100644 index 97dd96da..00000000 --- a/testing-app/src/lib/stores/sdk.ts +++ /dev/null @@ -1,40 +0,0 @@ -import {writable} from 'svelte/store'; - -export interface OperationStatus { - isRunning: boolean; - currentStep: string; - progress: number; - logs: string[]; - error?: string; - result?: any; -} - -export const operationStatus = writable({ - isRunning: false, - currentStep: '', - progress: 0, - logs: [], -}); - -export function updateOperationStatus(update: Partial) { - operationStatus.update(current => ({ - ...current, - ...update, - })); -} - -export function addLog(message: string) { - operationStatus.update(current => ({ - ...current, - logs: [...current.logs, message], - })); -} - -export function resetOperation() { - operationStatus.set({ - isRunning: false, - currentStep: '', - progress: 0, - logs: [], - }); -} diff --git a/testing-app/src/lib/stores/wallet.ts b/testing-app/src/lib/stores/wallet.ts deleted file mode 100644 index c639c08a..00000000 --- a/testing-app/src/lib/stores/wallet.ts +++ /dev/null @@ -1,146 +0,0 @@ -import {writable} from 'svelte/store'; -import {browser} from '$app/environment'; -import {ethers} from 'ethers'; - -// Type definitions -interface WalletState { - isConnected: boolean; - address: string | null; - provider: ethers.BrowserProvider | null; - signer: ethers.JsonRpcSigner | null; - isConnecting: boolean; - error: string | null; -} - -// Wallet connection state -export const walletStore = writable({ - isConnected: false, - address: null, - provider: null, - signer: null, - isConnecting: false, - error: null, -}); - -// Check if MetaMask is available -export function isMetaMaskAvailable(): boolean { - return browser && typeof window.ethereum !== 'undefined'; -} - -// Connect to MetaMask -export async function connectWallet(): Promise { - if (!browser) return; - - walletStore.update(state => ({...state, isConnecting: true, error: null})); - - try { - if (!isMetaMaskAvailable()) { - throw new Error( - 'MetaMask is not installed. Please install MetaMask to continue.', - ); - } - - // Request account access - const accounts: string[] = await window.ethereum!.request({ - method: 'eth_requestAccounts', - }); - - if (accounts.length === 0) { - throw new Error( - 'No accounts found. Please make sure MetaMask is unlocked.', - ); - } - - // Create provider and signer using ethers - const provider = new ethers.BrowserProvider(window.ethereum!); - const signer = await provider.getSigner(); - const address = await signer.getAddress(); - - walletStore.set({ - isConnected: true, - address, - provider, - signer, - isConnecting: false, - error: null, - }); - - // Listen for account changes - window.ethereum!.on('accountsChanged', handleAccountsChanged); - window.ethereum!.on('chainChanged', handleChainChanged); - } catch (error) { - console.error('Failed to connect wallet:', error); - const errorMessage = - error instanceof Error ? error.message : 'Unknown error occurred'; - walletStore.update(state => ({ - ...state, - isConnecting: false, - error: errorMessage, - })); - } -} - -// Disconnect wallet -export function disconnectWallet(): void { - if (browser && window.ethereum) { - window.ethereum.removeListener('accountsChanged', handleAccountsChanged); - window.ethereum.removeListener('chainChanged', handleChainChanged); - } - - walletStore.set({ - isConnected: false, - address: null, - provider: null, - signer: null, - isConnecting: false, - error: null, - }); -} - -// Handle account changes -async function handleAccountsChanged(accounts: string[]): Promise { - if (accounts.length === 0) { - disconnectWallet(); - } else { - // Reconnect with new account - await connectWallet(); - } -} - -// Handle chain changes -function handleChainChanged(): void { - // Reload the page when chain changes to avoid stale state - if (browser) { - window.location.reload(); - } -} - -// Check if already connected on page load -export async function checkConnection(): Promise { - if (!browser || !isMetaMaskAvailable()) return; - - try { - const accounts: string[] = await window.ethereum!.request({ - method: 'eth_accounts', - }); - - if (accounts.length > 0) { - await connectWallet(); - } - } catch (error) { - console.error('Failed to check connection:', error); - } -} - -// Format address for display (show first 6 and last 4 characters) -export function formatAddress(address: string | null): string { - if (!address) return ''; - return `${address.slice(0, 6)}...${address.slice(-4)}`; -} - -// Check if write operations are available (either MetaMask connected OR private key can be manually entered) -export function canPerformWriteOperations(): boolean { - // Write operations are always available because users can manually enter private keys - // even when MetaMask is not connected - return true; -} diff --git a/testing-app/src/lib/utils/expect.ts b/testing-app/src/lib/utils/expect.ts deleted file mode 100644 index f7c31665..00000000 --- a/testing-app/src/lib/utils/expect.ts +++ /dev/null @@ -1,41 +0,0 @@ -interface FailedExpectation { - failed: true; -} - -interface MetExpectation { - failed: false; - result: T; -} - -export async function expect any) | (() => Promise)>( - func: T, - toMatchCondition: (result: Awaited>) => boolean, - within = 300000, - checkingEvery = 1000, - debug = false, -): Promise>> | FailedExpectation> { - const numberOfChecks = Math.floor(within / checkingEvery); - - const checks = Array.from(Array(numberOfChecks).keys()).map(() => func); - - for (const check of checks) { - const result = await check(); - - const conditionMatches = toMatchCondition(result); - - if (debug) console.log({result, conditionMatches}); - - if (conditionMatches) { - return { - failed: false, - result, - }; - } - - await new Promise(r => setTimeout(r, checkingEvery)); - } - - return { - failed: true, - }; -} diff --git a/testing-app/src/lib/utils/sdkFactory.ts b/testing-app/src/lib/utils/sdkFactory.ts deleted file mode 100644 index 99fa3597..00000000 --- a/testing-app/src/lib/utils/sdkFactory.ts +++ /dev/null @@ -1,382 +0,0 @@ -import { - createDripsSdk, - createPinataIpfsMetadataUploader, - contractsRegistry, - type SdkSplitsReceiver, -} from '@drips-network/sdk'; -import {createWalletClient, http, createPublicClient} from 'viem'; -import {privateKeyToAccount} from 'viem/accounts'; -import {JsonRpcProvider, Wallet} from 'ethers'; - -// Local testnet configuration -export const localtestnet = { - name: 'Local Testnet', - id: 31337, - rpcUrls: { - default: {http: ['http://localhost:8545']}, - }, - nativeCurrency: { - name: 'Ether', - symbol: 'ETH', - decimals: 18, - }, -}; - -export interface SdkConfig { - rpcUrl?: string; - graphqlUrl?: string; - pinataJwt: string; - pinataGateway: string; -} - -export interface CreateViemSdkParams extends SdkConfig { - privateKey?: string; - useConnectedWallet?: boolean; -} - -export interface CreateEthersSdkParams extends SdkConfig { - privateKey?: string; - useConnectedWallet?: boolean; -} - -export interface CreateReadonlySdkParams { - rpcUrl?: string; - graphqlUrl?: string; - adapter: 'viem' | 'ethers'; -} - -// Re-export the SDK type and contractsRegistry for convenience -export {type SdkSplitsReceiver, contractsRegistry}; - -/** - * Create a Drips SDK instance using Viem adapter - */ -export async function createViemSdk(params: CreateViemSdkParams) { - const { - privateKey, - useConnectedWallet = false, - rpcUrl = 'http://localhost:8545', - graphqlUrl, - pinataJwt, - pinataGateway, - } = params; - - let walletClient: any; - let account: any; - - if (useConnectedWallet) { - // Use the connected wallet from window.ethereum - if (typeof window !== 'undefined' && window.ethereum) { - const {createWalletClient, custom} = await import('viem'); - - // Get the connected accounts first - const accounts = await window.ethereum.request({method: 'eth_accounts'}); - if (accounts.length === 0) { - throw new Error('No connected accounts found'); - } - - // Create account object with the connected address - account = {address: accounts[0]}; - - // Create wallet client with the account properly set - walletClient = createWalletClient({ - account: accounts[0], // Set the account in the wallet client - chain: localtestnet, - transport: custom(window.ethereum), - }); - } else { - throw new Error('No wallet connection found'); - } - } else { - if (!privateKey) { - throw new Error( - 'Private key is required when not using connected wallet', - ); - } - - // Step 1: Set up wallet account with private key - account = privateKeyToAccount(`0x${privateKey.replace('0x', '')}`); - - // Step 2: Create Viem wallet client - walletClient = createWalletClient({ - chain: localtestnet, - transport: http(rpcUrl), - account, - }); - } - - // Step 3: Set up IPFS uploader - const ipfsMetadataUploader = createPinataIpfsMetadataUploader({ - pinataJwt, - pinataGateway, - }); - - // Step 4: Create SDK instance - const sdkConfig: any = {}; - if (graphqlUrl) { - sdkConfig.graphql = {url: graphqlUrl}; - } - - const sdk = createDripsSdk(walletClient, ipfsMetadataUploader, sdkConfig); - - return { - sdk, - walletClient, - account, - ipfsMetadataUploader, - }; -} - -/** - * Create a Drips SDK instance using Ethers adapter - */ -export async function createEthersSdk(params: CreateEthersSdkParams) { - const { - privateKey, - useConnectedWallet = false, - rpcUrl = 'http://localhost:8545', - graphqlUrl, - pinataJwt, - pinataGateway, - } = params; - - let wallet: any; - let provider: any; - let account: any; - - if (useConnectedWallet) { - // Use the connected wallet from window.ethereum - if (typeof window !== 'undefined' && window.ethereum) { - const {BrowserProvider} = await import('ethers'); - - // Get the connected accounts first - const accounts = await window.ethereum.request({method: 'eth_accounts'}); - if (accounts.length === 0) { - throw new Error('No connected accounts found'); - } - - // Create account object with the connected address - account = {address: accounts[0]}; - - // Create Ethers provider from window.ethereum - provider = new BrowserProvider(window.ethereum); - - // Get the signer (wallet) from the provider - wallet = await provider.getSigner(); - } else { - throw new Error('No wallet connection found'); - } - } else { - if (!privateKey) { - throw new Error( - 'Private key is required when not using connected wallet', - ); - } - - // Step 1: Set up JSON RPC provider - provider = new JsonRpcProvider(rpcUrl); - - // Step 2: Create Ethers wallet - wallet = new Wallet(privateKey.replace('0x', ''), provider); - - // Create account object - account = {address: wallet.address}; - } - - // Step 3: Set up IPFS uploader - const ipfsMetadataUploader = createPinataIpfsMetadataUploader({ - pinataJwt, - pinataGateway, - }); - - // Step 4: Create SDK instance - const sdkConfig: any = {}; - if (graphqlUrl) { - sdkConfig.graphql = {url: graphqlUrl}; - } - - const sdk = createDripsSdk(wallet, ipfsMetadataUploader, sdkConfig); - - return { - sdk, - wallet, - provider, - account, - ipfsMetadataUploader, - }; -} - -/** - * Validate form receivers before conversion - */ -export function validateFormReceivers(receivers: any[]): { - isValid: boolean; - error?: string; -} { - if (receivers.length === 0) { - return {isValid: false, error: 'At least one receiver is required'}; - } - - const totalWeight = receivers.reduce( - (sum, receiver) => sum + receiver.weight, - 0, - ); - - if (totalWeight !== 1_000_000) { - return { - isValid: false, - error: `Total weight must equal 1,000,000. Current total: ${totalWeight}`, - }; - } - - // Validate individual receivers - for (const receiver of receivers) { - if (receiver.weight <= 0) { - return { - isValid: false, - error: 'All receiver weights must be greater than 0', - }; - } - - if (receiver.type === 'address' && !receiver.address) { - return { - isValid: false, - error: 'Address receivers must have a valid address', - }; - } - - if (receiver.type === 'project' && !receiver.projectUrl) { - return {isValid: false, error: 'Project receivers must have a valid URL'}; - } - - if (receiver.type === 'drip-list' && !receiver.dripListId) { - return { - isValid: false, - error: 'Drip list receivers must have a valid drip list ID', - }; - } - } - - return {isValid: true}; -} - -/** - * Generate a random UUID for drip list names - */ -export function generateRandomId(): string { - return ( - Math.random().toString(36).substring(2, 15) + - Math.random().toString(36).substring(2, 15) - ); -} - -/** - * Convert form receivers to SDK format - */ -export function convertReceiversToSdkFormat( - formReceivers: any[], -): SdkSplitsReceiver[] { - return formReceivers.map(receiver => { - if (receiver.type === 'address') { - return { - type: 'address' as const, - address: receiver.address, - weight: receiver.weight, - }; - } else if (receiver.type === 'project') { - return { - type: 'project' as const, - url: receiver.projectUrl, - weight: receiver.weight, - }; - } else { - throw new Error(`Unsupported receiver type: ${receiver.type}`); - } - }); -} - -/** - * Create a readonly Drips SDK instance using Viem adapter - */ -export async function createViemReadonlySdk(params: CreateReadonlySdkParams) { - const {rpcUrl = 'http://localhost:8545', graphqlUrl} = params; - - // Create Viem public client (readonly) - const publicClient = createPublicClient({ - chain: localtestnet, - transport: http(rpcUrl), - }); - - // Create a dummy IPFS uploader (not needed for readonly operations) - const dummyIpfsUploader = async () => { - throw new Error('IPFS operations not supported in readonly mode'); - }; - - // Create SDK instance - const sdkConfig: any = {}; - if (graphqlUrl) { - sdkConfig.graphql = {url: graphqlUrl}; - } - - const sdk = createDripsSdk(publicClient, dummyIpfsUploader, sdkConfig); - - return { - sdk, - publicClient, - }; -} - -/** - * Create a readonly Drips SDK instance using Ethers adapter - */ -export async function createEthersReadonlySdk(params: CreateReadonlySdkParams) { - const {rpcUrl = 'http://localhost:8545', graphqlUrl} = params; - - // Create Ethers provider (readonly) - const provider = new JsonRpcProvider(rpcUrl); - - // Create a dummy IPFS uploader (not needed for readonly operations) - const dummyIpfsUploader = async () => { - throw new Error('IPFS operations not supported in readonly mode'); - }; - - // Create SDK instance - const sdkConfig: any = {}; - if (graphqlUrl) { - sdkConfig.graphql = {url: graphqlUrl}; - } - - const sdk = createDripsSdk(provider, dummyIpfsUploader, sdkConfig); - - return { - sdk, - provider, - }; -} - -/** - * Create a readonly SDK instance with random adapter selection - */ -export async function createRandomReadonlySdk(params: CreateReadonlySdkParams) { - const adapters = ['viem', 'ethers'] as const; - const randomAdapter = adapters[Math.floor(Math.random() * adapters.length)]; - - const paramsWithAdapter = { - ...params, - adapter: randomAdapter, - }; - - if (randomAdapter === 'viem') { - const result = await createViemReadonlySdk(paramsWithAdapter); - return { - ...result, - adapterUsed: 'viem' as const, - }; - } else { - const result = await createEthersReadonlySdk(paramsWithAdapter); - return { - ...result, - adapterUsed: 'ethers' as const, - }; - } -} diff --git a/testing-app/src/routes/+layout.svelte b/testing-app/src/routes/+layout.svelte deleted file mode 100644 index cf4a5e15..00000000 --- a/testing-app/src/routes/+layout.svelte +++ /dev/null @@ -1,185 +0,0 @@ - - -
-
-
-

🚰 DRIPS SDK TESTING APP 🚰

-

Explore the Drips SDK through a simple web interface

-
-
- -
-
- - - -
-
⚠️ WARNING: TESTING APP ONLY ⚠️
-
- DO NOT USE WITH REAL FUNDS! This is an exploration and testing application - only.
- Use with caution and only connect wallets with test funds. This app is NOT - safe for production use. -
-
- -
- -
-
- - diff --git a/testing-app/src/routes/+page.svelte b/testing-app/src/routes/+page.svelte deleted file mode 100644 index 7096187e..00000000 --- a/testing-app/src/routes/+page.svelte +++ /dev/null @@ -1,182 +0,0 @@ - - -
-

Welcome to the Drips SDK Testing App

-

- This simple interface allows you to test and explore the Drips SDK - functionality -

-
- -
-

🔗 Wallet Connection

- {#if $walletStore.isConnected} -

✅ Wallet Connected!

-

Your wallet is connected and ready to interact with the Drips SDK.

-
- Connected Address:
- {$walletStore.address} -
-

- You can now use all the SDK features that require wallet interaction. -

- {:else} -

❌ Wallet Not Connected

-

- Connect your MetaMask wallet using the button in the header to interact - with blockchain features. -

-

- Some features may require a connected wallet to function properly. -

- {/if} -
- -
-

About This App

-

- This testing application provides a user interface to replicate the - integration tests found in the Drips SDK. Each module corresponds to - different SDK functionality, allowing you to interact with the blockchain - through a simple web interface. -

-

- Note: This is a testing interface designed for development and - exploration purposes. All operations will interact with the configured blockchain - network. -

-
- -
-
-

🗂️ Drip Lists

-

- Create and manage drip lists - collections of receivers that split - incoming funds. -

- -
- -
-

💰 Donations

-

- Send one-time and continuous donations to drip lists and other receivers. -

- -
- -
-

💰 Collect

-

Check and collect withdrawable funds from the Drips network.

- -
- -
-

🔧 Utils

-

Utility functions and helper tools for working with the Drips SDK.

- -
-
- - diff --git a/testing-app/src/routes/collect/+page.svelte b/testing-app/src/routes/collect/+page.svelte deleted file mode 100644 index 3eb5178b..00000000 --- a/testing-app/src/routes/collect/+page.svelte +++ /dev/null @@ -1,930 +0,0 @@ - - - - -

Collect Funds

- -
- 💰 About this operation:
- This operation allows you to check, split, and collect withdrawable funds for a - specific account. It will query the Drips network to find any splittable and collectable - amounts. -

- Split: Makes received funds available for collection by - processing them through the splits system. -
- Collect: Transfers the collectable funds to your wallet. -
- -
Step 1: Configure Network Settings
- -{#if $walletStore.isConnected} -
- ✅ Wallet Connected: {$walletStore.address?.slice( - 0, - 6, - )}...{$walletStore.address?.slice(-4)} -
Using connected wallet for queries and transactions -
-{:else} -
- ❌ No Wallet Connected - Using Random Readonly Adapter for queries only -
Connect wallet to enable fund collection -
-{/if} - -
-
- - -
-
- -
- Step 2: Check Account, Split, and Collect Funds -
- -
-
- - - Enter the address to check for withdrawable funds -
- -
- - - Enter the ERC20 token address for split/collect operations -
- -
- - - - - -
- - {#if withdrawableBalances} -
- {#if hasSplittableAmount} -
- 🔄 Splittable funds available! -
This account has funds that can be split to make them - collectable. -
- {:else} -
- ❌ No splittable funds available -
This account does not have any funds ready for splitting. -
- {/if} - - {#if hasCollectableAmount} -
- ✅ Collectable funds available! -
This account has funds that can be collected. -
- {:else} -
- ❌ No collectable funds available -
This account does not have any funds ready for collection. -
- {/if} -
- {/if} -
- -
Results
- -
- {#if $operationStatus.isRunning} -
-
-
-
-
{$operationStatus.progress}% Complete
-
- Current Step: - {$operationStatus.currentStep} -
-
- {:else if $operationStatus.error} -
- ❌ Error: - {$operationStatus.error} -
- {:else if withdrawableBalances} -
- ✅ Withdrawable Balances Retrieved Successfully! -
Adapter Used: - {withdrawableBalances.adapterUsed} -
Has Splittable Amount: - {withdrawableBalances.hasSplittableAmount ? 'Yes' : 'No'} -
Has Collectable Amount: - {withdrawableBalances.hasCollectableAmount ? 'Yes' : 'No'} -
- -
-

📋 Withdrawable Balances JSON

-
{JSON.stringify(
-          withdrawableBalances.balances,
-          null,
-          2,
-        )}
-
- {:else} - Query results will appear here... -

- Enter an account ID and click "Check Withdrawable Balances" to see what - funds are available for collection. - {/if} - - {#if $operationStatus.logs.length > 0} -
-

📝 Operation Logs:

-
- {#each $operationStatus.logs as log} -
{log}
- {/each} -
-
- {/if} -
- -
- ℹ️ Note: Checking withdrawable balances is a read-only - operation that doesn't require wallet connection or gas fees. However, - splitting and collecting funds require a connected wallet and will involve - blockchain transactions with gas fees. -

- Typical Flow: - 1. Check balances to see available amounts 2. Split funds to make them collectable - (if splittable amount > 0) 3. Collect funds to transfer them to your wallet (if - collectable amount > 0) -
- - diff --git a/testing-app/src/routes/donations/+page.svelte b/testing-app/src/routes/donations/+page.svelte deleted file mode 100644 index 88661af1..00000000 --- a/testing-app/src/routes/donations/+page.svelte +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -

💰 Donations Module

- -

- The donations module allows you to send funds to drip lists and other receivers. - You can send one-time donations (immediate transfers) or continuous donations (streams over time). -

- -
-

Donation Types:

-
    -
  • One-Time Donations: Send a fixed amount immediately to a receiver
  • -
  • Continuous Donations: Set up a stream that sends tokens over time at a specified rate
  • -
-
- -
-
-

One-Time Donation (Viem) 🔒 WRITE

-

- Send a one-time donation using the Viem blockchain adapter. This operation will: -

-
    -
  • Create a drip list to receive the donation
  • -
  • Set up a Viem wallet client
  • -
  • Approve ERC20 token spending
  • -
  • Send the one-time donation
  • -
  • Verify the donation was received
  • -
- Send One-Time (Viem) → -
- -
-

One-Time Donation (Ethers) 🔒 WRITE

-

- Send a one-time donation using the Ethers blockchain adapter. This operation will: -

-
    -
  • Create a drip list to receive the donation
  • -
  • Set up an Ethers wallet/signer
  • -
  • Approve ERC20 token spending
  • -
  • Send the one-time donation
  • -
  • Verify the donation was received
  • -
- Send One-Time (Ethers) → -
- -
-

Continuous Donation (Viem) 🔒 WRITE

-

- Set up a continuous donation stream using the Viem blockchain adapter. This operation will: -

-
    -
  • Create a drip list to receive the stream
  • -
  • Set up a Viem wallet client
  • -
  • Configure stream parameters (rate, duration)
  • -
  • Approve and top-up the stream
  • -
  • Verify the stream was created
  • -
- Send Continuous (Viem) → -
- -
-

Continuous Donation (Ethers) 🔒 WRITE

-

- Set up a continuous donation stream using the Ethers blockchain adapter. This operation will: -

-
    -
  • Create a drip list to receive the stream
  • -
  • Set up an Ethers wallet/signer
  • -
  • Configure stream parameters (rate, duration)
  • -
  • Approve and top-up the stream
  • -
  • Verify the stream was created
  • -
- Send Continuous (Ethers) → -
-
diff --git a/testing-app/src/routes/donations/continuous-ethers/+page.svelte b/testing-app/src/routes/donations/continuous-ethers/+page.svelte deleted file mode 100644 index fa6ab105..00000000 --- a/testing-app/src/routes/donations/continuous-ethers/+page.svelte +++ /dev/null @@ -1,1059 +0,0 @@ - - - - -

Continuous Donation (Ethers)

- -
- 📝 About this operation:
- This page replicates the "Continuous Donation using Ethers" integration test. It - will fetch an existing drip list, set up an Ethers wallet, send the continuous - donation, and verify it was received as a stream. -
- -
Step 1: Configure Wallet and Network Settings
- -
- {#if $walletStore.isConnected} -
- ✅ Wallet Connected: {$walletStore.address?.slice( - 0, - 6, - )}...{$walletStore.address?.slice(-4)} -
Using connected wallet for transactions -
- {:else} -
- ❌ No Wallet Connected - Using Private Key Input -
-
- - -
- {/if} - -
- - -
- -
- - -
-
- -
Step 2: Configure IPFS Settings
- -
-
- - -
- -
- - -
-
- -
Step 3: Fetch Existing Drip List
- -
-
- - -
- - - - {#if fetchError} -
- ❌ Error: - {fetchError} -
- {/if} - - {#if fetchedDripList} -
- ✅ Drip List Fetched Successfully! -
Name: {fetchedDripList.name || 'Unnamed'} -
Description: {fetchedDripList.description || 'No description'} -
Visible: {fetchedDripList.isVisible ? 'Yes' : 'No'} -
Splits Receivers: {fetchedDripList.receivers?.length || 0} -
- {/if} -
- -
- Step 4: Configure Continuous Donation Parameters -
- -
-
- - - Unique identifier for this continuous donation stream - -
- -
- - - Amount of tokens to stream per time unit -
- -
- - - How often the amount should be streamed -
- -
- - - Number of decimal places for the token (18 for ETH, 6 for USDC) -
- -
- - - How long the stream should last (86400 = 1 day) -
- -
- - - Initial amount to fund the stream -
- -
- - - Address of the ERC20 token to stream -
- -
- - -
- - {#if receiverType === 'address'} -
- - - Ethereum address to receive the continuous donation -
- {:else if receiverType === 'project'} -
- - - GitHub project URL to receive the continuous donation -
- {:else if receiverType === 'drip-list' && receiverDripListId} -
- - - Leave empty to use the fetched drip list above -
- {/if} -
- -
Step 5: Execute Operation
- -
- -
- -
- ⚠️ Note: This operation will start a continuous donation stream - to the specified receiver. Make sure you have sufficient funds for gas fees and - the top-up amount. The stream will continue for the specified duration. -
- -
- 🔍 Verification: After sending the continuous donation, the system - will wait for indexing and verify that the stream appears in the receiver's support - data with the correct parameters. -
- - -{#if showStatusPopup} - -{/if} - - diff --git a/testing-app/src/routes/donations/continuous-viem/+page.svelte b/testing-app/src/routes/donations/continuous-viem/+page.svelte deleted file mode 100644 index 96dfd0cc..00000000 --- a/testing-app/src/routes/donations/continuous-viem/+page.svelte +++ /dev/null @@ -1,1061 +0,0 @@ - - - - -

Continuous Donation (Viem)

- -
- 📝 About this operation:
- This page replicates the "Continuous Donation using Viem" integration test. It - will fetch an existing drip list, set up a Viem wallet client, send the continuous - donation, and verify it was received as a stream. -
- -
Step 1: Configure Wallet and Network Settings
- -
- {#if $walletStore.isConnected} -
- ✅ Wallet Connected: {$walletStore.address?.slice( - 0, - 6, - )}...{$walletStore.address?.slice(-4)} -
Using connected wallet for transactions -
- {:else} -
- ❌ No Wallet Connected - Using Private Key Input -
-
- - -
- {/if} - -
- - -
- -
- - -
-
- -
Step 2: Configure IPFS Settings
- -
-
- - -
- -
- - -
-
- -
Step 3: Fetch Existing Drip List
- -
-
- - -
- - - - {#if fetchError} -
- ❌ Error: - {fetchError} -
- {/if} - - {#if fetchedDripList} -
- ✅ Drip List Fetched Successfully! -
Name: {fetchedDripList.name || 'Unnamed'} -
Description: {fetchedDripList.description || 'No description'} -
Visible: {fetchedDripList.isVisible ? 'Yes' : 'No'} -
Splits Receivers: {fetchedDripList.receivers?.length || 0} -
- {/if} -
- -
- Step 4: Configure Continuous Donation Parameters -
- -
-
- - - Unique identifier for this continuous donation stream - -
- -
- - - Amount of tokens to stream per time unit -
- -
- - - How often the amount should be streamed -
- -
- - - Number of decimal places for the token (18 for ETH, 6 for USDC) -
- -
- - - How long the stream should last (86400 = 1 day) -
- -
- - - Initial amount to fund the stream -
- -
- - - Address of the ERC20 token to stream -
- -
- - -
- - {#if receiverType === 'address'} -
- - - Ethereum address to receive the continuous donation -
- {:else if receiverType === 'project'} -
- - - GitHub project URL to receive the continuous donation -
- {:else if receiverType === 'drip-list' && receiverDripListId} -
- - - Leave empty to use the fetched drip list above -
- {/if} -
- -
Step 5: Execute Operation
- -
- -
- -
- ⚠️ Note: This operation will start a continuous donation stream - to the specified receiver. Make sure you have sufficient funds for gas fees and - the top-up amount. The stream will continue for the specified duration. -
- -
- 🔍 Verification: After sending the continuous donation, the system - will wait for indexing and verify that the stream appears in the receiver's support - data with the correct parameters. -
- - -{#if showStatusPopup} - -{/if} - - diff --git a/testing-app/src/routes/donations/one-time-ethers/+page.svelte b/testing-app/src/routes/donations/one-time-ethers/+page.svelte deleted file mode 100644 index d68d1a17..00000000 --- a/testing-app/src/routes/donations/one-time-ethers/+page.svelte +++ /dev/null @@ -1,962 +0,0 @@ - - - - -

One-Time Donation (Ethers)

- -
- 📝 About this operation:
- This page replicates the "One-Time Donation using Ethers" integration test. It - will fetch an existing drip list, set up an Ethers wallet, send the donation, and - verify it was received. -
- -
Step 1: Configure Wallet and Network Settings
- -
- {#if $walletStore.isConnected} -
- ✅ Wallet Connected: {$walletStore.address?.slice( - 0, - 6, - )}...{$walletStore.address?.slice(-4)} -
Using connected wallet for transactions -
- {:else} -
- ❌ No Wallet Connected - Using Private Key Input -
-
- - -
- {/if} - -
- - -
- -
- - -
-
- -
Step 2: Configure IPFS Settings
- -
-
- - -
- -
- - -
-
- -
Step 3: Fetch Existing Drip List
- -
-
- - -
- - - - {#if fetchError} -
- ❌ Error: - {fetchError} -
- {/if} - - {#if fetchedDripList} -
- ✅ Drip List Fetched Successfully! -
Name: {fetchedDripList.name || 'Unnamed'} -
Description: {fetchedDripList.description || 'No description'} -
Visible: {fetchedDripList.isVisible ? 'Yes' : 'No'} -
Splits Receivers: {fetchedDripList.receivers?.length || 0} -
- {/if} -
- -
Step 4: Configure Donation Parameters
- -
-
- - - Amount in token units -
- -
- - - Address of the ERC20 token to donate -
- -
- - -
- - {#if receiverType === 'address'} -
- - - Ethereum address to receive the donation -
- {:else if receiverType === 'project'} -
- - - GitHub project URL to receive the donation -
- {:else if receiverType === 'drip-list' && receiverDripListId} -
- - - Leave empty to use the fetched drip list above -
- {/if} -
- -
Step 5: Execute Operation
- -
- -
- -
- ⚠️ Note: This operation will send a one-time donation to the specified - receiver. Make sure you have sufficient funds for gas fees and the donation amount. -
- -
- 🔍 Verification: After sending the donation, the system will wait - for indexing and verify that the donation appears in the receiver's support data - with the correct amount and token. -
- - -{#if showStatusPopup} - -{/if} - - diff --git a/testing-app/src/routes/donations/one-time-viem/+page.svelte b/testing-app/src/routes/donations/one-time-viem/+page.svelte deleted file mode 100644 index 6f6f5fc7..00000000 --- a/testing-app/src/routes/donations/one-time-viem/+page.svelte +++ /dev/null @@ -1,965 +0,0 @@ - - - - -

One-Time Donation (Viem)

- -
- 📝 About this operation:
- This page replicates the "One-Time Donation using Viem" integration test. It will - fetch an existing drip list, set up a Viem wallet client, send the donation, and - verify it was received. -
- -
Step 1: Configure Wallet and Network Settings
- -
- {#if $walletStore.isConnected} -
- ✅ Wallet Connected: {$walletStore.address?.slice( - 0, - 6, - )}...{$walletStore.address?.slice(-4)} -
Using connected wallet for transactions -
- {:else} -
- ❌ No Wallet Connected - Using Private Key Input -
-
- - -
- {/if} - -
- - -
- -
- - -
-
- -
Step 2: Configure IPFS Settings
- -
-
- - -
- -
- - -
-
- -
Step 3: Fetch Existing Drip List
- -
-
- - -
- - - - {#if fetchError} -
- ❌ Error: - {fetchError} -
- {/if} - - {#if fetchedDripList} -
- ✅ Drip List Fetched Successfully! -
Name: {fetchedDripList.name || 'Unnamed'} -
Description: {fetchedDripList.description || 'No description'} -
Visible: {fetchedDripList.isVisible ? 'Yes' : 'No'} -
Splits Receivers: {fetchedDripList.receivers?.length || 0} -
- {/if} -
- -
Step 4: Configure Donation Parameters
- -
-
- - - Amount in token units -
- -
- - - Address of the ERC20 token to donate -
- -
- - -
- - {#if receiverType === 'address'} -
- - - Ethereum address to receive the donation -
- {:else if receiverType === 'project'} -
- - - GitHub project URL to receive the donation -
- {:else if receiverType === 'drip-list' && receiverDripListId} -
- - - Leave empty to use the fetched drip list above -
- {/if} -
- -
Step 5: Execute Operation
- -
- -
- -
- ⚠️ Note: This operation will send a one-time donation to the specified - receiver. Make sure you have sufficient funds for gas fees and the donation amount. -
- -
- 🔍 Verification: After sending the donation, the system will wait - for indexing and verify that the donation appears in the receiver's support data - with the correct amount and token. -
- - -{#if showStatusPopup} - -{/if} - - diff --git a/testing-app/src/routes/drip-lists/+page.svelte b/testing-app/src/routes/drip-lists/+page.svelte deleted file mode 100644 index 5c1d3696..00000000 --- a/testing-app/src/routes/drip-lists/+page.svelte +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - -

🗂️ Drip Lists Module

- -

- Drip Lists are collections of receivers (addresses, projects, or other drip lists) that - automatically split incoming funds according to specified weights. This module allows you - to create and update drip lists using either Viem or Ethers blockchain adapters. -

- -
-

Drip List Operations:

-
    -
  • Create: Deploy a new drip list with specified receivers and weights
  • -
  • Update: Modify existing drip list metadata and receiver configurations
  • -
  • Split Distribution: Automatically distribute incoming funds based on weights
  • -
-
- -
-
-

Create Drip List (Viem) 🔒 WRITE

-

- Create a new drip list using the Viem blockchain adapter. This operation will: -

-
    -
  • Set up a Viem wallet client
  • -
  • Define split receivers with weights
  • -
  • Create and deploy the drip list
  • -
  • Upload metadata to IPFS
  • -
  • Wait for indexing and verification
  • -
- Create with Viem → -
- -
-

Create Drip List (Ethers) 🔒 WRITE

-

- Create a new drip list using the Ethers blockchain adapter. This operation will: -

-
    -
  • Set up an Ethers wallet/signer
  • -
  • Define split receivers with weights
  • -
  • Create and deploy the drip list
  • -
  • Upload metadata to IPFS
  • -
  • Wait for indexing and verification
  • -
- Create with Ethers → -
- -
-

Update Drip List (Viem) 🔒 WRITE

-

- Update an existing drip list using the Viem blockchain adapter. This operation will: -

-
    -
  • Create an initial drip list
  • -
  • Modify metadata and receivers
  • -
  • Update the drip list on-chain
  • -
  • Upload new metadata to IPFS
  • -
  • Verify the updates were applied
  • -
- Update with Viem → -
- -
-

Update Drip List (Ethers) 🔒 WRITE

-

- Update an existing drip list using the Ethers blockchain adapter. This operation will: -

-
    -
  • Create an initial drip list
  • -
  • Modify metadata and receivers
  • -
  • Update the drip list on-chain
  • -
  • Upload new metadata to IPFS
  • -
  • Verify the updates were applied
  • -
- Update with Ethers → -
- -
-

Get Drip List 👁️ READ

-

- Query and retrieve drip list information from the network. This operation will: -

-
    -
  • Connect to the GraphQL API
  • -
  • Query drip list by ID
  • -
  • Fetch metadata from IPFS
  • -
  • Display receivers and weights
  • -
  • Show current balance and statistics
  • -
- Get Drip List → -
-
diff --git a/testing-app/src/routes/drip-lists/create-ethers/+page.svelte b/testing-app/src/routes/drip-lists/create-ethers/+page.svelte deleted file mode 100644 index f8242cf8..00000000 --- a/testing-app/src/routes/drip-lists/create-ethers/+page.svelte +++ /dev/null @@ -1,840 +0,0 @@ - - - - -

Create Drip List (Ethers)

- -
- 📝 About this operation:
- This page replicates the "Create Drip List using Ethers" integration test. It will - set up an Ethers wallet/signer, define split receivers, create the drip list, upload - metadata to IPFS, and verify the creation. -
- -
Step 1: Configure Wallet and Network Settings
- -
- {#if $walletStore.isConnected} -
- ✅ Wallet Connected: {$walletStore.address?.slice( - 0, - 6, - )}...{$walletStore.address?.slice(-4)} -
Using connected wallet for transactions -
- {:else} -
- ❌ No Wallet Connected - Using Private Key Input -
-
- - -
- {/if} - -
- - -
- -
- - -
-
- -
Step 2: Configure IPFS Settings
- -
-
- - -
- -
- - -
-
- -
Step 3: Define Drip List Metadata
- -
-
- - -
- -
- - -
- -
- -
-
- -
Step 4: Configure Split Receivers
- -
-

Split Receivers

-

- Define who will receive the funds and their respective weights (total must - equal 1,000,000). -

- - {#each receivers as receiver, index} -
-
- - - -
- - {#if receiver.type === 'address'} -
- - -
- {:else if receiver.type === 'project'} -
- - -
- {:else if receiver.type === 'drip-list'} -
- - -
- {/if} - -
- - -
-
- {/each} - - -
- -
Step 5: Execute Operation
- -
- -
- -
- ⚠️ Note: This operation will interact with the blockchain and - IPFS. Make sure you have sufficient funds for gas fees and valid API credentials. -
- - -{#if showStatusPopup} - -{/if} - - diff --git a/testing-app/src/routes/drip-lists/create-viem/+page.svelte b/testing-app/src/routes/drip-lists/create-viem/+page.svelte deleted file mode 100644 index 7950224a..00000000 --- a/testing-app/src/routes/drip-lists/create-viem/+page.svelte +++ /dev/null @@ -1,837 +0,0 @@ - - - - -

Create Drip List (Viem)

- -
- 📝 About this operation:
- This page replicates the "Create Drip List using Viem" integration test. It will - set up a Viem wallet client, define split receivers, create the drip list, upload - metadata to IPFS, and verify the creation. -
- -
Step 1: Configure Wallet and Network Settings
- -
- {#if $walletStore.isConnected} -
- ✅ Wallet Connected: {$walletStore.address?.slice( - 0, - 6, - )}...{$walletStore.address?.slice(-4)} -
Using connected wallet for transactions -
- {:else} -
- ❌ No Wallet Connected - Using Private Key Input -
-
- - -
- {/if} - -
- - -
- -
- - -
-
- -
Step 2: Configure IPFS Settings
- -
-
- - -
- -
- - -
-
- -
Step 3: Define Drip List Metadata
- -
-
- - -
- -
- - -
- -
- -
-
- -
Step 4: Configure Split Receivers
- -
-

Split Receivers

-

- Define who will receive the funds and their respective weights (total must - equal 1,000,000). -

- - {#each receivers as receiver, index} -
-
- - - -
- - {#if receiver.type === 'address'} -
- - -
- {:else if receiver.type === 'project'} -
- - -
- {:else if receiver.type === 'drip-list'} -
- - -
- {/if} - -
- - -
-
- {/each} - - -
- -
Step 5: Execute Operation
- -
- -
- -
- ⚠️ Note: This operation will interact with the blockchain and - IPFS. Make sure you have sufficient funds for gas fees and valid API credentials. -
- - -{#if showStatusPopup} - -{/if} - - diff --git a/testing-app/src/routes/drip-lists/get/+page.svelte b/testing-app/src/routes/drip-lists/get/+page.svelte deleted file mode 100644 index 5e6b15e1..00000000 --- a/testing-app/src/routes/drip-lists/get/+page.svelte +++ /dev/null @@ -1,479 +0,0 @@ - - - - -

Get Drip List

- -
- 📖 About this operation:
- This operation queries the Drips network to retrieve information about an existing - drip list. It will fetch the drip list metadata, receivers, weights, and current - statistics from the GraphQL API and IPFS. -
- -
Step 1: Configure Network Settings
- -{#if $walletStore.isConnected} -
- ✅ Wallet Connected: {$walletStore.address?.slice( - 0, - 6, - )}...{$walletStore.address?.slice(-4)} -
Using connected wallet for queries -
-{:else} -
- ❌ No Wallet Connected - Using Random Readonly Adapter -
-{/if} - -
-
- - -
-
- -
Step 2: Specify Drip List to Query
- -
-
- - -
-
- -
Step 3: Execute Query
- -
- -
- -
Results
- -
- {#if $operationStatus.isRunning} -
-
-
-
-
{$operationStatus.progress}% Complete
-
- Current Step: - {$operationStatus.currentStep} -
-
- {:else if $operationStatus.error} -
- ❌ Error: - {$operationStatus.error} -
- {:else if dripListData} -
- ✅ Drip List Retrieved Successfully! -
Adapter Used: - {dripListData.adapterUsed} -
- -
-

📋 Drip List JSON

-
{JSON.stringify(
-          dripListData.dripList,
-          null,
-          2,
-        )}
-
- {:else} - Query results will appear here... -

- Click "Get Drip List" to execute the query and see the drip list - information. - {/if} - - {#if $operationStatus.logs.length > 0} -
-

📝 Operation Logs:

-
- {#each $operationStatus.logs as log} -
{log}
- {/each} -
-
- {/if} -
- -
- ℹ️ Note: This is a read-only operation that doesn't require wallet - connection or gas fees. It only queries existing data from the network. -
- - diff --git a/testing-app/src/routes/drip-lists/update-ethers/+page.svelte b/testing-app/src/routes/drip-lists/update-ethers/+page.svelte deleted file mode 100644 index a1f068ee..00000000 --- a/testing-app/src/routes/drip-lists/update-ethers/+page.svelte +++ /dev/null @@ -1,1002 +0,0 @@ - - - - -

Update Drip List (Ethers)

- -
- 📝 About this operation:
- This page allows you to update an existing drip list using the Ethers adapter. - Enter a drip list ID to fetch its current data, modify the metadata and receivers, - then update it on the blockchain. -
- -
Step 1: Configure Wallet and Network Settings
- -
- {#if $walletStore.isConnected} -
- ✅ Wallet Connected: {$walletStore.address?.slice( - 0, - 6, - )}...{$walletStore.address?.slice(-4)} -
Using connected wallet for transactions -
- {:else} -
- ❌ No Wallet Connected - Using Private Key Input -
-
- - -
- {/if} - -
- - -
- -
- - -
-
- -
Step 2: Configure IPFS Settings
- -
-
- - -
- -
- - -
-
- -
Step 3: Fetch Existing Drip List
- -
-
- - -
- - - - {#if fetchError} -
- ❌ Error: - {fetchError} -
- {/if} - - {#if fetchedDripList} -
- ✅ Drip List Fetched Successfully! -
Name: {fetchedDripList.name || 'Unnamed'} -
Description: {fetchedDripList.description || 'No description'} -
Visible: {fetchedDripList.isVisible ? 'Yes' : 'No'} -
Splits Receivers: {fetchedDripList.receivers?.length || 0} -
- {/if} -
- -{#if fetchedDripList} -
Step 4: Update Drip List Metadata
- -
-
- - -
- -
- - -
- -
- -
-
- -
Step 5: Update Split Receivers
- -
-

Split Receivers

-

- Modify the receivers and their respective weights (total must equal - 1,000,000). -

- - {#each receivers as receiver, index} -
-
- - - -
- - {#if receiver.type === 'address'} -
- - -
- {:else if receiver.type === 'project'} -
- - -
- {:else if receiver.type === 'drip-list'} -
- - -
- {/if} - -
- - -
-
- {/each} - - -
- -
Step 6: Execute Operation
- -
- -
- -
- ⚠️ Note: This operation will interact with the blockchain and - IPFS. Make sure you have sufficient funds for gas fees and valid API credentials. -
-{/if} - - -{#if showStatusPopup} - -{/if} - - diff --git a/testing-app/src/routes/drip-lists/update-viem/+page.svelte b/testing-app/src/routes/drip-lists/update-viem/+page.svelte deleted file mode 100644 index 557528cc..00000000 --- a/testing-app/src/routes/drip-lists/update-viem/+page.svelte +++ /dev/null @@ -1,999 +0,0 @@ - - - - -

Update Drip List (Viem)

- -
- 📝 About this operation:
- This page allows you to update an existing drip list using the Viem adapter. Enter - a drip list ID to fetch its current data, modify the metadata and receivers, then - update it on the blockchain. -
- -
Step 1: Configure Wallet and Network Settings
- -
- {#if $walletStore.isConnected} -
- ✅ Wallet Connected: {$walletStore.address?.slice( - 0, - 6, - )}...{$walletStore.address?.slice(-4)} -
Using connected wallet for transactions -
- {:else} -
- ❌ No Wallet Connected - Using Private Key Input -
-
- - -
- {/if} - -
- - -
- -
- - -
-
- -
Step 2: Configure IPFS Settings
- -
-
- - -
- -
- - -
-
- -
Step 3: Fetch Existing Drip List
- -
-
- - -
- - - - {#if fetchError} -
- ❌ Error: - {fetchError} -
- {/if} - - {#if fetchedDripList} -
- ✅ Drip List Fetched Successfully! -
Name: {fetchedDripList.name || 'Unnamed'} -
Description: {fetchedDripList.description || 'No description'} -
Visible: {fetchedDripList.isVisible ? 'Yes' : 'No'} -
Splits Receivers: {fetchedDripList.receivers?.length || 0} -
- {/if} -
- -{#if fetchedDripList} -
Step 4: Update Drip List Metadata
- -
-
- - -
- -
- - -
- -
- -
-
- -
Step 5: Update Split Receivers
- -
-

Split Receivers

-

- Modify the receivers and their respective weights (total must equal - 1,000,000). -

- - {#each receivers as receiver, index} -
-
- - - -
- - {#if receiver.type === 'address'} -
- - -
- {:else if receiver.type === 'project'} -
- - -
- {:else if receiver.type === 'drip-list'} -
- - -
- {/if} - -
- - -
-
- {/each} - - -
- -
Step 6: Execute Operation
- -
- -
- -
- ⚠️ Note: This operation will interact with the blockchain and - IPFS. Make sure you have sufficient funds for gas fees and valid API credentials. -
-{/if} - - -{#if showStatusPopup} - -{/if} - - diff --git a/testing-app/src/routes/utils/+page.svelte b/testing-app/src/routes/utils/+page.svelte deleted file mode 100644 index ed0a668b..00000000 --- a/testing-app/src/routes/utils/+page.svelte +++ /dev/null @@ -1,1145 +0,0 @@ - - - - -

🔧 Utils Module

- -
- 🛠️ About this module:
- This module provides access to various utility functions from the Drips SDK. These - utilities help you calculate IDs, parse URLs, and work with the underlying data - structures of the Drips protocol. -
- -{#if $walletStore.isConnected} -
- ✅ Wallet Connected: {$walletStore.address?.slice( - 0, - 6, - )}...{$walletStore.address?.slice(-4)} -
Using connected wallet for blockchain operations -
-{:else} -
- ❌ No Wallet Connected - Using readonly adapter for calculations -
All utility functions work without wallet connection -
-{/if} - -
- - - - - -
- -{#if activeTab === 'address-id'} -
-

📍 Calculate Address ID

-
- About: Converts an Ethereum address to its corresponding account - ID in the Drips protocol. This is used internally by the protocol to identify - accounts. -
- -
-
- - - Enter a valid Ethereum address (0x...) -
- - - - {#if addressIdResult !== null} -
-

✅ Address ID Result

-
- Account ID: - {addressIdResult.toString()} -
-
- Input Address: - {addressInput} -
-
- {/if} -
-
-{/if} - -{#if activeTab === 'project-id'} -
-

📦 Calculate Project ID

-
- About: Converts a project URL (like a GitHub repository) to - its corresponding account ID in the Drips protocol. This is used for project-based - funding. -
- -
-
- - - Enter a GitHub repository URL -
- - - - {#if projectIdResult !== null} -
-

✅ Project ID Result

-
- Account ID: - {projectIdResult.toString()} -
-
- Input URL: - {projectUrl} -
-
- {/if} -
-
-{/if} - -{#if activeTab === 'drip-list-id'} -
-

📋 Calculate Drip List ID

-
- About: Calculates the ID for a drip list based on the minter - address and a salt value. This is used when creating new drip lists. -
- -
-
- - - Enter the address that will mint the drip list -
- -
- -
- - -
- Enter a numeric salt value or generate a random one -
- - - - {#if dripListIdResult !== null} -
-

✅ Drip List ID Result

-
- Drip List ID: - {dripListIdResult.toString()} -
-
- Minter: - {minterAddress} -
-
- Salt: - {saltValue} -
-
- {/if} -
-
-{/if} - -{#if activeTab === 'stream-encode'} -
-

🔧 Encode Stream Configuration

-
- About: Encodes stream configuration parameters into a single - packed bigint value. This is used internally by the Drips protocol to efficiently - store stream data. -
- -
-
- - - Enter the stream/drip ID (numeric value) -
- -
- - - Enter the amount per second in wei (e.g., 1 ETH = - 1000000000000000000) -
- -
- - - Enter the start timestamp (Unix timestamp) -
- -
- - - Enter the duration in seconds -
- - - - {#if encodedStreamConfig !== null} -
-

✅ Encoded Stream Config

-
- Encoded Value: - {encodedStreamConfig.toString()} -
-
- {/if} -
-
-{/if} - -{#if activeTab === 'stream-decode'} -
-

🔍 Decode Stream Configuration

-
- About: Decodes a packed stream configuration value back into - its individual components (stream ID, amount per second, start time, duration). -
- -
-
- - - Enter the packed stream configuration value (bigint) -
- - - - {#if decodedStreamConfig !== null} -
-

✅ Decoded Stream Config

-
- Stream ID (Drip ID): - {decodedStreamConfig.dripId.toString()} -
-
- Amount Per Second: - {decodedStreamConfig.amountPerSec.toString()} -
-
- Start Time: - {decodedStreamConfig.start.toString()} -
-
- Duration: - {decodedStreamConfig.duration.toString()} -
-
- {/if} -
-
-{/if} - -
Operation Status
- -
- {#if $operationStatus.isRunning} -
-
-
-
-
{$operationStatus.progress}% Complete
-
- Current Step: - {$operationStatus.currentStep} -
-
- {:else if $operationStatus.error} -
- ❌ Error: - {$operationStatus.error} -
- {:else if $operationStatus.result} -
- ✅ Operation Completed Successfully! -
- -
-

📋 Result JSON

-
{JSON.stringify(
-          $operationStatus.result,
-          null,
-          2,
-        )}
-
- {:else} - Operation results will appear here... -

- Select a utility function above and provide the required inputs to get - started. - {/if} - - {#if $operationStatus.logs.length > 0} -
-

📝 Operation Logs:

-
- {#each $operationStatus.logs as log} -
{log}
- {/each} -
-
- {/if} -
- -
- ℹ️ Note: These utility functions help you work with the - underlying data structures of the Drips protocol. Most of these operations are - read-only and don't require gas fees, though they do need to interact with the - blockchain to get the latest contract state. -

- Use Cases: -
    -
  • - Address ID: Convert wallet addresses to account IDs for use - in other SDK functions -
  • -
  • - Project ID: Get account IDs for GitHub projects to set up - project funding -
  • -
  • - Drip List ID: Calculate IDs for drip lists before creating - them -
  • -
  • - Stream Encode: Pack stream configuration parameters into a - single value for efficient storage -
  • -
  • - Stream Decode: Unpack stream configuration values back into - individual components -
  • -
  • - Metadata Encode: Convert metadata key-value pairs into blockchain-compatible - hex format -
  • -
-
- - diff --git a/testing-app/static/favicon.png b/testing-app/static/favicon.png deleted file mode 100644 index e69de29b..00000000 diff --git a/testing-app/svelte.config.js b/testing-app/svelte.config.js deleted file mode 100644 index c37aa776..00000000 --- a/testing-app/svelte.config.js +++ /dev/null @@ -1,12 +0,0 @@ -import adapter from '@sveltejs/adapter-auto'; -import {vitePreprocess} from '@sveltejs/vite-plugin-svelte'; - -/** @type {import('@sveltejs/kit').Config} */ -const config = { - preprocess: vitePreprocess(), - kit: { - adapter: adapter(), - }, -}; - -export default config; diff --git a/testing-app/tsconfig.json b/testing-app/tsconfig.json deleted file mode 100644 index 43447105..00000000 --- a/testing-app/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "./.svelte-kit/tsconfig.json", - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "skipLibCheck": true, - "sourceMap": true, - "strict": true, - "moduleResolution": "bundler" - } -} diff --git a/testing-app/vite.config.js b/testing-app/vite.config.js deleted file mode 100644 index ff57d907..00000000 --- a/testing-app/vite.config.js +++ /dev/null @@ -1,6 +0,0 @@ -import {sveltekit} from '@sveltejs/kit/vite'; -import {defineConfig} from 'vite'; - -export default defineConfig({ - plugins: [sveltekit()], -}); diff --git a/tests/integration/deadlines.integration.test.ts b/tests/integration/deadlines.integration.test.ts new file mode 100644 index 00000000..bc1296cb --- /dev/null +++ b/tests/integration/deadlines.integration.test.ts @@ -0,0 +1,342 @@ +import {describe, it, expect} from 'vitest'; +import {createDripsSdk} from '../../src/sdk/createDripsSdk'; +import {createWalletClient, createPublicClient, http, parseUnits} from 'viem'; +import {JsonRpcProvider, Wallet, NonceManager, Contract} from 'ethers'; +import {privateKeyToAccount} from 'viem/accounts'; +import {contractsRegistry} from '../../src/internal/config/contractsRegistry'; +import {repoDeadlineDriverAbi} from '../../src/internal/abis/repoDeadlineDriver'; +import {dripsAbi} from '../../src/internal/abis/dripsAbi'; +import {TOTAL_SPLITS_WEIGHT} from '../../src/internal/shared/receiverUtils'; +import {expect as expectUntil} from '../../src/internal/shared/expect'; +import {createPinataIpfsMetadataUploader} from '../../src/internal/shared/createPinataIpfsMetadataUploader'; +import {SdkSplitsReceiver} from '../../src/internal/shared/receiverUtils'; +import {toDeadlineSeconds} from '../../src/internal/shared/toDeadlineSeconds'; +import {calcProjectId} from '../../src/internal/projects/calcProjectId'; +import {calcAddressId} from '../../src/internal/shared/calcAddressId'; +import {resolveBlockchainAdapter} from '../../src/internal/blockchain/resolveBlockchainAdapter'; +import {randomUUID} from 'crypto'; +import * as dotenv from 'dotenv'; + +// Test constants +const TEST_TIMEOUT = 120_000; // 2 minutes +const INDEXING_TIMEOUT = 120_000; // 2 minutes +const POLLING_INTERVAL = 2_000; // 2 seconds + +dotenv.config(); + +// Local testnet chain (31337) +const localtestnet = { + name: 'Local Testnet', + id: 31337, + rpcUrls: { + default: {http: [process.env.RPC_URL!]}, + }, + nativeCurrency: { + name: 'Ether', + symbol: 'ETH', + decimals: 18, + }, +} as const; + +// ERC20 ABI for approve function +const erc20Abi = [ + { + inputs: [ + {name: 'spender', type: 'address'}, + {name: 'amount', type: 'uint256'}, + ], + name: 'approve', + outputs: [{name: '', type: 'bool'}], + stateMutability: 'nonpayable', + type: 'function', + }, +] as const; + +describe('Deadlines', () => { + describe('Drip List with Deadline', () => { + it( + 'should create a Drip List with deadline and verify splits hash using Viem', + {timeout: TEST_TIMEOUT}, + async () => { + console.log('=== Creating Drip List with Deadline using Viem ==='); + + // Step 1: Set up wallet account + console.log('Step 1: Setting up wallet account...'); + const account = privateKeyToAccount(`0x${process.env.DEV_WALLET_PK!}`); + + // Step 2: Create Viem clients + console.log('Step 2: Creating Viem clients...'); + const walletClient = createWalletClient({ + chain: localtestnet, + transport: http(process.env.RPC_URL!), + account, + }); + + const publicClient = createPublicClient({ + chain: localtestnet, + transport: http(process.env.RPC_URL!), + }); + + // Step 3: Set up IPFS uploader + console.log('Step 3: Setting up IPFS uploader...'); + const ipfsMetadataUploader = createPinataIpfsMetadataUploader({ + pinataJwt: process.env.PINATA_JWT!, + pinataGateway: process.env.PINATA_GATEWAY!, + }); + + // Step 4: Create the Drips SDK + console.log('Step 4: Creating Drips SDK...'); + const sdk = createDripsSdk(walletClient, ipfsMetadataUploader, { + graphql: { + url: process.env.GRAPHQL_URL!, + }, + }); + + // Step 5: Define receivers with deadline config + console.log('Step 5: Defining receivers with deadline...'); + const projectUrl = 'https://github.com/drips-network/sdk'; + const receivers: SdkSplitsReceiver[] = [ + { + type: 'project', + url: projectUrl, + weight: TOTAL_SPLITS_WEIGHT, + }, + ]; + + const deadline = new Date(Date.now() + 86400000); // 1 day from now + const refundAddress = account.address; + + // Step 6: Create Drip List with deadline + console.log('Step 6: Creating Drip List with deadline...'); + const dripListName = `Test Deadline Drip List (Viem) - ${randomUUID()}`; + const {dripListId, txResponse} = await sdk.dripLists.create({ + name: dripListName, + description: 'A drip list to test deadlines', + isVisible: true, + receivers, + deadlineConfig: { + deadline, + refundAddress, + }, + }); + + console.log(`✓ Drip list created with ID: ${dripListId}`); + + // Step 7: Wait for transaction confirmation + console.log('Step 7: Waiting for transaction confirmation...'); + const {hash} = await txResponse.wait(); + console.log(`✓ Transaction confirmed with hash: ${hash}`); + + // Step 8: Wait for indexing + console.log('Step 8: Waiting for indexing...'); + const result = await expectUntil( + () => sdk.dripLists.getById(dripListId, localtestnet.id), + dripList => dripList !== null && dripList.name === dripListName, + INDEXING_TIMEOUT, + POLLING_INTERVAL, + true, + ); + + if (result.failed) { + throw new Error('Drip list was not indexed within the timeout'); + } + + // Step 9: Verify splits hash + console.log('Step 9: Verifying splits hash...'); + const dripsAddress = contractsRegistry[ + localtestnet.id as keyof typeof contractsRegistry + ].drips.address as `0x${string}`; + + const repoDeadlineDriverAddress = contractsRegistry[ + localtestnet.id as keyof typeof contractsRegistry + ].repoDeadlineDriver.address as `0x${string}`; + + // Calculate project account ID + const adapter = resolveBlockchainAdapter(walletClient); + const repoAccountId = await calcProjectId(adapter, { + forge: 'github', + name: 'drips-network/sdk', + }); + + const refundAccountId = await calcAddressId(adapter, refundAddress); + const deadlineSeconds = toDeadlineSeconds(deadline); + + // Calculate deadline driver account ID + const deadlineAccountId = (await publicClient.readContract({ + address: repoDeadlineDriverAddress, + abi: repoDeadlineDriverAbi, + functionName: 'calcAccountId', + args: [ + repoAccountId, + repoAccountId, + refundAccountId, + deadlineSeconds, + ], + })) as bigint; + + // Calculate expected splits hash using deadline account ID + const expectedSplitsHash = (await publicClient.readContract({ + address: dripsAddress, + abi: dripsAbi, + functionName: 'hashSplits', + args: [[{accountId: deadlineAccountId, weight: TOTAL_SPLITS_WEIGHT}]], + })) as `0x${string}`; + + // Get actual splits hash from Drip List + const currentSplitsHash = (await publicClient.readContract({ + address: dripsAddress, + abi: dripsAbi, + functionName: 'splitsHash', + args: [dripListId], + })) as `0x${string}`; + + expect(currentSplitsHash).toBe(expectedSplitsHash); + console.log( + '✓ Splits hash matches expected deadline driver account ID.', + ); + }, + ); + + it( + 'should create a Drip List with deadline and verify splits hash using Ethers', + {timeout: TEST_TIMEOUT}, + async () => { + console.log('=== Creating Drip List with Deadline using Ethers ==='); + + // Step 1: Set up provider and wallet + console.log('Step 1: Setting up provider and wallet...'); + const provider = new JsonRpcProvider(process.env.RPC_URL!); + const signer = new NonceManager( + new Wallet(process.env.DEV_WALLET_PK!, provider), + ); + + // Step 2: Create public client for reads + console.log('Step 2: Creating public client...'); + const publicClient = createPublicClient({ + chain: localtestnet, + transport: http(process.env.RPC_URL!), + }); + + // Step 3: Set up IPFS uploader + console.log('Step 3: Setting up IPFS uploader...'); + const ipfsMetadataUploader = createPinataIpfsMetadataUploader({ + pinataJwt: process.env.PINATA_JWT!, + pinataGateway: process.env.PINATA_GATEWAY!, + }); + + // Step 4: Create the Drips SDK + console.log('Step 4: Creating Drips SDK...'); + const sdk = createDripsSdk(signer, ipfsMetadataUploader, { + graphql: { + url: process.env.GRAPHQL_URL!, + }, + }); + + // Step 5: Define receivers with deadline config + console.log('Step 5: Defining receivers with deadline...'); + const projectUrl = 'https://github.com/drips-network/sdk'; + const receivers: SdkSplitsReceiver[] = [ + { + type: 'project', + url: projectUrl, + weight: TOTAL_SPLITS_WEIGHT, + }, + ]; + + const deadline = new Date(Date.now() + 86400000); // 1 day from now + const refundAddress = (await signer.getAddress()) as `0x${string}`; + + // Step 6: Create Drip List with deadline + console.log('Step 6: Creating Drip List with deadline...'); + const dripListName = `Test Deadline Drip List (Ethers) - ${randomUUID()}`; + const {dripListId, txResponse} = await sdk.dripLists.create({ + name: dripListName, + description: 'A drip list to test deadlines', + isVisible: true, + receivers, + deadlineConfig: { + deadline, + refundAddress, + }, + }); + + console.log(`✓ Drip list created with ID: ${dripListId}`); + + // Step 7: Wait for transaction confirmation + console.log('Step 7: Waiting for transaction confirmation...'); + const {hash} = await txResponse.wait(); + console.log(`✓ Transaction confirmed with hash: ${hash}`); + + // Step 8: Wait for indexing + console.log('Step 8: Waiting for indexing...'); + const result = await expectUntil( + () => sdk.dripLists.getById(dripListId, localtestnet.id), + dripList => dripList !== null && dripList.name === dripListName, + INDEXING_TIMEOUT, + POLLING_INTERVAL, + true, + ); + + if (result.failed) { + throw new Error('Drip list was not indexed within the timeout'); + } + + // Step 9: Verify splits hash + console.log('Step 9: Verifying splits hash...'); + const dripsAddress = contractsRegistry[ + localtestnet.id as keyof typeof contractsRegistry + ].drips.address as `0x${string}`; + + const repoDeadlineDriverAddress = contractsRegistry[ + localtestnet.id as keyof typeof contractsRegistry + ].repoDeadlineDriver.address as `0x${string}`; + + // Calculate project account ID + const adapter = resolveBlockchainAdapter(signer); + const repoAccountId = await calcProjectId(adapter, { + forge: 'github', + name: 'drips-network/sdk', + }); + + const refundAccountId = await calcAddressId(adapter, refundAddress); + const deadlineSeconds = toDeadlineSeconds(deadline); + + // Calculate deadline driver account ID + const deadlineAccountId = (await publicClient.readContract({ + address: repoDeadlineDriverAddress, + abi: repoDeadlineDriverAbi, + functionName: 'calcAccountId', + args: [ + repoAccountId, + repoAccountId, + refundAccountId, + deadlineSeconds, + ], + })) as bigint; + + // Calculate expected splits hash using deadline account ID + const expectedSplitsHash = (await publicClient.readContract({ + address: dripsAddress, + abi: dripsAbi, + functionName: 'hashSplits', + args: [[{accountId: deadlineAccountId, weight: TOTAL_SPLITS_WEIGHT}]], + })) as `0x${string}`; + + // Get actual splits hash from Drip List + const currentSplitsHash = (await publicClient.readContract({ + address: dripsAddress, + abi: dripsAbi, + functionName: 'splitsHash', + args: [dripListId], + })) as `0x${string}`; + + expect(currentSplitsHash).toBe(expectedSplitsHash); + console.log( + '✓ Splits hash matches expected deadline driver account ID.', + ); + }, + ); + }); + + // TODO: Add tests for one-time donations with deadlines when SDK supports claiming a project: https://github.com/drips-network/sdk/issues/166 +}); diff --git a/tests/unit/donations/prepareOneTimeDonation.test.ts b/tests/unit/donations/prepareOneTimeDonation.test.ts index e68f44b6..bc981b7c 100644 --- a/tests/unit/donations/prepareOneTimeDonation.test.ts +++ b/tests/unit/donations/prepareOneTimeDonation.test.ts @@ -4,7 +4,10 @@ import { PreparedTx, WriteBlockchainAdapter, } from '../../../src/internal/blockchain/BlockchainAdapter'; -import {resolveReceiverAccountId} from '../../../src/internal/shared/receiverUtils'; +import { + resolveDeadlineAccount, + resolveReceiverAccountId, +} from '../../../src/internal/shared/receiverUtils'; import { OneTimeDonation, prepareOneTimeDonation, @@ -13,6 +16,7 @@ import {contractsRegistry} from '../../../src'; import {buildTx} from '../../../src/internal/shared/buildTx'; import {addressDriverAbi} from '../../../src/internal/abis/addressDriverAbi'; import {generateRandomAddress, generateRandomBigInt} from '../../testUtils'; +import {DripsError} from '../../../src/internal/shared/DripsError'; vi.mock('../../../src/internal/shared/receiverUtils'); vi.mock('../../../src/internal/shared/buildTx'); @@ -43,6 +47,18 @@ describe('prepareOneTimeDonation', () => { vi.mocked(resolveReceiverAccountId).mockResolvedValue( mockReceiverAccountId, ); + vi.mocked(resolveDeadlineAccount).mockResolvedValue({ + deadlineAccountId: mockReceiverAccountId, + repoAccountId: generateRandomBigInt(), + refundAccountId: generateRandomBigInt(), + deadlineSeconds: 0, + source: { + forge: 'github', + ownerName: 'owner', + repoName: 'repo', + url: 'https://github.com/owner/repo', + }, + } as any); }); it('should build the expected give transaction', async () => { @@ -130,4 +146,118 @@ describe('prepareOneTimeDonation', () => { // Assert expect(result).toBe(mockPreparedTx); }); + + it('should handle project receiver with deadline config', async () => { + // Arrange + const mockDeadlineAccountId = generateRandomBigInt(); + const mockRefundAddress = generateRandomAddress(); + const mockDeadline = new Date(Date.now() + 86400000); + + vi.mocked(resolveDeadlineAccount).mockResolvedValue({ + deadlineAccountId: mockDeadlineAccountId, + repoAccountId: generateRandomBigInt(), + refundAccountId: generateRandomBigInt(), + deadlineSeconds: 123, + source: { + forge: 'github', + ownerName: 'owner', + repoName: 'repo', + url: 'https://github.com/owner/repo', + }, + } as any); + + const donation: OneTimeDonation = { + erc20: mockErc20, + amount: '10', + tokenDecimals: 18, + receiver: { + type: 'project', + url: 'https://github.com/owner/repo', + }, + deadlineConfig: { + deadline: mockDeadline, + refundAddress: mockRefundAddress, + }, + }; + + // Act + await prepareOneTimeDonation(mockWriteAdapter, donation); + + // Assert + expect(resolveDeadlineAccount).toHaveBeenCalledWith( + mockWriteAdapter, + donation.receiver, + donation.deadlineConfig, + ); + expect(buildTx).toHaveBeenCalledWith({ + abi: addressDriverAbi, + functionName: 'give', + contract: contractsRegistry[mockChainId].addressDriver.address, + args: [ + mockDeadlineAccountId, + mockErc20, + parseUnits(donation.amount, donation.tokenDecimals), + ], + batchedTxOverrides: undefined, + }); + expect(resolveReceiverAccountId).not.toHaveBeenCalled(); + }); + + it('should throw error for non-project receiver with deadline config', async () => { + // Arrange + const mockRefundAddress = generateRandomAddress(); + const mockDeadline = new Date(Date.now() + 86400000); + + const donation: OneTimeDonation = { + erc20: mockErc20, + amount: '10', + tokenDecimals: 18, + receiver: { + type: 'address', + address: generateRandomAddress(), + }, + deadlineConfig: { + deadline: mockDeadline, + refundAddress: mockRefundAddress, + }, + }; + + // Act & Assert + await expect( + prepareOneTimeDonation(mockWriteAdapter, donation), + ).rejects.toThrow(DripsError); + await expect( + prepareOneTimeDonation(mockWriteAdapter, donation), + ).rejects.toThrow('Deadline donations only support project receivers'); + expect(resolveDeadlineAccount).not.toHaveBeenCalled(); + }); + + it('should throw error when deadline is in the past', async () => { + // Arrange + const mockRefundAddress = generateRandomAddress(); + const pastDeadline = new Date(Date.now() - 10000); + + const donation: OneTimeDonation = { + erc20: mockErc20, + amount: '10', + tokenDecimals: 18, + receiver: { + type: 'project', + url: 'https://github.com/owner/repo', + }, + deadlineConfig: { + deadline: pastDeadline, + refundAddress: mockRefundAddress, + }, + }; + + // Act & Assert + await expect( + prepareOneTimeDonation(mockWriteAdapter, donation), + ).rejects.toThrow(DripsError); + await expect( + prepareOneTimeDonation(mockWriteAdapter, donation), + ).rejects.toThrow('Deadline must be in the future'); + expect(resolveDeadlineAccount).not.toHaveBeenCalled(); + }); }); diff --git a/tests/unit/dripLists/buildDripListMetadata.test.ts b/tests/unit/dripLists/buildDripListMetadata.test.ts index 91e79c47..408ac652 100644 --- a/tests/unit/dripLists/buildDripListMetadata.test.ts +++ b/tests/unit/dripLists/buildDripListMetadata.test.ts @@ -56,6 +56,7 @@ describe('buildDripListMetadata', () => { description: 'A test drip list description', isVisible: true, latestVotingRoundId: 'latestVotingRoundId', + allowExternalDonations: true, }; describe('successful metadata building', () => { @@ -74,6 +75,7 @@ describe('buildDripListMetadata', () => { name: 'Test Drip List', description: 'A test drip list description', isVisible: true, + allowExternalDonations: true, latestVotingRoundId: 'latestVotingRoundId', recipients: [ { @@ -358,6 +360,7 @@ describe('buildDripListMetadata', () => { dripListId: 1n, receivers: [], isVisible: false, + allowExternalDonations: false, }; // Act @@ -513,6 +516,7 @@ describe('buildDripListMetadata', () => { it('should not modify input parameters', async () => { // Arrange const originalParams = { + allowExternalDonations: true, dripListId: 123n, receivers: [ { diff --git a/tests/unit/dripLists/createDripList.test.ts b/tests/unit/dripLists/createDripList.test.ts index 249956f5..b0cd1bbe 100644 --- a/tests/unit/dripLists/createDripList.test.ts +++ b/tests/unit/dripLists/createDripList.test.ts @@ -1,6 +1,5 @@ import {describe, it, expect, vi, beforeEach} from 'vitest'; import {createDripList} from '../../../src/internal/drip-lists/createDripList'; -import {DripsError} from '../../../src/internal/shared/DripsError'; import type { WriteBlockchainAdapter, TxResponse, @@ -65,9 +64,10 @@ describe('createDripList', () => { isVisible: true, recipients: [], name: 'Test Drip List', - description: 'A test drip list', + description: 'A test drip List', latestVersion: 'v2', }, + allowExternalDonations: true, }; const mockTxResponse: TxResponse = { @@ -107,6 +107,7 @@ describe('createDripList', () => { dripListId: mockCreationContext.dripListId, txResponse: mockTxResponse, metadata: mockCreationContext.metadata, + allowExternalDonations: true, }); }); @@ -213,6 +214,7 @@ describe('createDripList', () => { dripListId: mockCreationContext.dripListId, txResponse: mockTxResponse, metadata: mockCreationContext.metadata, + allowExternalDonations: true, }); }); @@ -269,6 +271,7 @@ describe('createDripList', () => { description: 'Custom description', latestVersion: 'v2', }, + allowExternalDonations: true, }; vi.mocked(prepareDripListCreation).mockResolvedValue(customContext); @@ -361,6 +364,7 @@ describe('createDripList', () => { recipients: [], latestVersion: 'v2', }, + allowExternalDonations: true, }; vi.mocked(prepareDripListCreation).mockResolvedValue(zeroContext); @@ -406,6 +410,7 @@ describe('createDripList', () => { description: 'Large description', latestVersion: 'v2', }, + allowExternalDonations: true, }; vi.mocked(prepareDripListCreation).mockResolvedValue(largeContext); diff --git a/tests/unit/dripLists/prepareDripListCreation.test.ts b/tests/unit/dripLists/prepareDripListCreation.test.ts index 786ce225..4b6bed58 100644 --- a/tests/unit/dripLists/prepareDripListCreation.test.ts +++ b/tests/unit/dripLists/prepareDripListCreation.test.ts @@ -43,6 +43,10 @@ vi.mock('../../../src/internal/shared/calcDripListId', () => ({ calcDripListId: vi.fn(), })); +vi.mock('../../../src/internal/shared/calcAddressId', () => ({ + calcAddressId: vi.fn(), +})); + import {requireSupportedChain} from '../../../src/internal/shared/assertions'; import {calculateRandomSalt} from '../../../src/internal/drip-lists/calculateRandomSalt'; import {buildTx} from '../../../src/internal/shared/buildTx'; @@ -51,6 +55,7 @@ import {encodeMetadataKeyValue} from '../../../src/internal/shared/encodeMetadat import {buildDripListMetadata} from '../../../src/internal/drip-lists/buildDripListMetadata'; import {calcDripListId} from '../../../src/internal/shared/calcDripListId'; import {parseSplitsReceivers} from '../../../src/internal/shared/receiverUtils'; +import {calcAddressId} from '../../../src/internal/shared/calcAddressId'; describe('prepareDripListCreation', () => { const mockAdapter: WriteBlockchainAdapter = { @@ -96,6 +101,7 @@ describe('prepareDripListCreation', () => { accountId: '999', }, isVisible: true, + allowExternalDonations: true, name: 'Test Drip List', description: 'A test drip list', recipients: [], @@ -145,6 +151,7 @@ describe('prepareDripListCreation', () => { data: '0xbatcheddata' as const, abiFunctionName: 'callBatched', }; + const mockOwnerAccountId = 2024n; beforeEach(() => { vi.clearAllMocks(); @@ -168,6 +175,7 @@ describe('prepareDripListCreation', () => { vi.mocked(convertToCallerCall) .mockReturnValueOnce(mockCallerCall1) .mockReturnValueOnce(mockCallerCall2); + vi.mocked(calcAddressId).mockResolvedValue(mockOwnerAccountId); }); describe('successful execution', () => { @@ -188,9 +196,14 @@ describe('prepareDripListCreation', () => { salt: mockSalt, minter: mockMinterAddress, }); + expect(calcAddressId).toHaveBeenCalledWith( + mockAdapter, + mockMinterAddress, + ); expect(parseSplitsReceivers).toHaveBeenCalledWith( mockAdapter, validParams.receivers, + undefined, ); expect(buildDripListMetadata).toHaveBeenCalledWith({ name: validParams.name, @@ -199,6 +212,7 @@ describe('prepareDripListCreation', () => { dripListId: mockDripListId, description: validParams.description, latestVotingRoundId: validParams.latestVotingRoundId, + allowExternalDonations: true, }); expect(mockIpfsMetadataUploader).toHaveBeenCalledWith(mockMetadata); expect(encodeMetadataKeyValue).toHaveBeenCalledWith({ @@ -212,6 +226,7 @@ describe('prepareDripListCreation', () => { dripListId: mockDripListId, preparedTx: mockBatchedTx, metadata: mockMetadata, + allowExternalDonations: true, }); }); @@ -240,7 +255,11 @@ describe('prepareDripListCreation', () => { ); // Assert - expect(parseSplitsReceivers).toHaveBeenCalledWith(mockAdapter, []); + expect(parseSplitsReceivers).toHaveBeenCalledWith( + mockAdapter, + [], + undefined, + ); expect(buildDripListMetadata).toHaveBeenCalledWith({ name: validParams.name, isVisible: validParams.isVisible, @@ -248,6 +267,7 @@ describe('prepareDripListCreation', () => { dripListId: mockDripListId, description: validParams.description, latestVotingRoundId: validParams.latestVotingRoundId, + allowExternalDonations: true, }); // Should only build mint tx, not setSplits tx expect(buildTx).toHaveBeenCalledTimes(2); // mint + batched @@ -293,12 +313,149 @@ describe('prepareDripListCreation', () => { ); // Assert + expect(calcAddressId).toHaveBeenCalledWith( + mockAdapter, + transferToAddress, + ); expect(buildTx).toHaveBeenCalledWith( expect.objectContaining({ args: [mockSalt, transferToAddress, [mockEncodedMetadata]], }), ); }); + + it('should pass deadlineConfig to parseSplitsReceivers when provided', async () => { + // Arrange + const deadlineConfig = { + deadline: new Date('2025-12-31'), + refundAddress: mockMinterAddress, + }; + const paramsWithDeadline = { + ...validParams, + deadlineConfig, + }; + + // Act + await prepareDripListCreation( + mockAdapter, + mockIpfsMetadataUploader, + paramsWithDeadline, + ); + + // Assert + expect(parseSplitsReceivers).toHaveBeenCalledWith( + mockAdapter, + validParams.receivers, + {deadlineConfig}, + ); + }); + + it('should set allowExternalDonations to false when deadline receiver refund account matches owner', async () => { + // Arrange + const deadlineMetadataReceivers = [ + { + type: 'deadline' as const, + accountId: '123', + weight: 500000, + deadline: new Date('2025-12-31'), + claimableProject: { + accountId: '789', + source: { + forge: 'github' as const, + repoName: 'test-repo', + ownerName: 'test-owner', + url: 'https://github.com/test-owner/test-repo', + }, + }, + recipientAccountId: '456', + refundAccountId: mockOwnerAccountId.toString(), + }, + { + type: 'address' as const, + accountId: '456', + weight: 500000, + }, + ]; + vi.mocked(parseSplitsReceivers).mockResolvedValue({ + onChain: mockOnChainReceivers, + metadata: deadlineMetadataReceivers, + }); + + // Act + const result = await prepareDripListCreation( + mockAdapter, + mockIpfsMetadataUploader, + validParams, + ); + + // Assert + expect(result.allowExternalDonations).toBe(false); + expect(buildDripListMetadata).toHaveBeenCalledWith( + expect.objectContaining({ + allowExternalDonations: false, + }), + ); + }); + + it('should set allowExternalDonations to true when no deadline receivers', async () => { + // Act + const result = await prepareDripListCreation( + mockAdapter, + mockIpfsMetadataUploader, + validParams, + ); + + // Assert + expect(result.allowExternalDonations).toBe(true); + }); + + it('should set allowExternalDonations to true when deadline receiver refund account does not match owner', async () => { + // Arrange + const differentAccountId = 9999n; + const deadlineMetadataReceivers = [ + { + type: 'deadline' as const, + accountId: '123', + weight: 500000, + deadline: new Date('2025-12-31'), + claimableProject: { + accountId: '789', + source: { + forge: 'github' as const, + repoName: 'test-repo', + ownerName: 'test-owner', + url: 'https://github.com/test-owner/test-repo', + }, + }, + recipientAccountId: '456', + refundAccountId: differentAccountId.toString(), + }, + { + type: 'address' as const, + accountId: '456', + weight: 500000, + }, + ]; + vi.mocked(parseSplitsReceivers).mockResolvedValue({ + onChain: mockOnChainReceivers, + metadata: deadlineMetadataReceivers, + }); + + // Act + const result = await prepareDripListCreation( + mockAdapter, + mockIpfsMetadataUploader, + validParams, + ); + + // Assert + expect(result.allowExternalDonations).toBe(true); + expect(buildDripListMetadata).toHaveBeenCalledWith( + expect.objectContaining({ + allowExternalDonations: true, + }), + ); + }); }); describe('error handling', () => { diff --git a/tests/unit/dripLists/prepareDripListUpdate.test.ts b/tests/unit/dripLists/prepareDripListUpdate.test.ts index 2bb322ba..979daafd 100644 --- a/tests/unit/dripLists/prepareDripListUpdate.test.ts +++ b/tests/unit/dripLists/prepareDripListUpdate.test.ts @@ -250,6 +250,7 @@ describe('prepareDripListUpdate', () => { name: validConfig.metadata!.name, isVisible: validConfig.metadata!.isVisible, description: validConfig.metadata!.description, + allowExternalDonations: true, }); expect(mockIpfsMetadataUploader).toHaveBeenCalledWith(mockMetadata); expect(encodeMetadataKeyValue).toHaveBeenCalledWith({ @@ -261,6 +262,7 @@ describe('prepareDripListUpdate', () => { preparedTx: mockBatchedTx, ipfsHash: mockIpfsHash, metadata: mockMetadata, + allowExternalDonations: true, }); }); @@ -297,6 +299,7 @@ describe('prepareDripListUpdate', () => { name: 'Updated Name Only', isVisible: mockExistingDripList.isVisible, description: mockExistingDripList.description, + allowExternalDonations: true, }); // Should only build emit metadata tx, not setSplits tx expect(buildTx).toHaveBeenCalledTimes(2); // emit metadata + batched @@ -325,6 +328,7 @@ describe('prepareDripListUpdate', () => { name: mockExistingDripList.name, isVisible: mockExistingDripList.isVisible, description: mockExistingDripList.description, + allowExternalDonations: true, }); // Should build both emit metadata and setSplits txs expect(buildTx).toHaveBeenCalledTimes(3); // emit metadata + setSplits + batched @@ -356,6 +360,7 @@ describe('prepareDripListUpdate', () => { name: 'New Name', isVisible: mockExistingDripList.isVisible, // from existing description: mockExistingDripList.description, // from existing + allowExternalDonations: true, }); }); @@ -385,6 +390,117 @@ describe('prepareDripListUpdate', () => { batchedTxOverrides: {gasLimit: 500000n}, }); }); + + it('should set allowExternalDonations to false when deadline receiver refund account matches owner', async () => { + // Arrange + const ownerAccountId = BigInt(mockExistingDripList.owner.accountId); + const deadlineMetadataReceivers = [ + { + type: 'deadline' as const, + accountId: '123', + weight: 500000, + deadline: new Date('2025-12-31'), + claimableProject: { + accountId: '789', + source: { + forge: 'github' as const, + repoName: 'test-repo', + ownerName: 'test-owner', + url: 'https://github.com/test-owner/test-repo', + }, + }, + recipientAccountId: '456', + refundAccountId: ownerAccountId.toString(), + }, + { + type: 'address' as const, + accountId: '456', + weight: 500000, + }, + ]; + vi.mocked(parseSplitsReceivers).mockResolvedValue({ + onChain: mockOnChainReceivers, + metadata: deadlineMetadataReceivers, + }); + + // Act + const result = await prepareDripListUpdate( + mockAdapter, + mockIpfsMetadataUploader, + validConfig, + mockGraphqlClient, + ); + + // Assert + expect(result.allowExternalDonations).toBe(false); + expect(buildDripListMetadata).toHaveBeenCalledWith( + expect.objectContaining({ + allowExternalDonations: false, + }), + ); + }); + + it('should set allowExternalDonations to true when no deadline receivers', async () => { + // Act + const result = await prepareDripListUpdate( + mockAdapter, + mockIpfsMetadataUploader, + validConfig, + mockGraphqlClient, + ); + + // Assert + expect(result.allowExternalDonations).toBe(true); + }); + + it('should set allowExternalDonations to true when deadline receiver refund account does not match owner', async () => { + // Arrange + const differentAccountId = 9999n; + const deadlineMetadataReceivers = [ + { + type: 'deadline' as const, + accountId: '123', + weight: 500000, + deadline: new Date('2025-12-31'), + claimableProject: { + accountId: '789', + source: { + forge: 'github' as const, + repoName: 'test-repo', + ownerName: 'test-owner', + url: 'https://github.com/test-owner/test-repo', + }, + }, + recipientAccountId: '456', + refundAccountId: differentAccountId.toString(), + }, + { + type: 'address' as const, + accountId: '456', + weight: 500000, + }, + ]; + vi.mocked(parseSplitsReceivers).mockResolvedValue({ + onChain: mockOnChainReceivers, + metadata: deadlineMetadataReceivers, + }); + + // Act + const result = await prepareDripListUpdate( + mockAdapter, + mockIpfsMetadataUploader, + validConfig, + mockGraphqlClient, + ); + + // Assert + expect(result.allowExternalDonations).toBe(true); + expect(buildDripListMetadata).toHaveBeenCalledWith( + expect.objectContaining({ + allowExternalDonations: true, + }), + ); + }); }); describe('error handling', () => { diff --git a/tests/unit/dripLists/updateDripList.test.ts b/tests/unit/dripLists/updateDripList.test.ts index cb6be1a1..4e41e29f 100644 --- a/tests/unit/dripLists/updateDripList.test.ts +++ b/tests/unit/dripLists/updateDripList.test.ts @@ -70,6 +70,7 @@ describe('updateDripList', () => { data: '0xdata' as const, abiFunctionName: 'updateDripList' as const, }, + allowExternalDonations: true, }; const mockTxResponse: TxResponse = { @@ -305,6 +306,7 @@ describe('updateDripList', () => { data: '0xcustomdata' as const, abiFunctionName: 'customUpdateDripList' as const, }, + allowExternalDonations: true, }; vi.mocked(prepareDripListUpdate).mockResolvedValue(customPrepareResult); @@ -607,6 +609,7 @@ describe('updateDripList', () => { data: '0x' as const, abiFunctionName: 'updateDripList' as const, }, + allowExternalDonations: true, }; vi.mocked(prepareDripListUpdate).mockResolvedValue(minimalPrepareResult); @@ -645,6 +648,7 @@ describe('updateDripList', () => { data: `0x${'f'.repeat(1000)}` as const, abiFunctionName: 'updateDripList' as const, }, + allowExternalDonations: true, }; vi.mocked(prepareDripListUpdate).mockResolvedValue(largePrepareResult); diff --git a/tests/unit/shared/calcDeadlineDriverAccountId.test.ts b/tests/unit/shared/calcDeadlineDriverAccountId.test.ts new file mode 100644 index 00000000..643aa1dd --- /dev/null +++ b/tests/unit/shared/calcDeadlineDriverAccountId.test.ts @@ -0,0 +1,569 @@ +import {describe, it, expect, vi, beforeEach} from 'vitest'; +import {calcDeadlineDriverAccountId} from '../../../src/internal/shared/calcDeadlineDriverAccountId'; +import {DripsError} from '../../../src/internal/shared/DripsError'; +import type {ReadBlockchainAdapter} from '../../../src/internal/blockchain/BlockchainAdapter'; + +vi.mock('../../../src/internal/shared/assertions', () => ({ + requireSupportedChain: vi.fn(), +})); + +vi.mock('viem', async () => { + const actual = await vi.importActual('viem'); + return { + ...actual, + decodeFunctionResult: vi.fn(), + }; +}); + +vi.mock('../../../src/internal/shared/buildTx', () => ({ + buildTx: vi.fn(), +})); + +import {requireSupportedChain} from '../../../src/internal/shared/assertions'; +import {decodeFunctionResult} from 'viem'; +import {buildTx} from '../../../src/internal/shared/buildTx'; + +describe('calcDeadlineDriverAccountId', () => { + const mockAdapter: ReadBlockchainAdapter = { + call: vi.fn(), + getChainId: vi.fn(), + }; + + const validParams = { + repoAccountId: 123456789n, + recipientAccountId: 987654321n, + refundAccountId: 111222333n, + deadlineSeconds: 1735689600, + }; + + const mockTxData = { + to: '0x4e576318213e3c9b436d0758a021a485c5d8b929' as const, + data: '0xcalcaccountdata' as const, + abiFunctionName: 'calcAccountId' as const, + }; + + const mockEncodedResult = '0xencodedresult' as const; + const mockAccountId = 444555666n; + + beforeEach(() => { + vi.clearAllMocks(); + vi.mocked(mockAdapter.getChainId).mockResolvedValue(11155111); + vi.mocked(requireSupportedChain).mockImplementation(() => {}); + vi.mocked(buildTx).mockReturnValue(mockTxData); + vi.mocked(mockAdapter.call).mockResolvedValue(mockEncodedResult); + vi.mocked(decodeFunctionResult).mockReturnValue(mockAccountId); + }); + + describe('successful execution', () => { + it('should calculate deadline driver account ID successfully', async () => { + const result = await calcDeadlineDriverAccountId( + mockAdapter, + validParams, + ); + + expect(mockAdapter.getChainId).toHaveBeenCalled(); + expect(requireSupportedChain).toHaveBeenCalledWith(11155111); + expect(buildTx).toHaveBeenCalledWith({ + abi: expect.any(Array), + contract: '0x4e576318213e3c9b436d0758a021a485c5d8b929', + functionName: 'calcAccountId', + args: [ + validParams.repoAccountId, + validParams.recipientAccountId, + validParams.refundAccountId, + validParams.deadlineSeconds, + ], + }); + expect(mockAdapter.call).toHaveBeenCalledWith(mockTxData); + expect(decodeFunctionResult).toHaveBeenCalledWith({ + abi: expect.any(Array), + functionName: 'calcAccountId', + data: mockEncodedResult, + }); + expect(result).toBe(mockAccountId); + }); + + it('should work with different adapters', async () => { + const customAdapter: ReadBlockchainAdapter = { + call: vi.fn().mockResolvedValue(mockEncodedResult), + getChainId: vi.fn().mockResolvedValue(11155111), + }; + + const result = await calcDeadlineDriverAccountId( + customAdapter, + validParams, + ); + + expect(customAdapter.getChainId).toHaveBeenCalled(); + expect(customAdapter.call).toHaveBeenCalledWith(mockTxData); + expect(mockAdapter.call).not.toHaveBeenCalled(); + expect(result).toBe(mockAccountId); + }); + + it('should work with different supported chains', async () => { + vi.mocked(mockAdapter.getChainId).mockResolvedValue(11155420); + const mainnetTxData = { + to: '0xE57A3111414E0FaB39cc6e8fDe957b1f6471cd49' as const, + data: '0xcalcaccountdata' as const, + abiFunctionName: 'calcAccountId' as const, + }; + vi.mocked(buildTx).mockReturnValue(mainnetTxData); + + await calcDeadlineDriverAccountId(mockAdapter, validParams); + + expect(mockAdapter.getChainId).toHaveBeenCalled(); + expect(requireSupportedChain).toHaveBeenCalledWith(11155420); + expect(buildTx).toHaveBeenCalledWith({ + abi: expect.any(Array), + contract: '0xE57A3111414E0FaB39cc6e8fDe957b1f6471cd49', + functionName: 'calcAccountId', + args: [ + validParams.repoAccountId, + validParams.recipientAccountId, + validParams.refundAccountId, + validParams.deadlineSeconds, + ], + }); + }); + + it('should work with localhost chain', async () => { + vi.mocked(mockAdapter.getChainId).mockResolvedValue(31337); + const localhostTxData = { + to: '0xFD9Aa049A4f3dC1a2CD3355Ce52A943418Fa54e3' as const, + data: '0xcalcaccountdata' as const, + abiFunctionName: 'calcAccountId' as const, + }; + vi.mocked(buildTx).mockReturnValue(localhostTxData); + + await calcDeadlineDriverAccountId(mockAdapter, validParams); + + expect(buildTx).toHaveBeenCalledWith({ + abi: expect.any(Array), + contract: '0xFD9Aa049A4f3dC1a2CD3355Ce52A943418Fa54e3', + functionName: 'calcAccountId', + args: [ + validParams.repoAccountId, + validParams.recipientAccountId, + validParams.refundAccountId, + validParams.deadlineSeconds, + ], + }); + }); + + it('should handle different account IDs', async () => { + const customParams = { + repoAccountId: 111n, + recipientAccountId: 222n, + refundAccountId: 333n, + deadlineSeconds: 1735689600, + }; + + await calcDeadlineDriverAccountId(mockAdapter, customParams); + + expect(buildTx).toHaveBeenCalledWith({ + abi: expect.any(Array), + contract: '0x4e576318213e3c9b436d0758a021a485c5d8b929', + functionName: 'calcAccountId', + args: [ + customParams.repoAccountId, + customParams.recipientAccountId, + customParams.refundAccountId, + customParams.deadlineSeconds, + ], + }); + }); + + it('should handle different deadline values', async () => { + const customParams = { + ...validParams, + deadlineSeconds: 1893456000, + }; + + await calcDeadlineDriverAccountId(mockAdapter, customParams); + + expect(buildTx).toHaveBeenCalledWith({ + abi: expect.any(Array), + contract: expect.any(String), + functionName: 'calcAccountId', + args: [ + customParams.repoAccountId, + customParams.recipientAccountId, + customParams.refundAccountId, + 1893456000, + ], + }); + }); + + it('should return different account IDs', async () => { + const customAccountId = 999888777n; + vi.mocked(decodeFunctionResult).mockReturnValue(customAccountId); + + const result = await calcDeadlineDriverAccountId( + mockAdapter, + validParams, + ); + + expect(result).toBe(customAccountId); + }); + }); + + describe('error handling', () => { + it('should propagate getChainId errors', async () => { + const chainIdError = new Error('Failed to get chain ID'); + vi.mocked(mockAdapter.getChainId).mockRejectedValue(chainIdError); + + await expect( + calcDeadlineDriverAccountId(mockAdapter, validParams), + ).rejects.toThrow(chainIdError); + expect(requireSupportedChain).not.toHaveBeenCalled(); + expect(buildTx).not.toHaveBeenCalled(); + expect(mockAdapter.call).not.toHaveBeenCalled(); + }); + + it('should propagate chain validation errors', async () => { + const chainError = new DripsError('Unsupported chain ID: 999'); + vi.mocked(requireSupportedChain).mockImplementation(() => { + throw chainError; + }); + + await expect( + calcDeadlineDriverAccountId(mockAdapter, validParams), + ).rejects.toThrow(chainError); + expect(mockAdapter.getChainId).toHaveBeenCalled(); + expect(buildTx).not.toHaveBeenCalled(); + expect(mockAdapter.call).not.toHaveBeenCalled(); + }); + + it('should propagate transaction building errors', async () => { + const buildError = new Error('Failed to build transaction'); + vi.mocked(buildTx).mockImplementation(() => { + throw buildError; + }); + + await expect( + calcDeadlineDriverAccountId(mockAdapter, validParams), + ).rejects.toThrow(buildError); + expect(requireSupportedChain).toHaveBeenCalled(); + expect(mockAdapter.call).not.toHaveBeenCalled(); + }); + + it('should propagate adapter call errors', async () => { + const callError = new Error('Blockchain call failed'); + vi.mocked(mockAdapter.call).mockRejectedValue(callError); + + await expect( + calcDeadlineDriverAccountId(mockAdapter, validParams), + ).rejects.toThrow(callError); + expect(requireSupportedChain).toHaveBeenCalled(); + expect(buildTx).toHaveBeenCalled(); + expect(decodeFunctionResult).not.toHaveBeenCalled(); + }); + + it('should propagate decoding errors', async () => { + const decodeError = new Error('Failed to decode function result'); + vi.mocked(decodeFunctionResult).mockImplementation(() => { + throw decodeError; + }); + + await expect( + calcDeadlineDriverAccountId(mockAdapter, validParams), + ).rejects.toThrow(decodeError); + expect(requireSupportedChain).toHaveBeenCalled(); + expect(buildTx).toHaveBeenCalled(); + expect(mockAdapter.call).toHaveBeenCalled(); + }); + + it('should handle network errors', async () => { + const networkError = new Error('Network connection failed'); + vi.mocked(mockAdapter.call).mockRejectedValue(networkError); + + await expect( + calcDeadlineDriverAccountId(mockAdapter, validParams), + ).rejects.toThrow(networkError); + }); + }); + + describe('edge cases', () => { + it('should handle zero account ID result', async () => { + vi.mocked(decodeFunctionResult).mockReturnValue(0n); + + const result = await calcDeadlineDriverAccountId( + mockAdapter, + validParams, + ); + + expect(result).toBe(0n); + }); + + it('should handle very large account ID result', async () => { + const largeAccountId = BigInt( + '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', + ); + vi.mocked(decodeFunctionResult).mockReturnValue(largeAccountId); + + const result = await calcDeadlineDriverAccountId( + mockAdapter, + validParams, + ); + + expect(result).toBe(largeAccountId); + }); + + it('should handle zero deadline seconds', async () => { + const zeroDeadlineParams = { + ...validParams, + deadlineSeconds: 0, + }; + + await calcDeadlineDriverAccountId(mockAdapter, zeroDeadlineParams); + + expect(buildTx).toHaveBeenCalledWith( + expect.objectContaining({ + args: [ + validParams.repoAccountId, + validParams.recipientAccountId, + validParams.refundAccountId, + 0, + ], + }), + ); + }); + + it('should handle maximum safe deadline seconds', async () => { + const maxDeadlineParams = { + ...validParams, + deadlineSeconds: 2147483647, + }; + + await calcDeadlineDriverAccountId(mockAdapter, maxDeadlineParams); + + expect(buildTx).toHaveBeenCalledWith( + expect.objectContaining({ + args: [ + validParams.repoAccountId, + validParams.recipientAccountId, + validParams.refundAccountId, + 2147483647, + ], + }), + ); + }); + + it('should handle same account IDs for all parameters', async () => { + const sameIdParams = { + repoAccountId: 123456n, + recipientAccountId: 123456n, + refundAccountId: 123456n, + deadlineSeconds: 1735689600, + }; + + await calcDeadlineDriverAccountId(mockAdapter, sameIdParams); + + expect(buildTx).toHaveBeenCalledWith( + expect.objectContaining({ + args: [123456n, 123456n, 123456n, 1735689600], + }), + ); + }); + + it('should handle zero account IDs', async () => { + const zeroIdParams = { + repoAccountId: 0n, + recipientAccountId: 0n, + refundAccountId: 0n, + deadlineSeconds: 1735689600, + }; + + await calcDeadlineDriverAccountId(mockAdapter, zeroIdParams); + + expect(buildTx).toHaveBeenCalledWith( + expect.objectContaining({ + args: [0n, 0n, 0n, 1735689600], + }), + ); + }); + }); + + describe('function call order', () => { + it('should call functions in correct order', async () => { + const callOrder: string[] = []; + vi.mocked(mockAdapter.getChainId).mockImplementation(async () => { + callOrder.push('adapter.getChainId'); + return 11155111; + }); + vi.mocked(requireSupportedChain).mockImplementation(() => { + callOrder.push('requireSupportedChain'); + }); + vi.mocked(buildTx).mockImplementation(() => { + callOrder.push('buildTx'); + return mockTxData; + }); + vi.mocked(mockAdapter.call).mockImplementation(async () => { + callOrder.push('adapter.call'); + return mockEncodedResult; + }); + vi.mocked(decodeFunctionResult).mockImplementation(() => { + callOrder.push('decodeFunctionResult'); + return mockAccountId; + }); + + await calcDeadlineDriverAccountId(mockAdapter, validParams); + + expect(callOrder).toEqual([ + 'adapter.getChainId', + 'requireSupportedChain', + 'buildTx', + 'adapter.call', + 'decodeFunctionResult', + ]); + }); + + it('should not call subsequent functions if chain validation fails', async () => { + vi.mocked(requireSupportedChain).mockImplementation(() => { + throw new Error('Chain validation failed'); + }); + + await expect( + calcDeadlineDriverAccountId(mockAdapter, validParams), + ).rejects.toThrow('Chain validation failed'); + expect(buildTx).not.toHaveBeenCalled(); + expect(mockAdapter.call).not.toHaveBeenCalled(); + expect(decodeFunctionResult).not.toHaveBeenCalled(); + }); + }); + + describe('parameter validation', () => { + it('should use correct contract address for each chain', async () => { + vi.mocked(mockAdapter.getChainId).mockResolvedValue(11155111); + await calcDeadlineDriverAccountId(mockAdapter, {...validParams}); + expect(buildTx).toHaveBeenLastCalledWith( + expect.objectContaining({ + contract: '0x4e576318213e3c9b436d0758a021a485c5d8b929', + }), + ); + + vi.mocked(mockAdapter.getChainId).mockResolvedValue(11155420); + const opSepoliaTxData = { + to: '0xE57A3111414E0FaB39cc6e8fDe957b1f6471cd49' as const, + data: '0xcalcaccountdata' as const, + abiFunctionName: 'calcAccountId' as const, + }; + vi.mocked(buildTx).mockReturnValue(opSepoliaTxData); + await calcDeadlineDriverAccountId(mockAdapter, {...validParams}); + expect(buildTx).toHaveBeenLastCalledWith( + expect.objectContaining({ + contract: '0xE57A3111414E0FaB39cc6e8fDe957b1f6471cd49', + }), + ); + + vi.mocked(mockAdapter.getChainId).mockResolvedValue(31337); + const localhostTxData = { + to: '0xFD9Aa049A4f3dC1a2CD3355Ce52A943418Fa54e3' as const, + data: '0xcalcaccountdata' as const, + abiFunctionName: 'calcAccountId' as const, + }; + vi.mocked(buildTx).mockReturnValue(localhostTxData); + await calcDeadlineDriverAccountId(mockAdapter, {...validParams}); + expect(buildTx).toHaveBeenLastCalledWith( + expect.objectContaining({ + contract: '0xFD9Aa049A4f3dC1a2CD3355Ce52A943418Fa54e3', + }), + ); + }); + + it('should pass correct function name and arguments', async () => { + await calcDeadlineDriverAccountId(mockAdapter, validParams); + + expect(buildTx).toHaveBeenCalledWith({ + abi: expect.any(Array), + contract: expect.any(String), + functionName: 'calcAccountId', + args: [ + validParams.repoAccountId, + validParams.recipientAccountId, + validParams.refundAccountId, + validParams.deadlineSeconds, + ], + }); + + expect(decodeFunctionResult).toHaveBeenCalledWith({ + abi: expect.any(Array), + functionName: 'calcAccountId', + data: mockEncodedResult, + }); + }); + }); + + describe('integration scenarios', () => { + it('should work across different supported chains', async () => { + const supportedChains = [11155420, 11155111, 31337, 314, 1088, 10]; + const expectedContracts = [ + '0xE57A3111414E0FaB39cc6e8fDe957b1f6471cd49', + '0x4e576318213e3c9b436d0758a021a485c5d8b929', + '0xFD9Aa049A4f3dC1a2CD3355Ce52A943418Fa54e3', + '0x0386b66e2b0106ff27ef26e84102ca78a5c0edef', + '0x0386b66e2b0106ff27ef26e84102ca78a5c0edef', + '0x0386b66e2b0106ff27ef26e84102ca78a5c0edef', + ]; + + for (let i = 0; i < supportedChains.length; i++) { + const chainId = supportedChains[i]; + const expectedContract = expectedContracts[i]; + + vi.mocked(mockAdapter.getChainId).mockResolvedValue(chainId); + const chainTxData = { + to: expectedContract as `0x${string}`, + data: '0xcalcaccountdata' as `0x${string}`, + abiFunctionName: 'calcAccountId' as const, + }; + vi.mocked(buildTx).mockReturnValue(chainTxData); + + await calcDeadlineDriverAccountId(mockAdapter, validParams); + + expect(buildTx).toHaveBeenCalledWith( + expect.objectContaining({ + contract: expectedContract, + }), + ); + } + }); + + it('should handle realistic parameter combinations', async () => { + const realisticScenarios = [ + { + repoAccountId: 123456789012345n, + recipientAccountId: 987654321098765n, + refundAccountId: 111222333444555n, + deadlineSeconds: 1735689600, + }, + { + repoAccountId: 1n, + recipientAccountId: 2n, + refundAccountId: 3n, + deadlineSeconds: 1893456000, + }, + { + repoAccountId: BigInt('0xffffffffffffffff'), + recipientAccountId: BigInt('0xeeeeeeeeeeeeeeee'), + refundAccountId: BigInt('0xdddddddddddddddd'), + deadlineSeconds: 2147483647, + }, + ]; + + for (const scenario of realisticScenarios) { + await calcDeadlineDriverAccountId(mockAdapter, scenario); + + expect(buildTx).toHaveBeenCalledWith( + expect.objectContaining({ + args: [ + scenario.repoAccountId, + scenario.recipientAccountId, + scenario.refundAccountId, + scenario.deadlineSeconds, + ], + }), + ); + } + }); + }); +}); diff --git a/tests/unit/shared/receiverUtils.test.ts b/tests/unit/shared/receiverUtils.test.ts index 536256e3..0d5e4159 100644 --- a/tests/unit/shared/receiverUtils.test.ts +++ b/tests/unit/shared/receiverUtils.test.ts @@ -6,12 +6,14 @@ import {SdkSplitsReceiver} from '../../../src/internal/shared/receiverUtils'; import {calcProjectId} from '../../../src/internal/projects/calcProjectId'; import {destructProjectUrl} from '../../../src/internal/projects/destructProjectUrl'; import {calcAddressId} from '../../../src/internal/shared/calcAddressId'; +import {calcDeadlineDriverAccountId} from '../../../src/internal/shared/calcDeadlineDriverAccountId'; import {DripsError} from '../../../src/internal/shared/DripsError'; import {DripList} from '../../../src/internal/drip-lists/getDripListById'; vi.mock('../../../src/internal/projects/calcProjectId'); vi.mock('../../../src/internal/projects/destructProjectUrl'); vi.mock('../../../src/internal/shared/calcAddressId'); +vi.mock('../../../src/internal/shared/calcDeadlineDriverAccountId'); describe('receiverUtils', () => { let mockAdapter: ReadBlockchainAdapter; @@ -217,6 +219,72 @@ describe('receiverUtils', () => { }); }); + describe('resolveDeadlineAccount', () => { + it('should resolve deadline account with project receiver', async () => { + const mockUrl = 'https://github.com/owner/repo'; + const mockDeadline = new Date(Date.now() + 365 * 24 * 60 * 60 * 1000); + const mockRefundAddress = + '0x1234567890123456789012345678901234567890' as Address; + const mockDestructured = { + forge: 'github' as const, + ownerName: 'owner', + repoName: 'repo', + }; + const mockRepoAccountId = 987n; + const mockRefundAccountId = 654n; + const mockDeadlineAccountId = 321n; + const expectedDeadlineSeconds = Math.floor(mockDeadline.getTime() / 1000); + + vi.mocked(destructProjectUrl).mockReturnValue(mockDestructured); + vi.mocked(calcProjectId).mockResolvedValue(mockRepoAccountId); + vi.mocked(calcAddressId).mockResolvedValue(mockRefundAccountId); + vi.mocked(calcDeadlineDriverAccountId).mockResolvedValue( + mockDeadlineAccountId, + ); + + const result = await receiverUtils.resolveDeadlineAccount( + mockAdapter, + { + type: 'project', + url: mockUrl, + }, + { + deadline: mockDeadline, + refundAddress: mockRefundAddress, + }, + ); + + expect(result).toEqual({ + deadlineAccountId: mockDeadlineAccountId, + repoAccountId: mockRepoAccountId, + refundAccountId: mockRefundAccountId, + deadlineSeconds: expectedDeadlineSeconds, + source: { + forge: 'github', + ownerName: 'owner', + repoName: 'repo', + url: mockUrl, + }, + }); + + expect(destructProjectUrl).toHaveBeenCalledWith(mockUrl); + expect(calcProjectId).toHaveBeenCalledWith(mockAdapter, { + forge: mockDestructured.forge, + name: `${mockDestructured.ownerName}/${mockDestructured.repoName}`, + }); + expect(calcAddressId).toHaveBeenCalledWith( + mockAdapter, + mockRefundAddress, + ); + expect(calcDeadlineDriverAccountId).toHaveBeenCalledWith(mockAdapter, { + repoAccountId: mockRepoAccountId, + recipientAccountId: mockRepoAccountId, + refundAccountId: mockRefundAccountId, + deadlineSeconds: expectedDeadlineSeconds, + }); + }); + }); + describe('parseSplitsReceivers', () => { beforeEach(() => { vi.mocked(destructProjectUrl).mockImplementation((url: string) => { @@ -730,4 +798,72 @@ describe('receiverUtils', () => { }); }); }); + + describe('parseSplitsReceivers with deadline config', () => { + beforeEach(() => { + vi.mocked(destructProjectUrl).mockReturnValue({ + forge: 'github' as const, + ownerName: 'owner', + repoName: 'repo', + }); + vi.mocked(calcProjectId).mockResolvedValue(123n); + vi.mocked(calcAddressId).mockResolvedValue(456n); + vi.mocked(calcDeadlineDriverAccountId).mockResolvedValue(789n); + }); + + it('should process project receivers with deadline config', async () => { + const receivers: SdkSplitsReceiver[] = [ + { + type: 'project', + url: 'https://github.com/owner/repo', + weight: 1000000, + }, + ]; + + const deadlineConfig = { + deadline: new Date('2025-12-31'), + refundAddress: '0x1234567890123456789012345678901234567890' as Address, + }; + + const result = await receiverUtils.parseSplitsReceivers( + mockAdapter, + receivers, + {deadlineConfig}, + ); + + expect(result.onChain).toHaveLength(1); + expect(result.metadata).toHaveLength(1); + expect(result.onChain[0].accountId).toBe(789n); + expect(result.metadata[0].type).toBe('deadline'); + }); + + it('should handle mixed receivers with deadline config', async () => { + const receivers: SdkSplitsReceiver[] = [ + { + type: 'project', + url: 'https://github.com/owner/repo', + weight: 500000, + }, + { + type: 'drip-list', + accountId: 999n, + weight: 500000, + }, + ]; + + const deadlineConfig = { + deadline: new Date('2025-12-31'), + refundAddress: '0x1234567890123456789012345678901234567890' as Address, + }; + + const result = await receiverUtils.parseSplitsReceivers( + mockAdapter, + receivers, + {deadlineConfig}, + ); + + expect(result.onChain).toHaveLength(2); + expect(result.metadata).toHaveLength(2); + }); + }); }); diff --git a/tests/unit/shared/resolveDriverName.test.ts b/tests/unit/shared/resolveDriverName.test.ts index 923a6817..a5620129 100644 --- a/tests/unit/shared/resolveDriverName.test.ts +++ b/tests/unit/shared/resolveDriverName.test.ts @@ -63,6 +63,18 @@ describe('resolveDriverName', () => { expect(result).toBe('repoSubAccount'); }); + it('should return "repoDeadline" for driver ID 5', () => { + // Arrange + const driverBits = 5n; + const accountId = driverBits << 224n; + + // Act + const result = resolveDriverName(accountId); + + // Assert + expect(result).toBe('repoDeadline'); + }); + it('should correctly identify driver type regardless of other bits', () => { // Arrange - Set all bits except the driver ID bits const driverBits = 2n; // immutableSplits @@ -100,8 +112,8 @@ describe('resolveDriverName', () => { }); it('should throw error for unknown driver ID', () => { - // Arrange - Use a driver ID that doesn't exist (5) - const driverBits = 5n; + // Arrange - Use a driver ID that doesn't exist (6) + const driverBits = 6n; const accountId = driverBits << 224n; // Act & Assert @@ -163,13 +175,14 @@ describe('resolveDriverName', () => { describe('bit manipulation correctness', () => { it('should correctly extract driver ID bits', () => { // Test each valid driver ID - const driverIds = [0n, 1n, 2n, 3n, 4n]; + const driverIds = [0n, 1n, 2n, 3n, 4n, 5n]; const expectedNames = [ 'address', 'nft', 'immutableSplits', 'repo', 'repoSubAccount', + 'repoDeadline', ]; for (let i = 0; i < driverIds.length; i++) { @@ -245,6 +258,7 @@ describe('resolveDriverName', () => { 2n << 224n, // immutableSplits 3n << 224n, // repo 4n << 224n, // repoSubAccount + 5n << 224n, // repoDeadline ]; const expected = [ 'address', @@ -252,6 +266,7 @@ describe('resolveDriverName', () => { 'immutableSplits', 'repo', 'repoSubAccount', + 'repoDeadline', ]; // Act diff --git a/tests/unit/shared/toDeadlineSeconds.test.ts b/tests/unit/shared/toDeadlineSeconds.test.ts new file mode 100644 index 00000000..e1e2c31a --- /dev/null +++ b/tests/unit/shared/toDeadlineSeconds.test.ts @@ -0,0 +1,65 @@ +import {describe, it, expect} from 'vitest'; +import {toDeadlineSeconds} from '../../../src/internal/shared/toDeadlineSeconds'; +import {DripsError} from '../../../src/internal/shared/DripsError'; + +describe('toDeadlineSeconds', () => { + it('should convert a valid future date to seconds', () => { + const futureDate = new Date(Date.now() + 86400000); // 1 day in the future + const result = toDeadlineSeconds(futureDate); + const expected = Math.floor(futureDate.getTime() / 1000); + + expect(result).toBe(expected); + }); + + it('should throw error when deadline is not a Date instance', () => { + expect(() => toDeadlineSeconds('invalid' as any)).toThrow(DripsError); + expect(() => toDeadlineSeconds('invalid' as any)).toThrow( + 'Deadline must be a valid Date.', + ); + }); + + it('should throw error when deadline is an invalid Date', () => { + const invalidDate = new Date('invalid'); + + expect(() => toDeadlineSeconds(invalidDate)).toThrow(DripsError); + expect(() => toDeadlineSeconds(invalidDate)).toThrow( + 'Deadline must be a valid Date.', + ); + }); + + it('should throw error when deadline is before Unix epoch', () => { + const beforeEpoch = new Date(-1000); + + expect(() => toDeadlineSeconds(beforeEpoch)).toThrow(DripsError); + expect(() => toDeadlineSeconds(beforeEpoch)).toThrow( + 'Deadline must not be before Unix epoch.', + ); + }); + + it('should throw error when deadline is in the past', () => { + const pastDate = new Date(Date.now() - 1000); + + expect(() => toDeadlineSeconds(pastDate)).toThrow(DripsError); + expect(() => toDeadlineSeconds(pastDate)).toThrow( + 'Deadline must be in the future.', + ); + }); + + it('should throw error when deadline is now', () => { + const now = new Date(Math.floor(Date.now() / 1000) * 1000); + + expect(() => toDeadlineSeconds(now)).toThrow(DripsError); + expect(() => toDeadlineSeconds(now)).toThrow( + 'Deadline must be in the future.', + ); + }); + + it('should throw error when deadline exceeds UINT32_MAX', () => { + const farFuture = new Date((0xffffffff + 1) * 1000); + + expect(() => toDeadlineSeconds(farFuture)).toThrow(DripsError); + expect(() => toDeadlineSeconds(farFuture)).toThrow( + 'Deadline exceeds supported range.', + ); + }); +});