Source Code
Latest 13 from a total of 13 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Flash Swap | 22965436 | 241 days ago | IN | 0.00005404 ETH | 0.00172464 | ||||
| Flash Swap | 22923147 | 247 days ago | IN | 0.00020417 ETH | 0.00207792 | ||||
| Flash Swap | 22921696 | 247 days ago | IN | 0.00006821 ETH | 0.00211863 | ||||
| Flash Swap | 22918071 | 248 days ago | IN | 0.00013407 ETH | 0.00984053 | ||||
| Flash Swap | 22911564 | 249 days ago | IN | 0.00068017 ETH | 0.0026869 | ||||
| Flash Swap | 22889578 | 252 days ago | IN | 0.00219474 ETH | 0.0040802 | ||||
| Flash Swap | 22887603 | 252 days ago | IN | 0.00727703 ETH | 0.00238164 | ||||
| Flash Swap | 22643838 | 286 days ago | IN | 0.00041231 ETH | 0.00126489 | ||||
| Flash Swap | 22641395 | 286 days ago | IN | 0.00836907 ETH | 0.00240754 | ||||
| Flash Swap | 22641013 | 286 days ago | IN | 0.01 ETH | 0.01130531 | ||||
| Flash Swap | 22635286 | 287 days ago | IN | 0.00077898 ETH | 0.00092485 | ||||
| Flash Swap | 22635281 | 287 days ago | IN | 0.0077894 ETH | 0.00095669 | ||||
| Flash Swap | 22633472 | 288 days ago | IN | 0.0001 ETH | 0.00345024 |
Latest 13 internal transactions
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Deposit | 22965436 | 241 days ago | 0.00005404 ETH | ||||
| Deposit | 22923147 | 247 days ago | 0.00020417 ETH | ||||
| Deposit | 22921696 | 247 days ago | 0.00006821 ETH | ||||
| Deposit | 22918071 | 248 days ago | 0.00013407 ETH | ||||
| Deposit | 22911564 | 249 days ago | 0.00068017 ETH | ||||
| Deposit | 22889578 | 252 days ago | 0.00219474 ETH | ||||
| Deposit | 22887603 | 252 days ago | 0.00727703 ETH | ||||
| Deposit | 22643838 | 286 days ago | 0.00041231 ETH | ||||
| Deposit | 22641395 | 286 days ago | 0.00836907 ETH | ||||
| Deposit | 22641013 | 286 days ago | 0.01 ETH | ||||
| Deposit | 22635286 | 287 days ago | 0.00077898 ETH | ||||
| Deposit | 22635281 | 287 days ago | 0.0077894 ETH | ||||
| Deposit | 22633472 | 288 days ago | 0.0001 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
FlashSwap
Compiler Version
v0.5.17+commit.d19bba13
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity =0.5.17;
pragma experimental ABIEncoderV2;
import "./DydxFlashloanBase.sol";
contract FlashSwap is DydxFlashloanBase {
using SafeMath for uint;
address internal constant _solo = 0x1E0447b19BB6EcFdAe1e4AE1694b0C3659614e4e;
address internal constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
address internal constant router = 0x72e5B0cb1099E664e044A7fD4185d3aF8965E095;
function flashSwap(uint value, address payable currency, address token) external payable returns(uint amount) {
require(value > 2, "require value > 2");
if(currency == WETH && msg.value >= value)
WETH9(currency).deposit.value(msg.value)();
else
TransferHelper.safeTransferFrom(currency, msg.sender, address(this), value);
uint _amount = value.mul(10000-199).sub(10000*2).div(199);
// Get marketId from token address
uint256 marketId = _getMarketIdFromTokenAddress(_solo, currency);
// Calculate repay amount (_amount + (2 wei))
// Approve transfer from
uint256 repayAmount = _getRepaymentAmountInternal(_amount);
IERC20(currency).approve(_solo, repayAmount);
// 1. Withdraw $
// 2. Call callFunction(...)
// 3. Deposit back $
Actions.ActionArgs[] memory operations = new Actions.ActionArgs[](3);
operations[0] = _getWithdrawAction(marketId, _amount);
operations[1] = _getCallAction(abi.encode(currency, token, repayAmount));
operations[2] = _getDepositAction(marketId, repayAmount);
Account.Info[] memory accountInfos = new Account.Info[](1);
accountInfos[0] = _getAccountInfo();
ISoloMargin(_solo).operate(accountInfos, operations);
address limitedToken = IQFRouter(router).buyback(token);
address quotaToken = IQFRouter(router).quotaTokenOf(limitedToken);
IQFRouter(router).claim(limitedToken, currency);
amount = IERC20(quotaToken).balanceOf(address(this));
IERC20(quotaToken).transfer(msg.sender, amount);
}
function callFunction(address sender, Account.Info calldata account, bytes calldata data) external {
require(msg.sender == _solo && sender == address(this) && account.owner == address(this) && account.number == 1, "callFunction param check fail");
address[] memory path = new address[](2);
uint repayAmount;
(path[0], path[1], repayAmount) = abi.decode(data, (address, address, uint));
uint amount = IERC20(path[0]).balanceOf(address(this));
TransferHelper.safeApprove(path[0], router, amount);
amount = IQFRouter(router).swapExactTokensForTokens(amount, 0, path, address(this), now)[1];
(path[0], path[1]) = (path[1], path[0]);
TransferHelper.safeApprove(path[0], router, amount);
amount = IQFRouter(router).swapExactTokensForTokens(amount, 0, path, address(this), now)[1];
require(amount >= repayAmount, "Not enough funds to repay dydx loan!");
}
}
interface IQFRouter {
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function quotaTokenOf(address) external view returns(address);
function buyback(address) external view returns(address);
function claim(address limitedToken, address taxToken) external;
}
interface IERC20 {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
}
interface WETH9 {
function deposit() external payable;
function withdraw(uint wad) external;
}
// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)
library SafeMath {
function add(uint x, uint y) internal pure returns (uint z) {
require((z = x + y) >= x, "add-overflow");
}
function sub(uint x, uint y) internal pure returns (uint z) {
require((z = x - y) <= x, "sub-underflow");
}
function sub0(uint256 a, uint256 b) internal pure returns (uint256) {
return a > b ? a - b : 0;
}
function mul(uint x, uint y) internal pure returns (uint z) {
require(y == 0 || (z = x * y) / y == x, "mul-overflow");
}
function div(uint x, uint y) internal pure returns (uint z) {
return x / y;
}
function div1(uint256 a, uint256 b) internal pure returns (uint256) {
return b == 0 ? a : a/b;
}
}
// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
function safeApprove(address token, address to, uint value) internal {
// bytes4(keccak256(bytes('approve(address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), "APPROVE_FAILED");
}
function safeTransfer(address token, address to, uint value) internal {
// bytes4(keccak256(bytes('transfer(address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), "TRANSFER_FAILED");
}
function safeTransferFrom(address token, address from, address to, uint value) internal {
// bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), "TRANSFER_FROM_FAILED");
}
function safeTransferETH(address to, uint value) internal {
(bool success,) = to.call.value(value)(new bytes(0)); // (bool success,) = to.call{value:value}(new bytes(0));
require(success, "ETH_TRANSFER_FAILED");
}
}pragma solidity =0.5.17;
pragma experimental ABIEncoderV2;
//import "@openzeppelin/contracts/math/SafeMath.sol";
//import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "./ISoloMargin.sol";
contract DydxFlashloanBase {
//using SafeMath for uint256;
// -- Internal Helper functions -- //
function _getMarketIdFromTokenAddress(address _solo, address token)
internal
view
returns (uint256)
{
ISoloMargin solo = ISoloMargin(_solo);
uint256 numMarkets = solo.getNumMarkets();
address curToken;
for (uint256 i = 0; i < numMarkets; i++) {
curToken = solo.getMarketTokenAddress(i);
if (curToken == token) {
return i;
}
}
revert("No marketId found for provided token");
}
function _getRepaymentAmountInternal(uint256 amount)
internal
pure
returns (uint256)
{
// Needs to be overcollateralize
// Needs to provide +2 wei to be safe
require(amount + 2 > amount, "+2 overflow");
return amount + 2;
}
function _getAccountInfo() internal view returns (Account.Info memory) {
return Account.Info({owner: address(this), number: 1});
}
function _getWithdrawAction(uint marketId, uint256 amount)
internal
view
returns (Actions.ActionArgs memory)
{
return
Actions.ActionArgs({
actionType: Actions.ActionType.Withdraw,
accountId: 0,
amount: Types.AssetAmount({
sign: false,
denomination: Types.AssetDenomination.Wei,
ref: Types.AssetReference.Delta,
value: amount
}),
primaryMarketId: marketId,
secondaryMarketId: 0,
otherAddress: address(this),
otherAccountId: 0,
data: ""
});
}
function _getCallAction(bytes memory data)
internal
view
returns (Actions.ActionArgs memory)
{
return
Actions.ActionArgs({
actionType: Actions.ActionType.Call,
accountId: 0,
amount: Types.AssetAmount({
sign: false,
denomination: Types.AssetDenomination.Wei,
ref: Types.AssetReference.Delta,
value: 0
}),
primaryMarketId: 0,
secondaryMarketId: 0,
otherAddress: address(this),
otherAccountId: 0,
data: data
});
}
function _getDepositAction(uint marketId, uint256 amount)
internal
view
returns (Actions.ActionArgs memory)
{
return
Actions.ActionArgs({
actionType: Actions.ActionType.Deposit,
accountId: 0,
amount: Types.AssetAmount({
sign: true,
denomination: Types.AssetDenomination.Wei,
ref: Types.AssetReference.Delta,
value: amount
}),
primaryMarketId: marketId,
secondaryMarketId: 0,
otherAddress: address(this),
otherAccountId: 0,
data: ""
});
}
}pragma solidity =0.5.17;
pragma experimental ABIEncoderV2;
library Account {
enum Status {Normal, Liquid, Vapor}
struct Info {
address owner; // The address that owns the account
uint256 number; // A nonce that allows a single address to control many accounts
}
struct Storage {
mapping(uint256 => Types.Par) balances; // Mapping from marketId to principal
Status status;
}
}
library Actions {
enum ActionType {
Deposit, // supply tokens
Withdraw, // borrow tokens
Transfer, // transfer balance between accounts
Buy, // buy an amount of some token (publicly)
Sell, // sell an amount of some token (publicly)
Trade, // trade tokens against another account
Liquidate, // liquidate an undercollateralized or expiring account
Vaporize, // use excess tokens to zero-out a completely negative account
Call // send arbitrary data to an address
}
enum AccountLayout {OnePrimary, TwoPrimary, PrimaryAndSecondary}
enum MarketLayout {ZeroMarkets, OneMarket, TwoMarkets}
struct ActionArgs {
ActionType actionType;
uint256 accountId;
Types.AssetAmount amount;
uint256 primaryMarketId;
uint256 secondaryMarketId;
address otherAddress;
uint256 otherAccountId;
bytes data;
}
struct DepositArgs {
Types.AssetAmount amount;
Account.Info account;
uint256 market;
address from;
}
struct WithdrawArgs {
Types.AssetAmount amount;
Account.Info account;
uint256 market;
address to;
}
struct TransferArgs {
Types.AssetAmount amount;
Account.Info accountOne;
Account.Info accountTwo;
uint256 market;
}
struct BuyArgs {
Types.AssetAmount amount;
Account.Info account;
uint256 makerMarket;
uint256 takerMarket;
address exchangeWrapper;
bytes orderData;
}
struct SellArgs {
Types.AssetAmount amount;
Account.Info account;
uint256 takerMarket;
uint256 makerMarket;
address exchangeWrapper;
bytes orderData;
}
struct TradeArgs {
Types.AssetAmount amount;
Account.Info takerAccount;
Account.Info makerAccount;
uint256 inputMarket;
uint256 outputMarket;
address autoTrader;
bytes tradeData;
}
struct LiquidateArgs {
Types.AssetAmount amount;
Account.Info solidAccount;
Account.Info liquidAccount;
uint256 owedMarket;
uint256 heldMarket;
}
struct VaporizeArgs {
Types.AssetAmount amount;
Account.Info solidAccount;
Account.Info vaporAccount;
uint256 owedMarket;
uint256 heldMarket;
}
struct CallArgs {
Account.Info account;
address callee;
bytes data;
}
}
library Decimal {
struct D256 {
uint256 value;
}
}
library Interest {
struct Rate {
uint256 value;
}
struct Index {
uint96 borrow;
uint96 supply;
uint32 lastUpdate;
}
}
library Monetary {
struct Price {
uint256 value;
}
struct Value {
uint256 value;
}
}
library Storage {
// All information necessary for tracking a market
struct Market {
// Contract address of the associated ERC20 token
address token;
// Total aggregated supply and borrow amount of the entire market
Types.TotalPar totalPar;
// Interest index of the market
Interest.Index index;
// Contract address of the price oracle for this market
address priceOracle;
// Contract address of the interest setter for this market
address interestSetter;
// Multiplier on the marginRatio for this market
Decimal.D256 marginPremium;
// Multiplier on the liquidationSpread for this market
Decimal.D256 spreadPremium;
// Whether additional borrows are allowed for this market
bool isClosing;
}
// The global risk parameters that govern the health and security of the system
struct RiskParams {
// Required ratio of over-collateralization
Decimal.D256 marginRatio;
// Percentage penalty incurred by liquidated accounts
Decimal.D256 liquidationSpread;
// Percentage of the borrower's interest fee that gets passed to the suppliers
Decimal.D256 earningsRate;
// The minimum absolute borrow value of an account
// There must be sufficient incentivize to liquidate undercollateralized accounts
Monetary.Value minBorrowedValue;
}
// The maximum RiskParam values that can be set
struct RiskLimits {
uint64 marginRatioMax;
uint64 liquidationSpreadMax;
uint64 earningsRateMax;
uint64 marginPremiumMax;
uint64 spreadPremiumMax;
uint128 minBorrowedValueMax;
}
// The entire storage state of Solo
struct State {
// number of markets
uint256 numMarkets;
// marketId => Market
mapping(uint256 => Market) markets;
// owner => account number => Account
mapping(address => mapping(uint256 => Account.Storage)) accounts;
// Addresses that can control other users accounts
mapping(address => mapping(address => bool)) operators;
// Addresses that can control all users accounts
mapping(address => bool) globalOperators;
// mutable risk parameters of the system
RiskParams riskParams;
// immutable risk limits of the system
RiskLimits riskLimits;
}
}
library Types {
enum AssetDenomination {
Wei, // the amount is denominated in wei
Par // the amount is denominated in par
}
enum AssetReference {
Delta, // the amount is given as a delta from the current value
Target // the amount is given as an exact number to end up at
}
struct AssetAmount {
bool sign; // true if positive
AssetDenomination denomination;
AssetReference ref;
uint256 value;
}
struct TotalPar {
uint128 borrow;
uint128 supply;
}
struct Par {
bool sign; // true if positive
uint128 value;
}
struct Wei {
bool sign; // true if positive
uint256 value;
}
}
interface ISoloMargin { //
struct OperatorArg {
address operator;
bool trusted;
}
function ownerSetSpreadPremium(
uint256 marketId,
Decimal.D256 calldata spreadPremium
) external;
function getIsGlobalOperator(address operator) external view returns (bool);
function getMarketTokenAddress(uint256 marketId)
external
view
returns (address);
function ownerSetInterestSetter(uint256 marketId, address interestSetter)
external;
function getAccountValues(Account.Info calldata account)
external
view
returns (Monetary.Value memory, Monetary.Value memory);
function getMarketPriceOracle(uint256 marketId)
external
view
returns (address);
function getMarketInterestSetter(uint256 marketId)
external
view
returns (address);
function getMarketSpreadPremium(uint256 marketId)
external
view
returns (Decimal.D256 memory);
function getNumMarkets() external view returns (uint256);
function ownerWithdrawUnsupportedTokens(address token, address recipient)
external
returns (uint256);
function ownerSetMinBorrowedValue(Monetary.Value calldata minBorrowedValue)
external;
function ownerSetLiquidationSpread(Decimal.D256 calldata spread) external;
function ownerSetEarningsRate(Decimal.D256 calldata earningsRate) external;
function getIsLocalOperator(address owner, address operator)
external
view
returns (bool);
function getAccountPar(Account.Info calldata account, uint256 marketId)
external
view
returns (Types.Par memory);
function ownerSetMarginPremium(
uint256 marketId,
Decimal.D256 calldata marginPremium
) external;
function getMarginRatio() external view returns (Decimal.D256 memory);
function getMarketCurrentIndex(uint256 marketId)
external
view
returns (Interest.Index memory);
function getMarketIsClosing(uint256 marketId) external view returns (bool);
function getRiskParams() external view returns (Storage.RiskParams memory);
function getAccountBalances(Account.Info calldata account)
external
view
returns (address[] memory, Types.Par[] memory, Types.Wei[] memory);
function renounceOwnership() external;
function getMinBorrowedValue() external view returns (Monetary.Value memory);
function setOperators(OperatorArg[] calldata args) external;
function getMarketPrice(uint256 marketId) external view returns (address);
function owner() external view returns (address);
function isOwner() external view returns (bool);
function ownerWithdrawExcessTokens(uint256 marketId, address recipient)
external
returns (uint256);
function ownerAddMarket(
address token,
address priceOracle,
address interestSetter,
Decimal.D256 calldata marginPremium,
Decimal.D256 calldata spreadPremium
) external;
function operate(
Account.Info[] calldata accounts,
Actions.ActionArgs[] calldata actions
) external;
function getMarketWithInfo(uint256 marketId)
external
view
returns (
Storage.Market memory,
Interest.Index memory,
Monetary.Price memory,
Interest.Rate memory
);
function ownerSetMarginRatio(Decimal.D256 calldata ratio) external;
function getLiquidationSpread() external view returns (Decimal.D256 memory);
function getAccountWei(Account.Info calldata account, uint256 marketId)
external
view
returns (Types.Wei memory);
function getMarketTotalPar(uint256 marketId)
external
view
returns (Types.TotalPar memory);
function getLiquidationSpreadForPair(
uint256 heldMarketId,
uint256 owedMarketId
) external view returns (Decimal.D256 memory);
function getNumExcessTokens(uint256 marketId)
external
view
returns (Types.Wei memory);
function getMarketCachedIndex(uint256 marketId)
external
view
returns (Interest.Index memory);
function getAccountStatus(Account.Info calldata account)
external
view
returns (uint8);
function getEarningsRate() external view returns (Decimal.D256 memory);
function ownerSetPriceOracle(uint256 marketId, address priceOracle) external;
function getRiskLimits() external view returns (Storage.RiskLimits memory);
function getMarket(uint256 marketId)
external
view
returns (Storage.Market memory);
function ownerSetIsClosing(uint256 marketId, bool isClosing) external;
function ownerSetGlobalOperator(address operator, bool approved) external;
function transferOwnership(address newOwner) external;
function getAdjustedAccountValues(Account.Info calldata account)
external
view
returns (Monetary.Value memory, Monetary.Value memory);
function getMarketMarginPremium(uint256 marketId)
external
view
returns (Decimal.D256 memory);
function getMarketInterestRate(uint256 marketId)
external
view
returns (Interest.Rate memory);
}{
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"remappings": []
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"number","type":"uint256"}],"internalType":"struct Account.Info","name":"account","type":"tuple"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"callFunction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"address payable","name":"currency","type":"address"},{"internalType":"address","name":"token","type":"address"}],"name":"flashSwap","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b50612599806100206000396000f3fe6080604052600436106100295760003560e01c8063074805861461002e5780638b4187131461005e575b600080fd5b610048600480360361004391908101906118be565b610087565b60405161005591906121c6565b60405180910390f35b34801561006a57600080fd5b50610085600480360361008091908101906117bf565b610737565b005b6000600284116100cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100c390612106565b60405180910390fd5b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561011b5750833410155b15610186578273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561016857600080fd5b505af115801561017c573d6000803e3d6000fd5b5050505050610193565b61019283333087610cb0565b5b60006101d160c76101c3614e206101b56126498a610dea90919063ffffffff16565b610e4c90919063ffffffff16565b610e9c90919063ffffffff16565b905060006101f3731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e86610eb0565b9050600061020083611062565b90508573ffffffffffffffffffffffffffffffffffffffff1663095ea7b3731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e836040518363ffffffff1660e01b8152600401610251929190612046565b602060405180830381600087803b15801561026b57600080fd5b505af115801561027f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506102a3919081019061186c565b50606060036040519080825280602002602001820160405280156102e157816020015b6102ce611440565b8152602001906001900390816102c65790505b5090506102ee83856110b4565b816000815181106102fb57fe5b602002602001018190525061033287878460405160200161031e93929190611f86565b60405160208183030381529060405261116d565b8160018151811061033f57fe5b60200260200101819052506103548383611217565b8160028151811061036157fe5b6020026020010181905250606060016040519080825280602002602001820160405280156103a957816020015b6103966114ac565b81526020019060019003908161038e5790505b5090506103b46112d0565b816000815181106103c157fe5b6020026020010181905250731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e73ffffffffffffffffffffffffffffffffffffffff1663a67a6a4582846040518363ffffffff1660e01b815260040161041b92919061206f565b600060405180830381600087803b15801561043557600080fd5b505af1158015610449573d6000803e3d6000fd5b5050505060007372e5b0cb1099e664e044a7fd4185d3af8965e09573ffffffffffffffffffffffffffffffffffffffff1663fb3e6f29896040518263ffffffff1660e01b815260040161049c9190611f6b565b60206040518083038186803b1580156104b457600080fd5b505afa1580156104c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506104ec9190810190611747565b905060007372e5b0cb1099e664e044a7fd4185d3af8965e09573ffffffffffffffffffffffffffffffffffffffff1663fbc98cbf836040518263ffffffff1660e01b815260040161053d9190611f6b565b60206040518083038186803b15801561055557600080fd5b505afa158015610569573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061058d9190810190611747565b90507372e5b0cb1099e664e044a7fd4185d3af8965e09573ffffffffffffffffffffffffffffffffffffffff166321c0b342838c6040518363ffffffff1660e01b81526004016105de929190611fe6565b600060405180830381600087803b1580156105f857600080fd5b505af115801561060c573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016106499190611f6b565b60206040518083038186803b15801561066157600080fd5b505afa158015610675573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506106999190810190611895565b97508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338a6040518363ffffffff1660e01b81526004016106d6929190611fbd565b602060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610728919081019061186c565b50505050505050509392505050565b731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156107b157503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156107fa57503073ffffffffffffffffffffffffffffffffffffffff168360000160206107e2919081019061171e565b73ffffffffffffffffffffffffffffffffffffffff16145b801561080a575060018360200135145b610849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084090612166565b60405180910390fd5b6060600260405190808252806020026020018201604052801561087b5781602001602082028038833980820191505090505b5090506000838361088f9190810190611770565b829250819150846000815181106108a257fe5b60200260200101856001815181106108b657fe5b602002602001018295508373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152508373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505060008260008151811061093257fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109729190611f6b565b60206040518083038186803b15801561098a57600080fd5b505afa15801561099e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109c29190810190611895565b90506109f7836000815181106109d457fe5b60200260200101517372e5b0cb1099e664e044a7fd4185d3af8965e09583611309565b7372e5b0cb1099e664e044a7fd4185d3af8965e09573ffffffffffffffffffffffffffffffffffffffff166338ed17398260008630426040518663ffffffff1660e01b8152600401610a4d9594939291906121e1565b600060405180830381600087803b158015610a6757600080fd5b505af1158015610a7b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250610aa4919081019061182b565b600181518110610ab057fe5b6020026020010151905082600181518110610ac757fe5b602002602001015183600081518110610adc57fe5b602002602001015184600081518110610af157fe5b6020026020010185600181518110610b0557fe5b602002602001018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505050610ba183600081518110610b7e57fe5b60200260200101517372e5b0cb1099e664e044a7fd4185d3af8965e09583611309565b7372e5b0cb1099e664e044a7fd4185d3af8965e09573ffffffffffffffffffffffffffffffffffffffff166338ed17398260008630426040518663ffffffff1660e01b8152600401610bf79594939291906121e1565b600060405180830381600087803b158015610c1157600080fd5b505af1158015610c25573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250610c4e919081019061182b565b600181518110610c5a57fe5b6020026020010151905081811015610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e906120c6565b60405180910390fd5b50505050505050565b600060608573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401610ce59392919061200f565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610d339190611f54565b6000604051808303816000865af19150503d8060008114610d70576040519150601f19603f3d011682016040523d82523d6000602084013e610d75565b606091505b5091509150818015610da35750600081511480610da2575080806020019051610da1919081019061186c565b5b5b610de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd990612146565b60405180910390fd5b505050505050565b600080821480610e075750828283850292508281610e0457fe5b04145b610e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3d906120a6565b60405180910390fd5b92915050565b6000828284039150811115610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d90612126565b60405180910390fd5b92915050565b6000818381610ea757fe5b04905092915050565b60008083905060008173ffffffffffffffffffffffffffffffffffffffff1663295c39a56040518163ffffffff1660e01b815260040160206040518083038186803b158015610efe57600080fd5b505afa158015610f12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f369190810190611895565b9050600080600090505b82811015611020578373ffffffffffffffffffffffffffffffffffffffff1663062bd3e9826040518263ffffffff1660e01b8152600401610f8191906121c6565b60206040518083038186803b158015610f9957600080fd5b505afa158015610fad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610fd19190810190611747565b91508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611013578094505050505061105c565b8080600101915050610f40565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105390612186565b60405180910390fd5b92915050565b60008160028301116110a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a0906120e6565b60405180910390fd5b600282019050919050565b6110bc6114dc565b604051806101000160405280600160088111156110d557fe5b81526020016000815260200160405180608001604052806000151581526020016000600181111561110257fe5b81526020016000600181111561111457fe5b8152602001858152508152602001848152602001600081526020013073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160405180602001604052806000815250815250905092915050565b6111756114dc565b60405180610100016040528060088081111561118d57fe5b8152602001600081526020016040518060800160405280600015158152602001600060018111156111ba57fe5b8152602001600060018111156111cc57fe5b81526020016000815250815260200160008152602001600081526020013073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001838152509050919050565b61121f6114dc565b6040518061010001604052806000600881111561123857fe5b81526020016000815260200160405180608001604052806001151581526020016000600181111561126557fe5b81526020016000600181111561127757fe5b8152602001858152508152602001848152602001600081526020013073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160405180602001604052806000815250815250905092915050565b6112d8611548565b60405180604001604052803073ffffffffffffffffffffffffffffffffffffffff1681526020016001815250905090565b600060608473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3858560405160240161133c929190612046565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161138a9190611f54565b6000604051808303816000865af19150503d80600081146113c7576040519150601f19603f3d011682016040523d82523d6000602084013e6113cc565b606091505b50915091508180156113fa57506000815114806113f95750808060200190516113f8919081019061186c565b5b5b611439576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611430906121a6565b60405180910390fd5b5050505050565b6040518061010001604052806000600881111561145957fe5b81526020016000815260200161146d611578565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b604051806101000160405280600060088111156114f557fe5b815260200160008152602001611509611578565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b60405180608001604052806000151581526020016000600181111561159957fe5b8152602001600060018111156115ab57fe5b8152602001600081525090565b6000813590506115c7816124fa565b92915050565b6000815190506115dc816124fa565b92915050565b6000813590506115f181612511565b92915050565b600082601f83011261160857600080fd5b815161161b61161682612268565b61223b565b9150818183526020840193506020810190508385602084028201111561164057600080fd5b60005b8381101561167057816116568882611709565b845260208401935060208301925050600181019050611643565b5050505092915050565b60008151905061168981612528565b92915050565b60008083601f8401126116a157600080fd5b8235905067ffffffffffffffff8111156116ba57600080fd5b6020830191508360018202830111156116d257600080fd5b9250929050565b6000604082840312156116eb57600080fd5b81905092915050565b6000813590506117038161253f565b92915050565b6000815190506117188161253f565b92915050565b60006020828403121561173057600080fd5b600061173e848285016115b8565b91505092915050565b60006020828403121561175957600080fd5b6000611767848285016115cd565b91505092915050565b60008060006060848603121561178557600080fd5b6000611793868287016115e2565b93505060206117a4868287016115e2565b92505060406117b5868287016116f4565b9150509250925092565b600080600080608085870312156117d557600080fd5b60006117e3878288016115b8565b94505060206117f4878288016116d9565b935050606085013567ffffffffffffffff81111561181157600080fd5b61181d8782880161168f565b925092505092959194509250565b60006020828403121561183d57600080fd5b600082015167ffffffffffffffff81111561185757600080fd5b611863848285016115f7565b91505092915050565b60006020828403121561187e57600080fd5b600061188c8482850161167a565b91505092915050565b6000602082840312156118a757600080fd5b60006118b584828501611709565b91505092915050565b6000806000606084860312156118d357600080fd5b60006118e1868287016116f4565b93505060206118f2868287016115e2565b9250506040611903868287016115b8565b9150509250925092565b6000611919838361196f565b60208301905092915050565b60006119318383611dff565b905092915050565b60006119458383611f07565b60408301905092915050565b61195a81612411565b82525050565b61196981612390565b82525050565b6119788161237e565b82525050565b6119878161237e565b82525050565b6000611998826122c0565b6119a2818561231e565b93506119ad83612290565b8060005b838110156119de5781516119c5888261190d565b97506119d0836122f7565b9250506001810190506119b1565b5085935050505092915050565b60006119f6826122cb565b611a00818561232f565b935083602082028501611a12856122a0565b8060005b85811015611a4e5784840389528151611a2f8582611925565b9450611a3a83612304565b925060208a01995050600181019050611a16565b50829750879550505050505092915050565b6000611a6b826122d6565b611a758185612340565b9350611a80836122b0565b8060005b83811015611ab1578151611a988882611939565b9750611aa383612311565b925050600181019050611a84565b5085935050505092915050565b611ac7816123a2565b82525050565b6000611ad8826122ec565b611ae28185612362565b9350611af281856020860161248f565b80840191505092915050565b6000611b09826122e1565b611b138185612351565b9350611b2381856020860161248f565b611b2c816124c2565b840191505092915050565b611b4081612423565b82525050565b611b4f81612435565b82525050565b611b5e81612447565b82525050565b611b6d81612459565b82525050565b6000611b80600c8361236d565b91507f6d756c2d6f766572666c6f7700000000000000000000000000000000000000006000830152602082019050919050565b6000611bc060248361236d565b91507f4e6f7420656e6f7567682066756e647320746f2072657061792064796478206c60008301527f6f616e21000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611c26600b8361236d565b91507f2b32206f766572666c6f770000000000000000000000000000000000000000006000830152602082019050919050565b6000611c6660118361236d565b91507f726571756972652076616c7565203e20320000000000000000000000000000006000830152602082019050919050565b6000611ca6600d8361236d565b91507f7375622d756e646572666c6f77000000000000000000000000000000000000006000830152602082019050919050565b6000611ce660148361236d565b91507f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006000830152602082019050919050565b6000611d26601d8361236d565b91507f63616c6c46756e6374696f6e20706172616d20636865636b206661696c0000006000830152602082019050919050565b6000611d6660248361236d565b91507f4e6f206d61726b6574496420666f756e6420666f722070726f7669646564207460008301527f6f6b656e000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611dcc600e8361236d565b91507f415050524f56455f4641494c45440000000000000000000000000000000000006000830152602082019050919050565b600061016083016000830151611e186000860182611b37565b506020830151611e2b6020860182611f36565b506040830151611e3e6040860182611eb2565b506060830151611e5160c0860182611f36565b506080830151611e6460e0860182611f36565b5060a0830151611e7861010086018261196f565b5060c0830151611e8c610120860182611f36565b5060e0830151848203610140860152611ea58282611afe565b9150508091505092915050565b608082016000820151611ec86000850182611abe565b506020820151611edb6020850182611b46565b506040820151611eee6040850182611b55565b506060820151611f016060850182611f36565b50505050565b604082016000820151611f1d600085018261196f565b506020820151611f306020850182611f36565b50505050565b611f3f81612407565b82525050565b611f4e81612407565b82525050565b6000611f608284611acd565b915081905092915050565b6000602082019050611f80600083018461197e565b92915050565b6000606082019050611f9b6000830186611960565b611fa8602083018561197e565b611fb56040830184611f45565b949350505050565b6000604082019050611fd26000830185611951565b611fdf6020830184611f45565b9392505050565b6000604082019050611ffb600083018561197e565b6120086020830184611951565b9392505050565b6000606082019050612024600083018661197e565b612031602083018561197e565b61203e6040830184611f45565b949350505050565b600060408201905061205b600083018561197e565b6120686020830184611f45565b9392505050565b600060408201905081810360008301526120898185611a60565b9050818103602083015261209d81846119eb565b90509392505050565b600060208201905081810360008301526120bf81611b73565b9050919050565b600060208201905081810360008301526120df81611bb3565b9050919050565b600060208201905081810360008301526120ff81611c19565b9050919050565b6000602082019050818103600083015261211f81611c59565b9050919050565b6000602082019050818103600083015261213f81611c99565b9050919050565b6000602082019050818103600083015261215f81611cd9565b9050919050565b6000602082019050818103600083015261217f81611d19565b9050919050565b6000602082019050818103600083015261219f81611d59565b9050919050565b600060208201905081810360008301526121bf81611dbf565b9050919050565b60006020820190506121db6000830184611f45565b92915050565b600060a0820190506121f66000830188611f45565b6122036020830187611b64565b8181036040830152612215818661198d565b9050612224606083018561197e565b6122316080830184611f45565b9695505050505050565b6000604051905081810181811067ffffffffffffffff8211171561225e57600080fd5b8060405250919050565b600067ffffffffffffffff82111561227f57600080fd5b602082029050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000612389826123e7565b9050919050565b600061239b826123e7565b9050919050565b60008115159050919050565b60008190506123bc826124d3565b919050565b60008190506123cf826124e0565b919050565b60008190506123e2826124ed565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061241c8261246b565b9050919050565b600061242e826123ae565b9050919050565b6000612440826123c1565b9050919050565b6000612452826123d4565b9050919050565b600061246482612407565b9050919050565b60006124768261247d565b9050919050565b6000612488826123e7565b9050919050565b60005b838110156124ad578082015181840152602081019050612492565b838111156124bc576000848401525b50505050565b6000601f19601f8301169050919050565b600981106124dd57fe5b50565b600281106124ea57fe5b50565b600281106124f757fe5b50565b6125038161237e565b811461250e57600080fd5b50565b61251a81612390565b811461252557600080fd5b50565b612531816123a2565b811461253c57600080fd5b50565b61254881612407565b811461255357600080fd5b5056fea365627a7a72315820b3b3e95b8e5fb3ea58ed4b90c13288fe966e8ea5ccdb6707ca8976620529998a6c6578706572696d656e74616cf564736f6c63430005110040
Deployed Bytecode
0x6080604052600436106100295760003560e01c8063074805861461002e5780638b4187131461005e575b600080fd5b610048600480360361004391908101906118be565b610087565b60405161005591906121c6565b60405180910390f35b34801561006a57600080fd5b50610085600480360361008091908101906117bf565b610737565b005b6000600284116100cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100c390612106565b60405180910390fd5b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561011b5750833410155b15610186578273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561016857600080fd5b505af115801561017c573d6000803e3d6000fd5b5050505050610193565b61019283333087610cb0565b5b60006101d160c76101c3614e206101b56126498a610dea90919063ffffffff16565b610e4c90919063ffffffff16565b610e9c90919063ffffffff16565b905060006101f3731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e86610eb0565b9050600061020083611062565b90508573ffffffffffffffffffffffffffffffffffffffff1663095ea7b3731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e836040518363ffffffff1660e01b8152600401610251929190612046565b602060405180830381600087803b15801561026b57600080fd5b505af115801561027f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506102a3919081019061186c565b50606060036040519080825280602002602001820160405280156102e157816020015b6102ce611440565b8152602001906001900390816102c65790505b5090506102ee83856110b4565b816000815181106102fb57fe5b602002602001018190525061033287878460405160200161031e93929190611f86565b60405160208183030381529060405261116d565b8160018151811061033f57fe5b60200260200101819052506103548383611217565b8160028151811061036157fe5b6020026020010181905250606060016040519080825280602002602001820160405280156103a957816020015b6103966114ac565b81526020019060019003908161038e5790505b5090506103b46112d0565b816000815181106103c157fe5b6020026020010181905250731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e73ffffffffffffffffffffffffffffffffffffffff1663a67a6a4582846040518363ffffffff1660e01b815260040161041b92919061206f565b600060405180830381600087803b15801561043557600080fd5b505af1158015610449573d6000803e3d6000fd5b5050505060007372e5b0cb1099e664e044a7fd4185d3af8965e09573ffffffffffffffffffffffffffffffffffffffff1663fb3e6f29896040518263ffffffff1660e01b815260040161049c9190611f6b565b60206040518083038186803b1580156104b457600080fd5b505afa1580156104c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506104ec9190810190611747565b905060007372e5b0cb1099e664e044a7fd4185d3af8965e09573ffffffffffffffffffffffffffffffffffffffff1663fbc98cbf836040518263ffffffff1660e01b815260040161053d9190611f6b565b60206040518083038186803b15801561055557600080fd5b505afa158015610569573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061058d9190810190611747565b90507372e5b0cb1099e664e044a7fd4185d3af8965e09573ffffffffffffffffffffffffffffffffffffffff166321c0b342838c6040518363ffffffff1660e01b81526004016105de929190611fe6565b600060405180830381600087803b1580156105f857600080fd5b505af115801561060c573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016106499190611f6b565b60206040518083038186803b15801561066157600080fd5b505afa158015610675573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506106999190810190611895565b97508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338a6040518363ffffffff1660e01b81526004016106d6929190611fbd565b602060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610728919081019061186c565b50505050505050509392505050565b731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156107b157503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156107fa57503073ffffffffffffffffffffffffffffffffffffffff168360000160206107e2919081019061171e565b73ffffffffffffffffffffffffffffffffffffffff16145b801561080a575060018360200135145b610849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084090612166565b60405180910390fd5b6060600260405190808252806020026020018201604052801561087b5781602001602082028038833980820191505090505b5090506000838361088f9190810190611770565b829250819150846000815181106108a257fe5b60200260200101856001815181106108b657fe5b602002602001018295508373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152508373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505060008260008151811061093257fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109729190611f6b565b60206040518083038186803b15801561098a57600080fd5b505afa15801561099e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109c29190810190611895565b90506109f7836000815181106109d457fe5b60200260200101517372e5b0cb1099e664e044a7fd4185d3af8965e09583611309565b7372e5b0cb1099e664e044a7fd4185d3af8965e09573ffffffffffffffffffffffffffffffffffffffff166338ed17398260008630426040518663ffffffff1660e01b8152600401610a4d9594939291906121e1565b600060405180830381600087803b158015610a6757600080fd5b505af1158015610a7b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250610aa4919081019061182b565b600181518110610ab057fe5b6020026020010151905082600181518110610ac757fe5b602002602001015183600081518110610adc57fe5b602002602001015184600081518110610af157fe5b6020026020010185600181518110610b0557fe5b602002602001018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505050610ba183600081518110610b7e57fe5b60200260200101517372e5b0cb1099e664e044a7fd4185d3af8965e09583611309565b7372e5b0cb1099e664e044a7fd4185d3af8965e09573ffffffffffffffffffffffffffffffffffffffff166338ed17398260008630426040518663ffffffff1660e01b8152600401610bf79594939291906121e1565b600060405180830381600087803b158015610c1157600080fd5b505af1158015610c25573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250610c4e919081019061182b565b600181518110610c5a57fe5b6020026020010151905081811015610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e906120c6565b60405180910390fd5b50505050505050565b600060608573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401610ce59392919061200f565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610d339190611f54565b6000604051808303816000865af19150503d8060008114610d70576040519150601f19603f3d011682016040523d82523d6000602084013e610d75565b606091505b5091509150818015610da35750600081511480610da2575080806020019051610da1919081019061186c565b5b5b610de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd990612146565b60405180910390fd5b505050505050565b600080821480610e075750828283850292508281610e0457fe5b04145b610e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3d906120a6565b60405180910390fd5b92915050565b6000828284039150811115610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d90612126565b60405180910390fd5b92915050565b6000818381610ea757fe5b04905092915050565b60008083905060008173ffffffffffffffffffffffffffffffffffffffff1663295c39a56040518163ffffffff1660e01b815260040160206040518083038186803b158015610efe57600080fd5b505afa158015610f12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f369190810190611895565b9050600080600090505b82811015611020578373ffffffffffffffffffffffffffffffffffffffff1663062bd3e9826040518263ffffffff1660e01b8152600401610f8191906121c6565b60206040518083038186803b158015610f9957600080fd5b505afa158015610fad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610fd19190810190611747565b91508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611013578094505050505061105c565b8080600101915050610f40565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105390612186565b60405180910390fd5b92915050565b60008160028301116110a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a0906120e6565b60405180910390fd5b600282019050919050565b6110bc6114dc565b604051806101000160405280600160088111156110d557fe5b81526020016000815260200160405180608001604052806000151581526020016000600181111561110257fe5b81526020016000600181111561111457fe5b8152602001858152508152602001848152602001600081526020013073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160405180602001604052806000815250815250905092915050565b6111756114dc565b60405180610100016040528060088081111561118d57fe5b8152602001600081526020016040518060800160405280600015158152602001600060018111156111ba57fe5b8152602001600060018111156111cc57fe5b81526020016000815250815260200160008152602001600081526020013073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001838152509050919050565b61121f6114dc565b6040518061010001604052806000600881111561123857fe5b81526020016000815260200160405180608001604052806001151581526020016000600181111561126557fe5b81526020016000600181111561127757fe5b8152602001858152508152602001848152602001600081526020013073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160405180602001604052806000815250815250905092915050565b6112d8611548565b60405180604001604052803073ffffffffffffffffffffffffffffffffffffffff1681526020016001815250905090565b600060608473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3858560405160240161133c929190612046565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161138a9190611f54565b6000604051808303816000865af19150503d80600081146113c7576040519150601f19603f3d011682016040523d82523d6000602084013e6113cc565b606091505b50915091508180156113fa57506000815114806113f95750808060200190516113f8919081019061186c565b5b5b611439576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611430906121a6565b60405180910390fd5b5050505050565b6040518061010001604052806000600881111561145957fe5b81526020016000815260200161146d611578565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b604051806101000160405280600060088111156114f557fe5b815260200160008152602001611509611578565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b60405180608001604052806000151581526020016000600181111561159957fe5b8152602001600060018111156115ab57fe5b8152602001600081525090565b6000813590506115c7816124fa565b92915050565b6000815190506115dc816124fa565b92915050565b6000813590506115f181612511565b92915050565b600082601f83011261160857600080fd5b815161161b61161682612268565b61223b565b9150818183526020840193506020810190508385602084028201111561164057600080fd5b60005b8381101561167057816116568882611709565b845260208401935060208301925050600181019050611643565b5050505092915050565b60008151905061168981612528565b92915050565b60008083601f8401126116a157600080fd5b8235905067ffffffffffffffff8111156116ba57600080fd5b6020830191508360018202830111156116d257600080fd5b9250929050565b6000604082840312156116eb57600080fd5b81905092915050565b6000813590506117038161253f565b92915050565b6000815190506117188161253f565b92915050565b60006020828403121561173057600080fd5b600061173e848285016115b8565b91505092915050565b60006020828403121561175957600080fd5b6000611767848285016115cd565b91505092915050565b60008060006060848603121561178557600080fd5b6000611793868287016115e2565b93505060206117a4868287016115e2565b92505060406117b5868287016116f4565b9150509250925092565b600080600080608085870312156117d557600080fd5b60006117e3878288016115b8565b94505060206117f4878288016116d9565b935050606085013567ffffffffffffffff81111561181157600080fd5b61181d8782880161168f565b925092505092959194509250565b60006020828403121561183d57600080fd5b600082015167ffffffffffffffff81111561185757600080fd5b611863848285016115f7565b91505092915050565b60006020828403121561187e57600080fd5b600061188c8482850161167a565b91505092915050565b6000602082840312156118a757600080fd5b60006118b584828501611709565b91505092915050565b6000806000606084860312156118d357600080fd5b60006118e1868287016116f4565b93505060206118f2868287016115e2565b9250506040611903868287016115b8565b9150509250925092565b6000611919838361196f565b60208301905092915050565b60006119318383611dff565b905092915050565b60006119458383611f07565b60408301905092915050565b61195a81612411565b82525050565b61196981612390565b82525050565b6119788161237e565b82525050565b6119878161237e565b82525050565b6000611998826122c0565b6119a2818561231e565b93506119ad83612290565b8060005b838110156119de5781516119c5888261190d565b97506119d0836122f7565b9250506001810190506119b1565b5085935050505092915050565b60006119f6826122cb565b611a00818561232f565b935083602082028501611a12856122a0565b8060005b85811015611a4e5784840389528151611a2f8582611925565b9450611a3a83612304565b925060208a01995050600181019050611a16565b50829750879550505050505092915050565b6000611a6b826122d6565b611a758185612340565b9350611a80836122b0565b8060005b83811015611ab1578151611a988882611939565b9750611aa383612311565b925050600181019050611a84565b5085935050505092915050565b611ac7816123a2565b82525050565b6000611ad8826122ec565b611ae28185612362565b9350611af281856020860161248f565b80840191505092915050565b6000611b09826122e1565b611b138185612351565b9350611b2381856020860161248f565b611b2c816124c2565b840191505092915050565b611b4081612423565b82525050565b611b4f81612435565b82525050565b611b5e81612447565b82525050565b611b6d81612459565b82525050565b6000611b80600c8361236d565b91507f6d756c2d6f766572666c6f7700000000000000000000000000000000000000006000830152602082019050919050565b6000611bc060248361236d565b91507f4e6f7420656e6f7567682066756e647320746f2072657061792064796478206c60008301527f6f616e21000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611c26600b8361236d565b91507f2b32206f766572666c6f770000000000000000000000000000000000000000006000830152602082019050919050565b6000611c6660118361236d565b91507f726571756972652076616c7565203e20320000000000000000000000000000006000830152602082019050919050565b6000611ca6600d8361236d565b91507f7375622d756e646572666c6f77000000000000000000000000000000000000006000830152602082019050919050565b6000611ce660148361236d565b91507f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006000830152602082019050919050565b6000611d26601d8361236d565b91507f63616c6c46756e6374696f6e20706172616d20636865636b206661696c0000006000830152602082019050919050565b6000611d6660248361236d565b91507f4e6f206d61726b6574496420666f756e6420666f722070726f7669646564207460008301527f6f6b656e000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611dcc600e8361236d565b91507f415050524f56455f4641494c45440000000000000000000000000000000000006000830152602082019050919050565b600061016083016000830151611e186000860182611b37565b506020830151611e2b6020860182611f36565b506040830151611e3e6040860182611eb2565b506060830151611e5160c0860182611f36565b506080830151611e6460e0860182611f36565b5060a0830151611e7861010086018261196f565b5060c0830151611e8c610120860182611f36565b5060e0830151848203610140860152611ea58282611afe565b9150508091505092915050565b608082016000820151611ec86000850182611abe565b506020820151611edb6020850182611b46565b506040820151611eee6040850182611b55565b506060820151611f016060850182611f36565b50505050565b604082016000820151611f1d600085018261196f565b506020820151611f306020850182611f36565b50505050565b611f3f81612407565b82525050565b611f4e81612407565b82525050565b6000611f608284611acd565b915081905092915050565b6000602082019050611f80600083018461197e565b92915050565b6000606082019050611f9b6000830186611960565b611fa8602083018561197e565b611fb56040830184611f45565b949350505050565b6000604082019050611fd26000830185611951565b611fdf6020830184611f45565b9392505050565b6000604082019050611ffb600083018561197e565b6120086020830184611951565b9392505050565b6000606082019050612024600083018661197e565b612031602083018561197e565b61203e6040830184611f45565b949350505050565b600060408201905061205b600083018561197e565b6120686020830184611f45565b9392505050565b600060408201905081810360008301526120898185611a60565b9050818103602083015261209d81846119eb565b90509392505050565b600060208201905081810360008301526120bf81611b73565b9050919050565b600060208201905081810360008301526120df81611bb3565b9050919050565b600060208201905081810360008301526120ff81611c19565b9050919050565b6000602082019050818103600083015261211f81611c59565b9050919050565b6000602082019050818103600083015261213f81611c99565b9050919050565b6000602082019050818103600083015261215f81611cd9565b9050919050565b6000602082019050818103600083015261217f81611d19565b9050919050565b6000602082019050818103600083015261219f81611d59565b9050919050565b600060208201905081810360008301526121bf81611dbf565b9050919050565b60006020820190506121db6000830184611f45565b92915050565b600060a0820190506121f66000830188611f45565b6122036020830187611b64565b8181036040830152612215818661198d565b9050612224606083018561197e565b6122316080830184611f45565b9695505050505050565b6000604051905081810181811067ffffffffffffffff8211171561225e57600080fd5b8060405250919050565b600067ffffffffffffffff82111561227f57600080fd5b602082029050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000612389826123e7565b9050919050565b600061239b826123e7565b9050919050565b60008115159050919050565b60008190506123bc826124d3565b919050565b60008190506123cf826124e0565b919050565b60008190506123e2826124ed565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061241c8261246b565b9050919050565b600061242e826123ae565b9050919050565b6000612440826123c1565b9050919050565b6000612452826123d4565b9050919050565b600061246482612407565b9050919050565b60006124768261247d565b9050919050565b6000612488826123e7565b9050919050565b60005b838110156124ad578082015181840152602081019050612492565b838111156124bc576000848401525b50505050565b6000601f19601f8301169050919050565b600981106124dd57fe5b50565b600281106124ea57fe5b50565b600281106124f757fe5b50565b6125038161237e565b811461250e57600080fd5b50565b61251a81612390565b811461252557600080fd5b50565b612531816123a2565b811461253c57600080fd5b50565b61254881612407565b811461255357600080fd5b5056fea365627a7a72315820b3b3e95b8e5fb3ea58ed4b90c13288fe966e8ea5ccdb6707ca8976620529998a6c6578706572696d656e74616cf564736f6c63430005110040
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.27
Net Worth in ETH
0.000127
Token Allocations
WETH
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $2,147.73 | 0.00012735 | $0.2735 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.