Contract
0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf28
3
Contract Overview
Balance:
0 CRO
CRO Value:
$0.00
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
PhenixV2Router
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2023-01-29 */ pragma solidity =0.6.6; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint256); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function setPairTradeFee( address _pair, uint256 _tradeFee, uint256 _tradeFeeDenominator ) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function tradeFee() external view returns (uint256); function transferFrom( address from, address to, uint256 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 (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to); event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function setTradeFee(uint256 _tradeFee, uint256 _tradeFeeDenominator) 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, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut, uint256 tradeFee ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut, uint256 tradeFee ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface IERC20 { event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); } interface IWETH { function deposit() external payable; function transfer(address to, uint256 value) external returns (bool); function withdraw(uint256) external; } contract PhenixV2Router is IUniswapV2Router02 { using SafeMath for uint256; address public immutable override factory; address public immutable override WETH; modifier ensure(uint256 deadline) { require(deadline >= block.timestamp, 'PhenixV2Router: EXPIRED'); _; } constructor(address _factory, address _WETH) public { factory = _factory; WETH = _WETH; } receive() external payable { assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract } // **** ADD LIQUIDITY **** function _addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin ) internal virtual returns (uint256 amountA, uint256 amountB) { // create the pair if it doesn't exist yet if (IUniswapV2Factory(factory).getPair(tokenA, tokenB) == address(0)) { IUniswapV2Factory(factory).createPair(tokenA, tokenB); } (uint256 reserveA, uint256 reserveB) = UniswapV2Library.getReserves(factory, tokenA, tokenB); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint256 amountBOptimal = UniswapV2Library.quote(amountADesired, reserveA, reserveB); if (amountBOptimal <= amountBDesired) { require(amountBOptimal >= amountBMin, 'PhenixV2Router: INSUFFICIENT_B_AMOUNT'); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint256 amountAOptimal = UniswapV2Library.quote(amountBDesired, reserveB, reserveA); assert(amountAOptimal <= amountADesired); require(amountAOptimal >= amountAMin, 'PhenixV2Router: INSUFFICIENT_A_AMOUNT'); (amountA, amountB) = (amountAOptimal, amountBDesired); } } } function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external virtual override ensure(deadline) returns ( uint256 amountA, uint256 amountB, uint256 liquidity ) { (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin); address pair = 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, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable virtual override ensure(deadline) returns ( uint256 amountToken, uint256 amountETH, uint256 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, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) public virtual override ensure(deadline) returns (uint256 amountA, uint256 amountB) { address pair = UniswapV2Library.pairFor(factory, tokenA, tokenB); IUniswapV2Pair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (uint256 amount0, uint256 amount1) = IUniswapV2Pair(pair).burn(to); (address token0, ) = UniswapV2Library.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, 'PhenixV2Router: INSUFFICIENT_A_AMOUNT'); require(amountB >= amountBMin, 'PhenixV2Router: INSUFFICIENT_B_AMOUNT'); } function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) public virtual override ensure(deadline) returns (uint256 amountToken, uint256 amountETH) { (amountToken, amountETH) = removeLiquidity(token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline); TransferHelper.safeTransfer(token, to, amountToken); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint256 amountA, uint256 amountB) { address pair = UniswapV2Library.pairFor(factory, tokenA, tokenB); uint256 value = approveMax ? uint256(-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, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint256 amountToken, uint256 amountETH) { address pair = UniswapV2Library.pairFor(factory, token, WETH); uint256 value = approveMax ? uint256(-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, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) public virtual override ensure(deadline) returns (uint256 amountETH) { (, amountETH) = removeLiquidity(token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline); TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this))); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint256 amountETH) { address pair = UniswapV2Library.pairFor(factory, token, WETH); uint256 value = approveMax ? uint256(-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( uint256[] memory amounts, address[] memory path, address _to ) internal virtual { for (uint256 i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0, ) = UniswapV2Library.sortTokens(input, output); uint256 amountOut = amounts[i + 1]; (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOut) : (amountOut, uint256(0)); address to = i < path.length - 2 ? UniswapV2Library.pairFor(factory, output, path[i + 2]) : _to; IUniswapV2Pair(UniswapV2Library.pairFor(factory, input, output)).swap(amount0Out, amount1Out, to, new bytes(0)); } } function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'PhenixV2Router: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom(path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]); _swap(amounts, path, to); } function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'PhenixV2Router: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom(path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]); _swap(amounts, path, to); } function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[0] == WETH, 'PhenixV2Router: INVALID_PATH'); amounts = UniswapV2Library.getAmountsOut(factory, msg.value, path); require(amounts[amounts.length - 1] >= amountOutMin, 'PhenixV2Router: 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( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[path.length - 1] == WETH, 'PhenixV2Router: INVALID_PATH'); amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'PhenixV2Router: 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( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[path.length - 1] == WETH, 'PhenixV2Router: INVALID_PATH'); amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'PhenixV2Router: 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( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[0] == WETH, 'PhenixV2Router: INVALID_PATH'); amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path); require(amounts[0] <= msg.value, 'PhenixV2Router: 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 (uint256 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)); uint256 amountInput; uint256 amountOutput; { // scope to avoid stack too deep errors (uint256 reserve0, uint256 reserve1, ) = pair.getReserves(); (uint256 reserveInput, uint256 reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0); amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput); amountOutput = UniswapV2Library.getAmountOut(amountInput, reserveInput, reserveOutput, pair.tradeFee()); } (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOutput) : (amountOutput, uint256(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( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) { TransferHelper.safeTransferFrom(path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn); uint256 balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'PhenixV2Router: INSUFFICIENT_OUTPUT_AMOUNT' ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable virtual override ensure(deadline) { require(path[0] == WETH, 'PhenixV2Router: INVALID_PATH'); uint256 amountIn = msg.value; IWETH(WETH).deposit{ value: amountIn }(); assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn)); uint256 balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'PhenixV2Router: INSUFFICIENT_OUTPUT_AMOUNT' ); } function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) { require(path[path.length - 1] == WETH, 'PhenixV2Router: INVALID_PATH'); TransferHelper.safeTransferFrom(path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn); _swapSupportingFeeOnTransferTokens(path, address(this)); uint256 amountOut = IERC20(WETH).balanceOf(address(this)); require(amountOut >= amountOutMin, 'PhenixV2Router: INSUFFICIENT_OUTPUT_AMOUNT'); IWETH(WETH).withdraw(amountOut); TransferHelper.safeTransferETH(to, amountOut); } // **** LIBRARY FUNCTIONS **** function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) public pure virtual override returns (uint256 amountB) { return UniswapV2Library.quote(amountA, reserveA, reserveB); } function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut, uint256 tradeFee ) public pure virtual override returns (uint256 amountOut) { return UniswapV2Library.getAmountOut(amountIn, reserveIn, reserveOut, tradeFee); } function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut, uint256 tradeFee ) public pure virtual override returns (uint256 amountIn) { return UniswapV2Library.getAmountIn(amountOut, reserveIn, reserveOut, tradeFee); } function getAmountsOut(uint256 amountIn, address[] memory path) public view virtual override returns (uint256[] memory amounts) { return UniswapV2Library.getAmountsOut(factory, amountIn, path); } function getAmountsIn(uint256 amountOut, address[] memory path) public view virtual override returns (uint256[] memory amounts) { return UniswapV2Library.getAmountsIn(factory, amountOut, path); } } // a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math) library SafeMath { function add(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x + y) >= x, 'ds-math-add-overflow'); } function sub(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x - y) <= x, 'ds-math-sub-underflow'); } function mul(uint256 x, uint256 y) internal pure returns (uint256 z) { require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow'); } } library UniswapV2Library { using SafeMath for uint256; // returns sorted token addresses, used to handle return values from pairs sorted in this order function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { require(tokenA != tokenB, 'PhenixV2Library: IDENTICAL_ADDRESSES'); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'PhenixV2Library: ZERO_ADDRESS'); } // calculates the CREATE2 address for a pair without making any external calls function pairFor( address factory, address tokenA, address tokenB ) internal pure returns (address pair) { (address token0, address token1) = sortTokens(tokenA, tokenB); pair = address( uint256( keccak256( abi.encodePacked( hex'ff', factory, keccak256(abi.encodePacked(token0, token1)), hex'3e96e661fa6aba8ad6e3f53f8dbd07e407ae9afb2751ba93c642efb05a02ff52' // init code hash ) ) ) ); } // fetches and sorts the reserves for a pair function getReserves( address factory, address tokenA, address tokenB ) internal view returns (uint256 reserveA, uint256 reserveB) { (address token0, ) = sortTokens(tokenA, tokenB); (uint256 reserve0, uint256 reserve1, ) = 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( uint256 amountA, uint256 reserveA, uint256 reserveB ) internal pure returns (uint256 amountB) { require(amountA > 0, 'PhenixV2Library: INSUFFICIENT_AMOUNT'); require(reserveA > 0 && reserveB > 0, 'PhenixV2Library: INSUFFICIENT_LIQUIDITY'); amountB = amountA.mul(reserveB) / reserveA; } function getTradeFee( address factory, address tokenA, address tokenB ) internal view returns (uint256 tradeFee) { tradeFee = IUniswapV2Pair(pairFor(factory, tokenA, tokenB)).tradeFee(); } // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut, uint256 tradeFee ) internal pure returns (uint256 amountOut) { require(amountIn > 0, 'PhenixV2Library: INSUFFICIENT_INPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'PhenixV2Library: INSUFFICIENT_LIQUIDITY'); uint256 amountInWithFee = amountIn.mul(uint256(100000).sub(tradeFee)); uint256 numerator = amountInWithFee.mul(reserveOut); uint256 denominator = reserveIn.mul(100000).add(amountInWithFee); amountOut = numerator / denominator; } // given an output amount of an asset and pair reserves, returns a required input amount of the other asset function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut, uint256 tradeFee ) internal pure returns (uint256 amountIn) { require(amountOut > 0, 'PhenixV2Library: INSUFFICIENT_OUTPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'PhenixV2Library: INSUFFICIENT_LIQUIDITY'); uint256 numerator = reserveIn.mul(amountOut).mul(100000); uint256 denominator = reserveOut.sub(amountOut).mul(uint256(100000).sub(tradeFee)); amountIn = (numerator / denominator).add(1); } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut( address factory, uint256 amountIn, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, 'PhenixV2Library: INVALID_PATH'); amounts = new uint256[](path.length); amounts[0] = amountIn; for (uint256 i; i < path.length - 1; i++) { (uint256 reserveIn, uint256 reserveOut) = getReserves(factory, path[i], path[i + 1]); amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut, getTradeFee(factory, path[i], path[i + 1])); } } // performs chained getAmountIn calculations on any number of pairs function getAmountsIn( address factory, uint256 amountOut, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, 'PhenixV2Library: INVALID_PATH'); amounts = new uint256[](path.length); amounts[amounts.length - 1] = amountOut; for (uint256 i = path.length - 1; i > 0; i--) { (uint256 reserveIn, uint256 reserveOut) = getReserves(factory, path[i - 1], path[i]); amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut, getTradeFee(factory, path[i - 1], path[i])); } } } // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeApprove( address token, address to, 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: 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: 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: TRANSFER_FROM_FAILED'); } function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{ value: value }(new bytes(0)); require(success, 'TransferHelper: ETH_TRANSFER_FAILED'); } }
[{"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":"uint256","name":"tradeFee","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"},{"internalType":"uint256","name":"tradeFee","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"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
60c060405234801561001057600080fd5b50604051620048d4380380620048d48339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61474f620001856000398061015f5280610cf05280610d2b5280610e0d528061102b52806113b5528061154052806119075280611a015280611ab75280611b855280611ccb5280611d535280611f8b528061200e52806120bd5280612189528061221e528061229252806127905280612a035280612a595280612a8d5280612b015280612ca15280612de45280612e6c525080610e9b5280610f7252806110f1528061112a52806112655280611443528061151e528061168e5280611c185280611d855280611edb52806122c4528061251d5280612715528061273e528061276e52806128db5280612a375280612d345280612e9e528061368952806136cc5280613bdb5280613dbf52806140ff52806141ad528061422d525061474f6000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a1c578063d06ca61f14610a31578063ded9382a14610ae6578063e8e3370014610b59578063f305d71914610bd9578063fb3bdb4114610c1f57610188565b80638803dbee146107eb578063ad5c464814610881578063ad615dec146108b2578063af2979eb146108e8578063b6f9de951461093b578063baa2abde146109bf57610188565b806352707d8c1161010857806352707d8c1461053e578063571fd0121461058c5780635b0d5984146105c85780635c11d7951461063b578063791ac947146106d15780637ff36ab51461076757610188565b806302751cec1461018d57806318cbafe5146101f95780631f00ca74146102df5780632195995c1461039457806338ed1739146104125780634a25d94a146104a857610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610ca3565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061028f600480360360a081101561021c57600080fd5b813591602081013591810190606081016040820135600160201b81111561024257600080fd5b82018360208201111561025457600080fd5b803590602001918460208302840111600160201b8311171561027557600080fd5b91935091506001600160a01b038135169060200135610dbd565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102cb5781810151838201526020016102b3565b505050509050019250505060405180910390f35b3480156102eb57600080fd5b5061028f6004803603604081101561030257600080fd5b81359190810190604081016020820135600160201b81111561032357600080fd5b82018360208201111561033557600080fd5b803590602001918460208302840111600160201b8311171561035657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110ea945050505050565b3480156103a057600080fd5b506101e060048036036101608110156103b857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611120565b34801561041e57600080fd5b5061028f600480360360a081101561043557600080fd5b813591602081013591810190606081016040820135600160201b81111561045b57600080fd5b82018360208201111561046d57600080fd5b803590602001918460208302840111600160201b8311171561048e57600080fd5b91935091506001600160a01b03813516906020013561121a565b3480156104b457600080fd5b5061028f600480360360a08110156104cb57600080fd5b813591602081013591810190606081016040820135600160201b8111156104f157600080fd5b82018360208201111561050357600080fd5b803590602001918460208302840111600160201b8311171561052457600080fd5b91935091506001600160a01b038135169060200135611365565b34801561054a57600080fd5b5061057a6004803603608081101561056157600080fd5b50803590602081013590604081013590606001356114f1565b60408051918252519081900360200190f35b34801561059857600080fd5b5061057a600480360360808110156105af57600080fd5b5080359060208101359060408101359060600135611508565b3480156105d457600080fd5b5061057a60048036036101408110156105ec57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611516565b34801561064757600080fd5b50610186600480360360a081101561065e57600080fd5b813591602081013591810190606081016040820135600160201b81111561068457600080fd5b82018360208201111561069657600080fd5b803590602001918460208302840111600160201b831117156106b757600080fd5b91935091506001600160a01b038135169060200135611624565b3480156106dd57600080fd5b50610186600480360360a08110156106f457600080fd5b813591602081013591810190606081016040820135600160201b81111561071a57600080fd5b82018360208201111561072c57600080fd5b803590602001918460208302840111600160201b8311171561074d57600080fd5b91935091506001600160a01b0381351690602001356118b9565b61028f6004803603608081101561077d57600080fd5b81359190810190604081016020820135600160201b81111561079e57600080fd5b8201836020820111156107b057600080fd5b803590602001918460208302840111600160201b831117156107d157600080fd5b91935091506001600160a01b038135169060200135611b3d565b3480156107f757600080fd5b5061028f600480360360a081101561080e57600080fd5b813591602081013591810190606081016040820135600160201b81111561083457600080fd5b82018360208201111561084657600080fd5b803590602001918460208302840111600160201b8311171561086757600080fd5b91935091506001600160a01b038135169060200135611e90565b34801561088d57600080fd5b50610896611f89565b604080516001600160a01b039092168252519081900360200190f35b3480156108be57600080fd5b5061057a600480360360608110156108d557600080fd5b5080359060208101359060400135611fad565b3480156108f457600080fd5b5061057a600480360360c081101561090b57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fc2565b6101866004803603608081101561095157600080fd5b81359190810190604081016020820135600160201b81111561097257600080fd5b82018360208201111561098457600080fd5b803590602001918460208302840111600160201b831117156109a557600080fd5b91935091506001600160a01b038135169060200135612143565b3480156109cb57600080fd5b506101e0600480360360e08110156109e257600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124cf565b348015610a2857600080fd5b50610896612713565b348015610a3d57600080fd5b5061028f60048036036040811015610a5457600080fd5b81359190810190604081016020820135600160201b811115610a7557600080fd5b820183602082011115610a8757600080fd5b803590602001918460208302840111600160201b83111715610aa857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612737945050505050565b348015610af257600080fd5b506101e06004803603610140811015610b0a57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612764565b348015610b6557600080fd5b50610bbb6004803603610100811015610b7d57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612878565b60408051938452602084019290925282820152519081900360600190f35b610bbb600480360360c0811015610bef57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356129b4565b61028f60048036036080811015610c3557600080fd5b81359190810190604081016020820135600160201b811115610c5657600080fd5b820183602082011115610c6857600080fd5b803590602001918460208302840111600160201b83111715610c8957600080fd5b91935091506001600160a01b038135169060200135612c59565b6000808242811015610cea576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b610d19897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124cf565b9093509150610d29898685612fdb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8f57600080fd5b505af1158015610da3573d6000803e3d6000fd5b50505050610db18583613145565b50965096945050505050565b60608142811015610e03576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e3d57fe5b905060200201356001600160a01b03166001600160a01b031614610e96576040805162461bcd60e51b815260206004820152601c602482015260008051602061455f833981519152604482015290519081900360640190fd5b610ef47f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061323d92505050565b91508682600184510381518110610f0757fe5b60200260200101511015610f4c5760405162461bcd60e51b815260040180806020018281038252602a815260200180614535602a913960400191505060405180910390fd5b610fea86866000818110610f5c57fe5b905060200201356001600160a01b031633610fd07f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610f9e57fe5b905060200201356001600160a01b03168b8b6001818110610fbb57fe5b905060200201356001600160a01b03166133bd565b85600081518110610fdd57fe5b602002602001015161347d565b611029828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506135da915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061106857fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110a657600080fd5b505af11580156110ba573d6000803e3d6000fd5b505050506110df84836001855103815181106110d257fe5b6020026020010151613145565b509695505050505050565b60606111177f00000000000000000000000000000000000000000000000000000000000000008484613820565b90505b92915050565b60008060006111507f00000000000000000000000000000000000000000000000000000000000000008f8f6133bd565b905060008761115f578c611163565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111d957600080fd5b505af11580156111ed573d6000803e3d6000fd5b505050506112008f8f8f8f8f8f8f6124cf565b809450819550505050509b509b9950505050505050505050565b60608142811015611260576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b6112be7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061323d92505050565b915086826001845103815181106112d157fe5b602002602001015110156113165760405162461bcd60e51b815260040180806020018281038252602a815260200180614535602a913960400191505060405180910390fd5b61132686866000818110610f5c57fe5b6110df828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506135da915050565b606081428110156113ab576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113e557fe5b905060200201356001600160a01b03166001600160a01b03161461143e576040805162461bcd60e51b815260206004820152601c602482015260008051602061455f833981519152604482015290519081900360640190fd5b61149c7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061382092505050565b915086826000815181106114ac57fe5b60200260200101511115610f4c5760405162461bcd60e51b815260040180806020018281038252602681526020018061457f6026913960400191505060405180910390fd5b60006114ff8585858561397f565b95945050505050565b60006114ff85858585613a82565b6000806115647f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006133bd565b9050600086611573578b611577565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115ed57600080fd5b505af1158015611601573d6000803e3d6000fd5b505050506116138d8d8d8d8d8d611fc2565b9d9c50505050505050505050505050565b8042811015611668576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b6116dd8585600081811061167857fe5b905060200201356001600160a01b0316336116d77f0000000000000000000000000000000000000000000000000000000000000000898960008181106116ba57fe5b905060200201356001600160a01b03168a8a6001818110610fbb57fe5b8a61347d565b6000858560001981018181106116ef57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561175457600080fd5b505afa158015611768573d6000803e3d6000fd5b505050506040513d602081101561177e57600080fd5b505160408051602088810282810182019093528882529293506117c0929091899189918291850190849080828437600092019190915250889250613b84915050565b8661187282888860001981018181106117d557fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561183a57600080fd5b505afa15801561184e573d6000803e3d6000fd5b505050506040513d602081101561186457600080fd5b50519063ffffffff613ef416565b10156118af5760405162461bcd60e51b815260040180806020018281038252602a815260200180614535602a913960400191505060405180910390fd5b5050505050505050565b80428110156118fd576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061193757fe5b905060200201356001600160a01b03166001600160a01b031614611990576040805162461bcd60e51b815260206004820152601c602482015260008051602061455f833981519152604482015290519081900360640190fd5b6119a08585600081811061167857fe5b6119de858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613b84915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a4857600080fd5b505afa158015611a5c573d6000803e3d6000fd5b505050506040513d6020811015611a7257600080fd5b5051905086811015611ab55760405162461bcd60e51b815260040180806020018281038252602a815260200180614535602a913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b1b57600080fd5b505af1158015611b2f573d6000803e3d6000fd5b505050506118af8482613145565b60608142811015611b83576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611bba57fe5b905060200201356001600160a01b03166001600160a01b031614611c13576040805162461bcd60e51b815260206004820152601c602482015260008051602061455f833981519152604482015290519081900360640190fd5b611c717f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061323d92505050565b91508682600184510381518110611c8457fe5b60200260200101511015611cc95760405162461bcd60e51b815260040180806020018281038252602a815260200180614535602a913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611d0557fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d3857600080fd5b505af1158015611d4c573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611db17f0000000000000000000000000000000000000000000000000000000000000000898960008181106116ba57fe5b84600081518110611dbe57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611e1557600080fd5b505af1158015611e29573d6000803e3d6000fd5b505050506040513d6020811015611e3f57600080fd5b5051611e4757fe5b611e86828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506135da915050565b5095945050505050565b60608142811015611ed6576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b611f347f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061382092505050565b91508682600081518110611f4457fe5b602002602001015111156113165760405162461bcd60e51b815260040180806020018281038252602681526020018061457f6026913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000611fba848484613f44565b949350505050565b60008142811015612008576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b612037887f000000000000000000000000000000000000000000000000000000000000000089898930896124cf565b604080516370a0823160e01b815230600482015290519194506120bb92508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561208a57600080fd5b505afa15801561209e573d6000803e3d6000fd5b505050506040513d60208110156120b457600080fd5b5051612fdb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561212157600080fd5b505af1158015612135573d6000803e3d6000fd5b505050506110df8483613145565b8042811015612187576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121be57fe5b905060200201356001600160a01b03166001600160a01b031614612217576040805162461bcd60e51b815260206004820152601c602482015260008051602061455f833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561227757600080fd5b505af115801561228b573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122f07f0000000000000000000000000000000000000000000000000000000000000000898960008181106116ba57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561234057600080fd5b505af1158015612354573d6000803e3d6000fd5b505050506040513d602081101561236a57600080fd5b505161237257fe5b60008686600019810181811061238457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123e957600080fd5b505afa1580156123fd573d6000803e3d6000fd5b505050506040513d602081101561241357600080fd5b505160408051602089810282810182019093528982529293506124559290918a918a918291850190849080828437600092019190915250899250613b84915050565b87611872828989600019810181811061246a57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561183a57600080fd5b6000808242811015612516576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b60006125437f00000000000000000000000000000000000000000000000000000000000000008c8c6133bd565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561259e57600080fd5b505af11580156125b2573d6000803e3d6000fd5b505050506040513d60208110156125c857600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561261557600080fd5b505af1158015612629573d6000803e3d6000fd5b505050506040513d604081101561263f57600080fd5b508051602090910151909250905060006126598e8e613ff0565b509050806001600160a01b03168e6001600160a01b03161461267c57818361267f565b82825b90975095508a8710156126c35760405162461bcd60e51b81526004018080602001828103825260258152602001806146d16025913960400191505060405180910390fd5b898610156127025760405162461bcd60e51b81526004018080602001828103825260258152602001806146686025913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111177f0000000000000000000000000000000000000000000000000000000000000000848461323d565b60008060006127b47f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006133bd565b90506000876127c3578c6127c7565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561283d57600080fd5b505af1158015612851573d6000803e3d6000fd5b505050506128638e8e8e8e8e8e610ca3565b909f909e509c50505050505050505050505050565b600080600083428110156128c1576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b6128cf8c8c8c8c8c8c6140ce565b909450925060006129017f00000000000000000000000000000000000000000000000000000000000000008e8e6133bd565b905061290f8d33838861347d565b61291b8c33838761347d565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561297357600080fd5b505af1158015612987573d6000803e3d6000fd5b505050506040513d602081101561299d57600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129fd576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b612a2b8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c6140ce565b90945092506000612a7d7f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006133bd565b9050612a8b8b33838861347d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612ae657600080fd5b505af1158015612afa573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b7f57600080fd5b505af1158015612b93573d6000803e3d6000fd5b505050506040513d6020811015612ba957600080fd5b5051612bb157fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612c0957600080fd5b505af1158015612c1d573d6000803e3d6000fd5b505050506040513d6020811015612c3357600080fd5b5051925034841015612c4b57612c4b33853403613145565b505096509650969350505050565b60608142811015612c9f576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cd657fe5b905060200201356001600160a01b03166001600160a01b031614612d2f576040805162461bcd60e51b815260206004820152601c602482015260008051602061455f833981519152604482015290519081900360640190fd5b612d8d7f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061382092505050565b91503482600081518110612d9d57fe5b60200260200101511115612de25760405162461bcd60e51b815260040180806020018281038252602681526020018061457f6026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e1e57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e5157600080fd5b505af1158015612e65573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eca7f0000000000000000000000000000000000000000000000000000000000000000898960008181106116ba57fe5b84600081518110612ed757fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f2e57600080fd5b505af1158015612f42573d6000803e3d6000fd5b505050506040513d6020811015612f5857600080fd5b5051612f6057fe5b612f9f828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506135da915050565b81600081518110612fac57fe5b6020026020010151341115611e8657611e863383600081518110612fcc57fe5b60200260200101513403613145565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130585780518252601f199092019160209182019101613039565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130ba576040519150601f19603f3d011682016040523d82523d6000602084013e6130bf565b606091505b50915091508180156130ed5750805115806130ed57508080602001905160208110156130ea57600080fd5b50515b61313e576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106131915780518252601f199092019160209182019101613172565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131f3576040519150601f19603f3d011682016040523d82523d6000602084013e6131f8565b606091505b50509050806132385760405162461bcd60e51b81526004018080602001828103825260238152602001806146456023913960400191505060405180910390fd5b505050565b6060600282511015613296576040805162461bcd60e51b815260206004820152601d60248201527f5068656e697856324c6962726172793a20494e56414c49445f50415448000000604482015290519081900360640190fd5b815167ffffffffffffffff811180156132ae57600080fd5b506040519080825280602002602001820160405280156132d8578160200160208202803683370190505b50905082816000815181106132e957fe5b60200260200101818152505060005b60018351038110156133b55760008061333b8786858151811061331757fe5b602002602001015187866001018151811061332e57fe5b6020026020010151614342565b9150915061339184848151811061334e57fe5b6020026020010151838361338c8b8a898151811061336857fe5b60200260200101518b8a6001018151811061337f57fe5b6020026020010151614409565b61397f565b8484600101815181106133a057fe5b602090810291909101015250506001016132f8565b509392505050565b60008060006133cc8585613ff0565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f3e96e661fa6aba8ad6e3f53f8dbd07e407ae9afb2751ba93c642efb05a02ff52609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135025780518252601f1990920191602091820191016134e3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613564576040519150601f19603f3d011682016040523d82523d6000602084013e613569565b606091505b5091509150818015613597575080511580613597575080806020019051602081101561359457600080fd5b50515b6135d25760405162461bcd60e51b815260040180806020018281038252602481526020018061468d6024913960400191505060405180910390fd5b505050505050565b60005b600183510381101561381a576000808483815181106135f857fe5b602002602001015185846001018151811061360f57fe5b60200260200101519150915060006136278383613ff0565b509050600087856001018151811061363b57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146136695782600061366d565b6000835b91509150600060028a5103881061368457886136c5565b6136c57f0000000000000000000000000000000000000000000000000000000000000000878c8b600201815181106136b857fe5b60200260200101516133bd565b90506136f27f000000000000000000000000000000000000000000000000000000000000000088886133bd565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f19166020018201604052801561372f576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156137a0578181015183820152602001613788565b50505050905090810190601f1680156137cd5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156137ef57600080fd5b505af1158015613803573d6000803e3d6000fd5b5050600190990198506135dd975050505050505050565b50505050565b6060600282511015613879576040805162461bcd60e51b815260206004820152601d60248201527f5068656e697856324c6962726172793a20494e56414c49445f50415448000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561389157600080fd5b506040519080825280602002602001820160405280156138bb578160200160208202803683370190505b50905082816001835103815181106138cf57fe5b60209081029190910101528151600019015b80156133b557600080613911878660018603815181106138fd57fe5b602002602001015187868151811061332e57fe5b9150915061395a84848151811061392457fe5b602002602001015183836139558b8a60018a038151811061394157fe5b60200260200101518b8a8151811061337f57fe5b613a82565b84600185038151811061396957fe5b60209081029190910101525050600019016138e1565b60008085116139bf5760405162461bcd60e51b815260040180806020018281038252602a81526020018061461b602a913960400191505060405180910390fd5b6000841180156139cf5750600083115b613a0a5760405162461bcd60e51b81526004018080602001828103825260278152602001806145f46027913960400191505060405180910390fd5b6000613a2f613a22620186a08563ffffffff613ef416565b879063ffffffff61448216565b90506000613a43828663ffffffff61448216565b90506000613a6a83613a5e89620186a063ffffffff61448216565b9063ffffffff6144e516565b9050808281613a7557fe5b0498975050505050505050565b6000808511613ac25760405162461bcd60e51b815260040180806020018281038252602b8152602001806145c9602b913960400191505060405180910390fd5b600084118015613ad25750600083115b613b0d5760405162461bcd60e51b81526004018080602001828103825260278152602001806145f46027913960400191505060405180910390fd5b6000613b32620186a0613b26878963ffffffff61448216565b9063ffffffff61448216565b90506000613b5c613b4c620186a08663ffffffff613ef416565b613b26878a63ffffffff613ef416565b9050613b796001828481613b6c57fe5b049063ffffffff6144e516565b979650505050505050565b60005b600183510381101561323857600080848381518110613ba257fe5b6020026020010151858460010181518110613bb957fe5b6020026020010151915091506000613bd18383613ff0565b5090506000613c017f000000000000000000000000000000000000000000000000000000000000000085856133bd565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613c4257600080fd5b505afa158015613c56573d6000803e3d6000fd5b505050506040513d6060811015613c6c57600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613ca2578284613ca5565b83835b91509150613d03828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561183a57600080fd5b9550613d758683838a6001600160a01b03166324bcdfbd6040518163ffffffff1660e01b815260040160206040518083038186803b158015613d4457600080fd5b505afa158015613d58573d6000803e3d6000fd5b505050506040513d6020811015613d6e57600080fd5b505161397f565b945050505050600080856001600160a01b0316886001600160a01b031614613d9f57826000613da3565b6000835b91509150600060028c51038a10613dba578a613dee565b613dee7f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106136b857fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613e78578181015183820152602001613e60565b50505050905090810190601f168015613ea55780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613ec757600080fd5b505af1158015613edb573d6000803e3d6000fd5b50506001909b019a50613b879950505050505050505050565b8082038281111561111a576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613f845760405162461bcd60e51b81526004018080602001828103825260248152602001806146f66024913960400191505060405180910390fd5b600083118015613f945750600082115b613fcf5760405162461bcd60e51b81526004018080602001828103825260278152602001806145f46027913960400191505060405180910390fd5b82613fe0858463ffffffff61448216565b81613fe757fe5b04949350505050565b600080826001600160a01b0316846001600160a01b031614156140445760405162461bcd60e51b81526004018080602001828103825260248152602001806145a56024913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610614064578284614067565b83835b90925090506001600160a01b0382166140c7576040805162461bcd60e51b815260206004820152601d60248201527f5068656e697856324c6962726172793a205a45524f5f41444452455353000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561414857600080fd5b505afa15801561415c573d6000803e3d6000fd5b505050506040513d602081101561417257600080fd5b50516001600160a01b0316141561422557604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156141f857600080fd5b505af115801561420c573d6000803e3d6000fd5b505050506040513d602081101561422257600080fd5b50505b6000806142537f00000000000000000000000000000000000000000000000000000000000000008b8b614342565b91509150816000148015614265575080155b1561427557879350869250614335565b6000614282898484613f44565b90508781116142d557858110156142ca5760405162461bcd60e51b81526004018080602001828103825260258152602001806146686025913960400191505060405180910390fd5b889450925082614333565b60006142e2898486613f44565b9050898111156142ee57fe5b8781101561432d5760405162461bcd60e51b81526004018080602001828103825260258152602001806146d16025913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008060006143518585613ff0565b5090506000806143628888886133bd565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561439a57600080fd5b505afa1580156143ae573d6000803e3d6000fd5b505050506040513d60608110156143c457600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143f75780826143fa565b81815b90999098509650505050505050565b60006144168484846133bd565b6001600160a01b03166324bcdfbd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561444e57600080fd5b505afa158015614462573d6000803e3d6000fd5b505050506040513d602081101561447857600080fd5b5051949350505050565b600081158061449d5750508082028282828161449a57fe5b04145b61111a576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b8082018281101561111a576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe5068656e69785632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545068656e69785632526f757465723a20494e56414c49445f50415448000000005068656e69785632526f757465723a204558434553534956455f494e5055545f414d4f554e545068656e697856324c6962726172793a204944454e544943414c5f4144445245535345535068656e697856324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545068656e697856324c6962726172793a20494e53554646494349454e545f4c49515549444954595068656e697856324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45445068656e69785632526f757465723a20494e53554646494349454e545f425f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c45445068656e69785632526f757465723a20455850495245440000000000000000005068656e69785632526f757465723a20494e53554646494349454e545f415f414d4f554e545068656e697856324c6962726172793a20494e53554646494349454e545f414d4f554e54a2646970667358221220dbfa20a349d607fad35170f7676d26929cf45e4c0cae010963f5d5c9de32a5c664736f6c634300060600330000000000000000000000006bae09822c36a9359d563a22fc7d134ef27a5f600000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006bae09822c36a9359d563a22fc7d134ef27a5f600000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23
-----Decoded View---------------
Arg [0] : _factory (address): 0x6bae09822c36a9359d563a22fc7d134ef27a5f60
Arg [1] : _WETH (address): 0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000006bae09822c36a9359d563a22fc7d134ef27a5f60
Arg [1] : 0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23
Deployed ByteCode Sourcemap
10459:18717:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10943:10;-1:-1:-1;;;;;10957:4:0;10943:18;;10936:26;;;;10459:18717;;12:1:-1;9;2:12;15317:589:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15317:589:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;15317:589:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22436:838;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22436:838:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;22436:838:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;22436:838:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;22436:838: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;22436:838:0;;-1:-1:-1;22436:838:0;-1:-1:-1;;;;;;22436:838: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;22436:838:0;;;;;;;;;;;;;;;;;28964:209;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28964:209:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;28964:209:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28964:209:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28964:209: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;28964:209:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;28964:209:0;;-1:-1:-1;28964:209:0;;-1:-1:-1;;;;;28964:209:0:i;15914:728::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15914:728:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;15914:728:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19690:615::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19690:615:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;19690:615:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;19690:615:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;19690:615: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;19690:615:0;;-1:-1:-1;19690:615:0;-1:-1:-1;;;;;;19690:615:0;;;;;;;;:::i;21612:816::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21612:816:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;21612:816:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;21612:816:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;21612:816: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;21612:816:0;;-1:-1:-1;21612:816:0;-1:-1:-1;;;;;;21612:816:0;;;;;;;;:::i;28142:295::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28142:295:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;28142:295:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28445:294;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28445:294:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;28445:294:0;;;;;;;;;;;;;;;;;:::i;18070:742::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18070:742:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18070:742:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25539:701::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25539:701:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25539:701:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25539:701:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25539:701: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;25539:701:0;;-1:-1:-1;25539:701:0;-1:-1:-1;;;;;;25539:701:0;;;;;;;;:::i;27068:788::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27068:788:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27068:788:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27068:788:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27068:788: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;27068:788:0;;-1:-1:-1;27068:788:0;-1:-1:-1;;;;;;27068:788:0;;;;;;;;:::i;20914:690::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;20914:690:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;20914:690:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;20914:690: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;20914:690:0;;-1:-1:-1;20914:690:0;-1:-1:-1;;;;;;20914:690:0;;;;;;;;:::i;20313:593::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20313:593:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;20313:593:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;20313:593:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;20313:593: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;20313:593:0;;-1:-1:-1;20313:593:0;-1:-1:-1;;;;;;20313:593:0;;;;;;;;:::i;10595:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10595:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;10595:38:0;;;;;;;;;;;;;;27900:234;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27900:234:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;27900:234:0;;;;;;;;;;;;:::i;17449:613::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17449:613:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17449:613:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26248:812::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26248:812:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26248:812:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26248:812: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;26248:812:0;;-1:-1:-1;26248:812:0;-1:-1:-1;;;;;;26248:812:0;;;;;;;;:::i;14421:888::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14421:888:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;14421:888:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10547:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10547:41:0;;;:::i;28747:209::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28747:209:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;28747:209:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28747:209:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28747:209: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;28747:209:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;28747:209:0;;-1:-1:-1;28747:209:0;;-1:-1:-1;;;;;28747:209:0:i;16650:720::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16650:720:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;16650:720:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12491:862::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12491:862:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;12491:862:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;13361:1017;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;13361:1017:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23282:803::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;23282:803:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;23282:803:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;23282:803: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;23282:803:0;;-1:-1:-1;23282:803:0;-1:-1:-1;;;;;;23282:803:0;;;;;;;;:::i;15317:589::-;15566:19;15587:17;15547:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;15644:94:::1;15660:5;15667:4;15673:9;15684:14;15700:12;15722:4;15729:8;15644:15;:94::i;:::-;15617:121:::0;;-1:-1:-1;15617:121:0;-1:-1:-1;15749:51:0::1;15777:5:::0;15784:2;15617:121;15749:27:::1;:51::i;:::-;15817:4;-1:-1:-1::0;;;;;15811:20:0::1;;15832:9;15811:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;15811:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;15811:31:0;;;;15853:45;15884:2;15888:9;15853:30;:45::i;:::-;15317:589:::0;;;;;;;;;;:::o;22436:838::-;22666:24;22647:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22736:4:0::1;22711:29;:4:::0;;-1:-1:-1;;22716:15:0;;22711:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;22711:21:0::1;-1:-1:-1::0;;;;;22711:29:0::1;;22703:70;;;::::0;;-1:-1:-1;;;22703:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;22703:70:0;;;;;;;;;;;;;::::1;;22794:55;22825:7;22834:8;22844:4;;22794:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;22794:30:0::1;::::0;-1:-1:-1;;;22794:55:0:i:1;:::-;22784:65;;22899:12;22868:7;22893:1;22876:7;:14;:18;22868:27;;;;;;;;;;;;;;:43;;22860:98;;;;-1:-1:-1::0;;;22860:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22969:117;23001:4;;23006:1;23001:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;23001:7:0::1;23010:10;23022:51;23047:7;23056:4;;23061:1;23056:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;23056:7:0::1;23065:4;;23070:1;23065:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;23065:7:0::1;23022:24;:51::i;:::-;23075:7;23083:1;23075:10;;;;;;;;;;;;;;22969:31;:117::i;:::-;23097:35;23103:7;23112:4;;23097:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;23126:4:0::1;::::0;-1:-1:-1;23097:5:0::1;::::0;-1:-1:-1;;23097:35:0:i:1;:::-;23149:4;-1:-1:-1::0;;;;;23143:20:0::1;;23164:7;23189:1;23172:7;:14;:18;23164:27;;;;;;;;;;;;;;23143:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23143:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23143:49:0;;;;23203:63;23234:2;23238:7;23263:1;23246:7;:14;:18;23238:27;;;;;;;;;;;;;;23203:30;:63::i;:::-;22436:838:::0;;;;;;;;;:::o;28964:209::-;29066:24;29110:55;29140:7;29149:9;29160:4;29110:29;:55::i;:::-;29103:62;;28964:209;;;;;:::o;15914:728::-;16259:15;16276;16304:12;16319:49;16344:7;16353:6;16361;16319:24;:49::i;:::-;16304:64;;16379:13;16395:10;:36;;16422:9;16395:36;;;-1:-1:-1;;16395:36:0;16442:80;;;-1:-1:-1;;;16442:80:0;;16470:10;16442:80;;;;16490:4;16442:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16379:52;;-1:-1:-1;;;;;;16442:27:0;;;;;:80;;;;;-1:-1:-1;;16442:80:0;;;;;;;;-1:-1:-1;16442:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;16442:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16442:80:0;;;;16554;16570:6;16578;16586:9;16597:10;16609;16621:2;16625:8;16554:15;:80::i;:::-;16533:101;;;;;;;;15914:728;;;;;;;;;;;;;;;;:::o;19690:615::-;19923:24;19904:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;19970:55:::1;20001:7;20010:8;20020:4;;19970:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;19970:30:0::1;::::0;-1:-1:-1;;;19970:55:0:i:1;:::-;19960:65;;20075:12;20044:7;20069:1;20052:7;:14;:18;20044:27;;;;;;;;;;;;;;:43;;20036:98;;;;-1:-1:-1::0;;;20036:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20145:117;20177:4;;20182:1;20177:7;;;;;;20145:117;20273:24;20279:7;20288:4;;20273:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;20294:2:0;;-1:-1:-1;20273:5:0::1;::::0;-1:-1:-1;;20273:24:0:i:1;21612:816::-:0;21842:24;21823:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21912:4:0::1;21887:29;:4:::0;;-1:-1:-1;;21892:15:0;;21887:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;21887:21:0::1;-1:-1:-1::0;;;;;21887:29:0::1;;21879:70;;;::::0;;-1:-1:-1;;;21879:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;21879:70:0;;;;;;;;;;;;;::::1;;21970:55;22000:7;22009:9;22020:4;;21970:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;21970:29:0::1;::::0;-1:-1:-1;;;21970:55:0:i:1;:::-;21960:65;;22058:11;22044:7;22052:1;22044:10;;;;;;;;;;;;;;:25;;22036:76;;;;-1:-1:-1::0;;;22036:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28142:295:::0;28320:17;28357:72;28387:8;28397:9;28408:10;28420:8;28357:29;:72::i;:::-;28350:79;28142:295;-1:-1:-1;;;;;28142:295:0:o;28445:294::-;28623:16;28659:72;28688:9;28699;28710:10;28722:8;28659:28;:72::i;18070:742::-;18427:17;18457:12;18472:46;18497:7;18506:5;18513:4;18472:24;:46::i;:::-;18457:61;;18529:13;18545:10;:36;;18572:9;18545:36;;;-1:-1:-1;;18545:36:0;18592:80;;;-1:-1:-1;;;18592:80:0;;18620:10;18592:80;;;;18640:4;18592:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18529:52;;-1:-1:-1;;;;;;18592:27:0;;;;;:80;;;;;-1:-1:-1;;18592:80:0;;;;;;;;-1:-1:-1;18592:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;18592:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18592:80:0;;;;18695:109;18743:5;18750:9;18761:14;18777:12;18791:2;18795:8;18695:47;:109::i;:::-;18683:121;18070:742;-1:-1:-1;;;;;;;;;;;;;18070:742:0:o;25539:701::-;25782:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;25803:115:::1;25835:4;;25840:1;25835:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25835:7:0::1;25844:10;25856:51;25881:7;25890:4;;25895:1;25890:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25890:7:0::1;25899:4;;25904:1;25899:7;;;;;;25856:51;25909:8;25803:31;:115::i;:::-;25929:21;25960:4:::0;;-1:-1:-1;;25965:15:0;;25960:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;25960:21:0::1;-1:-1:-1::0;;;;;25953:39:0::1;;25993:2;25953:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;25953:43:0::1;-1:-1:-1::0;;;;;25953:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;25953:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25953:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;25953:43:0;26007:44:::1;::::0;;25953:43:::1;26007:44:::0;;::::1;::::0;;;;;;;;;;;25953:43;;-1:-1:-1;26007:44:0::1;::::0;;;26042:4;;;;;;26007:44;::::1;::::0;26042:4;;26007:44;26042:4;26007:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26048:2:0;;-1:-1:-1;26007:34:0::1;::::0;-1:-1:-1;;26007:44:0:i:1;:::-;26150:12:::0;26084:62:::1;26132:13:::0;26091:4;;-1:-1:-1;;26096:15:0;;26091:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26091:21:0::1;-1:-1:-1::0;;;;;26084:39:0::1;;26124:2;26084:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;26084:43:0::1;-1:-1:-1::0;;;;;26084:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26084:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26084:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26084:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;26062:170;;;;-1:-1:-1::0;;;26062:170:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10761:1;25539:701:::0;;;;;;;:::o;27068:788::-;27308:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27362:4:0::1;27337:29;:4:::0;;-1:-1:-1;;27342:15:0;;27337:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27337:21:0::1;-1:-1:-1::0;;;;;27337:29:0::1;;27329:70;;;::::0;;-1:-1:-1;;;27329:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27329:70:0;;;;;;;;;;;;;::::1;;27410:115;27442:4;;27447:1;27442:7;;;;;;27410:115;27536:55;27571:4;;27536:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27585:4:0::1;::::0;-1:-1:-1;27536:34:0::1;::::0;-1:-1:-1;;27536:55:0:i:1;:::-;27622:37;::::0;;-1:-1:-1;;;27622:37:0;;27653:4:::1;27622:37;::::0;::::1;::::0;;;27602:17:::1;::::0;-1:-1:-1;;;;;27629:4:0::1;27622:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;27622:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27622:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27622:37:0;;-1:-1:-1;27678:25:0;;::::1;;27670:80;;;;-1:-1:-1::0;;;27670:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27767:4;-1:-1:-1::0;;;;;27761:20:0::1;;27782:9;27761:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27761:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27761:31:0;;;;27803:45;27834:2;27838:9;27803:30;:45::i;20914:690::-:0;21125:24;21106:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;21181:4:::1;-1:-1:-1::0;;;;;21170:15:0::1;:4;;21175:1;21170:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;21170:7:0::1;-1:-1:-1::0;;;;;21170:15:0::1;;21162:56;;;::::0;;-1:-1:-1;;;21162:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;21162:56:0;;;;;;;;;;;;;::::1;;21239;21270:7;21279:9;21290:4;;21239:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;21239:30:0::1;::::0;-1:-1:-1;;;21239:56:0:i:1;:::-;21229:66;;21345:12;21314:7;21339:1;21322:7;:14;:18;21314:27;;;;;;;;;;;;;;:43;;21306:98;;;;-1:-1:-1::0;;;21306:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21421:4;-1:-1:-1::0;;;;;21415:19:0::1;;21443:7;21451:1;21443:10;;;;;;;;;;;;;;21415:42;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21415:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21415:42:0;;;;;21481:4;-1:-1:-1::0;;;;;21475:20:0::1;;21496:51;21521:7;21530:4;;21535:1;21530:7;;;;;;21496:51;21549:7;21557:1;21549:10;;;;;;;;;;;;;;21475:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;21475:85:0::1;-1:-1:-1::0;;;;;21475:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21475:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21475:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21475:85:0;21468:93:::1;;;;21572:24;21578:7;21587:4;;21572:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;21593:2:0;;-1:-1:-1;21572:5:0::1;::::0;-1:-1:-1;;21572:24:0:i:1;:::-;20914:690:::0;;;;;;;;:::o;20313:593::-;20546:24;20527:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;20593:55:::1;20623:7;20632:9;20643:4;;20593:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;20593:29:0::1;::::0;-1:-1:-1;;;20593:55:0:i:1;:::-;20583:65;;20681:11;20667:7;20675:1;20667:10;;;;;;;;;;;;;;:25;;20659:76;;;;-1:-1:-1::0;;;20659:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10595:38:::0;;;:::o;27900:234::-;28040:15;28075:51;28098:7;28107:8;28117;28075:22;:51::i;:::-;28068:58;27900:234;-1:-1:-1;;;;27900:234:0:o;17449:613::-;17727:17;17708:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;17773:94:::1;17789:5;17796:4;17802:9;17813:14;17829:12;17851:4;17858:8;17773:15;:94::i;:::-;17917:38;::::0;;-1:-1:-1;;;17917:38:0;;17949:4:::1;17917:38;::::0;::::1;::::0;;;17757:110;;-1:-1:-1;17878:78:0::1;::::0;-1:-1:-1;17906:5:0;;17913:2;;-1:-1:-1;;;;;17917: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;17917:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;17917:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;17917:38:0;17878:27:::1;:78::i;:::-;17973:4;-1:-1:-1::0;;;;;17967:20:0::1;;17988:9;17967:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;17967:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;17967:31:0;;;;18009:45;18040:2;18044:9;18009:30;:45::i;26248:812::-:0;26469:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;26509:4:::1;-1:-1:-1::0;;;;;26498:15:0::1;:4;;26503:1;26498:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26498:7:0::1;-1:-1:-1::0;;;;;26498:15:0::1;;26490:56;;;::::0;;-1:-1:-1;;;26490:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26490:56:0;;;;;;;;;;;;;::::1;;26557:16;26576:9;26557:28;;26602:4;-1:-1:-1::0;;;;;26596:19:0::1;;26624:8;26596:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26596:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26596:40:0;;;;;26660:4;-1:-1:-1::0;;;;;26654:20:0::1;;26675:51;26700:7;26709:4;;26714:1;26709:7;;;;;;26675:51;26728:8;26654:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;26654:83:0::1;-1:-1:-1::0;;;;;26654:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26654:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26654:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26654:83:0;26647:91:::1;;;;26749:21;26780:4:::0;;-1:-1:-1;;26785:15:0;;26780:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26780:21:0::1;-1:-1:-1::0;;;;;26773:39:0::1;;26813:2;26773:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;26773:43:0::1;-1:-1:-1::0;;;;;26773:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26773:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26773:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26773:43:0;26827:44:::1;::::0;;26773:43:::1;26827:44:::0;;::::1;::::0;;;;;;;;;;;26773:43;;-1:-1:-1;26827:44:0::1;::::0;;;26862:4;;;;;;26827:44;::::1;::::0;26862:4;;26827:44;26862:4;26827:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26868:2:0;;-1:-1:-1;26827:34:0::1;::::0;-1:-1:-1;;26827:44:0:i:1;:::-;26970:12:::0;26904:62:::1;26952:13:::0;26911:4;;-1:-1:-1;;26916:15:0;;26911:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26911:21:0::1;-1:-1:-1::0;;;;;26904:39:0::1;;26944:2;26904:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;26904:43:0::1;-1:-1:-1::0;;;;;26904:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;14421:888:0::0;14687:15;14704;14668:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;14732:12:::1;14747:49;14772:7;14781:6;14789;14747:24;:49::i;:::-;14807:62;::::0;;-1:-1:-1;;;14807:62:0;;14841:10:::1;14807:62;::::0;::::1;::::0;-1:-1:-1;;;;;14807:33:0;::::1;:62:::0;;;;;;;;;;;;;;14732:64;;-1:-1:-1;14807:33:0;;::::1;::::0;:62;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;14807:33:0;:62;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;14807:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;14807:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;14943:29:0::1;::::0;;-1:-1:-1;;;14943:29:0;;-1:-1:-1;;;;;14943:29:0;;::::1;;::::0;::::1;::::0;;;14907:15:::1;::::0;;;14943:25;;::::1;::::0;::::1;::::0;:29;;;;;;;;;;;14907:15;14943:25;:29;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;14943:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;14943:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;14943:29:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;14943:29:0;-1:-1:-1;14984:14:0::1;15004:43;15032:6:::0;15040;15004:27:::1;:43::i;:::-;14983:64;;;15089:6;-1:-1:-1::0;;;;;15079:16:0::1;:6;-1:-1:-1::0;;;;;15079:16:0::1;;:58;;15120:7;15129;15079:58;;;15099:7;15108;15079:58;15058:79:::0;;-1:-1:-1;15058:79:0;-1:-1:-1;15156:21:0;;::::1;;15148:71;;;;-1:-1:-1::0;;;15148:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15249:10;15238:7;:21;;15230:71;;;;-1:-1:-1::0;;;15230:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10761:1;;;;14421:888:::0;;;;;;;;;;;:::o;10547:41::-;;;:::o;28747:209::-;28849:24;28893:55;28924:7;28933:8;28943:4;28893:30;:55::i;16650:720::-;16978:19;16999:17;17029:12;17044:46;17069:7;17078:5;17085:4;17044:24;:46::i;:::-;17029:61;;17101:13;17117:10;:36;;17144:9;17117:36;;;-1:-1:-1;;17117:36:0;17164:80;;;-1:-1:-1;;;17164:80:0;;17192:10;17164:80;;;;17212:4;17164:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17101:52;;-1:-1:-1;;;;;;17164:27:0;;;;;:80;;;;;-1:-1:-1;;17164:80:0;;;;;;;;-1:-1:-1;17164:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;17164:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17164:80:0;;;;17282;17301:5;17308:9;17319:14;17335:12;17349:2;17353:8;17282:18;:80::i;:::-;17255:107;;;;-1:-1:-1;16650:720:0;-1:-1:-1;;;;;;;;;;;;;16650:720:0:o;12491:862::-;12853:15;12883;12913:17;12811:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;12979:85:::1;12993:6;13001;13009:14;13025;13041:10;13053;12979:13;:85::i;:::-;12958:106:::0;;-1:-1:-1;12958:106:0;-1:-1:-1;13075:12:0::1;13090:49;13115:7;13124:6:::0;13132;13090:24:::1;:49::i;:::-;13075:64;;13150:66;13182:6;13190:10;13202:4;13208:7;13150:31;:66::i;:::-;13227;13259:6;13267:10;13279:4;13285:7;13227:31;:66::i;:::-;13331:4;-1:-1:-1::0;;;;;13316:25:0::1;;13342:2;13316:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;13316:29:0::1;-1:-1:-1::0;;;;;13316:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;13316:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13316:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;13316:29:0;12491:862;;;;-1:-1:-1;13316:29:0;;-1:-1:-1;12491:862:0;;-1:-1:-1;;;;;;;;;12491:862:0:o;13361:1017::-;13694:19;13728:17;13760;13652:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;13832:87:::1;13846:5;13853:4;13859:18;13879:9;13890:14;13906:12;13832:13;:87::i;:::-;13805:114:::0;;-1:-1:-1;13805:114:0;-1:-1:-1;13930:12:0::1;13945:46;13970:7;13979:5:::0;13986:4:::1;13945:24;:46::i;:::-;13930:61;;14002:69;14034:5;14041:10;14053:4;14059:11;14002:31;:69::i;:::-;14088:4;-1:-1:-1::0;;;;;14082:19:0::1;;14110:9;14082:41;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;14082:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;14082:41:0;;;;;14147:4;-1:-1:-1::0;;;;;14141:20:0::1;;14162:4;14168:9;14141:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;14141:37:0::1;-1:-1:-1::0;;;;;14141:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;14141:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;14141:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;14141:37:0;14134:45:::1;;;;14217:4;-1:-1:-1::0;;;;;14202:25:0::1;;14228:2;14202:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;14202:29:0::1;-1:-1:-1::0;;;;;14202:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;14202:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;14202:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;14202:29:0;;-1:-1:-1;14282:9:0::1;:21:::0;-1:-1:-1;14278:92:0::1;;;14305:65;14336:10;14360:9;14348;:21;14305:30;:65::i;:::-;10761:1;13361:1017:::0;;;;;;;;;;;:::o;23282:803::-;23490:24;23471:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;23546:4:::1;-1:-1:-1::0;;;;;23535:15:0::1;:4;;23540:1;23535:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;23535:7:0::1;-1:-1:-1::0;;;;;23535:15:0::1;;23527:56;;;::::0;;-1:-1:-1;;;23527:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;23527:56:0;;;;;;;;;;;;;::::1;;23604:55;23634:7;23643:9;23654:4;;23604:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;23604:29:0::1;::::0;-1:-1:-1;;;23604:55:0:i:1;:::-;23594:65;;23692:9;23678:7;23686:1;23678:10;;;;;;;;;;;;;;:23;;23670:74;;;;-1:-1:-1::0;;;23670:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23761:4;-1:-1:-1::0;;;;;23755:19:0::1;;23783:7;23791:1;23783:10;;;;;;;;;;;;;;23755:42;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23755:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23755:42:0;;;;;23821:4;-1:-1:-1::0;;;;;23815:20:0::1;;23836:51;23861:7;23870:4;;23875:1;23870:7;;;;;;23836:51;23889:7;23897:1;23889:10;;;;;;;;;;;;;;23815:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;23815:85:0::1;-1:-1:-1::0;;;;;23815:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23815:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23815:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23815:85:0;23808:93:::1;;;;23912:24;23918:7;23927:4;;23912:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;23933:2:0;;-1:-1:-1;23912:5:0::1;::::0;-1:-1:-1;;23912:24:0:i:1;:::-;23999:7;24007:1;23999:10;;;;;;;;;;;;;;23987:9;:22;23983:94;;;24011:66;24042:10;24066:7;24074:1;24066:10;;;;;;;;;;;;;;24054:9;:22;24011:30;:66::i;35629:398::-:0;35861:45;;;-1:-1:-1;;;;;35861:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;35861:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;35850:57:0;;;;35815:12;;35829:17;;35850:10;;;;35861:45;35850:57;;;25:18:-1;35850: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;;;35850: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;;35814:93:0;;;;35926:7;:57;;;;-1:-1:-1;35938:11:0;;:16;;:44;;;35969:4;35958:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35958:24:0;35938:44;35918:101;;;;;-1:-1:-1;;;35918:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35629:398;;;;;:::o;36491:202::-;36606:12;;;36564;36606;;;;;;;;;-1:-1:-1;;;;;36582:7:0;;;36598:5;;36582:37;;;;;;;;;;;;;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;;;36582:37: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;;36563:56:0;;;36638:7;36630:55;;;;-1:-1:-1;;;36630:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36491:202;;;:::o;33763:606::-;33901:24;33961:1;33946:4;:11;:16;;33938:58;;;;;-1:-1:-1;;;33938:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;34031:4;:11;34017:26;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34017:26:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;34017:26:0;;34007:36;;34067:8;34054:7;34062:1;34054:10;;;;;;;;;;;;;:21;;;;;34091:9;34086:276;34120:1;34106:4;:11;:15;34102:1;:19;34086:276;;;34144:17;34163:18;34185:42;34197:7;34206:4;34211:1;34206:7;;;;;;;;;;;;;;34215:4;34220:1;34224;34220:5;34215:11;;;;;;;;;;;;;;34185;:42::i;:::-;34143:84;;;;34259:91;34272:7;34280:1;34272:10;;;;;;;;;;;;;;34284:9;34295:10;34307:42;34319:7;34328:4;34333:1;34328:7;;;;;;;;;;;;;;34337:4;34342:1;34346;34342:5;34337:11;;;;;;;;;;;;;;34307;:42::i;:::-;34259:12;:91::i;:::-;34242:7;34250:1;34254;34250:5;34242:14;;;;;;;;;;;;;;;;;:108;-1:-1:-1;;34123:3:0;;34086:276;;;;33763:606;;;;;:::o;30368:651::-;30491:12;30517:14;30533;30551:26;30562:6;30570;30551:10;:26::i;:::-;30796:32;;;-1:-1:-1;;30796:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;30796:32:0;;;;;30786:43;;;;;;-1:-1:-1;;;;;;30675:291:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;30675:291:0;;;;;;;30643:342;;;;;;;;;30368:651;-1:-1:-1;;;;;30368:651:0:o;36035:448::-;36306:51;;;-1:-1:-1;;;;;36306:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;36306:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;36295:63:0;;;;36260:12;;36274:17;;36295:10;;;;36306:51;36295:63;;;25:18:-1;36295: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;;;36295: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;;36259:99:0;;;;36377:7;:57;;;;-1:-1:-1;36389:11:0;;:16;;:44;;;36420:4;36409:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36409:24:0;36389:44;36369:106;;;;-1:-1:-1;;;36369:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36035:448;;;;;;:::o;18923:759::-;19067:9;19062:613;19096:1;19082:4;:11;:15;19078:1;:19;19062:613;;;19120:13;19135:14;19154:4;19159:1;19154:7;;;;;;;;;;;;;;19163:4;19168:1;19172;19168:5;19163:11;;;;;;;;;;;;;;19119:56;;;;19191:14;19211:42;19239:5;19246:6;19211:27;:42::i;:::-;19190:63;;;19268:17;19288:7;19296:1;19300;19296:5;19288:14;;;;;;;;;;;;;;19268:34;;19318:18;19338;19369:6;-1:-1:-1;;;;;19360:15:0;:5;-1:-1:-1;;;;;19360:15:0;;:67;;19405:9;19424:1;19360:67;;;19387:1;19391:9;19360:67;19317:110;;;;19442:10;19473:1;19459:4;:11;:15;19455:1;:19;:82;;19534:3;19455:82;;;19477:54;19502:7;19511:6;19519:4;19524:1;19528;19524:5;19519:11;;;;;;;;;;;;;;19477:24;:54::i;:::-;19442:95;;19567:48;19592:7;19601:5;19608:6;19567:24;:48::i;:::-;-1:-1:-1;;;;;19552:69:0;;19622:10;19634;19646:2;19660:1;19650:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;19650:12:0;87:42:-1;143:17;;-1:-1;19650:12:0;;19552:111;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19552:111:0;-1:-1:-1;;;;;19552:111: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;19552:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19552:111:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;19099:3:0;;;;;-1:-1:-1;19062:613:0;;-1:-1:-1;;;;;;;;19062:613:0;;;18923:759;;;:::o;34450:627::-;34588:24;34648:1;34633:4;:11;:16;;34625:58;;;;;-1:-1:-1;;;34625:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;34718:4;:11;34704:26;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34704:26:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;34704:26:0;;34694:36;;34771:9;34741:7;34766:1;34749:7;:14;:18;34741:27;;;;;;;;;;;;;;;;;:39;34808:11;;-1:-1:-1;;34808:15:0;34791:279;34825:5;;34791:279;;34853:17;34872:18;34894:42;34906:7;34915:4;34924:1;34920;:5;34915:11;;;;;;;;;;;;;;34928:4;34933:1;34928:7;;;;;;;34894:42;34852:84;;;;34968:90;34980:7;34988:1;34980:10;;;;;;;;;;;;;;34992:9;35003:10;35015:42;35027:7;35036:4;35045:1;35041;:5;35036:11;;;;;;;;;;;;;;35049:4;35054:1;35049:7;;;;;;;35015:42;34968:11;:90::i;:::-;34951:7;34963:1;34959;:5;34951:14;;;;;;;;;;;;;;;;;:107;-1:-1:-1;;;;34832:3:0;34791:279;;32358:625;32521:17;32570:1;32559:8;:12;32551:67;;;;-1:-1:-1;;;32551:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32649:1;32637:9;:13;:31;;;;;32667:1;32654:10;:14;32637:31;32629:83;;;;-1:-1:-1;;;32629:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32723:23;32749:43;32762:29;32770:6;32782:8;32762:29;:19;:29;:::i;:::-;32749:8;;:43;:12;:43;:::i;:::-;32723:69;-1:-1:-1;32803:17:0;32823:31;32723:69;32843:10;32823:31;:19;:31;:::i;:::-;32803:51;-1:-1:-1;32865:19:0;32887:42;32913:15;32887:21;:9;32901:6;32887:21;:13;:21;:::i;:::-;:25;:42;:25;:42;:::i;:::-;32865:64;;32964:11;32952:9;:23;;;;;;;32358:625;-1:-1:-1;;;;;;;;32358:625:0:o;33104:577::-;33267:16;33316:1;33304:9;:13;33296:69;;;;-1:-1:-1;;;33296:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33396:1;33384:9;:13;:31;;;;;33414:1;33401:10;:14;33384:31;33376:83;;;;-1:-1:-1;;;33376:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33470:17;33490:36;33519:6;33490:24;:9;33504;33490:24;:13;:24;:::i;:::-;:28;:36;:28;:36;:::i;:::-;33470:56;-1:-1:-1;33537:19:0;33559:60;33589:29;33597:6;33609:8;33589:29;:19;:29;:::i;:::-;33559:25;:10;33574:9;33559:25;:14;:25;:::i;:60::-;33537:82;;33641:32;33671:1;33654:11;33642:9;:23;;;;;;;33641:32;:29;:32;:::i;:::-;33630:43;33104:577;-1:-1:-1;;;;;;;33104:577:0:o;24232:1299::-;24345:9;24340:1184;24374:1;24360:4;:11;:15;24356:1;:19;24340:1184;;;24398:13;24413:14;24432:4;24437:1;24432:7;;;;;;;;;;;;;;24441:4;24446:1;24450;24446:5;24441:11;;;;;;;;;;;;;;24397:56;;;;24469:14;24489:42;24517:5;24524:6;24489:27;:42::i;:::-;24468:63;;;24546:19;24583:48;24608:7;24617:5;24624:6;24583:24;:48::i;:::-;24546:86;;24647:19;24681:20;24793:16;24811;24833:4;-1:-1:-1;;;;;24833:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24833:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24833:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;24833:18:0;;;;;;;-1:-1:-1;;;;;24792:59:0;;;;-1:-1:-1;24792:59:0;;-1:-1:-1;24871:20:0;;-1:-1:-1;;;;;24918:15:0;;;;;;;:61;;24960:8;24970;24918:61;;;24937:8;24947;24918:61;24870:109;;;;25012:56;25055:12;25019:5;-1:-1:-1;;;;;25012:23:0;;25044:4;25012:38;;;;;;;;;;;;;-1:-1:-1;;;;;25012:38:0;-1:-1:-1;;;;;25012:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;25012:56:0;24998:70;;25102:88;25132:11;25145:12;25159:13;25174:4;-1:-1:-1;;;;;25174:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25174:15:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25174:15:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25174:15:0;25102:29;:88::i;:::-;25087:103;;24340:1184;;;;25221:18;25241;25272:6;-1:-1:-1;;;;;25263:15:0;:5;-1:-1:-1;;;;;25263:15:0;;:73;;25311:12;25333:1;25263:73;;;25290:1;25294:12;25263:73;25220:116;;;;25351:10;25382:1;25368:4;:11;:15;25364:1;:19;:82;;25443:3;25364:82;;;25386:54;25411:7;25420:6;25428:4;25433:1;25437;25433:5;25428:11;;;;;;;25386:54;25499:12;;;25509:1;25499:12;;;;;;;;;;-1:-1:-1;;;25461:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;25461:51:0;;;;;;;;;;;;;;;;;;;;;;25351:95;;-1:-1:-1;25461:9:0;;;;;;25471:10;;25483;;25351:95;;25499:12;;25461:51;;;;;;;;25499:12;;25461:51;;;;25499: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;25461:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25461:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24377:3:0;;;;;-1:-1:-1;24340:1184:0;;-1:-1:-1;;;;;;;;;;24340:1184:0;29457:138;29550:5;;;29545:16;;;;29537:50;;;;;-1:-1:-1;;;29537:50:0;;;;;;;;;;;;-1:-1:-1;;;29537:50:0;;;;;;;;;;;;;;31629:365;31754:15;31800:1;31790:7;:11;31782:60;;;;-1:-1:-1;;;31782:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31872:1;31861:8;:12;:28;;;;;31888:1;31877:8;:12;31861:28;31853:80;;;;-1:-1:-1;;;31853:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31978:8;31954:21;:7;31966:8;31954:21;:11;:21;:::i;:::-;:32;;;;;;;31629:365;-1:-1:-1;;;;31629:365:0:o;29929:347::-;30004:14;30020;30065:6;-1:-1:-1;;;;;30055:16:0;:6;-1:-1:-1;;;;;30055:16:0;;;30047:65;;;;-1:-1:-1;;;30047:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30151:6;-1:-1:-1;;;;;30142:15:0;:6;-1:-1:-1;;;;;30142:15:0;;:53;;30180:6;30188;30142:53;;;30161:6;30169;30142:53;30123:72;;-1:-1:-1;30123:72:0;-1:-1:-1;;;;;;30214:20:0;;30206:62;;;;;-1:-1:-1;;;30206:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29929:347;;;;;:::o;11065:1418::-;11396:50;;;-1:-1:-1;;;11396:50:0;;-1:-1:-1;;;;;11396:50:0;;;;;;;;;;;;;;;;11295:15;;;;;;11414:7;11396:34;;;;;;:50;;;;;;;;;;;;;;;:34;:50;;;2:2:-1;;;;27:1;24;17:12;2:2;11396:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11396:50:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11396:50:0;-1:-1:-1;;;;;11396:64:0;;11392:150;;;11477:53;;;-1:-1:-1;;;11477:53:0;;-1:-1:-1;;;;;11477:53:0;;;;;;;;;;;;;;;;11495:7;11477:37;;;;;;:53;;;;;;;;;;;;;;;-1:-1:-1;11477:37:0;:53;;;2:2:-1;;;;27:1;24;17:12;2:2;11477:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11477:53:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;11392:150:0;11553:16;11571;11591:53;11620:7;11629:6;11637;11591:28;:53::i;:::-;11552:92;;;;11659:8;11671:1;11659:13;:30;;;;-1:-1:-1;11676:13:0;;11659:30;11655:821;;;11728:14;;-1:-1:-1;11744:14:0;;-1:-1:-1;11655:821:0;;;11792:22;11817:58;11840:14;11856:8;11866;11817:22;:58::i;:::-;11792:83;;11912:14;11894;:32;11890:575;;11973:10;11955:14;:28;;11947:78;;;;-1:-1:-1;;;11947:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12066:14;;-1:-1:-1;12082:14:0;-1:-1:-1;12082:14:0;11890:575;;;12138:22;12163:58;12186:14;12202:8;12212;12163:22;:58::i;:::-;12138:83;;12265:14;12247;:32;;12240:40;;;;12325:10;12307:14;:28;;12299:78;;;;-1:-1:-1;;;12299:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12418:14;-1:-1:-1;12434:14:0;;-1:-1:-1;11890:575:0;11655:821;;11065:1418;;;;;;;;;;;:::o;31077:439::-;31204:16;31222;31252:14;31272:26;31283:6;31291;31272:10;:26::i;:::-;31251:47;;;31310:16;31328;31365:32;31373:7;31382:6;31390;31365:7;:32::i;:::-;-1:-1:-1;;;;;31350:60:0;;:62;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31350:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31350:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31350:62:0;;;;;;;-1:-1:-1;;;;;31309:103:0;;;;-1:-1:-1;31309:103:0;;-1:-1:-1;;;;;;31446:16:0;;;;;;;:62;;31489:8;31499;31446:62;;;31466:8;31476;31446:62;31423:85;;;;-1:-1:-1;31077:439:0;-1:-1:-1;;;;;;;31077:439:0:o;32002:234::-;32129:16;32184:32;32192:7;32201:6;32209;32184:7;:32::i;:::-;-1:-1:-1;;;;;32169:57:0;;:59;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32169:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32169:59:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32169:59:0;;32002:234;-1:-1:-1;;;;32002:234:0:o;29603:151::-;29661:9;29691:6;;;:30;;-1:-1:-1;;29706:5:0;;;29720:1;29715;29706:5;29715:1;29701:15;;;;;:20;29691:30;29683:63;;;;;-1:-1:-1;;;29683:63:0;;;;;;;;;;;;-1:-1:-1;;;29683:63:0;;;;;;;;;;;;;;29312:137;29405:5;;;29400:16;;;;29392:49;;;;;-1:-1:-1;;;29392:49:0;;;;;;;;;;;;-1:-1:-1;;;29392:49:0;;;;;;;;;;;;;
Swarm Source
ipfs://dbfa20a349d607fad35170f7676d26929cf45e4c0cae010963f5d5c9de32a5c6
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.