Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Add Liquidity ET... | 19875331 | 271 days ago | IN | 0.1 ETH | 0.01115488 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
19875331 | 271 days ago | 0.1 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
UniswapV2Router02
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-08-01 */ pragma solidity =0.6.6; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); // <TombSwap V2> additions function mintFee(address) external view returns (uint); function swapFee(address) external view returns (uint); // <TombSwap V2 /> 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; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut, address pair) external view returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut, address pair) external view returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); } interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } 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'); } } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } library TransferHelper { function safeApprove( address token, address to, uint256 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::safeApprove: approve failed' ); } function safeTransfer( address token, address to, uint256 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::safeTransfer: transfer failed' ); } function safeTransferFrom( address token, address from, address to, uint256 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::transferFrom: transferFrom failed' ); } function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, 'TransferHelper::safeTransferETH: ETH transfer failed'); } } library UniswapV2Library { using SafeMath for uint; // returns sorted token addresses, used to handle return values from pairs sorted in this order function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES'); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'UniswapV2Library: 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(uint(keccak256(abi.encodePacked( hex'ff', factory, keccak256(abi.encodePacked(token0, token1)), hex'f524e408e75d1e73784b81165db33b9ace66e7647166bf42f94d0cc179d4f9ac' // init code hash )))); } // fetches and sorts the reserves for a pair function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) { (address token0,) = sortTokens(tokenA, tokenB); (uint reserve0, uint reserve1,) = IUniswapV2Pair(pairFor(factory, tokenA, tokenB)).getReserves(); (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); } // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) { require(amountA > 0, 'UniswapV2Library: INSUFFICIENT_AMOUNT'); require(reserveA > 0 && reserveB > 0, 'UniswapV2Library: 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(address factory, uint amountIn, uint reserveIn, uint reserveOut, address pair) internal view returns (uint amountOut) { require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY'); uint amountInn = (1000-IUniswapV2Factory(factory).swapFee(pair)); // priceDiff uint amountInWithFee = amountIn.mul(amountInn); // priceDiff uint numerator = amountInWithFee.mul(reserveOut); uint 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(address factory, uint amountOut, uint reserveIn, uint reserveOut, address pair) internal view returns (uint amountIn) { require(amountOut > 0, 'UniswapV2Library: INSUFFICIENT_OUTPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY'); uint numerator = reserveIn.mul(amountOut).mul(1000); uint amountInn = (1000-IUniswapV2Factory(factory).swapFee(pair)); // priceDiff uint denominator = reserveOut.sub(amountOut).mul(amountInn); // priceDiff amountIn = (numerator / denominator).add(1); } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) { require(path.length >= 2, 'UniswapV2Library: INVALID_PATH'); amounts = new uint[](path.length); amounts[0] = amountIn; for (uint i; i < path.length - 1; i++) { (uint reserveIn, uint reserveOut) = getReserves(factory, path[i], path[i + 1]); amounts[i + 1] = getAmountOut(factory, amounts[i], reserveIn, reserveOut, IUniswapV2Factory(factory).getPair(path[i], path[i + 1])); } } // performs chained getAmountIn calculations on any number of pairs function getAmountsIn(address factory, uint amountOut, address[] memory path) internal view returns (uint[] memory amounts) { require(path.length >= 2, 'UniswapV2Library: INVALID_PATH'); amounts = new uint[](path.length); amounts[amounts.length - 1] = amountOut; for (uint i = path.length - 1; i > 0; i--) { (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]); amounts[i - 1] = getAmountIn(factory, amounts[i], reserveIn, reserveOut, IUniswapV2Factory(factory).getPair(path[i - 1], path[i])); } } } contract UniswapV2Router02 is IUniswapV2Router02 { using SafeMath for uint; address public immutable override factory; address public immutable override WETH; modifier ensure(uint deadline) { require(deadline >= block.timestamp, 'UniswapV2Router: 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, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin ) internal virtual returns (uint amountA, uint amountB) { // create the pair if it doesn't exist yet if (IUniswapV2Factory(factory).getPair(tokenA, tokenB) == address(0)) { IUniswapV2Factory(factory).createPair(tokenA, tokenB); } (uint reserveA, uint reserveB) = UniswapV2Library.getReserves(factory, tokenA, tokenB); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint amountBOptimal = UniswapV2Library.quote(amountADesired, reserveA, reserveB); if (amountBOptimal <= amountBDesired) { require(amountBOptimal >= amountBMin, 'UniswapV2Router: INSUFFICIENT_B_AMOUNT'); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint amountAOptimal = UniswapV2Library.quote(amountBDesired, reserveB, reserveA); assert(amountAOptimal <= amountADesired); require(amountAOptimal >= amountAMin, 'UniswapV2Router: INSUFFICIENT_A_AMOUNT'); (amountA, amountB) = (amountAOptimal, amountBDesired); } } } function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external virtual override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) { (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin); address pair = UniswapV2Library.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = IUniswapV2Pair(pair).mint(to); } function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) { (amountToken, amountETH) = _addLiquidity( token, WETH, amountTokenDesired, msg.value, amountTokenMin, amountETHMin ); address pair = UniswapV2Library.pairFor(factory, token, WETH); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWETH(WETH).deposit{value: amountETH}(); assert(IWETH(WETH).transfer(pair, amountETH)); liquidity = IUniswapV2Pair(pair).mint(to); // refund dust eth, if any if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH); } // **** REMOVE LIQUIDITY **** function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) { address pair = UniswapV2Library.pairFor(factory, tokenA, tokenB); IUniswapV2Pair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (uint amount0, uint amount1) = IUniswapV2Pair(pair).burn(to); (address token0,) = UniswapV2Library.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, 'UniswapV2Router: INSUFFICIENT_A_AMOUNT'); require(amountB >= amountBMin, 'UniswapV2Router: INSUFFICIENT_B_AMOUNT'); } function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountToken, uint amountETH) { (amountToken, amountETH) = removeLiquidity( token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer(token, to, amountToken); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountA, uint amountB) { address pair = UniswapV2Library.pairFor(factory, tokenA, tokenB); uint value = approveMax ? uint(-1) : liquidity; IUniswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline); } function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountToken, uint amountETH) { address pair = UniswapV2Library.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IUniswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline); } // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) **** function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountETH) { (, amountETH) = removeLiquidity( token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this))); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountETH) { address pair = UniswapV2Library.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IUniswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); amountETH = removeLiquidityETHSupportingFeeOnTransferTokens( token, liquidity, amountTokenMin, amountETHMin, to, deadline ); } // **** SWAP **** // requires the initial amount to have already been sent to the first pair function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0,) = UniswapV2Library.sortTokens(input, output); uint amountOut = amounts[i + 1]; (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0)); address to = i < path.length - 2 ? UniswapV2Library.pairFor(factory, output, path[i + 2]) : _to; IUniswapV2Pair(UniswapV2Library.pairFor(factory, input, output)).swap( amount0Out, amount1Out, to, new bytes(0) ); } } function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external virtual override payable ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, 'UniswapV2Router: INVALID_PATH'); amounts = UniswapV2Library.getAmountsOut(factory, msg.value, path); require(amounts[amounts.length - 1] >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT'); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0])); _swap(amounts, path, to); } function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[path.length - 1] == WETH, 'UniswapV2Router: INVALID_PATH'); amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWETH(WETH).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); } function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[path.length - 1] == WETH, 'UniswapV2Router: INVALID_PATH'); amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWETH(WETH).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); } function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external virtual override payable ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, 'UniswapV2Router: INVALID_PATH'); amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path); require(amounts[0] <= msg.value, 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT'); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0])); _swap(amounts, path, to); // refund dust eth, if any if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]); } // **** SWAP (supporting fee-on-transfer tokens) **** // requires the initial amount to have already been sent to the first pair function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0,) = UniswapV2Library.sortTokens(input, output); IUniswapV2Pair pair = IUniswapV2Pair(UniswapV2Library.pairFor(factory, input, output)); uint amountInput; uint amountOutput; { // scope to avoid stack too deep errors (uint reserve0, uint reserve1,) = pair.getReserves(); (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0); amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput); amountOutput = UniswapV2Library.getAmountOut(factory, amountInput, reserveInput, reserveOutput, address(pair)); } (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0)); address to = i < path.length - 2 ? UniswapV2Library.pairFor(factory, output, path[i + 2]) : _to; pair.swap(amount0Out, amount1Out, to, new bytes(0)); } } function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { TransferHelper.safeTransferFrom( path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn ); uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT' ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override payable ensure(deadline) { require(path[0] == WETH, 'UniswapV2Router: INVALID_PATH'); uint amountIn = msg.value; IWETH(WETH).deposit{value: amountIn}(); assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn)); uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT' ); } function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { require(path[path.length - 1] == WETH, 'UniswapV2Router: INVALID_PATH'); TransferHelper.safeTransferFrom( path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn ); _swapSupportingFeeOnTransferTokens(path, address(this)); uint amountOut = IERC20(WETH).balanceOf(address(this)); require(amountOut >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT'); IWETH(WETH).withdraw(amountOut); TransferHelper.safeTransferETH(to, amountOut); } // **** LIBRARY FUNCTIONS **** function quote(uint amountA, uint reserveA, uint reserveB) public pure virtual override returns (uint amountB) { return UniswapV2Library.quote(amountA, reserveA, reserveB); } function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut, address pair) public view virtual override returns (uint amountOut) { return UniswapV2Library.getAmountOut(factory, amountIn, reserveIn, reserveOut, pair); } function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut, address pair) public view virtual override returns (uint amountIn) { return UniswapV2Library.getAmountIn(factory, amountOut, reserveIn, reserveOut, pair); } function getAmountsOut(uint amountIn, address[] memory path) public view virtual override returns (uint[] memory amounts) { return UniswapV2Library.getAmountsOut(factory, amountIn, path); } function getAmountsIn(uint amountOut, address[] memory path) public view virtual override returns (uint[] memory amounts) { return UniswapV2Library.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"},{"internalType":"address","name":"pair","type":"address"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"},{"internalType":"address","name":"pair","type":"address"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"view","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"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405234801561001057600080fd5b5060405162004adb38038062004adb8339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c614947620001946000398061015f5280610d025280610d3d5280610e1f528061103d52806113c7528061152d52806118f452806119ee5280611aa45280611b725280611cb85280611d405280611fb0528061203352806120e252806121ae528061224352806122b752806127e45280612a575280612aad5280612ae15280612b555280612cf55280612e385280612ec0525080610ead5280610f845280611103528061113c52806112775280611455528061150b528061167b5280611c055280611d725280611ec85280611f7d52806122e95280612542528061273a5280612763528061279252806127c2528061292f5280612a8b5280612d885280612ef25280613759528061379c5280613b455280613c745280613ce6528061431c52806143ca528061444a52506149476000f3fe60806040526004361061014f5760003560e01c8063ad5c4648116100b6578063caced41b1161006f578063caced41b146109fe578063d06ca61f14610a43578063ded9382a14610af8578063e8e3370014610b6b578063f305d71914610beb578063fb3bdb4114610c3157610188565b8063ad5c46481461084e578063ad615dec1461087f578063af2979eb146108b5578063b6f9de9514610908578063baa2abde1461098c578063c45a0155146109e957610188565b80635b0d5984116101085780635b0d59841461053e5780635c11d795146105c3578063791ac947146106595780637ff36ab5146106ef5780638803dbee146107735780639470dbea1461080957610188565b806302751cec1461018d57806318cbafe5146101f95780631f00ca74146102df5780632195995c1461039457806338ed1739146104125780634a25d94a146104a857610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610cb5565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061028f600480360360a081101561021c57600080fd5b813591602081013591810190606081016040820135600160201b81111561024257600080fd5b82018360208201111561025457600080fd5b803590602001918460208302840111600160201b8311171561027557600080fd5b91935091506001600160a01b038135169060200135610dcf565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102cb5781810151838201526020016102b3565b505050509050019250505060405180910390f35b3480156102eb57600080fd5b5061028f6004803603604081101561030257600080fd5b81359190810190604081016020820135600160201b81111561032357600080fd5b82018360208201111561033557600080fd5b803590602001918460208302840111600160201b8311171561035657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110fc945050505050565b3480156103a057600080fd5b506101e060048036036101608110156103b857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611132565b34801561041e57600080fd5b5061028f600480360360a081101561043557600080fd5b813591602081013591810190606081016040820135600160201b81111561045b57600080fd5b82018360208201111561046d57600080fd5b803590602001918460208302840111600160201b8311171561048e57600080fd5b91935091506001600160a01b03813516906020013561122c565b3480156104b457600080fd5b5061028f600480360360a08110156104cb57600080fd5b813591602081013591810190606081016040820135600160201b8111156104f157600080fd5b82018360208201111561050357600080fd5b803590602001918460208302840111600160201b8311171561052457600080fd5b91935091506001600160a01b038135169060200135611377565b34801561054a57600080fd5b506105b1600480360361014081101561056257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611503565b60408051918252519081900360200190f35b3480156105cf57600080fd5b50610186600480360360a08110156105e657600080fd5b813591602081013591810190606081016040820135600160201b81111561060c57600080fd5b82018360208201111561061e57600080fd5b803590602001918460208302840111600160201b8311171561063f57600080fd5b91935091506001600160a01b038135169060200135611611565b34801561066557600080fd5b50610186600480360360a081101561067c57600080fd5b813591602081013591810190606081016040820135600160201b8111156106a257600080fd5b8201836020820111156106b457600080fd5b803590602001918460208302840111600160201b831117156106d557600080fd5b91935091506001600160a01b0381351690602001356118a6565b61028f6004803603608081101561070557600080fd5b81359190810190604081016020820135600160201b81111561072657600080fd5b82018360208201111561073857600080fd5b803590602001918460208302840111600160201b8311171561075957600080fd5b91935091506001600160a01b038135169060200135611b2a565b34801561077f57600080fd5b5061028f600480360360a081101561079657600080fd5b813591602081013591810190606081016040820135600160201b8111156107bc57600080fd5b8201836020820111156107ce57600080fd5b803590602001918460208302840111600160201b831117156107ef57600080fd5b91935091506001600160a01b038135169060200135611e7d565b34801561081557600080fd5b506105b16004803603608081101561082c57600080fd5b50803590602081013590604081013590606001356001600160a01b0316611f76565b34801561085a57600080fd5b50610863611fae565b604080516001600160a01b039092168252519081900360200190f35b34801561088b57600080fd5b506105b1600480360360608110156108a257600080fd5b5080359060208101359060400135611fd2565b3480156108c157600080fd5b506105b1600480360360c08110156108d857600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fe7565b6101866004803603608081101561091e57600080fd5b81359190810190604081016020820135600160201b81111561093f57600080fd5b82018360208201111561095157600080fd5b803590602001918460208302840111600160201b8311171561097257600080fd5b91935091506001600160a01b038135169060200135612168565b34801561099857600080fd5b506101e0600480360360e08110156109af57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124f4565b3480156109f557600080fd5b50610863612738565b348015610a0a57600080fd5b506105b160048036036080811015610a2157600080fd5b50803590602081013590604081013590606001356001600160a01b031661275c565b348015610a4f57600080fd5b5061028f60048036036040811015610a6657600080fd5b81359190810190604081016020820135600160201b811115610a8757600080fd5b820183602082011115610a9957600080fd5b803590602001918460208302840111600160201b83111715610aba57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061278b945050505050565b348015610b0457600080fd5b506101e06004803603610140811015610b1c57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356127b8565b348015610b7757600080fd5b50610bcd6004803603610100811015610b8f57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e001356128cc565b60408051938452602084019290925282820152519081900360600190f35b610bcd600480360360c0811015610c0157600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612a08565b61028f60048036036080811015610c4757600080fd5b81359190810190604081016020820135600160201b811115610c6857600080fd5b820183602082011115610c7a57600080fd5b803590602001918460208302840111600160201b83111715610c9b57600080fd5b91935091506001600160a01b038135169060200135612cad565b6000808242811015610cfc576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b610d2b897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124f4565b9093509150610d3b89868561302f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610da157600080fd5b505af1158015610db5573d6000803e3d6000fd5b50505050610dc38583613183565b50965096945050505050565b60608142811015610e15576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4f57fe5b905060200201356001600160a01b03166001600160a01b031614610ea8576040805162461bcd60e51b815260206004820152601d6024820152600080516020614829833981519152604482015290519081900360640190fd5b610f067f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061327b92505050565b91508682600184510381518110610f1957fe5b60200260200101511015610f5e5760405162461bcd60e51b815260040180806020018281038252602b81526020018061486f602b913960400191505060405180910390fd5b610ffc86866000818110610f6e57fe5b905060200201356001600160a01b031633610fe27f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fb057fe5b905060200201356001600160a01b03168b8b6001818110610fcd57fe5b905060200201356001600160a01b031661348d565b85600081518110610fef57fe5b602002602001015161354d565b61103b828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506136aa915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107a57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110b857600080fd5b505af11580156110cc573d6000803e3d6000fd5b505050506110f184836001855103815181106110e457fe5b6020026020010151613183565b509695505050505050565b60606111297f000000000000000000000000000000000000000000000000000000000000000084846138f0565b90505b92915050565b60008060006111627f00000000000000000000000000000000000000000000000000000000000000008f8f61348d565b9050600087611171578c611175565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111eb57600080fd5b505af11580156111ff573d6000803e3d6000fd5b505050506112128f8f8f8f8f8f8f6124f4565b809450819550505050509b509b9950505050505050505050565b60608142811015611272576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b6112d07f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061327b92505050565b915086826001845103815181106112e357fe5b602002602001015110156113285760405162461bcd60e51b815260040180806020018281038252602b81526020018061486f602b913960400191505060405180910390fd5b61133886866000818110610f6e57fe5b6110f1828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506136aa915050565b606081428110156113bd576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113f757fe5b905060200201356001600160a01b03166001600160a01b031614611450576040805162461bcd60e51b815260206004820152601d6024820152600080516020614829833981519152604482015290519081900360640190fd5b6114ae7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138f092505050565b915086826000815181106114be57fe5b60200260200101511115610f5e5760405162461bcd60e51b81526004018080602001828103825260278152602001806148026027913960400191505060405180910390fd5b6000806115517f00000000000000000000000000000000000000000000000000000000000000008d7f000000000000000000000000000000000000000000000000000000000000000061348d565b9050600086611560578b611564565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115da57600080fd5b505af11580156115ee573d6000803e3d6000fd5b505050506116008d8d8d8d8d8d611fe7565b9d9c50505050505050505050505050565b8042811015611655576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b6116ca8585600081811061166557fe5b905060200201356001600160a01b0316336116c47f0000000000000000000000000000000000000000000000000000000000000000898960008181106116a757fe5b905060200201356001600160a01b03168a8a6001818110610fcd57fe5b8a61354d565b6000858560001981018181106116dc57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561174157600080fd5b505afa158015611755573d6000803e3d6000fd5b505050506040513d602081101561176b57600080fd5b505160408051602088810282810182019093528882529293506117ad929091899189918291850190849080828437600092019190915250889250613aee915050565b8661185f82888860001981018181106117c257fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561182757600080fd5b505afa15801561183b573d6000803e3d6000fd5b505050506040513d602081101561185157600080fd5b50519063ffffffff613e1b16565b101561189c5760405162461bcd60e51b815260040180806020018281038252602b81526020018061486f602b913960400191505060405180910390fd5b5050505050505050565b80428110156118ea576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061192457fe5b905060200201356001600160a01b03166001600160a01b03161461197d576040805162461bcd60e51b815260206004820152601d6024820152600080516020614829833981519152604482015290519081900360640190fd5b61198d8585600081811061166557fe5b6119cb858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613aee915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a3557600080fd5b505afa158015611a49573d6000803e3d6000fd5b505050506040513d6020811015611a5f57600080fd5b5051905086811015611aa25760405162461bcd60e51b815260040180806020018281038252602b81526020018061486f602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b0857600080fd5b505af1158015611b1c573d6000803e3d6000fd5b5050505061189c8482613183565b60608142811015611b70576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611ba757fe5b905060200201356001600160a01b03166001600160a01b031614611c00576040805162461bcd60e51b815260206004820152601d6024820152600080516020614829833981519152604482015290519081900360640190fd5b611c5e7f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061327b92505050565b91508682600184510381518110611c7157fe5b60200260200101511015611cb65760405162461bcd60e51b815260040180806020018281038252602b81526020018061486f602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611cf257fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d2557600080fd5b505af1158015611d39573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d9e7f0000000000000000000000000000000000000000000000000000000000000000898960008181106116a757fe5b84600081518110611dab57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611e0257600080fd5b505af1158015611e16573d6000803e3d6000fd5b505050506040513d6020811015611e2c57600080fd5b5051611e3457fe5b611e73828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506136aa915050565b5095945050505050565b60608142811015611ec3576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b611f217f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138f092505050565b91508682600081518110611f3157fe5b602002602001015111156113285760405162461bcd60e51b81526004018080602001828103825260278152602001806148026027913960400191505060405180910390fd5b6000611fa57f000000000000000000000000000000000000000000000000000000000000000086868686613e6b565b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000611fdf848484613fe6565b949350505050565b6000814281101561202d576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b61205c887f000000000000000000000000000000000000000000000000000000000000000089898930896124f4565b604080516370a0823160e01b815230600482015290519194506120e092508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156120af57600080fd5b505afa1580156120c3573d6000803e3d6000fd5b505050506040513d60208110156120d957600080fd5b505161302f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561214657600080fd5b505af115801561215a573d6000803e3d6000fd5b505050506110f18483613183565b80428110156121ac576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121e357fe5b905060200201356001600160a01b03166001600160a01b03161461223c576040805162461bcd60e51b815260206004820152601d6024820152600080516020614829833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561229c57600080fd5b505af11580156122b0573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6123157f0000000000000000000000000000000000000000000000000000000000000000898960008181106116a757fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561236557600080fd5b505af1158015612379573d6000803e3d6000fd5b505050506040513d602081101561238f57600080fd5b505161239757fe5b6000868660001981018181106123a957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561240e57600080fd5b505afa158015612422573d6000803e3d6000fd5b505050506040513d602081101561243857600080fd5b5051604080516020898102828101820190935289825292935061247a9290918a918a918291850190849080828437600092019190915250899250613aee915050565b8761185f828989600019810181811061248f57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561182757600080fd5b600080824281101561253b576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b60006125687f00000000000000000000000000000000000000000000000000000000000000008c8c61348d565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b1580156125c357600080fd5b505af11580156125d7573d6000803e3d6000fd5b505050506040513d60208110156125ed57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561263a57600080fd5b505af115801561264e573d6000803e3d6000fd5b505050506040513d604081101561266457600080fd5b5080516020909101519092509050600061267e8e8e614092565b509050806001600160a01b03168e6001600160a01b0316146126a15781836126a4565b82825b90975095508a8710156126e85760405162461bcd60e51b81526004018080602001828103825260268152602001806148496026913960400191505060405180910390fd5b898610156127275760405162461bcd60e51b815260040180806020018281038252602681526020018061478f6026913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000611fa57f000000000000000000000000000000000000000000000000000000000000000086868686614170565b60606111297f0000000000000000000000000000000000000000000000000000000000000000848461327b565b60008060006128087f00000000000000000000000000000000000000000000000000000000000000008e7f000000000000000000000000000000000000000000000000000000000000000061348d565b9050600087612817578c61281b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561289157600080fd5b505af11580156128a5573d6000803e3d6000fd5b505050506128b78e8e8e8e8e8e610cb5565b909f909e509c50505050505050505050505050565b60008060008342811015612915576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b6129238c8c8c8c8c8c6142eb565b909450925060006129557f00000000000000000000000000000000000000000000000000000000000000008e8e61348d565b90506129638d33838861354d565b61296f8c33838761354d565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b1580156129c757600080fd5b505af11580156129db573d6000803e3d6000fd5b505050506040513d60208110156129f157600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612a51576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b612a7f8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c6142eb565b90945092506000612ad17f00000000000000000000000000000000000000000000000000000000000000008c7f000000000000000000000000000000000000000000000000000000000000000061348d565b9050612adf8b33838861354d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612b3a57600080fd5b505af1158015612b4e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612bd357600080fd5b505af1158015612be7573d6000803e3d6000fd5b505050506040513d6020811015612bfd57600080fd5b5051612c0557fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612c5d57600080fd5b505af1158015612c71573d6000803e3d6000fd5b505050506040513d6020811015612c8757600080fd5b5051925034841015612c9f57612c9f33853403613183565b505096509650969350505050565b60608142811015612cf3576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612d2a57fe5b905060200201356001600160a01b03166001600160a01b031614612d83576040805162461bcd60e51b815260206004820152601d6024820152600080516020614829833981519152604482015290519081900360640190fd5b612de17f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138f092505050565b91503482600081518110612df157fe5b60200260200101511115612e365760405162461bcd60e51b81526004018080602001828103825260278152602001806148026027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e7257fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612ea557600080fd5b505af1158015612eb9573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612f1e7f0000000000000000000000000000000000000000000000000000000000000000898960008181106116a757fe5b84600081518110612f2b57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f8257600080fd5b505af1158015612f96573d6000803e3d6000fd5b505050506040513d6020811015612fac57600080fd5b5051612fb457fe5b612ff3828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506136aa915050565b8160008151811061300057fe5b6020026020010151341115611e7357611e73338360008151811061302057fe5b60200260200101513403613183565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130ac5780518252601f19909201916020918201910161308d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461310e576040519150601f19603f3d011682016040523d82523d6000602084013e613113565b606091505b5091509150818015613141575080511580613141575080806020019051602081101561313e57600080fd5b50515b61317c5760405162461bcd60e51b815260040180806020018281038252602d81526020018061489a602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106131cf5780518252601f1990920191602091820191016131b0565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613231576040519150601f19603f3d011682016040523d82523d6000602084013e613236565b606091505b50509050806132765760405162461bcd60e51b81526004018080602001828103825260348152602001806147366034913960400191505060405180910390fd5b505050565b60606002825110156132d4576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff811180156132ec57600080fd5b50604051908082528060200260200182016040528015613316578160200160208202803683370190505b509050828160008151811061332757fe5b60200260200101818152505060005b6001835103811015613485576000806133798786858151811061335557fe5b602002602001015187866001018151811061336c57fe5b602002602001015161455f565b915091506134618785858151811061338d57fe5b602002602001015184848b6001600160a01b031663e6a439058b8a815181106133b257fe5b60200260200101518c8b600101815181106133c957fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b031681526020019250505060206040518083038186803b15801561343057600080fd5b505afa158015613444573d6000803e3d6000fd5b505050506040513d602081101561345a57600080fd5b5051614170565b84846001018151811061347057fe5b60209081029190910101525050600101613336565b509392505050565b600080600061349c8585614092565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527ff524e408e75d1e73784b81165db33b9ace66e7647166bf42f94d0cc179d4f9ac609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135d25780518252601f1990920191602091820191016135b3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613634576040519150601f19603f3d011682016040523d82523d6000602084013e613639565b606091505b5091509150818015613667575080511580613667575080806020019051602081101561366457600080fd5b50515b6136a25760405162461bcd60e51b81526004018080602001828103825260318152602001806147056031913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138ea576000808483815181106136c857fe5b60200260200101518584600101815181106136df57fe5b60200260200101519150915060006136f78383614092565b509050600087856001018151811061370b57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146137395782600061373d565b6000835b91509150600060028a510388106137545788613795565b6137957f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061378857fe5b602002602001015161348d565b90506137c27f0000000000000000000000000000000000000000000000000000000000000000888861348d565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137ff576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613870578181015183820152602001613858565b50505050905090810190601f16801561389d5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156138bf57600080fd5b505af11580156138d3573d6000803e3d6000fd5b5050600190990198506136ad975050505050505050565b50505050565b6060600282511015613949576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561396157600080fd5b5060405190808252806020026020018201604052801561398b578160200160208202803683370190505b509050828160018351038151811061399f57fe5b60209081029190910101528151600019015b8015613485576000806139e1878660018603815181106139cd57fe5b602002602001015187868151811061336c57fe5b91509150613ac9878585815181106139f557fe5b602002602001015184848b6001600160a01b031663e6a439058b60018b0381518110613a1d57fe5b60200260200101518c8b81518110613a3157fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b031681526020019250505060206040518083038186803b158015613a9857600080fd5b505afa158015613aac573d6000803e3d6000fd5b505050506040513d6020811015613ac257600080fd5b5051613e6b565b846001850381518110613ad857fe5b60209081029190910101525050600019016139b1565b60005b600183510381101561327657600080848381518110613b0c57fe5b6020026020010151858460010181518110613b2357fe5b6020026020010151915091506000613b3b8383614092565b5090506000613b6b7f0000000000000000000000000000000000000000000000000000000000000000858561348d565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613bac57600080fd5b505afa158015613bc0573d6000803e3d6000fd5b505050506040513d6060811015613bd657600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613c0c578284613c0f565b83835b91509150613c6d828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561182757600080fd5b9550613c9c7f00000000000000000000000000000000000000000000000000000000000000008784848b614170565b945050505050600080856001600160a01b0316886001600160a01b031614613cc657826000613cca565b6000835b91509150600060028c51038a10613ce1578a613d15565b613d157f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061378857fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613d9f578181015183820152602001613d87565b50505050905090810190601f168015613dcc5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613dee57600080fd5b505af1158015613e02573d6000803e3d6000fd5b50506001909b019a50613af19950505050505050505050565b8082038281111561112c576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808511613eab5760405162461bcd60e51b815260040180806020018281038252602c8152602001806146d9602c913960400191505060405180910390fd5b600084118015613ebb5750600083115b613ef65760405162461bcd60e51b81526004018080602001828103825260288152602001806147b56028913960400191505060405180910390fd5b6000613f1a6103e8613f0e878963ffffffff61462616565b9063ffffffff61462616565b90506000876001600160a01b031663a6ae80e2856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015613f7457600080fd5b505afa158015613f88573d6000803e3d6000fd5b505050506040513d6020811015613f9e57600080fd5b50516103e80390506000613fbc82613f0e888b63ffffffff613e1b16565b9050613fd96001828581613fcc57fe5b049063ffffffff61468916565b9998505050505050505050565b60008084116140265760405162461bcd60e51b81526004018080602001828103825260258152602001806147dd6025913960400191505060405180910390fd5b6000831180156140365750600082115b6140715760405162461bcd60e51b81526004018080602001828103825260288152602001806147b56028913960400191505060405180910390fd5b82614082858463ffffffff61462616565b8161408957fe5b04949350505050565b600080826001600160a01b0316846001600160a01b031614156140e65760405162461bcd60e51b815260040180806020018281038252602581526020018061476a6025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610614106578284614109565b83835b90925090506001600160a01b038216614169576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b60008085116141b05760405162461bcd60e51b815260040180806020018281038252602b8152602001806148c7602b913960400191505060405180910390fd5b6000841180156141c05750600083115b6141fb5760405162461bcd60e51b81526004018080602001828103825260288152602001806147b56028913960400191505060405180910390fd5b6000866001600160a01b031663a6ae80e2846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561425357600080fd5b505afa158015614267573d6000803e3d6000fd5b505050506040513d602081101561427d57600080fd5b50516103e80390506000614297878363ffffffff61462616565b905060006142ab828763ffffffff61462616565b905060006142d1836142c58a6103e863ffffffff61462616565b9063ffffffff61468916565b90508082816142dc57fe5b049a9950505050505050505050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561436557600080fd5b505afa158015614379573d6000803e3d6000fd5b505050506040513d602081101561438f57600080fd5b50516001600160a01b0316141561444257604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561441557600080fd5b505af1158015614429573d6000803e3d6000fd5b505050506040513d602081101561443f57600080fd5b50505b6000806144707f00000000000000000000000000000000000000000000000000000000000000008b8b61455f565b91509150816000148015614482575080155b1561449257879350869250614552565b600061449f898484613fe6565b90508781116144f257858110156144e75760405162461bcd60e51b815260040180806020018281038252602681526020018061478f6026913960400191505060405180910390fd5b889450925082614550565b60006144ff898486613fe6565b90508981111561450b57fe5b8781101561454a5760405162461bcd60e51b81526004018080602001828103825260268152602001806148496026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b600080600061456e8585614092565b50905060008061457f88888861348d565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156145b757600080fd5b505afa1580156145cb573d6000803e3d6000fd5b505050506040513d60608110156145e157600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b0387811690841614614614578082614617565b81815b90999098509650505050505050565b60008115806146415750508082028282828161463e57fe5b04145b61112c576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b8082018281101561112c576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c6564556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e69737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e54556e69737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e56414c49445f50415448000000556e69737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e54556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54556e69737761705632526f757465723a20455850495245440000000000000000a264697066735822122007cba36d6f4aa5ad4de76cbd658707a9276069f363bfecc82fbf4349da44093764736f6c6343000606003300000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a8000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Deployed Bytecode
0x60806040526004361061014f5760003560e01c8063ad5c4648116100b6578063caced41b1161006f578063caced41b146109fe578063d06ca61f14610a43578063ded9382a14610af8578063e8e3370014610b6b578063f305d71914610beb578063fb3bdb4114610c3157610188565b8063ad5c46481461084e578063ad615dec1461087f578063af2979eb146108b5578063b6f9de9514610908578063baa2abde1461098c578063c45a0155146109e957610188565b80635b0d5984116101085780635b0d59841461053e5780635c11d795146105c3578063791ac947146106595780637ff36ab5146106ef5780638803dbee146107735780639470dbea1461080957610188565b806302751cec1461018d57806318cbafe5146101f95780631f00ca74146102df5780632195995c1461039457806338ed1739146104125780634a25d94a146104a857610188565b3661018857336001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610cb5565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061028f600480360360a081101561021c57600080fd5b813591602081013591810190606081016040820135600160201b81111561024257600080fd5b82018360208201111561025457600080fd5b803590602001918460208302840111600160201b8311171561027557600080fd5b91935091506001600160a01b038135169060200135610dcf565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102cb5781810151838201526020016102b3565b505050509050019250505060405180910390f35b3480156102eb57600080fd5b5061028f6004803603604081101561030257600080fd5b81359190810190604081016020820135600160201b81111561032357600080fd5b82018360208201111561033557600080fd5b803590602001918460208302840111600160201b8311171561035657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110fc945050505050565b3480156103a057600080fd5b506101e060048036036101608110156103b857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611132565b34801561041e57600080fd5b5061028f600480360360a081101561043557600080fd5b813591602081013591810190606081016040820135600160201b81111561045b57600080fd5b82018360208201111561046d57600080fd5b803590602001918460208302840111600160201b8311171561048e57600080fd5b91935091506001600160a01b03813516906020013561122c565b3480156104b457600080fd5b5061028f600480360360a08110156104cb57600080fd5b813591602081013591810190606081016040820135600160201b8111156104f157600080fd5b82018360208201111561050357600080fd5b803590602001918460208302840111600160201b8311171561052457600080fd5b91935091506001600160a01b038135169060200135611377565b34801561054a57600080fd5b506105b1600480360361014081101561056257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611503565b60408051918252519081900360200190f35b3480156105cf57600080fd5b50610186600480360360a08110156105e657600080fd5b813591602081013591810190606081016040820135600160201b81111561060c57600080fd5b82018360208201111561061e57600080fd5b803590602001918460208302840111600160201b8311171561063f57600080fd5b91935091506001600160a01b038135169060200135611611565b34801561066557600080fd5b50610186600480360360a081101561067c57600080fd5b813591602081013591810190606081016040820135600160201b8111156106a257600080fd5b8201836020820111156106b457600080fd5b803590602001918460208302840111600160201b831117156106d557600080fd5b91935091506001600160a01b0381351690602001356118a6565b61028f6004803603608081101561070557600080fd5b81359190810190604081016020820135600160201b81111561072657600080fd5b82018360208201111561073857600080fd5b803590602001918460208302840111600160201b8311171561075957600080fd5b91935091506001600160a01b038135169060200135611b2a565b34801561077f57600080fd5b5061028f600480360360a081101561079657600080fd5b813591602081013591810190606081016040820135600160201b8111156107bc57600080fd5b8201836020820111156107ce57600080fd5b803590602001918460208302840111600160201b831117156107ef57600080fd5b91935091506001600160a01b038135169060200135611e7d565b34801561081557600080fd5b506105b16004803603608081101561082c57600080fd5b50803590602081013590604081013590606001356001600160a01b0316611f76565b34801561085a57600080fd5b50610863611fae565b604080516001600160a01b039092168252519081900360200190f35b34801561088b57600080fd5b506105b1600480360360608110156108a257600080fd5b5080359060208101359060400135611fd2565b3480156108c157600080fd5b506105b1600480360360c08110156108d857600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fe7565b6101866004803603608081101561091e57600080fd5b81359190810190604081016020820135600160201b81111561093f57600080fd5b82018360208201111561095157600080fd5b803590602001918460208302840111600160201b8311171561097257600080fd5b91935091506001600160a01b038135169060200135612168565b34801561099857600080fd5b506101e0600480360360e08110156109af57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124f4565b3480156109f557600080fd5b50610863612738565b348015610a0a57600080fd5b506105b160048036036080811015610a2157600080fd5b50803590602081013590604081013590606001356001600160a01b031661275c565b348015610a4f57600080fd5b5061028f60048036036040811015610a6657600080fd5b81359190810190604081016020820135600160201b811115610a8757600080fd5b820183602082011115610a9957600080fd5b803590602001918460208302840111600160201b83111715610aba57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061278b945050505050565b348015610b0457600080fd5b506101e06004803603610140811015610b1c57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356127b8565b348015610b7757600080fd5b50610bcd6004803603610100811015610b8f57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e001356128cc565b60408051938452602084019290925282820152519081900360600190f35b610bcd600480360360c0811015610c0157600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612a08565b61028f60048036036080811015610c4757600080fd5b81359190810190604081016020820135600160201b811115610c6857600080fd5b820183602082011115610c7a57600080fd5b803590602001918460208302840111600160201b83111715610c9b57600080fd5b91935091506001600160a01b038135169060200135612cad565b6000808242811015610cfc576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b610d2b897f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28a8a8a308a6124f4565b9093509150610d3b89868561302f565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610da157600080fd5b505af1158015610db5573d6000803e3d6000fd5b50505050610dc38583613183565b50965096945050505050565b60608142811015610e15576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21686866000198101818110610e4f57fe5b905060200201356001600160a01b03166001600160a01b031614610ea8576040805162461bcd60e51b815260206004820152601d6024820152600080516020614829833981519152604482015290519081900360640190fd5b610f067f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a88988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061327b92505050565b91508682600184510381518110610f1957fe5b60200260200101511015610f5e5760405162461bcd60e51b815260040180806020018281038252602b81526020018061486f602b913960400191505060405180910390fd5b610ffc86866000818110610f6e57fe5b905060200201356001600160a01b031633610fe27f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a88a8a6000818110610fb057fe5b905060200201356001600160a01b03168b8b6001818110610fcd57fe5b905060200201356001600160a01b031661348d565b85600081518110610fef57fe5b602002602001015161354d565b61103b828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506136aa915050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d8360018551038151811061107a57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110b857600080fd5b505af11580156110cc573d6000803e3d6000fd5b505050506110f184836001855103815181106110e457fe5b6020026020010151613183565b509695505050505050565b60606111297f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a884846138f0565b90505b92915050565b60008060006111627f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a88f8f61348d565b9050600087611171578c611175565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111eb57600080fd5b505af11580156111ff573d6000803e3d6000fd5b505050506112128f8f8f8f8f8f8f6124f4565b809450819550505050509b509b9950505050505050505050565b60608142811015611272576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b6112d07f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a88988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061327b92505050565b915086826001845103815181106112e357fe5b602002602001015110156113285760405162461bcd60e51b815260040180806020018281038252602b81526020018061486f602b913960400191505060405180910390fd5b61133886866000818110610f6e57fe5b6110f1828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506136aa915050565b606081428110156113bd576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216868660001981018181106113f757fe5b905060200201356001600160a01b03166001600160a01b031614611450576040805162461bcd60e51b815260206004820152601d6024820152600080516020614829833981519152604482015290519081900360640190fd5b6114ae7f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a8898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138f092505050565b915086826000815181106114be57fe5b60200260200101511115610f5e5760405162461bcd60e51b81526004018080602001828103825260278152602001806148026027913960400191505060405180910390fd5b6000806115517f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a88d7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc261348d565b9050600086611560578b611564565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115da57600080fd5b505af11580156115ee573d6000803e3d6000fd5b505050506116008d8d8d8d8d8d611fe7565b9d9c50505050505050505050505050565b8042811015611655576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b6116ca8585600081811061166557fe5b905060200201356001600160a01b0316336116c47f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a8898960008181106116a757fe5b905060200201356001600160a01b03168a8a6001818110610fcd57fe5b8a61354d565b6000858560001981018181106116dc57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561174157600080fd5b505afa158015611755573d6000803e3d6000fd5b505050506040513d602081101561176b57600080fd5b505160408051602088810282810182019093528882529293506117ad929091899189918291850190849080828437600092019190915250889250613aee915050565b8661185f82888860001981018181106117c257fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561182757600080fd5b505afa15801561183b573d6000803e3d6000fd5b505050506040513d602081101561185157600080fd5b50519063ffffffff613e1b16565b101561189c5760405162461bcd60e51b815260040180806020018281038252602b81526020018061486f602b913960400191505060405180910390fd5b5050505050505050565b80428110156118ea576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2168585600019810181811061192457fe5b905060200201356001600160a01b03166001600160a01b03161461197d576040805162461bcd60e51b815260206004820152601d6024820152600080516020614829833981519152604482015290519081900360640190fd5b61198d8585600081811061166557fe5b6119cb858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613aee915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216916370a0823191602480820192602092909190829003018186803b158015611a3557600080fd5b505afa158015611a49573d6000803e3d6000fd5b505050506040513d6020811015611a5f57600080fd5b5051905086811015611aa25760405162461bcd60e51b815260040180806020018281038252602b81526020018061486f602b913960400191505060405180910390fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b0857600080fd5b505af1158015611b1c573d6000803e3d6000fd5b5050505061189c8482613183565b60608142811015611b70576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031686866000818110611ba757fe5b905060200201356001600160a01b03166001600160a01b031614611c00576040805162461bcd60e51b815260206004820152601d6024820152600080516020614829833981519152604482015290519081900360640190fd5b611c5e7f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a83488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061327b92505050565b91508682600184510381518110611c7157fe5b60200260200101511015611cb65760405162461bcd60e51b815260040180806020018281038252602b81526020018061486f602b913960400191505060405180910390fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db083600081518110611cf257fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d2557600080fd5b505af1158015611d39573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb611d9e7f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a8898960008181106116a757fe5b84600081518110611dab57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611e0257600080fd5b505af1158015611e16573d6000803e3d6000fd5b505050506040513d6020811015611e2c57600080fd5b5051611e3457fe5b611e73828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506136aa915050565b5095945050505050565b60608142811015611ec3576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b611f217f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a8898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138f092505050565b91508682600081518110611f3157fe5b602002602001015111156113285760405162461bcd60e51b81526004018080602001828103825260278152602001806148026027913960400191505060405180910390fd5b6000611fa57f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a886868686613e6b565b95945050505050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6000611fdf848484613fe6565b949350505050565b6000814281101561202d576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b61205c887f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc289898930896124f4565b604080516370a0823160e01b815230600482015290519194506120e092508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156120af57600080fd5b505afa1580156120c3573d6000803e3d6000fd5b505050506040513d60208110156120d957600080fd5b505161302f565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561214657600080fd5b505af115801561215a573d6000803e3d6000fd5b505050506110f18483613183565b80428110156121ac576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316858560008181106121e357fe5b905060200201356001600160a01b03166001600160a01b03161461223c576040805162461bcd60e51b815260206004820152601d6024820152600080516020614829833981519152604482015290519081900360640190fd5b60003490507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561229c57600080fd5b505af11580156122b0573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb6123157f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a8898960008181106116a757fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561236557600080fd5b505af1158015612379573d6000803e3d6000fd5b505050506040513d602081101561238f57600080fd5b505161239757fe5b6000868660001981018181106123a957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561240e57600080fd5b505afa158015612422573d6000803e3d6000fd5b505050506040513d602081101561243857600080fd5b5051604080516020898102828101820190935289825292935061247a9290918a918a918291850190849080828437600092019190915250899250613aee915050565b8761185f828989600019810181811061248f57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561182757600080fd5b600080824281101561253b576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b60006125687f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a88c8c61348d565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b1580156125c357600080fd5b505af11580156125d7573d6000803e3d6000fd5b505050506040513d60208110156125ed57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561263a57600080fd5b505af115801561264e573d6000803e3d6000fd5b505050506040513d604081101561266457600080fd5b5080516020909101519092509050600061267e8e8e614092565b509050806001600160a01b03168e6001600160a01b0316146126a15781836126a4565b82825b90975095508a8710156126e85760405162461bcd60e51b81526004018080602001828103825260268152602001806148496026913960400191505060405180910390fd5b898610156127275760405162461bcd60e51b815260040180806020018281038252602681526020018061478f6026913960400191505060405180910390fd5b505050505097509795505050505050565b7f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a881565b6000611fa57f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a886868686614170565b60606111297f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a8848461327b565b60008060006128087f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a88e7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc261348d565b9050600087612817578c61281b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561289157600080fd5b505af11580156128a5573d6000803e3d6000fd5b505050506128b78e8e8e8e8e8e610cb5565b909f909e509c50505050505050505050505050565b60008060008342811015612915576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b6129238c8c8c8c8c8c6142eb565b909450925060006129557f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a88e8e61348d565b90506129638d33838861354d565b61296f8c33838761354d565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b1580156129c757600080fd5b505af11580156129db573d6000803e3d6000fd5b505050506040513d60208110156129f157600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612a51576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b612a7f8a7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28b348c8c6142eb565b90945092506000612ad17f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a88c7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc261348d565b9050612adf8b33838861354d565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612b3a57600080fd5b505af1158015612b4e573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612bd357600080fd5b505af1158015612be7573d6000803e3d6000fd5b505050506040513d6020811015612bfd57600080fd5b5051612c0557fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612c5d57600080fd5b505af1158015612c71573d6000803e3d6000fd5b505050506040513d6020811015612c8757600080fd5b5051925034841015612c9f57612c9f33853403613183565b505096509650969350505050565b60608142811015612cf3576040805162461bcd60e51b815260206004820152601860248201526000805160206148f2833981519152604482015290519081900360640190fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031686866000818110612d2a57fe5b905060200201356001600160a01b03166001600160a01b031614612d83576040805162461bcd60e51b815260206004820152601d6024820152600080516020614829833981519152604482015290519081900360640190fd5b612de17f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a8888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138f092505050565b91503482600081518110612df157fe5b60200260200101511115612e365760405162461bcd60e51b81526004018080602001828103825260278152602001806148026027913960400191505060405180910390fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db083600081518110612e7257fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612ea557600080fd5b505af1158015612eb9573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb612f1e7f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a8898960008181106116a757fe5b84600081518110612f2b57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f8257600080fd5b505af1158015612f96573d6000803e3d6000fd5b505050506040513d6020811015612fac57600080fd5b5051612fb457fe5b612ff3828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506136aa915050565b8160008151811061300057fe5b6020026020010151341115611e7357611e73338360008151811061302057fe5b60200260200101513403613183565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130ac5780518252601f19909201916020918201910161308d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461310e576040519150601f19603f3d011682016040523d82523d6000602084013e613113565b606091505b5091509150818015613141575080511580613141575080806020019051602081101561313e57600080fd5b50515b61317c5760405162461bcd60e51b815260040180806020018281038252602d81526020018061489a602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106131cf5780518252601f1990920191602091820191016131b0565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613231576040519150601f19603f3d011682016040523d82523d6000602084013e613236565b606091505b50509050806132765760405162461bcd60e51b81526004018080602001828103825260348152602001806147366034913960400191505060405180910390fd5b505050565b60606002825110156132d4576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff811180156132ec57600080fd5b50604051908082528060200260200182016040528015613316578160200160208202803683370190505b509050828160008151811061332757fe5b60200260200101818152505060005b6001835103811015613485576000806133798786858151811061335557fe5b602002602001015187866001018151811061336c57fe5b602002602001015161455f565b915091506134618785858151811061338d57fe5b602002602001015184848b6001600160a01b031663e6a439058b8a815181106133b257fe5b60200260200101518c8b600101815181106133c957fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b031681526020019250505060206040518083038186803b15801561343057600080fd5b505afa158015613444573d6000803e3d6000fd5b505050506040513d602081101561345a57600080fd5b5051614170565b84846001018151811061347057fe5b60209081029190910101525050600101613336565b509392505050565b600080600061349c8585614092565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527ff524e408e75d1e73784b81165db33b9ace66e7647166bf42f94d0cc179d4f9ac609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135d25780518252601f1990920191602091820191016135b3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613634576040519150601f19603f3d011682016040523d82523d6000602084013e613639565b606091505b5091509150818015613667575080511580613667575080806020019051602081101561366457600080fd5b50515b6136a25760405162461bcd60e51b81526004018080602001828103825260318152602001806147056031913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138ea576000808483815181106136c857fe5b60200260200101518584600101815181106136df57fe5b60200260200101519150915060006136f78383614092565b509050600087856001018151811061370b57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146137395782600061373d565b6000835b91509150600060028a510388106137545788613795565b6137957f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a8878c8b6002018151811061378857fe5b602002602001015161348d565b90506137c27f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a8888861348d565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137ff576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613870578181015183820152602001613858565b50505050905090810190601f16801561389d5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156138bf57600080fd5b505af11580156138d3573d6000803e3d6000fd5b5050600190990198506136ad975050505050505050565b50505050565b6060600282511015613949576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561396157600080fd5b5060405190808252806020026020018201604052801561398b578160200160208202803683370190505b509050828160018351038151811061399f57fe5b60209081029190910101528151600019015b8015613485576000806139e1878660018603815181106139cd57fe5b602002602001015187868151811061336c57fe5b91509150613ac9878585815181106139f557fe5b602002602001015184848b6001600160a01b031663e6a439058b60018b0381518110613a1d57fe5b60200260200101518c8b81518110613a3157fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b031681526020019250505060206040518083038186803b158015613a9857600080fd5b505afa158015613aac573d6000803e3d6000fd5b505050506040513d6020811015613ac257600080fd5b5051613e6b565b846001850381518110613ad857fe5b60209081029190910101525050600019016139b1565b60005b600183510381101561327657600080848381518110613b0c57fe5b6020026020010151858460010181518110613b2357fe5b6020026020010151915091506000613b3b8383614092565b5090506000613b6b7f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a8858561348d565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613bac57600080fd5b505afa158015613bc0573d6000803e3d6000fd5b505050506040513d6060811015613bd657600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613c0c578284613c0f565b83835b91509150613c6d828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561182757600080fd5b9550613c9c7f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a88784848b614170565b945050505050600080856001600160a01b0316886001600160a01b031614613cc657826000613cca565b6000835b91509150600060028c51038a10613ce1578a613d15565b613d157f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a8898e8d6002018151811061378857fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613d9f578181015183820152602001613d87565b50505050905090810190601f168015613dcc5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613dee57600080fd5b505af1158015613e02573d6000803e3d6000fd5b50506001909b019a50613af19950505050505050505050565b8082038281111561112c576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808511613eab5760405162461bcd60e51b815260040180806020018281038252602c8152602001806146d9602c913960400191505060405180910390fd5b600084118015613ebb5750600083115b613ef65760405162461bcd60e51b81526004018080602001828103825260288152602001806147b56028913960400191505060405180910390fd5b6000613f1a6103e8613f0e878963ffffffff61462616565b9063ffffffff61462616565b90506000876001600160a01b031663a6ae80e2856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015613f7457600080fd5b505afa158015613f88573d6000803e3d6000fd5b505050506040513d6020811015613f9e57600080fd5b50516103e80390506000613fbc82613f0e888b63ffffffff613e1b16565b9050613fd96001828581613fcc57fe5b049063ffffffff61468916565b9998505050505050505050565b60008084116140265760405162461bcd60e51b81526004018080602001828103825260258152602001806147dd6025913960400191505060405180910390fd5b6000831180156140365750600082115b6140715760405162461bcd60e51b81526004018080602001828103825260288152602001806147b56028913960400191505060405180910390fd5b82614082858463ffffffff61462616565b8161408957fe5b04949350505050565b600080826001600160a01b0316846001600160a01b031614156140e65760405162461bcd60e51b815260040180806020018281038252602581526020018061476a6025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610614106578284614109565b83835b90925090506001600160a01b038216614169576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b60008085116141b05760405162461bcd60e51b815260040180806020018281038252602b8152602001806148c7602b913960400191505060405180910390fd5b6000841180156141c05750600083115b6141fb5760405162461bcd60e51b81526004018080602001828103825260288152602001806147b56028913960400191505060405180910390fd5b6000866001600160a01b031663a6ae80e2846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561425357600080fd5b505afa158015614267573d6000803e3d6000fd5b505050506040513d602081101561427d57600080fd5b50516103e80390506000614297878363ffffffff61462616565b905060006142ab828763ffffffff61462616565b905060006142d1836142c58a6103e863ffffffff61462616565b9063ffffffff61468916565b90508082816142dc57fe5b049a9950505050505050505050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a89092169163e6a4390591604480820192602092909190829003018186803b15801561436557600080fd5b505afa158015614379573d6000803e3d6000fd5b505050506040513d602081101561438f57600080fd5b50516001600160a01b0316141561444257604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a89092169163c9c65396916044808201926020929091908290030181600087803b15801561441557600080fd5b505af1158015614429573d6000803e3d6000fd5b505050506040513d602081101561443f57600080fd5b50505b6000806144707f00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a88b8b61455f565b91509150816000148015614482575080155b1561449257879350869250614552565b600061449f898484613fe6565b90508781116144f257858110156144e75760405162461bcd60e51b815260040180806020018281038252602681526020018061478f6026913960400191505060405180910390fd5b889450925082614550565b60006144ff898486613fe6565b90508981111561450b57fe5b8781101561454a5760405162461bcd60e51b81526004018080602001828103825260268152602001806148496026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b600080600061456e8585614092565b50905060008061457f88888861348d565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156145b757600080fd5b505afa1580156145cb573d6000803e3d6000fd5b505050506040513d60608110156145e157600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b0387811690841614614614578082614617565b81815b90999098509650505050505050565b60008115806146415750508082028282828161463e57fe5b04145b61112c576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b8082018281101561112c576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c6564556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e69737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e54556e69737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e56414c49445f50415448000000556e69737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e54556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54556e69737761705632526f757465723a20455850495245440000000000000000a264697066735822122007cba36d6f4aa5ad4de76cbd658707a9276069f363bfecc82fbf4349da44093764736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a8000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
-----Decoded View---------------
Arg [0] : _factory (address): 0x28500192Ec2Bd53f20cc8056F44C72E3873d84A8
Arg [1] : _WETH (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000028500192ec2bd53f20cc8056f44c72e3873d84a8
Arg [1] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Deployed Bytecode Sourcemap
16138:18631:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16620:10;-1:-1:-1;;;;;16634:4:0;16620:18;;16613:26;;;;16138:18631;;12:1:-1;9;2:12;20770:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20770:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20770:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27939:850;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27939:850:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27939:850:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27939:850:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27939:850:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27939:850:0;;-1:-1:-1;27939:850:0;-1:-1:-1;;;;;;27939:850:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;27939:850:0;;;;;;;;;;;;;;;;;34513:253;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34513:253:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34513:253:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34513:253:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34513:253:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34513:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34513:253:0;;-1:-1:-1;34513:253:0;;-1:-1:-1;;;;;34513:253:0:i;21449:677::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21449:677:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21449:677:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25156:628::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25156:628:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25156:628:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25156:628:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25156:628:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25156:628:0;;-1:-1:-1;25156:628:0;-1:-1:-1;;;;;;25156:628:0;;;;;;;;:::i;27105:828::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27105:828:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27105:828:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27105:828:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27105:828:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27105:828:0;;-1:-1:-1;27105:828:0;-1:-1:-1;;;;;;27105:828:0;;;;;;;;:::i;23586:718::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23586:718:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23586:718:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;30996:714;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30996:714:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30996:714:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30996:714:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30996:714:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30996:714:0;;-1:-1:-1;30996:714:0;-1:-1:-1;;;;;;30996:714:0;;;;;;;;:::i;32572:843::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32572:843:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32572:843:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32572:843:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32572:843:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32572:843:0;;-1:-1:-1;32572:843:0;-1:-1:-1;;;;;;32572:843:0;;;;;;;;:::i;26402:697::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26402:697:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26402:697:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26402:697:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26402:697:0;;-1:-1:-1;26402:697:0;-1:-1:-1;;;;;;26402:697:0;;;;;;;;:::i;25790:606::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25790:606:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25790:606:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25790:606:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25790:606:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25790:606:0;;-1:-1:-1;25790:606:0;-1:-1:-1;;;;;;25790:606:0;;;;;;;;:::i;33954:290::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33954:290:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;33954:290:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33954:290:0;;:::i;16274:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16274:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;16274:38:0;;;;;;;;;;;;;;33459:188;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33459:188:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33459:188:0;;;;;;;;;;;;:::i;22880:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22880:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22880:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31716:850::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31716:850:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31716:850:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31716:850:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31716:850:0;;-1:-1:-1;31716:850:0;-1:-1:-1;;;;;;31716:850:0;;;;;;;;:::i;19899:865::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19899:865:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19899:865:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16226:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16226:41:0;;;:::i;33655:291::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33655:291:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;33655:291:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33655:291:0;;:::i;34252:253::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34252:253:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34252:253:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34252:253:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34252:253:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34252:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34252:253:0;;-1:-1:-1;34252:253:0;;-1:-1:-1;;;;;34252:253:0:i;22132:669::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22132:669:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22132:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18138:738::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18138:738:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18138:738:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18882:974;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18882:974:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28795:810::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28795:810:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28795:810:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28795:810:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28795:810:0;;-1:-1:-1;28795:810:0;-1:-1:-1;;;;;;28795:810:0;;;;;;;;:::i;20770:673::-;21007:16;21025:14;20988:8;16383:15;16371:8;:27;;16363:64;;;;;-1:-1:-1;;;16363:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16363:64:0;;;;;;;;;;;;;;;21079:196:::1;21109:5;21129:4;21148:9;21172:14;21201:12;21236:4;21256:8;21079:15;:196::i;:::-;21052:223:::0;;-1:-1:-1;21052:223:0;-1:-1:-1;21286:51:0::1;21314:5:::0;21321:2;21052:223;21286:27:::1;:51::i;:::-;21354:4;-1:-1:-1::0;;;;;21348:20:0::1;;21369:9;21348:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21348:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21348:31:0;;;;21390:45;21421:2;21425:9;21390:30;:45::i;:::-;20770:673:::0;;;;;;;;;;:::o;27939:850::-;28153:21;28125:8;16383:15;16371:8;:27;;16363:64;;;;;-1:-1:-1;;;16363:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16363:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28225:4:0::1;28200:29;:4:::0;;-1:-1:-1;;28205:15:0;;28200:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28200:21:0::1;-1:-1:-1::0;;;;;28200:29:0::1;;28192:71;;;::::0;;-1:-1:-1;;;28192:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28192:71:0;;;;;;;;;;;;;::::1;;28284:55;28315:7;28324:8;28334:4;;28284:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28284:30:0::1;::::0;-1:-1:-1;;;28284:55:0:i:1;:::-;28274:65;;28389:12;28358:7;28383:1;28366:7;:14;:18;28358:27;;;;;;;;;;;;;;:43;;28350:99;;;;-1:-1:-1::0;;;28350:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28460:141;28506:4;;28511:1;28506:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28506:7:0::1;28515:10;28527:51;28552:7;28561:4;;28566:1;28561:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28561:7:0::1;28570:4;;28575:1;28570:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28570:7:0::1;28527:24;:51::i;:::-;28580:7;28588:1;28580:10;;;;;;;;;;;;;;28460:31;:141::i;:::-;28612:35;28618:7;28627:4;;28612:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28641:4:0::1;::::0;-1:-1:-1;28612:5:0::1;::::0;-1:-1:-1;;28612:35:0:i:1;:::-;28664:4;-1:-1:-1::0;;;;;28658:20:0::1;;28679:7;28704:1;28687:7;:14;:18;28679:27;;;;;;;;;;;;;;28658:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28658:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28658:49:0;;;;28718:63;28749:2;28753:7;28778:1;28761:7;:14;:18;28753:27;;;;;;;;;;;;;;28718:30;:63::i;:::-;27939:850:::0;;;;;;;;;:::o;34513:253::-;34657:21;34703:55;34733:7;34742:9;34753:4;34703:29;:55::i;:::-;34696:62;;34513:253;;;;;:::o;21449:677::-;21755:12;21769;21794;21809:49;21834:7;21843:6;21851;21809:24;:49::i;:::-;21794:64;;21869:10;21882;:33;;21906:9;21882:33;;;-1:-1:-1;;21882:33:0;21926:80;;;-1:-1:-1;;;21926:80:0;;21954:10;21926:80;;;;21974:4;21926:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21869:46;;-1:-1:-1;;;;;;21926:27:0;;;;;:80;;;;;-1:-1:-1;;21926:80:0;;;;;;;;-1:-1:-1;21926:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;21926:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21926:80:0;;;;22038;22054:6;22062;22070:9;22081:10;22093;22105:2;22109:8;22038:15;:80::i;:::-;22017:101;;;;;;;;21449:677;;;;;;;;;;;;;;;;:::o;25156:628::-;25380:21;25361:8;16383:15;16371:8;:27;;16363:64;;;;;-1:-1:-1;;;16363:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16363:64:0;;;;;;;;;;;;;;;25424:55:::1;25455:7;25464:8;25474:4;;25424:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25424:30:0::1;::::0;-1:-1:-1;;;25424:55:0:i:1;:::-;25414:65;;25529:12;25498:7;25523:1;25506:7;:14;:18;25498:27;;;;;;;;;;;;;;:43;;25490:99;;;;-1:-1:-1::0;;;25490:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25600:141;25646:4;;25651:1;25646:7;;;;;;25600:141;25752:24;25758:7;25767:4;;25752:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25773:2:0;;-1:-1:-1;25752:5:0::1;::::0;-1:-1:-1;;25752:24:0:i:1;27105:828::-:0;27319:21;27291:8;16383:15;16371:8;:27;;16363:64;;;;;-1:-1:-1;;;16363:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16363:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27391:4:0::1;27366:29;:4:::0;;-1:-1:-1;;27371:15:0;;27366:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27366:21:0::1;-1:-1:-1::0;;;;;27366:29:0::1;;27358:71;;;::::0;;-1:-1:-1;;;27358:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27358:71:0;;;;;;;;;;;;;::::1;;27450:55;27480:7;27489:9;27500:4;;27450:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27450:29:0::1;::::0;-1:-1:-1;;;27450:55:0:i:1;:::-;27440:65;;27538:11;27524:7;27532:1;27524:10;;;;;;;;;;;;;;:25;;27516:77;;;;-1:-1:-1::0;;;27516:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23586:718:::0;23904:14;23931:12;23946:46;23971:7;23980:5;23987:4;23946:24;:46::i;:::-;23931:61;;24003:10;24016;:33;;24040:9;24016:33;;;-1:-1:-1;;24016:33:0;24060:80;;;-1:-1:-1;;;24060:80:0;;24088:10;24060:80;;;;24108:4;24060:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24003:46;;-1:-1:-1;;;;;;24060:27:0;;;;;:80;;;;;-1:-1:-1;;24060:80:0;;;;;;;;-1:-1:-1;24060:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;24060:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24060:80:0;;;;24163:133;24225:5;24232:9;24243:14;24259:12;24273:2;24277:8;24163:47;:133::i;:::-;24151:145;23586:718;-1:-1:-1;;;;;;;;;;;;;23586:718:0:o;30996:714::-;31230:8;16383:15;16371:8;:27;;16363:64;;;;;-1:-1:-1;;;16363:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16363:64:0;;;;;;;;;;;;;;;31251:139:::1;31297:4;;31302:1;31297:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31297:7:0::1;31306:10;31318:51;31343:7;31352:4;;31357:1;31352:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31352:7:0::1;31361:4;;31366:1;31361:7;;;;;;31318:51;31371:8;31251:31;:139::i;:::-;31401:18;31429:4:::0;;-1:-1:-1;;31434:15:0;;31429:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31429:21:0::1;-1:-1:-1::0;;;;;31422:39:0::1;;31462:2;31422:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31422:43:0::1;-1:-1:-1::0;;;;;31422:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31422:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31422:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31422:43:0;31476:44:::1;::::0;;31422:43:::1;31476:44:::0;;::::1;::::0;;;;;;;;;;;31422:43;;-1:-1:-1;31476:44:0::1;::::0;;;31511:4;;;;;;31476:44;::::1;::::0;31511:4;;31476:44;31511:4;31476:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31517:2:0;;-1:-1:-1;31476:34:0::1;::::0;-1:-1:-1;;31476:44:0:i:1;:::-;31619:12:::0;31553:62:::1;31601:13:::0;31560:4;;-1:-1:-1;;31565:15:0;;31560:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31560:21:0::1;-1:-1:-1::0;;;;;31553:39:0::1;;31593:2;31553:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31553:43:0::1;-1:-1:-1::0;;;;;31553:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31553:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31553:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31553:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;31531:171;;;;-1:-1:-1::0;;;31531:171:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16438:1;30996:714:::0;;;;;;;:::o;32572:843::-;32839:8;16383:15;16371:8;:27;;16363:64;;;;;-1:-1:-1;;;16363:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16363:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32898:4:0::1;32873:29;:4:::0;;-1:-1:-1;;32878:15:0;;32873:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32873:21:0::1;-1:-1:-1::0;;;;;32873:29:0::1;;32865:71;;;::::0;;-1:-1:-1;;;32865:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32865:71:0;;;;;;;;;;;;;::::1;;32947:139;32993:4;;32998:1;32993:7;;;;;;32947:139;33097:55;33132:4;;33097:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33146:4:0::1;::::0;-1:-1:-1;33097:34:0::1;::::0;-1:-1:-1;;33097:55:0:i:1;:::-;33180:37;::::0;;-1:-1:-1;;;33180:37:0;;33211:4:::1;33180:37;::::0;::::1;::::0;;;33163:14:::1;::::0;-1:-1:-1;;;;;33187:4:0::1;33180:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33180:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33180:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33180:37:0;;-1:-1:-1;33236:25:0;;::::1;;33228:81;;;;-1:-1:-1::0;;;33228:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33326:4;-1:-1:-1::0;;;;;33320:20:0::1;;33341:9;33320:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33320:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33320:31:0;;;;33362:45;33393:2;33397:9;33362:30;:45::i;26402:697::-:0;26618:21;26590:8;16383:15;16371:8;:27;;16363:64;;;;;-1:-1:-1;;;16363:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16363:64:0;;;;;;;;;;;;;;;26676:4:::1;-1:-1:-1::0;;;;;26665:15:0::1;:4;;26670:1;26665:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26665:7:0::1;-1:-1:-1::0;;;;;26665:15:0::1;;26657:57;;;::::0;;-1:-1:-1;;;26657:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26657:57:0;;;;;;;;;;;;;::::1;;26735:56;26766:7;26775:9;26786:4;;26735:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26735:30:0::1;::::0;-1:-1:-1;;;26735:56:0:i:1;:::-;26725:66;;26841:12;26810:7;26835:1;26818:7;:14;:18;26810:27;;;;;;;;;;;;;;:43;;26802:99;;;;-1:-1:-1::0;;;26802:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26918:4;-1:-1:-1::0;;;;;26912:19:0::1;;26939:7;26947:1;26939:10;;;;;;;;;;;;;;26912:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26912:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26912:40:0;;;;;26976:4;-1:-1:-1::0;;;;;26970:20:0::1;;26991:51;27016:7;27025:4;;27030:1;27025:7;;;;;;26991:51;27044:7;27052:1;27044:10;;;;;;;;;;;;;;26970:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;26970:85:0::1;-1:-1:-1::0;;;;;26970:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26970:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26970:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26970:85:0;26963:93:::1;;;;27067:24;27073:7;27082:4;;27067:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27088:2:0;;-1:-1:-1;27067:5:0::1;::::0;-1:-1:-1;;27067:24:0:i:1;:::-;26402:697:::0;;;;;;;;:::o;25790:606::-;26014:21;25995:8;16383:15;16371:8;:27;;16363:64;;;;;-1:-1:-1;;;16363:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16363:64:0;;;;;;;;;;;;;;;26058:55:::1;26088:7;26097:9;26108:4;;26058:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26058:29:0::1;::::0;-1:-1:-1;;;26058:55:0:i:1;:::-;26048:65;;26146:11;26132:7;26140:1;26132:10;;;;;;;;;;;;;;:25;;26124:77;;;;-1:-1:-1::0;;;26124:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33954:290:::0;34121:13;34159:77;34188:7;34197:9;34208;34219:10;34231:4;34159:28;:77::i;:::-;34152:84;33954:290;-1:-1:-1;;;;;33954:290:0:o;16274:38::-;;;:::o;33459:188::-;33556:12;33588:51;33611:7;33620:8;33630;33588:22;:51::i;:::-;33581:58;33459:188;-1:-1:-1;;;;33459:188:0:o;22880:700::-;23146:14;23127:8;16383:15;16371:8;:27;;16363:64;;;;;-1:-1:-1;;;16363:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16363:64:0;;;;;;;;;;;;;;;23189:196:::1;23219:5;23239:4;23258:9;23282:14;23311:12;23346:4;23366:8;23189:15;:196::i;:::-;23435:38;::::0;;-1:-1:-1;;;23435:38:0;;23467:4:::1;23435:38;::::0;::::1;::::0;;;23173:212;;-1:-1:-1;23396:78:0::1;::::0;-1:-1:-1;23424:5:0;;23431:2;;-1:-1:-1;;;;;23435:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;23435:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23435:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23435:38:0;23396:27:::1;:78::i;:::-;23491:4;-1:-1:-1::0;;;;;23485:20:0::1;;23506:9;23485:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23485:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23485:31:0;;;;23527:45;23558:2;23562:9;23527:30;:45::i;31716:850::-:0;31976:8;16383:15;16371:8;:27;;16363:64;;;;;-1:-1:-1;;;16363:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16363:64:0;;;;;;;;;;;;;;;32021:4:::1;-1:-1:-1::0;;;;;32010:15:0::1;:4;;32015:1;32010:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32010:7:0::1;-1:-1:-1::0;;;;;32010:15:0::1;;32002:57;;;::::0;;-1:-1:-1;;;32002:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32002:57:0;;;;;;;;;;;;;::::1;;32070:13;32086:9;32070:25;;32112:4;-1:-1:-1::0;;;;;32106:19:0::1;;32133:8;32106:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32106:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32106:38:0;;;;;32168:4;-1:-1:-1::0;;;;;32162:20:0::1;;32183:51;32208:7;32217:4;;32222:1;32217:7;;;;;;32183:51;32236:8;32162:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;32162:83:0::1;-1:-1:-1::0;;;;;32162:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32162:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32162:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32162:83:0;32155:91:::1;;;;32257:18;32285:4:::0;;-1:-1:-1;;32290:15:0;;32285:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32285:21:0::1;-1:-1:-1::0;;;;;32278:39:0::1;;32318:2;32278:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32278:43:0::1;-1:-1:-1::0;;;;;32278:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32278:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32278:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32278:43:0;32332:44:::1;::::0;;32278:43:::1;32332:44:::0;;::::1;::::0;;;;;;;;;;;32278:43;;-1:-1:-1;32332:44:0::1;::::0;;;32367:4;;;;;;32332:44;::::1;::::0;32367:4;;32332:44;32367:4;32332:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32373:2:0;;-1:-1:-1;32332:34:0::1;::::0;-1:-1:-1;;32332:44:0:i:1;:::-;32475:12:::0;32409:62:::1;32457:13:::0;32416:4;;-1:-1:-1;;32421:15:0;;32416:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32416:21:0::1;-1:-1:-1::0;;;;;32409:39:0::1;;32449:2;32409:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32409:43:0::1;-1:-1:-1::0;;;;;32409:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;19899:865:0::0;20153:12;20167;20134:8;16383:15;16371:8;:27;;16363:64;;;;;-1:-1:-1;;;16363:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16363:64:0;;;;;;;;;;;;;;;20192:12:::1;20207:49;20232:7;20241:6;20249;20207:24;:49::i;:::-;20267:62;::::0;;-1:-1:-1;;;20267:62:0;;20301:10:::1;20267:62;::::0;::::1;::::0;-1:-1:-1;;;;;20267:33:0;::::1;:62:::0;;;;;;;;;;;;;;20192:64;;-1:-1:-1;20267:33:0;;::::1;::::0;:62;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20267:33:0;:62;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20267:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20267:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;20397:29:0::1;::::0;;-1:-1:-1;;;20397:29:0;;-1:-1:-1;;;;;20397:29:0;;::::1;;::::0;::::1;::::0;;;20367:12:::1;::::0;;;20397:25;;::::1;::::0;::::1;::::0;:29;;;;;;;;;;;20367:12;20397:25;:29;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20397:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20397:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20397:29:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20397:29:0;-1:-1:-1;20438:14:0::1;20457:43;20485:6:::0;20493;20457:27:::1;:43::i;:::-;20437:63;;;20542:6;-1:-1:-1::0;;;;;20532:16:0::1;:6;-1:-1:-1::0;;;;;20532:16:0::1;;:58;;20573:7;20582;20532:58;;;20552:7;20561;20532:58;20511:79:::0;;-1:-1:-1;20511:79:0;-1:-1:-1;20609:21:0;;::::1;;20601:72;;;;-1:-1:-1::0;;;20601:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20703:10;20692:7;:21;;20684:72;;;;-1:-1:-1::0;;;20684:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16438:1;;;;19899:865:::0;;;;;;;;;;;:::o;16226:41::-;;;:::o;33655:291::-;33822:14;33861:77;33891:7;33900:8;33910:9;33921:10;33933:4;33861:29;:77::i;34252:253::-;34396:21;34442:55;34473:7;34482:8;34492:4;34442:30;:55::i;22132:669::-;22421:16;22439:14;22466:12;22481:46;22506:7;22515:5;22522:4;22481:24;:46::i;:::-;22466:61;;22538:10;22551;:33;;22575:9;22551:33;;;-1:-1:-1;;22551:33:0;22595:80;;;-1:-1:-1;;;22595:80:0;;22623:10;22595:80;;;;22643:4;22595:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22538:46;;-1:-1:-1;;;;;;22595:27:0;;;;;:80;;;;;-1:-1:-1;;22595:80:0;;;;;;;;-1:-1:-1;22595:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;22595:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22595:80:0;;;;22713;22732:5;22739:9;22750:14;22766:12;22780:2;22784:8;22713:18;:80::i;:::-;22686:107;;;;-1:-1:-1;22132:669:0;-1:-1:-1;;;;;;;;;;;;;22132:669:0:o;18138:738::-;18426:12;18440;18454:14;18407:8;16383:15;16371:8;:27;;16363:64;;;;;-1:-1:-1;;;16363:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16363:64:0;;;;;;;;;;;;;;;18502:85:::1;18516:6;18524;18532:14;18548;18564:10;18576;18502:13;:85::i;:::-;18481:106:::0;;-1:-1:-1;18481:106:0;-1:-1:-1;18598:12:0::1;18613:49;18638:7;18647:6:::0;18655;18613:24:::1;:49::i;:::-;18598:64;;18673:66;18705:6;18713:10;18725:4;18731:7;18673:31;:66::i;:::-;18750;18782:6;18790:10;18802:4;18808:7;18750:31;:66::i;:::-;18854:4;-1:-1:-1::0;;;;;18839:25:0::1;;18865:2;18839:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;18839:29:0::1;-1:-1:-1::0;;;;;18839:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18839:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18839:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18839:29:0;18138:738;;;;-1:-1:-1;18839:29:0;;-1:-1:-1;18138:738:0;;-1:-1:-1;;;;;;;;;18138:738:0:o;18882:974::-;19135:16;19153:14;19169;19116:8;16383:15;16371:8;:27;;16363:64;;;;;-1:-1:-1;;;16363:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16363:64:0;;;;;;;;;;;;;;;19223:176:::1;19251:5;19271:4;19290:18;19323:9;19347:14;19376:12;19223:13;:176::i;:::-;19196:203:::0;;-1:-1:-1;19196:203:0;-1:-1:-1;19410:12:0::1;19425:46;19450:7;19459:5:::0;19466:4:::1;19425:24;:46::i;:::-;19410:61;;19482:69;19514:5;19521:10;19533:4;19539:11;19482:31;:69::i;:::-;19568:4;-1:-1:-1::0;;;;;19562:19:0::1;;19589:9;19562:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19562:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19562:39:0;;;;;19625:4;-1:-1:-1::0;;;;;19619:20:0::1;;19640:4;19646:9;19619:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19619:37:0::1;-1:-1:-1::0;;;;;19619:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19619:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19619:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19619:37:0;19612:45:::1;;;;19695:4;-1:-1:-1::0;;;;;19680:25:0::1;;19706:2;19680:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;19680:29:0::1;-1:-1:-1::0;;;;;19680:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19680:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19680:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19680:29:0;;-1:-1:-1;19760:9:0::1;:21:::0;-1:-1:-1;19756:92:0::1;;;19783:65;19814:10;19838:9;19826;:21;19783:30;:65::i;:::-;16438:1;18882:974:::0;;;;;;;;;;;:::o;28795:810::-;29008:21;28980:8;16383:15;16371:8;:27;;16363:64;;;;;-1:-1:-1;;;16363:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16363:64:0;;;;;;;;;;;;;;;29066:4:::1;-1:-1:-1::0;;;;;29055:15:0::1;:4;;29060:1;29055:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29055:7:0::1;-1:-1:-1::0;;;;;29055:15:0::1;;29047:57;;;::::0;;-1:-1:-1;;;29047:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;29047:57:0;;;;;;;;;;;;;::::1;;29125:55;29155:7;29164:9;29175:4;;29125:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29125:29:0::1;::::0;-1:-1:-1;;;29125:55:0:i:1;:::-;29115:65;;29213:9;29199:7;29207:1;29199:10;;;;;;;;;;;;;;:23;;29191:75;;;;-1:-1:-1::0;;;29191:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29283:4;-1:-1:-1::0;;;;;29277:19:0::1;;29304:7;29312:1;29304:10;;;;;;;;;;;;;;29277:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29277:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29277:40:0;;;;;29341:4;-1:-1:-1::0;;;;;29335:20:0::1;;29356:51;29381:7;29390:4;;29395:1;29390:7;;;;;;29356:51;29409:7;29417:1;29409:10;;;;;;;;;;;;;;29335:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;29335:85:0::1;-1:-1:-1::0;;;;;29335:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29335:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29335:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29335:85:0;29328:93:::1;;;;29432:24;29438:7;29447:4;;29432:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29453:2:0;;-1:-1:-1;29432:5:0::1;::::0;-1:-1:-1;;29432:24:0:i:1;:::-;29519:7;29527:1;29519:10;;;;;;;;;;;;;;29507:9;:22;29503:94;;;29531:66;29562:10;29586:7;29594:1;29586:10;;;;;;;;;;;;;;29574:9;:22;29531:30;:66::i;10122:449::-:0;10354:45;;;-1:-1:-1;;;;;10354:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10354:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;10343:57:0;;;;10308:12;;10322:17;;10343:10;;;;10354:45;10343:57;;;25:18:-1;10343:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;10343:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;10307:93:0;;;;10433:7;:57;;;;-1:-1:-1;10445:11:0;;:16;;:44;;;10476:4;10465:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10465:24:0;10445:44;10411:152;;;;-1:-1:-1;;;10411:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10122:449;;;;;:::o;11085:217::-;11198:12;;;11158;11198;;;;;;;;;-1:-1:-1;;;;;11176:7:0;;;11191:5;;11176:35;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;11176:35:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;11157:54:0;;;11230:7;11222:72;;;;-1:-1:-1;;;11222:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11085:217;;;:::o;14873:578::-;14974:21;15031:1;15016:4;:11;:16;;15008:59;;;;;-1:-1:-1;;;15008:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15099:4;:11;15088:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15088:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;15088:23:0;;15078:33;;15135:8;15122:7;15130:1;15122:10;;;;;;;;;;;;;:21;;;;;15159:6;15154:290;15185:1;15171:4;:11;:15;15167:1;:19;15154:290;;;15209:14;15225:15;15244:42;15256:7;15265:4;15270:1;15265:7;;;;;;;;;;;;;;15274:4;15279:1;15283;15279:5;15274:11;;;;;;;;;;;;;;15244;:42::i;:::-;15208:78;;;;15318:114;15331:7;15340;15348:1;15340:10;;;;;;;;;;;;;;15352:9;15363:10;15393:7;-1:-1:-1;;;;;15375:34:0;;15410:4;15415:1;15410:7;;;;;;;;;;;;;;15419:4;15424:1;15428;15424:5;15419:11;;;;;;;;;;;;;;15375:56;;;;;;;;;;;;;-1:-1:-1;;;;;15375:56:0;-1:-1:-1;;;;;15375:56:0;;;;;;-1:-1:-1;;;;;15375:56:0;-1:-1:-1;;;;;15375:56:0;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15375:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15375:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15375:56:0;15318:12;:114::i;:::-;15301:7;15309:1;15313;15309:5;15301:14;;;;;;;;;;;;;;;;;:131;-1:-1:-1;;15188:3:0;;15154:290;;;;14873:578;;;;;:::o;11915:478::-;12004:12;12030:14;12046;12064:26;12075:6;12083;12064:10;:26::i;:::-;12228:32;;;-1:-1:-1;;12228:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;12228:32:0;;;;;12218:43;;;;;;-1:-1:-1;;;;;;12131:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12131:251:0;;;;;;;12121:262;;;;;;;;;11915:478;-1:-1:-1;;;;;11915:478:0:o;10579:498::-;10850:51;;;-1:-1:-1;;;;;10850:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10850:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;10839:63:0;;;;10804:12;;10818:17;;10839:10;;;;10850:51;10839:63;;;25:18:-1;10839:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;10839:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;10803:99:0;;;;10935:7;:57;;;;-1:-1:-1;10947:11:0;;:16;;:44;;;10978:4;10967:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10967:24:0;10947:44;10913:156;;;;-1:-1:-1;;;10913:156:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10579:498;;;;;;:::o;24415:735::-;24522:6;24517:626;24548:1;24534:4;:11;:15;24530:1;:19;24517:626;;;24572:13;24587:14;24606:4;24611:1;24606:7;;;;;;;;;;;;;;24615:4;24620:1;24624;24620:5;24615:11;;;;;;;;;;;;;;24571:56;;;;24643:14;24662:42;24690:5;24697:6;24662:27;:42::i;:::-;24642:62;;;24719:14;24736:7;24744:1;24748;24744:5;24736:14;;;;;;;;;;;;;;24719:31;;24766:15;24783;24811:6;-1:-1:-1;;;;;24802:15:0;:5;-1:-1:-1;;;;;24802:15:0;;:61;;24844:9;24860:1;24802:61;;;24826:1;24830:9;24802:61;24765:98;;;;24878:10;24909:1;24895:4;:11;:15;24891:1;:19;:82;;24970:3;24891:82;;;24913:54;24938:7;24947:6;24955:4;24960:1;24964;24960:5;24955:11;;;;;;;;;;;;;;24913:24;:54::i;:::-;24878:95;;25003:48;25028:7;25037:5;25044:6;25003:24;:48::i;:::-;-1:-1:-1;;;;;24988:69:0;;25076:10;25088;25100:2;25114:1;25104:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;25104:12:0;87:42:-1;143:17;;-1:-1;25104:12:0;;24988:143;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24988:143:0;-1:-1:-1;;;;;24988:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;24988:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24988:143:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24551:3:0;;;;;-1:-1:-1;24517:626:0;;-1:-1:-1;;;;;;;;24517:626:0;;;24415:735;;;:::o;15532:599::-;15633:21;15690:1;15675:4;:11;:16;;15667:59;;;;;-1:-1:-1;;;15667:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15758:4;:11;15747:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15747:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;15747:23:0;;15737:33;;15811:9;15781:7;15806:1;15789:7;:14;:18;15781:27;;;;;;;;;;;;;;;;;:39;15845:11;;-1:-1:-1;;15845:15:0;15831:293;15862:5;;15831:293;;15890:14;15906:15;15925:42;15937:7;15946:4;15955:1;15951;:5;15946:11;;;;;;;;;;;;;;15959:4;15964:1;15959:7;;;;;;;15925:42;15889:78;;;;15999:113;16011:7;16020;16028:1;16020:10;;;;;;;;;;;;;;16032:9;16043:10;16073:7;-1:-1:-1;;;;;16055:34:0;;16090:4;16099:1;16095;:5;16090:11;;;;;;;;;;;;;;16103:4;16108:1;16103:7;;;;;;;;;;;;;;16055:56;;;;;;;;;;;;;-1:-1:-1;;;;;16055:56:0;-1:-1:-1;;;;;16055:56:0;;;;;;-1:-1:-1;;;;;16055:56:0;-1:-1:-1;;;;;16055:56:0;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16055:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16055:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16055:56:0;15999:11;:113::i;:::-;15982:7;15994:1;15990;:5;15982:14;;;;;;;;;;;;;;;;;:130;-1:-1:-1;;;;15869:3:0;15831:293;;29752:1238;29865:6;29860:1123;29891:1;29877:4;:11;:15;29873:1;:19;29860:1123;;;29915:13;29930:14;29949:4;29954:1;29949:7;;;;;;;;;;;;;;29958:4;29963:1;29967;29963:5;29958:11;;;;;;;;;;;;;;29914:56;;;;29986:14;30005:42;30033:5;30040:6;30005:27;:42::i;:::-;29985:62;;;30062:19;30099:48;30124:7;30133:5;30140:6;30099:24;:48::i;:::-;30062:86;;30163:16;30194:17;30282:13;30297;30315:4;-1:-1:-1;;;;;30315:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30315:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30315:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30315:18:0;;;;;;;-1:-1:-1;;;;;30281:52:0;;;;-1:-1:-1;30281:52:0;;-1:-1:-1;30349:17:0;;-1:-1:-1;;;;;30390:15:0;;;;;;;:61;;30432:8;30442;30390:61;;;30409:8;30419;30390:61;30348:103;;;;30480:56;30523:12;30487:5;-1:-1:-1;;;;;30480:23:0;;30512:4;30480:38;;;;;;;;;;;;;-1:-1:-1;;;;;30480:38:0;-1:-1:-1;;;;;30480:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30480:56:0;30466:70;;30566:95;30596:7;30605:11;30618:12;30632:13;30655:4;30566:29;:95::i;:::-;30551:110;;29860:1123;;;;30692:15;30709;30737:6;-1:-1:-1;;;;;30728:15:0;:5;-1:-1:-1;;;;;30728:15:0;;:67;;30773:12;30792:1;30728:67;;;30752:1;30756:12;30728:67;30691:104;;;;30810:10;30841:1;30827:4;:11;:15;30823:1;:19;:82;;30902:3;30823:82;;;30845:54;30870:7;30879:6;30887:4;30892:1;30896;30892:5;30887:11;;;;;;;30845:54;30958:12;;;30968:1;30958:12;;;;;;;;;;-1:-1:-1;;;30920:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30920:51:0;;;;;;;;;;;;;;;;;;;;;;30810:95;;-1:-1:-1;30920:9:0;;;;;;30930:10;;30942;;30810:95;;30958:12;;30920:51;;;;;;;;30958:12;;30920:51;;;;30958:12;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;30920:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30920:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29894:3:0;;;;;-1:-1:-1;29860:1123:0;;-1:-1:-1;;;;;;;;;;29860:1123:0;8087:129;8171:5;;;8166:16;;;;8158:50;;;;;-1:-1:-1;;;8158:50:0;;;;;;;;;;;;-1:-1:-1;;;8158:50:0;;;;;;;;;;;;;;14179:612;14303:13;14349:1;14337:9;:13;14329:70;;;;-1:-1:-1;;;14329:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14430:1;14418:9;:13;:31;;;;;14448:1;14435:10;:14;14418:31;14410:84;;;;-1:-1:-1;;;14410:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14505:14;14522:34;14551:4;14522:24;:9;14536;14522:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;14505:51;;14567:14;14608:7;-1:-1:-1;;;;;14590:34:0;;14625:4;14590:40;;;;;;;;;;;;;-1:-1:-1;;;;;14590:40:0;-1:-1:-1;;;;;14590:40:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14590:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14590:40:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;14590:40:0;14585:4;:45;;-1:-1:-1;14656:16:0;14675:40;14585:45;14675:25;:10;14690:9;14675:25;:14;:25;:::i;:40::-;14656:59;;14751:32;14781:1;14764:11;14752:9;:23;;;;;;;14751:32;:29;:32;:::i;:::-;14740:43;14179:612;-1:-1:-1;;;;;;;;;14179:612:0:o;12955:321::-;13037:12;13080:1;13070:7;:11;13062:61;;;;-1:-1:-1;;;13062:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13153:1;13142:8;:12;:28;;;;;13169:1;13158:8;:12;13142:28;13134:81;;;;-1:-1:-1;;;13134:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13260:8;13236:21;:7;13248:8;13236:21;:11;:21;:::i;:::-;:32;;;;;;;12955:321;-1:-1:-1;;;;12955:321:0:o;11474:349::-;11549:14;11565;11610:6;-1:-1:-1;;;;;11600:16:0;:6;-1:-1:-1;;;;;11600:16:0;;;11592:66;;;;-1:-1:-1;;;11592:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11697:6;-1:-1:-1;;;;;11688:15:0;:6;-1:-1:-1;;;;;11688:15:0;;:53;;11726:6;11734;11688:53;;;11707:6;11715;11688:53;11669:72;;-1:-1:-1;11669:72:0;-1:-1:-1;;;;;;11760:20:0;;11752:63;;;;;-1:-1:-1;;;11752:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11474:349;;;;;:::o;13398:660::-;13522:14;13568:1;13557:8;:12;13549:68;;;;-1:-1:-1;;;13549:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13648:1;13636:9;:13;:31;;;;;13666:1;13653:10;:14;13636:31;13628:84;;;;-1:-1:-1;;;13628:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13725:14;13766:7;-1:-1:-1;;;;;13748:34:0;;13783:4;13748:40;;;;;;;;;;;;;-1:-1:-1;;;;;13748:40:0;-1:-1:-1;;;;;13748:40:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13748:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13748:40:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13748:40:0;13743:4;:45;;-1:-1:-1;13814:20:0;13837:23;:8;13743:45;13837:23;:12;:23;:::i;:::-;13814:46;-1:-1:-1;13886:14:0;13903:31;13814:46;13923:10;13903:31;:19;:31;:::i;:::-;13886:48;-1:-1:-1;13945:16:0;13964:40;13988:15;13964:19;:9;13978:4;13964:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;13945:59;;14039:11;14027:9;:23;;;;;;;13398:660;-1:-1:-1;;;;;;;;;;13398:660:0:o;16742:1390::-;17055:50;;;-1:-1:-1;;;17055:50:0;;-1:-1:-1;;;;;17055:50:0;;;;;;;;;;;;;;;;16960:12;;;;;;17073:7;17055:34;;;;;;:50;;;;;;;;;;;;;;;:34;:50;;;2:2:-1;;;;27:1;24;17:12;2:2;17055:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17055:50:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17055:50:0;-1:-1:-1;;;;;17055:64:0;;17051:150;;;17136:53;;;-1:-1:-1;;;17136:53:0;;-1:-1:-1;;;;;17136:53:0;;;;;;;;;;;;;;;;17154:7;17136:37;;;;;;:53;;;;;;;;;;;;;;;-1:-1:-1;17136:37:0;:53;;;2:2:-1;;;;27:1;24;17:12;2:2;17136:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17136:53:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;17051:150:0;17212:13;17227;17244:53;17273:7;17282:6;17290;17244:28;:53::i;:::-;17211:86;;;;17312:8;17324:1;17312:13;:30;;;;-1:-1:-1;17329:13:0;;17312:30;17308:817;;;17381:14;;-1:-1:-1;17397:14:0;;-1:-1:-1;17308:817:0;;;17445:19;17467:58;17490:14;17506:8;17516;17467:22;:58::i;:::-;17445:80;;17562:14;17544;:32;17540:574;;17623:10;17605:14;:28;;17597:79;;;;-1:-1:-1;;;17597:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17717:14;;-1:-1:-1;17733:14:0;-1:-1:-1;17733:14:0;17540:574;;;17789:19;17811:58;17834:14;17850:8;17860;17811:22;:58::i;:::-;17789:80;;17913:14;17895;:32;;17888:40;;;;17973:10;17955:14;:28;;17947:79;;;;-1:-1:-1;;;17947:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18067:14;-1:-1:-1;18083:14:0;;-1:-1:-1;17540:574:0;17308:817;;16742:1390;;;;;;;;;;;:::o;12451:391::-;12544:13;12559;12586:14;12605:26;12616:6;12624;12605:10;:26::i;:::-;12585:46;;;12643:13;12658;12691:32;12699:7;12708:6;12716;12691:7;:32::i;:::-;-1:-1:-1;;;;;12676:60:0;;:62;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12676:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12676:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12676:62:0;;;;;;;-1:-1:-1;;;;;12642:96:0;;;;-1:-1:-1;12642:96:0;;-1:-1:-1;;;;;;12772:16:0;;;;;;;:62;;12815:8;12825;12772:62;;;12792:8;12802;12772:62;12749:85;;;;-1:-1:-1;12451:391:0;-1:-1:-1;;;;;;;12451:391:0:o;8224:142::-;8276:6;8303;;;:30;;-1:-1:-1;;8318:5:0;;;8332:1;8327;8318:5;8327:1;8313:15;;;;;:20;8303:30;8295:63;;;;;-1:-1:-1;;;8295:63:0;;;;;;;;;;;;-1:-1:-1;;;8295:63:0;;;;;;;;;;;;;;7951:128;8035:5;;;8030:16;;;;8022:49;;;;;-1:-1:-1;;;8022:49:0;;;;;;;;;;;;-1:-1:-1;;;8022:49:0;;;;;;;;;;;;;
Swarm Source
ipfs://07cba36d6f4aa5ad4de76cbd658707a9276069f363bfecc82fbf4349da440937
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 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.