Overview
S Balance
0 S
S Value
-More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 56,979 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Swap Exact ETH F... | 634557 | 1 sec ago | IN | 2 S | 0.00021904 | ||||
Swap Exact Token... | 634556 | 2 secs ago | IN | 0 S | 0.00020978 | ||||
Swap Exact Token... | 634555 | 2 secs ago | IN | 0 S | 0.00020978 | ||||
Swap Exact Token... | 634554 | 2 secs ago | IN | 0 S | 0.0002201 | ||||
Add Liquidity ET... | 634549 | 7 secs ago | IN | 1,150 S | 0.00365843 | ||||
Swap Exact ETH F... | 634547 | 7 secs ago | IN | 0.228 S | 0.0002527 | ||||
Swap Exact ETH F... | 634546 | 8 secs ago | IN | 100 S | 0.00018959 | ||||
Swap Exact ETH F... | 634531 | 15 secs ago | IN | 213 S | 0.00022324 | ||||
Swap Exact ETH F... | 634530 | 15 secs ago | IN | 100 S | 0.00021991 | ||||
Swap Exact ETH F... | 634526 | 20 secs ago | IN | 0.2056 S | 0.0002527 | ||||
Swap Exact Token... | 634524 | 24 secs ago | IN | 0 S | 0.00020978 | ||||
Swap Exact Token... | 634523 | 24 secs ago | IN | 0 S | 0.0002201 | ||||
Swap Exact ETH F... | 634518 | 29 secs ago | IN | 40 S | 0.00020861 | ||||
Swap Exact ETH F... | 634514 | 34 secs ago | IN | 0.43031577 S | 0.00021461 | ||||
Swap Exact ETH F... | 634512 | 35 secs ago | IN | 8.18736087 S | 0.00020271 | ||||
Swap Exact ETH F... | 634510 | 36 secs ago | IN | 100 S | 0.00018953 | ||||
Swap Exact ETH F... | 634507 | 37 secs ago | IN | 100 S | 0.00017928 | ||||
Swap Exact Token... | 634506 | 37 secs ago | IN | 0 S | 0.0002201 | ||||
Swap Exact Token... | 634501 | 43 secs ago | IN | 0 S | 0.00024555 | ||||
Swap Exact Token... | 634488 | 55 secs ago | IN | 0 S | 0.00024554 | ||||
Swap Exact ETH F... | 634477 | 1 min ago | IN | 10 S | 0.00021126 | ||||
Swap Exact Token... | 634475 | 1 min ago | IN | 0 S | 0.00024555 | ||||
Swap Exact ETH F... | 634470 | 1 min ago | IN | 47.5984317 S | 0.00022546 | ||||
Swap Exact Token... | 634469 | 1 min ago | IN | 0 S | 0.00024555 | ||||
Swap Exact ETH F... | 634468 | 1 min ago | IN | 4.5 S | 0.00022728 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
634556 | 2 secs ago | 80.38062896 S | ||||
634556 | 2 secs ago | 0.24186748 S | ||||
634556 | 2 secs ago | 80.62249645 S | ||||
634555 | 2 secs ago | 67.63076066 S | ||||
634555 | 2 secs ago | 0.20350279 S | ||||
634555 | 2 secs ago | 67.83426345 S | ||||
634554 | 2 secs ago | 69.45309183 S | ||||
634554 | 2 secs ago | 0.20898623 S | ||||
634554 | 2 secs ago | 69.66207806 S | ||||
634549 | 7 secs ago | 1,150 S | ||||
634547 | 7 secs ago | 0.227316 S | ||||
634547 | 7 secs ago | 0.000684 S | ||||
634546 | 8 secs ago | 99.7 S | ||||
634546 | 8 secs ago | 0.3 S | ||||
634531 | 15 secs ago | 212.361 S | ||||
634531 | 15 secs ago | 0.639 S | ||||
634530 | 15 secs ago | 99.7 S | ||||
634530 | 15 secs ago | 0.3 S | ||||
634526 | 20 secs ago | 0.2049832 S | ||||
634526 | 20 secs ago | 0.0006168 S | ||||
634524 | 24 secs ago | 92.4475988 S | ||||
634524 | 24 secs ago | 0.27817732 S | ||||
634524 | 24 secs ago | 92.72577613 S | ||||
634523 | 24 secs ago | 32.90944792 S | ||||
634523 | 24 secs ago | 0.09902542 S |
Loading...
Loading
Contract Name:
DyorRouterV2
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2024-12-18 */ /** *Submitted for verification at BscScan.com on 2021-04-23 */ // File: @uniswap\lib\contracts\libraries\TransferHelper.sol pragma solidity >=0.6.0; // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeApprove(address token, address to, uint value) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED'); } function safeTransfer(address token, address to, uint value) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED'); } function safeTransferFrom(address token, address from, address to, uint value) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED'); } function safeTransferETH(address to, uint value) internal { (bool success,) = to.call{value:value}(new bytes(0)); require(success, 'TransferHelper: ETH_TRANSFER_FAILED'); } } pragma solidity >=0.6.2; interface IDyorRouter01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } pragma solidity >=0.6.2; interface IDyorRouter02 is IDyorRouter01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } pragma solidity >=0.5.0; interface IDyorFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); 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(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function INIT_CODE_PAIR_HASH() external view returns (bytes32); } // File: contracts\libraries\SafeMath.sol pragma solidity =0.6.6; // 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.0; interface IDyorPair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } pragma solidity >=0.5.0; library DyorLibrary { using SafeMath for uint; // returns sorted token addresses, used to handle return values from pairs sorted in this order function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { require(tokenA != tokenB, 'DyorLibrary: IDENTICAL_ADDRESSES'); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'DyorLibrary: ZERO_ADDRESS'); } // calculates the CREATE2 address for a pair without making any external calls function pairFor(address factory, address tokenA, address tokenB) internal view returns (address pair) { (address token0, address token1) = sortTokens(tokenA, tokenB); pair = IDyorFactory(factory).getPair(token0, token1); // = address(uint(keccak256(abi.encodePacked( // hex'ff', // factory, // (abi.encodePacked(token0, token1)), // hex'e18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303' // init code hash // )))); } // fetches and sorts the reserves for a pair function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) { (address token0,) = sortTokens(tokenA, tokenB); pairFor(factory, tokenA, tokenB); (uint reserve0, uint reserve1,) = IDyorPair(pairFor(factory, tokenA, tokenB)).getReserves(); (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); } // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) { require(amountA > 0, 'DyorLibrary: INSUFFICIENT_AMOUNT'); require(reserveA > 0 && reserveB > 0, 'DyorLibrary: INSUFFICIENT_LIQUIDITY'); amountB = amountA.mul(reserveB) / reserveA; } // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) { require(amountIn > 0, 'DyorLibrary: INSUFFICIENT_INPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'DyorLibrary: INSUFFICIENT_LIQUIDITY'); uint amountInWithFee = amountIn.mul(9970); uint numerator = amountInWithFee.mul(reserveOut); uint denominator = reserveIn.mul(10000).add(amountInWithFee); amountOut = numerator / denominator; } // given an output amount of an asset and pair reserves, returns a required input amount of the other asset function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) { require(amountOut > 0, 'DyorLibrary: INSUFFICIENT_OUTPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'DyorLibrary: INSUFFICIENT_LIQUIDITY'); uint numerator = reserveIn.mul(amountOut).mul(10000); uint denominator = reserveOut.sub(amountOut).mul(9970); amountIn = (numerator / denominator).add(1); } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) { require(path.length >= 2, 'DyorLibrary: INVALID_PATH'); amounts = new uint[](path.length); amounts[0] = amountIn; for (uint i; i < path.length - 1; i++) { (uint reserveIn, uint reserveOut) = getReserves(factory, path[i], path[i + 1]); amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut); } } // performs chained getAmountIn calculations on any number of pairs function getAmountsIn(address factory, uint amountOut, address[] memory path) internal view returns (uint[] memory amounts) { require(path.length >= 2, 'DyorLibrary: INVALID_PATH'); amounts = new uint[](path.length); amounts[amounts.length - 1] = amountOut; for (uint i = path.length - 1; i > 0; i--) { (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]); amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut); } } } // File: contracts\interfaces\IERC20.sol 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); } // File: contracts\interfaces\IWETH.sol pragma solidity >=0.5.0; interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } pragma solidity =0.6.6; contract DyorRouterV2 is IDyorRouter02 { using SafeMath for uint; address public feeTo; address public feeToSetter; uint256 public ratePercent = 30; address public immutable override factory; address public immutable override WETH; mapping(address => bool) public feeCurrency; modifier ensure(uint deadline) { require(deadline >= block.timestamp, 'DyorRouterV2: EXPIRED'); _; } constructor(address _factory, address _WETH, address _feeToSetter , address _feeTo) public { factory = _factory; WETH = _WETH; feeCurrency[_WETH] = true; feeTo=_feeTo; feeToSetter = _feeToSetter; } receive() external payable { assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract } function setFeeTo(address _feeTo) external { require(msg.sender == feeToSetter, 'DyorRouterV2: FORBIDDEN'); feeTo = _feeTo; } function setFeeToSetter(address _feeToSetter) external { require(msg.sender == feeToSetter, 'DyorRouterV2: FORBIDDEN'); feeToSetter = _feeToSetter; } function setFeeCurrencyList(address [] calldata currencyList, bool fee) external { require(msg.sender == feeToSetter, 'DyorRouterV2: FORBIDDEN'); for(uint i; i < currencyList.length; i++){ feeCurrency[currencyList[i]] = fee; } } function setFeeCurrency(address currency, bool fee) external { require(msg.sender == feeToSetter, 'DyorRouterV2: FORBIDDEN'); feeCurrency[currency] = fee; } function setRatePercent(uint256 _ratePercent) external { require(msg.sender == feeToSetter, 'DyorRouterV2: FORBIDDEN'); ratePercent = _ratePercent; } // **** ADD LIQUIDITY **** function _addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin ) internal virtual returns (uint amountA, uint amountB) { // create the pair if it doesn't exist yet if (IDyorFactory(factory).getPair(tokenA, tokenB) == address(0)) { IDyorFactory(factory).createPair(tokenA, tokenB); } (uint reserveA, uint reserveB) = DyorLibrary.getReserves(factory, tokenA, tokenB); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint amountBOptimal = DyorLibrary.quote(amountADesired, reserveA, reserveB); if (amountBOptimal <= amountBDesired) { require(amountBOptimal >= amountBMin, 'DyorRouterV2: INSUFFICIENT_B_AMOUNT'); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint amountAOptimal = DyorLibrary.quote(amountBDesired, reserveB, reserveA); assert(amountAOptimal <= amountADesired); require(amountAOptimal >= amountAMin, 'DyorRouterV2: INSUFFICIENT_A_AMOUNT'); (amountA, amountB) = (amountAOptimal, amountBDesired); } } } function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external virtual override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) { (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin); address pair = DyorLibrary.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = IDyorPair(pair).mint(to); } function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) { (amountToken, amountETH) = _addLiquidity( token, WETH, amountTokenDesired, msg.value, amountTokenMin, amountETHMin ); address pair = DyorLibrary.pairFor(factory, token, WETH); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWETH(WETH).deposit{value: amountETH}(); assert(IWETH(WETH).transfer(pair, amountETH)); liquidity = IDyorPair(pair).mint(to); // refund dust eth, if any if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH); } // **** REMOVE LIQUIDITY **** function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) { address pair = DyorLibrary.pairFor(factory, tokenA, tokenB); IDyorPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (uint amount0, uint amount1) = IDyorPair(pair).burn(to); (address token0,) = DyorLibrary.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, 'DyorRouterV2: INSUFFICIENT_A_AMOUNT'); require(amountB >= amountBMin, 'DyorRouterV2: INSUFFICIENT_B_AMOUNT'); } function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountToken, uint amountETH) { (amountToken, amountETH) = removeLiquidity( token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer(token, to, amountToken); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountA, uint amountB) { address pair = DyorLibrary.pairFor(factory, tokenA, tokenB); uint value = approveMax ? uint(-1) : liquidity; IDyorPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline); } function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountToken, uint amountETH) { address pair = DyorLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IDyorPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline); } // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) **** function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountETH) { (, amountETH) = removeLiquidity( token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this))); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountETH) { address pair = DyorLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IDyorPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); amountETH = removeLiquidityETHSupportingFeeOnTransferTokens( token, liquidity, amountTokenMin, amountETHMin, to, deadline ); } // **** SWAP **** // requires the initial amount to have already been sent to the first pair function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0,) = DyorLibrary.sortTokens(input, output); uint amountOut = amounts[i + 1]; (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0)); address to = i < path.length - 2 ? DyorLibrary.pairFor(factory, output, path[i + 2]) : _to; IDyorPair(DyorLibrary.pairFor(factory, input, output)).swap( amount0Out, amount1Out, to, new bytes(0) ); } } function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { amounts = DyorLibrary.getAmountsOut(factory, amountIn, path); _swapExactTokensForTokensSupportingFeeOnTransferTokens(amountIn, amountOutMin, path, to); } function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { amounts = DyorLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'DyorRouterV2: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, DyorLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external virtual override payable ensure(deadline) returns (uint[] memory amounts) { amounts = DyorLibrary.getAmountsOut(factory, msg.value, path); _swapExactETHForTokensSupportingFeeOnTransferTokens(amountOutMin , path, to); } function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[path.length - 1] == WETH, 'DyorRouterV2: INVALID_PATH'); amounts = DyorLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'DyorRouterV2: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, DyorLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWETH(WETH).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); } function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external virtual override ensure(deadline) returns (uint[] memory amounts) { amounts = DyorLibrary.getAmountsOut(factory, amountIn, path); _swapExactTokensForETHSupportingFeeOnTransferTokens(amountIn, amountOutMin, path, to); } function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external virtual override payable ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, 'DyorRouterV2: INVALID_PATH'); amounts = DyorLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= msg.value, 'DyorRouterV2: EXCESSIVE_INPUT_AMOUNT'); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(DyorLibrary.pairFor(factory, path[0], path[1]), amounts[0])); _swap(amounts, path, to); // refund dust eth, if any if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]); } // **** SWAP (supporting fee-on-transfer tokens) **** // requires the initial amount to have already been sent to the first pair function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0,) = DyorLibrary.sortTokens(input, output); IDyorPair pair = IDyorPair(DyorLibrary.pairFor(factory, input, output)); uint amountInput; uint amountOutput; { // scope to avoid stack too deep errors (uint reserve0, uint reserve1,) = pair.getReserves(); (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0); amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput); amountOutput = DyorLibrary.getAmountOut(amountInput, reserveInput, reserveOutput); } (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0)); address to = i < path.length - 2 ? DyorLibrary.pairFor(factory, output, path[i + 2]) : _to; pair.swap(amount0Out, amount1Out, to, new bytes(0)); } } function _swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] memory path, address to ) internal { // amountOutMin = amountOutMin - (amountOutMin * (10000 - ratePercent) / 10000); uint fee; bool isFeeCurrency; address recipient = address(this); // bool startFee = feeCurrency[path[0]] || feeCurrency[path[path.length - 1]]; if(ratePercent > 0 && feeTo != address(0) && (feeCurrency[path[0]] || feeCurrency[path[path.length - 1]])){ if(feeCurrency[path[0]]){ fee = amountIn * ratePercent / 10000; TransferHelper.safeTransferFrom( path[0], msg.sender, address(this) , amountIn); TransferHelper.safeTransfer(path[0], feeTo, fee); TransferHelper.safeTransfer(path[0], DyorLibrary.pairFor(factory, path[0], path[1]), amountIn - fee); isFeeCurrency = true; recipient = to; } }else{ recipient = to; } if(!isFeeCurrency){ TransferHelper.safeTransferFrom( path[0], msg.sender, DyorLibrary.pairFor(factory, path[0], path[1]), amountIn - fee ); } uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, recipient); if(ratePercent > 0 && feeTo != address(0) && (feeCurrency[path[0]] || feeCurrency[path[path.length - 1]])){ if(!feeCurrency[path[0]]){ uint balance = IERC20(path[path.length - 1]).balanceOf(recipient); fee = balance * ratePercent / 10000; TransferHelper.safeTransfer(path[path.length - 1], to, balance - fee); TransferHelper.safeTransfer(path[path.length - 1], feeTo, fee); } } require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'DyorRouterV2: INSUFFICIENT_OUTPUT_AMOUNT' ); } function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { _swapExactTokensForTokensSupportingFeeOnTransferTokens(amountIn, amountOutMin, path, to); } function _swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] memory path, address to ) internal { require(path[0] == WETH, 'DyorRouterV2: INVALID_PATH'); uint amountIn = msg.value; uint fee = 0; if(ratePercent > 0 && feeTo != address(0)){ fee = amountIn * ratePercent / 10000; TransferHelper.safeTransferETH( feeTo, fee); } IWETH(WETH).deposit{value: amountIn - fee}(); assert(IWETH(WETH).transfer(DyorLibrary.pairFor(factory, path[0], path[1]), amountIn - fee)); uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens( path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'DyorRouterV2: INSUFFICIENT_OUTPUT_AMOUNT' ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override payable ensure(deadline) { _swapExactETHForTokensSupportingFeeOnTransferTokens(amountOutMin , path, to); } function _swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] memory path, address to ) internal { require(path[path.length - 1] == WETH, 'DyorRouterV2: INVALID_PATH'); TransferHelper.safeTransferFrom( path[0], msg.sender, DyorLibrary.pairFor(factory, path[0], path[1]), amountIn ); _swapSupportingFeeOnTransferTokens( path, address(this)); uint amountOut = IERC20(WETH).balanceOf(address(this)); IWETH(WETH).withdraw(amountOut); uint fee = 0; if(ratePercent > 0 && feeTo != address(0)){ fee = amountOut * ratePercent / 10000; TransferHelper.safeTransferETH( feeTo, fee); } require(amountOut - fee >= amountOutMin, 'DyorRouterV2: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferETH(to, amountOut - fee); } function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { _swapExactTokensForETHSupportingFeeOnTransferTokens(amountIn, amountOutMin, path, to); } // **** LIBRARY FUNCTIONS **** function quote(uint amountA, uint reserveA, uint reserveB) public pure virtual override returns (uint amountB) { return DyorLibrary.quote(amountA, reserveA, reserveB); } function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) public pure virtual override returns (uint amountOut) { return DyorLibrary.getAmountOut(amountIn, reserveIn, reserveOut); } function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) public pure virtual override returns (uint amountIn) { return DyorLibrary.getAmountIn(amountOut, reserveIn, reserveOut); } function getAmountsOut(uint amountIn, address[] memory path) public view virtual override returns (uint[] memory amounts) { return DyorLibrary.getAmountsOut(factory, amountIn, path); } function getAmountsIn(uint amountOut, address[] memory path) public view virtual override returns (uint[] memory amounts) { return DyorLibrary.getAmountsIn(factory, amountOut, path); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"},{"internalType":"address","name":"_feeToSetter","type":"address"},{"internalType":"address","name":"_feeTo","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"feeCurrency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeTo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeToSetter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"ratePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"currency","type":"address"},{"internalType":"bool","name":"fee","type":"bool"}],"name":"setFeeCurrency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"currencyList","type":"address[]"},{"internalType":"bool","name":"fee","type":"bool"}],"name":"setFeeCurrencyList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeTo","type":"address"}],"name":"setFeeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeToSetter","type":"address"}],"name":"setFeeToSetter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ratePercent","type":"uint256"}],"name":"setRatePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052601e60025534801561001557600080fd5b50604051620052d4380380620052d48339818101604052608081101561003a57600080fd5b5080516020808301516040808501516060958601516001600160601b031995871b86166080529583901b90941660a0526001600160a01b03918216600090815260039093528220805460ff1916600190811790915582549482166001600160a01b031995861617909255815492169190921617905560805160601c60a05160601c615106620001ce600039806102125280610f9e5280610fd9528061145952806116a4528061185a5280611e115280611e9e5280611f6652806123a35280612719528061276f52806127a352806128175280612a625280612bb75280612c3f52806132d5528061342852806134d8528061416e528061425752806142cd5250806110ec528061119952806111d2528061135c528061151752806115eb52806118385280611b6b5280611c7952806120e95280612313528061233c52806123815280612537528061274d5280612b075280612c71528061338e528061395e52806139d95280613fe8528061401e52806142ff528061480a52806148d152806149515280614c5b5280614de152506151066000f3fe6080604052600436106102025760003560e01c806385f8c2591161011d578063c45a0155116100b0578063e8e337001161007f578063f305d71911610064578063f305d71914610e31578063f46901ed14610e77578063fb3bdb4114610eaa5761023b565b8063e8e3370014610d76578063ed31db6014610df65761023b565b8063c45a015514610bf0578063d06ca61f14610c05578063d50c552a14610cbc578063ded9382a14610d035761023b565b8063ad615dec116100ec578063ad615dec14610a84578063af2979eb14610aba578063b6f9de9514610b0d578063baa2abde14610b935761023b565b806385f8c2591461096e5780638803dbee146109a4578063a2e74af614610a3c578063ad5c464814610a6f5761023b565b806338ed1739116101955780635c11d795116101645780635c11d7951461078e5780635ccfe6e314610826578063791ac947146108505780637ff36ab5146108e85761023b565b806338ed17391461056c5780634a25d94a146106045780634f3122ed1461069c5780635b0d59841461071b5761023b565b806318cbafe5116101d157806318cbafe51461033a5780631f00ca74146104225780632195995c146104d957806324fd2272146105575761023b565b8063017e7e581461024057806302751cec14610271578063054d50d4146102dd578063094b7415146103255761023b565b3661023b57336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461023957fe5b005b600080fd5b34801561024c57600080fd5b50610255610f30565b604080516001600160a01b039092168252519081900360200190f35b34801561027d57600080fd5b506102c4600480360360c081101561029457600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610f3f565b6040805192835260208301919091528051918290030190f35b3480156102e957600080fd5b506103136004803603606081101561030057600080fd5b508035906020810135906040013561106b565b60408051918252519081900360200190f35b34801561033157600080fd5b50610255611080565b34801561034657600080fd5b506103d2600480360360a081101561035d57600080fd5b81359160208101359181019060608101604082013564010000000081111561038457600080fd5b82018360208201111561039657600080fd5b803590602001918460208302840111640100000000831117156103b857600080fd5b91935091506001600160a01b03813516906020013561108f565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561040e5781810151838201526020016103f6565b505050509050019250505060405180910390f35b34801561042e57600080fd5b506103d26004803603604081101561044557600080fd5b8135919081019060408101602082013564010000000081111561046757600080fd5b82018360208201111561047957600080fd5b8035906020019184602083028401116401000000008311171561049b57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611192945050505050565b3480156104e557600080fd5b506102c460048036036101608110156104fd57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff61010082013516906101208101359061014001356111c8565b34801561056357600080fd5b506103136112f9565b34801561057857600080fd5b506103d2600480360360a081101561058f57600080fd5b8135916020810135918101906060810160408201356401000000008111156105b657600080fd5b8201836020820111156105c857600080fd5b803590602001918460208302840111640100000000831117156105ea57600080fd5b91935091506001600160a01b0381351690602001356112ff565b34801561061057600080fd5b506103d2600480360360a081101561062757600080fd5b81359160208101359181019060608101604082013564010000000081111561064e57600080fd5b82018360208201111561066057600080fd5b8035906020019184602083028401116401000000008311171561068257600080fd5b91935091506001600160a01b0381351690602001356113f7565b3480156106a857600080fd5b50610239600480360360408110156106bf57600080fd5b8101906020810181356401000000008111156106da57600080fd5b8201836020820111156106ec57600080fd5b8035906020019184602083028401116401000000008311171561070e57600080fd5b9193509150351515611758565b34801561072757600080fd5b50610313600480360361014081101561073f57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611830565b34801561079a57600080fd5b50610239600480360360a08110156107b157600080fd5b8135916020810135918101906060810160408201356401000000008111156107d857600080fd5b8201836020820111156107ea57600080fd5b8035906020019184602083028401116401000000008311171561080c57600080fd5b91935091506001600160a01b038135169060200135611975565b34801561083257600080fd5b506102396004803603602081101561084957600080fd5b5035611a14565b34801561085c57600080fd5b50610239600480360360a081101561087357600080fd5b81359160208101359181019060608101604082013564010000000081111561089a57600080fd5b8201836020820111156108ac57600080fd5b803590602001918460208302840111640100000000831117156108ce57600080fd5b91935091506001600160a01b038135169060200135611a78565b6103d2600480360360808110156108fe57600080fd5b8135919081019060408101602082013564010000000081111561092057600080fd5b82018360208201111561093257600080fd5b8035906020019184602083028401116401000000008311171561095457600080fd5b91935091506001600160a01b038135169060200135611b0e565b34801561097a57600080fd5b506103136004803603606081101561099157600080fd5b5080359060208101359060400135611c0f565b3480156109b057600080fd5b506103d2600480360360a08110156109c757600080fd5b8135916020810135918101906060810160408201356401000000008111156109ee57600080fd5b820183602082011115610a0057600080fd5b80359060200191846020830284011164010000000083111715610a2257600080fd5b91935091506001600160a01b038135169060200135611c1c565b348015610a4857600080fd5b5061023960048036036020811015610a5f57600080fd5b50356001600160a01b0316611d76565b348015610a7b57600080fd5b50610255611e0f565b348015610a9057600080fd5b5061031360048036036060811015610aa757600080fd5b5080359060208101359060400135611e33565b348015610ac657600080fd5b50610313600480360360c0811015610add57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611e40565b61023960048036036080811015610b2357600080fd5b81359190810190604081016020820135640100000000811115610b4557600080fd5b820183602082011115610b5757600080fd5b80359060200191846020830284011164010000000083111715610b7957600080fd5b91935091506001600160a01b038135169060200135611fec565b348015610b9f57600080fd5b506102c4600480360360e0811015610bb657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612089565b348015610bfc57600080fd5b50610255612311565b348015610c1157600080fd5b506103d260048036036040811015610c2857600080fd5b81359190810190604081016020820135640100000000811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b80359060200191846020830284011164010000000083111715610c7e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612335945050505050565b348015610cc857600080fd5b50610cef60048036036020811015610cdf57600080fd5b50356001600160a01b0316612362565b604080519115158252519081900360200190f35b348015610d0f57600080fd5b506102c46004803603610140811015610d2757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612377565b348015610d8257600080fd5b50610dd86004803603610100811015610d9a57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e001356124c2565b60408051938452602084019290925282820152519081900360600190f35b348015610e0257600080fd5b5061023960048036036040811015610e1957600080fd5b506001600160a01b0381351690602001351515612610565b610dd8600480360360c0811015610e4757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356126b8565b348015610e8357600080fd5b5061023960048036036020811015610e9a57600080fd5b50356001600160a01b031661296f565b6103d260048036036080811015610ec057600080fd5b81359190810190604081016020820135640100000000811115610ee257600080fd5b820183602082011115610ef457600080fd5b80359060200191846020830284011164010000000083111715610f1657600080fd5b91935091506001600160a01b038135169060200135612a08565b6000546001600160a01b031681565b6000808242811015610f98576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b610fc7897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612089565b9093509150610fd7898685612dcb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561103d57600080fd5b505af1158015611051573d6000803e3d6000fd5b5050505061105f8583612f81565b50965096945050505050565b6000611078848484613097565b949350505050565b6001546001600160a01b031681565b606081428110156110e7576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b6111457f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061318792505050565b915061118788888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a92506132d3915050565b509695505050505050565b60606111bf7f000000000000000000000000000000000000000000000000000000000000000084846135d2565b90505b92915050565b60008060006111f87f00000000000000000000000000000000000000000000000000000000000000008f8f613746565b9050600087611207578c611229565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156112b857600080fd5b505af11580156112cc573d6000803e3d6000fd5b505050506112df8f8f8f8f8f8f8f612089565b809450819550505050509b509b9950505050505050505050565b60025481565b60608142811015611357576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b6113b57f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061318792505050565b915061118788888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a92506137fb915050565b6060814281101561144f576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181106114a757fe5b905060200201356001600160a01b03166001600160a01b031614611512576040805162461bcd60e51b815260206004820152601a60248201527f44796f72526f7574657256323a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b6115707f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506135d292505050565b9150868260008151811061158057fe5b602002602001015111156115c55760405162461bcd60e51b81526004018080602001828103825260248152602001806150196024913960400191505060405180910390fd5b611663868660008181106115d557fe5b905060200201356001600160a01b0316336116497f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061161757fe5b905060200201356001600160a01b03168b8b600181811061163457fe5b905060200201356001600160a01b0316613746565b8560008151811061165657fe5b6020026020010151613d98565b6116a282878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613f39915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855103815181106116e157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561171f57600080fd5b505af1158015611733573d6000803e3d6000fd5b50505050611187848360018551038151811061174b57fe5b6020026020010151612f81565b6001546001600160a01b031633146117b7576040805162461bcd60e51b815260206004820152601760248201527f44796f72526f7574657256323a20464f5242494444454e000000000000000000604482015290519081900360640190fd5b60005b8281101561182a5781600360008686858181106117d357fe5b602090810292909201356001600160a01b031683525081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790556001016117ba565b50505050565b60008061187e7f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613746565b905060008661188d578b6118af565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561193e57600080fd5b505af1158015611952573d6000803e3d6000fd5b505050506119648d8d8d8d8d8d611e40565b9d9c50505050505050505050505050565b80428110156119cb576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b611a0b87878787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506137fb915050565b50505050505050565b6001546001600160a01b03163314611a73576040805162461bcd60e51b815260206004820152601760248201527f44796f72526f7574657256323a20464f5242494444454e000000000000000000604482015290519081900360640190fd5b600255565b8042811015611ace576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b611a0b87878787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506132d3915050565b60608142811015611b66576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b611bc47f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061318792505050565b9150611c058787878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061416c915050565b5095945050505050565b600061107884848461451a565b60608142811015611c74576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b611cd27f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506135d292505050565b91508682600081518110611ce257fe5b60200260200101511115611d275760405162461bcd60e51b81526004018080602001828103825260248152602001806150196024913960400191505060405180910390fd5b611d37868660008181106115d557fe5b61118782878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613f39915050565b6001546001600160a01b03163314611dd5576040805162461bcd60e51b815260206004820152601760248201527f44796f72526f7574657256323a20464f5242494444454e000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061107884848461460a565b60008142811015611e98576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b611ec7887f00000000000000000000000000000000000000000000000000000000000000008989893089612089565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051919450611f6492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015611f3357600080fd5b505afa158015611f47573d6000803e3d6000fd5b505050506040513d6020811015611f5d57600080fd5b5051612dcb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611fca57600080fd5b505af1158015611fde573d6000803e3d6000fd5b505050506111878483612f81565b8042811015612042576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b6120818686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525088925061416c915050565b505050505050565b60008082428110156120e2576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b600061210f7f00000000000000000000000000000000000000000000000000000000000000008c8c613746565b604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561218357600080fd5b505af1158015612197573d6000803e3d6000fd5b505050506040513d60208110156121ad57600080fd5b5050604080517f89afcb440000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561221357600080fd5b505af1158015612227573d6000803e3d6000fd5b505050506040513d604081101561223d57600080fd5b508051602090910151909250905060006122578e8e6146cc565b509050806001600160a01b03168e6001600160a01b03161461227a57818361227d565b82825b90975095508a8710156122c15760405162461bcd60e51b8152600401808060200182810382526023815260200180614fd36023913960400191505060405180910390fd5b898610156123005760405162461bcd60e51b8152600401808060200182810382526023815260200180614fb06023913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111bf7f00000000000000000000000000000000000000000000000000000000000000008484613187565b60036020526000908152604090205460ff1681565b60008060006123c77f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613746565b90506000876123d6578c6123f8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561248757600080fd5b505af115801561249b573d6000803e3d6000fd5b505050506124ad8e8e8e8e8e8e610f3f565b909f909e509c50505050505050505050505050565b6000806000834281101561251d576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b61252b8c8c8c8c8c8c6147c0565b9094509250600061255d7f00000000000000000000000000000000000000000000000000000000000000008e8e613746565b905061256b8d338388613d98565b6125778c338387613d98565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b1580156125cf57600080fd5b505af11580156125e3573d6000803e3d6000fd5b505050506040513d60208110156125f957600080fd5b5051949d939c50939a509198505050505050505050565b6001546001600160a01b0316331461266f576040805162461bcd60e51b815260206004820152601760248201527f44796f72526f7574657256323a20464f5242494444454e000000000000000000604482015290519081900360640190fd5b6001600160a01b0391909116600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60008060008342811015612713576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b6127418a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c6147c0565b909450925060006127937f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613746565b90506127a18b338388613d98565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156127fc57600080fd5b505af1158015612810573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561289557600080fd5b505af11580156128a9573d6000803e3d6000fd5b505050506040513d60208110156128bf57600080fd5b50516128c757fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561291f57600080fd5b505af1158015612933573d6000803e3d6000fd5b505050506040513d602081101561294957600080fd5b50519250348410156129615761296133853403612f81565b505096509650969350505050565b6001546001600160a01b031633146129ce576040805162461bcd60e51b815260206004820152601760248201527f44796f72526f7574657256323a20464f5242494444454e000000000000000000604482015290519081900360640190fd5b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60608142811015612a60576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612a9757fe5b905060200201356001600160a01b03166001600160a01b031614612b02576040805162461bcd60e51b815260206004820152601a60248201527f44796f72526f7574657256323a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b612b607f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506135d292505050565b91503482600081518110612b7057fe5b60200260200101511115612bb55760405162461bcd60e51b81526004018080602001828103825260248152602001806150196024913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612bf157fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612c2457600080fd5b505af1158015612c38573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612cba7f000000000000000000000000000000000000000000000000000000000000000089896000818110612c9d57fe5b905060200201356001600160a01b03168a8a600181811061163457fe5b84600081518110612cc757fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612d1e57600080fd5b505af1158015612d32573d6000803e3d6000fd5b505050506040513d6020811015612d4857600080fd5b5051612d5057fe5b612d8f82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613f39915050565b81600081518110612d9c57fe5b6020026020010151341115611c0557611c053383600081518110612dbc57fe5b60200260200101513403612f81565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310612e9457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612e57565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612ef6576040519150601f19603f3d011682016040523d82523d6000602084013e612efb565b606091505b5091509150818015612f29575080511580612f295750808060200190516020811015612f2657600080fd5b50515b612f7a576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310612feb57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612fae565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461304d576040519150601f19603f3d011682016040523d82523d6000602084013e613052565b606091505b50509050806130925760405162461bcd60e51b81526004018080602001828103825260238152602001806150646023913960400191505060405180910390fd5b505050565b60008084116130d75760405162461bcd60e51b81526004018080602001828103825260268152602001806150876026913960400191505060405180910390fd5b6000831180156130e75750600082115b6131225760405162461bcd60e51b8152600401808060200182810382526023815260200180614ff66023913960400191505060405180910390fd5b6000613136856126f263ffffffff614a6616565b9050600061314a828563ffffffff614a6616565b90506000613170836131648861271063ffffffff614a6616565b9063ffffffff614ad216565b905080828161317b57fe5b04979650505050505050565b60606002825110156131e0576040805162461bcd60e51b815260206004820152601960248201527f44796f724c6962726172793a20494e56414c49445f5041544800000000000000604482015290519081900360640190fd5b815167ffffffffffffffff811180156131f857600080fd5b50604051908082528060200260200182016040528015613222578160200160208202803683370190505b509050828160008151811061323357fe5b60200260200101818152505060005b60018351038110156132cb576000806132858786858151811061326157fe5b602002602001015187866001018151811061327857fe5b6020026020010151614b2a565b915091506132a784848151811061329857fe5b60200260200101518383613097565b8484600101815181106132b657fe5b60209081029190910101525050600101613242565b509392505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168260018451038151811061330d57fe5b60200260200101516001600160a01b031614613370576040805162461bcd60e51b815260206004820152601a60248201527f44796f72526f7574657256323a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b6133e28260008151811061338057fe5b6020026020010151336133dc7f0000000000000000000000000000000000000000000000000000000000000000866000815181106133ba57fe5b6020026020010151876001815181106133cf57fe5b6020026020010151613746565b87613d98565b6133ec8230614c04565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b15801561346f57600080fd5b505afa158015613483573d6000803e3d6000fd5b505050506040513d602081101561349957600080fd5b5051604080517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810183905290519192506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691632e1a7d4d9160248082019260009290919082900301818387803b15801561352057600080fd5b505af1158015613534573d6000803e3d6000fd5b505060025460009250158015915061355657506000546001600160a01b031615155b156135855761271060025483028161356a57fe5b6000549190049150613585906001600160a01b031682612f81565b8481830310156135c65760405162461bcd60e51b8152600401808060200182810382526028815260200180614f886028913960400191505060405180910390fd5b61208183828403612f81565b606060028251101561362b576040805162461bcd60e51b815260206004820152601960248201527f44796f724c6962726172793a20494e56414c49445f5041544800000000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561364357600080fd5b5060405190808252806020026020018201604052801561366d578160200160208202803683370190505b509050828160018351038151811061368157fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b80156132cb576000806136e1878660018603815181106136cd57fe5b602002602001015187868151811061327857fe5b915091506137038484815181106136f457fe5b6020026020010151838361451a565b84600185038151811061371257fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016136b1565b600080600061375585856146cc565b604080517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301528084166024830152915193955091935088169163e6a4390591604480820192602092909190829003018186803b1580156137c557600080fd5b505afa1580156137d9573d6000803e3d6000fd5b505050506040513d60208110156137ef57600080fd5b50519695505050505050565b6000806000309050600060025411801561381f57506000546001600160a01b031615155b80156138a05750600360008660008151811061383757fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16806138a05750600360008660018851038151811061387857fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff165b156139b35760036000866000815181106138b657fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16156139ae576127106002548802816138f157fe5b0492506139148560008151811061390457fe5b602002602001015133308a613d98565b6139418560008151811061392457fe5b60209081029190910101516000546001600160a01b031685612dcb565b6139a78560008151811061395157fe5b602002602001015161399f7f00000000000000000000000000000000000000000000000000000000000000008860008151811061398a57fe5b6020026020010151896001815181106133cf57fe5b858a03612dcb565b5060019050825b6139b6565b50825b81613a2257613a22856000815181106139cb57fe5b602002602001015133613a1a7f000000000000000000000000000000000000000000000000000000000000000089600081518110613a0557fe5b60200260200101518a6001815181106133cf57fe5b868b03613d98565b600085600187510381518110613a3457fe5b60200260200101516001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015613a9157600080fd5b505afa158015613aa5573d6000803e3d6000fd5b505050506040513d6020811015613abb57600080fd5b50519050613ac98683614c04565b6000600254118015613ae557506000546001600160a01b031615155b8015613b6657506003600087600081518110613afd57fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff1680613b6657506003600087600189510381518110613b3e57fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff165b15613ca7576003600087600081518110613b7c57fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16613ca757600086600188510381518110613bb957fe5b60200260200101516001600160a01b03166370a08231846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015613c1657600080fd5b505afa158015613c2a573d6000803e3d6000fd5b505050506040513d6020811015613c4057600080fd5b5051600254909150612710908202049450613c7587600189510381518110613c6457fe5b602002602001015187878403612dcb565b613ca587600189510381518110613c8857fe5b60209081029190910101516000546001600160a01b031687612dcb565b505b86613d51828860018a510381518110613cbc57fe5b60200260200101516001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015613d1957600080fd5b505afa158015613d2d573d6000803e3d6000fd5b505050506040513d6020811015613d4357600080fd5b50519063ffffffff614f2f16565b1015613d8e5760405162461bcd60e51b8152600401808060200182810382526028815260200180614f886028913960400191505060405180910390fd5b5050505050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b60208310613e6957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613e2c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613ecb576040519150601f19603f3d011682016040523d82523d6000602084013e613ed0565b606091505b5091509150818015613efe575080511580613efe5750808060200190516020811015613efb57600080fd5b50515b6120815760405162461bcd60e51b81526004018080602001828103825260248152602001806150ad6024913960400191505060405180910390fd5b60005b600183510381101561182a57600080848381518110613f5757fe5b6020026020010151858460010181518110613f6e57fe5b6020026020010151915091506000613f8683836146cc565b5090506000878560010181518110613f9a57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b031614613fc857826000613fcc565b6000835b91509150600060028a51038810613fe35788614017565b6140177f0000000000000000000000000000000000000000000000000000000000000000878c8b600201815181106133cf57fe5b90506140447f00000000000000000000000000000000000000000000000000000000000000008888613746565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015614081576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156140f25781810151838201526020016140da565b50505050905090810190601f16801561411f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561414157600080fd5b505af1158015614155573d6000803e3d6000fd5b505060019099019850613f3c975050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826000815181106141a357fe5b60200260200101516001600160a01b031614614206576040805162461bcd60e51b815260206004820152601a60248201527f44796f72526f7574657256323a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b60025434906000901580159061422657506000546001600160a01b031615155b156142555761271060025483028161423a57fe5b6000549190049150614255906001600160a01b031682612f81565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08284036040518263ffffffff1660e01b81526004016000604051808303818588803b1580156142b257600080fd5b505af11580156142c6573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6143407f00000000000000000000000000000000000000000000000000000000000000008760008151811061432b57fe5b6020026020010151886001815181106133cf57fe5b8385036040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561439257600080fd5b505af11580156143a6573d6000803e3d6000fd5b505050506040513d60208110156143bc57600080fd5b50516143c457fe5b6000846001865103815181106143d657fe5b60200260200101516001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561443357600080fd5b505afa158015614447573d6000803e3d6000fd5b505050506040513d602081101561445d57600080fd5b5051905061446b8585614c04565b856144dd828760018951038151811061448057fe5b60200260200101516001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015613d1957600080fd5b10156120815760405162461bcd60e51b8152600401808060200182810382526028815260200180614f886028913960400191505060405180910390fd5b600080841161455a5760405162461bcd60e51b815260040180806020018281038252602781526020018061503d6027913960400191505060405180910390fd5b60008311801561456a5750600082115b6145a55760405162461bcd60e51b8152600401808060200182810382526023815260200180614ff66023913960400191505060405180910390fd5b60006145c96127106145bd868863ffffffff614a6616565b9063ffffffff614a6616565b905060006145e36126f26145bd868963ffffffff614f2f16565b905061460060018284816145f357fe5b049063ffffffff614ad216565b9695505050505050565b6000808411614660576040805162461bcd60e51b815260206004820181905260248201527f44796f724c6962726172793a20494e53554646494349454e545f414d4f554e54604482015290519081900360640190fd5b6000831180156146705750600082115b6146ab5760405162461bcd60e51b8152600401808060200182810382526023815260200180614ff66023913960400191505060405180910390fd5b826146bc858463ffffffff614a6616565b816146c357fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415614736576040805162461bcd60e51b815260206004820181905260248201527f44796f724c6962726172793a204944454e544943414c5f414444524553534553604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b031610614756578284614759565b83835b90925090506001600160a01b0382166147b9576040805162461bcd60e51b815260206004820152601960248201527f44796f724c6962726172793a205a45524f5f4144445245535300000000000000604482015290519081900360640190fd5b9250929050565b604080517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561485357600080fd5b505afa158015614867573d6000803e3d6000fd5b505050506040513d602081101561487d57600080fd5b50516001600160a01b0316141561494957604080517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561491c57600080fd5b505af1158015614930573d6000803e3d6000fd5b505050506040513d602081101561494657600080fd5b50505b6000806149777f00000000000000000000000000000000000000000000000000000000000000008b8b614b2a565b91509150816000148015614989575080155b1561499957879350869250614a59565b60006149a689848461460a565b90508781116149f957858110156149ee5760405162461bcd60e51b8152600401808060200182810382526023815260200180614fb06023913960400191505060405180910390fd5b889450925082614a57565b6000614a0689848661460a565b905089811115614a1257fe5b87811015614a515760405162461bcd60e51b8152600401808060200182810382526023815260200180614fd36023913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6000811580614a8157505080820282828281614a7e57fe5b04145b6111c2576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b808201828110156111c2576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b6000806000614b3985856146cc565b509050614b47868686613746565b50600080614b56888888613746565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614b8e57600080fd5b505afa158015614ba2573d6000803e3d6000fd5b505050506040513d6060811015614bb857600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0387811690841614614bf2578082614bf5565b81815b90999098509650505050505050565b60005b600183510381101561309257600080848381518110614c2257fe5b6020026020010151858460010181518110614c3957fe5b6020026020010151915091506000614c5183836146cc565b5090506000614c817f00000000000000000000000000000000000000000000000000000000000000008585613746565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614cc257600080fd5b505afa158015614cd6573d6000803e3d6000fd5b505050506040513d6060811015614cec57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a811690891614614d29578284614d2c565b83835b91509150614d8a828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015613d1957600080fd5b9550614d97868383613097565b945050505050600080856001600160a01b0316886001600160a01b031614614dc157826000614dc5565b6000835b91509150600060028c51038a10614ddc578a614e10565b614e107f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106133cf57fe5b60408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614eb3578181015183820152602001614e9b565b50505050905090810190601f168015614ee05780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614f0257600080fd5b505af1158015614f16573d6000803e3d6000fd5b50506001909b019a50614c079950505050505050505050565b808203828111156111c2576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fdfe44796f72526f7574657256323a20494e53554646494349454e545f4f55545055545f414d4f554e5444796f72526f7574657256323a20494e53554646494349454e545f425f414d4f554e5444796f72526f7574657256323a20494e53554646494349454e545f415f414d4f554e5444796f724c6962726172793a20494e53554646494349454e545f4c495155494449545944796f72526f7574657256323a204558434553534956455f494e5055545f414d4f554e5444796f724c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c454444796f724c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a2646970667358221220e3bc79b5858dd8f87fb1310631dc1e8a8fbc01a0eddda4e9360beba469079ac864736f6c63430006060033000000000000000000000000d8863d794520285185197f97215c8b8ad04e8815000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3800000000000000000000000074a4bb09aad5da75ca3f2f2c0168d2b40f2ab6590000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102025760003560e01c806385f8c2591161011d578063c45a0155116100b0578063e8e337001161007f578063f305d71911610064578063f305d71914610e31578063f46901ed14610e77578063fb3bdb4114610eaa5761023b565b8063e8e3370014610d76578063ed31db6014610df65761023b565b8063c45a015514610bf0578063d06ca61f14610c05578063d50c552a14610cbc578063ded9382a14610d035761023b565b8063ad615dec116100ec578063ad615dec14610a84578063af2979eb14610aba578063b6f9de9514610b0d578063baa2abde14610b935761023b565b806385f8c2591461096e5780638803dbee146109a4578063a2e74af614610a3c578063ad5c464814610a6f5761023b565b806338ed1739116101955780635c11d795116101645780635c11d7951461078e5780635ccfe6e314610826578063791ac947146108505780637ff36ab5146108e85761023b565b806338ed17391461056c5780634a25d94a146106045780634f3122ed1461069c5780635b0d59841461071b5761023b565b806318cbafe5116101d157806318cbafe51461033a5780631f00ca74146104225780632195995c146104d957806324fd2272146105575761023b565b8063017e7e581461024057806302751cec14610271578063054d50d4146102dd578063094b7415146103255761023b565b3661023b57336001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38161461023957fe5b005b600080fd5b34801561024c57600080fd5b50610255610f30565b604080516001600160a01b039092168252519081900360200190f35b34801561027d57600080fd5b506102c4600480360360c081101561029457600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610f3f565b6040805192835260208301919091528051918290030190f35b3480156102e957600080fd5b506103136004803603606081101561030057600080fd5b508035906020810135906040013561106b565b60408051918252519081900360200190f35b34801561033157600080fd5b50610255611080565b34801561034657600080fd5b506103d2600480360360a081101561035d57600080fd5b81359160208101359181019060608101604082013564010000000081111561038457600080fd5b82018360208201111561039657600080fd5b803590602001918460208302840111640100000000831117156103b857600080fd5b91935091506001600160a01b03813516906020013561108f565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561040e5781810151838201526020016103f6565b505050509050019250505060405180910390f35b34801561042e57600080fd5b506103d26004803603604081101561044557600080fd5b8135919081019060408101602082013564010000000081111561046757600080fd5b82018360208201111561047957600080fd5b8035906020019184602083028401116401000000008311171561049b57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611192945050505050565b3480156104e557600080fd5b506102c460048036036101608110156104fd57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff61010082013516906101208101359061014001356111c8565b34801561056357600080fd5b506103136112f9565b34801561057857600080fd5b506103d2600480360360a081101561058f57600080fd5b8135916020810135918101906060810160408201356401000000008111156105b657600080fd5b8201836020820111156105c857600080fd5b803590602001918460208302840111640100000000831117156105ea57600080fd5b91935091506001600160a01b0381351690602001356112ff565b34801561061057600080fd5b506103d2600480360360a081101561062757600080fd5b81359160208101359181019060608101604082013564010000000081111561064e57600080fd5b82018360208201111561066057600080fd5b8035906020019184602083028401116401000000008311171561068257600080fd5b91935091506001600160a01b0381351690602001356113f7565b3480156106a857600080fd5b50610239600480360360408110156106bf57600080fd5b8101906020810181356401000000008111156106da57600080fd5b8201836020820111156106ec57600080fd5b8035906020019184602083028401116401000000008311171561070e57600080fd5b9193509150351515611758565b34801561072757600080fd5b50610313600480360361014081101561073f57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611830565b34801561079a57600080fd5b50610239600480360360a08110156107b157600080fd5b8135916020810135918101906060810160408201356401000000008111156107d857600080fd5b8201836020820111156107ea57600080fd5b8035906020019184602083028401116401000000008311171561080c57600080fd5b91935091506001600160a01b038135169060200135611975565b34801561083257600080fd5b506102396004803603602081101561084957600080fd5b5035611a14565b34801561085c57600080fd5b50610239600480360360a081101561087357600080fd5b81359160208101359181019060608101604082013564010000000081111561089a57600080fd5b8201836020820111156108ac57600080fd5b803590602001918460208302840111640100000000831117156108ce57600080fd5b91935091506001600160a01b038135169060200135611a78565b6103d2600480360360808110156108fe57600080fd5b8135919081019060408101602082013564010000000081111561092057600080fd5b82018360208201111561093257600080fd5b8035906020019184602083028401116401000000008311171561095457600080fd5b91935091506001600160a01b038135169060200135611b0e565b34801561097a57600080fd5b506103136004803603606081101561099157600080fd5b5080359060208101359060400135611c0f565b3480156109b057600080fd5b506103d2600480360360a08110156109c757600080fd5b8135916020810135918101906060810160408201356401000000008111156109ee57600080fd5b820183602082011115610a0057600080fd5b80359060200191846020830284011164010000000083111715610a2257600080fd5b91935091506001600160a01b038135169060200135611c1c565b348015610a4857600080fd5b5061023960048036036020811015610a5f57600080fd5b50356001600160a01b0316611d76565b348015610a7b57600080fd5b50610255611e0f565b348015610a9057600080fd5b5061031360048036036060811015610aa757600080fd5b5080359060208101359060400135611e33565b348015610ac657600080fd5b50610313600480360360c0811015610add57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611e40565b61023960048036036080811015610b2357600080fd5b81359190810190604081016020820135640100000000811115610b4557600080fd5b820183602082011115610b5757600080fd5b80359060200191846020830284011164010000000083111715610b7957600080fd5b91935091506001600160a01b038135169060200135611fec565b348015610b9f57600080fd5b506102c4600480360360e0811015610bb657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612089565b348015610bfc57600080fd5b50610255612311565b348015610c1157600080fd5b506103d260048036036040811015610c2857600080fd5b81359190810190604081016020820135640100000000811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b80359060200191846020830284011164010000000083111715610c7e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612335945050505050565b348015610cc857600080fd5b50610cef60048036036020811015610cdf57600080fd5b50356001600160a01b0316612362565b604080519115158252519081900360200190f35b348015610d0f57600080fd5b506102c46004803603610140811015610d2757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612377565b348015610d8257600080fd5b50610dd86004803603610100811015610d9a57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e001356124c2565b60408051938452602084019290925282820152519081900360600190f35b348015610e0257600080fd5b5061023960048036036040811015610e1957600080fd5b506001600160a01b0381351690602001351515612610565b610dd8600480360360c0811015610e4757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356126b8565b348015610e8357600080fd5b5061023960048036036020811015610e9a57600080fd5b50356001600160a01b031661296f565b6103d260048036036080811015610ec057600080fd5b81359190810190604081016020820135640100000000811115610ee257600080fd5b820183602082011115610ef457600080fd5b80359060200191846020830284011164010000000083111715610f1657600080fd5b91935091506001600160a01b038135169060200135612a08565b6000546001600160a01b031681565b6000808242811015610f98576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b610fc7897f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad388a8a8a308a612089565b9093509150610fd7898685612dcb565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561103d57600080fd5b505af1158015611051573d6000803e3d6000fd5b5050505061105f8583612f81565b50965096945050505050565b6000611078848484613097565b949350505050565b6001546001600160a01b031681565b606081428110156110e7576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b6111457f000000000000000000000000d8863d794520285185197f97215c8b8ad04e88158988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061318792505050565b915061118788888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a92506132d3915050565b509695505050505050565b60606111bf7f000000000000000000000000d8863d794520285185197f97215c8b8ad04e881584846135d2565b90505b92915050565b60008060006111f87f000000000000000000000000d8863d794520285185197f97215c8b8ad04e88158f8f613746565b9050600087611207578c611229565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156112b857600080fd5b505af11580156112cc573d6000803e3d6000fd5b505050506112df8f8f8f8f8f8f8f612089565b809450819550505050509b509b9950505050505050505050565b60025481565b60608142811015611357576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b6113b57f000000000000000000000000d8863d794520285185197f97215c8b8ad04e88158988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061318792505050565b915061118788888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a92506137fb915050565b6060814281101561144f576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad381686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181106114a757fe5b905060200201356001600160a01b03166001600160a01b031614611512576040805162461bcd60e51b815260206004820152601a60248201527f44796f72526f7574657256323a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b6115707f000000000000000000000000d8863d794520285185197f97215c8b8ad04e8815898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506135d292505050565b9150868260008151811061158057fe5b602002602001015111156115c55760405162461bcd60e51b81526004018080602001828103825260248152602001806150196024913960400191505060405180910390fd5b611663868660008181106115d557fe5b905060200201356001600160a01b0316336116497f000000000000000000000000d8863d794520285185197f97215c8b8ad04e88158a8a600081811061161757fe5b905060200201356001600160a01b03168b8b600181811061163457fe5b905060200201356001600160a01b0316613746565b8560008151811061165657fe5b6020026020010151613d98565b6116a282878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613f39915050565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b0316632e1a7d4d836001855103815181106116e157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561171f57600080fd5b505af1158015611733573d6000803e3d6000fd5b50505050611187848360018551038151811061174b57fe5b6020026020010151612f81565b6001546001600160a01b031633146117b7576040805162461bcd60e51b815260206004820152601760248201527f44796f72526f7574657256323a20464f5242494444454e000000000000000000604482015290519081900360640190fd5b60005b8281101561182a5781600360008686858181106117d357fe5b602090810292909201356001600160a01b031683525081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790556001016117ba565b50505050565b60008061187e7f000000000000000000000000d8863d794520285185197f97215c8b8ad04e88158d7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38613746565b905060008661188d578b6118af565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561193e57600080fd5b505af1158015611952573d6000803e3d6000fd5b505050506119648d8d8d8d8d8d611e40565b9d9c50505050505050505050505050565b80428110156119cb576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b611a0b87878787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506137fb915050565b50505050505050565b6001546001600160a01b03163314611a73576040805162461bcd60e51b815260206004820152601760248201527f44796f72526f7574657256323a20464f5242494444454e000000000000000000604482015290519081900360640190fd5b600255565b8042811015611ace576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b611a0b87878787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506132d3915050565b60608142811015611b66576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b611bc47f000000000000000000000000d8863d794520285185197f97215c8b8ad04e88153488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061318792505050565b9150611c058787878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061416c915050565b5095945050505050565b600061107884848461451a565b60608142811015611c74576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b611cd27f000000000000000000000000d8863d794520285185197f97215c8b8ad04e8815898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506135d292505050565b91508682600081518110611ce257fe5b60200260200101511115611d275760405162461bcd60e51b81526004018080602001828103825260248152602001806150196024913960400191505060405180910390fd5b611d37868660008181106115d557fe5b61118782878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613f39915050565b6001546001600160a01b03163314611dd5576040805162461bcd60e51b815260206004820152601760248201527f44796f72526f7574657256323a20464f5242494444454e000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3881565b600061107884848461460a565b60008142811015611e98576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b611ec7887f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad388989893089612089565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051919450611f6492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015611f3357600080fd5b505afa158015611f47573d6000803e3d6000fd5b505050506040513d6020811015611f5d57600080fd5b5051612dcb565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611fca57600080fd5b505af1158015611fde573d6000803e3d6000fd5b505050506111878483612f81565b8042811015612042576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b6120818686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525088925061416c915050565b505050505050565b60008082428110156120e2576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b600061210f7f000000000000000000000000d8863d794520285185197f97215c8b8ad04e88158c8c613746565b604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561218357600080fd5b505af1158015612197573d6000803e3d6000fd5b505050506040513d60208110156121ad57600080fd5b5050604080517f89afcb440000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561221357600080fd5b505af1158015612227573d6000803e3d6000fd5b505050506040513d604081101561223d57600080fd5b508051602090910151909250905060006122578e8e6146cc565b509050806001600160a01b03168e6001600160a01b03161461227a57818361227d565b82825b90975095508a8710156122c15760405162461bcd60e51b8152600401808060200182810382526023815260200180614fd36023913960400191505060405180910390fd5b898610156123005760405162461bcd60e51b8152600401808060200182810382526023815260200180614fb06023913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000d8863d794520285185197f97215c8b8ad04e881581565b60606111bf7f000000000000000000000000d8863d794520285185197f97215c8b8ad04e88158484613187565b60036020526000908152604090205460ff1681565b60008060006123c77f000000000000000000000000d8863d794520285185197f97215c8b8ad04e88158e7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38613746565b90506000876123d6578c6123f8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561248757600080fd5b505af115801561249b573d6000803e3d6000fd5b505050506124ad8e8e8e8e8e8e610f3f565b909f909e509c50505050505050505050505050565b6000806000834281101561251d576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b61252b8c8c8c8c8c8c6147c0565b9094509250600061255d7f000000000000000000000000d8863d794520285185197f97215c8b8ad04e88158e8e613746565b905061256b8d338388613d98565b6125778c338387613d98565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b1580156125cf57600080fd5b505af11580156125e3573d6000803e3d6000fd5b505050506040513d60208110156125f957600080fd5b5051949d939c50939a509198505050505050505050565b6001546001600160a01b0316331461266f576040805162461bcd60e51b815260206004820152601760248201527f44796f72526f7574657256323a20464f5242494444454e000000000000000000604482015290519081900360640190fd5b6001600160a01b0391909116600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60008060008342811015612713576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b6127418a7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad388b348c8c6147c0565b909450925060006127937f000000000000000000000000d8863d794520285185197f97215c8b8ad04e88158c7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38613746565b90506127a18b338388613d98565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156127fc57600080fd5b505af1158015612810573d6000803e3d6000fd5b50505050507f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561289557600080fd5b505af11580156128a9573d6000803e3d6000fd5b505050506040513d60208110156128bf57600080fd5b50516128c757fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561291f57600080fd5b505af1158015612933573d6000803e3d6000fd5b505050506040513d602081101561294957600080fd5b50519250348410156129615761296133853403612f81565b505096509650969350505050565b6001546001600160a01b031633146129ce576040805162461bcd60e51b815260206004820152601760248201527f44796f72526f7574657256323a20464f5242494444454e000000000000000000604482015290519081900360640190fd5b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60608142811015612a60576040805162461bcd60e51b815260206004820152601560248201527f44796f72526f7574657256323a20455850495245440000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031686866000818110612a9757fe5b905060200201356001600160a01b03166001600160a01b031614612b02576040805162461bcd60e51b815260206004820152601a60248201527f44796f72526f7574657256323a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b612b607f000000000000000000000000d8863d794520285185197f97215c8b8ad04e8815888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506135d292505050565b91503482600081518110612b7057fe5b60200260200101511115612bb55760405162461bcd60e51b81526004018080602001828103825260248152602001806150196024913960400191505060405180910390fd5b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663d0e30db083600081518110612bf157fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612c2457600080fd5b505af1158015612c38573d6000803e3d6000fd5b50505050507f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663a9059cbb612cba7f000000000000000000000000d8863d794520285185197f97215c8b8ad04e881589896000818110612c9d57fe5b905060200201356001600160a01b03168a8a600181811061163457fe5b84600081518110612cc757fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612d1e57600080fd5b505af1158015612d32573d6000803e3d6000fd5b505050506040513d6020811015612d4857600080fd5b5051612d5057fe5b612d8f82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613f39915050565b81600081518110612d9c57fe5b6020026020010151341115611c0557611c053383600081518110612dbc57fe5b60200260200101513403612f81565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310612e9457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612e57565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612ef6576040519150601f19603f3d011682016040523d82523d6000602084013e612efb565b606091505b5091509150818015612f29575080511580612f295750808060200190516020811015612f2657600080fd5b50515b612f7a576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310612feb57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612fae565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461304d576040519150601f19603f3d011682016040523d82523d6000602084013e613052565b606091505b50509050806130925760405162461bcd60e51b81526004018080602001828103825260238152602001806150646023913960400191505060405180910390fd5b505050565b60008084116130d75760405162461bcd60e51b81526004018080602001828103825260268152602001806150876026913960400191505060405180910390fd5b6000831180156130e75750600082115b6131225760405162461bcd60e51b8152600401808060200182810382526023815260200180614ff66023913960400191505060405180910390fd5b6000613136856126f263ffffffff614a6616565b9050600061314a828563ffffffff614a6616565b90506000613170836131648861271063ffffffff614a6616565b9063ffffffff614ad216565b905080828161317b57fe5b04979650505050505050565b60606002825110156131e0576040805162461bcd60e51b815260206004820152601960248201527f44796f724c6962726172793a20494e56414c49445f5041544800000000000000604482015290519081900360640190fd5b815167ffffffffffffffff811180156131f857600080fd5b50604051908082528060200260200182016040528015613222578160200160208202803683370190505b509050828160008151811061323357fe5b60200260200101818152505060005b60018351038110156132cb576000806132858786858151811061326157fe5b602002602001015187866001018151811061327857fe5b6020026020010151614b2a565b915091506132a784848151811061329857fe5b60200260200101518383613097565b8484600101815181106132b657fe5b60209081029190910101525050600101613242565b509392505050565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b03168260018451038151811061330d57fe5b60200260200101516001600160a01b031614613370576040805162461bcd60e51b815260206004820152601a60248201527f44796f72526f7574657256323a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b6133e28260008151811061338057fe5b6020026020010151336133dc7f000000000000000000000000d8863d794520285185197f97215c8b8ad04e8815866000815181106133ba57fe5b6020026020010151876001815181106133cf57fe5b6020026020010151613746565b87613d98565b6133ec8230614c04565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516000916001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3816916370a0823191602480820192602092909190829003018186803b15801561346f57600080fd5b505afa158015613483573d6000803e3d6000fd5b505050506040513d602081101561349957600080fd5b5051604080517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810183905290519192506001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad381691632e1a7d4d9160248082019260009290919082900301818387803b15801561352057600080fd5b505af1158015613534573d6000803e3d6000fd5b505060025460009250158015915061355657506000546001600160a01b031615155b156135855761271060025483028161356a57fe5b6000549190049150613585906001600160a01b031682612f81565b8481830310156135c65760405162461bcd60e51b8152600401808060200182810382526028815260200180614f886028913960400191505060405180910390fd5b61208183828403612f81565b606060028251101561362b576040805162461bcd60e51b815260206004820152601960248201527f44796f724c6962726172793a20494e56414c49445f5041544800000000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561364357600080fd5b5060405190808252806020026020018201604052801561366d578160200160208202803683370190505b509050828160018351038151811061368157fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b80156132cb576000806136e1878660018603815181106136cd57fe5b602002602001015187868151811061327857fe5b915091506137038484815181106136f457fe5b6020026020010151838361451a565b84600185038151811061371257fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016136b1565b600080600061375585856146cc565b604080517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301528084166024830152915193955091935088169163e6a4390591604480820192602092909190829003018186803b1580156137c557600080fd5b505afa1580156137d9573d6000803e3d6000fd5b505050506040513d60208110156137ef57600080fd5b50519695505050505050565b6000806000309050600060025411801561381f57506000546001600160a01b031615155b80156138a05750600360008660008151811061383757fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16806138a05750600360008660018851038151811061387857fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff165b156139b35760036000866000815181106138b657fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16156139ae576127106002548802816138f157fe5b0492506139148560008151811061390457fe5b602002602001015133308a613d98565b6139418560008151811061392457fe5b60209081029190910101516000546001600160a01b031685612dcb565b6139a78560008151811061395157fe5b602002602001015161399f7f000000000000000000000000d8863d794520285185197f97215c8b8ad04e88158860008151811061398a57fe5b6020026020010151896001815181106133cf57fe5b858a03612dcb565b5060019050825b6139b6565b50825b81613a2257613a22856000815181106139cb57fe5b602002602001015133613a1a7f000000000000000000000000d8863d794520285185197f97215c8b8ad04e881589600081518110613a0557fe5b60200260200101518a6001815181106133cf57fe5b868b03613d98565b600085600187510381518110613a3457fe5b60200260200101516001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015613a9157600080fd5b505afa158015613aa5573d6000803e3d6000fd5b505050506040513d6020811015613abb57600080fd5b50519050613ac98683614c04565b6000600254118015613ae557506000546001600160a01b031615155b8015613b6657506003600087600081518110613afd57fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff1680613b6657506003600087600189510381518110613b3e57fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff165b15613ca7576003600087600081518110613b7c57fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16613ca757600086600188510381518110613bb957fe5b60200260200101516001600160a01b03166370a08231846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015613c1657600080fd5b505afa158015613c2a573d6000803e3d6000fd5b505050506040513d6020811015613c4057600080fd5b5051600254909150612710908202049450613c7587600189510381518110613c6457fe5b602002602001015187878403612dcb565b613ca587600189510381518110613c8857fe5b60209081029190910101516000546001600160a01b031687612dcb565b505b86613d51828860018a510381518110613cbc57fe5b60200260200101516001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015613d1957600080fd5b505afa158015613d2d573d6000803e3d6000fd5b505050506040513d6020811015613d4357600080fd5b50519063ffffffff614f2f16565b1015613d8e5760405162461bcd60e51b8152600401808060200182810382526028815260200180614f886028913960400191505060405180910390fd5b5050505050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b60208310613e6957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613e2c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613ecb576040519150601f19603f3d011682016040523d82523d6000602084013e613ed0565b606091505b5091509150818015613efe575080511580613efe5750808060200190516020811015613efb57600080fd5b50515b6120815760405162461bcd60e51b81526004018080602001828103825260248152602001806150ad6024913960400191505060405180910390fd5b60005b600183510381101561182a57600080848381518110613f5757fe5b6020026020010151858460010181518110613f6e57fe5b6020026020010151915091506000613f8683836146cc565b5090506000878560010181518110613f9a57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b031614613fc857826000613fcc565b6000835b91509150600060028a51038810613fe35788614017565b6140177f000000000000000000000000d8863d794520285185197f97215c8b8ad04e8815878c8b600201815181106133cf57fe5b90506140447f000000000000000000000000d8863d794520285185197f97215c8b8ad04e88158888613746565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015614081576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156140f25781810151838201526020016140da565b50505050905090810190601f16801561411f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561414157600080fd5b505af1158015614155573d6000803e3d6000fd5b505060019099019850613f3c975050505050505050565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b0316826000815181106141a357fe5b60200260200101516001600160a01b031614614206576040805162461bcd60e51b815260206004820152601a60248201527f44796f72526f7574657256323a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b60025434906000901580159061422657506000546001600160a01b031615155b156142555761271060025483028161423a57fe5b6000549190049150614255906001600160a01b031682612f81565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663d0e30db08284036040518263ffffffff1660e01b81526004016000604051808303818588803b1580156142b257600080fd5b505af11580156142c6573d6000803e3d6000fd5b50505050507f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663a9059cbb6143407f000000000000000000000000d8863d794520285185197f97215c8b8ad04e88158760008151811061432b57fe5b6020026020010151886001815181106133cf57fe5b8385036040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561439257600080fd5b505af11580156143a6573d6000803e3d6000fd5b505050506040513d60208110156143bc57600080fd5b50516143c457fe5b6000846001865103815181106143d657fe5b60200260200101516001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561443357600080fd5b505afa158015614447573d6000803e3d6000fd5b505050506040513d602081101561445d57600080fd5b5051905061446b8585614c04565b856144dd828760018951038151811061448057fe5b60200260200101516001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015613d1957600080fd5b10156120815760405162461bcd60e51b8152600401808060200182810382526028815260200180614f886028913960400191505060405180910390fd5b600080841161455a5760405162461bcd60e51b815260040180806020018281038252602781526020018061503d6027913960400191505060405180910390fd5b60008311801561456a5750600082115b6145a55760405162461bcd60e51b8152600401808060200182810382526023815260200180614ff66023913960400191505060405180910390fd5b60006145c96127106145bd868863ffffffff614a6616565b9063ffffffff614a6616565b905060006145e36126f26145bd868963ffffffff614f2f16565b905061460060018284816145f357fe5b049063ffffffff614ad216565b9695505050505050565b6000808411614660576040805162461bcd60e51b815260206004820181905260248201527f44796f724c6962726172793a20494e53554646494349454e545f414d4f554e54604482015290519081900360640190fd5b6000831180156146705750600082115b6146ab5760405162461bcd60e51b8152600401808060200182810382526023815260200180614ff66023913960400191505060405180910390fd5b826146bc858463ffffffff614a6616565b816146c357fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415614736576040805162461bcd60e51b815260206004820181905260248201527f44796f724c6962726172793a204944454e544943414c5f414444524553534553604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b031610614756578284614759565b83835b90925090506001600160a01b0382166147b9576040805162461bcd60e51b815260206004820152601960248201527f44796f724c6962726172793a205a45524f5f4144445245535300000000000000604482015290519081900360640190fd5b9250929050565b604080517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301529151600092839283927f000000000000000000000000d8863d794520285185197f97215c8b8ad04e88159092169163e6a4390591604480820192602092909190829003018186803b15801561485357600080fd5b505afa158015614867573d6000803e3d6000fd5b505050506040513d602081101561487d57600080fd5b50516001600160a01b0316141561494957604080517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152898116602483015291517f000000000000000000000000d8863d794520285185197f97215c8b8ad04e88159092169163c9c65396916044808201926020929091908290030181600087803b15801561491c57600080fd5b505af1158015614930573d6000803e3d6000fd5b505050506040513d602081101561494657600080fd5b50505b6000806149777f000000000000000000000000d8863d794520285185197f97215c8b8ad04e88158b8b614b2a565b91509150816000148015614989575080155b1561499957879350869250614a59565b60006149a689848461460a565b90508781116149f957858110156149ee5760405162461bcd60e51b8152600401808060200182810382526023815260200180614fb06023913960400191505060405180910390fd5b889450925082614a57565b6000614a0689848661460a565b905089811115614a1257fe5b87811015614a515760405162461bcd60e51b8152600401808060200182810382526023815260200180614fd36023913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6000811580614a8157505080820282828281614a7e57fe5b04145b6111c2576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b808201828110156111c2576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b6000806000614b3985856146cc565b509050614b47868686613746565b50600080614b56888888613746565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614b8e57600080fd5b505afa158015614ba2573d6000803e3d6000fd5b505050506040513d6060811015614bb857600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0387811690841614614bf2578082614bf5565b81815b90999098509650505050505050565b60005b600183510381101561309257600080848381518110614c2257fe5b6020026020010151858460010181518110614c3957fe5b6020026020010151915091506000614c5183836146cc565b5090506000614c817f000000000000000000000000d8863d794520285185197f97215c8b8ad04e88158585613746565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614cc257600080fd5b505afa158015614cd6573d6000803e3d6000fd5b505050506040513d6060811015614cec57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a811690891614614d29578284614d2c565b83835b91509150614d8a828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015613d1957600080fd5b9550614d97868383613097565b945050505050600080856001600160a01b0316886001600160a01b031614614dc157826000614dc5565b6000835b91509150600060028c51038a10614ddc578a614e10565b614e107f000000000000000000000000d8863d794520285185197f97215c8b8ad04e8815898e8d600201815181106133cf57fe5b60408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614eb3578181015183820152602001614e9b565b50505050905090810190601f168015614ee05780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614f0257600080fd5b505af1158015614f16573d6000803e3d6000fd5b50506001909b019a50614c079950505050505050505050565b808203828111156111c2576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fdfe44796f72526f7574657256323a20494e53554646494349454e545f4f55545055545f414d4f554e5444796f72526f7574657256323a20494e53554646494349454e545f425f414d4f554e5444796f72526f7574657256323a20494e53554646494349454e545f415f414d4f554e5444796f724c6962726172793a20494e53554646494349454e545f4c495155494449545944796f72526f7574657256323a204558434553534956455f494e5055545f414d4f554e5444796f724c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c454444796f724c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a2646970667358221220e3bc79b5858dd8f87fb1310631dc1e8a8fbc01a0eddda4e9360beba469079ac864736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d8863d794520285185197f97215c8b8ad04e8815000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3800000000000000000000000074a4bb09aad5da75ca3f2f2c0168d2b40f2ab6590000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _factory (address): 0xd8863d794520285185197F97215c8B8AD04E8815
Arg [1] : _WETH (address): 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38
Arg [2] : _feeToSetter (address): 0x74A4Bb09AAD5da75CA3F2F2C0168D2B40F2aB659
Arg [3] : _feeTo (address): 0x0000000000000000000000000000000000000000
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000d8863d794520285185197f97215c8b8ad04e8815
Arg [1] : 000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38
Arg [2] : 00000000000000000000000074a4bb09aad5da75ca3f2f2c0168d2b40f2ab659
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
16078:21273:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16830:10;-1:-1:-1;;;;;16844:4:0;16830:18;;16823:26;;;;16078:21273;;12:1:-1;9;2:12;16156:20:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16156:20:0;;;:::i;:::-;;;;-1:-1:-1;;;;;16156:20:0;;;;;;;;;;;;;;21888:673;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21888:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21888:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;36315:257;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36315:257:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36315:257:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;16183:26;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16183:26:0;;;:::i;28497:417::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28497:417:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28497:417:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;28497:417:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28497:417:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28497:417:0;;-1:-1:-1;28497:417:0;-1:-1:-1;;;;;;28497:417:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28497:417:0;;;;;;;;;;;;;;;;;37100:248;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37100:248:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;37100:248:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;37100:248:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;37100:248:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;37100:248:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;37100:248:0;;-1:-1:-1;37100:248:0;;-1:-1:-1;;;;;37100:248:0:i;22567:667::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22567:667:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22567:667:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16216:31::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16216:31:0;;;:::i;26224:425::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26224:425:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26224:425:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26224:425:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26224:425:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26224:425:0;;-1:-1:-1;26224:425:0;-1:-1:-1;;;;;;26224:425:0;;;;;;;;:::i;27677:812::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27677:812:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27677:812:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27677:812:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27677:812:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27677:812:0;;-1:-1:-1;27677:812:0;-1:-1:-1;;;;;;27677:812:0;;;;;;;;:::i;17256:274::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17256:274:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;17256:274:0;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;17256:274:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;17256:274:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;17256:274:0;;-1:-1:-1;17256:274:0;-1:-1:-1;17256:274:0;;;;:::i;24684:708::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24684:708:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;24684:708:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33152:351::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33152:351:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33152:351:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;33152:351:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33152:351:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33152:351:0;;-1:-1:-1;33152:351:0;-1:-1:-1;;;;;;33152:351:0;;;;;;;;:::i;17725:172::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17725:172:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17725:172:0;;:::i;35735:345::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35735:345:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;35735:345:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;35735:345:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35735:345:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;35735:345:0;;-1:-1:-1;35735:345:0;-1:-1:-1;;;;;;35735:345:0;;;;;;;;:::i;27258:411::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27258:411:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27258:411:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27258:411:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27258:411:0;;-1:-1:-1;27258:411:0;-1:-1:-1;;;;;;27258:411:0;;;;;;;;:::i;36580:256::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36580:256:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36580:256:0;;;;;;;;;;;;:::i;26657:593::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26657:593:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26657:593:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26657:593:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26657:593:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26657:593:0;;-1:-1:-1;26657:593:0;-1:-1:-1;;;;;;26657:593:0;;;;;;;;:::i;17076:172::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17076:172:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17076:172:0;-1:-1:-1;;;;;17076:172:0;;:::i;16302:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16302:38:0;;;:::i;36124:183::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36124:183:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36124:183:0;;;;;;;;;;;;:::i;23978:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23978:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23978:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;34452:321::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;34452:321:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;34452:321:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34452:321:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34452:321:0;;-1:-1:-1;34452:321:0;-1:-1:-1;;;;;;34452:321:0;;;;;;;;:::i;21043:839::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21043:839:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21043:839:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16254:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16254:41:0;;;:::i;36844:248::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36844:248:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;36844:248:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;36844:248:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;36844:248:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;36844:248:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;36844:248:0;;-1:-1:-1;36844:248:0;;-1:-1:-1;;;;;36844:248:0:i;16347:43::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16347:43:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16347:43:0;-1:-1:-1;;;;;16347:43:0;;:::i;:::-;;;;;;;;;;;;;;;;;;23240:659;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23240:659:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23240:659:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19302:728::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19302:728:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19302:728:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;17538:179;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17538:179:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;17538:179:0;;;;;;;;;;:::i;20036:964::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20036:964:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16920:148::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16920:148:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16920:148:0;-1:-1:-1;;;;;16920:148:0;;:::i;28922:794::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28922:794:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;28922:794:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28922:794:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28922:794:0;;-1:-1:-1;28922:794:0;-1:-1:-1;;;;;;28922:794:0;;;;;;;;:::i;16156:20::-;;;-1:-1:-1;;;;;16156:20:0;;:::o;21888:673::-;22125:16;22143:14;22106:8;16461:15;16449:8;:27;;16441:61;;;;;-1:-1:-1;;;16441:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;22197:196:::1;22227:5;22247:4;22266:9;22290:14;22319:12;22354:4;22374:8;22197:15;:196::i;:::-;22170:223:::0;;-1:-1:-1;22170:223:0;-1:-1:-1;22404:51:0::1;22432:5:::0;22439:2;22170:223;22404:27:::1;:51::i;:::-;22472:4;-1:-1:-1::0;;;;;22466:20:0::1;;22487:9;22466:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22466:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22466:31:0;;;;22508:45;22539:2;22543:9;22508:30;:45::i;:::-;21888:673:::0;;;;;;;;;;:::o;36315:257::-;36468:14;36507:57;36532:8;36542:9;36553:10;36507:24;:57::i;:::-;36500:64;36315:257;-1:-1:-1;;;;36315:257:0:o;16183:26::-;;;-1:-1:-1;;;;;16183:26:0;;:::o;28497:417::-;28711:21;28683:8;16461:15;16449:8;:27;;16441:61;;;;;-1:-1:-1;;;16441:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28760:50:::1;28786:7;28795:8;28805:4;;28760:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28760:25:0::1;::::0;-1:-1:-1;;;28760:50:0:i:1;:::-;28750:60;;28821:85;28873:8;28883:12;28897:4;;28821:85;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28903:2:0;;-1:-1:-1;28821:51:0::1;::::0;-1:-1:-1;;28821:85:0:i:1;:::-;28497:417:::0;;;;;;;;;:::o;37100:248::-;37244:21;37290:50;37315:7;37324:9;37335:4;37290:24;:50::i;:::-;37283:57;;37100:248;;;;;:::o;22567:667::-;22873:12;22887;22912;22927:44;22947:7;22956:6;22964;22927:19;:44::i;:::-;22912:59;;22982:10;22995;:33;;23019:9;22995:33;;;23013:2;22995:33;23039:75;;;;;;23062:10;23039:75;;;;23082:4;23039:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22982:46;;-1:-1:-1;;;;;;23039:22:0;;;;;:75;;;;;-1:-1:-1;;23039:75:0;;;;;;;;-1:-1:-1;23039:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;23039:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23039:75:0;;;;23146:80;23162:6;23170;23178:9;23189:10;23201;23213:2;23217:8;23146:15;:80::i;:::-;23125:101;;;;;;;;22567:667;;;;;;;;;;;;;;;;:::o;16216:31::-;;;;:::o;26224:425::-;26448:21;26429:8;16461:15;16449:8;:27;;16441:61;;;;;-1:-1:-1;;;16441:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26492:50:::1;26518:7;26527:8;26537:4;;26492:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26492:25:0::1;::::0;-1:-1:-1;;;26492:50:0:i:1;:::-;26482:60;;26553:88;26608:8;26618:12;26632:4;;26553:88;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26638:2:0;;-1:-1:-1;26553:54:0::1;::::0;-1:-1:-1;;26553:88:0:i:1;27677:812::-:0;27891:21;27863:8;16461:15;16449:8;:27;;16441:61;;;;;-1:-1:-1;;;16441:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27963:4:0::1;27938:29;:4:::0;;27943:15;;;27938:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27938:21:0::1;-1:-1:-1::0;;;;;27938:29:0::1;;27930:68;;;::::0;;-1:-1:-1;;;27930:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28019:50;28044:7;28053:9;28064:4;;28019:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28019:24:0::1;::::0;-1:-1:-1;;;28019:50:0:i:1;:::-;28009:60;;28102:11;28088:7;28096:1;28088:10;;;;;;;;;;;;;;:25;;28080:74;;;;-1:-1:-1::0;;;28080:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28165:136;28211:4;;28216:1;28211:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28211:7:0::1;28220:10;28232:46;28252:7;28261:4;;28266:1;28261:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28261:7:0::1;28270:4;;28275:1;28270:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28270:7:0::1;28232:19;:46::i;:::-;28280:7;28288:1;28280:10;;;;;;;;;;;;;;28165:31;:136::i;:::-;28312:35;28318:7;28327:4;;28312:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28341:4:0::1;::::0;-1:-1:-1;28312:5:0::1;::::0;-1:-1:-1;;28312:35:0:i:1;:::-;28364:4;-1:-1:-1::0;;;;;28358:20:0::1;;28379:7;28404:1;28387:7;:14;:18;28379:27;;;;;;;;;;;;;;28358:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28358:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28358:49:0;;;;28418:63;28449:2;28453:7;28478:1;28461:7;:14;:18;28453:27;;;;;;;;;;;;;;28418:30;:63::i;17256:274::-:0;17371:11;;-1:-1:-1;;;;;17371:11:0;17357:10;:25;17349:61;;;;;-1:-1:-1;;;17349:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17425:6;17421:102;17433:23;;;17421:102;;;17508:3;17477:11;:28;17489:12;;17502:1;17489:15;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17489:15:0;17477:28;;-1:-1:-1;17477:28:0;;;;;;;;-1:-1:-1;17477:28:0;:34;;;;;;;;;;;;;-1:-1:-1;17458:3:0;17421:102;;;;17256:274;;;:::o;24684:708::-;25002:14;25029:12;25044:41;25064:7;25073:5;25080:4;25044:19;:41::i;:::-;25029:56;;25096:10;25109;:33;;25133:9;25109:33;;;25127:2;25109:33;25153:75;;;;;;25176:10;25153:75;;;;25196:4;25153:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25096:46;;-1:-1:-1;;;;;;25153:22:0;;;;;:75;;;;;-1:-1:-1;;25153:75:0;;;;;;;;-1:-1:-1;25153:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;25153:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25153:75:0;;;;25251:133;25313:5;25320:9;25331:14;25347:12;25361:2;25365:8;25251:47;:133::i;:::-;25239:145;24684:708;-1:-1:-1;;;;;;;;;;;;;24684:708:0:o;33152:351::-;33386:8;16461:15;16449:8;:27;;16441:61;;;;;-1:-1:-1;;;16441:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33407:88:::1;33462:8;33472:12;33486:4;;33407:88;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33492:2:0;;-1:-1:-1;33407:54:0::1;::::0;-1:-1:-1;;33407:88:0:i:1;:::-;33152:351:::0;;;;;;;:::o;17725:172::-;17813:11;;-1:-1:-1;;;;;17813:11:0;17799:10;:25;17791:61;;;;;-1:-1:-1;;;17791:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17863:11;:26;17725:172::o;35735:345::-;35966:8;16461:15;16449:8;:27;;16441:61;;;;;-1:-1:-1;;;16441:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35987:85:::1;36039:8;36049:12;36063:4;;35987:85;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;36069:2:0;;-1:-1:-1;35987:51:0::1;::::0;-1:-1:-1;;35987:85:0:i:1;27258:411::-:0;27474:21;27446:8;16461:15;16449:8;:27;;16441:61;;;;;-1:-1:-1;;;16441:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27523:51:::1;27549:7;27558:9;27569:4;;27523:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27523:25:0::1;::::0;-1:-1:-1;;;27523:51:0:i:1;:::-;27513:61;;27585:76;27637:12;27652:4;;27585:76;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27658:2:0;;-1:-1:-1;27585:51:0::1;::::0;-1:-1:-1;;27585:76:0:i:1;:::-;27258:411:::0;;;;;;;;:::o;36580:256::-;36733:13;36771:57;36795:9;36806;36817:10;36771:23;:57::i;26657:593::-;26881:21;26862:8;16461:15;16449:8;:27;;16441:61;;;;;-1:-1:-1;;;16441:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26925:50:::1;26950:7;26959:9;26970:4;;26925:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26925:24:0::1;::::0;-1:-1:-1;;;26925:50:0:i:1;:::-;26915:60;;27008:11;26994:7;27002:1;26994:10;;;;;;;;;;;;;;:25;;26986:74;;;;-1:-1:-1::0;;;26986:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27071:136;27117:4;;27122:1;27117:7;;;;;;27071:136;27218:24;27224:7;27233:4;;27218:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27239:2:0;;-1:-1:-1;27218:5:0::1;::::0;-1:-1:-1;;27218:24:0:i:1;17076:172::-:0;17164:11;;-1:-1:-1;;;;;17164:11:0;17150:10;:25;17142:61;;;;;-1:-1:-1;;;17142:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17214:11;:26;;;;-1:-1:-1;;;;;17214:26:0;;;;;;;;;;17076:172::o;16302:38::-;;;:::o;36124:183::-;36221:12;36253:46;36271:7;36280:8;36290;36253:17;:46::i;23978:700::-;24244:14;24225:8;16461:15;16449:8;:27;;16441:61;;;;;-1:-1:-1;;;16441:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24287:196:::1;24317:5;24337:4;24356:9;24380:14;24409:12;24444:4;24464:8;24287:15;:196::i;:::-;24533:38;::::0;;;;;24565:4:::1;24533:38;::::0;::::1;::::0;;;24271:212;;-1:-1:-1;24494:78:0::1;::::0;-1:-1:-1;24522:5:0;;24529:2;;-1:-1:-1;;;;;24533:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;24533:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24533:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24533:38:0;24494:27:::1;:78::i;:::-;24589:4;-1:-1:-1::0;;;;;24583:20:0::1;;24604:9;24583:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24583:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24583:31:0;;;;24625:45;24656:2;24660:9;24625:30;:45::i;34452:321::-:0;34668:8;16461:15;16449:8;:27;;16441:61;;;;;-1:-1:-1;;;16441:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;34689:76:::1;34741:12;34756:4;;34689:76;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;34762:2:0;;-1:-1:-1;34689:51:0::1;::::0;-1:-1:-1;;34689:76:0:i:1;:::-;34452:321:::0;;;;;;:::o;21043:839::-;21297:12;21311;21278:8;16461:15;16449:8;:27;;16441:61;;;;;-1:-1:-1;;;16441:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21336:12:::1;21351:44;21371:7;21380:6;21388;21351:19;:44::i;:::-;21406:57;::::0;;;;;21435:10:::1;21406:57;::::0;::::1;::::0;-1:-1:-1;;;;;21406:28:0;::::1;:57:::0;;;;;;;;;;;;;;21336:59;;-1:-1:-1;21406:28:0;;::::1;::::0;:57;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;21406:28:0;:57;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;21406:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21406:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;21531:24:0::1;::::0;;;;;-1:-1:-1;;;;;21531:24:0;;::::1;;::::0;::::1;::::0;;;21501:12:::1;::::0;;;21531:20;;::::1;::::0;::::1;::::0;:24;;;;;;;;;;;21501:12;21531:20;:24;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;21531:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21531:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21531:24:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;21531:24:0;-1:-1:-1;21567:14:0::1;21586:38;21609:6:::0;21617;21586:22:::1;:38::i;:::-;21566:58;;;21666:6;-1:-1:-1::0;;;;;21656:16:0::1;:6;-1:-1:-1::0;;;;;21656:16:0::1;;:58;;21697:7;21706;21656:58;;;21676:7;21685;21656:58;21635:79:::0;;-1:-1:-1;21635:79:0;-1:-1:-1;21733:21:0;;::::1;;21725:69;;;;-1:-1:-1::0;;;21725:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21824:10;21813:7;:21;;21805:69;;;;-1:-1:-1::0;;;21805:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16513:1;;;;21043:839:::0;;;;;;;;;;;:::o;16254:41::-;;;:::o;36844:248::-;36988:21;37034:50;37060:7;37069:8;37079:4;37034:25;:50::i;16347:43::-;;;;;;;;;;;;;;;:::o;23240:659::-;23529:16;23547:14;23574:12;23589:41;23609:7;23618:5;23625:4;23589:19;:41::i;:::-;23574:56;;23641:10;23654;:33;;23678:9;23654:33;;;23672:2;23654:33;23698:75;;;;;;23721:10;23698:75;;;;23741:4;23698:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23641:46;;-1:-1:-1;;;;;;23698:22:0;;;;;:75;;;;;-1:-1:-1;;23698:75:0;;;;;;;;-1:-1:-1;23698:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;23698:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23698:75:0;;;;23811:80;23830:5;23837:9;23848:14;23864:12;23878:2;23882:8;23811:18;:80::i;:::-;23784:107;;;;-1:-1:-1;23240:659:0;-1:-1:-1;;;;;;;;;;;;;23240:659:0:o;19302:728::-;19590:12;19604;19618:14;19571:8;16461:15;16449:8;:27;;16441:61;;;;;-1:-1:-1;;;16441:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19666:85:::1;19680:6;19688;19696:14;19712;19728:10;19740;19666:13;:85::i;:::-;19645:106:::0;;-1:-1:-1;19645:106:0;-1:-1:-1;19762:12:0::1;19777:44;19797:7;19806:6:::0;19814;19777:19:::1;:44::i;:::-;19762:59;;19832:66;19864:6;19872:10;19884:4;19890:7;19832:31;:66::i;:::-;19909;19941:6;19949:10;19961:4;19967:7;19909:31;:66::i;:::-;20008:4;-1:-1:-1::0;;;;;19998:20:0::1;;20019:2;19998:24;;;;;;;;;;;;;-1:-1:-1::0;;;;;19998:24:0::1;-1:-1:-1::0;;;;;19998:24:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19998:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19998:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19998:24:0;19302:728;;;;-1:-1:-1;19998:24:0;;-1:-1:-1;19302:728:0;;-1:-1:-1;;;;;;;;;19302:728:0:o;17538:179::-;17632:11;;-1:-1:-1;;;;;17632:11:0;17618:10;:25;17610:61;;;;;-1:-1:-1;;;17610:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17682:21:0;;;;;;;;:11;:21;;;;;:27;;;;;;;;;;;;;17538:179::o;20036:964::-;20289:16;20307:14;20323;20270:8;16461:15;16449:8;:27;;16441:61;;;;;-1:-1:-1;;;16441:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20377:176:::1;20405:5;20425:4;20444:18;20477:9;20501:14;20530:12;20377:13;:176::i;:::-;20350:203:::0;;-1:-1:-1;20350:203:0;-1:-1:-1;20564:12:0::1;20579:41;20599:7;20608:5:::0;20615:4:::1;20579:19;:41::i;:::-;20564:56;;20631:69;20663:5;20670:10;20682:4;20688:11;20631:31;:69::i;:::-;20717:4;-1:-1:-1::0;;;;;20711:19:0::1;;20738:9;20711:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20711:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20711:39:0;;;;;20774:4;-1:-1:-1::0;;;;;20768:20:0::1;;20789:4;20795:9;20768:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;20768:37:0::1;-1:-1:-1::0;;;;;20768:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20768:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20768:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20768:37:0;20761:45:::1;;;;20839:4;-1:-1:-1::0;;;;;20829:20:0::1;;20850:2;20829:24;;;;;;;;;;;;;-1:-1:-1::0;;;;;20829:24:0::1;-1:-1:-1::0;;;;;20829:24:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20829:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20829:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20829:24:0;;-1:-1:-1;20904:9:0::1;:21:::0;-1:-1:-1;20900:92:0::1;;;20927:65;20958:10;20982:9;20970;:21;20927:30;:65::i;:::-;16513:1;20036:964:::0;;;;;;;;;;;:::o;16920:148::-;16996:11;;-1:-1:-1;;;;;16996:11:0;16982:10;:25;16974:61;;;;;-1:-1:-1;;;16974:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17046:5;:14;;;;-1:-1:-1;;;;;17046:14:0;;;;;;;;;;16920:148::o;28922:794::-;29135:21;29107:8;16461:15;16449:8;:27;;16441:61;;;;;-1:-1:-1;;;16441:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29193:4:::1;-1:-1:-1::0;;;;;29182:15:0::1;:4;;29187:1;29182:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29182:7:0::1;-1:-1:-1::0;;;;;29182:15:0::1;;29174:54;;;::::0;;-1:-1:-1;;;29174:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;29249:50;29274:7;29283:9;29294:4;;29249:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29249:24:0::1;::::0;-1:-1:-1;;;29249:50:0:i:1;:::-;29239:60;;29332:9;29318:7;29326:1;29318:10;;;;;;;;;;;;;;:23;;29310:72;;;;-1:-1:-1::0;;;29310:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29399:4;-1:-1:-1::0;;;;;29393:19:0::1;;29420:7;29428:1;29420:10;;;;;;;;;;;;;;29393:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29393:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29393:40:0;;;;;29457:4;-1:-1:-1::0;;;;;29451:20:0::1;;29472:46;29492:7;29501:4;;29506:1;29501:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29501:7:0::1;29510:4;;29515:1;29510:7;;;;;;29472:46;29520:7;29528:1;29520:10;;;;;;;;;;;;;;29451:80;;;;;;;;;;;;;-1:-1:-1::0;;;;;29451:80:0::1;-1:-1:-1::0;;;;;29451:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29451:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29451:80:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29451:80:0;29444:88:::1;;;;29543:24;29549:7;29558:4;;29543:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29564:2:0;;-1:-1:-1;29543:5:0::1;::::0;-1:-1:-1;;29543:24:0:i:1;:::-;29630:7;29638:1;29630:10;;;;;;;;;;;;;;29618:9;:22;29614:94;;;29642:66;29673:10;29697:7;29705:1;29697:10;;;;;;;;;;;;;;29685:9;:22;29642:30;:66::i;670:361::-:0;865:45;;;-1:-1:-1;;;;;865:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;865:45:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;865:45:0;179:29:-1;160:49;;854:57:0;;;;819:12;;833:17;;854:10;;;;865:45;854:57;;;25:18:-1;854:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;854:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;818:93:0;;;;930:7;:57;;;;-1:-1:-1;942:11:0;;:16;;:44;;;973:4;962:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;962:24:0;942:44;922:101;;;;;-1:-1:-1;;;922:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;670:361;;;;;:::o;1449:195::-;1557:12;;;1519;1557;;;;;;;;;-1:-1:-1;;;;;1536:7:0;;;1550:5;;1536:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1536:34:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1518:52:0;;;1589:7;1581:55;;;;-1:-1:-1;;;1581:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1449:195;;;:::o;12614:509::-;12707:14;12753:1;12742:8;:12;12734:63;;;;-1:-1:-1;;;12734:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12828:1;12816:9;:13;:31;;;;;12846:1;12833:10;:14;12816:31;12808:79;;;;-1:-1:-1;;;12808:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12898:20;12921:18;:8;12934:4;12921:18;:12;:18;:::i;:::-;12898:41;-1:-1:-1;12950:14:0;12967:31;12898:41;12987:10;12967:31;:19;:31;:::i;:::-;12950:48;-1:-1:-1;13009:16:0;13028:41;13053:15;13028:20;:9;13042:5;13028:20;:13;:20;:::i;:::-;:24;:41;:24;:41;:::i;:::-;13009:60;;13104:11;13092:9;:23;;;;;;;12614:509;-1:-1:-1;;;;;;;12614:509:0:o;13790:506::-;13891:21;13948:1;13933:4;:11;:16;;13925:54;;;;;-1:-1:-1;;;13925:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14011:4;:11;14000:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14000:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14000:23:0;;13990:33;;14047:8;14034:7;14042:1;14034:10;;;;;;;;;;;;;:21;;;;;14071:6;14066:223;14097:1;14083:4;:11;:15;14079:1;:19;14066:223;;;14121:14;14137:15;14156:42;14168:7;14177:4;14182:1;14177:7;;;;;;;;;;;;;;14186:4;14191:1;14195;14191:5;14186:11;;;;;;;;;;;;;;14156;:42::i;:::-;14120:78;;;;14230:47;14243:7;14251:1;14243:10;;;;;;;;;;;;;;14255:9;14266:10;14230:12;:47::i;:::-;14213:7;14221:1;14225;14221:5;14213:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;14100:3:0;;14066:223;;;;13790:506;;;;;:::o;34781:946::-;35008:4;-1:-1:-1;;;;;34983:29:0;:4;35002:1;34988:4;:11;:15;34983:21;;;;;;;;;;;;;;-1:-1:-1;;;;;34983:29:0;;34975:68;;;;;-1:-1:-1;;;34975:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35054:134;35100:4;35105:1;35100:7;;;;;;;;;;;;;;35109:10;35121:46;35141:7;35150:4;35155:1;35150:7;;;;;;;;;;;;;;35159:4;35164:1;35159:7;;;;;;;;;;;;;;35121:19;:46::i;:::-;35169:8;35054:31;:134::i;:::-;35199:57;35236:4;35250;35199:34;:57::i;:::-;35284:37;;;;;;35315:4;35284:37;;;;;;35267:14;;-1:-1:-1;;;;;35291:4:0;35284:22;;;;:37;;;;;;;;;;;;;;;:22;:37;;;2:2:-1;;;;27:1;24;17:12;2:2;35284:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35284:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35284:37:0;35332:31;;;;;;;;;;;;;;35284:37;;-1:-1:-1;;;;;;35338:4:0;35332:20;;;;:31;;;;;-1:-1:-1;;35332:31:0;;;;;;;;-1:-1:-1;35332:20:0;:31;;;2:2:-1;;;;27:1;24;17:12;2:2;35332:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;35400:11:0;;35374:8;;-1:-1:-1;35400:15:0;;;;-1:-1:-1;35400:38:0;;-1:-1:-1;35436:1:0;35419:5;-1:-1:-1;;;;;35419:5:0;:19;;35400:38;35397:164;;;35486:5;35472:11;;35460:9;:23;:31;;;;;35538:5;;35460:31;;;;-1:-1:-1;35506:43:0;;-1:-1:-1;;;;;35538:5:0;35460:31;35506:30;:43::i;:::-;35598:12;35591:3;35579:9;:15;:31;;35571:84;;;;-1:-1:-1;;;35571:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35666:51;35697:2;35713:3;35701:9;:15;35666:30;:51::i;14377:527::-;14478:21;14535:1;14520:4;:11;:16;;14512:54;;;;;-1:-1:-1;;;14512:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14598:4;:11;14587:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14587:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14587:23:0;;14577:33;;14651:9;14621:7;14646:1;14629:7;:14;:18;14621:27;;;;;;;;;;;;;;;;;:39;14685:11;;:15;;14671:226;14702:5;;14671:226;;14730:14;14746:15;14765:42;14777:7;14786:4;14795:1;14791;:5;14786:11;;;;;;;;;;;;;;14799:4;14804:1;14799:7;;;;;;;14765:42;14729:78;;;;14839:46;14851:7;14859:1;14851:10;;;;;;;;;;;;;;14863:9;14874:10;14839:11;:46::i;:::-;14822:7;14834:1;14830;:5;14822:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;14709:3:0;;14671:226;;11031:550;11120:12;11146:14;11162;11180:26;11191:6;11199;11180:10;:26::i;:::-;11226:45;;;;;;-1:-1:-1;;;;;11226:45:0;;;;;;;;;;;;;;;;11145:61;;-1:-1:-1;11145:61:0;;-1:-1:-1;11226:29:0;;;;;:45;;;;;;;;;;;;;;;:29;:45;;;2:2:-1;;;;27:1;24;17:12;2:2;11226:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11226:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11226:45:0;;11031:550;-1:-1:-1;;;;;;11031:550:0:o;31057:2087::-;31345:8;31364:18;31393:17;31421:4;31393:33;;31542:1;31528:11;;:15;:38;;;;-1:-1:-1;31564:1:0;31547:5;-1:-1:-1;;;;;31547:5:0;:19;;31528:38;:102;;;;;31571:11;:20;31583:4;31588:1;31583:7;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31571:20:0;;;;;;;;;;;-1:-1:-1;31571:20:0;;;;;:58;;;31595:11;:34;31607:4;31626:1;31612:4;:11;:15;31607:21;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31595:34:0;;;;;;;;;;;-1:-1:-1;31595:34:0;;;;31571:58;31525:629;;;31649:11;:20;31661:4;31666:1;31661:7;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31649:20:0;;;;;;;;;;;-1:-1:-1;31649:20:0;;;;31646:452;;;31720:5;31706:11;;31695:8;:22;:30;;;;;;31689:36;;31744:79;31777:4;31782:1;31777:7;;;;;;;;;;;;;;31786:10;31806:4;31814:8;31744:31;:79::i;:::-;31842:48;31870:4;31875:1;31870:7;;;;;;;;;;;;;;;;;;31879:5;;-1:-1:-1;;;;;31879:5:0;31886:3;31842:27;:48::i;:::-;31909:101;31937:4;31942:1;31937:7;;;;;;;;;;;;;;31947:46;31967:7;31976:4;31981:1;31976:7;;;;;;;;;;;;;;31985:4;31990:1;31985:7;;;;;;;31947:46;32006:3;31995:8;:14;31909:27;:101::i;:::-;-1:-1:-1;32045:4:0;;-1:-1:-1;32080:2:0;31646:452;31525:629;;;-1:-1:-1;32140:2:0;31525:629;32168:13;32164:163;;32197:118;32230:4;32235:1;32230:7;;;;;;;;;;;;;;32239:10;32251:46;32271:7;32280:4;32285:1;32280:7;;;;;;;;;;;;;;32289:4;32294:1;32289:7;;;;;;;32251:46;32310:3;32299:8;:14;32197:31;:118::i;:::-;32337:18;32365:4;32384:1;32370:4;:11;:15;32365:21;;;;;;;;;;;;;;-1:-1:-1;;;;;32358:39:0;;32398:2;32358:43;;;;;;;;;;;;;-1:-1:-1;;;;;32358:43:0;-1:-1:-1;;;;;32358:43:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32358:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32358:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32358:43:0;;-1:-1:-1;32412:51:0;32447:4;32453:9;32412:34;:51::i;:::-;32493:1;32479:11;;:15;:39;;;;-1:-1:-1;32516:1:0;32499:5;-1:-1:-1;;;;;32499:5:0;:19;;32479:39;:103;;;;;32523:11;:20;32535:4;32540:1;32535:7;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32523:20:0;;;;;;;;;;;-1:-1:-1;32523:20:0;;;;;:58;;;32547:11;:34;32559:4;32578:1;32564:4;:11;:15;32559:21;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32547:34:0;;;;;;;;;;;-1:-1:-1;32547:34:0;;;;32523:58;32476:482;;;32602:11;:20;32614:4;32619:1;32614:7;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32602:20:0;;;;;;;;;;;-1:-1:-1;32602:20:0;;;;32598:349;;32642:12;32664:4;32683:1;32669:4;:11;:15;32664:21;;;;;;;;;;;;;;-1:-1:-1;;;;;32657:39:0;;32697:9;32657:50;;;;;;;;;;;;;-1:-1:-1;;;;;32657:50:0;-1:-1:-1;;;;;32657:50:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32657:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32657:50:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32657:50:0;32742:11;;32657:50;;-1:-1:-1;32756:5:0;;32732:21;;:29;32726:35;;32780:70;32808:4;32827:1;32813:4;:11;:15;32808:21;;;;;;;;;;;;;;32831:2;32846:3;32836:7;:13;32780:27;:70::i;:::-;32869:62;32897:4;32916:1;32902:4;:11;:15;32897:21;;;;;;;;;;;;;;;;;;32920:5;;-1:-1:-1;;;;;32920:5:0;32927:3;32869:27;:62::i;:::-;32598:349;;33056:12;32990:62;33038:13;32997:4;33016:1;33002:4;:11;:15;32997:21;;;;;;;;;;;;;;-1:-1:-1;;;;;32990:39:0;;33030:2;32990:43;;;;;;;;;;;;;-1:-1:-1;;;;;32990:43:0;-1:-1:-1;;;;;32990:43:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32990:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32990:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32990:43:0;;:62;:47;:62;:::i;:::-;:78;;32968:168;;;;-1:-1:-1;;;32968:168:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31057:2087;;;;;;;;:::o;1039:402::-;1264:51;;;-1:-1:-1;;;;;1264:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1264:51:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;1264:51:0;179:29:-1;160:49;;1253:63:0;;;;1218:12;;1232:17;;1253:10;;;;1264:51;1253:63;;;25:18:-1;1253:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1253:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1217:99:0;;;;1335:7;:57;;;;-1:-1:-1;1347:11:0;;:16;;:44;;;1378:4;1367:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1367:24:0;1347:44;1327:106;;;;-1:-1:-1;;;1327:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25503:715;25610:6;25605:606;25636:1;25622:4;:11;:15;25618:1;:19;25605:606;;;25660:13;25675:14;25694:4;25699:1;25694:7;;;;;;;;;;;;;;25703:4;25708:1;25712;25708:5;25703:11;;;;;;;;;;;;;;25659:56;;;;25731:14;25750:37;25773:5;25780:6;25750:22;:37::i;:::-;25730:57;;;25802:14;25819:7;25827:1;25831;25827:5;25819:14;;;;;;;;;;;;;;25802:31;;25849:15;25866;25894:6;-1:-1:-1;;;;;25885:15:0;:5;-1:-1:-1;;;;;25885:15:0;;:61;;25927:9;25943:1;25885:61;;;25909:1;25913:9;25885:61;25848:98;;;;25961:10;25992:1;25978:4;:11;:15;25974:1;:19;:77;;26048:3;25974:77;;;25996:49;26016:7;26025:6;26033:4;26038:1;26042;26038:5;26033:11;;;;;;;25996:49;25961:90;;26076:43;26096:7;26105:5;26112:6;26076:19;:43::i;:::-;-1:-1:-1;;;;;26066:59:0;;26144:10;26156;26168:2;26182:1;26172:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;26172:12:0;87:42:-1;143:17;;-1:-1;26172:12:0;;26066:133;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26066:133:0;-1:-1:-1;;;;;26066:133:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;26066:133:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26066:133:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;25639:3:0;;;;;-1:-1:-1;25605:606:0;;-1:-1:-1;;;;;;;;25605:606:0;33511:933;33700:4;-1:-1:-1;;;;;33689:15:0;:4;33694:1;33689:7;;;;;;;;;;;;;;-1:-1:-1;;;;;33689:15:0;;33681:54;;;;;-1:-1:-1;;;33681:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33808:11;;33762:9;;33746:13;;33808:15;;;;:39;;-1:-1:-1;33845:1:0;33828:5;-1:-1:-1;;;;;33828:5:0;:19;;33808:39;33805:164;;;33894:5;33880:11;;33869:8;:22;:30;;;;;33946:5;;33869:30;;;;-1:-1:-1;33914:43:0;;-1:-1:-1;;;;;33946:5:0;33869:30;33914;:43::i;:::-;33985:4;-1:-1:-1;;;;;33979:19:0;;34017:3;34006:8;:14;33979:44;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33979:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33979:44:0;;;;;34047:4;-1:-1:-1;;;;;34041:20:0;;34062:46;34082:7;34091:4;34096:1;34091:7;;;;;;;;;;;;;;34100:4;34105:1;34100:7;;;;;;;34062:46;34121:3;34110:8;:14;34041:84;;;;;;;;;;;;;-1:-1:-1;;;;;34041:84:0;-1:-1:-1;;;;;34041:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34041:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34041:84:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34041:84:0;34034:92;;;;34137:18;34165:4;34184:1;34170:4;:11;:15;34165:21;;;;;;;;;;;;;;-1:-1:-1;;;;;34158:39:0;;34198:2;34158:43;;;;;;;;;;;;;-1:-1:-1;;;;;34158:43:0;-1:-1:-1;;;;;34158:43:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34158:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34158:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34158:43:0;;-1:-1:-1;34212:45:0;34248:4;34254:2;34212:34;:45::i;:::-;34356:12;34290:62;34338:13;34297:4;34316:1;34302:4;:11;:15;34297:21;;;;;;;;;;;;;;-1:-1:-1;;;;;34290:39:0;;34330:2;34290:43;;;;;;;;;;;;;-1:-1:-1;;;;;34290:43:0;-1:-1:-1;;;;;34290:43:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;34290:62:0;:78;;34268:168;;;;-1:-1:-1;;;34268:168:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13244:464;13337:13;13383:1;13371:9;:13;13363:65;;;;-1:-1:-1;;;13363:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13459:1;13447:9;:13;:31;;;;;13477:1;13464:10;:14;13447:31;13439:79;;;;-1:-1:-1;;;13439:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13529:14;13546:35;13575:5;13546:24;:9;13560;13546:24;:13;:24;:::i;:::-;:28;:35;:28;:35;:::i;:::-;13529:52;-1:-1:-1;13592:16:0;13611:35;13641:4;13611:25;:10;13626:9;13611:25;:14;:25;:::i;:35::-;13592:54;;13668:32;13698:1;13681:11;13669:9;:23;;;;;;;13668:32;:29;:32;:::i;:::-;13657:43;13244:464;-1:-1:-1;;;;;;13244:464:0:o;12181:311::-;12263:12;12306:1;12296:7;:11;12288:56;;;;;-1:-1:-1;;;12288:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12374:1;12363:8;:12;:28;;;;;12390:1;12379:8;:12;12363:28;12355:76;;;;-1:-1:-1;;;12355:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12476:8;12452:21;:7;12464:8;12452:21;:11;:21;:::i;:::-;:32;;;;;;;12181:311;-1:-1:-1;;;;12181:311:0:o;10600:339::-;10675:14;10691;10736:6;-1:-1:-1;;;;;10726:16:0;:6;-1:-1:-1;;;;;10726:16:0;;;10718:61;;;;;-1:-1:-1;;;10718:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10818:6;-1:-1:-1;;;;;10809:15:0;:6;-1:-1:-1;;;;;10809:15:0;;:53;;10847:6;10855;10809:53;;;10828:6;10836;10809:53;10790:72;;-1:-1:-1;10790:72:0;-1:-1:-1;;;;;;10881:20:0;;10873:58;;;;;-1:-1:-1;;;10873:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10600:339;;;;;:::o;17937:1359::-;18250:45;;;;;;-1:-1:-1;;;;;18250:45:0;;;;;;;;;;;;;;;;18155:12;;;;;;18263:7;18250:29;;;;;;:45;;;;;;;;;;;;;;;:29;:45;;;2:2:-1;;;;27:1;24;17:12;2:2;18250:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18250:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18250:45:0;-1:-1:-1;;;;;18250:59:0;;18246:140;;;18326:48;;;;;;-1:-1:-1;;;;;18326:48:0;;;;;;;;;;;;;;;;18339:7;18326:32;;;;;;:48;;;;;;;;;;;;;;;-1:-1:-1;18326:32:0;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;18326:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18326:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;18246:140:0;18397:13;18412;18429:48;18453:7;18462:6;18470;18429:23;:48::i;:::-;18396:81;;;;18492:8;18504:1;18492:13;:30;;;;-1:-1:-1;18509:13:0;;18492:30;18488:801;;;18561:14;;-1:-1:-1;18577:14:0;;-1:-1:-1;18488:801:0;;;18625:19;18647:53;18665:14;18681:8;18691;18647:17;:53::i;:::-;18625:75;;18737:14;18719;:32;18715:563;;18798:10;18780:14;:28;;18772:76;;;;-1:-1:-1;;;18772:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18889:14;;-1:-1:-1;18905:14:0;-1:-1:-1;18905:14:0;18715:563;;;18961:19;18983:53;19001:14;19017:8;19027;18983:17;:53::i;:::-;18961:75;;19080:14;19062;:32;;19055:40;;;;19140:10;19122:14;:28;;19114:76;;;;-1:-1:-1;;;19114:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19231:14;-1:-1:-1;19247:14:0;;-1:-1:-1;18715:563:0;18488:801;;17937:1359;;;;;;;;;;;:::o;7782:142::-;7834:6;7861;;;:30;;-1:-1:-1;;7876:5:0;;;7890:1;7885;7876:5;7885:1;7871:15;;;;;:20;7861:30;7853:63;;;;;-1:-1:-1;;;7853:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;7509:128;7593:5;;;7588:16;;;;7580:49;;;;;-1:-1:-1;;;7580:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11639:429;11732:13;11747;11774:14;11793:26;11804:6;11812;11793:10;:26::i;:::-;11773:46;;;11830:32;11838:7;11847:6;11855;11830:7;:32::i;:::-;;11874:13;11889;11917:32;11925:7;11934:6;11942;11917:7;:32::i;:::-;-1:-1:-1;;;;;11907:55:0;;:57;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11907:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11907:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11907:57:0;;;;;;;11873:91;;;;;-1:-1:-1;11873:91:0;;-1:-1:-1;;;;;;11998:16:0;;;;;;;:62;;12041:8;12051;11998:62;;;12018:8;12028;11998:62;11975:85;;;;-1:-1:-1;11639:429:0;-1:-1:-1;;;;;;;11639:429:0:o;29863:1186::-;29976:6;29971:1071;30002:1;29988:4;:11;:15;29984:1;:19;29971:1071;;;30026:13;30041:14;30060:4;30065:1;30060:7;;;;;;;;;;;;;;30069:4;30074:1;30078;30074:5;30069:11;;;;;;;;;;;;;;30025:56;;;;30097:14;30116:37;30139:5;30146:6;30116:22;:37::i;:::-;30096:57;;;30168:14;30195:43;30215:7;30224:5;30231:6;30195:19;:43::i;:::-;30168:71;;30254:16;30285:17;30373:13;30388;30406:4;-1:-1:-1;;;;;30406:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30406:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30406:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30406:18:0;;;;;;;30372:52;;;;;-1:-1:-1;30372:52:0;;-1:-1:-1;30440:17:0;;-1:-1:-1;;;;;30481:15:0;;;;;;;:61;;30523:8;30533;30481:61;;;30500:8;30510;30481:61;30439:103;;;;30571:56;30614:12;30578:5;-1:-1:-1;;;;;30571:23:0;;30603:4;30571:38;;;;;;;;;;;;;-1:-1:-1;;;;;30571:38:0;-1:-1:-1;;;;;30571:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30571:56:0;30557:70;;30657:66;30682:11;30695:12;30709:13;30657:24;:66::i;:::-;30642:81;;29971:1071;;;;30756:15;30773;30801:6;-1:-1:-1;;;;;30792:15:0;:5;-1:-1:-1;;;;;30792:15:0;;:67;;30837:12;30856:1;30792:67;;;30816:1;30820:12;30792:67;30755:104;;;;30874:10;30905:1;30891:4;:11;:15;30887:1;:19;:77;;30961:3;30887:77;;;30909:49;30929:7;30938:6;30946:4;30951:1;30955;30951:5;30946:11;;;;;;;30909:49;31017:12;;;31027:1;31017:12;;;;;;;;;;30979:51;;;;;;;;;;;;;;;-1:-1:-1;;;;;30979:51:0;;;;;;;;;;;;;;;;;;;;;;30874:90;;-1:-1:-1;30979:9:0;;;;;;30989:10;;31001;;30874:90;;31017:12;;30979:51;;;;;;;;31017:12;;30979:51;;;;31017:12;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;30979:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30979:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;30005:3:0;;;;;-1:-1:-1;29971:1071:0;;-1:-1:-1;;;;;;;;;;29971:1071:0;7645:129;7729:5;;;7724:16;;;;7716:50;;;;;-1:-1:-1;;;7716:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://e3bc79b5858dd8f87fb1310631dc1e8a8fbc01a0eddda4e9360beba469079ac8
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
BSC | 100.00% | $689.63 | 0.25 | $172.41 |
[ 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.