More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 11,131 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Swap Exact ETH F... | 20144895 | 6 days ago | IN | 0.01 ETH | 0.0003405 | ||||
Remove Liquidity | 18728394 | 205 days ago | IN | 0 ETH | 0.00808843 | ||||
Remove Liquidity | 18540636 | 231 days ago | IN | 0 ETH | 0.00756695 | ||||
Swap Exact Token... | 18156743 | 285 days ago | IN | 0 ETH | 0.00131344 | ||||
Swap Exact Token... | 18156579 | 285 days ago | IN | 0 ETH | 0.00144868 | ||||
Remove Liquidity | 18009998 | 306 days ago | IN | 0 ETH | 0.00226654 | ||||
Remove Liquidity... | 17421963 | 388 days ago | IN | 0 ETH | 0.00640967 | ||||
Remove Liquidity | 17327263 | 401 days ago | IN | 0 ETH | 0.00584485 | ||||
Remove Liquidity | 17327245 | 401 days ago | IN | 0 ETH | 0.00085202 | ||||
Swap Exact Token... | 16747342 | 483 days ago | IN | 0 ETH | 0.00248922 | ||||
Remove Liquidity... | 16705332 | 489 days ago | IN | 0 ETH | 0.00358612 | ||||
Remove Liquidity | 16491160 | 519 days ago | IN | 0 ETH | 0.00233112 | ||||
Remove Liquidity | 16491125 | 519 days ago | IN | 0 ETH | 0.00049156 | ||||
Remove Liquidity | 16491098 | 519 days ago | IN | 0 ETH | 0.00034727 | ||||
Remove Liquidity | 16491093 | 519 days ago | IN | 0 ETH | 0.00037012 | ||||
Remove Liquidity | 16491059 | 519 days ago | IN | 0 ETH | 0.00047054 | ||||
Remove Liquidity | 16491043 | 519 days ago | IN | 0 ETH | 0.00036128 | ||||
Remove Liquidity... | 16330380 | 542 days ago | IN | 0 ETH | 0.00269054 | ||||
Remove Liquidity... | 15895339 | 602 days ago | IN | 0 ETH | 0.00272306 | ||||
Swap Exact ETH F... | 15818774 | 613 days ago | IN | 0.1 ETH | 0.0023679 | ||||
Swap Exact ETH F... | 15818774 | 613 days ago | IN | 0.15 ETH | 0.0023679 | ||||
Remove Liquidity | 15797787 | 616 days ago | IN | 0 ETH | 0.00543112 | ||||
Remove Liquidity | 15792776 | 617 days ago | IN | 0 ETH | 0.00341641 | ||||
Add Liquidity ET... | 15757668 | 622 days ago | IN | 0.0001 ETH | 0.00210755 | ||||
Swap Exact ETH F... | 15592809 | 645 days ago | IN | 0.755 ETH | 0.00069719 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
20144895 | 6 days ago | 0.01 ETH | ||||
18156743 | 285 days ago | 0.11061046 ETH | ||||
18156743 | 285 days ago | 0.11061046 ETH | ||||
18156579 | 285 days ago | 2.74911976 ETH | ||||
18156579 | 285 days ago | 2.74911976 ETH | ||||
17421963 | 388 days ago | 1.64032429 ETH | ||||
17421963 | 388 days ago | 1.64032429 ETH | ||||
16747342 | 483 days ago | 0.06861553 ETH | ||||
16747342 | 483 days ago | 0.06861553 ETH | ||||
16705332 | 489 days ago | 0.09693303 ETH | ||||
16705332 | 489 days ago | 0.09693303 ETH | ||||
16330380 | 542 days ago | 0.11469936 ETH | ||||
16330380 | 542 days ago | 0.11469936 ETH | ||||
15895339 | 602 days ago | 4.68070784 ETH | ||||
15895339 | 602 days ago | 4.68070784 ETH | ||||
15757668 | 622 days ago | 0.0000382 ETH | ||||
15757668 | 622 days ago | 0.00006179 ETH | ||||
15593405 | 644 days ago | 0.42037762 ETH | ||||
15593405 | 644 days ago | 0.42037762 ETH | ||||
15592929 | 645 days ago | 0.71013405 ETH | ||||
15592929 | 645 days ago | 0.71013405 ETH | ||||
15592849 | 645 days ago | 0.76032003 ETH | ||||
15592849 | 645 days ago | 0.76032003 ETH | ||||
15592833 | 645 days ago | 0.6426872 ETH | ||||
15592833 | 645 days ago | 0.6426872 ETH |
Loading...
Loading
Contract Name:
SakeSwapRouter
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-09-25 */ // File: contracts\sakeswap\interfaces\ISakeSwapFactory.sol // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.5.0; interface ISakeSwapFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function migrator() 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 setMigrator(address) external; } // File: contracts\sakeswap\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'); } } // File: contracts\sakeswap\interfaces\ISakeSwapRouter.sol pragma solidity >=0.6.2; interface ISakeSwapRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB ); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns ( uint256 amountToken, uint256 amountETH ); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns ( uint256 amountA, uint256 amountB ); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns ( uint256 amountToken, uint256 amountETH ); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline, bool ifmint ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline, bool ifmint ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline, bool ifmint ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline, bool ifmint ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline, bool ifmint ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline, bool ifmint ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline, bool ifmint ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline, bool ifmint ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline, bool ifmint ) external; } // File: contracts\sakeswap\interfaces\ISakeSwapPair.sol pragma solidity >=0.5.0; interface ISakeSwapPair { 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 stoken() 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; function dealSlippageWithIn(address[] calldata path, uint amountIn, address to, bool ifmint) external returns (uint amountOut); function dealSlippageWithOut(address[] calldata path, uint amountOut, address to, bool ifmint) external returns (uint extra); function getAmountOutMarket(address token, uint amountIn) external view returns (uint _out, uint t0Price); function getAmountInMarket(address token, uint amountOut) external view returns (uint _in, uint t0Price); function getAmountOutFinal(address token, uint256 amountIn) external view returns (uint256 amountOut, uint256 stokenAmount); function getAmountInFinal(address token, uint256 amountOut) external view returns (uint256 amountIn, uint256 stokenAmount); function getTokenMarketPrice(address token) external view returns (uint price); } // File: contracts\sakeswap\libraries\SafeMath.sol pragma solidity =0.6.12; // 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'); } } // File: contracts\sakeswap\libraries\SakeSwapLibrary.sol pragma solidity >=0.5.0; library SakeSwapLibrary { using SafeMath for uint256; // 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, 'SakeSwapLibrary: IDENTICAL_ADDRESSES'); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'SakeSwapLibrary: ZERO_ADDRESS'); } // calculates the CREATE2 address for a pair without making any external calls function pairFor( address factory, address tokenA, address tokenB ) internal pure returns (address pair) { (address token0, address token1) = sortTokens(tokenA, tokenB); pair = address( uint256( keccak256( abi.encodePacked( hex'ff', factory, keccak256(abi.encodePacked(token0, token1)), hex'b2b53dca60cae1d1f93f64d80703b888689f28b63c483459183f2f4271fa0308' // init code hash ) ) ) ); } // fetches and sorts the reserves for a pair function getReserves( address factory, address tokenA, address tokenB ) internal view returns (uint256 reserveA, uint256 reserveB) { (address token0, ) = sortTokens(tokenA, tokenB); (uint256 reserve0, uint256 reserve1, ) = ISakeSwapPair(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( uint256 amountA, uint256 reserveA, uint256 reserveB ) internal pure returns (uint256 amountB) { require(amountA > 0, 'SakeSwapLibrary: INSUFFICIENT_AMOUNT'); require(reserveA > 0 && reserveB > 0, 'SakeSwapLibrary: 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( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) internal pure returns (uint256 amountOut) { require(amountIn > 0, 'SakeSwapLibrary: INSUFFICIENT_INPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'SakeSwapLibrary: INSUFFICIENT_LIQUIDITY'); uint256 amountInWithFee = amountIn.mul(997); uint256 numerator = amountInWithFee.mul(reserveOut); uint256 denominator = reserveIn.mul(1000).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( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) internal pure returns (uint256 amountIn) { require(amountOut > 0, 'SakeSwapLibrary: INSUFFICIENT_OUTPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'SakeSwapLibrary: INSUFFICIENT_LIQUIDITY'); uint256 numerator = reserveIn.mul(amountOut).mul(1000); uint256 denominator = reserveOut.sub(amountOut).mul(997); amountIn = (numerator / denominator).add(1); } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut( address factory, uint256 amountIn, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, 'SakeSwapLibrary: INVALID_PATH'); amounts = new uint256[](path.length); amounts[0] = amountIn; for (uint256 i; i < path.length - 1; i++) { (uint256 reserveIn, uint256 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, uint256 amountOut, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, 'SakeSwapLibrary: INVALID_PATH'); amounts = new uint256[](path.length); amounts[amounts.length - 1] = amountOut; for (uint256 i = path.length - 1; i > 0; i--) { (uint256 reserveIn, uint256 reserveOut) = getReserves(factory, path[i - 1], path[i]); amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut); } } } // File: contracts\sakeswap\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); function mint(address to, uint value) external returns (bool); function burn(address from, uint value) external returns (bool); } // File: contracts\sakeswap\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; } // File: contracts\sakeswap\SakeSwapRouter.sol pragma solidity =0.6.12; contract SakeSwapRouter is ISakeSwapRouter { using SafeMath for uint256; address public immutable override factory; address public immutable override WETH; modifier ensure(uint256 deadline) { require(deadline >= block.timestamp, "SakeSwapRouter: EXPIRED"); _; } constructor(address _factory, address _WETH) public { factory = _factory; WETH = _WETH; } receive() external payable { assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract } // **** ADD LIQUIDITY **** function _addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin ) internal virtual returns (uint256 amountA, uint256 amountB) { // create the pair if it doesn"t exist yet if (ISakeSwapFactory(factory).getPair(tokenA, tokenB) == address(0)) { ISakeSwapFactory(factory).createPair(tokenA, tokenB); } (uint256 reserveA, uint256 reserveB) = SakeSwapLibrary.getReserves(factory, tokenA, tokenB); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint256 amountBOptimal = SakeSwapLibrary.quote(amountADesired, reserveA, reserveB); if (amountBOptimal <= amountBDesired) { require(amountBOptimal >= amountBMin, "SakeSwapRouter: INSUFFICIENT_B_AMOUNT"); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint256 amountAOptimal = SakeSwapLibrary.quote(amountBDesired, reserveB, reserveA); assert(amountAOptimal <= amountADesired); require(amountAOptimal >= amountAMin, "SakeSwapRouter: INSUFFICIENT_A_AMOUNT"); (amountA, amountB) = (amountAOptimal, amountBDesired); } } } function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external virtual override ensure(deadline) returns ( uint256 amountA, uint256 amountB, uint256 liquidity ) { (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin); address pair = SakeSwapLibrary.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = ISakeSwapPair(pair).mint(to); } function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external virtual override payable ensure(deadline) returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ) { (amountToken, amountETH) = _addLiquidity( token, WETH, amountTokenDesired, msg.value, amountTokenMin, amountETHMin ); address pair = SakeSwapLibrary.pairFor(factory, token, WETH); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWETH(WETH).deposit{value: amountETH}(); assert(IWETH(WETH).transfer(pair, amountETH)); liquidity = ISakeSwapPair(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, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) public virtual override ensure(deadline) returns ( uint256 amountA, uint256 amountB ) { address pair = SakeSwapLibrary.pairFor(factory, tokenA, tokenB); ISakeSwapPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (address token0, ) = SakeSwapLibrary.sortTokens(tokenA, tokenB); if (tokenA == token0) { (amountA, amountB) = ISakeSwapPair(pair).burn(to); } else { (amountB, amountA) = ISakeSwapPair(pair).burn(to); } require(amountA >= amountAMin, "SakeSwappRouter: INSUFFICIENT_A_AMOUNT"); require(amountB >= amountBMin, "SakeSwapRouter: INSUFFICIENT_B_AMOUNT"); } function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) public virtual override ensure(deadline) returns ( uint256 amountToken, uint256 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, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns ( uint256 amountA, uint256 amountB ) { ISakeSwapPair(SakeSwapLibrary.pairFor(factory, tokenA, tokenB)).permit( msg.sender, address(this), approveMax ? uint256(-1) : liquidity, deadline, v, r, s ); (amountA, amountB) = removeLiquidity( tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline ); } function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns ( uint256 amountToken, uint256 amountETH ) { address pair = SakeSwapLibrary.pairFor(factory, token, WETH); uint256 value = approveMax ? uint256(-1) : liquidity; ISakeSwapPair(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, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) public virtual override ensure(deadline) returns (uint256 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, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint256 amountETH) { address pair = SakeSwapLibrary.pairFor(factory, token, WETH); uint256 value = approveMax ? uint256(-1) : liquidity; ISakeSwapPair(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( uint256[] memory amounts, address[] memory path, address _to ) internal virtual { for (uint256 i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0, ) = SakeSwapLibrary.sortTokens(input, output); uint256 amountOut = amounts[i + 1]; (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOut) : (amountOut, uint256(0)); address to = i < path.length - 2 ? SakeSwapLibrary.pairFor(factory, output, path[i + 2]) : _to; ISakeSwapPair(SakeSwapLibrary.pairFor(factory, input, output)).swap( amount0Out, amount1Out, to, new bytes(0) ); } } function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline, bool ifmint ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { amounts = SakeSwapLibrary.getAmountsOut(factory, amountIn, path); address pair = SakeSwapLibrary.pairFor(factory, path[0], path[1]); TransferHelper.safeTransferFrom(path[0], msg.sender, pair, amounts[0]); if (path.length == 2) { amounts[1] = ISakeSwapPair(pair).dealSlippageWithIn(path, amounts[0], to, ifmint); } require(amounts[amounts.length - 1] >= amountOutMin, "SakeSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT"); _swap(amounts, path, to); } function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline, bool ifmint ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { amounts = SakeSwapLibrary.getAmountsIn(factory, amountOut, path); address pair = SakeSwapLibrary.pairFor(factory, path[0], path[1]); if (path.length == 2) { uint256 extra = ISakeSwapPair(pair).dealSlippageWithOut(path, amountOut, to, ifmint); amounts[0] = amounts[0].add(extra); } require(amounts[0] <= amountInMax, "SakeSwapRouter: EXCESSIVE_INPUT_AMOUNT"); TransferHelper.safeTransferFrom(path[0], msg.sender, pair, amounts[0]); _swap(amounts, path, to); } function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline, bool ifmint ) external virtual override payable ensure(deadline) returns (uint256[] memory amounts) { require(path[0] == WETH, "SakeSwapRouter: INVALID_PATH"); amounts = SakeSwapLibrary.getAmountsOut(factory, msg.value, path); address pair = SakeSwapLibrary.pairFor(factory, path[0], path[1]); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(pair, amounts[0])); if (path.length == 2) { amounts[1] = ISakeSwapPair(pair).dealSlippageWithIn(path, amounts[0], to, ifmint); } require(amounts[amounts.length - 1] >= amountOutMin, "SakeSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT"); _swap(amounts, path, to); } function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline, bool ifmint ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[path.length - 1] == WETH, "SakeSwapRouter: INVALID_PATH"); amounts = SakeSwapLibrary.getAmountsIn(factory, amountOut, path); address pair = SakeSwapLibrary.pairFor(factory, path[0], path[1]); if (path.length == 2) { uint256 extra = ISakeSwapPair(pair).dealSlippageWithOut(path, amountOut, to, ifmint); amounts[0] = amounts[0].add(extra); } require(amounts[0] <= amountInMax, "SakeSwapRouter: EXCESSIVE_INPUT_AMOUNT"); TransferHelper.safeTransferFrom(path[0], msg.sender, pair, amounts[0]); _swap(amounts, path, address(this)); IWETH(WETH).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); } function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline, bool ifmint ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[path.length - 1] == WETH, "SakeSwapRouter: INVALID_PATH"); amounts = SakeSwapLibrary.getAmountsOut(factory, amountIn, path); address pair = SakeSwapLibrary.pairFor(factory, path[0], path[1]); TransferHelper.safeTransferFrom(path[0], msg.sender, pair, amounts[0]); if (path.length == 2) { amounts[1] = ISakeSwapPair(pair).dealSlippageWithIn(path, amounts[0], to, ifmint); } require(amounts[amounts.length - 1] >= amountOutMin, "SakeSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT"); _swap(amounts, path, address(this)); IWETH(WETH).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); } function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline, bool ifmint ) external virtual override payable ensure(deadline) returns (uint256[] memory amounts) { require(path[0] == WETH, "SakeSwapRouter: INVALID_PATH"); amounts = SakeSwapLibrary.getAmountsIn(factory, amountOut, path); address pair = SakeSwapLibrary.pairFor(factory, path[0], path[1]); if (path.length == 2) { uint256 extra = ISakeSwapPair(pair).dealSlippageWithOut(path, amountOut, to, ifmint); amounts[0] = amounts[0].add(extra); } IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(pair, 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, bool ifmint ) internal virtual { for (uint256 i; i < path.length - 1; i++) { (address token0, ) = SakeSwapLibrary.sortTokens(path[i], path[i + 1]); ISakeSwapPair pair = ISakeSwapPair(SakeSwapLibrary.pairFor(factory, path[i], path[i + 1])); uint256 amountOutput; { // scope to avoid stack too deep errors (uint256 reserve0, uint256 reserve1, ) = pair.getReserves(); (uint256 reserveInput, uint256 reserveOutput) = path[i] == token0 ? (reserve0, reserve1) : (reserve1, reserve0); uint256 amountInput = IERC20(path[i]).balanceOf(address(pair)).sub(reserveInput); if (path.length == 2) { amountOutput = pair.dealSlippageWithIn(path, amountInput, _to, ifmint); } else { amountOutput = SakeSwapLibrary.getAmountOut(amountInput, reserveInput, reserveOutput); } } (uint256 amount0Out, uint256 amount1Out) = path[i] == token0 ? (uint256(0), amountOutput) : (amountOutput, uint256(0)); address to = i < path.length - 2 ? SakeSwapLibrary.pairFor(factory, path[i + 1], path[i + 2]) : _to; pair.swap(amount0Out, amount1Out, to, new bytes(0)); } } function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline, bool ifmint ) external virtual override ensure(deadline) { TransferHelper.safeTransferFrom( path[0], msg.sender, SakeSwapLibrary.pairFor(factory, path[0], path[1]), amountIn ); uint256 balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to, ifmint); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, "SakeSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline, bool ifmint ) external virtual override payable ensure(deadline) { require(path[0] == WETH, "SakeSwapRouter: INVALID_PATH"); uint256 amountIn = msg.value; IWETH(WETH).deposit{value: amountIn}(); assert(IWETH(WETH).transfer(SakeSwapLibrary.pairFor(factory, path[0], path[1]), amountIn)); uint256 balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to, ifmint); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, "SakeSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); } function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline, bool ifmint ) external virtual override ensure(deadline) { require(path[path.length - 1] == WETH, "SakeSwapRouter: INVALID_PATH"); TransferHelper.safeTransferFrom( path[0], msg.sender, SakeSwapLibrary.pairFor(factory, path[0], path[1]), amountIn ); _swapSupportingFeeOnTransferTokens(path, address(this), ifmint); uint256 amountOut = IERC20(WETH).balanceOf(address(this)); require(amountOut >= amountOutMin, "SakeSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT"); IWETH(WETH).withdraw(amountOut); TransferHelper.safeTransferETH(to, amountOut); } // **** LIBRARY FUNCTIONS **** function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) public virtual override pure returns (uint256 amountB) { return SakeSwapLibrary.quote(amountA, reserveA, reserveB); } function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) public virtual override pure returns (uint256 amountOut) { return SakeSwapLibrary.getAmountOut(amountIn, reserveIn, reserveOut); } function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) public virtual override pure returns (uint256 amountIn) { return SakeSwapLibrary.getAmountIn(amountOut, reserveIn, reserveOut); } function getAmountsOut(uint256 amountIn, address[] memory path) public virtual override view returns (uint256[] memory amounts) { return SakeSwapLibrary.getAmountsOut(factory, amountIn, path); } function getAmountsIn(uint256 amountOut, address[] memory path) public virtual override view returns (uint256[] memory amounts) { return SakeSwapLibrary.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"}],"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":"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":[{"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":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"ifmint","type":"bool"}],"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"},{"internalType":"bool","name":"ifmint","type":"bool"}],"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"},{"internalType":"bool","name":"ifmint","type":"bool"}],"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"},{"internalType":"bool","name":"ifmint","type":"bool"}],"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"},{"internalType":"bool","name":"ifmint","type":"bool"}],"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"},{"internalType":"bool","name":"ifmint","type":"bool"}],"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"},{"internalType":"bool","name":"ifmint","type":"bool"}],"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"},{"internalType":"bool","name":"ifmint","type":"bool"}],"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"},{"internalType":"bool","name":"ifmint","type":"bool"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405234801561001057600080fd5b5060405162004fbd38038062004fbd8339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c614e29620001946000398061015f5280610d2c5280610d67528061121c528061147452806114fc5280611668528061179a528061187752806119515280611cea5280611fac52806120a6528061213b52806121af52806123d552806124505280612504528061289252806129b75280612a3f5280612d095280612e415280613244528061329a52806132ce5280613342525080610e7852806110aa52806110e152806112af528061131152806116465280611a225280611a845280611d785280611dda52806121e152806125e3528061292552806129875280612c8e5280612cb75280612ce75280612ecf5280612f315280613125528061327852806134d352806135355280613c6b5280613f36528061431f5280614355528061483d52806148f652806149a95250614e296000f3fe60806040526004361061014f5760003560e01c8063ad5c4648116100b6578063d06ca61f1161006f578063d06ca61f146109b5578063ded9382a14610a6a578063e7bb988d14610add578063e8e3370014610b7b578063f305d71914610bfb578063fa775c0f14610c4157610188565b8063ad5c4648146107fd578063ad615dec1461082e578063af2979eb14610864578063baa2abde146108b7578063c27e85ca14610914578063c45a0155146109a057610188565b80635b0d5984116101085780635b0d5984146104ee57806361be71b2146105615780636e03efb5146105ff57806385f8c2591461069d5780639be677c1146106d3578063a2e250b31461077157610188565b806302751cec1461018d578063054d50d4146101f9578063099963f4146102415780631f00ca74146102df5780632195995c146103e45780632533ef941461046257610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610cdf565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610df9565b60408051918252519081900360200190f35b34801561024d57600080fd5b50610186600480360360c081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b0381351690602081013590604001351515610e0e565b3480156102eb57600080fd5b506103946004803603604081101561030257600080fd5b81359190810190604081016020820135600160201b81111561032357600080fd5b82018360208201111561033557600080fd5b803590602001918460208302840111600160201b8311171561035657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110a3945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103d05781810151838201526020016103b8565b505050509050019250505060405180910390f35b3480156103f057600080fd5b506101e0600480360361016081101561040857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff61010082013516906101208101359061014001356110d9565b610394600480360360a081101561047857600080fd5b81359190810190604081016020820135600160201b81111561049957600080fd5b8201836020820111156104ab57600080fd5b803590602001918460208302840111600160201b831117156104cc57600080fd5b91935091506001600160a01b03813516906020810135906040013515156111d4565b3480156104fa57600080fd5b5061022f600480360361014081101561051257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561163e565b34801561056d57600080fd5b50610186600480360360c081101561058457600080fd5b813591602081013591810190606081016040820135600160201b8111156105aa57600080fd5b8201836020820111156105bc57600080fd5b803590602001918460208302840111600160201b831117156105dd57600080fd5b91935091506001600160a01b038135169060208101359060400135151561174c565b34801561060b57600080fd5b50610394600480360360c081101561062257600080fd5b813591602081013591810190606081016040820135600160201b81111561064857600080fd5b82018360208201111561065a57600080fd5b803590602001918460208302840111600160201b8311171561067b57600080fd5b91935091506001600160a01b03813516906020810135906040013515156119d7565b3480156106a957600080fd5b5061022f600480360360608110156106c057600080fd5b5080359060208101359060400135611c8d565b3480156106df57600080fd5b50610394600480360360c08110156106f657600080fd5b813591602081013591810190606081016040820135600160201b81111561071c57600080fd5b82018360208201111561072e57600080fd5b803590602001918460208302840111600160201b8311171561074f57600080fd5b91935091506001600160a01b0381351690602081013590604001351515611c9a565b610186600480360360a081101561078757600080fd5b81359190810190604081016020820135600160201b8111156107a857600080fd5b8201836020820111156107ba57600080fd5b803590602001918460208302840111600160201b831117156107db57600080fd5b91935091506001600160a01b0381351690602081013590604001351515612060565b34801561080957600080fd5b506108126123d3565b604080516001600160a01b039092168252519081900360200190f35b34801561083a57600080fd5b5061022f6004803603606081101561085157600080fd5b50803590602081013590604001356123f7565b34801561087057600080fd5b5061022f600480360360c081101561088757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612404565b3480156108c357600080fd5b506101e0600480360360e08110156108da57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612595565b610394600480360360a081101561092a57600080fd5b81359190810190604081016020820135600160201b81111561094b57600080fd5b82018360208201111561095d57600080fd5b803590602001918460208302840111600160201b8311171561097e57600080fd5b91935091506001600160a01b038135169060208101359060400135151561284a565b3480156109ac57600080fd5b50610812612c8c565b3480156109c157600080fd5b50610394600480360360408110156109d857600080fd5b81359190810190604081016020820135600160201b8111156109f957600080fd5b820183602082011115610a0b57600080fd5b803590602001918460208302840111600160201b83111715610a2c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612cb0945050505050565b348015610a7657600080fd5b506101e06004803603610140811015610a8e57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612cdd565b348015610ae957600080fd5b50610394600480360360c0811015610b0057600080fd5b813591602081013591810190606081016040820135600160201b811115610b2657600080fd5b820183602082011115610b3857600080fd5b803590602001918460208302840111600160201b83111715610b5957600080fd5b91935091506001600160a01b0381351690602081013590604001351515612df1565b348015610b8757600080fd5b50610bdd6004803603610100811015610b9f57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e001356130c2565b60408051938452602084019290925282820152519081900360600190f35b610bdd600480360360c0811015610c1157600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356131f5565b348015610c4d57600080fd5b50610394600480360360c0811015610c6457600080fd5b813591602081013591810190606081016040820135600160201b811115610c8a57600080fd5b820183602082011115610c9c57600080fd5b803590602001918460208302840111600160201b83111715610cbd57600080fd5b91935091506001600160a01b0381351690602081013590604001351515613488565b6000808242811015610d26576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b610d55897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612595565b9093509150610d658986856136c6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610dcb57600080fd5b505af1158015610ddf573d6000803e3d6000fd5b50505050610ded8583613830565b50965096945050505050565b6000610e06848484613928565b949350505050565b8142811015610e52576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b610edc86866000818110610e6257fe5b905060200201356001600160a01b031633610ed67f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610ea457fe5b905060200201356001600160a01b03168b8b6001818110610ec157fe5b905060200201356001600160a01b0316613a00565b8b613ac0565b600086866000198101818110610eee57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610f4a57600080fd5b505afa158015610f5e573d6000803e3d6000fd5b505050506040513d6020811015610f7457600080fd5b50516040805160208981028281018201909352898252929350610fb89290918a918a918291850190849080828437600092019190915250899250879150613c1d9050565b8761105b8289896000198101818110610fcd57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561102957600080fd5b505afa15801561103d573d6000803e3d6000fd5b505050506040513d602081101561105357600080fd5b505190614084565b10156110985760405162461bcd60e51b815260040180806020018281038252602a815260200180614c13602a913960400191505060405180910390fd5b505050505050505050565b60606110d07f000000000000000000000000000000000000000000000000000000000000000084846140d4565b90505b92915050565b6000806111077f00000000000000000000000000000000000000000000000000000000000000008e8e613a00565b6001600160a01b031663d505accf333089611122578e611126565b6000195b604080516001600160e01b031960e087901b1681526001600160a01b0394851660048201529290931660248301526044820152606481018b905260ff8916608482015260a4810188905260c48101879052905160e480830192600092919082900301818387803b15801561119957600080fd5b505af11580156111ad573d6000803e3d6000fd5b505050506111c08d8d8d8d8d8d8d612595565b909e909d509b505050505050505050505050565b6060824281101561121a576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168787600081811061125157fe5b905060200201356001600160a01b03166001600160a01b0316146112aa576040805162461bcd60e51b815260206004820152601c6024820152600080516020614c88833981519152604482015290519081900360640190fd5b6113087f0000000000000000000000000000000000000000000000000000000000000000898989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506140d492505050565b9150600061135a7f00000000000000000000000000000000000000000000000000000000000000008989600081811061133d57fe5b905060200201356001600160a01b03168a8a6001818110610ec157fe5b90506002871415611472576000816001600160a01b0316632fb62a478a8a8d8b8a6040518663ffffffff1660e01b81526004018080602001858152602001846001600160a01b0316815260200183151581526020018281038252878782818152602001925060200280828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b1580156113ff57600080fd5b505af1158015611413573d6000803e3d6000fd5b505050506040513d602081101561142957600080fd5b50518451909150611457908290869060009061144157fe5b602002602001015161422190919063ffffffff16565b8460008151811061146457fe5b602002602001018181525050505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0846000815181106114ae57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156114e157600080fd5b505af11580156114f5573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb828560008151811061153757fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561158557600080fd5b505af1158015611599573d6000803e3d6000fd5b505050506040513d60208110156115af57600080fd5b50516115b757fe5b6115f6838989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b9250614270915050565b8260008151811061160357fe5b602002602001015134111561163257611632338460008151811061162357fe5b60200260200101513403613830565b50509695505050505050565b60008061168c7f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613a00565b905060008661169b578b61169f565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561171557600080fd5b505af1158015611729573d6000803e3d6000fd5b5050505061173b8d8d8d8d8d8d612404565b9d9c50505050505050505050505050565b8142811015611790576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106117ca57fe5b905060200201356001600160a01b03166001600160a01b031614611823576040805162461bcd60e51b815260206004820152601c6024820152600080516020614c88833981519152604482015290519081900360640190fd5b61183386866000818110610e6257fe5b611873868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250869150613c1d9050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156118e257600080fd5b505afa1580156118f6573d6000803e3d6000fd5b505050506040513d602081101561190c57600080fd5b505190508781101561194f5760405162461bcd60e51b815260040180806020018281038252602a815260200180614c13602a913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156119b557600080fd5b505af11580156119c9573d6000803e3d6000fd5b505050506110988582613830565b60608242811015611a1d576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b611a7b7f00000000000000000000000000000000000000000000000000000000000000008a8989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506140d492505050565b91506000611ab07f00000000000000000000000000000000000000000000000000000000000000008989600081811061133d57fe5b90506002871415611bb2576000816001600160a01b0316632fb62a478a8a8e8b8a6040518663ffffffff1660e01b81526004018080602001858152602001846001600160a01b0316815260200183151581526020018281038252878782818152602001925060200280828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b158015611b5557600080fd5b505af1158015611b69573d6000803e3d6000fd5b505050506040513d6020811015611b7f57600080fd5b50518451909150611b97908290869060009061144157fe5b84600081518110611ba457fe5b602002602001018181525050505b8883600081518110611bc057fe5b60200260200101511115611c055760405162461bcd60e51b8152600401808060200182810382526026815260200180614dce6026913960400191505060405180910390fd5b611c4188886000818110611c1557fe5b905060200201356001600160a01b0316338386600081518110611c3457fe5b6020026020010151613ac0565b611c80838989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b9250614270915050565b5050979650505050505050565b6000610e0684848461449a565b60608242811015611ce0576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001687876000198101818110611d1a57fe5b905060200201356001600160a01b03166001600160a01b031614611d73576040805162461bcd60e51b815260206004820152601c6024820152600080516020614c88833981519152604482015290519081900360640190fd5b611dd17f00000000000000000000000000000000000000000000000000000000000000008a89898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061457292505050565b91506000611e067f00000000000000000000000000000000000000000000000000000000000000008989600081811061133d57fe5b9050611e1888886000818110611c1557fe5b6002871415611f1557806001600160a01b031663d4b32b50898986600081518110611e3f57fe5b60200260200101518a896040518663ffffffff1660e01b81526004018080602001858152602001846001600160a01b0316815260200183151581526020018281038252878782818152602001925060200280828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b158015611ecd57600080fd5b505af1158015611ee1573d6000803e3d6000fd5b505050506040513d6020811015611ef757600080fd5b5051835184906001908110611f0857fe5b6020026020010181815250505b8883600185510381518110611f2657fe5b60200260200101511015611f6b5760405162461bcd60e51b815260040180806020018281038252602a815260200180614c13602a913960400191505060405180910390fd5b611faa83898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614270915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d84600186510381518110611fe957fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561202757600080fd5b505af115801561203b573d6000803e3d6000fd5b50505050611c80868460018651038151811061205357fe5b6020026020010151613830565b81428110156120a4576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316868660008181106120db57fe5b905060200201356001600160a01b03166001600160a01b031614612134576040805162461bcd60e51b815260206004820152601c6024820152600080516020614c88833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561219457600080fd5b505af11580156121a8573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61220d7f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610ea457fe5b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561225457600080fd5b505af1158015612268573d6000803e3d6000fd5b505050506040513d602081101561227e57600080fd5b505161228657fe5b60008787600019810181811061229857fe5b905060200201356001600160a01b03166001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156122f457600080fd5b505afa158015612308573d6000803e3d6000fd5b505050506040513d602081101561231e57600080fd5b50516040805160208a810282810182019093528a82529293506123629290918b918b9182918501908490808284376000920191909152508a9250889150613c1d9050565b8861105b828a8a600019810181811061237757fe5b905060200201356001600160a01b03166001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561102957600080fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610e068484846146a9565b6000814281101561244a576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b612479887f00000000000000000000000000000000000000000000000000000000000000008989893089612595565b90508092505061250288858a6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156124d157600080fd5b505afa1580156124e5573d6000803e3d6000fd5b505050506040513d60208110156124fb57600080fd5b50516136c6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561256857600080fd5b505af115801561257c573d6000803e3d6000fd5b5050505061258a8483613830565b509695505050505050565b60008082428110156125dc576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b60006126097f00000000000000000000000000000000000000000000000000000000000000008c8c613a00565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561266457600080fd5b505af1158015612678573d6000803e3d6000fd5b505050506040513d602081101561268e57600080fd5b506000905061269d8c8c61474f565b509050806001600160a01b03168c6001600160a01b0316141561273e576040805163226bf2d160e21b81526001600160a01b0389811660048301528251908516926389afcb4492602480820193918290030181600087803b15801561270157600080fd5b505af1158015612715573d6000803e3d6000fd5b505050506040513d604081101561272b57600080fd5b50805160209091015190955093506127bd565b6040805163226bf2d160e21b81526001600160a01b0389811660048301528251908516926389afcb4492602480820193918290030181600087803b15801561278557600080fd5b505af1158015612799573d6000803e3d6000fd5b505050506040513d60408110156127af57600080fd5b508051602090910151955093505b888510156127fc5760405162461bcd60e51b8152600401808060200182810382526026815260200180614c3d6026913960400191505060405180910390fd5b8784101561283b5760405162461bcd60e51b8152600401808060200182810382526025815260200180614ccf6025913960400191505060405180910390fd5b50505097509795505050505050565b60608242811015612890576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316878760008181106128c757fe5b905060200201356001600160a01b03166001600160a01b031614612920576040805162461bcd60e51b815260206004820152601c6024820152600080516020614c88833981519152604482015290519081900360640190fd5b61297e7f00000000000000000000000000000000000000000000000000000000000000003489898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061457292505050565b915060006129b37f00000000000000000000000000000000000000000000000000000000000000008989600081811061133d57fe5b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0846000815181106129f157fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a2457600080fd5b505af1158015612a38573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb8285600081518110612a7a57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612ac857600080fd5b505af1158015612adc573d6000803e3d6000fd5b505050506040513d6020811015612af257600080fd5b5051612afa57fe5b6002871415612bf757806001600160a01b031663d4b32b50898986600081518110612b2157fe5b60200260200101518a896040518663ffffffff1660e01b81526004018080602001858152602001846001600160a01b0316815260200183151581526020018281038252878782818152602001925060200280828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b158015612baf57600080fd5b505af1158015612bc3573d6000803e3d6000fd5b505050506040513d6020811015612bd957600080fd5b5051835184906001908110612bea57fe5b6020026020010181815250505b8883600185510381518110612c0857fe5b60200260200101511015612c4d5760405162461bcd60e51b815260040180806020018281038252602a815260200180614c13602a913960400191505060405180910390fd5b611632838989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b9250614270915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606110d07f00000000000000000000000000000000000000000000000000000000000000008484614572565b6000806000612d2d7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613a00565b9050600087612d3c578c612d40565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015612db657600080fd5b505af1158015612dca573d6000803e3d6000fd5b50505050612ddc8e8e8e8e8e8e610cdf565b909f909e509c50505050505050505050505050565b60608242811015612e37576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001687876000198101818110612e7157fe5b905060200201356001600160a01b03166001600160a01b031614612eca576040805162461bcd60e51b815260206004820152601c6024820152600080516020614c88833981519152604482015290519081900360640190fd5b612f287f00000000000000000000000000000000000000000000000000000000000000008a8989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506140d492505050565b91506000612f5d7f00000000000000000000000000000000000000000000000000000000000000008989600081811061133d57fe5b9050600287141561305f576000816001600160a01b0316632fb62a478a8a8e8b8a6040518663ffffffff1660e01b81526004018080602001858152602001846001600160a01b0316815260200183151581526020018281038252878782818152602001925060200280828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b15801561300257600080fd5b505af1158015613016573d6000803e3d6000fd5b505050506040513d602081101561302c57600080fd5b50518451909150613044908290869060009061144157fe5b8460008151811061305157fe5b602002602001018181525050505b888360008151811061306d57fe5b602002602001015111156130b25760405162461bcd60e51b8152600401808060200182810382526026815260200180614dce6026913960400191505060405180910390fd5b611f6b88886000818110611c1557fe5b6000806000834281101561310b576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b6131198c8c8c8c8c8c61482d565b9094509250600061314b7f00000000000000000000000000000000000000000000000000000000000000008e8e613a00565b90506131598d338388613ac0565b6131658c338387613ac0565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b1580156131b457600080fd5b505af11580156131c8573d6000803e3d6000fd5b505050506040513d60208110156131de57600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561323e576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b61326c8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c61482d565b909450925060006132be7f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613a00565b90506132cc8b338388613ac0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561332757600080fd5b505af115801561333b573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156133b757600080fd5b505af11580156133cb573d6000803e3d6000fd5b505050506040513d60208110156133e157600080fd5b50516133e957fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b15801561343857600080fd5b505af115801561344c573d6000803e3d6000fd5b505050506040513d602081101561346257600080fd5b505192503484101561347a5761347a33853403613830565b505096509650969350505050565b606082428110156134ce576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b61352c7f00000000000000000000000000000000000000000000000000000000000000008a89898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061457292505050565b915060006135617f00000000000000000000000000000000000000000000000000000000000000008989600081811061133d57fe5b905061357388886000818110611c1557fe5b600287141561367057806001600160a01b031663d4b32b5089898660008151811061359a57fe5b60200260200101518a896040518663ffffffff1660e01b81526004018080602001858152602001846001600160a01b0316815260200183151581526020018281038252878782818152602001925060200280828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b15801561362857600080fd5b505af115801561363c573d6000803e3d6000fd5b505050506040513d602081101561365257600080fd5b505183518490600190811061366357fe5b6020026020010181815250505b888360018551038151811061368157fe5b60200260200101511015611c415760405162461bcd60e51b815260040180806020018281038252602a815260200180614c13602a913960400191505060405180910390fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106137435780518252601f199092019160209182019101613724565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146137a5576040519150601f19603f3d011682016040523d82523d6000602084013e6137aa565b606091505b50915091508180156137d85750805115806137d857508080602001905160208110156137d557600080fd5b50515b613829576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061387c5780518252601f19909201916020918201910161385d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146138de576040519150601f19603f3d011682016040523d82523d6000602084013e6138e3565b606091505b50509050806139235760405162461bcd60e51b8152600401808060200182810382526023815260200180614d676023913960400191505060405180910390fd5b505050565b60008084116139685760405162461bcd60e51b815260040180806020018281038252602a815260200180614be9602a913960400191505060405180910390fd5b6000831180156139785750600082115b6139b35760405162461bcd60e51b8152600401808060200182810382526027815260200180614ca86027913960400191505060405180910390fd5b60006139c1856103e5614abe565b905060006139cf8285614abe565b905060006139e9836139e3886103e8614abe565b90614221565b90508082816139f457fe5b04979650505050505050565b6000806000613a0f858561474f565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527fb2b53dca60cae1d1f93f64d80703b888689f28b63c483459183f2f4271fa0308609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310613b455780518252601f199092019160209182019101613b26565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613ba7576040519150601f19603f3d011682016040523d82523d6000602084013e613bac565b606091505b5091509150818015613bda575080511580613bda5750808060200190516020811015613bd757600080fd5b50515b613c155760405162461bcd60e51b8152600401808060200182810382526024815260200180614d8a6024913960400191505060405180910390fd5b505050505050565b60005b600184510381101561407e576000613c61858381518110613c3d57fe5b6020026020010151868460010181518110613c5457fe5b602002602001015161474f565b5090506000613cba7f0000000000000000000000000000000000000000000000000000000000000000878581518110613c9657fe5b6020026020010151888660010181518110613cad57fe5b6020026020010151613a00565b90506000806000836001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613cfa57600080fd5b505afa158015613d0e573d6000803e3d6000fd5b505050506040513d6060811015613d2457600080fd5b5080516020909101518a516001600160701b0392831694509116915060009081906001600160a01b038816908c908a908110613d5c57fe5b60200260200101516001600160a01b031614613d79578284613d7c565b83835b915091506000613de6838d8b81518110613d9257fe5b60200260200101516001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561102957600080fd5b90508b5160021415613ecc57866001600160a01b031663d4b32b508d838e8e6040518563ffffffff1660e01b81526004018080602001858152602001846001600160a01b031681526020018315158152602001828103825286818151815260200191508051906020019060200280838360005b83811015613e71578181015183820152602001613e59565b5050505090500195505050505050602060405180830381600087803b158015613e9957600080fd5b505af1158015613ead573d6000803e3d6000fd5b505050506040513d6020811015613ec357600080fd5b50519550613eda565b613ed7818484613928565b95505b5050505050600080846001600160a01b0316898781518110613ef857fe5b60200260200101516001600160a01b031614613f1657826000613f1a565b6000835b91509150600060028a51038710613f315788613f7b565b613f7b7f00000000000000000000000000000000000000000000000000000000000000008b8960010181518110613f6457fe5b60200260200101518c8a60020181518110613cad57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908b169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614005578181015183820152602001613fed565b50505050905090810190601f1680156140325780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561405457600080fd5b505af1158015614068573d6000803e3d6000fd5b505060019098019750613c209650505050505050565b50505050565b808203828111156110d3576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b606060028251101561412d576040805162461bcd60e51b815260206004820152601d60248201527f53616b65537761704c6962726172793a20494e56414c49445f50415448000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561414557600080fd5b5060405190808252806020026020018201604052801561416f578160200160208202803683370190505b509050828160018351038151811061418357fe5b60209081029190910101528151600019015b8015614219576000806141d2878660018603815181106141b157fe5b60200260200101518786815181106141c557fe5b6020026020010151614b21565b915091506141f48484815181106141e557fe5b6020026020010151838361449a565b84600185038151811061420357fe5b6020908102919091010152505060001901614195565b509392505050565b808201828110156110d3576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60005b600183510381101561407e5760008084838151811061428e57fe5b60200260200101518584600101815181106142a557fe5b60200260200101519150915060006142bd838361474f565b50905060008785600101815181106142d157fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146142ff57826000614303565b6000835b91509150600060028a5103881061431a578861434e565b61434e7f0000000000000000000000000000000000000000000000000000000000000000878c8b60020181518110613cad57fe5b905061437b7f00000000000000000000000000000000000000000000000000000000000000008888613a00565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156143b8576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614420578181015183820152602001614408565b50505050905090810190601f16801561444d5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561446f57600080fd5b505af1158015614483573d6000803e3d6000fd5b505060019099019850614273975050505050505050565b60008084116144da5760405162461bcd60e51b815260040180806020018281038252602b815260200180614d3c602b913960400191505060405180910390fd5b6000831180156144ea5750600082115b6145255760405162461bcd60e51b8152600401808060200182810382526027815260200180614ca86027913960400191505060405180910390fd5b600061453d6103e86145378688614abe565b90614abe565b905060006145516103e56145378689614084565b9050614568600182848161456157fe5b0490614221565b9695505050505050565b60606002825110156145cb576040805162461bcd60e51b815260206004820152601d60248201527f53616b65537761704c6962726172793a20494e56414c49445f50415448000000604482015290519081900360640190fd5b815167ffffffffffffffff811180156145e357600080fd5b5060405190808252806020026020018201604052801561460d578160200160208202803683370190505b509050828160008151811061461e57fe5b60200260200101818152505060005b6001835103811015614219576000806146638786858151811061464c57fe5b60200260200101518786600101815181106141c557fe5b9150915061468584848151811061467657fe5b60200260200101518383613928565b84846001018151811061469457fe5b6020908102919091010152505060010161462d565b60008084116146e95760405162461bcd60e51b8152600401808060200182810382526024815260200180614cf46024913960400191505060405180910390fd5b6000831180156146f95750600082115b6147345760405162461bcd60e51b8152600401808060200182810382526027815260200180614ca86027913960400191505060405180910390fd5b8261473f8584614abe565b8161474657fe5b04949350505050565b600080826001600160a01b0316846001600160a01b031614156147a35760405162461bcd60e51b8152600401808060200182810382526024815260200180614d186024913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b0316106147c35782846147c6565b83835b90925090506001600160a01b038216614826576040805162461bcd60e51b815260206004820152601d60248201527f53616b65537761704c6962726172793a205a45524f5f41444452455353000000604482015290519081900360640190fd5b9250929050565b60008060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a439058a8a6040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b1580156148b957600080fd5b505afa1580156148cd573d6000803e3d6000fd5b505050506040513d60208110156148e357600080fd5b50516001600160a01b031614156149a1577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c9c6539689896040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b15801561497457600080fd5b505af1158015614988573d6000803e3d6000fd5b505050506040513d602081101561499e57600080fd5b50505b6000806149cf7f00000000000000000000000000000000000000000000000000000000000000008b8b614b21565b915091508160001480156149e1575080155b156149f157879350869250614ab1565b60006149fe8984846146a9565b9050878111614a515785811015614a465760405162461bcd60e51b8152600401808060200182810382526025815260200180614ccf6025913960400191505060405180910390fd5b889450925082614aaf565b6000614a5e8984866146a9565b905089811115614a6a57fe5b87811015614aa95760405162461bcd60e51b8152600401808060200182810382526025815260200180614c636025913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6000811580614ad957505080820282828281614ad657fe5b04145b6110d3576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b6000806000614b30858561474f565b509050600080614b41888888613a00565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614b7957600080fd5b505afa158015614b8d573d6000803e3d6000fd5b505050506040513d6060811015614ba357600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b0387811690841614614bd6578082614bd9565b81815b9099909850965050505050505056fe53616b65537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5453616b6553776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5453616b655377617070526f757465723a20494e53554646494349454e545f415f414d4f554e5453616b6553776170526f757465723a20494e53554646494349454e545f415f414d4f554e5453616b6553776170526f757465723a20494e56414c49445f504154480000000053616b65537761704c6962726172793a20494e53554646494349454e545f4c495155494449545953616b6553776170526f757465723a20494e53554646494349454e545f425f414d4f554e5453616b65537761704c6962726172793a20494e53554646494349454e545f414d4f554e5453616b65537761704c6962726172793a204944454e544943414c5f41444452455353455353616b65537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45445472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c454453616b6553776170526f757465723a204558504952454400000000000000000053616b6553776170526f757465723a204558434553534956455f494e5055545f414d4f554e54a26469706673582212202d9a56a7de8fd14d74ef87641b7f49b0e41c19631acbe4dd97de9e297bcc6b5164736f6c634300060c003300000000000000000000000075e48c954594d64ef9613aeef97ad85370f13807000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Deployed Bytecode
0x60806040526004361061014f5760003560e01c8063ad5c4648116100b6578063d06ca61f1161006f578063d06ca61f146109b5578063ded9382a14610a6a578063e7bb988d14610add578063e8e3370014610b7b578063f305d71914610bfb578063fa775c0f14610c4157610188565b8063ad5c4648146107fd578063ad615dec1461082e578063af2979eb14610864578063baa2abde146108b7578063c27e85ca14610914578063c45a0155146109a057610188565b80635b0d5984116101085780635b0d5984146104ee57806361be71b2146105615780636e03efb5146105ff57806385f8c2591461069d5780639be677c1146106d3578063a2e250b31461077157610188565b806302751cec1461018d578063054d50d4146101f9578063099963f4146102415780631f00ca74146102df5780632195995c146103e45780632533ef941461046257610188565b3661018857336001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610cdf565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610df9565b60408051918252519081900360200190f35b34801561024d57600080fd5b50610186600480360360c081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b0381351690602081013590604001351515610e0e565b3480156102eb57600080fd5b506103946004803603604081101561030257600080fd5b81359190810190604081016020820135600160201b81111561032357600080fd5b82018360208201111561033557600080fd5b803590602001918460208302840111600160201b8311171561035657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110a3945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103d05781810151838201526020016103b8565b505050509050019250505060405180910390f35b3480156103f057600080fd5b506101e0600480360361016081101561040857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff61010082013516906101208101359061014001356110d9565b610394600480360360a081101561047857600080fd5b81359190810190604081016020820135600160201b81111561049957600080fd5b8201836020820111156104ab57600080fd5b803590602001918460208302840111600160201b831117156104cc57600080fd5b91935091506001600160a01b03813516906020810135906040013515156111d4565b3480156104fa57600080fd5b5061022f600480360361014081101561051257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561163e565b34801561056d57600080fd5b50610186600480360360c081101561058457600080fd5b813591602081013591810190606081016040820135600160201b8111156105aa57600080fd5b8201836020820111156105bc57600080fd5b803590602001918460208302840111600160201b831117156105dd57600080fd5b91935091506001600160a01b038135169060208101359060400135151561174c565b34801561060b57600080fd5b50610394600480360360c081101561062257600080fd5b813591602081013591810190606081016040820135600160201b81111561064857600080fd5b82018360208201111561065a57600080fd5b803590602001918460208302840111600160201b8311171561067b57600080fd5b91935091506001600160a01b03813516906020810135906040013515156119d7565b3480156106a957600080fd5b5061022f600480360360608110156106c057600080fd5b5080359060208101359060400135611c8d565b3480156106df57600080fd5b50610394600480360360c08110156106f657600080fd5b813591602081013591810190606081016040820135600160201b81111561071c57600080fd5b82018360208201111561072e57600080fd5b803590602001918460208302840111600160201b8311171561074f57600080fd5b91935091506001600160a01b0381351690602081013590604001351515611c9a565b610186600480360360a081101561078757600080fd5b81359190810190604081016020820135600160201b8111156107a857600080fd5b8201836020820111156107ba57600080fd5b803590602001918460208302840111600160201b831117156107db57600080fd5b91935091506001600160a01b0381351690602081013590604001351515612060565b34801561080957600080fd5b506108126123d3565b604080516001600160a01b039092168252519081900360200190f35b34801561083a57600080fd5b5061022f6004803603606081101561085157600080fd5b50803590602081013590604001356123f7565b34801561087057600080fd5b5061022f600480360360c081101561088757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612404565b3480156108c357600080fd5b506101e0600480360360e08110156108da57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612595565b610394600480360360a081101561092a57600080fd5b81359190810190604081016020820135600160201b81111561094b57600080fd5b82018360208201111561095d57600080fd5b803590602001918460208302840111600160201b8311171561097e57600080fd5b91935091506001600160a01b038135169060208101359060400135151561284a565b3480156109ac57600080fd5b50610812612c8c565b3480156109c157600080fd5b50610394600480360360408110156109d857600080fd5b81359190810190604081016020820135600160201b8111156109f957600080fd5b820183602082011115610a0b57600080fd5b803590602001918460208302840111600160201b83111715610a2c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612cb0945050505050565b348015610a7657600080fd5b506101e06004803603610140811015610a8e57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612cdd565b348015610ae957600080fd5b50610394600480360360c0811015610b0057600080fd5b813591602081013591810190606081016040820135600160201b811115610b2657600080fd5b820183602082011115610b3857600080fd5b803590602001918460208302840111600160201b83111715610b5957600080fd5b91935091506001600160a01b0381351690602081013590604001351515612df1565b348015610b8757600080fd5b50610bdd6004803603610100811015610b9f57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e001356130c2565b60408051938452602084019290925282820152519081900360600190f35b610bdd600480360360c0811015610c1157600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356131f5565b348015610c4d57600080fd5b50610394600480360360c0811015610c6457600080fd5b813591602081013591810190606081016040820135600160201b811115610c8a57600080fd5b820183602082011115610c9c57600080fd5b803590602001918460208302840111600160201b83111715610cbd57600080fd5b91935091506001600160a01b0381351690602081013590604001351515613488565b6000808242811015610d26576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b610d55897f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28a8a8a308a612595565b9093509150610d658986856136c6565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610dcb57600080fd5b505af1158015610ddf573d6000803e3d6000fd5b50505050610ded8583613830565b50965096945050505050565b6000610e06848484613928565b949350505050565b8142811015610e52576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b610edc86866000818110610e6257fe5b905060200201356001600160a01b031633610ed67f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f138078a8a6000818110610ea457fe5b905060200201356001600160a01b03168b8b6001818110610ec157fe5b905060200201356001600160a01b0316613a00565b8b613ac0565b600086866000198101818110610eee57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610f4a57600080fd5b505afa158015610f5e573d6000803e3d6000fd5b505050506040513d6020811015610f7457600080fd5b50516040805160208981028281018201909352898252929350610fb89290918a918a918291850190849080828437600092019190915250899250879150613c1d9050565b8761105b8289896000198101818110610fcd57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561102957600080fd5b505afa15801561103d573d6000803e3d6000fd5b505050506040513d602081101561105357600080fd5b505190614084565b10156110985760405162461bcd60e51b815260040180806020018281038252602a815260200180614c13602a913960400191505060405180910390fd5b505050505050505050565b60606110d07f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f1380784846140d4565b90505b92915050565b6000806111077f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f138078e8e613a00565b6001600160a01b031663d505accf333089611122578e611126565b6000195b604080516001600160e01b031960e087901b1681526001600160a01b0394851660048201529290931660248301526044820152606481018b905260ff8916608482015260a4810188905260c48101879052905160e480830192600092919082900301818387803b15801561119957600080fd5b505af11580156111ad573d6000803e3d6000fd5b505050506111c08d8d8d8d8d8d8d612595565b909e909d509b505050505050505050505050565b6060824281101561121a576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03168787600081811061125157fe5b905060200201356001600160a01b03166001600160a01b0316146112aa576040805162461bcd60e51b815260206004820152601c6024820152600080516020614c88833981519152604482015290519081900360640190fd5b6113087f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f13807898989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506140d492505050565b9150600061135a7f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f138078989600081811061133d57fe5b905060200201356001600160a01b03168a8a6001818110610ec157fe5b90506002871415611472576000816001600160a01b0316632fb62a478a8a8d8b8a6040518663ffffffff1660e01b81526004018080602001858152602001846001600160a01b0316815260200183151581526020018281038252878782818152602001925060200280828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b1580156113ff57600080fd5b505af1158015611413573d6000803e3d6000fd5b505050506040513d602081101561142957600080fd5b50518451909150611457908290869060009061144157fe5b602002602001015161422190919063ffffffff16565b8460008151811061146457fe5b602002602001018181525050505b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0846000815181106114ae57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156114e157600080fd5b505af11580156114f5573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb828560008151811061153757fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561158557600080fd5b505af1158015611599573d6000803e3d6000fd5b505050506040513d60208110156115af57600080fd5b50516115b757fe5b6115f6838989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b9250614270915050565b8260008151811061160357fe5b602002602001015134111561163257611632338460008151811061162357fe5b60200260200101513403613830565b50509695505050505050565b60008061168c7f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f138078d7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2613a00565b905060008661169b578b61169f565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561171557600080fd5b505af1158015611729573d6000803e3d6000fd5b5050505061173b8d8d8d8d8d8d612404565b9d9c50505050505050505050505050565b8142811015611790576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216868660001981018181106117ca57fe5b905060200201356001600160a01b03166001600160a01b031614611823576040805162461bcd60e51b815260206004820152601c6024820152600080516020614c88833981519152604482015290519081900360640190fd5b61183386866000818110610e6257fe5b611873868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250869150613c1d9050565b60007f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156118e257600080fd5b505afa1580156118f6573d6000803e3d6000fd5b505050506040513d602081101561190c57600080fd5b505190508781101561194f5760405162461bcd60e51b815260040180806020018281038252602a815260200180614c13602a913960400191505060405180910390fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156119b557600080fd5b505af11580156119c9573d6000803e3d6000fd5b505050506110988582613830565b60608242811015611a1d576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b611a7b7f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f138078a8989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506140d492505050565b91506000611ab07f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f138078989600081811061133d57fe5b90506002871415611bb2576000816001600160a01b0316632fb62a478a8a8e8b8a6040518663ffffffff1660e01b81526004018080602001858152602001846001600160a01b0316815260200183151581526020018281038252878782818152602001925060200280828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b158015611b5557600080fd5b505af1158015611b69573d6000803e3d6000fd5b505050506040513d6020811015611b7f57600080fd5b50518451909150611b97908290869060009061144157fe5b84600081518110611ba457fe5b602002602001018181525050505b8883600081518110611bc057fe5b60200260200101511115611c055760405162461bcd60e51b8152600401808060200182810382526026815260200180614dce6026913960400191505060405180910390fd5b611c4188886000818110611c1557fe5b905060200201356001600160a01b0316338386600081518110611c3457fe5b6020026020010151613ac0565b611c80838989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b9250614270915050565b5050979650505050505050565b6000610e0684848461449a565b60608242811015611ce0576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21687876000198101818110611d1a57fe5b905060200201356001600160a01b03166001600160a01b031614611d73576040805162461bcd60e51b815260206004820152601c6024820152600080516020614c88833981519152604482015290519081900360640190fd5b611dd17f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f138078a89898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061457292505050565b91506000611e067f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f138078989600081811061133d57fe5b9050611e1888886000818110611c1557fe5b6002871415611f1557806001600160a01b031663d4b32b50898986600081518110611e3f57fe5b60200260200101518a896040518663ffffffff1660e01b81526004018080602001858152602001846001600160a01b0316815260200183151581526020018281038252878782818152602001925060200280828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b158015611ecd57600080fd5b505af1158015611ee1573d6000803e3d6000fd5b505050506040513d6020811015611ef757600080fd5b5051835184906001908110611f0857fe5b6020026020010181815250505b8883600185510381518110611f2657fe5b60200260200101511015611f6b5760405162461bcd60e51b815260040180806020018281038252602a815260200180614c13602a913960400191505060405180910390fd5b611faa83898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614270915050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d84600186510381518110611fe957fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561202757600080fd5b505af115801561203b573d6000803e3d6000fd5b50505050611c80868460018651038151811061205357fe5b6020026020010151613830565b81428110156120a4576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316868660008181106120db57fe5b905060200201356001600160a01b03166001600160a01b031614612134576040805162461bcd60e51b815260206004820152601c6024820152600080516020614c88833981519152604482015290519081900360640190fd5b60003490507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561219457600080fd5b505af11580156121a8573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb61220d7f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f138078a8a6000818110610ea457fe5b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561225457600080fd5b505af1158015612268573d6000803e3d6000fd5b505050506040513d602081101561227e57600080fd5b505161228657fe5b60008787600019810181811061229857fe5b905060200201356001600160a01b03166001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156122f457600080fd5b505afa158015612308573d6000803e3d6000fd5b505050506040513d602081101561231e57600080fd5b50516040805160208a810282810182019093528a82529293506123629290918b918b9182918501908490808284376000920191909152508a9250889150613c1d9050565b8861105b828a8a600019810181811061237757fe5b905060200201356001600160a01b03166001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561102957600080fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6000610e068484846146a9565b6000814281101561244a576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b612479887f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28989893089612595565b90508092505061250288858a6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156124d157600080fd5b505afa1580156124e5573d6000803e3d6000fd5b505050506040513d60208110156124fb57600080fd5b50516136c6565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561256857600080fd5b505af115801561257c573d6000803e3d6000fd5b5050505061258a8483613830565b509695505050505050565b60008082428110156125dc576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b60006126097f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f138078c8c613a00565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561266457600080fd5b505af1158015612678573d6000803e3d6000fd5b505050506040513d602081101561268e57600080fd5b506000905061269d8c8c61474f565b509050806001600160a01b03168c6001600160a01b0316141561273e576040805163226bf2d160e21b81526001600160a01b0389811660048301528251908516926389afcb4492602480820193918290030181600087803b15801561270157600080fd5b505af1158015612715573d6000803e3d6000fd5b505050506040513d604081101561272b57600080fd5b50805160209091015190955093506127bd565b6040805163226bf2d160e21b81526001600160a01b0389811660048301528251908516926389afcb4492602480820193918290030181600087803b15801561278557600080fd5b505af1158015612799573d6000803e3d6000fd5b505050506040513d60408110156127af57600080fd5b508051602090910151955093505b888510156127fc5760405162461bcd60e51b8152600401808060200182810382526026815260200180614c3d6026913960400191505060405180910390fd5b8784101561283b5760405162461bcd60e51b8152600401808060200182810382526025815260200180614ccf6025913960400191505060405180910390fd5b50505097509795505050505050565b60608242811015612890576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316878760008181106128c757fe5b905060200201356001600160a01b03166001600160a01b031614612920576040805162461bcd60e51b815260206004820152601c6024820152600080516020614c88833981519152604482015290519081900360640190fd5b61297e7f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f138073489898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061457292505050565b915060006129b37f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f138078989600081811061133d57fe5b90507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0846000815181106129f157fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a2457600080fd5b505af1158015612a38573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb8285600081518110612a7a57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612ac857600080fd5b505af1158015612adc573d6000803e3d6000fd5b505050506040513d6020811015612af257600080fd5b5051612afa57fe5b6002871415612bf757806001600160a01b031663d4b32b50898986600081518110612b2157fe5b60200260200101518a896040518663ffffffff1660e01b81526004018080602001858152602001846001600160a01b0316815260200183151581526020018281038252878782818152602001925060200280828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b158015612baf57600080fd5b505af1158015612bc3573d6000803e3d6000fd5b505050506040513d6020811015612bd957600080fd5b5051835184906001908110612bea57fe5b6020026020010181815250505b8883600185510381518110612c0857fe5b60200260200101511015612c4d5760405162461bcd60e51b815260040180806020018281038252602a815260200180614c13602a913960400191505060405180910390fd5b611632838989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b9250614270915050565b7f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f1380781565b60606110d07f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f138078484614572565b6000806000612d2d7f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f138078e7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2613a00565b9050600087612d3c578c612d40565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015612db657600080fd5b505af1158015612dca573d6000803e3d6000fd5b50505050612ddc8e8e8e8e8e8e610cdf565b909f909e509c50505050505050505050505050565b60608242811015612e37576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21687876000198101818110612e7157fe5b905060200201356001600160a01b03166001600160a01b031614612eca576040805162461bcd60e51b815260206004820152601c6024820152600080516020614c88833981519152604482015290519081900360640190fd5b612f287f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f138078a8989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506140d492505050565b91506000612f5d7f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f138078989600081811061133d57fe5b9050600287141561305f576000816001600160a01b0316632fb62a478a8a8e8b8a6040518663ffffffff1660e01b81526004018080602001858152602001846001600160a01b0316815260200183151581526020018281038252878782818152602001925060200280828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b15801561300257600080fd5b505af1158015613016573d6000803e3d6000fd5b505050506040513d602081101561302c57600080fd5b50518451909150613044908290869060009061144157fe5b8460008151811061305157fe5b602002602001018181525050505b888360008151811061306d57fe5b602002602001015111156130b25760405162461bcd60e51b8152600401808060200182810382526026815260200180614dce6026913960400191505060405180910390fd5b611f6b88886000818110611c1557fe5b6000806000834281101561310b576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b6131198c8c8c8c8c8c61482d565b9094509250600061314b7f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f138078e8e613a00565b90506131598d338388613ac0565b6131658c338387613ac0565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b1580156131b457600080fd5b505af11580156131c8573d6000803e3d6000fd5b505050506040513d60208110156131de57600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561323e576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b61326c8a7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28b348c8c61482d565b909450925060006132be7f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f138078c7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2613a00565b90506132cc8b338388613ac0565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561332757600080fd5b505af115801561333b573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156133b757600080fd5b505af11580156133cb573d6000803e3d6000fd5b505050506040513d60208110156133e157600080fd5b50516133e957fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b15801561343857600080fd5b505af115801561344c573d6000803e3d6000fd5b505050506040513d602081101561346257600080fd5b505192503484101561347a5761347a33853403613830565b505096509650969350505050565b606082428110156134ce576040805162461bcd60e51b81526020600482015260176024820152600080516020614dae833981519152604482015290519081900360640190fd5b61352c7f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f138078a89898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061457292505050565b915060006135617f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f138078989600081811061133d57fe5b905061357388886000818110611c1557fe5b600287141561367057806001600160a01b031663d4b32b5089898660008151811061359a57fe5b60200260200101518a896040518663ffffffff1660e01b81526004018080602001858152602001846001600160a01b0316815260200183151581526020018281038252878782818152602001925060200280828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b15801561362857600080fd5b505af115801561363c573d6000803e3d6000fd5b505050506040513d602081101561365257600080fd5b505183518490600190811061366357fe5b6020026020010181815250505b888360018551038151811061368157fe5b60200260200101511015611c415760405162461bcd60e51b815260040180806020018281038252602a815260200180614c13602a913960400191505060405180910390fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106137435780518252601f199092019160209182019101613724565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146137a5576040519150601f19603f3d011682016040523d82523d6000602084013e6137aa565b606091505b50915091508180156137d85750805115806137d857508080602001905160208110156137d557600080fd5b50515b613829576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061387c5780518252601f19909201916020918201910161385d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146138de576040519150601f19603f3d011682016040523d82523d6000602084013e6138e3565b606091505b50509050806139235760405162461bcd60e51b8152600401808060200182810382526023815260200180614d676023913960400191505060405180910390fd5b505050565b60008084116139685760405162461bcd60e51b815260040180806020018281038252602a815260200180614be9602a913960400191505060405180910390fd5b6000831180156139785750600082115b6139b35760405162461bcd60e51b8152600401808060200182810382526027815260200180614ca86027913960400191505060405180910390fd5b60006139c1856103e5614abe565b905060006139cf8285614abe565b905060006139e9836139e3886103e8614abe565b90614221565b90508082816139f457fe5b04979650505050505050565b6000806000613a0f858561474f565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527fb2b53dca60cae1d1f93f64d80703b888689f28b63c483459183f2f4271fa0308609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310613b455780518252601f199092019160209182019101613b26565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613ba7576040519150601f19603f3d011682016040523d82523d6000602084013e613bac565b606091505b5091509150818015613bda575080511580613bda5750808060200190516020811015613bd757600080fd5b50515b613c155760405162461bcd60e51b8152600401808060200182810382526024815260200180614d8a6024913960400191505060405180910390fd5b505050505050565b60005b600184510381101561407e576000613c61858381518110613c3d57fe5b6020026020010151868460010181518110613c5457fe5b602002602001015161474f565b5090506000613cba7f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f13807878581518110613c9657fe5b6020026020010151888660010181518110613cad57fe5b6020026020010151613a00565b90506000806000836001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613cfa57600080fd5b505afa158015613d0e573d6000803e3d6000fd5b505050506040513d6060811015613d2457600080fd5b5080516020909101518a516001600160701b0392831694509116915060009081906001600160a01b038816908c908a908110613d5c57fe5b60200260200101516001600160a01b031614613d79578284613d7c565b83835b915091506000613de6838d8b81518110613d9257fe5b60200260200101516001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561102957600080fd5b90508b5160021415613ecc57866001600160a01b031663d4b32b508d838e8e6040518563ffffffff1660e01b81526004018080602001858152602001846001600160a01b031681526020018315158152602001828103825286818151815260200191508051906020019060200280838360005b83811015613e71578181015183820152602001613e59565b5050505090500195505050505050602060405180830381600087803b158015613e9957600080fd5b505af1158015613ead573d6000803e3d6000fd5b505050506040513d6020811015613ec357600080fd5b50519550613eda565b613ed7818484613928565b95505b5050505050600080846001600160a01b0316898781518110613ef857fe5b60200260200101516001600160a01b031614613f1657826000613f1a565b6000835b91509150600060028a51038710613f315788613f7b565b613f7b7f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f138078b8960010181518110613f6457fe5b60200260200101518c8a60020181518110613cad57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908b169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614005578181015183820152602001613fed565b50505050905090810190601f1680156140325780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561405457600080fd5b505af1158015614068573d6000803e3d6000fd5b505060019098019750613c209650505050505050565b50505050565b808203828111156110d3576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b606060028251101561412d576040805162461bcd60e51b815260206004820152601d60248201527f53616b65537761704c6962726172793a20494e56414c49445f50415448000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561414557600080fd5b5060405190808252806020026020018201604052801561416f578160200160208202803683370190505b509050828160018351038151811061418357fe5b60209081029190910101528151600019015b8015614219576000806141d2878660018603815181106141b157fe5b60200260200101518786815181106141c557fe5b6020026020010151614b21565b915091506141f48484815181106141e557fe5b6020026020010151838361449a565b84600185038151811061420357fe5b6020908102919091010152505060001901614195565b509392505050565b808201828110156110d3576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60005b600183510381101561407e5760008084838151811061428e57fe5b60200260200101518584600101815181106142a557fe5b60200260200101519150915060006142bd838361474f565b50905060008785600101815181106142d157fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146142ff57826000614303565b6000835b91509150600060028a5103881061431a578861434e565b61434e7f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f13807878c8b60020181518110613cad57fe5b905061437b7f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f138078888613a00565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156143b8576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614420578181015183820152602001614408565b50505050905090810190601f16801561444d5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561446f57600080fd5b505af1158015614483573d6000803e3d6000fd5b505060019099019850614273975050505050505050565b60008084116144da5760405162461bcd60e51b815260040180806020018281038252602b815260200180614d3c602b913960400191505060405180910390fd5b6000831180156144ea5750600082115b6145255760405162461bcd60e51b8152600401808060200182810382526027815260200180614ca86027913960400191505060405180910390fd5b600061453d6103e86145378688614abe565b90614abe565b905060006145516103e56145378689614084565b9050614568600182848161456157fe5b0490614221565b9695505050505050565b60606002825110156145cb576040805162461bcd60e51b815260206004820152601d60248201527f53616b65537761704c6962726172793a20494e56414c49445f50415448000000604482015290519081900360640190fd5b815167ffffffffffffffff811180156145e357600080fd5b5060405190808252806020026020018201604052801561460d578160200160208202803683370190505b509050828160008151811061461e57fe5b60200260200101818152505060005b6001835103811015614219576000806146638786858151811061464c57fe5b60200260200101518786600101815181106141c557fe5b9150915061468584848151811061467657fe5b60200260200101518383613928565b84846001018151811061469457fe5b6020908102919091010152505060010161462d565b60008084116146e95760405162461bcd60e51b8152600401808060200182810382526024815260200180614cf46024913960400191505060405180910390fd5b6000831180156146f95750600082115b6147345760405162461bcd60e51b8152600401808060200182810382526027815260200180614ca86027913960400191505060405180910390fd5b8261473f8584614abe565b8161474657fe5b04949350505050565b600080826001600160a01b0316846001600160a01b031614156147a35760405162461bcd60e51b8152600401808060200182810382526024815260200180614d186024913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b0316106147c35782846147c6565b83835b90925090506001600160a01b038216614826576040805162461bcd60e51b815260206004820152601d60248201527f53616b65537761704c6962726172793a205a45524f5f41444452455353000000604482015290519081900360640190fd5b9250929050565b60008060006001600160a01b03167f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f138076001600160a01b031663e6a439058a8a6040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b1580156148b957600080fd5b505afa1580156148cd573d6000803e3d6000fd5b505050506040513d60208110156148e357600080fd5b50516001600160a01b031614156149a1577f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f138076001600160a01b031663c9c6539689896040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b15801561497457600080fd5b505af1158015614988573d6000803e3d6000fd5b505050506040513d602081101561499e57600080fd5b50505b6000806149cf7f00000000000000000000000075e48c954594d64ef9613aeef97ad85370f138078b8b614b21565b915091508160001480156149e1575080155b156149f157879350869250614ab1565b60006149fe8984846146a9565b9050878111614a515785811015614a465760405162461bcd60e51b8152600401808060200182810382526025815260200180614ccf6025913960400191505060405180910390fd5b889450925082614aaf565b6000614a5e8984866146a9565b905089811115614a6a57fe5b87811015614aa95760405162461bcd60e51b8152600401808060200182810382526025815260200180614c636025913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6000811580614ad957505080820282828281614ad657fe5b04145b6110d3576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b6000806000614b30858561474f565b509050600080614b41888888613a00565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614b7957600080fd5b505afa158015614b8d573d6000803e3d6000fd5b505050506040513d6060811015614ba357600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b0387811690841614614bd6578082614bd9565b81815b9099909850965050505050505056fe53616b65537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5453616b6553776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5453616b655377617070526f757465723a20494e53554646494349454e545f415f414d4f554e5453616b6553776170526f757465723a20494e53554646494349454e545f415f414d4f554e5453616b6553776170526f757465723a20494e56414c49445f504154480000000053616b65537761704c6962726172793a20494e53554646494349454e545f4c495155494449545953616b6553776170526f757465723a20494e53554646494349454e545f425f414d4f554e5453616b65537761704c6962726172793a20494e53554646494349454e545f414d4f554e5453616b65537761704c6962726172793a204944454e544943414c5f41444452455353455353616b65537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45445472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c454453616b6553776170526f757465723a204558504952454400000000000000000053616b6553776170526f757465723a204558434553534956455f494e5055545f414d4f554e54a26469706673582212202d9a56a7de8fd14d74ef87641b7f49b0e41c19631acbe4dd97de9e297bcc6b5164736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000075e48c954594d64ef9613aeef97ad85370f13807000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
-----Decoded View---------------
Arg [0] : _factory (address): 0x75e48C954594d64ef9613AeEF97Ad85370F13807
Arg [1] : _WETH (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000075e48c954594d64ef9613aeef97ad85370f13807
Arg [1] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Deployed Bytecode Sourcemap
18937:21426:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19418:10;-1:-1:-1;;;;;19432:4:0;19418:18;;19411:26;;;;18937:21426;;;;;23978:778;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23978:778:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;39307:257;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39307:257:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;36494:793;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36494:793:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36494:793:0;;;;;;;;;;;;-1:-1:-1;36494:793:0;-1:-1:-1;;;;;;36494:793:0;;;;;;;;;;;;;;;:::i;40102:258::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;40102:258:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;40102:258:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40102:258:0;;-1:-1:-1;40102:258:0;;-1:-1:-1;;;;;40102:258:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24764:946;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24764:946:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33871:958::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33871:958:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33871:958:0;;;;;;;;;;;;-1:-1:-1;33871:958:0;-1:-1:-1;;;;;;33871:958:0;;;;;;;;;;;;;;;:::i;27405:831::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27405:831:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;38142:880::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38142:880:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38142:880:0;;;;;;;;;;;;-1:-1:-1;38142:880:0;-1:-1:-1;;;;;;38142:880:0;;;;;;;;;;;;;;;:::i;30040:835::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30040:835:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30040:835:0;;;;;;;;;;;;-1:-1:-1;30040:835:0;-1:-1:-1;;;;;;30040:835:0;;;;;;;;;;;;;;;:::i;39572:256::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39572:256:0;;;;;;;;;;;;:::i;32835:1028::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32835:1028:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32835:1028:0;;;;;;;;;;;;-1:-1:-1;32835:1028:0;-1:-1:-1;;;;;;32835:1028:0;;;;;;;;;;;;;;;:::i;37295:839::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37295:839:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37295:839:0;;;;;;;;;;;;-1:-1:-1;37295:839:0;-1:-1:-1;;;;;;37295:839:0;;;;;;;;;;;;;;;:::i;19070:38::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;19070:38:0;;;;;;;;;;;;;;39066:233;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39066:233:0;;;;;;;;;;;;:::i;26682:715::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26682:715:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22974:996::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22974:996:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30883:878::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30883:878:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30883:878:0;;;;;;;;;;;;-1:-1:-1;30883:878:0;-1:-1:-1;;;;;;30883:878:0;;;;;;;;;;;;;;;:::i;19022:41::-;;;;;;;;;;;;;:::i;39836:258::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39836:258:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39836:258:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39836:258:0;;-1:-1:-1;39836:258:0;;-1:-1:-1;;;;;39836:258:0:i;25718:885::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25718:885:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31769:1058::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31769:1058:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31769:1058:0;;;;;;;;;;;;-1:-1:-1;31769:1058:0;-1:-1:-1;;;;;;31769:1058:0;;;;;;;;;;;;;;;:::i;20961:860::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20961:860:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;21829:1102;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21829:1102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29227:805::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29227:805:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29227:805:0;;;;;;;;;;;;-1:-1:-1;29227:805:0;-1:-1:-1;;;;;;29227:805:0;;;;;;;;;;;;;;;:::i;23978:778::-;24286:19;24320:17;24244:8;19182:15;19170:8;:27;;19162:63;;;;;-1:-1:-1;;;19162:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19162:63:0;;;;;;;;;;;;;;;24392:196:::1;24422:5;24442:4;24461:9;24485:14;24514:12;24549:4;24569:8;24392:15;:196::i;:::-;24365:223:::0;;-1:-1:-1;24365:223:0;-1:-1:-1;24599:51:0::1;24627:5:::0;24634:2;24365:223;24599:27:::1;:51::i;:::-;24667:4;-1:-1:-1::0;;;;;24661:20:0::1;;24682:9;24661:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24703:45;24734:2;24738:9;24703:30;:45::i;:::-;23978:778:::0;;;;;;;;;;:::o;39307:257::-;39458:17;39495:61;39524:8;39534:9;39545:10;39495:28;:61::i;:::-;39488:68;39307:257;-1:-1:-1;;;;39307:257:0:o;36494:793::-;36759:8;19182:15;19170:8;:27;;19162:63;;;;;-1:-1:-1;;;19162:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19162:63:0;;;;;;;;;;;;;;;36780:177:::1;36826:4;;36831:1;36826:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;36826:7:0::1;36848:10;36873:50;36897:7;36906:4;;36911:1;36906:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;36906:7:0::1;36915:4;;36920:1;36915:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;36915:7:0::1;36873:23;:50::i;:::-;36938:8;36780:31;:177::i;:::-;36968:21;36999:4:::0;;-1:-1:-1;;37004:15:0;;36999:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;36999:21:0::1;-1:-1:-1::0;;;;;36992:39:0::1;;37032:2;36992:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;36992:43:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;36992:43:0;37046:52:::1;::::0;;36992:43:::1;37046:52:::0;;::::1;::::0;;;;;;;;;;;36992:43;;-1:-1:-1;37046:52:0::1;::::0;;;37081:4;;;;;;37046:52;::::1;::::0;37081:4;;37046:52;37081:4;37046:52;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;37087:2:0;;-1:-1:-1;37091:6:0;;-1:-1:-1;37046:34:0::1;::::0;-1:-1:-1;37046:52:0:i:1;:::-;37197:12:::0;37131:62:::1;37179:13:::0;37138:4;;-1:-1:-1;;37143:15:0;;37138:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37138:21:0::1;-1:-1:-1::0;;;;;37131:39:0::1;;37171:2;37131:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;37131:43:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;37131:43:0;;:47:::1;:62::i;:::-;:78;;37109:170;;;;-1:-1:-1::0;;;37109:170:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19236:1;36494:793:::0;;;;;;;;:::o;40102:258::-;40249:24;40298:54;40327:7;40336:9;40347:4;40298:28;:54::i;:::-;40291:61;;40102:258;;;;;:::o;24764:946::-;25159:15;25189;25246:48;25270:7;25279:6;25287;25246:23;:48::i;:::-;-1:-1:-1;;;;;25232:70:0;;25317:10;25350:4;25370:10;:36;;25397:9;25370:36;;;-1:-1:-1;;25370:36:0;25232:256;;;-1:-1:-1;;;;;;25232:256:0;;;;;;;-1:-1:-1;;;;;25232:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25232:256:0;;;;;;;-1:-1:-1;25232:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25520:182;25550:6;25571;25592:9;25616:10;25641;25666:2;25683:8;25520:15;:182::i;:::-;25499:203;;;;-1:-1:-1;24764:946:0;-1:-1:-1;;;;;;;;;;;;24764:946:0:o;33871:958::-;34101:24;34082:8;19182:15;19170:8;:27;;19162:63;;;;;-1:-1:-1;;;19162:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19162:63:0;;;;;;;;;;;;;;;34157:4:::1;-1:-1:-1::0;;;;;34146:15:0::1;:4;;34151:1;34146:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;34146:7:0::1;-1:-1:-1::0;;;;;34146:15:0::1;;34138:56;;;::::0;;-1:-1:-1;;;34138:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;34138:56:0;;;;;;;;;;;;;::::1;;34215:54;34244:7;34253:9;34264:4;;34215:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;34215:28:0::1;::::0;-1:-1:-1;;;34215:54:0:i:1;:::-;34205:64;;34280:12;34295:50;34319:7;34328:4;;34333:1;34328:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;34328:7:0::1;34337:4;;34342:1;34337:7;;;;;;34295:50;34280:65:::0;-1:-1:-1;34375:1:0::1;34360:16:::0;::::1;34356:182;;;34393:13;34423:4;-1:-1:-1::0;;;;;34409:39:0::1;;34449:4;;34455:9;34466:2;34470:6;34409:68;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;34409:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34409:68:0;34505:10;;34409:68;;-1:-1:-1;34505:21:0::1;::::0;34409:68;;34505:7;;34513:1:::1;::::0;34505:10:::1;;;;;;;;;;:14;;:21;;;;:::i;:::-;34492:7;34500:1;34492:10;;;;;;;;;;;;;:34;;;::::0;::::1;34356:182;;34554:4;-1:-1:-1::0;;;;;34548:19:0::1;;34575:7;34583:1;34575:10;;;;;;;;;;;;;;34548:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;34612:4;-1:-1:-1::0;;;;;34606:20:0::1;;34627:4;34633:7;34641:1;34633:10;;;;;;;;;;;;;;34606:38;;;;;;;;;;;;;-1:-1:-1::0;;;;;34606:38:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34606:38:0;34599:46:::1;;;;34656:24;34662:7;34671:4;;34656:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;34677:2:0;;-1:-1:-1;34656:5:0::1;::::0;-1:-1:-1;;34656:24:0:i:1;:::-;34743:7;34751:1;34743:10;;;;;;;;;;;;;;34731:9;:22;34727:94;;;34755:66;34786:10;34810:7;34818:1;34810:10;;;;;;;;;;;;;;34798:9;:22;34755:30;:66::i;:::-;19236:1;33871:958:::0;;;;;;;;;:::o;27405:831::-;27762:17;27792:12;27807:45;27831:7;27840:5;27847:4;27807:23;:45::i;:::-;27792:60;;27863:13;27879:10;:36;;27906:9;27879:36;;;-1:-1:-1;;27879:36:0;27926:79;;;-1:-1:-1;;;27926:79:0;;27953:10;27926:79;;;;27973:4;27926:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27863:52;;-1:-1:-1;;;;;;27926:26:0;;;;;:79;;;;;-1:-1:-1;;27926:79:0;;;;;;;;-1:-1:-1;27926:26:0;:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28030:198;28092:5;28112:9;28136:14;28165:12;28192:2;28209:8;28030:47;:198::i;:::-;28016:212;27405:831;-1:-1:-1;;;;;;;;;;;;;27405:831:0:o;38142:880::-;38404:8;19182:15;19170:8;:27;;19162:63;;;;;-1:-1:-1;;;19162:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19162:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;38458:4:0::1;38433:29;:4:::0;;-1:-1:-1;;38438:15:0;;38433:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;38433:21:0::1;-1:-1:-1::0;;;;;38433:29:0::1;;38425:70;;;::::0;;-1:-1:-1;;;38425:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;38425:70:0;;;;;;;;;;;;;::::1;;38506:177;38552:4;;38557:1;38552:7;;;;;;38506:177;38694:63;38729:4;;38694:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;38743:4:0::1;::::0;-1:-1:-1;38750:6:0;;-1:-1:-1;38694:34:0::1;::::0;-1:-1:-1;38694:63:0:i:1;:::-;38768:17;38795:4;-1:-1:-1::0;;;;;38788:22:0::1;;38819:4;38788:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;38788:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;38788:37:0;;-1:-1:-1;38844:25:0;;::::1;;38836:80;;;;-1:-1:-1::0;;;38836:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38933:4;-1:-1:-1::0;;;;;38927:20:0::1;;38948:9;38927:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;38969:45;39000:2;39004:9;38969:30;:45::i;30040:835::-:0;30295:24;30276:8;19182:15;19170:8;:27;;19162:63;;;;;-1:-1:-1;;;19162:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19162:63:0;;;;;;;;;;;;;;;30342:54:::1;30371:7;30380:9;30391:4;;30342:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;30342:28:0::1;::::0;-1:-1:-1;;;30342:54:0:i:1;:::-;30332:64;;30407:12;30422:50;30446:7;30455:4;;30460:1;30455:7;;;;;;30422:50;30407:65:::0;-1:-1:-1;30502:1:0::1;30487:16:::0;::::1;30483:182;;;30520:13;30550:4;-1:-1:-1::0;;;;;30536:39:0::1;;30576:4;;30582:9;30593:2;30597:6;30536:68;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;30536:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30536:68:0;30632:10;;30536:68;;-1:-1:-1;30632:21:0::1;::::0;30536:68;;30632:7;;30640:1:::1;::::0;30632:10:::1;;;:21;30619:7;30627:1;30619:10;;;;;;;;;;;;;:34;;;::::0;::::1;30483:182;;30697:11;30683:7;30691:1;30683:10;;;;;;;;;;;;;;:25;;30675:76;;;;-1:-1:-1::0;;;30675:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30762:70;30794:4;;30799:1;30794:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30794:7:0::1;30803:10;30815:4;30821:7;30829:1;30821:10;;;;;;;;;;;;;;30762:31;:70::i;:::-;30843:24;30849:7;30858:4;;30843:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;30864:2:0;;-1:-1:-1;30843:5:0::1;::::0;-1:-1:-1;;30843:24:0:i:1;:::-;19236:1;30040:835:::0;;;;;;;;;;:::o;39572:256::-;39723:16;39759:61;39787:9;39798;39809:10;39759:27;:61::i;32835:1028::-;33087:24;33068:8;19182:15;19170:8;:27;;19162:63;;;;;-1:-1:-1;;;19162:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19162:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33157:4:0::1;33132:29;:4:::0;;-1:-1:-1;;33137:15:0;;33132:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33132:21:0::1;-1:-1:-1::0;;;;;33132:29:0::1;;33124:70;;;::::0;;-1:-1:-1;;;33124:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33124:70:0;;;;;;;;;;;;;::::1;;33215:54;33245:7;33254:8;33264:4;;33215:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;33215:29:0::1;::::0;-1:-1:-1;;;33215:54:0:i:1;:::-;33205:64;;33280:12;33295:50;33319:7;33328:4;;33333:1;33328:7;;;;;;33295:50;33280:65;;33356:70;33388:4;;33393:1;33388:7;;;;;;33356:70;33456:1;33441:16:::0;::::1;33437:130;;;33501:4;-1:-1:-1::0;;;;;33487:38:0::1;;33526:4;;33532:7;33540:1;33532:10;;;;;;;;;;;;;;33544:2;33548:6;33487:68;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;33487:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;33487:68:0;33474:10;;:7;;33482:1:::1;::::0;33474:10;::::1;;;;;;;;;;:81;;;::::0;::::1;33437:130;33616:12;33585:7;33610:1;33593:7;:14;:18;33585:27;;;;;;;;;;;;;;:43;;33577:98;;;;-1:-1:-1::0;;;33577:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33686:35;33692:7;33701:4;;33686:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;33715:4:0::1;::::0;-1:-1:-1;33686:5:0::1;::::0;-1:-1:-1;;33686:35:0:i:1;:::-;33738:4;-1:-1:-1::0;;;;;33732:20:0::1;;33753:7;33778:1;33761:7;:14;:18;33753:27;;;;;;;;;;;;;;33732:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33792:63;33823:2;33827:7;33852:1;33835:7;:14;:18;33827:27;;;;;;;;;;;;;;33792:30;:63::i;37295:839::-:0;37538:8;19182:15;19170:8;:27;;19162:63;;;;;-1:-1:-1;;;19162:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19162:63:0;;;;;;;;;;;;;;;37578:4:::1;-1:-1:-1::0;;;;;37567:15:0::1;:4;;37572:1;37567:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;37567:7:0::1;-1:-1:-1::0;;;;;37567:15:0::1;;37559:56;;;::::0;;-1:-1:-1;;;37559:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;37559:56:0;;;;;;;;;;;;;::::1;;37626:16;37645:9;37626:28;;37671:4;-1:-1:-1::0;;;;;37665:19:0::1;;37692:8;37665:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;37727:4;-1:-1:-1::0;;;;;37721:20:0::1;;37742:50;37766:7;37775:4;;37780:1;37775:7;;;;;;37742:50;37794:8;37721:82;;;;;;;;;;;;;-1:-1:-1::0;;;;;37721:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;37721:82:0;37714:90:::1;;;;37815:21;37846:4:::0;;-1:-1:-1;;37851:15:0;;37846:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37846:21:0::1;-1:-1:-1::0;;;;;37839:39:0::1;;37879:2;37839:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;37839:43:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;37839:43:0;37893:52:::1;::::0;;37839:43:::1;37893:52:::0;;::::1;::::0;;;;;;;;;;;37839:43;;-1:-1:-1;37893:52:0::1;::::0;;;37928:4;;;;;;37893:52;::::1;::::0;37928:4;;37893:52;37928:4;37893:52;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;37934:2:0;;-1:-1:-1;37938:6:0;;-1:-1:-1;37893:34:0::1;::::0;-1:-1:-1;37893:52:0:i:1;:::-;38044:12:::0;37978:62:::1;38026:13:::0;37985:4;;-1:-1:-1;;37990:15:0;;37985:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37985:21:0::1;-1:-1:-1::0;;;;;37978:39:0::1;;38018:2;37978:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;37978:43:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;19070:38:::0;;;:::o;39066:233::-;39206:15;39241:50;39263:7;39272:8;39282;39241:21;:50::i;26682:715::-;26960:17;26941:8;19182:15;19170:8;:27;;19162:63;;;;;-1:-1:-1;;;19162:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19162:63:0;;;;;;;;;;;;;;;27006:196:::1;27036:5;27056:4;27075:9;27099:14;27128:12;27163:4;27183:8;27006:15;:196::i;:::-;26990:212;;;;;;27213:78;27241:5;27248:2;27259:5;-1:-1:-1::0;;;;;27252:23:0::1;;27284:4;27252:38;;;;;;;;;;;;;-1:-1:-1::0;;;;;27252:38:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27252:38:0;27213:27:::1;:78::i;:::-;27308:4;-1:-1:-1::0;;;;;27302:20:0::1;;27323:9;27302:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27344:45;27375:2;27379:9;27344:30;:45::i;:::-;26682:715:::0;;;;;;;;;:::o;22974:996::-;23299:15;23329;23257:8;19182:15;19170:8;:27;;19162:63;;;;;-1:-1:-1;;;19162:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19162:63:0;;;;;;;;;;;;;;;23372:12:::1;23387:48;23411:7;23420:6;23428;23387:23;:48::i;:::-;23446:61;::::0;;-1:-1:-1;;;23446:61:0;;23479:10:::1;23446:61;::::0;::::1;::::0;-1:-1:-1;;;;;23446:32:0;::::1;:61:::0;;;;;;;;;;;;;;23372:63;;-1:-1:-1;23446:32:0;;::::1;::::0;:61;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;23446:32:0;:61;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23545:14:0::1;::::0;-1:-1:-1;23565:42:0::1;23592:6:::0;23600;23565:26:::1;:42::i;:::-;23544:63;;;23632:6;-1:-1:-1::0;;;;;23622:16:0::1;:6;-1:-1:-1::0;;;;;23622:16:0::1;;23618:180;;;23676:28;::::0;;-1:-1:-1;;;23676:28:0;;-1:-1:-1;;;;;23676:28:0;;::::1;;::::0;::::1;::::0;;;:24;;::::1;::::0;::::1;::::0;:28;;;;;;;;;;;-1:-1:-1;23676:24:0;:28;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23676:28:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;23676:28:0;-1:-1:-1;23618:180:0::1;;;23758:28;::::0;;-1:-1:-1;;;23758:28:0;;-1:-1:-1;;;;;23758:28:0;;::::1;;::::0;::::1;::::0;;;:24;;::::1;::::0;::::1;::::0;:28;;;;;;;;;;;-1:-1:-1;23758:24:0;:28;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23758:28:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;23758:28:0;-1:-1:-1;23618:180:0::1;23827:10;23816:7;:21;;23808:72;;;;-1:-1:-1::0;;;23808:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23910:10;23899:7;:21;;23891:71;;;;-1:-1:-1::0;;;23891:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19236:1;;22974:996:::0;;;;;;;;;;;:::o;30883:878::-;31116:24;31097:8;19182:15;19170:8;:27;;19162:63;;;;;-1:-1:-1;;;19162:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19162:63:0;;;;;;;;;;;;;;;31172:4:::1;-1:-1:-1::0;;;;;31161:15:0::1;:4;;31166:1;31161:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31161:7:0::1;-1:-1:-1::0;;;;;31161:15:0::1;;31153:56;;;::::0;;-1:-1:-1;;;31153:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31153:56:0;;;;;;;;;;;;;::::1;;31230:55;31260:7;31269:9;31280:4;;31230:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;31230:29:0::1;::::0;-1:-1:-1;;;31230:55:0:i:1;:::-;31220:65;;31296:12;31311:50;31335:7;31344:4;;31349:1;31344:7;;;;;;31311:50;31296:65;;31378:4;-1:-1:-1::0;;;;;31372:19:0::1;;31399:7;31407:1;31399:10;;;;;;;;;;;;;;31372:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;31436:4;-1:-1:-1::0;;;;;31430:20:0::1;;31451:4;31457:7;31465:1;31457:10;;;;;;;;;;;;;;31430:38;;;;;;;;;;;;;-1:-1:-1::0;;;;;31430:38:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31430:38:0;31423:46:::1;;;;31499:1;31484:16:::0;::::1;31480:130;;;31544:4;-1:-1:-1::0;;;;;31530:38:0::1;;31569:4;;31575:7;31583:1;31575:10;;;;;;;;;;;;;;31587:2;31591:6;31530:68;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;31530:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31530:68:0;31517:10;;:7;;31525:1:::1;::::0;31517:10;::::1;;;;;;;;;;:81;;;::::0;::::1;31480:130;31659:12;31628:7;31653:1;31636:7;:14;:18;31628:27;;;;;;;;;;;;;;:43;;31620:98;;;;-1:-1:-1::0;;;31620:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31729:24;31735:7;31744:4;;31729:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;31750:2:0;;-1:-1:-1;31729:5:0::1;::::0;-1:-1:-1;;31729:24:0:i:1;19022:41::-:0;;;:::o;39836:258::-;39983:24;40032:54;40062:7;40071:8;40081:4;40032:29;:54::i;25718:885::-;26096:19;26130:17;26175:12;26190:45;26214:7;26223:5;26230:4;26190:23;:45::i;:::-;26175:60;;26246:13;26262:10;:36;;26289:9;26262:36;;;-1:-1:-1;;26262:36:0;26309:79;;;-1:-1:-1;;;26309:79:0;;26336:10;26309:79;;;;26356:4;26309:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26246:52;;-1:-1:-1;;;;;;26309:26:0;;;;;:79;;;;;-1:-1:-1;;26309:79:0;;;;;;;;-1:-1:-1;26309:26:0;:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26426:169;26459:5;26479:9;26503:14;26532:12;26559:2;26576:8;26426:18;:169::i;:::-;26399:196;;;;-1:-1:-1;25718:885:0;-1:-1:-1;;;;;;;;;;;;;25718:885:0:o;31769:1058::-;32021:24;32002:8;19182:15;19170:8;:27;;19162:63;;;;;-1:-1:-1;;;19162:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19162:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32091:4:0::1;32066:29;:4:::0;;-1:-1:-1;;32071:15:0;;32066:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32066:21:0::1;-1:-1:-1::0;;;;;32066:29:0::1;;32058:70;;;::::0;;-1:-1:-1;;;32058:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32058:70:0;;;;;;;;;;;;;::::1;;32149:54;32178:7;32187:9;32198:4;;32149:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;32149:28:0::1;::::0;-1:-1:-1;;;32149:54:0:i:1;:::-;32139:64;;32214:12;32229:50;32253:7;32262:4;;32267:1;32262:7;;;;;;32229:50;32214:65:::0;-1:-1:-1;32309:1:0::1;32294:16:::0;::::1;32290:182;;;32327:13;32357:4;-1:-1:-1::0;;;;;32343:39:0::1;;32383:4;;32389:9;32400:2;32404:6;32343:68;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;32343:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32343:68:0;32439:10;;32343:68;;-1:-1:-1;32439:21:0::1;::::0;32343:68;;32439:7;;32447:1:::1;::::0;32439:10:::1;;;:21;32426:7;32434:1;32426:10;;;;;;;;;;;;;:34;;;::::0;::::1;32290:182;;32504:11;32490:7;32498:1;32490:10;;;;;;;;;;;;;;:25;;32482:76;;;;-1:-1:-1::0;;;32482:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32569:70;32601:4;;32606:1;32601:7;;;;;;20961:860:::0;21323:15;21353;21383:17;21281:8;19182:15;19170:8;:27;;19162:63;;;;;-1:-1:-1;;;19162:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19162:63:0;;;;;;;;;;;;;;;21449:85:::1;21463:6;21471;21479:14;21495;21511:10;21523;21449:13;:85::i;:::-;21428:106:::0;;-1:-1:-1;21428:106:0;-1:-1:-1;21545:12:0::1;21560:48;21584:7;21593:6:::0;21601;21560:23:::1;:48::i;:::-;21545:63;;21619:66;21651:6;21659:10;21671:4;21677:7;21619:31;:66::i;:::-;21696;21728:6;21736:10;21748:4;21754:7;21696:31;:66::i;:::-;21799:4;-1:-1:-1::0;;;;;21785:24:0::1;;21810:2;21785:28;;;;;;;;;;;;;-1:-1:-1::0;;;;;21785:28:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;21785:28:0;20961:860;;;;-1:-1:-1;21785:28:0;;-1:-1:-1;20961:860:0;;-1:-1:-1;;;;;;;;;20961:860:0:o;21829:1102::-;22162:19;22196:17;22228;22120:8;19182:15;19170:8;:27;;19162:63;;;;;-1:-1:-1;;;19162:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19162:63:0;;;;;;;;;;;;;;;22300:176:::1;22328:5;22348:4;22367:18;22400:9;22424:14;22453:12;22300:13;:176::i;:::-;22273:203:::0;;-1:-1:-1;22273:203:0;-1:-1:-1;22487:12:0::1;22502:45;22526:7;22535:5:::0;22542:4:::1;22502:23;:45::i;:::-;22487:60;;22558:69;22590:5;22597:10;22609:4;22615:11;22558:31;:69::i;:::-;22644:4;-1:-1:-1::0;;;;;22638:19:0::1;;22665:9;22638:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;22701:4;-1:-1:-1::0;;;;;22695:20:0::1;;22716:4;22722:9;22695:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;22695:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22695:37:0;22688:45:::1;;;;22770:4;-1:-1:-1::0;;;;;22756:24:0::1;;22781:2;22756:28;;;;;;;;;;;;;-1:-1:-1::0;;;;;22756:28:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22756:28:0;;-1:-1:-1;22835:9:0::1;:21:::0;-1:-1:-1;22831:92:0::1;;;22858:65;22889:10;22913:9;22901;:21;22858:30;:65::i;:::-;19236:1;21829:1102:::0;;;;;;;;;;;:::o;29227:805::-;29482:24;29463:8;19182:15;19170:8;:27;;19162:63;;;;;-1:-1:-1;;;19162:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19162:63:0;;;;;;;;;;;;;;;29529:54:::1;29559:7;29568:8;29578:4;;29529:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29529:29:0::1;::::0;-1:-1:-1;;;29529:54:0:i:1;:::-;29519:64;;29594:12;29609:50;29633:7;29642:4;;29647:1;29642:7;;;;;;29609:50;29594:65;;29670:70;29702:4;;29707:1;29702:7;;;;;;29670:70;29770:1;29755:16:::0;::::1;29751:130;;;29815:4;-1:-1:-1::0;;;;;29801:38:0::1;;29840:4;;29846:7;29854:1;29846:10;;;;;;;;;;;;;;29858:2;29862:6;29801:68;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;29801:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;29801:68:0;29788:10;;:7;;29796:1:::1;::::0;29788:10;::::1;;;;;;;;;;:81;;;::::0;::::1;29751:130;29930:12;29899:7;29924:1;29907:7;:14;:18;29899:27;;;;;;;;;;;;;;:43;;29891:98;;;;-1:-1:-1::0;;;29891:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1480:361:::0;1675:45;;;-1:-1:-1;;;;;1675:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1675:45:0;-1:-1:-1;;;1675:45:0;;;1664:57;;;;1629:12;;1643:17;;1664:10;;;;1675:45;1664:57;;;1675:45;1664:57;;1675:45;1664:57;;;;;;;;;;-1:-1:-1;;1664:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1628:93;;;;1740:7;:57;;;;-1:-1:-1;1752:11:0;;:16;;:44;;;1783:4;1772:24;;;;;;;;;;;;;;;-1:-1:-1;1772:24:0;1752:44;1732:101;;;;;-1:-1:-1;;;1732:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1480:361;;;;;:::o;2259:195::-;2367:12;;;2329;2367;;;;;;;;;-1:-1:-1;;;;;2346:7:0;;;2360:5;;2346:34;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2346:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2328:52;;;2399:7;2391:55;;;;-1:-1:-1;;;2391:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2259:195;;;:::o;15027:570::-;15163:17;15212:1;15201:8;:12;15193:67;;;;-1:-1:-1;;;15193:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15291:1;15279:9;:13;:31;;;;;15309:1;15296:10;:14;15279:31;15271:83;;;;-1:-1:-1;;;15271:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15365:23;15391:17;:8;15404:3;15391:12;:17::i;:::-;15365:43;-1:-1:-1;15419:17:0;15439:31;15365:43;15459:10;15439:19;:31::i;:::-;15419:51;-1:-1:-1;15481:19:0;15503:40;15527:15;15503:19;:9;15517:4;15503:13;:19::i;:::-;:23;;:40::i;:::-;15481:62;;15578:11;15566:9;:23;;;;;;;15027:570;-1:-1:-1;;;;;;;15027:570:0:o;13280:651::-;13403:12;13429:14;13445;13463:26;13474:6;13482;13463:10;:26::i;:::-;13708:32;;;-1:-1:-1;;13708:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13698:43;;;;;;-1:-1:-1;;;;;;13587:291:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13555:342;;;;;;;;;13280:651;-1:-1:-1;;;;;13280:651:0:o;1849:402::-;2074:51;;;-1:-1:-1;;;;;2074:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2074:51:0;-1:-1:-1;;;2074:51:0;;;2063:63;;;;2028:12;;2042:17;;2063:10;;;;2074:51;2063:63;;;2074:51;2063:63;;2074:51;2063:63;;;;;;;;;;-1:-1:-1;;2063:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2027:99;;;;2145:7;:57;;;;-1:-1:-1;2157:11:0;;:16;;:44;;;2188:4;2177:24;;;;;;;;;;;;;;;-1:-1:-1;2177:24:0;2157:44;2137:106;;;;-1:-1:-1;;;2137:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1849:402;;;;;;:::o;34976:1510::-;35136:9;35131:1348;35165:1;35151:4;:11;:15;35147:1;:19;35131:1348;;;35189:14;35209:48;35236:4;35241:1;35236:7;;;;;;;;;;;;;;35245:4;35250:1;35254;35250:5;35245:11;;;;;;;;;;;;;;35209:26;:48::i;:::-;35188:69;;;35272:18;35307:54;35331:7;35340:4;35345:1;35340:7;;;;;;;;;;;;;;35349:4;35354:1;35358;35354:5;35349:11;;;;;;;;;;;;;;35307:23;:54::i;:::-;35272:90;;35377:20;35489:16;35507;35529:4;-1:-1:-1;;;;;35529:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35529:18:0;;;;;;;35614:7;;-1:-1:-1;;;;;35488:59:0;;;;-1:-1:-1;35488:59:0;;;-1:-1:-1;35567:20:0;;;;-1:-1:-1;;;;;35614:17:0;;;:4;;35619:1;;35614:7;;;;;;;;;;;;-1:-1:-1;;;;;35614:17:0;;:105;;35700:8;35710;35614:105;;;35656:8;35666;35614:105;35566:153;;;;35738:19;35760:58;35805:12;35767:4;35772:1;35767:7;;;;;;;;;;;;;;-1:-1:-1;;;;;35760:25:0;;35794:4;35760:40;;;;;;;;;;;;;-1:-1:-1;;;;;35760:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;:58;35738:80;;35841:4;:11;35856:1;35841:16;35837:269;;;35897:4;-1:-1:-1;;;;;35897:23:0;;35921:4;35927:11;35940:3;35945:6;35897:55;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35897:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35897:55:0;;-1:-1:-1;35837:269:0;;;36016:70;36045:11;36058:12;36072:13;36016:28;:70::i;:::-;36001:85;;35837:269;35131:1348;;;;;36136:18;36156;36189:6;-1:-1:-1;;;;;36178:17:0;:4;36183:1;36178:7;;;;;;;;;;;;;;-1:-1:-1;;;;;36178:17:0;;:109;;36262:12;36284:1;36178:109;;;36224:1;36228:12;36178:109;36135:152;;;;36302:10;36333:1;36319:4;:11;:15;36315:1;:19;:86;;36398:3;36315:86;;;36337:58;36361:7;36370:4;36375:1;36379;36375:5;36370:11;;;;;;;;;;;;;;36383:4;36388:1;36392;36388:5;36383:11;;;;;;;36337:58;36454:12;;;36464:1;36454:12;;;;;;;;;;-1:-1:-1;;;36416:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;36416:51:0;;;;;;;;;;;;;;;;;;;;;;36302:99;;-1:-1:-1;36416:9:0;;;;;;36426:10;;36438;;36302:99;;36454:12;;36416:51;;;;;;;;36454:12;;36416:51;;;;36454:12;;36416:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35168:3:0;;;;;-1:-1:-1;35131:1348:0;;-1:-1:-1;;;;;;;35131:1348:0;;;34976:1510;;;:::o;12295:129::-;12379:5;;;12374:16;;;;12366:50;;;;;-1:-1:-1;;;12366:50:0;;;;;;;;;;;;-1:-1:-1;;;12366:50:0;;;;;;;;;;;;;;16965:583;17103:24;17163:1;17148:4;:11;:16;;17140:58;;;;;-1:-1:-1;;;17140:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17233:4;:11;17219:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17219:26:0;;17209:36;;17286:9;17256:7;17281:1;17264:7;:14;:18;17256:27;;;;;;;;;;;;;;;;;:39;17323:11;;-1:-1:-1;;17323:15:0;17306:235;17340:5;;17306:235;;17368:17;17387:18;17409:42;17421:7;17430:4;17439:1;17435;:5;17430:11;;;;;;;;;;;;;;17443:4;17448:1;17443:7;;;;;;;;;;;;;;17409:11;:42::i;:::-;17367:84;;;;17483:46;17495:7;17503:1;17495:10;;;;;;;;;;;;;;17507:9;17518:10;17483:11;:46::i;:::-;17466:7;17478:1;17474;:5;17466:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;17347:3:0;17306:235;;;;16965:583;;;;;:::o;12159:128::-;12243:5;;;12238:16;;;;12230:49;;;;;-1:-1:-1;;;12230:49:0;;;;;;;;;;;;-1:-1:-1;;;12230:49:0;;;;;;;;;;;;;;28347:872;28491:9;28486:726;28520:1;28506:4;:11;:15;28502:1;:19;28486:726;;;28544:13;28559:14;28578:4;28583:1;28578:7;;;;;;;;;;;;;;28587:4;28592:1;28596;28592:5;28587:11;;;;;;;;;;;;;;28543:56;;;;28615:14;28635:41;28662:5;28669:6;28635:26;:41::i;:::-;28614:62;;;28691:17;28711:7;28719:1;28723;28719:5;28711:14;;;;;;;;;;;;;;28691:34;;28741:18;28761;28792:6;-1:-1:-1;;;;;28783:15:0;:5;-1:-1:-1;;;;;28783:15:0;;:101;;28862:9;28881:1;28783:101;;;28827:1;28831:9;28783:101;28740:144;;;;28899:10;28930:1;28916:4;:11;:15;28912:1;:19;:81;;28990:3;28912:81;;;28934:53;28958:7;28967:6;28975:4;28980:1;28984;28980:5;28975:11;;;;;;;28934:53;28899:94;;29022:47;29046:7;29055:5;29062:6;29022:23;:47::i;:::-;-1:-1:-1;;;;;29008:67:0;;29094:10;29123;29152:2;29183:1;29173:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29173:12:0;;29008:192;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29008:192:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28523:3:0;;;;;-1:-1:-1;28486:726:0;;-1:-1:-1;;;;;;;;28486:726:0;15718:522;15854:16;15903:1;15891:9;:13;15883:69;;;;-1:-1:-1;;;15883:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15983:1;15971:9;:13;:31;;;;;16001:1;15988:10;:14;15971:31;15963:83;;;;-1:-1:-1;;;15963:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16057:17;16077:34;16106:4;16077:24;:9;16091;16077:13;:24::i;:::-;:28;;:34::i;:::-;16057:54;-1:-1:-1;16122:19:0;16144:34;16174:3;16144:25;:10;16159:9;16144:14;:25::i;:34::-;16122:56;;16200:32;16230:1;16213:11;16201:9;:23;;;;;;;16200:29;:32::i;:::-;16189:43;15718:522;-1:-1:-1;;;;;;15718:522:0:o;16322:562::-;16460:24;16520:1;16505:4;:11;:16;;16497:58;;;;;-1:-1:-1;;;16497:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16590:4;:11;16576:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16576:26:0;;16566:36;;16626:8;16613:7;16621:1;16613:10;;;;;;;;;;;;;:21;;;;;16650:9;16645:232;16679:1;16665:4;:11;:15;16661:1;:19;16645:232;;;16703:17;16722:18;16744:42;16756:7;16765:4;16770:1;16765:7;;;;;;;;;;;;;;16774:4;16779:1;16783;16779:5;16774:11;;;;;;;16744:42;16702:84;;;;16818:47;16831:7;16839:1;16831:10;;;;;;;;;;;;;;16843:9;16854:10;16818:12;:47::i;:::-;16801:7;16809:1;16813;16809:5;16801:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;16682:3:0;;16645:232;;14540:365;14665:15;14711:1;14701:7;:11;14693:60;;;;-1:-1:-1;;;14693:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14783:1;14772:8;:12;:28;;;;;14799:1;14788:8;:12;14772:28;14764:80;;;;-1:-1:-1;;;14764:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14889:8;14865:21;:7;14877:8;14865:11;:21::i;:::-;:32;;;;;;;14540:365;-1:-1:-1;;;;14540:365:0:o;12841:347::-;12916:14;12932;12977:6;-1:-1:-1;;;;;12967:16:0;:6;-1:-1:-1;;;;;12967:16:0;;;12959:65;;;;-1:-1:-1;;;12959:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13063:6;-1:-1:-1;;;;;13054:15:0;:6;-1:-1:-1;;;;;13054:15:0;;:53;;13092:6;13100;13054:53;;;13073:6;13081;13054:53;13035:72;;-1:-1:-1;13035:72:0;-1:-1:-1;;;;;;13126:20:0;;13118:62;;;;;-1:-1:-1;;;13118:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12841:347;;;;;:::o;19540:1413::-;19770:15;19787;19932:1;-1:-1:-1;;;;;19871:63:0;19888:7;-1:-1:-1;;;;;19871:33:0;;19905:6;19913;19871:49;;;;;;;;;;;;;-1:-1:-1;;;;;19871:49:0;;;;;;-1:-1:-1;;;;;19871:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19871:49:0;-1:-1:-1;;;;;19871:63:0;;19867:148;;;19968:7;-1:-1:-1;;;;;19951:36:0;;19988:6;19996;19951:52;;;;;;;;;;;;;-1:-1:-1;;;;;19951:52:0;;;;;;-1:-1:-1;;;;;19951:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19867:148:0;20026:16;20044;20064:52;20092:7;20101:6;20109;20064:27;:52::i;:::-;20025:91;;;;20131:8;20143:1;20131:13;:30;;;;-1:-1:-1;20148:13:0;;20131:30;20127:819;;;20200:14;;-1:-1:-1;20216:14:0;;-1:-1:-1;20127:819:0;;;20264:22;20289:57;20311:14;20327:8;20337;20289:21;:57::i;:::-;20264:82;;20383:14;20365;:32;20361:574;;20444:10;20426:14;:28;;20418:78;;;;-1:-1:-1;;;20418:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20537:14;;-1:-1:-1;20553:14:0;-1:-1:-1;20553:14:0;20361:574;;;20609:22;20634:57;20656:14;20672:8;20682;20634:21;:57::i;:::-;20609:82;;20735:14;20717;:32;;20710:40;;;;20795:10;20777:14;:28;;20769:78;;;;-1:-1:-1;;;20769:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20888:14;-1:-1:-1;20904:14:0;;-1:-1:-1;20361:574:0;20127:819;;19540:1413;;;;;;;;;;;:::o;12432:142::-;12484:6;12511;;;:30;;-1:-1:-1;;12526:5:0;;;12540:1;12535;12526:5;12535:1;12521:15;;;;;:20;12511:30;12503:63;;;;;-1:-1:-1;;;12503:63:0;;;;;;;;;;;;-1:-1:-1;;;12503:63:0;;;;;;;;;;;;;;13989:438;14116:16;14134;14164:14;14184:26;14195:6;14203;14184:10;:26::i;:::-;14163:47;;;14222:16;14240;14276:32;14284:7;14293:6;14301;14276:7;:32::i;:::-;-1:-1:-1;;;;;14262:59:0;;:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14262:61:0;;;;;;;-1:-1:-1;;;;;14221:102:0;;;;-1:-1:-1;14221:102:0;;-1:-1:-1;;;;;;14357:16:0;;;;;;;:62;;14400:8;14410;14357:62;;;14377:8;14387;14357:62;14334:85;;;;-1:-1:-1;13989:438:0;-1:-1:-1;;;;;;;13989:438:0:o
Swarm Source
ipfs://2d9a56a7de8fd14d74ef87641b7f49b0e41c19631acbe4dd97de9e297bcc6b51
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.