@zebec-network/evm-card-sdk
Version:
An sdk for interacting with zebec card evm contracts
1,225 lines • 92.5 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "ZebecCard",
"sourceName": "contracts/ZebecCard.sol",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "target",
"type": "address"
}
],
"name": "AddressEmptyCode",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "AddressInsufficientBalance",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "ERC1967InvalidImplementation",
"type": "error"
},
{
"inputs": [],
"name": "ERC1967NonPayable",
"type": "error"
},
{
"inputs": [],
"name": "FailedInnerCall",
"type": "error"
},
{
"inputs": [],
"name": "InvalidInitialization",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "requiredBalance",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "currentBalance",
"type": "uint256"
}
],
"name": "NotEnoughBalance",
"type": "error"
},
{
"inputs": [],
"name": "NotInitializing",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "OwnableInvalidOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "OwnableUnauthorizedAccount",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "SafeERC20FailedOperation",
"type": "error"
},
{
"inputs": [],
"name": "UUPSUnauthorizedCallContext",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "slot",
"type": "bytes32"
}
],
"name": "UUPSUnsupportedProxiableUUID",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "string",
"name": "cardType",
"type": "string"
},
{
"indexed": false,
"internalType": "string",
"name": "userEmail",
"type": "string"
},
{
"indexed": false,
"internalType": "uint256",
"name": "purchasedAt",
"type": "uint256"
}
],
"name": "CardPurchased",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "Deposited",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint64",
"name": "version",
"type": "uint64"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "srcToken",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "spentAmount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "returnAmount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "feeAmount",
"type": "uint256"
}
],
"name": "Swapped",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "Upgraded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "withdrawnAmount",
"type": "uint256"
}
],
"name": "WithdrawYield",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "withdrawnAmount",
"type": "uint256"
}
],
"name": "Withdrawn",
"type": "event"
},
{
"inputs": [],
"name": "UPGRADE_INTERFACE_VERSION",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "aavePool",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "string",
"name": "cardType",
"type": "string"
},
{
"internalType": "string",
"name": "userEmail",
"type": "string"
}
],
"name": "buyCard",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "string",
"name": "cardType",
"type": "string"
},
{
"internalType": "string",
"name": "userEmail",
"type": "string"
}
],
"name": "buyCardDirect",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "cardBalances",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "cardConfig",
"outputs": [
{
"internalType": "uint256",
"name": "nativeFee",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "nonNativeFee",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "revenueFee",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "counter",
"type": "uint256"
},
{
"internalType": "address",
"name": "cardVault",
"type": "address"
},
{
"internalType": "address",
"name": "revenueVault",
"type": "address"
},
{
"internalType": "address",
"name": "commissionVault",
"type": "address"
},
{
"internalType": "address",
"name": "usdcAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "minCardAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxCardAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "dailyCardBuyLimit",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "cardPurchases",
"outputs": [
{
"internalType": "uint256",
"name": "unixInRecord",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "totalCardBoughtPerDay",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "depositUsdc",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "feeTiers",
"outputs": [
{
"internalType": "uint256",
"name": "minAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "fee",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "generateYield",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "tokenAddress",
"type": "address"
}
],
"name": "getCustomTokenFee",
"outputs": [
{
"internalType": "uint256",
"name": "customizedFee",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "getFee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getFeeTiers",
"outputs": [
{
"components": [
{
"internalType": "uint256",
"name": "minAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "fee",
"type": "uint256"
}
],
"internalType": "struct ZebecCard.FeeTier[]",
"name": "",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getReloadableFee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "nativeFee",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "nonNativeFee",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "revenueFee",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "counter",
"type": "uint256"
},
{
"internalType": "address",
"name": "cardVault",
"type": "address"
},
{
"internalType": "address",
"name": "revenueVault",
"type": "address"
},
{
"internalType": "address",
"name": "commissionVault",
"type": "address"
},
{
"internalType": "address",
"name": "usdcAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "minCardAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxCardAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "dailyCardBuyLimit",
"type": "uint256"
}
],
"internalType": "struct ZebecCard.CardConfig",
"name": "card_config",
"type": "tuple"
},
{
"components": [
{
"internalType": "uint256",
"name": "minAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "fee",
"type": "uint256"
}
],
"internalType": "struct ZebecCard.FeeTier[]",
"name": "fee_tiers",
"type": "tuple[]"
},
{
"internalType": "address",
"name": "inch_router",
"type": "address"
},
{
"internalType": "address",
"name": "weth",
"type": "address"
},
{
"internalType": "address",
"name": "zbc_token",
"type": "address"
},
{
"internalType": "address",
"name": "aave_pool",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "oneInchRouter",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"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": "reloadableFee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "cardVault",
"type": "address"
}
],
"name": "setCardVault",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "commissionVault",
"type": "address"
}
],
"name": "setComissionVault",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "tokenAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "customizedFee",
"type": "uint256"
}
],
"name": "setCustomTokenFee",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "dailyCardBuyLimit",
"type": "uint256"
}
],
"name": "setDailyCardBuyLimit",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "minAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "fee",
"type": "uint256"
}
],
"name": "setFee",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "minAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "fee",
"type": "uint256"
}
],
"internalType": "struct ZebecCard.FeeTier[]",
"name": "newTiers",
"type": "tuple[]"
}
],
"name": "setFeeArray",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "maxAmount",
"type": "uint256"
}
],
"name": "setMaxCardAmount",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "minAmount",
"type": "uint256"
}
],
"name": "setMinCardAmount",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "nativeFee",
"type": "uint256"
}
],
"name": "setNativeFee",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "nonNativeFee",
"type": "uint256"
}
],
"name": "setNonNativeFee",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "fee",
"type": "uint256"
}
],
"name": "setReloadableFee",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "revenueFee",
"type": "uint256"
}
],
"name": "setRevenueFee",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "revenueVault",
"type": "address"
}
],
"name": "setRevenueVault",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "usdcAddress",
"type": "address"
}
],
"name": "setUsdcAddress",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IAggregationExecutor",
"name": "executor",
"type": "address"
},
{
"components": [
{
"internalType": "contract IERC20",
"name": "srcToken",
"type": "address"
},
{
"internalType": "contract IERC20",
"name": "dstToken",
"type": "address"
},
{
"internalType": "address payable",
"name": "srcReceiver",
"type": "address"
},
{
"internalType": "address payable",
"name": "dstReceiver",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "minReturnAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "flags",
"type": "uint256"
}
],
"internalType": "struct IAggregationRouterV6.SwapDescription",
"name": "desc",
"type": "tuple"
},
{
"internalType": "bytes",
"name": "routeData",
"type": "bytes"
},
{
"internalType": "string",
"name": "cardType",
"type": "string"
},
{
"internalType": "string",
"name": "userEmail",
"type": "string"
}
],
"name": "swapAndBuy",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IAggregationExecutor",
"name": "executor",
"type": "address"
},
{
"components": [
{
"internalType": "contract IERC20",
"name": "srcToken",
"type": "address"
},
{
"internalType": "contract IERC20",
"name": "dstToken",
"type": "address"
},
{
"internalType": "address payable",
"name": "srcReceiver",
"type": "address"
},
{
"internalType": "address payable",
"name": "dstReceiver",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "minReturnAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "flags",
"type": "uint256"
}
],
"internalType": "struct IAggregationRouterV6.SwapDescription",
"name": "desc",
"type": "tuple"
},
{
"internalType": "bytes",
"name": "routeData",
"type": "bytes"
}
],
"name": "swapAndDeposit",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"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"
},
{
"inputs": [],
"name": "wEth",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "withdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "withdrawYield",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "zebecToken",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x60a0806040523461002a57306080526135b49081610030823960805181818161153201526115ec0152f35b600080fdfe6080604052600436101561001257600080fd5b6000803560e01c8063144354451461272d578063145096d5146122ec578063166dbb73146121b857806318aae52c1461185a5780631d4247ab14612179578063230ed44a1461212d5780632357928e14611fdb5780632661572414611b835780632e1a7d4d14611ac557806337cf533114611a3f578063444cc65914611a1c578063458e551e1461187857806346a842181461185a57806348455ff0146118375780634d68e925146117f85780634f1ef286146115ac57806352d1902d146115175780635b65b9ab146114015780636ca035d3146113ab5780636ca75e9514610fd957806371036a4914610d51578063715018a614610cd55780638da5cb5b14610c8f578063a03e4bc314610c68578063a53ebd8a14610a82578063a5b7ac7e14610a40578063ab31978f146105e5578063ac3af208146105be578063ad3cb1cc1461055c578063b0d097de14610539578063b573dca714610512578063b91a1e8f146104f0578063bea9c43e146104cd578063cdec976f14610436578063d38bcdee146103f7578063d895a46b146103b8578063df6d921214610391578063e591f2ff1461036e578063e9a4d24f14610279578063f076a84614610241578063f2fde38b146102145763fcee45f4146101eb57600080fd5b34610211576020366003190112610211576020610209600435612f8e565b604051908152f35b80fd5b50346102115760203660031901126102115761023e6102316127aa565b61023961302b565b612ef0565b80f35b50346102115760203660031901126102115760406020916001600160a01b036102686127aa565b168152601183522054604051908152f35b5034610211578060031936011261021157601254610296816127c0565b906102a46040519283612788565b8082526012835260209182810191847fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444845b83831061032e57505050506040519280840191818552518092526040840192945b8281106103045784840385f35b855180518552808301518584015260409081015190850152948101946060909301926001016102f7565b60038760019260409a9997989a5161034581612750565b8554815284860154838201526002860154604082015281520192019201919096949395966102d6565b50346102115760203660031901126102115761038861302b565b60043560015580f35b503461021157806003193601126102115760206001600160a01b03600c5416604051908152f35b5034610211576020366003190112610211576001600160a01b036103da6127aa565b6103e261302b565b166001600160a01b0319600454161760045580f35b5034610211576020366003190112610211576001600160a01b036104196127aa565b61042161302b565b166001600160a01b0319600754161760075580f35b5034610211576040366003190112610211576104506127aa565b61045861302b565b60405190604082019082821067ffffffffffffffff8311176104b7576001916040526001600160a01b03809116908184526020840191602435835285526014602052604085209351166001600160a01b03198454161783555191015580f35b634e487b7160e01b600052604160045260246000fd5b5034610211576020366003190112610211576104e761302b565b600435600a5580f35b50346102115760203660031901126102115761050a61302b565b600435815580f35b503461021157806003193601126102115760206001600160a01b03600d5416604051908152f35b50346102115760203660031901126102115761055361302b565b60043560095580f35b50346102115780600319360112610211576105ba60405161057c8161276c565b600581527f352e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190612a13565b0390f35b503461021157806003193601126102115760206001600160a01b03600b5416604051908152f35b503461021157602080600319360112610a3c5760043590610607331515612b8b565b610612821515612af5565b6001600160a01b039182600e541683600754166040519182917f35ea6a7500000000000000000000000000000000000000000000000000000000835260048301528160246101e09485935afa9081156108b657859287926108c1575b50506101000151163385526011835261069561068e8360408820546130e1565b9190612b40565b338087526011855260408088209290925590516323b872dd60e01b8152600481019190915230602482015260448101839052838160648189865af19081156108b6578691610899575b501561085557600e5460405163095ea7b360e01b81529085166001600160a01b03166004820152602481018390529190839083908188816044810103925af191821561084a57839261073791879161081d575b50612e74565b606484600e541694600754168660405196879485937f69328dec000000000000000000000000000000000000000000000000000000008552600485015260248401523060448401525af19182156108125783926107be575b507ff09b3678dd1b265d3e2d9f681481c92d1cdd81b6e19fa43651707dedf99263a8906040519283523392a280f35b9080925081813d831161080b575b6107d68183612788565b810103126108065751907ff09b3678dd1b265d3e2d9f681481c92d1cdd81b6e19fa43651707dedf99263a861078f565b600080fd5b503d6107cc565b6040513d85823e3d90fd5b61083d9150843d8611610843575b6108358183612788565b810190612c6c565b38610731565b503d61082b565b6040513d87823e3d90fd5b6064836040519062461bcd60e51b82526004820152601660248201527f61546f6b656e207472616e73666572206661696c6564000000000000000000006044820152fd5b6108b09150843d8611610843576108358183612788565b386106de565b6040513d88823e3d90fd5b8193508092503d8311610a35575b6108d98183612788565b810103818112610a2d576040519182019067ffffffffffffffff90838310828411176104b75786908360405212610a31576102008301908111828210176104b75760405282518152815261092e848301612ebf565b8482015261093e60408301612ebf565b604082015261094f60608301612ebf565b606082015261096060808301612ebf565b608082015261097160a08301612ebf565b60a082015260c082015164ffffffffff81168103610a2d5760c082015260e08201519061ffff82168203610a2d5785926101009260e0830152826109b6818301612edc565b908301526101206109c8818301612edc565b908301526101406109da818301612edc565b908301526101606109ec818301612edc565b908301526101806109fe818301612ebf565b908301526101a0610a10818301612ebf565b90830152610a226101c0809201612ebf565b90820152903861066e565b8680fd5b8780fd5b503d6108cf565b5080fd5b503461021157602036600319011261021157604080916001600160a01b03610a666127aa565b1681526010602052206001815491015482519182526020820152f35b503461021157610a91366129a6565b916001600160a01b03806007541690610aab331515612b8b565b60085483101580610c5c575b610ac090612d9c565b338652602060118152604087205490848210610c3e5792610bf692610bec610b3a9360108897610b4660408e610b3f8c6127107f7747419eb85d2a64ce5c3fd1bf01b54b47cdcfb621ac43741f8460d4f3ed40cb9f610b21610b2791612f8e565b83612a38565b0497610b3389836130fa565b9d90612b40565b6130fa565b9390612b40565b338152601184522055610b5a600354612de7565b6003558c89610b6842613165565b919091338552868652610b7e6040862054613165565b93919091149384610c34575b505082610c2a575b505015610c13575060016040610bbe92338152858552610bb78d8484842001546130e1565b9490612b40565b3381528585522001555b338d5252610be1600160408d200154600a541015612df6565b826005541684613113565b6004541690613113565b60035493610c0d6040519283923396429285612e41565b0390a380f35b906040600191338152858552204281550155610bc8565b1490503880610b92565b1492503880610b8a565b6044858360405191634787a10360e11b835260048301526024820152fd5b50600954831115610ab7565b503461021157806003193601126102115760206001600160a01b03600e5416604051908152f35b503461021157806003193601126102115760206001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b5034610211578060031936011261021157610cee61302b565b60006001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993008054906001600160a01b031982169055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461021157610d60366129a6565b916001600160a01b03806007541690610d7a331515612b8b565b60085483101580610fcd575b610d8f90612d9c565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201526020908181602481875afa908115610fc2578891610f95575b50848110610f7757508392610bf692610f2a610e9393610e147f7747419eb85d2a64ce5c3fd1bf01b54b47cdcfb621ac43741f8460d4f3ed40cb98612f8e565b5088604051610e3f838281610e3281830196878151938492016129f0565b8101038084520182612788565b519020604051828101906972656c6f616461626c6560b01b8252600a8152610e668161276c565b51902003610f61576010612710610e80600f545b8a612a38565b0491610e8c838a6130fa565b9790612b40565b610e9e600354612de7565b6003558c89610eac42613165565b919091338552868652610ec26040862054613165565b93919091149384610f57575b505082610f4d575b505015610f36575060016040610efb92338152858552610bb78d8484842001546130e1565b3381528585522001555b338d5252610f1e600160408d200154600a541015612df6565b8260055416338561308e565b6004541690339061308e565b906040600191338152858552204281550155610f05565b1490503880610ed6565b1492503880610ece565b6010612710610e80610f728a612f8e565b610e7a565b8460449160405191634787a10360e11b835260048301526024820152fd5b90508181813d8311610fbb575b610fac8183612788565b81010312610806575138610dd4565b503d610fa2565b6040513d8a823e3d90fd5b50600954831115610d86565b5061012036600319011261021157610fef6127aa565b90610ff9366128b5565b67ffffffffffffffff9290610104358481116113a75761101d90369060040161295f565b916001600160a01b039160209561103e848884015116856007541614612bd6565b61104f846060840151163014612c21565b838251169484600c541686141593608084019361106f855130338b61308e565b600b54855160405163095ea7b360e01b81529189166001600160a01b0316600483015260248201528a816044818d8d5af190811561139c57916110c6604094926110e899989796948e8e9261137f575b5050612c84565b88600b5416918451988994859384936307ed237960e01b855260048501612ce5565b039134905af19283156113745787948894611339575b509061111a9161110f861515612d51565b610b3f8585516130fa565b826111ea575b505050610c0d906111ae60118899610b3f61118f61119e6127106111828d9e9d8d9e9d60407fd8066379a11f110d1eb579110571ce47b1557c623d7ae29f423d92cd6dd953be9f60015493815260148a5220908154166111de575b508c612a38565b04809c610bb7828d6130fa565b60075460055482169116613113565b338d5283835260408d20546130e1565b338b5252604089205551946040519384933397859094939260609260808301968352602083015260408201520152565b6001915001543861117b565b156112555750906111ae60118899610b3f61118f61119e6127106111828d9e9d8d9e9d60407fd8066379a11f110d1eb579110571ce47b1557c623d7ae29f423d92cd6dd953be9f61123f610c0d9e3386613113565b5050505050505050509998979650829350611120565b60405189810192918311818410176104b7578289939284809493819460405252335af16112806133a1565b50156112cf57610c0d906111ae60118899610b3f61118f61119e6127106111828d9e9d8d9e9d60407fd8066379a11f110d1eb579110571ce47b1557c623d7ae29f423d92cd6dd953be9f61123f565b6084876040519062461bcd60e51b82526004820152602660248201527f5472616e7366657248656c7065723a204e41544956455f5452414e534645525f60448201527f4641494c454400000000000000000000000000000000000000000000000000006064820152fd5b61111a92955061136291945060403d60401161136d575b61135a8183612788565b810190612ccf565b9490949390916110fe565b503d611350565b6040513d89823e3d90fd5b6113959250803d10610843576108358183612788565b388e6110bf565b6040513d8c823e3d90fd5b8380fd5b50346102115760203660031901126102115760406113c76127aa565b916001600160a01b03809316815260146020522090815416156000146113f557506020600154604051908152f35b60016020910154610209565b50346102115760603660031901126102115760443560043561142161302b565b8291835b60125481101561150f5761143881612864565b5054831015806114f8575b61144f57600101611425565b8192935061145e600291612864565b50015560015b1561146d578280f35b6040519161147a83612750565b825260243560208301526040820152601254680100000000000000008110156114e4578060016114ad9201601255612864565b6114d157815181556020820151600182015560409091015160029091015538808280f35b602483634e487b7160e01b815280600452fd5b602483634e487b7160e01b81526041600452fd5b50600161150482612864565b500154831115611443565b509091611464565b50346102115780600319360112610211576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036115825760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b60046040517fe07c8dba000000000000000000000000000000000000000000000000000000008152fd5b506040366003190112610211576115c16127aa565b60243567ffffffffffffffff81116117f4576115e190369060040161295f565b6001600160a01b03807f0000000000000000000000000000000000000000000000000000000000000000168030149081156117c6575b506115825761162461302b565b8216916040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481875afa85918161178e575b5061167b5760248460405190634c9c8ce360e01b82526004820152fd5b9284937f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc9081810361175d5750823b156117455780546001600160a01b0319168217905560405184917fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8380a283511561171057508083602061170c95519101845af46117066133a1565b916134eb565b5080f35b925050503461171d575080f35b807fb398979f0000000000000000000000000000000000000000000000000000000060049252fd5b60248260405190634c9c8ce360e01b82526004820152fd5b602490604051907faa1d49a40000000000000000000000000000000000000000000000000000000082526004820152fd5b9091506020813d6020116117be575b816117aa60209383612788565b810103126117ba5751903861165e565b8580fd5b3d915061179d565b9050817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141538611617565b8280fd5b5034610211576020366003190112610211576001600160a01b0361181a6127aa565b61182261302b565b166001600160a01b0319600554161760055580f35b50346102115760203660031901126102115761185161302b565b60043560085580f35b50346102115780600319360112610211576020600f54604051908152f35b503461021157602080600319360112610a3c576004356001600160a01b039182600754166118a7331515612b8b56