UNPKG

@zebec-network/evm-card-sdk

Version:
1,225 lines 92.5 kB
{ "_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