Source Code
Overview
ETH Balance
Token Holdings
More Info
ContractCreator
TokenTracker
Multichain Info
N/A
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
7914684 | 63 days ago | 0 ETH | ||||
7914684 | 63 days ago | 0 ETH | ||||
7914684 | 63 days ago | 0 ETH | ||||
7914684 | 63 days ago | 0 ETH | ||||
7914684 | 63 days ago | 0 ETH | ||||
7914684 | 63 days ago | 0 ETH | ||||
7914684 | 63 days ago | 0 ETH | ||||
7914684 | 63 days ago | 0 ETH | ||||
7914684 | 63 days ago | 0 ETH | ||||
7914684 | 63 days ago | 0 ETH | ||||
7914684 | 63 days ago | 0 ETH | ||||
7914684 | 63 days ago | 0 ETH | ||||
7914674 | 63 days ago | 0 ETH | ||||
7914674 | 63 days ago | 0 ETH | ||||
7914674 | 63 days ago | 0 ETH | ||||
7914674 | 63 days ago | 0 ETH | ||||
7914674 | 63 days ago | 0 ETH | ||||
7914674 | 63 days ago | 0 ETH | ||||
7914674 | 63 days ago | 0 ETH | ||||
7914674 | 63 days ago | 0 ETH | ||||
7914674 | 63 days ago | 0 ETH | ||||
7914674 | 63 days ago | 0 ETH | ||||
7914674 | 63 days ago | 0 ETH | ||||
7914674 | 63 days ago | 0 ETH | ||||
7905733 | 64 days ago | 0 ETH |
Loading...
Loading
Contract Name:
BrownFiV1Pair
Compiler Version
v0.5.16+commit.9c3226ce
Optimization Enabled:
Yes with 1000000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity =0.5.16; import './interfaces/IBrownFiV1Pair.sol'; import './BrownFiV1ERC20.sol'; import './libraries/Math.sol'; import './libraries/UQ112x112.sol'; import './interfaces/IERC20.sol'; import './interfaces/IBrownFiV1Factory.sol'; import './interfaces/IBrownFiV1Callee.sol'; import '@uniswap/lib/contracts/libraries/FullMath.sol'; import './interfaces/AggregatorV3Interface.sol'; contract BrownFiV1Pair is IBrownFiV1Pair, BrownFiV1ERC20 { using SafeMath for uint; using SafeMath for uint112; using UQ112x112 for uint224; // avoids stack too deep errors struct Balances { uint balance0; uint balance1; } struct Inventories { uint preInvetory; uint postInvetory; } uint256 internal constant Q128 = 1 << 128; uint256 internal constant FEE_DENOMINATOR = 10000; uint public constant MINIMUM_LIQUIDITY = 10**3; bytes4 private constant SELECTOR = bytes4(keccak256(bytes('transfer(address,uint256)'))); address public factory; address public token0; address public token1; uint112 private reserve0; // uses single storage slot, accessible via getReserves uint112 private reserve1; // uses single storage slot, accessible via getReserves uint32 private blockTimestampLast; // uses single storage slot, accessible via getReserves uint private unlocked = 1; // new variables uint public kappa = Q128.mul(2); // kappa = 2 address public priceFeed; uint public fee = 0; // fee = 0% // quote token index uint public qti = 0; // qti = 0 // shift decimal int public decimalShift = 0; modifier lock() { require(unlocked == 1, 'BrownFiV1: LOCKED'); unlocked = 0; _; unlocked = 1; } function setKappa(uint _kappa) external { require(msg.sender == IBrownFiV1Factory(factory).setter(), 'BrownFiV1: FORBIDDEN'); // kappa limitation [0.001, 2] require(_kappa >= Q128 / 1000 && _kappa <= Q128.mul(2), 'BrownFiV1: INVALID_KAPPA'); kappa = _kappa; } function setFee(uint _fee) external { require(msg.sender == IBrownFiV1Factory(factory).setter(), 'BrownFiV1: FORBIDDEN'); fee = _fee; } function setQTI(uint _qti) external { require(msg.sender == IBrownFiV1Factory(factory).setter(), 'BrownFiV1: FORBIDDEN'); qti = _qti; } function setPriceFeed(address _priceFeed) external { require(msg.sender == IBrownFiV1Factory(factory).setter(), 'BrownFiV1: FORBIDDEN'); priceFeed = _priceFeed; } function setDecimalShift(int _decimalShift) external { require(msg.sender == IBrownFiV1Factory(factory).setter(), 'BrownFiV1: FORBIDDEN'); decimalShift = _decimalShift; } function getReserves() public view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast) { _reserve0 = reserve0; _reserve1 = reserve1; _blockTimestampLast = blockTimestampLast; } // Feed oracle price using chainlink interface function fetchOraclePrice() public view returns (uint) { AggregatorV3Interface _priceFeed = AggregatorV3Interface(priceFeed); ( /* uint80 roundID, */, int price, /* uint startedAt, */, /* uint timeStamp, */, /* uint80 answeredInRound */ ) = _priceFeed.latestRoundData(); // get decimals from oracle uint8 decimals = _priceFeed.decimals(); // convert price to Q128 base on decimals if (qti == 0) { if (decimalShift > 0) { return FullMath.mulDiv(10**uint(decimals) * 10**uint(decimalShift), Q128, uint(price)); } else if (decimalShift < 0) { return FullMath.mulDiv(10**uint(decimals), Q128, uint(price) * 10**uint(-decimalShift)); } else { return FullMath.mulDiv(10**uint(decimals), Q128, uint(price)); } } else { if (decimalShift > 0) { return FullMath.mulDiv(uint(price), Q128, 10**uint(decimals) * 10**uint(decimalShift)); } else if (decimalShift < 0) { return FullMath.mulDiv(uint(price) * 10**uint(-decimalShift), Q128, 10**uint(decimals)); } else { return FullMath.mulDiv(uint(price), Q128, 10**uint(decimals)); } } } function _safeTransfer(address token, address to, uint value) private { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SELECTOR, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'BrownFiV1: TRANSFER_FAILED'); } 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, uint swapPrice ); event Sync(uint112 reserve0, uint112 reserve1); constructor() public { factory = msg.sender; } // called once by the factory at time of deployment function initialize(address _token0, address _token1) external { require(msg.sender == factory, 'BrownFiV1: FORBIDDEN'); // sufficient check token0 = _token0; token1 = _token1; } // update reserves and, on the first call per block, price accumulators function _update(uint balance0, uint balance1, uint112 _reserve0, uint112 _reserve1) private { require(balance0 <= uint112(-1) && balance1 <= uint112(-1), 'BrownFiV1: OVERFLOW'); uint32 blockTimestamp = uint32(block.timestamp % 2**32); reserve0 = uint112(balance0); reserve1 = uint112(balance1); blockTimestampLast = blockTimestamp; emit Sync(reserve0, reserve1); } // this low-level function should be called from a contract which performs important safety checks function mint(address to) external lock returns (uint liquidity) { (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings uint balance0 = IERC20(token0).balanceOf(address(this)); uint balance1 = IERC20(token1).balanceOf(address(this)); uint amount0 = balance0.sub(_reserve0); uint amount1 = balance1.sub(_reserve1); uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee if (_totalSupply == 0) { liquidity = Math.sqrt(amount0.mul(amount1)).sub(MINIMUM_LIQUIDITY); _mint(address(0), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens } else { liquidity = Math.min(amount0.mul(_totalSupply) / _reserve0, amount1.mul(_totalSupply) / _reserve1); } require(liquidity > 0, 'BrownFiV1: INSUFFICIENT_LIQUIDITY_MINTED'); _mint(to, liquidity); _update(balance0, balance1, _reserve0, _reserve1); 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 lock returns (uint amount0, uint amount1) { (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings address _token0 = token0; // gas savings address _token1 = token1; // gas savings uint balance0 = IERC20(_token0).balanceOf(address(this)); uint balance1 = IERC20(_token1).balanceOf(address(this)); uint liquidity = balanceOf[address(this)]; uint _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, 'BrownFiV1: INSUFFICIENT_LIQUIDITY_BURNED'); _burn(address(this), liquidity); _safeTransfer(_token0, to, amount0); _safeTransfer(_token1, to, amount1); balance0 = IERC20(_token0).balanceOf(address(this)); balance1 = IERC20(_token1).balanceOf(address(this)); _update(balance0, balance1, _reserve0, _reserve1); emit Burn(msg.sender, amount0, amount1, to); } // this low-level function should be called from a contract which performs important safety checks function swap( uint amount0Out, uint amount1Out, address to, bytes calldata data ) external lock { require(amount0Out > 0 || amount1Out > 0, 'BrownFiV1: INSUFFICIENT_OUTPUT_AMOUNT'); (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings require(amount0Out < _reserve0 && amount1Out < _reserve1, 'BrownFiV1: INSUFFICIENT_LIQUIDITY'); Balances memory b; { // scope for _token{0,1}, avoids stack too deep errors address _token0 = token0; address _token1 = token1; require(to != _token0 && to != _token1, 'BrownFiV1: 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) IBrownFiV1Callee(to).brownFiV1Call(msg.sender, amount0Out, amount1Out, data); b.balance0 = IERC20(_token0).balanceOf(address(this)); b.balance1 = IERC20(_token1).balanceOf(address(this)); } uint amount0In = b.balance0 > _reserve0 - amount0Out ? b.balance0 - (_reserve0 - amount0Out) : 0; uint amount1In = b.balance1 > _reserve1 - amount1Out ? b.balance1 - (_reserve1 - amount1Out) : 0; require(amount0In > 0 || amount1In > 0, 'BrownFiV1: INSUFFICIENT_INPUT_AMOUNT'); // verify post-trade invetory is greater or equal to pre-trade invetory uint swapPrice = checkInvetory(amount0Out, amount1Out, b.balance0, b.balance1, _reserve0, _reserve1); emit Swap(msg.sender, amount0In, amount1In, amount0Out, amount1Out, to, swapPrice); } function checkInvetory( uint amount0Out, uint amount1Out, uint balance0, uint balance1, uint112 _reserve0, uint112 _reserve1 ) private returns (uint) { uint oPrice = fetchOraclePrice(); Inventories memory i; uint amount0OutWithoutFee; uint amount1OutWithoutFee; if (amount0Out > 0) amount0OutWithoutFee = FullMath.mulDiv(amount0Out, FEE_DENOMINATOR, FEE_DENOMINATOR - fee); if (amount1Out > 0) amount1OutWithoutFee = FullMath.mulDiv(amount1Out, FEE_DENOMINATOR, FEE_DENOMINATOR - fee); if (amount0OutWithoutFee > 0) { // calculate pre-trade invetory x*P + y + (P*K*dx*dx) / 2*(x - dx) // (P*K*dx*dx) uint denominator = FullMath.mulDiv(oPrice, amount0OutWithoutFee, Q128) .mul(FullMath.mulDiv(kappa, amount0OutWithoutFee, Q128)); // 2*(x - dx) uint numerator = (_reserve0 - amount0OutWithoutFee).mul(2); i.preInvetory = FullMath.mulDiv(oPrice, _reserve0, Q128).add(_reserve1).add(denominator / numerator); _update(balance0, balance1, _reserve0, _reserve1); // calculate post-trade invetory (x - dx)*P + (y + dy) i.postInvetory = FullMath.mulDiv(oPrice, _reserve0 - amount0OutWithoutFee, Q128).add(reserve1); } if (amount1OutWithoutFee > 0) { // calculate pre-trade invetory x*P + y + (K*dx*dx) / 2*(y - dy) // (K*dy*dy) uint denominator = (FullMath.mulDiv(kappa, amount1OutWithoutFee, Q128)).mul(amount1OutWithoutFee); // 2*(y - dy) uint numerator = (_reserve1 - amount1OutWithoutFee).mul(2); i.preInvetory = FullMath.mulDiv(oPrice, _reserve0, Q128).add(_reserve1).add(denominator / numerator); _update(balance0, balance1, _reserve0, _reserve1); // calculate post-trade invetory (x + dx)*P + (y - dy) i.postInvetory = FullMath.mulDiv(oPrice, reserve0, Q128).add(_reserve1 - amount1OutWithoutFee); } // verification require(i.postInvetory >= i.preInvetory, 'BrownFiV1: INVALID_TRADE'); return oPrice; } // force balances to match reserves function skim(address to) external lock { address _token0 = token0; // gas savings address _token1 = token1; // gas savings _safeTransfer(_token0, to, IERC20(_token0).balanceOf(address(this)).sub(reserve0)); _safeTransfer(_token1, to, IERC20(_token1).balanceOf(address(this)).sub(reserve1)); } // force reserves to match balances function sync() external lock { _update(IERC20(token0).balanceOf(address(this)), IERC20(token1).balanceOf(address(this)), reserve0, reserve1); } }
// SPDX-License-Identifier: CC-BY-4.0 pragma solidity >=0.4.0; // taken from https://medium.com/coinmonks/math-in-solidity-part-3-percents-and-proportions-4db014e080b1 // license is CC-BY-4.0 library FullMath { function fullMul(uint256 x, uint256 y) internal pure returns (uint256 l, uint256 h) { uint256 mm = mulmod(x, y, uint256(-1)); l = x * y; h = mm - l; if (mm < l) h -= 1; } function fullDiv( uint256 l, uint256 h, uint256 d ) private pure returns (uint256) { uint256 pow2 = d & -d; d /= pow2; l /= pow2; l += h * ((-pow2) / pow2 + 1); uint256 r = 1; r *= 2 - d * r; r *= 2 - d * r; r *= 2 - d * r; r *= 2 - d * r; r *= 2 - d * r; r *= 2 - d * r; r *= 2 - d * r; r *= 2 - d * r; return l * r; } function mulDiv( uint256 x, uint256 y, uint256 d ) internal pure returns (uint256) { (uint256 l, uint256 h) = fullMul(x, y); uint256 mm = mulmod(x, y, d); if (mm > l) h -= 1; l -= mm; if (h == 0) return l / d; require(h < d, 'FullMath: FULLDIV_OVERFLOW'); return fullDiv(l, h, d); } }
pragma solidity =0.5.16; import './interfaces/IBrownFiV1ERC20.sol'; import './libraries/SafeMath.sol'; contract BrownFiV1ERC20 is IBrownFiV1ERC20 { using SafeMath for uint; string public constant name = 'BrownFI V1'; string public constant symbol = 'BRF-V1'; uint8 public constant decimals = 18; uint public totalSupply; mapping(address => uint) public balanceOf; mapping(address => mapping(address => uint)) public allowance; bytes32 public DOMAIN_SEPARATOR; // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9; mapping(address => uint) public nonces; event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); constructor() public { uint chainId; assembly { chainId := chainid } DOMAIN_SEPARATOR = keccak256( abi.encode( keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'), keccak256(bytes(name)), keccak256(bytes('1')), chainId, address(this) ) ); } function _mint(address to, uint value) internal { totalSupply = totalSupply.add(value); balanceOf[to] = balanceOf[to].add(value); emit Transfer(address(0), to, value); } function _burn(address from, uint value) internal { balanceOf[from] = balanceOf[from].sub(value); totalSupply = totalSupply.sub(value); emit Transfer(from, address(0), value); } function _approve(address owner, address spender, uint value) private { allowance[owner][spender] = value; emit Approval(owner, spender, value); } function _transfer(address from, address to, uint value) private { balanceOf[from] = balanceOf[from].sub(value); balanceOf[to] = balanceOf[to].add(value); emit Transfer(from, to, value); } function approve(address spender, uint value) external returns (bool) { _approve(msg.sender, spender, value); return true; } function transfer(address to, uint value) external returns (bool) { _transfer(msg.sender, to, value); return true; } function transferFrom(address from, address to, uint value) external returns (bool) { if (allowance[from][msg.sender] != uint(-1)) { allowance[from][msg.sender] = allowance[from][msg.sender].sub(value); } _transfer(from, to, value); return true; } function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external { require(deadline >= block.timestamp, 'BrownFiV1: EXPIRED'); bytes32 digest = keccak256( abi.encodePacked( '\x19\x01', DOMAIN_SEPARATOR, keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline)) ) ); address recoveredAddress = ecrecover(digest, v, r, s); require(recoveredAddress != address(0) && recoveredAddress == owner, 'BrownFiV1: INVALID_SIGNATURE'); _approve(owner, spender, value); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.5.0; interface AggregatorV3Interface { function decimals() external view returns (uint8); function description() external view returns (string memory); function version() external view returns (uint256); function getRoundData( uint80 _roundId ) external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound); function latestRoundData() external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound); }
pragma solidity >=0.5.0; interface IBrownFiV1Callee { function brownFiV1Call(address sender, uint amount0, uint amount1, bytes calldata data) external; }
pragma solidity >=0.5.0; interface IBrownFiV1ERC20 { 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; }
pragma solidity >=0.5.0; interface IBrownFiV1Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function setter() external view returns (address); 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 setSetter(address) external; }
pragma solidity >=0.5.0; interface IBrownFiV1Pair { 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 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; function fetchOraclePrice() external view returns (uint); function kappa() external view returns (uint); function fee() external view returns (uint); function priceFeed() external view returns (address); function qti() external view returns (uint); function decimalShift() external view returns (int); }
pragma solidity >=0.5.0; 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); }
pragma solidity =0.5.16; // a library for performing various math operations library Math { function min(uint x, uint y) internal pure returns (uint z) { z = x < y ? x : y; } // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method) function sqrt(uint y) internal pure returns (uint z) { if (y > 3) { z = y; uint x = y / 2 + 1; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } } }
pragma solidity =0.5.16; // a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math) library SafeMath { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x, 'ds-math-add-overflow'); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x, 'ds-math-sub-underflow'); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow'); } }
pragma solidity =0.5.16; // 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 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); } }
{ "optimizer": { "enabled": true, "runs": 1000000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract ABI
API[{"inputs":[],"payable":false,"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"},{"indexed":false,"internalType":"uint256","name":"swapPrice","type":"uint256"}],"name":"Swap","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":"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"},{"constant":true,"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MINIMUM_LIQUIDITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"burn","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimalShift","outputs":[{"internalType":"int256","name":"","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fetchOraclePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint112","name":"_reserve0","type":"uint112"},{"internalType":"uint112","name":"_reserve1","type":"uint112"},{"internalType":"uint32","name":"_blockTimestampLast","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"kappa","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"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":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"priceFeed","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"qti","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"int256","name":"_decimalShift","type":"int256"}],"name":"setDecimalShift","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_kappa","type":"uint256"}],"name":"setKappa","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_priceFeed","type":"address"}],"name":"setPriceFeed","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_qti","type":"uint256"}],"name":"setQTI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"skim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"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":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"sync","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"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"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526001600955620000286002600160801b6200012f60201b62002f4f1790919060201c565b600a556000600c556000600d556000600e553480156200004757600080fd5b506040514690806052620038148239604080519182900360520182208282018252600a83526942726f776e464920563160b01b6020938401528151808301835260018152603160f81b908401528151808401919091527fa5a13ee614b8f13ac266e9da78720c46238a6d85a587eef56ff2fac77a36003b818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b03191633179055620001a4565b60008115806200014c575050808202828282816200014957fe5b04145b6200019e576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b92915050565b61366080620001b46000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c806370a0823111610145578063ba9a7a56116100bd578063d505accf1161008c578063dd62ed3e11610071578063dd62ed3e1461077f578063ddca3f43146107ba578063fff6cae9146107c257610241565b8063d505accf14610719578063dae5f0fd1461077757610241565b8063ba9a7a56146106ce578063bc25cf77146106d6578063c45a015514610709578063d21220a71461071157610241565b806389afcb4411610114578063a9059cbb116100f9578063a9059cbb14610670578063add1c817146106a9578063b519f43f146106b157610241565b806389afcb441461061c57806395d89b411461066857610241565b806370a082311461057b578063724e78da146105ae578063741bef1a146105e15780637ecebe00146105e957610241565b806330adf81f116101d857806356539200116101a757806369fe0e2d1161018c57806369fe0e2d146105235780636a627842146105405780636bba3f2f1461057357610241565b806356539200146104fe5780635e8b5a561461050657610241565b806330adf81f14610495578063313ce5671461049d5780633644e515146104bb578063485cc955146104c357610241565b80630dfe1681116102145780630dfe1681146103ea57806318160ddd1461041b57806323b872dd1461043557806324fcffe81461047857610241565b8063022c0d9f1461024657806306fdde03146102e15780630902f1ac1461035e578063095ea7b31461039d575b600080fd5b6102df6004803603608081101561025c57600080fd5b81359160208101359173ffffffffffffffffffffffffffffffffffffffff60408301351691908101906080810160608201356401000000008111156102a057600080fd5b8201836020820111156102b257600080fd5b803590602001918460018302840111640100000000831117156102d457600080fd5b5090925090506107ca565b005b6102e9610dc3565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561032357818101518382015260200161030b565b50505050905090810190601f1680156103505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610366610dfc565b604080516dffffffffffffffffffffffffffff948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103d6600480360360408110156103b357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610e51565b604080519115158252519081900360200190f35b6103f2610e68565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610423610e84565b60408051918252519081900360200190f35b6103d66004803603606081101561044b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610e8a565b6102df6004803603602081101561048e57600080fd5b5035610f6a565b610423611086565b6104a56110aa565b6040805160ff9092168252519081900360200190f35b6104236110af565b6102df600480360360408110156104d957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166110b5565b61042361118e565b6102df6004803603602081101561051c57600080fd5b5035611194565b6102df6004803603602081101561053957600080fd5b503561135b565b6104236004803603602081101561055657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611477565b6104236117ec565b6104236004803603602081101561059157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166117f2565b6102df600480360360208110156105c457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611804565b6103f2611962565b610423600480360360208110156105ff57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661197e565b61064f6004803603602081101561063257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611990565b6040805192835260208301919091528051918290030190f35b6102e9611ddd565b6103d66004803603604081101561068657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611e16565b610423611e23565b6102df600480360360208110156106c757600080fd5b5035612089565b6104236121a5565b6102df600480360360208110156106ec57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166121ab565b6103f26123a1565b6103f26123bd565b6102df600480360360e081101561072f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356123d9565b6104236126a5565b6104236004803603604081101561079557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166126ab565b6104236126c8565b6102df6126ce565b60095460011461083b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f42726f776e466956313a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b60006009558415158061084e5750600084115b6108a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806135726025913960400191505060405180910390fd5b6000806108ae610dfc565b5091509150816dffffffffffffffffffffffffffff16871080156108e15750806dffffffffffffffffffffffffffff1686105b610936576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806135e76021913960400191505060405180910390fd5b61093e613557565b60065460075473ffffffffffffffffffffffffffffffffffffffff91821691908116908816821480159061099e57508073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b610a0957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f42726f776e466956313a20494e56414c49445f544f0000000000000000000000604482015290519081900360640190fd5b8915610a1a57610a1a82898c6128b4565b8815610a2b57610a2b81898b6128b4565b8515610b0d578773ffffffffffffffffffffffffffffffffffffffff16637b9c231e338c8c8b8b6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015610af457600080fd5b505af1158015610b08573d6000803e3d6000fd5b505050505b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b158015610b7957600080fd5b505afa158015610b8d573d6000803e3d6000fd5b505050506040513d6020811015610ba357600080fd5b50518352604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8316916370a08231916024808301926020929190829003018186803b158015610c1357600080fd5b505afa158015610c27573d6000803e3d6000fd5b505050506040513d6020811015610c3d57600080fd5b50516020840152505080516000906dffffffffffffffffffffffffffff85168a900310610c6b576000610c85565b88846dffffffffffffffffffffffffffff16038260000151035b9050600088846dffffffffffffffffffffffffffff1603836020015111610cad576000610cc7565b88846dffffffffffffffffffffffffffff16038360200151035b90506000821180610cd85750600081115b610d2d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806136086024913960400191505060405180910390fd5b6000610d458b8b866000015187602001518a8a612ac1565b60408051858152602081018590528082018e9052606081018d905260808101839052905191925073ffffffffffffffffffffffffffffffffffffffff8b169133917f606ecd02b3e3b4778f8e97b2e03351de14224efaa5fa64e62200afc9395c2499919081900360a00190a350506001600955505050505050505050565b6040518060400160405280600a81526020017f42726f776e46492056310000000000000000000000000000000000000000000081525081565b6008546dffffffffffffffffffffffffffff808216926e0100000000000000000000000000008304909116917c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690565b6000610e5e338484612d8d565b5060015b92915050565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14610f545773ffffffffffffffffffffffffffffffffffffffff84166000908152600260209081526040808320338452909152902054610f22908363ffffffff612dfc16565b73ffffffffffffffffffffffffffffffffffffffff851660009081526002602090815260408083203384529091529020555b610f5f848484612e6e565b5060015b9392505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f3108f76040518163ffffffff1660e01b815260040160206040518083038186803b158015610fd257600080fd5b505afa158015610fe6573d6000803e3d6000fd5b505050506040513d6020811015610ffc57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff16331461108157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f42726f776e466956313a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600e55565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60055473ffffffffffffffffffffffffffffffffffffffff16331461113b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f42726f776e466956313a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b6006805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560078054929093169116179055565b600d5481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f3108f76040518163ffffffff1660e01b815260040160206040518083038186803b1580156111fc57600080fd5b505afa158015611210573d6000803e3d6000fd5b505050506040513d602081101561122657600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1633146112ab57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f42726f776e466956313a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b6e4189374bc6a7ef9db22d0e5604189381108015906112eb57506112e7700100000000000000000000000000000000600263ffffffff612f4f16565b8111155b61135657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f42726f776e466956313a20494e56414c49445f4b415050410000000000000000604482015290519081900360640190fd5b600a55565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f3108f76040518163ffffffff1660e01b815260040160206040518083038186803b1580156113c357600080fd5b505afa1580156113d7573d6000803e3d6000fd5b505050506040513d60208110156113ed57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff16331461147257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f42726f776e466956313a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600c55565b60006009546001146114ea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f42726f776e466956313a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b60006009819055806114fa610dfc565b50600654604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905193955091935060009273ffffffffffffffffffffffffffffffffffffffff909116916370a08231916024808301926020929190829003018186803b15801561157457600080fd5b505afa158015611588573d6000803e3d6000fd5b505050506040513d602081101561159e57600080fd5b5051600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905192935060009273ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b15801561161757600080fd5b505afa15801561162b573d6000803e3d6000fd5b505050506040513d602081101561164157600080fd5b505190506000611667836dffffffffffffffffffffffffffff871663ffffffff612dfc16565b9050600061168b836dffffffffffffffffffffffffffff871663ffffffff612dfc16565b600054909150806116d4576116c06103e86116b46116af868663ffffffff612f4f16565b612fd5565b9063ffffffff612dfc16565b97506116cf60006103e8613027565b611731565b61172e6dffffffffffffffffffffffffffff88166116f8858463ffffffff612f4f16565b816116ff57fe5b046dffffffffffffffffffffffffffff8816611721858563ffffffff612f4f16565b8161172857fe5b046130d7565b97505b6000881161178a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806135976028913960400191505060405180910390fd5b6117948989613027565b6117a0858589896130ed565b6040805184815260208101849052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600955509395945050505050565b600a5481565b60016020526000908152604090205481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f3108f76040518163ffffffff1660e01b815260040160206040518083038186803b15801561186c57600080fd5b505afa158015611880573d6000803e3d6000fd5b505050506040513d602081101561189657600080fd5b505173ffffffffffffffffffffffffffffffffffffffff16331461191b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f42726f776e466956313a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600b5473ffffffffffffffffffffffffffffffffffffffff1681565b60046020526000908152604090205481565b600080600954600114611a0457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f42726f776e466956313a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600981905580611a14610dfc565b50600654600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905194965092945073ffffffffffffffffffffffffffffffffffffffff9182169391169160009184916370a08231916024808301926020929190829003018186803b158015611a9657600080fd5b505afa158015611aaa573d6000803e3d6000fd5b505050506040513d6020811015611ac057600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191925060009173ffffffffffffffffffffffffffffffffffffffff8516916370a08231916024808301926020929190829003018186803b158015611b3457600080fd5b505afa158015611b48573d6000803e3d6000fd5b505050506040513d6020811015611b5e57600080fd5b50513060009081526001602052604081205490549192509080611b87838663ffffffff612f4f16565b81611b8e57fe5b04995080611ba2838563ffffffff612f4f16565b81611ba957fe5b04985060008a118015611bbc5750600089115b611c11576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806135bf6028913960400191505060405180910390fd5b611c1b3083613292565b611c26868c8c6128b4565b611c31858c8b6128b4565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8816916370a08231916024808301926020929190829003018186803b158015611c9d57600080fd5b505afa158015611cb1573d6000803e3d6000fd5b505050506040513d6020811015611cc757600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191955073ffffffffffffffffffffffffffffffffffffffff8716916370a0823191602480820192602092909190829003018186803b158015611d3957600080fd5b505afa158015611d4d573d6000803e3d6000fd5b505050506040513d6020811015611d6357600080fd5b50519250611d7384848a8a6130ed565b604080518b8152602081018b9052815173ffffffffffffffffffffffffffffffffffffffff8e169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a350505050505050506001600981905550915091565b6040518060400160405280600681526020017f4252462d5631000000000000000000000000000000000000000000000000000081525081565b6000610e5e338484612e6e565b600b54604080517ffeaf968c000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16918391839163feaf968c9160048083019260a0929190829003018186803b158015611e9257600080fd5b505afa158015611ea6573d6000803e3d6000fd5b505050506040513d60a0811015611ebc57600080fd5b50602090810151604080517f313ce567000000000000000000000000000000000000000000000000000000008152905191935060009273ffffffffffffffffffffffffffffffffffffffff86169263313ce567926004808201939291829003018186803b158015611f2c57600080fd5b505afa158015611f40573d6000803e3d6000fd5b505050506040513d6020811015611f5657600080fd5b5051600d54909150611ff9576000600e541315611fa057611f96600e54600a0a8260ff16600a0a0270010000000000000000000000000000000084613357565b9350505050612086565b6000600e541215611fd757611f968160ff16600a0a700100000000000000000000000000000000600e54600003600a0a8502613357565b611f968160ff16600a0a70010000000000000000000000000000000084613357565b6000600e54131561202d57611f9682700100000000000000000000000000000000600e54600a0a8460ff16600a0a02613357565b6000600e54121561206457611f96600e54600003600a0a83027001000000000000000000000000000000008360ff16600a0a613357565b611f96827001000000000000000000000000000000008360ff16600a0a613357565b90565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f3108f76040518163ffffffff1660e01b815260040160206040518083038186803b1580156120f157600080fd5b505afa158015612105573d6000803e3d6000fd5b505050506040513d602081101561211b57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1633146121a057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f42726f776e466956313a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600d55565b6103e881565b60095460011461221c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f42726f776e466956313a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600955600654600754600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff94851694909316926122f892859287926122f3926dffffffffffffffffffffffffffff169185916370a0823191602480820192602092909190829003018186803b1580156122bb57600080fd5b505afa1580156122cf573d6000803e3d6000fd5b505050506040513d60208110156122e557600080fd5b50519063ffffffff612dfc16565b6128b4565b600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905161239792849287926122f3926e01000000000000000000000000000090046dffffffffffffffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff8616916370a0823191602480820192602092909190829003018186803b1580156122bb57600080fd5b5050600160095550565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b4284101561244857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f42726f776e466956313a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff80891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa1580156125a9573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061262457508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b61268f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f42726f776e466956313a20494e56414c49445f5349474e415455524500000000604482015290519081900360640190fd5b61269a898989612d8d565b505050505050505050565b600e5481565b600260209081526000928352604080842090915290825290205481565b600c5481565b60095460011461273f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f42726f776e466956313a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600955600654604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516128ad9273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b1580156127b657600080fd5b505afa1580156127ca573d6000803e3d6000fd5b505050506040513d60208110156127e057600080fd5b5051600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b15801561285357600080fd5b505afa158015612867573d6000803e3d6000fd5b505050506040513d602081101561287d57600080fd5b50516008546dffffffffffffffffffffffffffff808216916e0100000000000000000000000000009004166130ed565b6001600955565b604080518082018252601981527f7472616e7366657228616464726573732c75696e743235362900000000000000602091820152815173ffffffffffffffffffffffffffffffffffffffff85811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251815160009460609489169392918291908083835b602083106129ba57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161297d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612a1c576040519150601f19603f3d011682016040523d82523d6000602084013e612a21565b606091505b5091509150818015612a4f575080511580612a4f5750808060200190516020811015612a4c57600080fd5b50515b612aba57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f42726f776e466956313a205452414e534645525f4641494c4544000000000000604482015290519081900360640190fd5b5050505050565b600080612acc611e23565b9050612ad6613557565b6000808a15612af557612af28b612710600c5461271003613357565b91505b8915612b1157612b0e8a612710600c5461271003613357565b90505b8115612c59576000612b62612b3a600a5485700100000000000000000000000000000000613357565b612b568786700100000000000000000000000000000000613357565b9063ffffffff612f4f16565b90506000612b8a6dffffffffffffffffffffffffffff8a16859003600263ffffffff612f4f16565b9050612be5818381612b9857fe5b04612bd98a6dffffffffffffffffffffffffffff16612bd98a8e6dffffffffffffffffffffffffffff16700100000000000000000000000000000000613357565b9063ffffffff61342a16565b8552612bf38b8b8b8b6130ed565b612c516008600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16612bd988878d6dffffffffffffffffffffffffffff1603700100000000000000000000000000000000613357565b602086015250505b8015612d0a576000612c8382612b56600a5485700100000000000000000000000000000000613357565b90506000612cab6dffffffffffffffffffffffffffff8916849003600263ffffffff612f4f16565b9050612cb9818381612b9857fe5b8552612cc78b8b8b8b6130ed565b600854612d02906dffffffffffffffffffffffffffff808b1686900391612bd9918a9116700100000000000000000000000000000000613357565b602086015250505b825160208401511015612d7e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f42726f776e466956313a20494e56414c49445f54524144450000000000000000604482015290519081900360640190fd5b50919998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b80820382811115610e6257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054612ea4908263ffffffff612dfc16565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160205260408082209390935590841681522054612ee6908263ffffffff61342a16565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000811580612f6a57505080820282828281612f6757fe5b04145b610e6257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60006003821115613018575080600160028204015b818110156130125780915060028182858161300157fe5b04018161300a57fe5b049050612fea565b50613022565b8115613022575060015b919050565b60005461303a908263ffffffff61342a16565b600090815573ffffffffffffffffffffffffffffffffffffffff8316815260016020526040902054613072908263ffffffff61342a16565b73ffffffffffffffffffffffffffffffffffffffff831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106130e65781610f63565b5090919050565b6dffffffffffffffffffffffffffff841180159061311957506dffffffffffffffffffffffffffff8311155b61318457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f42726f776e466956313a204f564552464c4f5700000000000000000000000000604482015290519081900360640190fd5b600880547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff868116919091177fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff166e0100000000000000000000000000008683168102919091177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c01000000000000000000000000000000000000000000000000000000004263ffffffff169081029190911793849055604080518585168152929094049092166020820152825191927f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad192918290030190a15050505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020546132c8908263ffffffff612dfc16565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604081209190915554613302908263ffffffff612dfc16565b600090815560408051838152905173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6000806000613366868661349c565b915091506000848061337457fe5b868809905082811115613388576001820391505b9182900391816133a65784838161339b57fe5b049350505050610f63565b84821061341457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f46756c6c4d6174683a2046554c4c4449565f4f564552464c4f57000000000000604482015290519081900360640190fd5b61341f8383876134e7565b979650505050505050565b80820182811015610e6257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848609905083850292508281039150828110156134df576001820391505b509250929050565b600081810382168083816134f757fe5b04925080858161350357fe5b04945080816000038161351257fe5b60028581038087028203028087028203028087028203028087028203028087028203028087028203029586029003909402930460010193909302939093010292915050565b60405180604001604052806000815260200160008152509056fe42726f776e466956313a20494e53554646494349454e545f4f55545055545f414d4f554e5442726f776e466956313a20494e53554646494349454e545f4c49515549444954595f4d494e54454442726f776e466956313a20494e53554646494349454e545f4c49515549444954595f4255524e454442726f776e466956313a20494e53554646494349454e545f4c495155494449545942726f776e466956313a20494e53554646494349454e545f494e5055545f414d4f554e54a265627a7a7231582084cd485a31663b717769f7239c53fe67c9c1b209259cf0a7453fb16842dc04fd64736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102415760003560e01c806370a0823111610145578063ba9a7a56116100bd578063d505accf1161008c578063dd62ed3e11610071578063dd62ed3e1461077f578063ddca3f43146107ba578063fff6cae9146107c257610241565b8063d505accf14610719578063dae5f0fd1461077757610241565b8063ba9a7a56146106ce578063bc25cf77146106d6578063c45a015514610709578063d21220a71461071157610241565b806389afcb4411610114578063a9059cbb116100f9578063a9059cbb14610670578063add1c817146106a9578063b519f43f146106b157610241565b806389afcb441461061c57806395d89b411461066857610241565b806370a082311461057b578063724e78da146105ae578063741bef1a146105e15780637ecebe00146105e957610241565b806330adf81f116101d857806356539200116101a757806369fe0e2d1161018c57806369fe0e2d146105235780636a627842146105405780636bba3f2f1461057357610241565b806356539200146104fe5780635e8b5a561461050657610241565b806330adf81f14610495578063313ce5671461049d5780633644e515146104bb578063485cc955146104c357610241565b80630dfe1681116102145780630dfe1681146103ea57806318160ddd1461041b57806323b872dd1461043557806324fcffe81461047857610241565b8063022c0d9f1461024657806306fdde03146102e15780630902f1ac1461035e578063095ea7b31461039d575b600080fd5b6102df6004803603608081101561025c57600080fd5b81359160208101359173ffffffffffffffffffffffffffffffffffffffff60408301351691908101906080810160608201356401000000008111156102a057600080fd5b8201836020820111156102b257600080fd5b803590602001918460018302840111640100000000831117156102d457600080fd5b5090925090506107ca565b005b6102e9610dc3565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561032357818101518382015260200161030b565b50505050905090810190601f1680156103505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610366610dfc565b604080516dffffffffffffffffffffffffffff948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103d6600480360360408110156103b357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610e51565b604080519115158252519081900360200190f35b6103f2610e68565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610423610e84565b60408051918252519081900360200190f35b6103d66004803603606081101561044b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610e8a565b6102df6004803603602081101561048e57600080fd5b5035610f6a565b610423611086565b6104a56110aa565b6040805160ff9092168252519081900360200190f35b6104236110af565b6102df600480360360408110156104d957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166110b5565b61042361118e565b6102df6004803603602081101561051c57600080fd5b5035611194565b6102df6004803603602081101561053957600080fd5b503561135b565b6104236004803603602081101561055657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611477565b6104236117ec565b6104236004803603602081101561059157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166117f2565b6102df600480360360208110156105c457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611804565b6103f2611962565b610423600480360360208110156105ff57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661197e565b61064f6004803603602081101561063257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611990565b6040805192835260208301919091528051918290030190f35b6102e9611ddd565b6103d66004803603604081101561068657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611e16565b610423611e23565b6102df600480360360208110156106c757600080fd5b5035612089565b6104236121a5565b6102df600480360360208110156106ec57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166121ab565b6103f26123a1565b6103f26123bd565b6102df600480360360e081101561072f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356123d9565b6104236126a5565b6104236004803603604081101561079557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166126ab565b6104236126c8565b6102df6126ce565b60095460011461083b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f42726f776e466956313a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b60006009558415158061084e5750600084115b6108a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806135726025913960400191505060405180910390fd5b6000806108ae610dfc565b5091509150816dffffffffffffffffffffffffffff16871080156108e15750806dffffffffffffffffffffffffffff1686105b610936576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806135e76021913960400191505060405180910390fd5b61093e613557565b60065460075473ffffffffffffffffffffffffffffffffffffffff91821691908116908816821480159061099e57508073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b610a0957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f42726f776e466956313a20494e56414c49445f544f0000000000000000000000604482015290519081900360640190fd5b8915610a1a57610a1a82898c6128b4565b8815610a2b57610a2b81898b6128b4565b8515610b0d578773ffffffffffffffffffffffffffffffffffffffff16637b9c231e338c8c8b8b6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015610af457600080fd5b505af1158015610b08573d6000803e3d6000fd5b505050505b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b158015610b7957600080fd5b505afa158015610b8d573d6000803e3d6000fd5b505050506040513d6020811015610ba357600080fd5b50518352604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8316916370a08231916024808301926020929190829003018186803b158015610c1357600080fd5b505afa158015610c27573d6000803e3d6000fd5b505050506040513d6020811015610c3d57600080fd5b50516020840152505080516000906dffffffffffffffffffffffffffff85168a900310610c6b576000610c85565b88846dffffffffffffffffffffffffffff16038260000151035b9050600088846dffffffffffffffffffffffffffff1603836020015111610cad576000610cc7565b88846dffffffffffffffffffffffffffff16038360200151035b90506000821180610cd85750600081115b610d2d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806136086024913960400191505060405180910390fd5b6000610d458b8b866000015187602001518a8a612ac1565b60408051858152602081018590528082018e9052606081018d905260808101839052905191925073ffffffffffffffffffffffffffffffffffffffff8b169133917f606ecd02b3e3b4778f8e97b2e03351de14224efaa5fa64e62200afc9395c2499919081900360a00190a350506001600955505050505050505050565b6040518060400160405280600a81526020017f42726f776e46492056310000000000000000000000000000000000000000000081525081565b6008546dffffffffffffffffffffffffffff808216926e0100000000000000000000000000008304909116917c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690565b6000610e5e338484612d8d565b5060015b92915050565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14610f545773ffffffffffffffffffffffffffffffffffffffff84166000908152600260209081526040808320338452909152902054610f22908363ffffffff612dfc16565b73ffffffffffffffffffffffffffffffffffffffff851660009081526002602090815260408083203384529091529020555b610f5f848484612e6e565b5060015b9392505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f3108f76040518163ffffffff1660e01b815260040160206040518083038186803b158015610fd257600080fd5b505afa158015610fe6573d6000803e3d6000fd5b505050506040513d6020811015610ffc57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff16331461108157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f42726f776e466956313a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600e55565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60055473ffffffffffffffffffffffffffffffffffffffff16331461113b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f42726f776e466956313a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b6006805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560078054929093169116179055565b600d5481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f3108f76040518163ffffffff1660e01b815260040160206040518083038186803b1580156111fc57600080fd5b505afa158015611210573d6000803e3d6000fd5b505050506040513d602081101561122657600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1633146112ab57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f42726f776e466956313a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b6e4189374bc6a7ef9db22d0e5604189381108015906112eb57506112e7700100000000000000000000000000000000600263ffffffff612f4f16565b8111155b61135657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f42726f776e466956313a20494e56414c49445f4b415050410000000000000000604482015290519081900360640190fd5b600a55565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f3108f76040518163ffffffff1660e01b815260040160206040518083038186803b1580156113c357600080fd5b505afa1580156113d7573d6000803e3d6000fd5b505050506040513d60208110156113ed57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff16331461147257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f42726f776e466956313a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600c55565b60006009546001146114ea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f42726f776e466956313a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b60006009819055806114fa610dfc565b50600654604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905193955091935060009273ffffffffffffffffffffffffffffffffffffffff909116916370a08231916024808301926020929190829003018186803b15801561157457600080fd5b505afa158015611588573d6000803e3d6000fd5b505050506040513d602081101561159e57600080fd5b5051600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905192935060009273ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b15801561161757600080fd5b505afa15801561162b573d6000803e3d6000fd5b505050506040513d602081101561164157600080fd5b505190506000611667836dffffffffffffffffffffffffffff871663ffffffff612dfc16565b9050600061168b836dffffffffffffffffffffffffffff871663ffffffff612dfc16565b600054909150806116d4576116c06103e86116b46116af868663ffffffff612f4f16565b612fd5565b9063ffffffff612dfc16565b97506116cf60006103e8613027565b611731565b61172e6dffffffffffffffffffffffffffff88166116f8858463ffffffff612f4f16565b816116ff57fe5b046dffffffffffffffffffffffffffff8816611721858563ffffffff612f4f16565b8161172857fe5b046130d7565b97505b6000881161178a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806135976028913960400191505060405180910390fd5b6117948989613027565b6117a0858589896130ed565b6040805184815260208101849052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600955509395945050505050565b600a5481565b60016020526000908152604090205481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f3108f76040518163ffffffff1660e01b815260040160206040518083038186803b15801561186c57600080fd5b505afa158015611880573d6000803e3d6000fd5b505050506040513d602081101561189657600080fd5b505173ffffffffffffffffffffffffffffffffffffffff16331461191b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f42726f776e466956313a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600b5473ffffffffffffffffffffffffffffffffffffffff1681565b60046020526000908152604090205481565b600080600954600114611a0457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f42726f776e466956313a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600981905580611a14610dfc565b50600654600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905194965092945073ffffffffffffffffffffffffffffffffffffffff9182169391169160009184916370a08231916024808301926020929190829003018186803b158015611a9657600080fd5b505afa158015611aaa573d6000803e3d6000fd5b505050506040513d6020811015611ac057600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191925060009173ffffffffffffffffffffffffffffffffffffffff8516916370a08231916024808301926020929190829003018186803b158015611b3457600080fd5b505afa158015611b48573d6000803e3d6000fd5b505050506040513d6020811015611b5e57600080fd5b50513060009081526001602052604081205490549192509080611b87838663ffffffff612f4f16565b81611b8e57fe5b04995080611ba2838563ffffffff612f4f16565b81611ba957fe5b04985060008a118015611bbc5750600089115b611c11576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806135bf6028913960400191505060405180910390fd5b611c1b3083613292565b611c26868c8c6128b4565b611c31858c8b6128b4565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8816916370a08231916024808301926020929190829003018186803b158015611c9d57600080fd5b505afa158015611cb1573d6000803e3d6000fd5b505050506040513d6020811015611cc757600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191955073ffffffffffffffffffffffffffffffffffffffff8716916370a0823191602480820192602092909190829003018186803b158015611d3957600080fd5b505afa158015611d4d573d6000803e3d6000fd5b505050506040513d6020811015611d6357600080fd5b50519250611d7384848a8a6130ed565b604080518b8152602081018b9052815173ffffffffffffffffffffffffffffffffffffffff8e169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a350505050505050506001600981905550915091565b6040518060400160405280600681526020017f4252462d5631000000000000000000000000000000000000000000000000000081525081565b6000610e5e338484612e6e565b600b54604080517ffeaf968c000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16918391839163feaf968c9160048083019260a0929190829003018186803b158015611e9257600080fd5b505afa158015611ea6573d6000803e3d6000fd5b505050506040513d60a0811015611ebc57600080fd5b50602090810151604080517f313ce567000000000000000000000000000000000000000000000000000000008152905191935060009273ffffffffffffffffffffffffffffffffffffffff86169263313ce567926004808201939291829003018186803b158015611f2c57600080fd5b505afa158015611f40573d6000803e3d6000fd5b505050506040513d6020811015611f5657600080fd5b5051600d54909150611ff9576000600e541315611fa057611f96600e54600a0a8260ff16600a0a0270010000000000000000000000000000000084613357565b9350505050612086565b6000600e541215611fd757611f968160ff16600a0a700100000000000000000000000000000000600e54600003600a0a8502613357565b611f968160ff16600a0a70010000000000000000000000000000000084613357565b6000600e54131561202d57611f9682700100000000000000000000000000000000600e54600a0a8460ff16600a0a02613357565b6000600e54121561206457611f96600e54600003600a0a83027001000000000000000000000000000000008360ff16600a0a613357565b611f96827001000000000000000000000000000000008360ff16600a0a613357565b90565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f3108f76040518163ffffffff1660e01b815260040160206040518083038186803b1580156120f157600080fd5b505afa158015612105573d6000803e3d6000fd5b505050506040513d602081101561211b57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1633146121a057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f42726f776e466956313a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600d55565b6103e881565b60095460011461221c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f42726f776e466956313a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600955600654600754600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff94851694909316926122f892859287926122f3926dffffffffffffffffffffffffffff169185916370a0823191602480820192602092909190829003018186803b1580156122bb57600080fd5b505afa1580156122cf573d6000803e3d6000fd5b505050506040513d60208110156122e557600080fd5b50519063ffffffff612dfc16565b6128b4565b600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905161239792849287926122f3926e01000000000000000000000000000090046dffffffffffffffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff8616916370a0823191602480820192602092909190829003018186803b1580156122bb57600080fd5b5050600160095550565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b4284101561244857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f42726f776e466956313a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff80891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa1580156125a9573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061262457508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b61268f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f42726f776e466956313a20494e56414c49445f5349474e415455524500000000604482015290519081900360640190fd5b61269a898989612d8d565b505050505050505050565b600e5481565b600260209081526000928352604080842090915290825290205481565b600c5481565b60095460011461273f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f42726f776e466956313a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600955600654604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516128ad9273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b1580156127b657600080fd5b505afa1580156127ca573d6000803e3d6000fd5b505050506040513d60208110156127e057600080fd5b5051600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b15801561285357600080fd5b505afa158015612867573d6000803e3d6000fd5b505050506040513d602081101561287d57600080fd5b50516008546dffffffffffffffffffffffffffff808216916e0100000000000000000000000000009004166130ed565b6001600955565b604080518082018252601981527f7472616e7366657228616464726573732c75696e743235362900000000000000602091820152815173ffffffffffffffffffffffffffffffffffffffff85811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251815160009460609489169392918291908083835b602083106129ba57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161297d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612a1c576040519150601f19603f3d011682016040523d82523d6000602084013e612a21565b606091505b5091509150818015612a4f575080511580612a4f5750808060200190516020811015612a4c57600080fd5b50515b612aba57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f42726f776e466956313a205452414e534645525f4641494c4544000000000000604482015290519081900360640190fd5b5050505050565b600080612acc611e23565b9050612ad6613557565b6000808a15612af557612af28b612710600c5461271003613357565b91505b8915612b1157612b0e8a612710600c5461271003613357565b90505b8115612c59576000612b62612b3a600a5485700100000000000000000000000000000000613357565b612b568786700100000000000000000000000000000000613357565b9063ffffffff612f4f16565b90506000612b8a6dffffffffffffffffffffffffffff8a16859003600263ffffffff612f4f16565b9050612be5818381612b9857fe5b04612bd98a6dffffffffffffffffffffffffffff16612bd98a8e6dffffffffffffffffffffffffffff16700100000000000000000000000000000000613357565b9063ffffffff61342a16565b8552612bf38b8b8b8b6130ed565b612c516008600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16612bd988878d6dffffffffffffffffffffffffffff1603700100000000000000000000000000000000613357565b602086015250505b8015612d0a576000612c8382612b56600a5485700100000000000000000000000000000000613357565b90506000612cab6dffffffffffffffffffffffffffff8916849003600263ffffffff612f4f16565b9050612cb9818381612b9857fe5b8552612cc78b8b8b8b6130ed565b600854612d02906dffffffffffffffffffffffffffff808b1686900391612bd9918a9116700100000000000000000000000000000000613357565b602086015250505b825160208401511015612d7e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f42726f776e466956313a20494e56414c49445f54524144450000000000000000604482015290519081900360640190fd5b50919998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b80820382811115610e6257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054612ea4908263ffffffff612dfc16565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160205260408082209390935590841681522054612ee6908263ffffffff61342a16565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000811580612f6a57505080820282828281612f6757fe5b04145b610e6257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60006003821115613018575080600160028204015b818110156130125780915060028182858161300157fe5b04018161300a57fe5b049050612fea565b50613022565b8115613022575060015b919050565b60005461303a908263ffffffff61342a16565b600090815573ffffffffffffffffffffffffffffffffffffffff8316815260016020526040902054613072908263ffffffff61342a16565b73ffffffffffffffffffffffffffffffffffffffff831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106130e65781610f63565b5090919050565b6dffffffffffffffffffffffffffff841180159061311957506dffffffffffffffffffffffffffff8311155b61318457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f42726f776e466956313a204f564552464c4f5700000000000000000000000000604482015290519081900360640190fd5b600880547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff868116919091177fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff166e0100000000000000000000000000008683168102919091177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c01000000000000000000000000000000000000000000000000000000004263ffffffff169081029190911793849055604080518585168152929094049092166020820152825191927f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad192918290030190a15050505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020546132c8908263ffffffff612dfc16565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604081209190915554613302908263ffffffff612dfc16565b600090815560408051838152905173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6000806000613366868661349c565b915091506000848061337457fe5b868809905082811115613388576001820391505b9182900391816133a65784838161339b57fe5b049350505050610f63565b84821061341457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f46756c6c4d6174683a2046554c4c4449565f4f564552464c4f57000000000000604482015290519081900360640190fd5b61341f8383876134e7565b979650505050505050565b80820182811015610e6257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848609905083850292508281039150828110156134df576001820391505b509250929050565b600081810382168083816134f757fe5b04925080858161350357fe5b04945080816000038161351257fe5b60028581038087028203028087028203028087028203028087028203028087028203028087028203029586029003909402930460010193909302939093010292915050565b60405180604001604052806000815260200160008152509056fe42726f776e466956313a20494e53554646494349454e545f4f55545055545f414d4f554e5442726f776e466956313a20494e53554646494349454e545f4c49515549444954595f4d494e54454442726f776e466956313a20494e53554646494349454e545f4c49515549444954595f4255524e454442726f776e466956313a20494e53554646494349454e545f4c495155494449545942726f776e466956313a20494e53554646494349454e545f494e5055545f414d4f554e54a265627a7a7231582084cd485a31663b717769f7239c53fe67c9c1b209259cf0a7453fb16842dc04fd64736f6c63430005100032
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.