BscScan - Sponsored slots available. Book your slot here!
Overview
BNB Balance
0 BNB
BNB Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 157,442 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Taker Withdraw | 44718542 | 6 days ago | IN | 0 BNB | 0.00054897 | ||||
Taker Withdraw | 44679016 | 7 days ago | IN | 0 BNB | 0.00049208 | ||||
Taker Withdraw | 44655331 | 8 days ago | IN | 0 BNB | 0.00034198 | ||||
Taker Withdraw | 44655304 | 8 days ago | IN | 0 BNB | 0.00073813 | ||||
Taker Withdraw | 44610106 | 10 days ago | IN | 0 BNB | 0.00073813 | ||||
Taker Withdraw | 44594107 | 10 days ago | IN | 0 BNB | 0.00039167 | ||||
Taker Withdraw | 44532245 | 13 days ago | IN | 0 BNB | 0.00020128 | ||||
Taker Withdraw | 44469758 | 15 days ago | IN | 0 BNB | 0.00018299 | ||||
Taker Withdraw | 44412270 | 17 days ago | IN | 0 BNB | 0.00023161 | ||||
Taker Withdraw | 44404765 | 17 days ago | IN | 0 BNB | 0.00020009 | ||||
Taker Withdraw | 44366926 | 18 days ago | IN | 0 BNB | 0.00021726 | ||||
Taker Withdraw | 44364395 | 18 days ago | IN | 0 BNB | 0.00011399 | ||||
Taker Withdraw | 44364391 | 18 days ago | IN | 0 BNB | 0.00027757 | ||||
Taker Withdraw | 44352044 | 19 days ago | IN | 0 BNB | 0.00056186 | ||||
Taker Withdraw | 44251054 | 22 days ago | IN | 0 BNB | 0.00023393 | ||||
Taker Withdraw | 44248018 | 22 days ago | IN | 0 BNB | 0.00021738 | ||||
Taker Withdraw | 44206516 | 24 days ago | IN | 0 BNB | 0.00023161 | ||||
Taker Withdraw | 44177436 | 25 days ago | IN | 0 BNB | 0.00028035 | ||||
Taker Withdraw | 44105694 | 27 days ago | IN | 0 BNB | 0.00031211 | ||||
Taker Withdraw | 44091403 | 28 days ago | IN | 0 BNB | 0.00021666 | ||||
Taker Withdraw | 43978118 | 32 days ago | IN | 0 BNB | 0.00021494 | ||||
Set Halving Peri... | 43966860 | 32 days ago | IN | 0 BNB | 0.0000716 | ||||
Taker Withdraw | 43913900 | 34 days ago | IN | 0 BNB | 0.00026643 | ||||
Taker Withdraw | 43833313 | 37 days ago | IN | 0 BNB | 0.00032621 | ||||
Taker Withdraw | 43759332 | 39 days ago | IN | 0 BNB | 0.00045238 |
Loading...
Loading
Contract Name:
SwapMining
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at BscScan.com on 2021-04-08 */ // SPDX-License-Identifier: MIT pragma solidity >=0.5.0 <0.7.0; contract Ownable { address private _owner; constructor () internal { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } function owner() public view returns (address) { return _owner; } function isOwner(address account) public view returns (bool) { return account == _owner; } function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } modifier onlyOwner() { require(isOwner(msg.sender), "Ownable: caller is not the owner"); _; } event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); } library SafeMath { uint256 constant WAD = 10 ** 18; uint256 constant RAY = 10 ** 27; function wad() public pure returns (uint256) { return WAD; } function ray() public pure returns (uint256) { return RAY; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } function min(uint256 a, uint256 b) internal pure returns (uint256) { return a <= b ? a : b; } function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } function sqrt(uint256 a) internal pure returns (uint256 b) { if (a > 3) { b = a; uint256 x = a / 2 + 1; while (x < b) { b = x; x = (a / x + x) / 2; } } else if (a != 0) { b = 1; } } function wmul(uint256 a, uint256 b) internal pure returns (uint256) { return mul(a, b) / WAD; } function wmulRound(uint256 a, uint256 b) internal pure returns (uint256) { return add(mul(a, b), WAD / 2) / WAD; } function rmul(uint256 a, uint256 b) internal pure returns (uint256) { return mul(a, b) / RAY; } function rmulRound(uint256 a, uint256 b) internal pure returns (uint256) { return add(mul(a, b), RAY / 2) / RAY; } function wdiv(uint256 a, uint256 b) internal pure returns (uint256) { return div(mul(a, WAD), b); } function wdivRound(uint256 a, uint256 b) internal pure returns (uint256) { return add(mul(a, WAD), b / 2) / b; } function rdiv(uint256 a, uint256 b) internal pure returns (uint256) { return div(mul(a, RAY), b); } function rdivRound(uint256 a, uint256 b) internal pure returns (uint256) { return add(mul(a, RAY), b / 2) / b; } function wpow(uint256 x, uint256 n) internal pure returns (uint256) { uint256 result = WAD; while (n > 0) { if (n % 2 != 0) { result = wmul(result, x); } x = wmul(x, x); n /= 2; } return result; } function rpow(uint256 x, uint256 n) internal pure returns (uint256) { uint256 result = RAY; while (n > 0) { if (n % 2 != 0) { result = rmul(result, x); } x = rmul(x, x); n /= 2; } return result; } } library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) {// Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(value))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(value))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(value))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint256(_at(set._inner, index))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } 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 IMdx is IERC20 { function mint(address to, uint256 amount) external returns (bool); } interface IMdexFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function FEE_RATE_DENOMINATOR() external view returns (uint256); function feeRateNumerator() external view returns (uint256); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function feeToRate() external view returns (uint256); function initCodeHash() external view returns (bytes32); function pairFeeToRate(address) external view returns (uint256); function pairFees(address) external view returns (uint256); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function addPair(address) external returns (bool); function delPair(address) external returns (bool); function getSupportListLength() external view returns (uint256); function isSupportPair(address pair) external view returns (bool); function getSupportPair(uint256 index) external view returns (address); function setFeeRateNumerator(uint256) external; function setPairFees(address pair, uint256 fee) external; function setDefaultFeeToRate(uint256) external; function setPairFeeToRate(address pair, uint256 rate) external; function getPairFees(address) external view returns (uint256); function getPairRate(address) external view returns (uint256); function sortTokens(address tokenA, address tokenB) external pure returns (address token0, address token1); function pairFor(address tokenA, address tokenB) external view returns (address pair); function getReserves(address tokenA, address tokenB) external view returns (uint256 reserveA, uint256 reserveB); function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB); function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut, address token0, address token1) external view returns (uint256 amountOut); function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut, address token0, address token1) external view returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IMdexPair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure 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); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IOracle { function consult(address tokenIn, uint amountIn, address tokenOut) external view returns (uint amountOut); } contract SwapMining is Ownable { using SafeMath for uint256; using EnumerableSet for EnumerableSet.AddressSet; EnumerableSet.AddressSet private _whitelist; // MDX tokens created per block uint256 public mdxPerBlock; // The block number when MDX mining starts. uint256 public startBlock; // How many blocks are halved uint256 public halvingPeriod = 1670400; // Total allocation points uint256 public totalAllocPoint = 0; IOracle public oracle; // router address address public router; // factory address IMdexFactory public factory; // mdx token address IMdx public mdx; // Calculate price based on BUSD-T address public targetToken; // pair corresponding pid mapping(address => uint256) public pairOfPid; constructor( IMdx _mdx, IMdexFactory _factory, IOracle _oracle, address _router, address _targetToken, uint256 _mdxPerBlock, uint256 _startBlock ) public { mdx = _mdx; factory = _factory; oracle = _oracle; router = _router; targetToken = _targetToken; mdxPerBlock = _mdxPerBlock; startBlock = _startBlock; } struct UserInfo { uint256 quantity; // How many LP tokens the user has provided uint256 blockNumber; // Last transaction block } struct PoolInfo { address pair; // Trading pairs that can be mined uint256 quantity; // Current amount of LPs uint256 totalQuantity; // All quantity uint256 allocPoint; // How many allocation points assigned to this pool uint256 allocMdxAmount; // How many MDXs uint256 lastRewardBlock;// Last transaction block } PoolInfo[] public poolInfo; mapping(uint256 => mapping(address => UserInfo)) public userInfo; function poolLength() public view returns (uint256) { return poolInfo.length; } function addPair(uint256 _allocPoint, address _pair, bool _withUpdate) public onlyOwner { require(_pair != address(0), "_pair is the zero address"); if (_withUpdate) { massMintPools(); } uint256 lastRewardBlock = block.number > startBlock ? block.number : startBlock; totalAllocPoint = totalAllocPoint.add(_allocPoint); poolInfo.push(PoolInfo({ pair : _pair, quantity : 0, totalQuantity : 0, allocPoint : _allocPoint, allocMdxAmount : 0, lastRewardBlock : lastRewardBlock })); pairOfPid[_pair] = poolLength() - 1; } // Update the allocPoint of the pool function setPair(uint256 _pid, uint256 _allocPoint, bool _withUpdate) public onlyOwner { if (_withUpdate) { massMintPools(); } totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint); poolInfo[_pid].allocPoint = _allocPoint; } // Set the number of mdx produced by each block function setMdxPerBlock(uint256 _newPerBlock) public onlyOwner { massMintPools(); mdxPerBlock = _newPerBlock; } // Only tokens in the whitelist can be mined MDX function addWhitelist(address _addToken) public onlyOwner returns (bool) { require(_addToken != address(0), "SwapMining: token is the zero address"); return EnumerableSet.add(_whitelist, _addToken); } function delWhitelist(address _delToken) public onlyOwner returns (bool) { require(_delToken != address(0), "SwapMining: token is the zero address"); return EnumerableSet.remove(_whitelist, _delToken); } function getWhitelistLength() public view returns (uint256) { return EnumerableSet.length(_whitelist); } function isWhitelist(address _token) public view returns (bool) { return EnumerableSet.contains(_whitelist, _token); } function getWhitelist(uint256 _index) public view returns (address){ require(_index <= getWhitelistLength() - 1, "SwapMining: index out of bounds"); return EnumerableSet.at(_whitelist, _index); } function setHalvingPeriod(uint256 _block) public onlyOwner { halvingPeriod = _block; } function setRouter(address newRouter) public onlyOwner { require(newRouter != address(0), "SwapMining: new router is the zero address"); router = newRouter; } function setOracle(IOracle _oracle) public onlyOwner { require(address(_oracle) != address(0), "SwapMining: new oracle is the zero address"); oracle = _oracle; } // At what phase function phase(uint256 blockNumber) public view returns (uint256) { if (halvingPeriod == 0) { return 0; } if (blockNumber > startBlock) { return (blockNumber.sub(startBlock).sub(1)).div(halvingPeriod); } return 0; } function phase() public view returns (uint256) { return phase(block.number); } function reward(uint256 blockNumber) public view returns (uint256) { uint256 _phase = phase(blockNumber); return mdxPerBlock.div(2 ** _phase); } function reward() public view returns (uint256) { return reward(block.number); } // Rewards for the current block function getMdxReward(uint256 _lastRewardBlock) public view returns (uint256) { require(_lastRewardBlock <= block.number, "SwapMining: must little than the current block number"); uint256 blockReward = 0; uint256 n = phase(_lastRewardBlock); uint256 m = phase(block.number); // If it crosses the cycle while (n < m) { n++; // Get the last block of the previous cycle uint256 r = n.mul(halvingPeriod).add(startBlock); // Get rewards from previous periods blockReward = blockReward.add((r.sub(_lastRewardBlock)).mul(reward(r))); _lastRewardBlock = r; } blockReward = blockReward.add((block.number.sub(_lastRewardBlock)).mul(reward(block.number))); return blockReward; } // Update all pools Called when updating allocPoint and setting new blocks function massMintPools() public { uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { mint(pid); } } function mint(uint256 _pid) public returns (bool) { PoolInfo storage pool = poolInfo[_pid]; if (block.number <= pool.lastRewardBlock) { return false; } uint256 blockReward = getMdxReward(pool.lastRewardBlock); if (blockReward <= 0) { return false; } // Calculate the rewards obtained by the pool based on the allocPoint uint256 mdxReward = blockReward.mul(pool.allocPoint).div(totalAllocPoint); mdx.mint(address(this), mdxReward); // Increase the number of tokens in the current pool pool.allocMdxAmount = pool.allocMdxAmount.add(mdxReward); pool.lastRewardBlock = block.number; return true; } // swapMining only router function swap(address account, address input, address output, uint256 amount) public onlyRouter returns (bool) { require(account != address(0), "SwapMining: taker swap account is the zero address"); require(input != address(0), "SwapMining: taker swap input is the zero address"); require(output != address(0), "SwapMining: taker swap output is the zero address"); if (poolLength() <= 0) { return false; } if (!isWhitelist(input) || !isWhitelist(output)) { return false; } address pair = IMdexFactory(factory).pairFor(input, output); PoolInfo storage pool = poolInfo[pairOfPid[pair]]; // If it does not exist or the allocPoint is 0 then return if (pool.pair != pair || pool.allocPoint <= 0) { return false; } uint256 quantity = getQuantity(output, amount, targetToken); if (quantity <= 0) { return false; } mint(pairOfPid[pair]); pool.quantity = pool.quantity.add(quantity); pool.totalQuantity = pool.totalQuantity.add(quantity); UserInfo storage user = userInfo[pairOfPid[pair]][account]; user.quantity = user.quantity.add(quantity); user.blockNumber = block.number; return true; } // The user withdraws all the transaction rewards of the pool function takerWithdraw() public { uint256 userSub; uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { PoolInfo storage pool = poolInfo[pid]; UserInfo storage user = userInfo[pid][msg.sender]; if (user.quantity > 0) { mint(pid); // The reward held by the user in this pool uint256 userReward = pool.allocMdxAmount.mul(user.quantity).div(pool.quantity); pool.quantity = pool.quantity.sub(user.quantity); pool.allocMdxAmount = pool.allocMdxAmount.sub(userReward); user.quantity = 0; user.blockNumber = block.number; userSub = userSub.add(userReward); } } if (userSub <= 0) { return; } mdx.transfer(msg.sender, userSub); } // Get rewards from users in the current pool function getUserReward(uint256 _pid) public view returns (uint256, uint256){ require(_pid <= poolInfo.length - 1, "SwapMining: Not find this pool"); uint256 userSub; PoolInfo memory pool = poolInfo[_pid]; UserInfo memory user = userInfo[_pid][msg.sender]; if (user.quantity > 0) { uint256 blockReward = getMdxReward(pool.lastRewardBlock); uint256 mdxReward = blockReward.mul(pool.allocPoint).div(totalAllocPoint); userSub = userSub.add((pool.allocMdxAmount.add(mdxReward)).mul(user.quantity).div(pool.quantity)); } //Mdx available to users, User transaction amount return (userSub, user.quantity); } // Get details of the pool function getPoolInfo(uint256 _pid) public view returns (address, address, uint256, uint256, uint256, uint256){ require(_pid <= poolInfo.length - 1, "SwapMining: Not find this pool"); PoolInfo memory pool = poolInfo[_pid]; address token0 = IMdexPair(pool.pair).token0(); address token1 = IMdexPair(pool.pair).token1(); uint256 mdxAmount = pool.allocMdxAmount; uint256 blockReward = getMdxReward(pool.lastRewardBlock); uint256 mdxReward = blockReward.mul(pool.allocPoint).div(totalAllocPoint); mdxAmount = mdxAmount.add(mdxReward); //token0,token1,Pool remaining reward,Total /Current transaction volume of the pool return (token0, token1, mdxAmount, pool.totalQuantity, pool.quantity, pool.allocPoint); } modifier onlyRouter() { require(msg.sender == router, "SwapMining: caller is not the router"); _; } function getQuantity(address outputToken, uint256 outputAmount, address anchorToken) public view returns (uint256) { uint256 quantity = 0; if (outputToken == anchorToken) { quantity = outputAmount; } else if (IMdexFactory(factory).getPair(outputToken, anchorToken) != address(0)) { quantity = IOracle(oracle).consult(outputToken, outputAmount, anchorToken); } else { uint256 length = getWhitelistLength(); for (uint256 index = 0; index < length; index++) { address intermediate = getWhitelist(index); if (IMdexFactory(factory).getPair(outputToken, intermediate) != address(0) && IMdexFactory(factory).getPair(intermediate, anchorToken) != address(0)) { uint256 interQuantity = IOracle(oracle).consult(outputToken, outputAmount, intermediate); quantity = IOracle(oracle).consult(intermediate, interQuantity, anchorToken); break; } } } return quantity; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IMdx","name":"_mdx","type":"address"},{"internalType":"contract IMdexFactory","name":"_factory","type":"address"},{"internalType":"contract IOracle","name":"_oracle","type":"address"},{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_targetToken","type":"address"},{"internalType":"uint256","name":"_mdxPerBlock","type":"uint256"},{"internalType":"uint256","name":"_startBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"addPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addToken","type":"address"}],"name":"addWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_delToken","type":"address"}],"name":"delWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IMdexFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lastRewardBlock","type":"uint256"}],"name":"getMdxReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"getPoolInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"outputToken","type":"address"},{"internalType":"uint256","name":"outputAmount","type":"uint256"},{"internalType":"address","name":"anchorToken","type":"address"}],"name":"getQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"getUserReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getWhitelist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWhitelistLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"halvingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"isWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massMintPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mdx","outputs":[{"internalType":"contract IMdx","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mdxPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"contract IOracle","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pairOfPid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"phase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"totalQuantity","type":"uint256"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"allocMdxAmount","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"reward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_block","type":"uint256"}],"name":"setHalvingPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPerBlock","type":"uint256"}],"name":"setMdxPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IOracle","name":"_oracle","type":"address"}],"name":"setOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"input","type":"address"},{"internalType":"address","name":"output","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"swap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"takerWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"targetToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405262197d00600555600060065534801561001c57600080fd5b506040516126c93803806126c9833981810160405260e081101561003f57600080fd5b50805160208201516040808401516060850151608086015160a087015160c090970151600080546001600160a01b031916331780825595519798969794969395929491926001600160a01b0316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600a80546001600160a01b03199081166001600160a01b03998a1617909155600980548216978916979097179096556007805487169588169590951790945560088054861693871693909317909255600b80549094169416939093179091556003919091556004556125a0806101296000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c806396db752a1161013b578063b5ec5c99116100b8578063e377fe351161007c578063e377fe3514610658578063f2fde38b14610675578063f80f5dd51461069b578063f887ea40146106c1578063f9d181f9146106c957610248565b8063b5ec5c99146105df578063b872dd0e146105fc578063c0d7865514610604578063c45a01551461062a578063c683630d1461063257610248565b8063a13202e9116100ff578063a13202e914610540578063a7ef67f614610548578063a9678a181461057e578063a9fb763c146105ba578063b1c9fe6e146105d757610248565b806396db752a146104bb57806397ecfaab146104d85780639f4ece2e146104fe5780639fb08cb714610506578063a0712d681461052357610248565b806348cd4cb1116101c95780637adbf9731161018d5780637adbf973146104385780637dc0d1d01461045e5780638da5cb5b146104665780638fa39a881461046e57806393f1a40b1461047657610248565b806348cd4cb1146103fb5780635672ab55146104035780635a3e251f1461040b578063715018a614610413578063791ba3741461041b57610248565b8063190cf6c911610210578063190cf6c91461030c578063228cb733146103395780632f380b35146103415780632f54bf6e1461039d578063327107f7146103d757610248565b80630495de501461024d578063081e3eda14610285578063135f8aa71461028d5780631526fe27146102aa57806317caf6f114610304575b600080fd5b6102736004803603602081101561026357600080fd5b50356001600160a01b03166106fd565b60408051918252519081900360200190f35b61027361070f565b610273600480360360208110156102a357600080fd5b5035610715565b6102c7600480360360208110156102c057600080fd5b5035610770565b604080516001600160a01b0390971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b6102736107bd565b6103376004803603606081101561032257600080fd5b508035906020810135906040013515156107c3565b005b610273610884565b61035e6004803603602081101561035757600080fd5b5035610894565b604080516001600160a01b039788168152959096166020860152848601939093526060840191909152608083015260a082015290519081900360c00190f35b6103c3600480360360208110156103b357600080fd5b50356001600160a01b0316610ab0565b604080519115158252519081900360200190f35b6103df610ac4565b604080516001600160a01b039092168252519081900360200190f35b610273610ad3565b6103df610ad9565b610273610ae8565b610337610aee565b6103376004803603602081101561043157600080fd5b5035610b80565b6103376004803603602081101561044e57600080fd5b50356001600160a01b0316610bd5565b6103df610c84565b6103df610c93565b610273610ca2565b6104a26004803603604081101561048c57600080fd5b50803590602001356001600160a01b0316610ca8565b6040805192835260208301919091528051918290030190f35b6103df600480360360208110156104d157600080fd5b5035610ccc565b6103c3600480360360208110156104ee57600080fd5b50356001600160a01b0316610d3e565b610337610dd8565b6104a26004803603602081101561051c57600080fd5b5035610dfc565b6103c36004803603602081101561053957600080fd5b5035610f90565b6102736110b0565b6102736004803603606081101561055e57600080fd5b506001600160a01b038135811691602081013591604090910135166110bc565b6103c36004803603608081101561059457600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561147f565b610273600480360360208110156105d057600080fd5b5035611796565b6102736117c3565b610337600480360360208110156105f557600080fd5b50356117ce565b61033761181b565b6103376004803603602081101561061a57600080fd5b50356001600160a01b031661197c565b6103df611a2b565b6103c36004803603602081101561064857600080fd5b50356001600160a01b0316611a3a565b6102736004803603602081101561066e57600080fd5b5035611a47565b6103376004803603602081101561068b57600080fd5b50356001600160a01b0316611b1f565b6103c3600480360360208110156106b157600080fd5b50356001600160a01b0316611b73565b6103df611c0d565b610337600480360360608110156106df57600080fd5b508035906001600160a01b0360208201351690604001351515611c1c565b600c6020526000908152604090205481565b600d5490565b60006005546000141561072a5750600061076b565b6004548211156107675761076060055461075a600161075460045487611e6a90919063ffffffff16565b90611e6a565b90611eac565b905061076b565b5060005b919050565b600d818154811061077d57fe5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160a01b0390941695509193909286565b60065481565b6107cc33610ab0565b61080b576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b801561081957610819610dd8565b61085682610850600d868154811061082d57fe5b906000526020600020906006020160030154600654611e6a90919063ffffffff16565b90611eee565b60068190555081600d848154811061086a57fe5b906000526020600020906006020160030181905550505050565b600061088f43611796565b905090565b6000806000806000806001600d80549050038711156108fa576040805162461bcd60e51b815260206004820152601e60248201527f537761704d696e696e673a204e6f742066696e64207468697320706f6f6c0000604482015290519081900360640190fd5b610902612323565b600d888154811061090f57fe5b600091825260208083206040805160c081018252600690940290910180546001600160a01b031680855260018201548585015260028201548584015260038201546060860152600480830154608087015260059092015460a08601528251630dfe168160e01b8152925194965093630dfe16819383830193909290829003018186803b15801561099e57600080fd5b505afa1580156109b2573d6000803e3d6000fd5b505050506040513d60208110156109c857600080fd5b505182516040805163d21220a760e01b815290519293506000926001600160a01b039092169163d21220a791600480820192602092909190829003018186803b158015610a1457600080fd5b505afa158015610a28573d6000803e3d6000fd5b505050506040513d6020811015610a3e57600080fd5b5051608084015160a085015191925090600090610a5a90611a47565b90506000610a7b60065461075a886060015185611f4890919063ffffffff16565b9050610a878382611eee565b60408701516020880151606090980151969f959e50909c509a5094985092965090945050505050565b6000546001600160a01b0390811691161490565b600b546001600160a01b031681565b60045481565b600a546001600160a01b031681565b60055481565b610af733610ab0565b610b36576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610b8933610ab0565b610bc8576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b610bd0610dd8565b600355565b610bde33610ab0565b610c1d576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b6001600160a01b038116610c625760405162461bcd60e51b815260040180806020018281038252602a81526020018061247a602a913960400191505060405180910390fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6007546001600160a01b031681565b6000546001600160a01b031690565b60035481565b600e6020908152600092835260408084209091529082529020805460019091015482565b60006001610cd86110b0565b03821115610d2d576040805162461bcd60e51b815260206004820152601f60248201527f537761704d696e696e673a20696e646578206f7574206f6620626f756e647300604482015290519081900360640190fd5b610d38600183611fa1565b92915050565b6000610d4933610ab0565b610d88576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b6001600160a01b038216610dcd5760405162461bcd60e51b81526004018080602001828103825260258152602001806124246025913960400191505060405180910390fd5b610d38600183611fad565b600d5460005b81811015610df857610def81610f90565b50600101610dde565b5050565b600d54600090819060001901831115610e5c576040805162461bcd60e51b815260206004820152601e60248201527f537761704d696e696e673a204e6f742066696e64207468697320706f6f6c0000604482015290519081900360640190fd5b6000610e66612323565b600d8581548110610e7357fe5b60009182526020918290206040805160c081018252600690930290910180546001600160a01b03168352600181015493830193909352600283015490820152600382015460608201526004820154608082015260059091015460a08201529050610edb612362565b506000858152600e60209081526040808320338452825291829020825180840190935280548084526001909101549183019190915215610f83576000610f248360a00151611a47565b90506000610f4560065461075a866060015185611f4890919063ffffffff16565b9050610f7e610f77856020015161075a8660000151610f71868a60800151611eee90919063ffffffff16565b90611f48565b8690611eee565b945050505b5191935090915050915091565b600080600d8381548110610fa057fe5b9060005260206000209060060201905080600501544311610fc557600091505061076b565b6000610fd48260050154611a47565b905060008111610fe95760009250505061076b565b600061100860065461075a856003015485611f4890919063ffffffff16565b600a54604080516340c10f1960e01b81523060048201526024810184905290519293506001600160a01b03909116916340c10f19916044808201926020929091908290030181600087803b15801561105f57600080fd5b505af1158015611073573d6000803e3d6000fd5b505050506040513d602081101561108957600080fd5b5050600483015461109a9082611eee565b6004840155505043600590910155506001919050565b600061088f6001611fc2565b6000806001600160a01b0385811690841614156110da575082611477565b6009546040805163e6a4390560e01b81526001600160a01b038881166004830152868116602483015291516000939092169163e6a4390591604480820192602092909190829003018186803b15801561113257600080fd5b505afa158015611146573d6000803e3d6000fd5b505050506040513d602081101561115c57600080fd5b50516001600160a01b0316146111fb5760075460408051632321bc7960e21b81526001600160a01b03888116600483015260248201889052868116604483015291519190921691638c86f1e4916064808301926020929190829003018186803b1580156111c857600080fd5b505afa1580156111dc573d6000803e3d6000fd5b505050506040513d60208110156111f257600080fd5b50519050611477565b60006112056110b0565b905060005b8181101561147457600061121d82610ccc565b6009546040805163e6a4390560e01b81526001600160a01b038c8116600483015284811660248301529151939450600093919092169163e6a43905916044808301926020929190829003018186803b15801561127857600080fd5b505afa15801561128c573d6000803e3d6000fd5b505050506040513d60208110156112a257600080fd5b50516001600160a01b03161480159061134657506009546040805163e6a4390560e01b81526001600160a01b038481166004830152898116602483015291516000939092169163e6a4390591604480820192602092909190829003018186803b15801561130e57600080fd5b505afa158015611322573d6000803e3d6000fd5b505050506040513d602081101561133857600080fd5b50516001600160a01b031614155b1561146b5760075460408051632321bc7960e21b81526001600160a01b038b81166004830152602482018b9052848116604483015291516000939290921691638c86f1e491606480820192602092909190829003018186803b1580156113ab57600080fd5b505afa1580156113bf573d6000803e3d6000fd5b505050506040513d60208110156113d557600080fd5b505160075460408051632321bc7960e21b81526001600160a01b038681166004830152602482018590528b811660448301529151939450911691638c86f1e491606480820192602092909190829003018186803b15801561143557600080fd5b505afa158015611449573d6000803e3d6000fd5b505050506040513d602081101561145f57600080fd5b50519450611474915050565b5060010161120a565b50505b949350505050565b6008546000906001600160a01b031633146114cb5760405162461bcd60e51b81526004018080602001828103825260248152602001806124a46024913960400191505060405180910390fd5b6001600160a01b0385166115105760405162461bcd60e51b81526004018080602001828103825260328152602001806125096032913960400191505060405180910390fd5b6001600160a01b0384166115555760405162461bcd60e51b815260040180806020018281038252603081526020018061253b6030913960400191505060405180910390fd5b6001600160a01b03831661159a5760405162461bcd60e51b81526004018080602001828103825260318152602001806124496031913960400191505060405180910390fd5b60006115a461070f565b116115b157506000611477565b6115ba84611a3a565b15806115cc57506115ca83611a3a565b155b156115d957506000611477565b600954604080516396ed28f960e01b81526001600160a01b0387811660048301528681166024830152915160009392909216916396ed28f991604480820192602092909190829003018186803b15801561163257600080fd5b505afa158015611646573d6000803e3d6000fd5b505050506040513d602081101561165c57600080fd5b50516001600160a01b0381166000908152600c6020526040812054600d80549394509192811061168857fe5b6000918252602090912060069091020180549091506001600160a01b0383811691161415806116b957506003810154155b156116c957600092505050611477565b600b546000906116e590879087906001600160a01b03166110bc565b9050600081116116fb5760009350505050611477565b6001600160a01b0383166000908152600c602052604090205461171d90610f90565b50600182015461172d9082611eee565b600183015560028201546117419082611eee565b60028301556001600160a01b038084166000908152600c60209081526040808320548352600e8252808320938c1683529290522080546117819083611eee565b81554360019182015598975050505050505050565b6000806117a283610715565b90506117bc8160020a600354611eac90919063ffffffff16565b9392505050565b600061088f43610715565b6117d733610ab0565b611816576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b600555565b600d54600090815b818110156118e7576000600d828154811061183a57fe5b60009182526020808320858452600e825260408085203386529092529220805460069092029092019250156118dd5761187283610f90565b506000611898836001015461075a84600001548660040154611f4890919063ffffffff16565b825460018501549192506118ac9190611e6a565b600184015560048301546118c09082611e6a565b6004840155600082554360018301556118d98682611eee565b9550505b5050600101611823565b50600082116118f757505061197a565b600a546040805163a9059cbb60e01b81523360048201526024810185905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561194b57600080fd5b505af115801561195f573d6000803e3d6000fd5b505050506040513d602081101561197557600080fd5b505050505b565b61198533610ab0565b6119c4576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b6001600160a01b038116611a095760405162461bcd60e51b815260040180806020018281038252602a81526020018061239f602a913960400191505060405180910390fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b031681565b6000610d38600183611fcd565b600043821115611a885760405162461bcd60e51b81526004018080602001828103825260358152602001806123ef6035913960400191505060405180910390fd5b600080611a9484610715565b90506000611aa143610715565b90505b80821015611af657600454600554600190930192600091611aca91610850908690611f48565b9050611aec611ae5611adb83611796565b610f71848a611e6a565b8590611eee565b9095509250611aa4565b611b16611b0f611b0543611796565b610f714389611e6a565b8490611eee565b95945050505050565b611b2833610ab0565b611b67576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b611b7081611fe2565b50565b6000611b7e33610ab0565b611bbd576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b6001600160a01b038216611c025760405162461bcd60e51b81526004018080602001828103825260258152602001806124246025913960400191505060405180910390fd5b610d38600183612082565b6008546001600160a01b031681565b611c2533610ab0565b611c64576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b6001600160a01b038216611cbf576040805162461bcd60e51b815260206004820152601960248201527f5f7061697220697320746865207a65726f206164647265737300000000000000604482015290519081900360640190fd5b8015611ccd57611ccd610dd8565b60006004544311611ce057600454611ce2565b435b600654909150611cf29085611eee565b60069081556040805160c0810182526001600160a01b038681168252600060208301818152938301818152606084018a81526080850183815260a08601898152600d8054600180820183559190965296517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb59590990294850180546001600160a01b031916999096169890981790945594517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb6830155517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb782015592517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb8840155517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb983015591517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eba90910155611e4761070f565b6001600160a01b039094166000908152600c602052604090209303909255505050565b60006117bc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612097565b60006117bc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061212e565b6000828201838110156117bc576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082611f5757506000610d38565b82820282848281611f6457fe5b04146117bc5760405162461bcd60e51b81526004018080602001828103825260218152602001806124c86021913960400191505060405180910390fd5b60006117bc8383612193565b60006117bc836001600160a01b0384166121f7565b6000610d38826122bd565b60006117bc836001600160a01b0384166122c1565b6001600160a01b0381166120275760405162461bcd60e51b81526004018080602001828103825260268152602001806123c96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006117bc836001600160a01b0384166122d9565b600081848411156121265760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156120eb5781810151838201526020016120d3565b50505050905090810190601f1680156121185780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000818361217d5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156120eb5781810151838201526020016120d3565b50600083858161218957fe5b0495945050505050565b815460009082106121d55760405162461bcd60e51b815260040180806020018281038252602281526020018061237d6022913960400191505060405180910390fd5b8260000182815481106121e457fe5b9060005260206000200154905092915050565b600081815260018301602052604081205480156122b3578354600019808301919081019060009087908390811061222a57fe5b906000526020600020015490508087600001848154811061224757fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061227757fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610d38565b6000915050610d38565b5490565b60009081526001919091016020526040902054151590565b60006122e583836122c1565b61231b57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d38565b506000610d38565b6040518060c0016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b60405180604001604052806000815260200160008152509056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473537761704d696e696e673a206e657720726f7574657220697320746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373537761704d696e696e673a206d757374206c6974746c65207468616e207468652063757272656e7420626c6f636b206e756d626572537761704d696e696e673a20746f6b656e20697320746865207a65726f2061646472657373537761704d696e696e673a2074616b65722073776170206f757470757420697320746865207a65726f2061646472657373537761704d696e696e673a206e6577206f7261636c6520697320746865207a65726f2061646472657373537761704d696e696e673a2063616c6c6572206973206e6f742074686520726f75746572536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572537761704d696e696e673a2074616b65722073776170206163636f756e7420697320746865207a65726f2061646472657373537761704d696e696e673a2074616b6572207377617020696e70757420697320746865207a65726f2061646472657373a2646970667358221220e7e40616c339d8f4178fc2818f8b8349f7faf87b1dfb3b84ad02f0c6bbf2e10664736f6c634300060c00330000000000000000000000009c65ab58d8d978db963e63f2bfb7121627e3a7390000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b800000000000000000000000017c77d7203a7deeb44754c6bc143f249969456f50000000000000000000000007dae51bd3e3376b8c7c4900e9107f12be3af1ba800000000000000000000000055d398326f99059ff775485246999027b3197955000000000000000000000000000000000000000000000004563918244f4000000000000000000000000000000000000000000000000000000000000000617416
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102485760003560e01c806396db752a1161013b578063b5ec5c99116100b8578063e377fe351161007c578063e377fe3514610658578063f2fde38b14610675578063f80f5dd51461069b578063f887ea40146106c1578063f9d181f9146106c957610248565b8063b5ec5c99146105df578063b872dd0e146105fc578063c0d7865514610604578063c45a01551461062a578063c683630d1461063257610248565b8063a13202e9116100ff578063a13202e914610540578063a7ef67f614610548578063a9678a181461057e578063a9fb763c146105ba578063b1c9fe6e146105d757610248565b806396db752a146104bb57806397ecfaab146104d85780639f4ece2e146104fe5780639fb08cb714610506578063a0712d681461052357610248565b806348cd4cb1116101c95780637adbf9731161018d5780637adbf973146104385780637dc0d1d01461045e5780638da5cb5b146104665780638fa39a881461046e57806393f1a40b1461047657610248565b806348cd4cb1146103fb5780635672ab55146104035780635a3e251f1461040b578063715018a614610413578063791ba3741461041b57610248565b8063190cf6c911610210578063190cf6c91461030c578063228cb733146103395780632f380b35146103415780632f54bf6e1461039d578063327107f7146103d757610248565b80630495de501461024d578063081e3eda14610285578063135f8aa71461028d5780631526fe27146102aa57806317caf6f114610304575b600080fd5b6102736004803603602081101561026357600080fd5b50356001600160a01b03166106fd565b60408051918252519081900360200190f35b61027361070f565b610273600480360360208110156102a357600080fd5b5035610715565b6102c7600480360360208110156102c057600080fd5b5035610770565b604080516001600160a01b0390971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b6102736107bd565b6103376004803603606081101561032257600080fd5b508035906020810135906040013515156107c3565b005b610273610884565b61035e6004803603602081101561035757600080fd5b5035610894565b604080516001600160a01b039788168152959096166020860152848601939093526060840191909152608083015260a082015290519081900360c00190f35b6103c3600480360360208110156103b357600080fd5b50356001600160a01b0316610ab0565b604080519115158252519081900360200190f35b6103df610ac4565b604080516001600160a01b039092168252519081900360200190f35b610273610ad3565b6103df610ad9565b610273610ae8565b610337610aee565b6103376004803603602081101561043157600080fd5b5035610b80565b6103376004803603602081101561044e57600080fd5b50356001600160a01b0316610bd5565b6103df610c84565b6103df610c93565b610273610ca2565b6104a26004803603604081101561048c57600080fd5b50803590602001356001600160a01b0316610ca8565b6040805192835260208301919091528051918290030190f35b6103df600480360360208110156104d157600080fd5b5035610ccc565b6103c3600480360360208110156104ee57600080fd5b50356001600160a01b0316610d3e565b610337610dd8565b6104a26004803603602081101561051c57600080fd5b5035610dfc565b6103c36004803603602081101561053957600080fd5b5035610f90565b6102736110b0565b6102736004803603606081101561055e57600080fd5b506001600160a01b038135811691602081013591604090910135166110bc565b6103c36004803603608081101561059457600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561147f565b610273600480360360208110156105d057600080fd5b5035611796565b6102736117c3565b610337600480360360208110156105f557600080fd5b50356117ce565b61033761181b565b6103376004803603602081101561061a57600080fd5b50356001600160a01b031661197c565b6103df611a2b565b6103c36004803603602081101561064857600080fd5b50356001600160a01b0316611a3a565b6102736004803603602081101561066e57600080fd5b5035611a47565b6103376004803603602081101561068b57600080fd5b50356001600160a01b0316611b1f565b6103c3600480360360208110156106b157600080fd5b50356001600160a01b0316611b73565b6103df611c0d565b610337600480360360608110156106df57600080fd5b508035906001600160a01b0360208201351690604001351515611c1c565b600c6020526000908152604090205481565b600d5490565b60006005546000141561072a5750600061076b565b6004548211156107675761076060055461075a600161075460045487611e6a90919063ffffffff16565b90611e6a565b90611eac565b905061076b565b5060005b919050565b600d818154811061077d57fe5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160a01b0390941695509193909286565b60065481565b6107cc33610ab0565b61080b576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b801561081957610819610dd8565b61085682610850600d868154811061082d57fe5b906000526020600020906006020160030154600654611e6a90919063ffffffff16565b90611eee565b60068190555081600d848154811061086a57fe5b906000526020600020906006020160030181905550505050565b600061088f43611796565b905090565b6000806000806000806001600d80549050038711156108fa576040805162461bcd60e51b815260206004820152601e60248201527f537761704d696e696e673a204e6f742066696e64207468697320706f6f6c0000604482015290519081900360640190fd5b610902612323565b600d888154811061090f57fe5b600091825260208083206040805160c081018252600690940290910180546001600160a01b031680855260018201548585015260028201548584015260038201546060860152600480830154608087015260059092015460a08601528251630dfe168160e01b8152925194965093630dfe16819383830193909290829003018186803b15801561099e57600080fd5b505afa1580156109b2573d6000803e3d6000fd5b505050506040513d60208110156109c857600080fd5b505182516040805163d21220a760e01b815290519293506000926001600160a01b039092169163d21220a791600480820192602092909190829003018186803b158015610a1457600080fd5b505afa158015610a28573d6000803e3d6000fd5b505050506040513d6020811015610a3e57600080fd5b5051608084015160a085015191925090600090610a5a90611a47565b90506000610a7b60065461075a886060015185611f4890919063ffffffff16565b9050610a878382611eee565b60408701516020880151606090980151969f959e50909c509a5094985092965090945050505050565b6000546001600160a01b0390811691161490565b600b546001600160a01b031681565b60045481565b600a546001600160a01b031681565b60055481565b610af733610ab0565b610b36576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610b8933610ab0565b610bc8576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b610bd0610dd8565b600355565b610bde33610ab0565b610c1d576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b6001600160a01b038116610c625760405162461bcd60e51b815260040180806020018281038252602a81526020018061247a602a913960400191505060405180910390fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6007546001600160a01b031681565b6000546001600160a01b031690565b60035481565b600e6020908152600092835260408084209091529082529020805460019091015482565b60006001610cd86110b0565b03821115610d2d576040805162461bcd60e51b815260206004820152601f60248201527f537761704d696e696e673a20696e646578206f7574206f6620626f756e647300604482015290519081900360640190fd5b610d38600183611fa1565b92915050565b6000610d4933610ab0565b610d88576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b6001600160a01b038216610dcd5760405162461bcd60e51b81526004018080602001828103825260258152602001806124246025913960400191505060405180910390fd5b610d38600183611fad565b600d5460005b81811015610df857610def81610f90565b50600101610dde565b5050565b600d54600090819060001901831115610e5c576040805162461bcd60e51b815260206004820152601e60248201527f537761704d696e696e673a204e6f742066696e64207468697320706f6f6c0000604482015290519081900360640190fd5b6000610e66612323565b600d8581548110610e7357fe5b60009182526020918290206040805160c081018252600690930290910180546001600160a01b03168352600181015493830193909352600283015490820152600382015460608201526004820154608082015260059091015460a08201529050610edb612362565b506000858152600e60209081526040808320338452825291829020825180840190935280548084526001909101549183019190915215610f83576000610f248360a00151611a47565b90506000610f4560065461075a866060015185611f4890919063ffffffff16565b9050610f7e610f77856020015161075a8660000151610f71868a60800151611eee90919063ffffffff16565b90611f48565b8690611eee565b945050505b5191935090915050915091565b600080600d8381548110610fa057fe5b9060005260206000209060060201905080600501544311610fc557600091505061076b565b6000610fd48260050154611a47565b905060008111610fe95760009250505061076b565b600061100860065461075a856003015485611f4890919063ffffffff16565b600a54604080516340c10f1960e01b81523060048201526024810184905290519293506001600160a01b03909116916340c10f19916044808201926020929091908290030181600087803b15801561105f57600080fd5b505af1158015611073573d6000803e3d6000fd5b505050506040513d602081101561108957600080fd5b5050600483015461109a9082611eee565b6004840155505043600590910155506001919050565b600061088f6001611fc2565b6000806001600160a01b0385811690841614156110da575082611477565b6009546040805163e6a4390560e01b81526001600160a01b038881166004830152868116602483015291516000939092169163e6a4390591604480820192602092909190829003018186803b15801561113257600080fd5b505afa158015611146573d6000803e3d6000fd5b505050506040513d602081101561115c57600080fd5b50516001600160a01b0316146111fb5760075460408051632321bc7960e21b81526001600160a01b03888116600483015260248201889052868116604483015291519190921691638c86f1e4916064808301926020929190829003018186803b1580156111c857600080fd5b505afa1580156111dc573d6000803e3d6000fd5b505050506040513d60208110156111f257600080fd5b50519050611477565b60006112056110b0565b905060005b8181101561147457600061121d82610ccc565b6009546040805163e6a4390560e01b81526001600160a01b038c8116600483015284811660248301529151939450600093919092169163e6a43905916044808301926020929190829003018186803b15801561127857600080fd5b505afa15801561128c573d6000803e3d6000fd5b505050506040513d60208110156112a257600080fd5b50516001600160a01b03161480159061134657506009546040805163e6a4390560e01b81526001600160a01b038481166004830152898116602483015291516000939092169163e6a4390591604480820192602092909190829003018186803b15801561130e57600080fd5b505afa158015611322573d6000803e3d6000fd5b505050506040513d602081101561133857600080fd5b50516001600160a01b031614155b1561146b5760075460408051632321bc7960e21b81526001600160a01b038b81166004830152602482018b9052848116604483015291516000939290921691638c86f1e491606480820192602092909190829003018186803b1580156113ab57600080fd5b505afa1580156113bf573d6000803e3d6000fd5b505050506040513d60208110156113d557600080fd5b505160075460408051632321bc7960e21b81526001600160a01b038681166004830152602482018590528b811660448301529151939450911691638c86f1e491606480820192602092909190829003018186803b15801561143557600080fd5b505afa158015611449573d6000803e3d6000fd5b505050506040513d602081101561145f57600080fd5b50519450611474915050565b5060010161120a565b50505b949350505050565b6008546000906001600160a01b031633146114cb5760405162461bcd60e51b81526004018080602001828103825260248152602001806124a46024913960400191505060405180910390fd5b6001600160a01b0385166115105760405162461bcd60e51b81526004018080602001828103825260328152602001806125096032913960400191505060405180910390fd5b6001600160a01b0384166115555760405162461bcd60e51b815260040180806020018281038252603081526020018061253b6030913960400191505060405180910390fd5b6001600160a01b03831661159a5760405162461bcd60e51b81526004018080602001828103825260318152602001806124496031913960400191505060405180910390fd5b60006115a461070f565b116115b157506000611477565b6115ba84611a3a565b15806115cc57506115ca83611a3a565b155b156115d957506000611477565b600954604080516396ed28f960e01b81526001600160a01b0387811660048301528681166024830152915160009392909216916396ed28f991604480820192602092909190829003018186803b15801561163257600080fd5b505afa158015611646573d6000803e3d6000fd5b505050506040513d602081101561165c57600080fd5b50516001600160a01b0381166000908152600c6020526040812054600d80549394509192811061168857fe5b6000918252602090912060069091020180549091506001600160a01b0383811691161415806116b957506003810154155b156116c957600092505050611477565b600b546000906116e590879087906001600160a01b03166110bc565b9050600081116116fb5760009350505050611477565b6001600160a01b0383166000908152600c602052604090205461171d90610f90565b50600182015461172d9082611eee565b600183015560028201546117419082611eee565b60028301556001600160a01b038084166000908152600c60209081526040808320548352600e8252808320938c1683529290522080546117819083611eee565b81554360019182015598975050505050505050565b6000806117a283610715565b90506117bc8160020a600354611eac90919063ffffffff16565b9392505050565b600061088f43610715565b6117d733610ab0565b611816576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b600555565b600d54600090815b818110156118e7576000600d828154811061183a57fe5b60009182526020808320858452600e825260408085203386529092529220805460069092029092019250156118dd5761187283610f90565b506000611898836001015461075a84600001548660040154611f4890919063ffffffff16565b825460018501549192506118ac9190611e6a565b600184015560048301546118c09082611e6a565b6004840155600082554360018301556118d98682611eee565b9550505b5050600101611823565b50600082116118f757505061197a565b600a546040805163a9059cbb60e01b81523360048201526024810185905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561194b57600080fd5b505af115801561195f573d6000803e3d6000fd5b505050506040513d602081101561197557600080fd5b505050505b565b61198533610ab0565b6119c4576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b6001600160a01b038116611a095760405162461bcd60e51b815260040180806020018281038252602a81526020018061239f602a913960400191505060405180910390fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b031681565b6000610d38600183611fcd565b600043821115611a885760405162461bcd60e51b81526004018080602001828103825260358152602001806123ef6035913960400191505060405180910390fd5b600080611a9484610715565b90506000611aa143610715565b90505b80821015611af657600454600554600190930192600091611aca91610850908690611f48565b9050611aec611ae5611adb83611796565b610f71848a611e6a565b8590611eee565b9095509250611aa4565b611b16611b0f611b0543611796565b610f714389611e6a565b8490611eee565b95945050505050565b611b2833610ab0565b611b67576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b611b7081611fe2565b50565b6000611b7e33610ab0565b611bbd576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b6001600160a01b038216611c025760405162461bcd60e51b81526004018080602001828103825260258152602001806124246025913960400191505060405180910390fd5b610d38600183612082565b6008546001600160a01b031681565b611c2533610ab0565b611c64576040805162461bcd60e51b815260206004820181905260248201526000805160206124e9833981519152604482015290519081900360640190fd5b6001600160a01b038216611cbf576040805162461bcd60e51b815260206004820152601960248201527f5f7061697220697320746865207a65726f206164647265737300000000000000604482015290519081900360640190fd5b8015611ccd57611ccd610dd8565b60006004544311611ce057600454611ce2565b435b600654909150611cf29085611eee565b60069081556040805160c0810182526001600160a01b038681168252600060208301818152938301818152606084018a81526080850183815260a08601898152600d8054600180820183559190965296517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb59590990294850180546001600160a01b031916999096169890981790945594517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb6830155517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb782015592517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb8840155517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb983015591517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eba90910155611e4761070f565b6001600160a01b039094166000908152600c602052604090209303909255505050565b60006117bc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612097565b60006117bc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061212e565b6000828201838110156117bc576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082611f5757506000610d38565b82820282848281611f6457fe5b04146117bc5760405162461bcd60e51b81526004018080602001828103825260218152602001806124c86021913960400191505060405180910390fd5b60006117bc8383612193565b60006117bc836001600160a01b0384166121f7565b6000610d38826122bd565b60006117bc836001600160a01b0384166122c1565b6001600160a01b0381166120275760405162461bcd60e51b81526004018080602001828103825260268152602001806123c96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006117bc836001600160a01b0384166122d9565b600081848411156121265760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156120eb5781810151838201526020016120d3565b50505050905090810190601f1680156121185780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000818361217d5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156120eb5781810151838201526020016120d3565b50600083858161218957fe5b0495945050505050565b815460009082106121d55760405162461bcd60e51b815260040180806020018281038252602281526020018061237d6022913960400191505060405180910390fd5b8260000182815481106121e457fe5b9060005260206000200154905092915050565b600081815260018301602052604081205480156122b3578354600019808301919081019060009087908390811061222a57fe5b906000526020600020015490508087600001848154811061224757fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061227757fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610d38565b6000915050610d38565b5490565b60009081526001919091016020526040902054151590565b60006122e583836122c1565b61231b57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d38565b506000610d38565b6040518060c0016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b60405180604001604052806000815260200160008152509056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473537761704d696e696e673a206e657720726f7574657220697320746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373537761704d696e696e673a206d757374206c6974746c65207468616e207468652063757272656e7420626c6f636b206e756d626572537761704d696e696e673a20746f6b656e20697320746865207a65726f2061646472657373537761704d696e696e673a2074616b65722073776170206f757470757420697320746865207a65726f2061646472657373537761704d696e696e673a206e6577206f7261636c6520697320746865207a65726f2061646472657373537761704d696e696e673a2063616c6c6572206973206e6f742074686520726f75746572536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572537761704d696e696e673a2074616b65722073776170206163636f756e7420697320746865207a65726f2061646472657373537761704d696e696e673a2074616b6572207377617020696e70757420697320746865207a65726f2061646472657373a2646970667358221220e7e40616c339d8f4178fc2818f8b8349f7faf87b1dfb3b84ad02f0c6bbf2e10664736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000009c65ab58d8d978db963e63f2bfb7121627e3a7390000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b800000000000000000000000017c77d7203a7deeb44754c6bc143f249969456f50000000000000000000000007dae51bd3e3376b8c7c4900e9107f12be3af1ba800000000000000000000000055d398326f99059ff775485246999027b3197955000000000000000000000000000000000000000000000004563918244f4000000000000000000000000000000000000000000000000000000000000000617416
-----Decoded View---------------
Arg [0] : _mdx (address): 0x9C65AB58d8d978DB963e63f2bfB7121627e3a739
Arg [1] : _factory (address): 0x3CD1C46068dAEa5Ebb0d3f55F6915B10648062B8
Arg [2] : _oracle (address): 0x17C77d7203A7dEeb44754c6Bc143F249969456f5
Arg [3] : _router (address): 0x7DAe51BD3E3376B8c7c4900E9107f12Be3AF1bA8
Arg [4] : _targetToken (address): 0x55d398326f99059fF775485246999027B3197955
Arg [5] : _mdxPerBlock (uint256): 80000000000000000000
Arg [6] : _startBlock (uint256): 6386710
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000009c65ab58d8d978db963e63f2bfb7121627e3a739
Arg [1] : 0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b8
Arg [2] : 00000000000000000000000017c77d7203a7deeb44754c6bc143f249969456f5
Arg [3] : 0000000000000000000000007dae51bd3e3376b8c7c4900e9107f12be3af1ba8
Arg [4] : 00000000000000000000000055d398326f99059ff775485246999027b3197955
Arg [5] : 000000000000000000000000000000000000000000000004563918244f400000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000617416
Deployed Bytecode Sourcemap
20718:12574:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21489:44;;;;;;;;;;;;;;;;-1:-1:-1;21489:44:0;-1:-1:-1;;;;;21489:44:0;;:::i;:::-;;;;;;;;;;;;;;;;22670:93;;;:::i;25513:291::-;;;;;;;;;;;;;;;;-1:-1:-1;25513:291:0;;:::i;22562:26::-;;;;;;;;;;;;;;;;-1:-1:-1;22562:26:0;;:::i;:::-;;;;-1:-1:-1;;;;;22562:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21159:34;;;:::i;23482:306::-;;;;;;;;;;;;;;;;-1:-1:-1;23482:306:0;;;;;;;;;;;;;;:::i;:::-;;26087:94;;;:::i;31261:798::-;;;;;;;;;;;;;;;;-1:-1:-1;31261:798:0;;:::i;:::-;;;;-1:-1:-1;;;;;31261:798:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;336:104;;;;;;;;;;;;;;;;-1:-1:-1;336:104:0;-1:-1:-1;;;;;336:104:0;;:::i;:::-;;;;;;;;;;;;;;;;;;21425:26;;;:::i;:::-;;;;-1:-1:-1;;;;;21425:26:0;;;;;;;;;;;;;;21015:25;;;:::i;21363:15::-;;;:::i;21082:38::-;;;:::i;448:140::-;;;:::i;23849:134::-;;;;;;;;;;;;;;;;-1:-1:-1;23849:134:0;;:::i;25299:184::-;;;;;;;;;;;;;;;;-1:-1:-1;25299:184:0;-1:-1:-1;;;;;25299:184:0;;:::i;21200:21::-;;;:::i;249:79::-;;;:::i;20933:26::-;;;:::i;22595:64::-;;;;;;;;;;;;;;;;-1:-1:-1;22595:64:0;;;;;;-1:-1:-1;;;;;22595:64:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24776:218;;;;;;;;;;;;;;;;-1:-1:-1;24776:218:0;;:::i;24276:226::-;;;;;;;;;;;;;;;;-1:-1:-1;24276:226:0;-1:-1:-1;;;;;24276:226:0;;:::i;27146:172::-;;;:::i;30506:715::-;;;;;;;;;;;;;;;;-1:-1:-1;30506:715:0;;:::i;27326:741::-;;;;;;;;;;;;;;;;-1:-1:-1;27326:741:0;;:::i;24510:118::-;;;:::i;32197:1090::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32197:1090:0;;;;;;;;;;;;;;;;;:::i;28106:1351::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28106:1351:0;;;;;;;;;;;;;;;;;;;;;;:::i;25912:167::-;;;;;;;;;;;;;;;;-1:-1:-1;25912:167:0;;:::i;25812:92::-;;;:::i;25002:100::-;;;;;;;;;;;;;;;;-1:-1:-1;25002:100:0;;:::i;29532:915::-;;;:::i;25110:181::-;;;;;;;;;;;;;;;;-1:-1:-1;25110:181:0;-1:-1:-1;;;;;25110:181:0;;:::i;21303:27::-;;;:::i;24636:132::-;;;;;;;;;;;;;;;;-1:-1:-1;24636:132:0;-1:-1:-1;;;;;24636:132:0;;:::i;26227:831::-;;;;;;;;;;;;;;;;-1:-1:-1;26227:831:0;;:::i;833:109::-;;;;;;;;;;;;;;;;-1:-1:-1;833:109:0;-1:-1:-1;;;;;833:109:0;;:::i;24045:223::-;;;;;;;;;;;;;;;;-1:-1:-1;24045:223:0;-1:-1:-1;;;;;24045:223:0;;:::i;21251:21::-;;;:::i;22773:659::-;;;;;;;;;;;;;;;;-1:-1:-1;22773:659:0;;;-1:-1:-1;;;;;22773:659:0;;;;;;;;;;;;:::i;21489:44::-;;;;;;;;;;;;;:::o;22670:93::-;22740:8;:15;22670:93;:::o;25513:291::-;25570:7;25594:13;;25611:1;25594:18;25590:59;;;-1:-1:-1;25636:1:0;25629:8;;25590:59;25677:10;;25663:11;:24;25659:119;;;25711:55;25752:13;;25712:34;25744:1;25712:27;25728:10;;25712:11;:15;;:27;;;;:::i;:::-;:31;;:34::i;:::-;25711:40;;:55::i;:::-;25704:62;;;;25659:119;-1:-1:-1;25795:1:0;25513:291;;;;:::o;22562:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22562:26:0;;;;-1:-1:-1;22562:26:0;;;;;:::o;21159:34::-;;;;:::o;23482:306::-;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;23584:11:::1;23580:59;;;23612:15;:13;:15::i;:::-;23667:63;23718:11;23667:46;23687:8;23696:4;23687:14;;;;;;;;;;;;;;;;;;:25;;;23667:15;;:19;;:46;;;;:::i;:::-;:50:::0;::::1;:63::i;:::-;23649:15;:81;;;;23769:11;23741:8;23750:4;23741:14;;;;;;;;;;;;;;;;;;:25;;:39;;;;23482:306:::0;;;:::o;26087:94::-;26126:7;26153:20;26160:12;26153:6;:20::i;:::-;26146:27;;26087:94;:::o;31261:798::-;31317:7;31326;31335;31344;31353;31362;31415:1;31397:8;:15;;;;:19;31389:4;:27;;31381:70;;;;;-1:-1:-1;;;31381:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31462:20;;:::i;:::-;31485:8;31494:4;31485:14;;;;;;;;;;;;;;;;31462:37;;;;;;;;31485:14;;;;;;;31462:37;;-1:-1:-1;;;;;31462:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31527:29;;-1:-1:-1;;;31527:29:0;;;;31462:37;;-1:-1:-1;31462:37:0;31527:27;;:29;;;;31485:14;;31527:29;;;;;;31462:37;31527:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31527:29:0;31594:9;;31584:29;;;-1:-1:-1;;;31584:29:0;;;;31527;;-1:-1:-1;31567:14:0;;-1:-1:-1;;;;;31584:27:0;;;;;;:29;;;;;31527;;31584;;;;;;;;:27;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31584:29:0;31644:19;;;;31709:20;;;;31584:29;;-1:-1:-1;31644:19:0;31624:17;;31696:34;;:12;:34::i;:::-;31674:56;;31741:17;31761:53;31798:15;;31761:32;31777:4;:15;;;31761:11;:15;;:32;;;;:::i;:53::-;31741:73;-1:-1:-1;31837:24:0;:9;31741:73;31837:13;:24::i;:::-;32000:18;;;;32020:13;;;;32035:15;;;;;31973:6;;31981;;-1:-1:-1;31825:36:0;;-1:-1:-1;32000:18:0;-1:-1:-1;32020:13:0;;-1:-1:-1;32035:15:0;;-1:-1:-1;31261:798:0;;-1:-1:-1;;;;;31261:798:0:o;336:104::-;391:4;426:6;-1:-1:-1;;;;;426:6:0;;;415:17;;;;336:104::o;21425:26::-;;;-1:-1:-1;;;;;21425:26:0;;:::o;21015:25::-;;;;:::o;21363:15::-;;;-1:-1:-1;;;;;21363:15:0;;:::o;21082:38::-;;;;:::o;448:140::-;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;547:1:::1;531:6:::0;;510:40:::1;::::0;-1:-1:-1;;;;;531:6:0;;::::1;::::0;510:40:::1;::::0;547:1;;510:40:::1;578:1;561:19:::0;;-1:-1:-1;;;;;;561:19:0::1;::::0;;448:140::o;23849:134::-;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;23923:15:::1;:13;:15::i;:::-;23949:11;:26:::0;23849:134::o;25299:184::-;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25371:30:0;::::1;25363:85;;;;-1:-1:-1::0;;;25363:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25459:6;:16:::0;;-1:-1:-1;;;;;;25459:16:0::1;-1:-1:-1::0;;;;;25459:16:0;;;::::1;::::0;;;::::1;::::0;;25299:184::o;21200:21::-;;;-1:-1:-1;;;;;21200:21:0;;:::o;249:79::-;287:7;314:6;-1:-1:-1;;;;;314:6:0;249:79;:::o;20933:26::-;;;;:::o;22595:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24776:218::-;24835:7;24895:1;24872:20;:18;:20::i;:::-;:24;24862:6;:34;;24854:78;;;;;-1:-1:-1;;;24854:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24950:36;24967:10;24979:6;24950:16;:36::i;:::-;24943:43;24776:218;-1:-1:-1;;24776:218:0:o;24276:226::-;24343:4;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24368:23:0;::::1;24360:73;;;;-1:-1:-1::0;;;24360:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24451:43;24472:10;24484:9;24451:20;:43::i;27146:172::-:0;27206:8;:15;27189:14;27232:79;27260:6;27254:3;:12;27232:79;;;27290:9;27295:3;27290:4;:9::i;:::-;-1:-1:-1;27268:5:0;;27232:79;;;;27146:172;:::o;30506:715::-;30608:8;:15;30564:7;;;;-1:-1:-1;;30608:19:0;30600:27;;;30592:70;;;;;-1:-1:-1;;;30592:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30673:15;30699:20;;:::i;:::-;30722:8;30731:4;30722:14;;;;;;;;;;;;;;;;;30699:37;;;;;;;;30722:14;;;;;;;30699:37;;-1:-1:-1;;;;;30699:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30747:20:0;;:::i;:::-;-1:-1:-1;30770:14:0;;;;:8;:14;;;;;;;;30785:10;30770:26;;;;;;;;30747:49;;;;;;;;;;;;;;;;;;;;;;;;;30811:17;30807:306;;30845:19;30867:34;30880:4;:20;;;30867:12;:34::i;:::-;30845:56;;30916:17;30936:53;30973:15;;30936:32;30952:4;:15;;;30936:11;:15;;:32;;;;:::i;:53::-;30916:73;;31014:87;31026:74;31086:4;:13;;;31026:55;31067:4;:13;;;31027:34;31051:9;31027:4;:19;;;:23;;:34;;;;:::i;:::-;31026:40;;:55::i;:74::-;31014:7;;:11;:87::i;:::-;31004:97;;30807:306;;;31199:13;31190:7;;-1:-1:-1;31199:13:0;;-1:-1:-1;;30506:715:0;;;:::o;27326:741::-;27370:4;27387:21;27411:8;27420:4;27411:14;;;;;;;;;;;;;;;;;;27387:38;;27456:4;:20;;;27440:12;:36;27436:81;;27500:5;27493:12;;;;;27436:81;27527:19;27549:34;27562:4;:20;;;27549:12;:34::i;:::-;27527:56;;27613:1;27598:11;:16;27594:61;;27638:5;27631:12;;;;;;27594:61;27744:17;27764:53;27801:15;;27764:32;27780:4;:15;;;27764:11;:15;;:32;;;;:::i;:53::-;27828:3;;:34;;;-1:-1:-1;;;27828:34:0;;27845:4;27828:34;;;;;;;;;;;;27744:73;;-1:-1:-1;;;;;;27828:3:0;;;;:8;;:34;;;;;;;;;;;;;;;:3;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27957:19:0;;;;:34;;27981:9;27957:23;:34::i;:::-;27935:19;;;:56;-1:-1:-1;;28025:12:0;28002:20;;;;:35;-1:-1:-1;28055:4:0;27326:741;;;:::o;24510:118::-;24561:7;24588:32;24609:10;24588:20;:32::i;32197:1090::-;32303:7;;-1:-1:-1;;;;;32358:26:0;;;;;;;32354:900;;;-1:-1:-1;32412:12:0;32354:900;;;32459:7;;32446:55;;;-1:-1:-1;;;32446:55:0;;-1:-1:-1;;;;;32446:55:0;;;;;;;;;;;;;;;;32513:1;;32459:7;;;;32446:29;;:55;;;;;;;;;;;;;;;32459:7;32446:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32446:55:0;-1:-1:-1;;;;;32446:69:0;;32442:812;;32551:6;;32543:63;;;-1:-1:-1;;;32543:63:0;;-1:-1:-1;;;;;32543:63:0;;;;;;;;;;;;;;;;;;;;;;32551:6;;;;;32543:23;;:63;;;;;;;;;;;;;;32551:6;32543:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32543:63:0;;-1:-1:-1;32442:812:0;;;32639:14;32656:20;:18;:20::i;:::-;32639:37;;32696:13;32691:552;32723:6;32715:5;:14;32691:552;;;32759:20;32782:19;32795:5;32782:12;:19::i;:::-;32837:7;;32824:56;;;-1:-1:-1;;;32824:56:0;;-1:-1:-1;;;;;32824:56:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32837:7:0;;;;;32824:29;;:56;;;;;;;;;;;;;;32837:7;32824:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32824:56:0;-1:-1:-1;;;;;32824:70:0;;;;;:144;;-1:-1:-1;32911:7:0;;32898:56;;;-1:-1:-1;;;32898:56:0;;-1:-1:-1;;;;;32898:56:0;;;;;;;;;;;;;;;;32966:1;;32911:7;;;;32898:29;;:56;;;;;;;;;;;;;;;32911:7;32898:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32898:56:0;-1:-1:-1;;;;;32898:70:0;;;32824:144;32820:408;;;33025:6;;33017:64;;;-1:-1:-1;;;33017:64:0;;-1:-1:-1;;;;;33017:64:0;;;;;;;;;;;;;;;;;;;;;;32993:21;;33025:6;;;;;33017:23;;:64;;;;;;;;;;;;;;;33025:6;33017:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33017:64:0;33123:6;;33115:65;;;-1:-1:-1;;;33115:65:0;;-1:-1:-1;;;;;33115:65:0;;;;;;;;;;;;;;;;;;;;;;33017:64;;-1:-1:-1;33123:6:0;;;33115:23;;:65;;;;;33017:64;;33115:65;;;;;;;;33123:6;33115:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33115:65:0;;-1:-1:-1;33203:5:0;;-1:-1:-1;;33203:5:0;32820:408;-1:-1:-1;32731:7:0;;32691:552;;;;32442:812;;33271:8;32197:1090;-1:-1:-1;;;;32197:1090:0:o;28106:1351::-;32122:6;;28211:4;;-1:-1:-1;;;;;32122:6:0;32108:10;:20;32100:69;;;;-1:-1:-1;;;32100:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28236:21:0;::::1;28228:84;;;;-1:-1:-1::0;;;28228:84:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;28331:19:0;::::1;28323:80;;;;-1:-1:-1::0;;;28323:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;28422:20:0;::::1;28414:82;;;;-1:-1:-1::0;;;28414:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28529:1;28513:12;:10;:12::i;:::-;:17;28509:62;;-1:-1:-1::0;28554:5:0::1;28547:12;;28509:62;28588:18;28600:5;28588:11;:18::i;:::-;28587:19;:43;;;;28611:19;28623:6;28611:11;:19::i;:::-;28610:20;28587:43;28583:88;;;-1:-1:-1::0;28654:5:0::1;28647:12;;28583:88;28711:7;::::0;28698:44:::1;::::0;;-1:-1:-1;;;28698:44:0;;-1:-1:-1;;;;;28698:44:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;28683:12:::1;::::0;28711:7;;;::::1;::::0;28698:29:::1;::::0;:44;;;;;::::1;::::0;;;;;;;;;28711:7;28698:44;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;28698:44:0;-1:-1:-1;;;;;28788:15:0;::::1;28755:21;28788:15:::0;;;:9:::1;28698:44;28788:15:::0;;;;;28779:8:::1;:25:::0;;28698:44;;-1:-1:-1;28755:21:0;;28779:25;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;28887:9:::0;;28779:25;;-1:-1:-1;;;;;;28887:17:0;;::::1;:9:::0;::::1;:17;;::::0;:41:::1;;-1:-1:-1::0;28908:15:0::1;::::0;::::1;::::0;:20;28887:41:::1;28883:86;;;28952:5;28945:12;;;;;;28883:86;29028:11;::::0;28981:16:::1;::::0;29000:40:::1;::::0;29012:6;;29020;;-1:-1:-1;;;;;29028:11:0::1;29000;:40::i;:::-;28981:59;;29067:1;29055:8;:13;29051:58;;29092:5;29085:12;;;;;;;29051:58;-1:-1:-1::0;;;;;29126:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;29121:21:::1;::::0;:4:::1;:21::i;:::-;-1:-1:-1::0;29171:13:0::1;::::0;::::1;::::0;:27:::1;::::0;29189:8;29171:17:::1;:27::i;:::-;29155:13;::::0;::::1;:43:::0;29230:18:::1;::::0;::::1;::::0;:32:::1;::::0;29253:8;29230:22:::1;:32::i;:::-;29209:18;::::0;::::1;:53:::0;-1:-1:-1;;;;;29306:15:0;;::::1;29273:21;29306:15:::0;;;:9:::1;:15;::::0;;;;;;;;29297:25;;:8:::1;:25:::0;;;;;:34;;::::1;::::0;;;;;;29358:13;;:27:::1;::::0;29376:8;29358:17:::1;:27::i;:::-;29342:43:::0;;29415:12:::1;29396:16;::::0;;::::1;:31:::0;:16;28106:1351;-1:-1:-1;;;;;;;;28106:1351:0:o;25912:167::-;25970:7;25990:14;26007:18;26013:11;26007:5;:18::i;:::-;25990:35;;26043:28;26064:6;26059:1;:11;26043;;:15;;:28;;;;:::i;:::-;26036:35;25912:167;-1:-1:-1;;;25912:167:0:o;25812:92::-;25850:7;25877:19;25883:12;25877:5;:19::i;25002:100::-;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;25072:13:::1;:22:::0;25002:100::o;29532:915::-;29618:8;:15;29575;;;29644:691;29672:6;29666:3;:12;29644:691;;;29702:21;29726:8;29735:3;29726:13;;;;;;;;;;;;;;;;29778;;;:8;:13;;;;;;29792:10;29778:25;;;;;;;29822:13;;29726;;;;;;;;-1:-1:-1;29822:17:0;29818:506;;29860:9;29865:3;29860:4;:9::i;:::-;;29949:18;29970:57;30013:4;:13;;;29970:38;29994:4;:13;;;29970:4;:19;;;:23;;:38;;;;:::i;:57::-;30080:13;;30062;;;;29949:78;;-1:-1:-1;30062:32:0;;:13;:17;:32::i;:::-;30046:13;;;:48;30135:19;;;;:35;;30159:10;30135:23;:35::i;:::-;30113:19;;;:57;30205:1;30189:17;;30244:12;30225:16;;;:31;30285:23;:7;30297:10;30285:11;:23::i;:::-;30275:33;;29818:506;;-1:-1:-1;;29680:5:0;;29644:691;;;;30360:1;30349:7;:12;30345:51;;30378:7;;;;30345:51;30406:3;;:33;;;-1:-1:-1;;;30406:33:0;;30419:10;30406:33;;;;;;;;;;;;-1:-1:-1;;;;;30406:3:0;;;;:12;;:33;;;;;;;;;;;;;;;:3;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;29532:915:0;:::o;25110:181::-;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25184:23:0;::::1;25176:78;;;;-1:-1:-1::0;;;25176:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25265:6;:18:::0;;-1:-1:-1;;;;;;25265:18:0::1;-1:-1:-1::0;;;;;25265:18:0;;;::::1;::::0;;;::::1;::::0;;25110:181::o;21303:27::-;;;-1:-1:-1;;;;;21303:27:0;;:::o;24636:132::-;24694:4;24718:42;24741:10;24753:6;24718:22;:42::i;26227:831::-;26296:7;26344:12;26324:16;:32;;26316:98;;;;-1:-1:-1;;;26316:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26425:19;26459:9;26471:23;26477:16;26471:5;:23::i;:::-;26459:35;;26505:9;26517:19;26523:12;26517:5;:19::i;:::-;26505:31;;26583:335;26594:1;26590;:5;26583:335;;;26724:10;;26705:13;;26612:3;;;;;26687:9;;26699:36;;:20;;26612:3;;26699:5;:20::i;:36::-;26687:48;;26814:57;26830:40;26860:9;26867:1;26860:6;:9::i;:::-;26831:23;:1;26837:16;26831:5;:23::i;26830:40::-;26814:11;;:15;:57::i;:::-;26905:1;;-1:-1:-1;26800:71:0;-1:-1:-1;26583:335:0;;;26942:79;26958:62;26999:20;27006:12;26999:6;:20::i;:::-;26959:34;:12;26976:16;26959;:34::i;26958:62::-;26942:11;;:15;:79::i;:::-;26928:93;26227:831;-1:-1:-1;;;;;26227:831:0:o;833:109::-;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;906:28:::1;925:8;906:18;:28::i;:::-;833:109:::0;:::o;24045:223::-;24112:4;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24137:23:0;::::1;24129:73;;;;-1:-1:-1::0;;;24129:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24220:40;24238:10;24250:9;24220:17;:40::i;21251:21::-:0;;;-1:-1:-1;;;;;21251:21:0;;:::o;22773:659::-;992:19;1000:10;992:7;:19::i;:::-;984:64;;;;;-1:-1:-1;;;984:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;984:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22880:19:0;::::1;22872:57;;;::::0;;-1:-1:-1;;;22872:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;22944:11;22940:59;;;22972:15;:13;:15::i;:::-;23009:23;23050:10;;23035:12;:25;:53;;23078:10;;23035:53;;;23063:12;23035:53;23117:15;::::0;23009:79;;-1:-1:-1;23117:32:0::1;::::0;23137:11;23117:19:::1;:32::i;:::-;23099:15;:50:::0;;;23174:203:::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;23174:203:0;;::::1;::::0;;-1:-1:-1;23174:203:0::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;23160:8:::1;:218:::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;23160:218:0::1;::::0;;;::::1;::::0;;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23408:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;23389:16:0;;::::1;;::::0;;;:9:::1;:16;::::0;;;;23408;::::1;23389:35:::0;;;-1:-1:-1;;;22773:659:0:o;1622:136::-;1680:7;1707:43;1711:1;1714;1707:43;;;;;;;;;;;;;;;;;:3;:43::i;2445:132::-;2503:7;2530:39;2534:1;2537;2530:39;;;;;;;;;;;;;;;;;:3;:39::i;1433:181::-;1491:7;1523:5;;;1547:6;;;;1539:46;;;;;-1:-1:-1;;;1539:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1966:471;2024:7;2269:6;2265:47;;-1:-1:-1;2299:1:0;2292:8;;2265:47;2336:5;;;2340:1;2336;:5;:1;2360:5;;;;;:10;2352:56;;;;-1:-1:-1;;;2352:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12591:149;12665:7;12708:22;12712:3;12724:5;12708:3;:22::i;11641:149::-;11714:4;11738:44;11746:3;-1:-1:-1;;;;;11766:14:0;;11738:7;:44::i;12120:117::-;12183:7;12210:19;12218:3;12210:7;:19::i;11876:158::-;11956:4;11980:46;11990:3;-1:-1:-1;;;;;12010:14:0;;11980:9;:46::i;596:229::-;-1:-1:-1;;;;;670:22:0;;662:73;;;;-1:-1:-1;;;662:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;772:6;;;751:38;;-1:-1:-1;;;;;751:38:0;;;;772:6;;;751:38;;;800:6;:17;;-1:-1:-1;;;;;;800:17:0;-1:-1:-1;;;;;800:17:0;;;;;;;;;;596:229::o;11322:143::-;11392:4;11416:41;11421:3;-1:-1:-1;;;;;11441:14:0;;11416:4;:41::i;1766:192::-;1852:7;1888:12;1880:6;;;;1872:29;;;;-1:-1:-1;;;1872:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1924:5:0;;;1766:192::o;2585:345::-;2671:7;2773:12;2766:5;2758:28;;;;-1:-1:-1;;;2758:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2797:9;2813:1;2809;:5;;;;;;;2585:345;-1:-1:-1;;;;;2585:345:0:o;9264:204::-;9359:18;;9331:7;;9359:26;-1:-1:-1;9351:73:0;;;;-1:-1:-1;;;9351:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9442:3;:11;;9454:5;9442:18;;;;;;;;;;;;;;;;9435:25;;9264:204;;;;:::o;6944:1556::-;7010:4;7149:19;;;:12;;;:19;;;;;;7185:15;;7181:1312;;7619:18;;-1:-1:-1;;7570:14:0;;;;7619:22;;;;7546:21;;7619:3;;:22;;7906;;;;;;;;;;;;;;7886:42;;8052:9;8023:3;:11;;8035:13;8023:26;;;;;;;;;;;;;;;;;;;:38;;;;8129:23;;;8171:1;8129:12;;;:23;;;;;;8155:17;;;8129:43;;8294:17;;8129:3;;8294:17;;;;;;;;;;;;;;;;;;;;;;8389:3;:12;;:19;8402:5;8389:19;;;;;;;;;;;8382:26;;;8432:4;8425:11;;;;;;;;7181:1312;8476:5;8469:12;;;;;8801:109;8884:18;;8801:109::o;8586:129::-;8659:4;8683:19;;;:12;;;;;:19;;;;;;:24;;;8586:129::o;6354:414::-;6417:4;6439:21;6449:3;6454:5;6439:9;:21::i;:::-;6434:327;;-1:-1:-1;6477:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;6660:18;;6638:19;;;:12;;;:19;;;;;;:40;;;;6693:11;;6434:327;-1:-1:-1;6744:5:0;6737:12;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://e7e40616c339d8f4178fc2818f8b8349f7faf87b1dfb3b84ad02f0c6bbf2e106
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
BSC | 100.00% | $0.012479 | 1,049,185.1383 | $13,092.46 |
[ 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.