Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 22 from a total of 22 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 20704814 | 151 days ago | IN | 0 ETH | 0.00006399 | ||||
Transfer | 18891137 | 405 days ago | IN | 0 ETH | 0.00083746 | ||||
Approve | 15751618 | 845 days ago | IN | 0 ETH | 0.00038842 | ||||
Approve | 13978884 | 1123 days ago | IN | 0 ETH | 0.0133342 | ||||
Approve | 13965094 | 1125 days ago | IN | 0 ETH | 0.00440463 | ||||
Approve | 13707752 | 1165 days ago | IN | 0 ETH | 0.00406251 | ||||
Approve | 13672354 | 1171 days ago | IN | 0 ETH | 0.0060896 | ||||
Approve | 13657018 | 1173 days ago | IN | 0 ETH | 0.00351732 | ||||
Approve | 13654495 | 1173 days ago | IN | 0 ETH | 0.00366211 | ||||
Approve | 13654488 | 1173 days ago | IN | 0 ETH | 0.00251372 | ||||
Approve | 13654476 | 1173 days ago | IN | 0 ETH | 0.00532374 | ||||
Approve | 13652418 | 1174 days ago | IN | 0 ETH | 0.00449174 | ||||
Approve | 13650495 | 1174 days ago | IN | 0 ETH | 0.00445134 | ||||
Approve | 13648558 | 1174 days ago | IN | 0 ETH | 0.0050437 | ||||
Approve | 13647541 | 1174 days ago | IN | 0 ETH | 0.00676463 | ||||
Approve | 13647387 | 1175 days ago | IN | 0 ETH | 0.00274257 | ||||
Approve | 13647381 | 1175 days ago | IN | 0 ETH | 0.00456407 | ||||
Approve | 13646989 | 1175 days ago | IN | 0 ETH | 0.00595454 | ||||
Approve | 13646977 | 1175 days ago | IN | 0 ETH | 0.00678304 | ||||
Approve | 13646026 | 1175 days ago | IN | 0 ETH | 0.00696349 | ||||
Approve | 13645577 | 1175 days ago | IN | 0 ETH | 0.00515609 | ||||
Approve | 13645535 | 1175 days ago | IN | 0 ETH | 0.00588816 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
13563074 | 1188 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
EmpirePair
Compiler Version
v0.6.8+commit.0bbfe453
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: Unlicense pragma solidity =0.6.8; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "../interfaces/IEmpirePair.sol"; import "../interfaces/IEmpireFactory.sol"; import "../interfaces/IEmpireCallee.sol"; import "../libraries/dex/UQ112x112.sol"; import "./EmpireERC20.sol"; contract EmpirePair is IEmpirePair, EmpireERC20 { using UQ112x112 for uint224; uint256 private constant MINIMUM_LIQUIDITY = 10**3; bytes4 private constant TRANSFER_SELECTOR = bytes4(keccak256(bytes("transfer(address,uint256)"))); bytes4 private constant TRANSFER_FROM_SELECTOR = bytes4(keccak256(bytes("transferFrom(address,address,uint256)"))); address public immutable override factory; address public override token0; address public override token1; uint112 private override reserve0; // uses single storage slot, accessible via getReserves uint112 private override reserve1; // uses single storage slot, accessible via getReserves uint32 private override blockTimestampLast; // uses single storage slot, accessible via getReserves uint256 public override price0CumulativeLast; uint256 public override price1CumulativeLast; uint256 public override kLast; // reserve0 * reserve1, as of immediately after the most recent liquidity event uint256 public override liquidityLocked; // By default, liquidity is not locked (timestamp is 0) address public override sweepableToken; // By default, no token is sweepable uint256 public override sweptAmount; // Tracks how many tokens were swept based on the floor price PairType public empirePairType; // Tracks pair type uint256 public empireLockTime; // Tracks lock time uint256 private unlocked = 1; modifier lock() { require(unlocked == 1, "Empire: LOCKED"); unlocked = 2; _; unlocked = 1; } function getReserves() public view override returns ( uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast ) { _reserve0 = reserve0; _reserve1 = reserve1; _blockTimestampLast = blockTimestampLast; } function _safeTransfer( address token, address to, uint256 value ) private { _safeCall(token, abi.encodeWithSelector(TRANSFER_SELECTOR, to, value)); } function _safeTransferFrom( address token, address from, address to, uint256 value ) private { _safeCall( token, abi.encodeWithSelector(TRANSFER_FROM_SELECTOR, from, to, value) ); } function _safeCall(address token, bytes memory payload) private { (bool success, bytes memory data) = token.call(payload); require( success && (data.length == 0 || abi.decode(data, (bool))), "Empire: TRANSFER_FAILED" ); } event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); event Swept(uint256 amount); event Unswept(uint256 amount); constructor() public { factory = msg.sender; } // called once by the factory at time of deployment function initialize( address _token0, address _token1, PairType pairType, uint256 unlockTime ) external override { require(msg.sender == factory, "Empire: FORBIDDEN"); // sufficient check token0 = _token0; token1 = _token1; if (pairType != PairType.Common) { liquidityLocked = unlockTime; empirePairType = pairType; if (pairType == PairType.SweepableToken0) { sweepableToken = _token0; } else if (pairType == PairType.SweepableToken1) { sweepableToken = _token1; } } empireLockTime = unlockTime; } // update reserves and, on the first call per block, price accumulators function _update( uint256 balance0, uint256 balance1, uint112 _reserve0, uint112 _reserve1 ) private { require( balance0 <= uint112(-1) && balance1 <= uint112(-1), "Empire: OVERFLOW" ); uint32 blockTimestamp = uint32(block.timestamp % 2**32); uint32 timeElapsed = blockTimestamp - blockTimestampLast; // overflow is desired if (timeElapsed > 0 && _reserve0 != 0 && _reserve1 != 0) { // * never overflows, and + overflow is desired price0CumulativeLast += uint256(UQ112x112.encode(_reserve1).uqdiv(_reserve0)) * timeElapsed; price1CumulativeLast += uint256(UQ112x112.encode(_reserve0).uqdiv(_reserve1)) * timeElapsed; } reserve0 = uint112(balance0); reserve1 = uint112(balance1); blockTimestampLast = blockTimestamp; emit Sync(reserve0, reserve1); } // if fee is on, mint liquidity equivalent to 1/6th of the growth in sqrt(k) function _mintFee(uint112 _reserve0, uint112 _reserve1) private returns (bool feeOn) { address feeTo = IEmpireFactory(factory).feeTo(); feeOn = feeTo != address(0); uint256 _kLast = kLast; // gas savings if (feeOn) { if (_kLast != 0) { uint256 rootK = uint256(_reserve0).mul(_reserve1).sqrt(); uint256 rootKLast = _kLast.sqrt(); if (rootK > rootKLast) { uint256 numerator = totalSupply.mul(rootK.sub(rootKLast)); uint256 denominator = rootK.mul(5).add(rootKLast); uint256 liquidity = numerator / denominator; if (liquidity > 0) _mint(feeTo, liquidity); } } } else if (_kLast != 0) { kLast = 0; } } // this low-level function should be called from a contract which performs important safety checks function mint(address to) external override lock returns (uint256 liquidity) { (uint112 _reserve0, uint112 _reserve1, ) = getReserves(); // gas savings uint256 balance0 = _balanceOfSelf(token0); uint256 balance1 = _balanceOfSelf(token1); uint256 amount0 = balance0.sub(_reserve0); uint256 amount1 = balance1.sub(_reserve1); bool feeOn = _mintFee(_reserve0, _reserve1); uint256 _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee if (_totalSupply == 0) { liquidity = amount0.mul(amount1).sqrt().sub(MINIMUM_LIQUIDITY); _mint(address(0), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens } else { liquidity = (amount0.mul(_totalSupply) / _reserve0).min( amount1.mul(_totalSupply) / _reserve1 ); } require(liquidity > 0, "Empire: INSUFFICIENT_LIQUIDITY_MINTED"); _mint(to, liquidity); _update(balance0, balance1, _reserve0, _reserve1); if (feeOn) kLast = uint256(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date emit Mint(msg.sender, amount0, amount1); } // this low-level function should be called from a contract which performs important safety checks function burn(address to) external override lock returns (uint256 amount0, uint256 amount1) { require(block.timestamp >= liquidityLocked, "Empire: LIQUIDITY_LOCKED"); (uint112 _reserve0, uint112 _reserve1, ) = getReserves(); // gas savings address _token0 = token0; // gas savings address _token1 = token1; // gas savings uint256 balance0 = _balanceOfSelf(_token0); uint256 balance1 = _balanceOfSelf(_token1); uint256 liquidity = balanceOf[address(this)]; bool feeOn = _mintFee(_reserve0, _reserve1); uint256 _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee amount0 = liquidity.mul(balance0) / _totalSupply; // using balances ensures pro-rata distribution amount1 = liquidity.mul(balance1) / _totalSupply; // using balances ensures pro-rata distribution require( amount0 > 0 && amount1 > 0, "Empire: INSUFFICIENT_LIQUIDITY_BURNED" ); _burn(address(this), liquidity); _safeTransfer(_token0, to, amount0); _safeTransfer(_token1, to, amount1); balance0 = _balanceOfSelf(_token0); balance1 = _balanceOfSelf(_token1); _update(balance0, balance1, _reserve0, _reserve1); if (feeOn) kLast = uint256(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date emit Burn(msg.sender, amount0, amount1, to); } // this low-level function should be called from a contract which performs important safety checks function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external override lock { require( amount0Out > 0 || amount1Out > 0, "Empire: INSUFFICIENT_OUTPUT_AMOUNT" ); (uint112 _reserve0, uint112 _reserve1, ) = getReserves(); // gas savings require( amount0Out < _reserve0 && amount1Out < _reserve1, "Empire: INSUFFICIENT_LIQUIDITY" ); uint256 balance0; uint256 balance1; { // scope for _token{0,1}, avoids stack too deep errors address _token0 = token0; address _token1 = token1; require(to != _token0 && to != _token1, "Empire: INVALID_TO"); if (amount0Out > 0) _safeTransfer(_token0, to, amount0Out); // optimistically transfer tokens if (amount1Out > 0) _safeTransfer(_token1, to, amount1Out); // optimistically transfer tokens if (data.length > 0) IEmpireCallee(to).empireCall( msg.sender, amount0Out, amount1Out, data ); balance0 = _balanceOfSelf(_token0); balance1 = _balanceOfSelf(_token1); } uint256 amount0In = balance0 > _reserve0 - amount0Out ? balance0 - (_reserve0 - amount0Out) : 0; uint256 amount1In = balance1 > _reserve1 - amount1Out ? balance1 - (_reserve1 - amount1Out) : 0; require( amount0In > 0 || amount1In > 0, "Empire: INSUFFICIENT_INPUT_AMOUNT" ); { // scope for reserve{0,1}Adjusted, avoids stack too deep errors uint256 balance0Adjusted = balance0.mul(1000).sub(amount0In.mul(3)); uint256 balance1Adjusted = balance1.mul(1000).sub(amount1In.mul(3)); require( balance0Adjusted.mul(balance1Adjusted) >= uint256(_reserve0).mul(_reserve1).mul(1000**2), "Empire: K" ); } _update(balance0, balance1, _reserve0, _reserve1); emit Swap(msg.sender, amount0In, amount1In, amount0Out, amount1Out, to); } // force balances to match reserves function skim(address to) external override lock { address _token0 = token0; // gas savings address _token1 = token1; // gas savings _safeTransfer(_token0, to, _balanceOfSelf(_token0).sub(reserve0)); _safeTransfer(_token1, to, _balanceOfSelf(_token1).sub(reserve1)); } // force reserves to match balances function sync() external override lock { _update( _balanceOfSelf(token0), _balanceOfSelf(token1), reserve0, reserve1 ); } // wrapper ensuring sweeps are accounted for function _balanceOfSelf(address token) internal view returns (uint256 balance) { if (token == sweepableToken) { balance = sweptAmount; } return balance.add(IERC20(token).balanceOf(address(this))); } // allow sweeping if enabled function sweep(uint256 amount, bytes calldata data) external override lock { address _token0 = token0; address _token1 = token1; uint256 _reserveSwept; uint256 _reserveSweeper; if (msg.sender == _token0) { require(sweepableToken == _token1, "Empire: INCORRECT_CALLER"); _reserveSwept = reserve1; _reserveSweeper = reserve0; } else { require( msg.sender == _token1 && sweepableToken == _token0, "Empire: INCORRECT_CALLER" ); _reserveSwept = reserve0; _reserveSweeper = reserve1; } // Calculate necessary sweepable token amount for pool to contain full token supply uint256 amountIn = IERC20(msg.sender).totalSupply() - _reserveSweeper; uint256 numerator = amountIn.mul(_reserveSwept); uint256 denominator = _reserveSweeper.mul(1000).add(amountIn); uint256 amountOut = numerator / denominator; uint256 maxSweepable = _reserveSwept - amountOut; uint256 _sweptAmount = sweptAmount.add(amount); require(_sweptAmount <= maxSweepable, "Empire: INCORRECT_SWEEP_AMOUNT"); sweptAmount = _sweptAmount; _safeTransfer(sweepableToken, msg.sender, amount); IEmpireCallee(msg.sender).empireSweepCall(amount, data); emit Swept(amount); } function unsweep(uint256 amount) external override lock { address _token0 = token0; address _token1 = token1; if (msg.sender == _token0) { require(sweepableToken == _token1, "Empire: INCORRECT_CALLER"); } else { require( msg.sender == _token1 && sweepableToken == _token0, "Empire: INCORRECT_CALLER" ); } _safeTransferFrom(sweepableToken, msg.sender, address(this), amount); sweptAmount = sweptAmount.sub(amount); emit Unswept(amount); } function getMaxSweepable() external view override returns (uint256) { address _token0 = token0; address _token1 = token1; address _sweeper; uint256 _reserveIn; uint256 _reserveOut; if (sweepableToken == _token0) { _sweeper = _token1; _reserveIn = reserve1; _reserveOut = reserve0; } else { require(sweepableToken == token1, "Empire: NON_SWEEPABLE_POOL"); _sweeper = _token0; _reserveIn = reserve0; _reserveOut = reserve1; } uint256 amountIn = IERC20(_sweeper).totalSupply() - _reserveIn; uint256 amountOut = getAmountOut(amountIn, _reserveIn, _reserveOut); return _reserveOut - amountOut; } function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) internal pure returns (uint256 amountOut) { if (amountIn == 0) return 0; uint256 amountInWithFee = amountIn.mul(997); uint256 numerator = amountInWithFee.mul(reserveOut); uint256 denominator = reserveIn.mul(1000).add(amountInWithFee); amountOut = numerator / denominator; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: Unlicense pragma solidity =0.6.8; import "../interfaces/IEmpireERC20.sol"; import "../libraries/common/EmpireMath.sol"; contract EmpireERC20 is IEmpireERC20 { using EmpireMath for uint256; string public constant override name = "Empire LP"; string public constant override symbol = "EMP-LP"; uint8 public constant override decimals = 18; uint256 public override totalSupply; mapping(address => uint256) public override balanceOf; mapping(address => mapping(address => uint256)) public override allowance; uint256 private immutable CACHED_CHAIN_ID; bytes32 private immutable CACHED_DOMAIN_SEPARATOR; bytes32 private constant EIP712_DOMAIN = keccak256( "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" ); bytes32 private constant PERMIT_TYPEHASH = keccak256( "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" ); mapping(address => uint256) public override nonces; event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); constructor() public { uint256 chainId; assembly { chainId := chainid() } CACHED_CHAIN_ID = chainId; CACHED_DOMAIN_SEPARATOR = _computeSeparator(chainId); } function _mint(address to, uint256 value) internal { totalSupply = totalSupply.add(value); balanceOf[to] = balanceOf[to].add(value); emit Transfer(address(0), to, value); } function _burn(address from, uint256 value) internal { balanceOf[from] = balanceOf[from].sub(value); totalSupply = totalSupply.sub(value); emit Transfer(from, address(0), value); } function _approve( address owner, address spender, uint256 value ) private { allowance[owner][spender] = value; emit Approval(owner, spender, value); } function _transfer( address from, address to, uint256 value ) private { balanceOf[from] = balanceOf[from].sub(value); balanceOf[to] = balanceOf[to].add(value); emit Transfer(from, to, value); } function approve(address spender, uint256 value) external override returns (bool) { _approve(msg.sender, spender, value); return true; } function transfer(address to, uint256 value) external override returns (bool) { _transfer(msg.sender, to, value); return true; } function transferFrom( address from, address to, uint256 value ) external override returns (bool) { if (allowance[from][msg.sender] != uint256(-1)) { allowance[from][msg.sender] = allowance[from][msg.sender].sub( value ); } _transfer(from, to, value); return true; } function _computeSeparator(uint256 chainId) internal view returns (bytes32) { return keccak256( abi.encode( EIP712_DOMAIN, keccak256(bytes(name)), keccak256(bytes("1")), chainId, address(this) ) ); } function _getDigest(bytes32 payload) internal view returns (bytes32) { uint256 chainId; assembly { chainId := chainid() } bytes32 domainSeparator = chainId != CACHED_CHAIN_ID ? _computeSeparator(chainId) : CACHED_DOMAIN_SEPARATOR; return keccak256(abi.encodePacked("\x19\x01", domainSeparator, payload)); } function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external override { require(deadline >= block.timestamp, "Empire: EXPIRED"); bytes32 digest = _getDigest( keccak256( abi.encode( PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline ) ) ); address recoveredAddress = ecrecover(digest, v, r, s); require( recoveredAddress != address(0) && recoveredAddress == owner, "Empire: INVALID_SIGNATURE" ); _approve(owner, spender, value); } }
// SPDX-License-Identifier: Unlicense pragma solidity =0.6.8; interface IEmpireCallee { function empireCall( address sender, uint256 amount0, uint256 amount1, bytes calldata data ) external; function empireSweepCall(uint256 amountSwept, bytes calldata data) external; }
// SPDX-License-Identifier: Unlicense pragma solidity =0.6.8; interface IEmpireERC20 { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; }
// SPDX-License-Identifier: Unlicense pragma solidity =0.6.8; import "./IEmpirePair.sol"; interface IEmpireFactory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function createPair( address tokenA, address tokenB, PairType pairType, uint256 unlockTime ) external returns (address pair); function createEmpirePair( address tokenA, address tokenB, PairType pairType, uint256 unlockTime ) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; }
// SPDX-License-Identifier: Unlicense pragma solidity =0.6.8; enum PairType {Common, LiquidityLocked, SweepableToken0, SweepableToken1} interface IEmpirePair { event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); 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 (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function sweptAmount() external view returns (uint256); function sweepableToken() external view returns (address); function liquidityLocked() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize( address, address, PairType, uint256 ) external; function sweep(uint256 amount, bytes calldata data) external; function unsweep(uint256 amount) external; function getMaxSweepable() external view returns (uint256); }
// SPDX-License-Identifier: Unlicense pragma solidity =0.6.8; // a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math) library EmpireMath { function add(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x + y) >= x, "ds-math-add-overflow"); } function sub(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x - y) <= x, "ds-math-sub-underflow"); } function mul(uint256 x, uint256 y) internal pure returns (uint256 z) { require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow"); } function min(uint256 x, uint256 y) internal pure returns (uint256 z) { z = x < y ? x : y; } // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method) function sqrt(uint256 y) internal pure returns (uint256 z) { if (y > 3) { z = y; uint256 x = y / 2 + 1; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } } }
// SPDX-License-Identifier: Unlicense pragma solidity =0.6.8; // a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format)) // range: [0, 2**112 - 1] // resolution: 1 / 2**112 library UQ112x112 { uint224 private constant Q112 = 2**112; // encode a uint112 as a UQ112x112 function encode(uint112 y) internal pure returns (uint224 z) { z = uint224(y) * Q112; // never overflows } // divide a UQ112x112 by a uint112, returning a UQ112x112 function uqdiv(uint224 x, uint112 y) internal pure returns (uint224 z) { z = x / uint224(y); } }
{ "remappings": [], "optimizer": { "enabled": true, "runs": 200 }, "evmVersion": "istanbul", "libraries": {}, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Swept","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint112","name":"reserve0","type":"uint112"},{"indexed":false,"internalType":"uint112","name":"reserve1","type":"uint112"}],"name":"Sync","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unswept","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"burn","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"empireLockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"empirePairType","outputs":[{"internalType":"enum PairType","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxSweepable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint112","name":"_reserve0","type":"uint112"},{"internalType":"uint112","name":"_reserve1","type":"uint112"},{"internalType":"uint32","name":"_blockTimestampLast","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"},{"internalType":"enum PairType","name":"pairType","type":"uint8"},{"internalType":"uint256","name":"unlockTime","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"kLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityLocked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"price0CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price1CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"skim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount0Out","type":"uint256"},{"internalType":"uint256","name":"amount1Out","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sweepableToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweptAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unsweep","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60e06040526001600f5534801561001557600080fd5b5046608081905261002e816001600160e01b0361003e16565b60a052503360601b60c05261010e565b6000604051808062002b746052913960408051918290036052018220828201825260098352680456d70697265204c560bc1b6020938401528151808301835260018152603160f81b908401528151808401919091527f2f521cff6f8a1416a02f0455c70bc850a9c90063ca4463d44dd97a783ee14463818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018690523060a0808301919091528251808303909101815260c09091019091528051910120915050919050565b60805160a05160c05160601c612a2c6200014860003980610c95528061169052806122125250806126075250806125df5250612a2c6000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80637464fc3d1161010f578063c1226988116100a2578063d505accf11610071578063d505accf1461065c578063dd62ed3e146106ad578063f96e16fc146106db578063fff6cae9146106e3576101f0565b8063c1226988146105a9578063c45a0155146105d5578063d21220a7146105dd578063d2ae9a0d146105e5576101f0565b806395d89b41116100de57806395d89b4114610532578063a9059cbb1461053a578063ae84637f14610566578063bc25cf7714610583576101f0565b80637464fc3d146104bd5780637ecebe00146104c557806389afcb44146104eb5780638b15bb871461052a576101f0565b806357976fb41161018757806363004c1b1161015657806363004c1b146104615780636a627842146104695780636b1be4bb1461048f57806370a0823114610497576101f0565b806357976fb41461040a5780635909c0d5146104125780635a3d54931461041a57806360d780ee14610422576101f0565b80630dfe1681116101c35780630dfe16811461037857806318160ddd1461039c57806323b872dd146103b6578063313ce567146103ec576101f0565b8063022c0d9f146101f557806306fdde03146102835780630902f1ac14610300578063095ea7b314610338575b600080fd5b6102816004803603608081101561020b57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561024257600080fd5b82018360208201111561025457600080fd5b8035906020019184600183028401116401000000008311171561027657600080fd5b5090925090506106eb565b005b61028b610b5d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102c55781810151838201526020016102ad565b50505050905090810190601f1680156102f25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610308610b82565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103646004803603604081101561034e57600080fd5b506001600160a01b038135169060200135610bac565b604080519115158252519081900360200190f35b610380610bc3565b604080516001600160a01b039092168252519081900360200190f35b6103a4610bd2565b60408051918252519081900360200190f35b610364600480360360608110156103cc57600080fd5b506001600160a01b03813581169160208101359091169060400135610bd8565b6103f4610c73565b6040805160ff9092168252519081900360200190f35b6103a4610c78565b6103a4610c7e565b6103a4610c84565b6102816004803603608081101561043857600080fd5b506001600160a01b03813581169160208101359091169060ff6040820135169060600135610c8a565b6103a4610dcd565b6103a46004803603602081101561047f57600080fd5b50356001600160a01b0316610f1e565b6103a461115e565b6103a4600480360360208110156104ad57600080fd5b50356001600160a01b0316611164565b6103a4611176565b6103a4600480360360208110156104db57600080fd5b50356001600160a01b031661117c565b6105116004803603602081101561050157600080fd5b50356001600160a01b031661118e565b6040805192835260208301919091528051918290030190f35b6103806113e6565b61028b6113f5565b6103646004803603604081101561055057600080fd5b506001600160a01b038135169060200135611417565b6102816004803603602081101561057c57600080fd5b5035611424565b6102816004803603602081101561059957600080fd5b50356001600160a01b03166115ca565b6105b1611685565b604051808260038111156105c157fe5b60ff16815260200191505060405180910390f35b61038061168e565b6103806116b2565b610281600480360360408110156105fb57600080fd5b8135919081019060408101602082013564010000000081111561061d57600080fd5b82018360208201111561062f57600080fd5b8035906020019184600183028401116401000000008311171561065157600080fd5b5090925090506116c1565b610281600480360360e081101561067257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611a50565b6103a4600480360360408110156106c357600080fd5b506001600160a01b0381358116916020013516611c22565b6103a4611c3f565b610281611c45565b600f54600114610733576040805162461bcd60e51b815260206004820152600e60248201526d115b5c1a5c994e881313d0d2d15160921b604482015290519081900360640190fd5b6002600f55841515806107465750600084115b6107815760405162461bcd60e51b81526004018080602001828103825260228152602001806129b46022913960400191505060405180910390fd5b60008061078c610b82565b5091509150816001600160701b0316871080156107b15750806001600160701b031686105b610802576040805162461bcd60e51b815260206004820152601e60248201527f456d706972653a20494e53554646494349454e545f4c49515549444954590000604482015290519081900360640190fd5b60045460055460009182916001600160a01b039182169190811690891682148015906108405750806001600160a01b0316896001600160a01b031614155b610886576040805162461bcd60e51b8152602060048201526012602482015271456d706972653a20494e56414c49445f544f60701b604482015290519081900360640190fd5b8a1561089757610897828a8d611ce3565b89156108a8576108a8818a8c611ce3565b861561096357886001600160a01b031663f05ffd30338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561094a57600080fd5b505af115801561095e573d6000803e3d6000fd5b505050505b61096c82611d6a565b935061097781611d6a565b92505050600089856001600160701b03160383116109965760006109a5565b89856001600160701b03160383035b9050600089856001600160701b03160383116109c25760006109d1565b89856001600160701b03160383035b905060008211806109e25750600081115b610a1d5760405162461bcd60e51b81526004018080602001828103825260218152602001806129d66021913960400191505060405180910390fd5b6000610a51610a3384600363ffffffff611e1416565b610a45876103e863ffffffff611e1416565b9063ffffffff611e7716565b90506000610a69610a3384600363ffffffff611e1416565b9050610a9a620f4240610a8e6001600160701b038b8116908b1663ffffffff611e1416565b9063ffffffff611e1416565b610aaa838363ffffffff611e1416565b1015610ae9576040805162461bcd60e51b8152602060048201526009602482015268456d706972653a204b60b81b604482015290519081900360640190fd5b5050610af784848888611ec7565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600f55505050505050505050565b604051806040016040528060098152602001680456d70697265204c560bc1b81525081565b6006546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610bb9338484612089565b5060015b92915050565b6004546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c5d576001600160a01b0384166000908152600260209081526040808320338452909152902054610c38908363ffffffff611e7716565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c688484846120eb565b5060015b9392505050565b601281565b600a5481565b60075481565b60085481565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cfb576040805162461bcd60e51b815260206004820152601160248201527022b6b834b9329d102327a92124a22222a760791b604482015290519081900360640190fd5b600480546001600160a01b038087166001600160a01b03199283161790925560058054928616929091169190911790556000826003811115610d3957fe5b14610dc557600a819055600d805483919060ff19166001836003811115610d5c57fe5b02179055506002826003811115610d6f57fe5b1415610d9557600b80546001600160a01b0319166001600160a01b038616179055610dc5565b6003826003811115610da357fe5b1415610dc557600b80546001600160a01b0319166001600160a01b0385161790555b600e55505050565b600454600554600b546000926001600160a01b039081169281169184918291829116851415610e165750506006548291506001600160701b03600160701b820481169116610e98565b600554600b546001600160a01b03908116911614610e7b576040805162461bcd60e51b815260206004820152601a60248201527f456d706972653a204e4f4e5f535745455041424c455f504f4f4c000000000000604482015290519081900360640190fd5b50506006548391506001600160701b0380821691600160701b9004165b600082846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ed457600080fd5b505afa158015610ee8573d6000803e3d6000fd5b505050506040513d6020811015610efe57600080fd5b50510390506000610f108285856121a5565b909203965050505050505090565b6000600f54600114610f68576040805162461bcd60e51b815260206004820152600e60248201526d115b5c1a5c994e881313d0d2d15160921b604482015290519081900360640190fd5b6002600f55600080610f78610b82565b506004549193509150600090610f96906001600160a01b0316611d6a565b600554909150600090610fb1906001600160a01b0316611d6a565b90506000610fce836001600160701b03871663ffffffff611e7716565b90506000610feb836001600160701b03871663ffffffff611e7716565b90506000610ff9878761220d565b60005490915080611036576110226103e8610a4561101d878763ffffffff611e1416565b61236a565b985061103160006103e86123bb565b61108c565b6110896001600160701b038816611053858463ffffffff611e1416565b8161105a57fe5b046001600160701b038a16611075878563ffffffff611e1416565b8161107c57fe5b049063ffffffff61245116565b98505b600089116110cb5760405162461bcd60e51b81526004018080602001828103825260258152602001806128c66025913960400191505060405180910390fd5b6110d58a8a6123bb565b6110e186868a8a611ec7565b81156111115760065461110d906001600160701b0380821691600160701b90041663ffffffff611e1416565b6009555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600f5550949695505050505050565b600c5481565b60016020526000908152604090205481565b60095481565b60036020526000908152604090205481565b600080600f546001146111d9576040805162461bcd60e51b815260206004820152600e60248201526d115b5c1a5c994e881313d0d2d15160921b604482015290519081900360640190fd5b6002600f55600a54421015611235576040805162461bcd60e51b815260206004820152601860248201527f456d706972653a204c49515549444954595f4c4f434b45440000000000000000604482015290519081900360640190fd5b600080611240610b82565b506004546005549294509092506001600160a01b039081169116600061126583611d6a565b9050600061127283611d6a565b3060009081526001602052604081205491925061128f888861220d565b600054909150806112a6848763ffffffff611e1416565b816112ad57fe5b049a50806112c1848663ffffffff611e1416565b816112c857fe5b04995060008b1180156112db575060008a115b6113165760405162461bcd60e51b81526004018080602001828103825260258152602001806128a16025913960400191505060405180910390fd5b6113203084612467565b61132b878d8d611ce3565b611336868d8c611ce3565b61133f87611d6a565b945061134a86611d6a565b935061135885858b8b611ec7565b811561138857600654611384906001600160701b0380821691600160701b90041663ffffffff611e1416565b6009555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600f81905550915091565b600b546001600160a01b031681565b604051806040016040528060068152602001650454d502d4c560d41b81525081565b6000610bb93384846120eb565b600f5460011461146c576040805162461bcd60e51b815260206004820152600e60248201526d115b5c1a5c994e881313d0d2d15160921b604482015290519081900360640190fd5b6002600f556004546005546001600160a01b039182169116338214156114ee57600b546001600160a01b038281169116146114e9576040805162461bcd60e51b815260206004820152601860248201527722b6b834b9329d1024a721a7a92922a1aa2fa1a0a62622a960411b604482015290519081900360640190fd5b61155f565b336001600160a01b0382161480156115135750600b546001600160a01b038381169116145b61155f576040805162461bcd60e51b815260206004820152601860248201527722b6b834b9329d1024a721a7a92922a1aa2fa1a0a62622a960411b604482015290519081900360640190fd5b600b54611577906001600160a01b0316333086612505565b600c5461158a908463ffffffff611e7716565b600c556040805184815290517f712e640bd8c63092eadcdc525c0943175b70eb42a4680684e56ecda9efde45e69181900360200190a150506001600f5550565b600f54600114611612576040805162461bcd60e51b815260206004820152600e60248201526d115b5c1a5c994e881313d0d2d15160921b604482015290519081900360640190fd5b6002600f556004546005546006546001600160a01b039283169290911690611653908390859061164e906001600160701b0316610a4584611d6a565b611ce3565b60065461167b908290859061164e90600160701b90046001600160701b0316610a4584611d6a565b50506001600f5550565b600d5460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6005546001600160a01b031681565b600f54600114611709576040805162461bcd60e51b815260206004820152600e60248201526d115b5c1a5c994e881313d0d2d15160921b604482015290519081900360640190fd5b6002600f556004546005546001600160a01b039182169116600080338414156117a657600b546001600160a01b03848116911614611789576040805162461bcd60e51b815260206004820152601860248201527722b6b834b9329d1024a721a7a92922a1aa2fa1a0a62622a960411b604482015290519081900360640190fd5b50506006546001600160701b03600160701b820481169116611831565b336001600160a01b0384161480156117cb5750600b546001600160a01b038581169116145b611817576040805162461bcd60e51b815260206004820152601860248201527722b6b834b9329d1024a721a7a92922a1aa2fa1a0a62622a960411b604482015290519081900360640190fd5b50506006546001600160701b0380821691600160701b9004165b600081336001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561186d57600080fd5b505afa158015611881573d6000803e3d6000fd5b505050506040513d602081101561189757600080fd5b505103905060006118ae828563ffffffff611e1416565b905060006118d4836118c8866103e863ffffffff611e1416565b9063ffffffff61258a16565b905060008183816118e157fe5b600c54919004915081870390600090611900908e63ffffffff61258a16565b905081811115611957576040805162461bcd60e51b815260206004820152601e60248201527f456d706972653a20494e434f52524543545f53574545505f414d4f554e540000604482015290519081900360640190fd5b600c819055600b54611973906001600160a01b0316338f611ce3565b336001600160a01b03166311d7ed828e8e8e6040518463ffffffff1660e01b815260040180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050945050505050600060405180830381600087803b1580156119ed57600080fd5b505af1158015611a01573d6000803e3d6000fd5b505050507f7f221332ee403570bf4d61630b58189ea566ff1635269001e9df6a890f413dd88d6040518082815260200191505060405180910390a150506001600f555050505050505050505050565b42841015611a97576040805162461bcd60e51b815260206004820152600f60248201526e115b5c1a5c994e8811561412549151608a1b604482015290519081900360640190fd5b6000611b24604051808061291060529139604080519182900360520182206001600160a01b03808e16600081815260036020908152908590208054600181019091558187019490945285850191909152908d166060850152608084018c905260a084019190915260c08084018b90528251808503909101815260e0909301909152815191012090506125d9565b9050600060018286868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611b85573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611bbb5750886001600160a01b0316816001600160a01b0316145b611c0c576040805162461bcd60e51b815260206004820152601960248201527f456d706972653a20494e56414c49445f5349474e415455524500000000000000604482015290519081900360640190fd5b611c17898989612089565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600e5481565b600f54600114611c8d576040805162461bcd60e51b815260206004820152600e60248201526d115b5c1a5c994e881313d0d2d15160921b604482015290519081900360640190fd5b6002600f55600454611cdc90611cab906001600160a01b0316611d6a565b600554611cc0906001600160a01b0316611d6a565b6006546001600160701b0380821691600160701b900416611ec7565b6001600f55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b03851660248201526044808201859052835180830390910181526064909101909252810180516001600160e01b031663a9059cbb60e01b179052611d65908490612676565b505050565b600b546000906001600160a01b0383811691161415611d885750600c545b604080516370a0823160e01b81523060048201529051611e0c916001600160a01b038516916370a0823191602480820192602092909190829003018186803b158015611dd357600080fd5b505afa158015611de7573d6000803e3d6000fd5b505050506040513d6020811015611dfd57600080fd5b5051829063ffffffff61258a16565b90505b919050565b6000811580611e2f57505080820282828281611e2c57fe5b04145b610bbd576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610bbd576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611ee557506001600160701b038311155b611f29576040805162461bcd60e51b815260206004820152601060248201526f456d706972653a204f564552464c4f5760801b604482015290519081900360640190fd5b60065463ffffffff42811691600160e01b90048116820390811615801590611f5957506001600160701b03841615155b8015611f6d57506001600160701b03831615155b15611fde578063ffffffff16611f9b85611f868661279a565b6001600160e01b03169063ffffffff6127ac16565b600780546001600160e01b03929092169290920201905563ffffffff8116611fc684611f868761279a565b600880546001600160e01b0392909216929092020190555b600680546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054612114908263ffffffff611e7716565b6001600160a01b038085166000908152600160205260408082209390935590841681522054612149908263ffffffff61258a16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000836121b457506000610c6c565b60006121c8856103e563ffffffff611e1416565b905060006121dc828563ffffffff611e1416565b905060006121f6836118c8886103e863ffffffff611e1416565b905080828161220157fe5b04979650505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561226957600080fd5b505afa15801561227d573d6000803e3d6000fd5b505050506040513d602081101561229357600080fd5b50516009546001600160a01b0382161580159450919250906123565780156123515760006122d661101d6001600160701b0388811690881663ffffffff611e1416565b905060006122e38361236a565b90508082111561234e576000612311612302848463ffffffff611e7716565b6000549063ffffffff611e1416565b9050600061232a836118c886600563ffffffff611e1416565b9050600081838161233757fe5b049050801561234a5761234a87826123bb565b5050505b50505b612362565b80156123625760006009555b505092915050565b600060038211156123ad575080600160028204015b818110156123a75780915060028182858161239657fe5b04018161239f57fe5b04905061237f565b50611e0f565b8115611e0f57506001919050565b6000546123ce908263ffffffff61258a16565b60009081556001600160a01b0383168152600160205260409020546123f9908263ffffffff61258a16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106124605781610c6c565b5090919050565b6001600160a01b038216600090815260016020526040902054612490908263ffffffff611e7716565b6001600160a01b038316600090815260016020526040812091909155546124bd908263ffffffff611e7716565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b612584846040518060600160405280602581526020016128eb602591398051602091820120604080516001600160a01b03808a16602483015288166044820152606480820188905282518083039091018152608490910190915291820180516001600160e01b03166001600160e01b0319909216919091179052612676565b50505050565b80820182811015610bbd576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b600046817f000000000000000000000000000000000000000000000000000000000000000082141561262b577f0000000000000000000000000000000000000000000000000000000000000000612634565b612634826127d1565b6040805161190160f01b602080830191909152602282019390935260428082019790975281518082039097018752606201905284519401939093209392505050565b60006060836001600160a01b0316836040518082805190602001908083835b602083106126b45780518252601f199092019160209182019101612695565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612716576040519150601f19603f3d011682016040523d82523d6000602084013e61271b565b606091505b5091509150818015612749575080511580612749575080806020019051602081101561274657600080fd5b50515b612584576040805162461bcd60e51b815260206004820152601760248201527f456d706972653a205452414e534645525f4641494c4544000000000000000000604482015290519081900360640190fd5b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b038416816127c957fe5b049392505050565b600060405180806129626052913960408051918290036052018220828201825260098352680456d70697265204c560bc1b6020938401528151808301835260018152603160f81b908401528151808401919091527f2f521cff6f8a1416a02f0455c70bc850a9c90063ca4463d44dd97a783ee14463818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018690523060a0808301919091528251808303909101815260c0909101909152805191012091505091905056fe456d706972653a20494e53554646494349454e545f4c49515549444954595f4255524e4544456d706972653a20494e53554646494349454e545f4c49515549444954595f4d494e5445447472616e7366657246726f6d28616464726573732c616464726573732c75696e74323536295065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e6529454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429456d706972653a20494e53554646494349454e545f4f55545055545f414d4f554e54456d706972653a20494e53554646494349454e545f494e5055545f414d4f554e54a2646970667358221220bf71ab7b8f26f1ffa8c4b48cf3862fff6c174dfeaef8bf4c45c29bc04d6e3cd864736f6c63430006080033454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80637464fc3d1161010f578063c1226988116100a2578063d505accf11610071578063d505accf1461065c578063dd62ed3e146106ad578063f96e16fc146106db578063fff6cae9146106e3576101f0565b8063c1226988146105a9578063c45a0155146105d5578063d21220a7146105dd578063d2ae9a0d146105e5576101f0565b806395d89b41116100de57806395d89b4114610532578063a9059cbb1461053a578063ae84637f14610566578063bc25cf7714610583576101f0565b80637464fc3d146104bd5780637ecebe00146104c557806389afcb44146104eb5780638b15bb871461052a576101f0565b806357976fb41161018757806363004c1b1161015657806363004c1b146104615780636a627842146104695780636b1be4bb1461048f57806370a0823114610497576101f0565b806357976fb41461040a5780635909c0d5146104125780635a3d54931461041a57806360d780ee14610422576101f0565b80630dfe1681116101c35780630dfe16811461037857806318160ddd1461039c57806323b872dd146103b6578063313ce567146103ec576101f0565b8063022c0d9f146101f557806306fdde03146102835780630902f1ac14610300578063095ea7b314610338575b600080fd5b6102816004803603608081101561020b57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561024257600080fd5b82018360208201111561025457600080fd5b8035906020019184600183028401116401000000008311171561027657600080fd5b5090925090506106eb565b005b61028b610b5d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102c55781810151838201526020016102ad565b50505050905090810190601f1680156102f25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610308610b82565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103646004803603604081101561034e57600080fd5b506001600160a01b038135169060200135610bac565b604080519115158252519081900360200190f35b610380610bc3565b604080516001600160a01b039092168252519081900360200190f35b6103a4610bd2565b60408051918252519081900360200190f35b610364600480360360608110156103cc57600080fd5b506001600160a01b03813581169160208101359091169060400135610bd8565b6103f4610c73565b6040805160ff9092168252519081900360200190f35b6103a4610c78565b6103a4610c7e565b6103a4610c84565b6102816004803603608081101561043857600080fd5b506001600160a01b03813581169160208101359091169060ff6040820135169060600135610c8a565b6103a4610dcd565b6103a46004803603602081101561047f57600080fd5b50356001600160a01b0316610f1e565b6103a461115e565b6103a4600480360360208110156104ad57600080fd5b50356001600160a01b0316611164565b6103a4611176565b6103a4600480360360208110156104db57600080fd5b50356001600160a01b031661117c565b6105116004803603602081101561050157600080fd5b50356001600160a01b031661118e565b6040805192835260208301919091528051918290030190f35b6103806113e6565b61028b6113f5565b6103646004803603604081101561055057600080fd5b506001600160a01b038135169060200135611417565b6102816004803603602081101561057c57600080fd5b5035611424565b6102816004803603602081101561059957600080fd5b50356001600160a01b03166115ca565b6105b1611685565b604051808260038111156105c157fe5b60ff16815260200191505060405180910390f35b61038061168e565b6103806116b2565b610281600480360360408110156105fb57600080fd5b8135919081019060408101602082013564010000000081111561061d57600080fd5b82018360208201111561062f57600080fd5b8035906020019184600183028401116401000000008311171561065157600080fd5b5090925090506116c1565b610281600480360360e081101561067257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611a50565b6103a4600480360360408110156106c357600080fd5b506001600160a01b0381358116916020013516611c22565b6103a4611c3f565b610281611c45565b600f54600114610733576040805162461bcd60e51b815260206004820152600e60248201526d115b5c1a5c994e881313d0d2d15160921b604482015290519081900360640190fd5b6002600f55841515806107465750600084115b6107815760405162461bcd60e51b81526004018080602001828103825260228152602001806129b46022913960400191505060405180910390fd5b60008061078c610b82565b5091509150816001600160701b0316871080156107b15750806001600160701b031686105b610802576040805162461bcd60e51b815260206004820152601e60248201527f456d706972653a20494e53554646494349454e545f4c49515549444954590000604482015290519081900360640190fd5b60045460055460009182916001600160a01b039182169190811690891682148015906108405750806001600160a01b0316896001600160a01b031614155b610886576040805162461bcd60e51b8152602060048201526012602482015271456d706972653a20494e56414c49445f544f60701b604482015290519081900360640190fd5b8a1561089757610897828a8d611ce3565b89156108a8576108a8818a8c611ce3565b861561096357886001600160a01b031663f05ffd30338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561094a57600080fd5b505af115801561095e573d6000803e3d6000fd5b505050505b61096c82611d6a565b935061097781611d6a565b92505050600089856001600160701b03160383116109965760006109a5565b89856001600160701b03160383035b9050600089856001600160701b03160383116109c25760006109d1565b89856001600160701b03160383035b905060008211806109e25750600081115b610a1d5760405162461bcd60e51b81526004018080602001828103825260218152602001806129d66021913960400191505060405180910390fd5b6000610a51610a3384600363ffffffff611e1416565b610a45876103e863ffffffff611e1416565b9063ffffffff611e7716565b90506000610a69610a3384600363ffffffff611e1416565b9050610a9a620f4240610a8e6001600160701b038b8116908b1663ffffffff611e1416565b9063ffffffff611e1416565b610aaa838363ffffffff611e1416565b1015610ae9576040805162461bcd60e51b8152602060048201526009602482015268456d706972653a204b60b81b604482015290519081900360640190fd5b5050610af784848888611ec7565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600f55505050505050505050565b604051806040016040528060098152602001680456d70697265204c560bc1b81525081565b6006546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610bb9338484612089565b5060015b92915050565b6004546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c5d576001600160a01b0384166000908152600260209081526040808320338452909152902054610c38908363ffffffff611e7716565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c688484846120eb565b5060015b9392505050565b601281565b600a5481565b60075481565b60085481565b336001600160a01b037f000000000000000000000000d674b01e778cf43d3e6544985f893355f46a74a51614610cfb576040805162461bcd60e51b815260206004820152601160248201527022b6b834b9329d102327a92124a22222a760791b604482015290519081900360640190fd5b600480546001600160a01b038087166001600160a01b03199283161790925560058054928616929091169190911790556000826003811115610d3957fe5b14610dc557600a819055600d805483919060ff19166001836003811115610d5c57fe5b02179055506002826003811115610d6f57fe5b1415610d9557600b80546001600160a01b0319166001600160a01b038616179055610dc5565b6003826003811115610da357fe5b1415610dc557600b80546001600160a01b0319166001600160a01b0385161790555b600e55505050565b600454600554600b546000926001600160a01b039081169281169184918291829116851415610e165750506006548291506001600160701b03600160701b820481169116610e98565b600554600b546001600160a01b03908116911614610e7b576040805162461bcd60e51b815260206004820152601a60248201527f456d706972653a204e4f4e5f535745455041424c455f504f4f4c000000000000604482015290519081900360640190fd5b50506006548391506001600160701b0380821691600160701b9004165b600082846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ed457600080fd5b505afa158015610ee8573d6000803e3d6000fd5b505050506040513d6020811015610efe57600080fd5b50510390506000610f108285856121a5565b909203965050505050505090565b6000600f54600114610f68576040805162461bcd60e51b815260206004820152600e60248201526d115b5c1a5c994e881313d0d2d15160921b604482015290519081900360640190fd5b6002600f55600080610f78610b82565b506004549193509150600090610f96906001600160a01b0316611d6a565b600554909150600090610fb1906001600160a01b0316611d6a565b90506000610fce836001600160701b03871663ffffffff611e7716565b90506000610feb836001600160701b03871663ffffffff611e7716565b90506000610ff9878761220d565b60005490915080611036576110226103e8610a4561101d878763ffffffff611e1416565b61236a565b985061103160006103e86123bb565b61108c565b6110896001600160701b038816611053858463ffffffff611e1416565b8161105a57fe5b046001600160701b038a16611075878563ffffffff611e1416565b8161107c57fe5b049063ffffffff61245116565b98505b600089116110cb5760405162461bcd60e51b81526004018080602001828103825260258152602001806128c66025913960400191505060405180910390fd5b6110d58a8a6123bb565b6110e186868a8a611ec7565b81156111115760065461110d906001600160701b0380821691600160701b90041663ffffffff611e1416565b6009555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600f5550949695505050505050565b600c5481565b60016020526000908152604090205481565b60095481565b60036020526000908152604090205481565b600080600f546001146111d9576040805162461bcd60e51b815260206004820152600e60248201526d115b5c1a5c994e881313d0d2d15160921b604482015290519081900360640190fd5b6002600f55600a54421015611235576040805162461bcd60e51b815260206004820152601860248201527f456d706972653a204c49515549444954595f4c4f434b45440000000000000000604482015290519081900360640190fd5b600080611240610b82565b506004546005549294509092506001600160a01b039081169116600061126583611d6a565b9050600061127283611d6a565b3060009081526001602052604081205491925061128f888861220d565b600054909150806112a6848763ffffffff611e1416565b816112ad57fe5b049a50806112c1848663ffffffff611e1416565b816112c857fe5b04995060008b1180156112db575060008a115b6113165760405162461bcd60e51b81526004018080602001828103825260258152602001806128a16025913960400191505060405180910390fd5b6113203084612467565b61132b878d8d611ce3565b611336868d8c611ce3565b61133f87611d6a565b945061134a86611d6a565b935061135885858b8b611ec7565b811561138857600654611384906001600160701b0380821691600160701b90041663ffffffff611e1416565b6009555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600f81905550915091565b600b546001600160a01b031681565b604051806040016040528060068152602001650454d502d4c560d41b81525081565b6000610bb93384846120eb565b600f5460011461146c576040805162461bcd60e51b815260206004820152600e60248201526d115b5c1a5c994e881313d0d2d15160921b604482015290519081900360640190fd5b6002600f556004546005546001600160a01b039182169116338214156114ee57600b546001600160a01b038281169116146114e9576040805162461bcd60e51b815260206004820152601860248201527722b6b834b9329d1024a721a7a92922a1aa2fa1a0a62622a960411b604482015290519081900360640190fd5b61155f565b336001600160a01b0382161480156115135750600b546001600160a01b038381169116145b61155f576040805162461bcd60e51b815260206004820152601860248201527722b6b834b9329d1024a721a7a92922a1aa2fa1a0a62622a960411b604482015290519081900360640190fd5b600b54611577906001600160a01b0316333086612505565b600c5461158a908463ffffffff611e7716565b600c556040805184815290517f712e640bd8c63092eadcdc525c0943175b70eb42a4680684e56ecda9efde45e69181900360200190a150506001600f5550565b600f54600114611612576040805162461bcd60e51b815260206004820152600e60248201526d115b5c1a5c994e881313d0d2d15160921b604482015290519081900360640190fd5b6002600f556004546005546006546001600160a01b039283169290911690611653908390859061164e906001600160701b0316610a4584611d6a565b611ce3565b60065461167b908290859061164e90600160701b90046001600160701b0316610a4584611d6a565b50506001600f5550565b600d5460ff1681565b7f000000000000000000000000d674b01e778cf43d3e6544985f893355f46a74a581565b6005546001600160a01b031681565b600f54600114611709576040805162461bcd60e51b815260206004820152600e60248201526d115b5c1a5c994e881313d0d2d15160921b604482015290519081900360640190fd5b6002600f556004546005546001600160a01b039182169116600080338414156117a657600b546001600160a01b03848116911614611789576040805162461bcd60e51b815260206004820152601860248201527722b6b834b9329d1024a721a7a92922a1aa2fa1a0a62622a960411b604482015290519081900360640190fd5b50506006546001600160701b03600160701b820481169116611831565b336001600160a01b0384161480156117cb5750600b546001600160a01b038581169116145b611817576040805162461bcd60e51b815260206004820152601860248201527722b6b834b9329d1024a721a7a92922a1aa2fa1a0a62622a960411b604482015290519081900360640190fd5b50506006546001600160701b0380821691600160701b9004165b600081336001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561186d57600080fd5b505afa158015611881573d6000803e3d6000fd5b505050506040513d602081101561189757600080fd5b505103905060006118ae828563ffffffff611e1416565b905060006118d4836118c8866103e863ffffffff611e1416565b9063ffffffff61258a16565b905060008183816118e157fe5b600c54919004915081870390600090611900908e63ffffffff61258a16565b905081811115611957576040805162461bcd60e51b815260206004820152601e60248201527f456d706972653a20494e434f52524543545f53574545505f414d4f554e540000604482015290519081900360640190fd5b600c819055600b54611973906001600160a01b0316338f611ce3565b336001600160a01b03166311d7ed828e8e8e6040518463ffffffff1660e01b815260040180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050945050505050600060405180830381600087803b1580156119ed57600080fd5b505af1158015611a01573d6000803e3d6000fd5b505050507f7f221332ee403570bf4d61630b58189ea566ff1635269001e9df6a890f413dd88d6040518082815260200191505060405180910390a150506001600f555050505050505050505050565b42841015611a97576040805162461bcd60e51b815260206004820152600f60248201526e115b5c1a5c994e8811561412549151608a1b604482015290519081900360640190fd5b6000611b24604051808061291060529139604080519182900360520182206001600160a01b03808e16600081815260036020908152908590208054600181019091558187019490945285850191909152908d166060850152608084018c905260a084019190915260c08084018b90528251808503909101815260e0909301909152815191012090506125d9565b9050600060018286868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611b85573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611bbb5750886001600160a01b0316816001600160a01b0316145b611c0c576040805162461bcd60e51b815260206004820152601960248201527f456d706972653a20494e56414c49445f5349474e415455524500000000000000604482015290519081900360640190fd5b611c17898989612089565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600e5481565b600f54600114611c8d576040805162461bcd60e51b815260206004820152600e60248201526d115b5c1a5c994e881313d0d2d15160921b604482015290519081900360640190fd5b6002600f55600454611cdc90611cab906001600160a01b0316611d6a565b600554611cc0906001600160a01b0316611d6a565b6006546001600160701b0380821691600160701b900416611ec7565b6001600f55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b03851660248201526044808201859052835180830390910181526064909101909252810180516001600160e01b031663a9059cbb60e01b179052611d65908490612676565b505050565b600b546000906001600160a01b0383811691161415611d885750600c545b604080516370a0823160e01b81523060048201529051611e0c916001600160a01b038516916370a0823191602480820192602092909190829003018186803b158015611dd357600080fd5b505afa158015611de7573d6000803e3d6000fd5b505050506040513d6020811015611dfd57600080fd5b5051829063ffffffff61258a16565b90505b919050565b6000811580611e2f57505080820282828281611e2c57fe5b04145b610bbd576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610bbd576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611ee557506001600160701b038311155b611f29576040805162461bcd60e51b815260206004820152601060248201526f456d706972653a204f564552464c4f5760801b604482015290519081900360640190fd5b60065463ffffffff42811691600160e01b90048116820390811615801590611f5957506001600160701b03841615155b8015611f6d57506001600160701b03831615155b15611fde578063ffffffff16611f9b85611f868661279a565b6001600160e01b03169063ffffffff6127ac16565b600780546001600160e01b03929092169290920201905563ffffffff8116611fc684611f868761279a565b600880546001600160e01b0392909216929092020190555b600680546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054612114908263ffffffff611e7716565b6001600160a01b038085166000908152600160205260408082209390935590841681522054612149908263ffffffff61258a16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000836121b457506000610c6c565b60006121c8856103e563ffffffff611e1416565b905060006121dc828563ffffffff611e1416565b905060006121f6836118c8886103e863ffffffff611e1416565b905080828161220157fe5b04979650505050505050565b6000807f000000000000000000000000d674b01e778cf43d3e6544985f893355f46a74a56001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561226957600080fd5b505afa15801561227d573d6000803e3d6000fd5b505050506040513d602081101561229357600080fd5b50516009546001600160a01b0382161580159450919250906123565780156123515760006122d661101d6001600160701b0388811690881663ffffffff611e1416565b905060006122e38361236a565b90508082111561234e576000612311612302848463ffffffff611e7716565b6000549063ffffffff611e1416565b9050600061232a836118c886600563ffffffff611e1416565b9050600081838161233757fe5b049050801561234a5761234a87826123bb565b5050505b50505b612362565b80156123625760006009555b505092915050565b600060038211156123ad575080600160028204015b818110156123a75780915060028182858161239657fe5b04018161239f57fe5b04905061237f565b50611e0f565b8115611e0f57506001919050565b6000546123ce908263ffffffff61258a16565b60009081556001600160a01b0383168152600160205260409020546123f9908263ffffffff61258a16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106124605781610c6c565b5090919050565b6001600160a01b038216600090815260016020526040902054612490908263ffffffff611e7716565b6001600160a01b038316600090815260016020526040812091909155546124bd908263ffffffff611e7716565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b612584846040518060600160405280602581526020016128eb602591398051602091820120604080516001600160a01b03808a16602483015288166044820152606480820188905282518083039091018152608490910190915291820180516001600160e01b03166001600160e01b0319909216919091179052612676565b50505050565b80820182811015610bbd576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b600046817f000000000000000000000000000000000000000000000000000000000000000182141561262b577f722aed1ee929c28480be23f635e33b7167c69c7d06d2a479abc4588e1e1e53e5612634565b612634826127d1565b6040805161190160f01b602080830191909152602282019390935260428082019790975281518082039097018752606201905284519401939093209392505050565b60006060836001600160a01b0316836040518082805190602001908083835b602083106126b45780518252601f199092019160209182019101612695565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612716576040519150601f19603f3d011682016040523d82523d6000602084013e61271b565b606091505b5091509150818015612749575080511580612749575080806020019051602081101561274657600080fd5b50515b612584576040805162461bcd60e51b815260206004820152601760248201527f456d706972653a205452414e534645525f4641494c4544000000000000000000604482015290519081900360640190fd5b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b038416816127c957fe5b049392505050565b600060405180806129626052913960408051918290036052018220828201825260098352680456d70697265204c560bc1b6020938401528151808301835260018152603160f81b908401528151808401919091527f2f521cff6f8a1416a02f0455c70bc850a9c90063ca4463d44dd97a783ee14463818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018690523060a0808301919091528251808303909101815260c0909101909152805191012091505091905056fe456d706972653a20494e53554646494349454e545f4c49515549444954595f4255524e4544456d706972653a20494e53554646494349454e545f4c49515549444954595f4d494e5445447472616e7366657246726f6d28616464726573732c616464726573732c75696e74323536295065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e6529454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429456d706972653a20494e53554646494349454e545f4f55545055545f414d4f554e54456d706972653a20494e53554646494349454e545f494e5055545f414d4f554e54a2646970667358221220bf71ab7b8f26f1ffa8c4b48cf3862fff6c174dfeaef8bf4c45c29bc04d6e3cd864736f6c63430006080033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $2,697.99 | 1.4184 | $3,826.96 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.