Contract Overview
Balance:
0 BTT
My Name Tag:
Not Available
Txn Hash | Method |
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0x8222c2fe3035ed68f9d519d868237f7a8bc8effbfba9c83da0841ecd2ee3f417 | Add Liquidity ET... | 15118473 | 485 days 14 hrs ago | 0xf2e3fbdc5038ca680a76bd416933abf0a1500c96 | IN | 0xfc31ceb382414d775a089e076264228ceafb2588 | 10,000,000 BTT | 1,036.7316 | |
0x0791057ea01d10ae44235f64153adbf4a605b3f67b7e41c98f443ed60f88b082 | Add Liquidity ET... | 13939800 | 514 days 53 mins ago | 0xf2e3fbdc5038ca680a76bd416933abf0a1500c96 | IN | 0xfc31ceb382414d775a089e076264228ceafb2588 | 100,000 BTT | 1,041.9633 | |
0xd953fe69369b32475ec295a2a693a5636f8fd35214e3bf9c4b7ea43b48e09139 | 0x60c06040 | 13939671 | 514 days 58 mins ago | 0xf2e3fbdc5038ca680a76bd416933abf0a1500c96 | IN | Create: XXswapRouter | 0 BTT | 1,169.9454 |
[ Download CSV Export ]
Latest 14 internal transactions
[ Download CSV Export ]
Contract Name:
XXswapRouter
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at testnet.bttcscan.com on 2022-10-31 */ pragma solidity =0.6.6; interface IXXswapFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeApprove(address token, address to, uint value) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED'); } function safeTransfer(address token, address to, uint value) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED'); } function safeTransferFrom(address token, address from, address to, uint value) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED'); } function safeTransferETH(address to, uint value) internal { (bool success,) = to.call{value:value}(new bytes(0)); require(success, 'TransferHelper: ETH_TRANSFER_FAILED'); } } interface IXXswapRouter01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IXXswapRouter02 is IXXswapRouter01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IXXswapPair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math) library SafeMath { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x, 'ds-math-add-overflow'); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x, 'ds-math-sub-underflow'); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow'); } } library XXswapLibrary { using SafeMath for uint; // returns sorted token addresses, used to handle return values from pairs sorted in this order function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { require(tokenA != tokenB, 'XXswapLibrary: IDENTICAL_ADDRESSES'); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'XXswapLibrary: ZERO_ADDRESS'); } // calculates the CREATE2 address for a pair without making any external calls function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) { (address token0, address token1) = sortTokens(tokenA, tokenB); pair = address(uint(keccak256(abi.encodePacked( hex'ff', factory, keccak256(abi.encodePacked(token0, token1)), hex'ca3ecce045ebe97893ccf104eb6268c7c1a70ca4d033e700152640dff71919d0' // init code hash )))); } // fetches and sorts the reserves for a pair function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) { (address token0,) = sortTokens(tokenA, tokenB); pairFor(factory, tokenA, tokenB); (uint reserve0, uint reserve1,) = IXXswapPair(pairFor(factory, tokenA, tokenB)).getReserves(); (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); } // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) { require(amountA > 0, 'XXswapLibrary: INSUFFICIENT_AMOUNT'); require(reserveA > 0 && reserveB > 0, 'XXswapLibrary: INSUFFICIENT_LIQUIDITY'); amountB = amountA.mul(reserveB) / reserveA; } // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) { require(amountIn > 0, 'XXswapLibrary: INSUFFICIENT_INPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'XXswapLibrary: INSUFFICIENT_LIQUIDITY'); uint amountInWithFee = amountIn.mul(997); uint numerator = amountInWithFee.mul(reserveOut); uint denominator = reserveIn.mul(1000).add(amountInWithFee); amountOut = numerator / denominator; } // given an output amount of an asset and pair reserves, returns a required input amount of the other asset function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) { require(amountOut > 0, 'XXswapLibrary: INSUFFICIENT_OUTPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'XXswapLibrary: INSUFFICIENT_LIQUIDITY'); uint numerator = reserveIn.mul(amountOut).mul(1000); uint denominator = reserveOut.sub(amountOut).mul(997); amountIn = (numerator / denominator).add(1); } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) { require(path.length >= 2, 'XXswapLibrary: INVALID_PATH'); amounts = new uint[](path.length); amounts[0] = amountIn; for (uint i; i < path.length - 1; i++) { (uint reserveIn, uint reserveOut) = getReserves(factory, path[i], path[i + 1]); amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut); } } // performs chained getAmountIn calculations on any number of pairs function getAmountsIn(address factory, uint amountOut, address[] memory path) internal view returns (uint[] memory amounts) { require(path.length >= 2, 'XXswapLibrary: INVALID_PATH'); amounts = new uint[](path.length); amounts[amounts.length - 1] = amountOut; for (uint i = path.length - 1; i > 0; i--) { (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]); amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut); } } } interface IERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); } interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } contract XXswapRouter is IXXswapRouter02 { using SafeMath for uint; address public immutable override factory; address public immutable override WETH; modifier ensure(uint deadline) { require(deadline >= block.timestamp, 'XXswapRouter: EXPIRED'); _; } constructor(address _factory, address _WETH) public { factory = _factory; WETH = _WETH; } receive() external payable { assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract } // **** ADD LIQUIDITY **** function _addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin ) internal virtual returns (uint amountA, uint amountB) { // create the pair if it doesn't exist yet if (IXXswapFactory(factory).getPair(tokenA, tokenB) == address(0)) { IXXswapFactory(factory).createPair(tokenA, tokenB); } (uint reserveA, uint reserveB) = XXswapLibrary.getReserves(factory, tokenA, tokenB); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint amountBOptimal = XXswapLibrary.quote(amountADesired, reserveA, reserveB); if (amountBOptimal <= amountBDesired) { require(amountBOptimal >= amountBMin, 'XXswapRouter: INSUFFICIENT_B_AMOUNT'); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint amountAOptimal = XXswapLibrary.quote(amountBDesired, reserveB, reserveA); assert(amountAOptimal <= amountADesired); require(amountAOptimal >= amountAMin, 'XXswapRouter: INSUFFICIENT_A_AMOUNT'); (amountA, amountB) = (amountAOptimal, amountBDesired); } } } function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external virtual override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) { (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin); address pair = XXswapLibrary.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = IXXswapPair(pair).mint(to); } function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) { (amountToken, amountETH) = _addLiquidity( token, WETH, amountTokenDesired, msg.value, amountTokenMin, amountETHMin ); address pair = XXswapLibrary.pairFor(factory, token, WETH); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWETH(WETH).deposit{value: amountETH}(); assert(IWETH(WETH).transfer(pair, amountETH)); liquidity = IXXswapPair(pair).mint(to); // refund dust eth, if any if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH); } // **** REMOVE LIQUIDITY **** function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) { address pair = XXswapLibrary.pairFor(factory, tokenA, tokenB); IXXswapPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (uint amount0, uint amount1) = IXXswapPair(pair).burn(to); (address token0,) = XXswapLibrary.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, 'XXswapRouter: INSUFFICIENT_A_AMOUNT'); require(amountB >= amountBMin, 'XXswapRouter: INSUFFICIENT_B_AMOUNT'); } function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountToken, uint amountETH) { (amountToken, amountETH) = removeLiquidity( token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer(token, to, amountToken); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountA, uint amountB) { address pair = XXswapLibrary.pairFor(factory, tokenA, tokenB); uint value = approveMax ? uint(-1) : liquidity; IXXswapPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline); } function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountToken, uint amountETH) { address pair = XXswapLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IXXswapPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline); } // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) **** function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountETH) { (, amountETH) = removeLiquidity( token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this))); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountETH) { address pair = XXswapLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IXXswapPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); amountETH = removeLiquidityETHSupportingFeeOnTransferTokens( token, liquidity, amountTokenMin, amountETHMin, to, deadline ); } // **** SWAP **** // requires the initial amount to have already been sent to the first pair function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0,) = XXswapLibrary.sortTokens(input, output); uint amountOut = amounts[i + 1]; (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0)); address to = i < path.length - 2 ? XXswapLibrary.pairFor(factory, output, path[i + 2]) : _to; IXXswapPair(XXswapLibrary.pairFor(factory, input, output)).swap( amount0Out, amount1Out, to, new bytes(0) ); } } function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { amounts = XXswapLibrary.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'XXswapRouter: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, XXswapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { amounts = XXswapLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'XXswapRouter: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, XXswapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external virtual override payable ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, 'XXswapRouter: INVALID_PATH'); amounts = XXswapLibrary.getAmountsOut(factory, msg.value, path); require(amounts[amounts.length - 1] >= amountOutMin, 'XXswapRouter: INSUFFICIENT_OUTPUT_AMOUNT'); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(XXswapLibrary.pairFor(factory, path[0], path[1]), amounts[0])); _swap(amounts, path, to); } function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[path.length - 1] == WETH, 'XXswapRouter: INVALID_PATH'); amounts = XXswapLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'XXswapRouter: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, XXswapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWETH(WETH).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); } function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[path.length - 1] == WETH, 'XXswapRouter: INVALID_PATH'); amounts = XXswapLibrary.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'XXswapRouter: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, XXswapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWETH(WETH).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); } function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external virtual override payable ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, 'XXswapRouter: INVALID_PATH'); amounts = XXswapLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= msg.value, 'XXswapRouter: EXCESSIVE_INPUT_AMOUNT'); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(XXswapLibrary.pairFor(factory, path[0], path[1]), amounts[0])); _swap(amounts, path, to); // refund dust eth, if any if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]); } // **** SWAP (supporting fee-on-transfer tokens) **** // requires the initial amount to have already been sent to the first pair function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0,) = XXswapLibrary.sortTokens(input, output); IXXswapPair pair = IXXswapPair(XXswapLibrary.pairFor(factory, input, output)); uint amountInput; uint amountOutput; { // scope to avoid stack too deep errors (uint reserve0, uint reserve1,) = pair.getReserves(); (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0); amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput); amountOutput = XXswapLibrary.getAmountOut(amountInput, reserveInput, reserveOutput); } (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0)); address to = i < path.length - 2 ? XXswapLibrary.pairFor(factory, output, path[i + 2]) : _to; pair.swap(amount0Out, amount1Out, to, new bytes(0)); } } function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { TransferHelper.safeTransferFrom( path[0], msg.sender, XXswapLibrary.pairFor(factory, path[0], path[1]), amountIn ); uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'XXswapRouter: INSUFFICIENT_OUTPUT_AMOUNT' ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override payable ensure(deadline) { require(path[0] == WETH, 'XXswapRouter: INVALID_PATH'); uint amountIn = msg.value; IWETH(WETH).deposit{value: amountIn}(); assert(IWETH(WETH).transfer(XXswapLibrary.pairFor(factory, path[0], path[1]), amountIn)); uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'XXswapRouter: INSUFFICIENT_OUTPUT_AMOUNT' ); } function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { require(path[path.length - 1] == WETH, 'XXswapRouter: INVALID_PATH'); TransferHelper.safeTransferFrom( path[0], msg.sender, XXswapLibrary.pairFor(factory, path[0], path[1]), amountIn ); _swapSupportingFeeOnTransferTokens(path, address(this)); uint amountOut = IERC20(WETH).balanceOf(address(this)); require(amountOut >= amountOutMin, 'XXswapRouter: INSUFFICIENT_OUTPUT_AMOUNT'); IWETH(WETH).withdraw(amountOut); TransferHelper.safeTransferETH(to, amountOut); } // **** LIBRARY FUNCTIONS **** function quote(uint amountA, uint reserveA, uint reserveB) public pure virtual override returns (uint amountB) { return XXswapLibrary.quote(amountA, reserveA, reserveB); } function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) public pure virtual override returns (uint amountOut) { return XXswapLibrary.getAmountOut(amountIn, reserveIn, reserveOut); } function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) public pure virtual override returns (uint amountIn) { return XXswapLibrary.getAmountIn(amountOut, reserveIn, reserveOut); } function getAmountsOut(uint amountIn, address[] memory path) public view virtual override returns (uint[] memory amounts) { return XXswapLibrary.getAmountsOut(factory, amountIn, path); } function getAmountsIn(uint amountOut, address[] memory path) public view virtual override returns (uint[] memory amounts) { return XXswapLibrary.getAmountsIn(factory, amountOut, path); } }
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"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
60c060405234801561001057600080fd5b5060405162004759380380620047598339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145d4620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b528061277952806129ec5280612a425280612a765280612aea5280612c8a5280612dcd5280612e55525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad528061250652806126fe5280612727528061275752806128c45280612a205280612d1d5280612e87528061372e52806137715280613a545280613bd3528061400352806140b1528061413152506145d46000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361312e565b50965096945050505050565b6000610dbe848484613226565b949350505050565b60608142811015610e0c576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601a602482015260008051602061447f833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b815260040180806020018281038252602881526020018061452f6028913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613462565b85600081518110610fe657fe5b6020026020010151613522565b6110328287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061367f915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161312e565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138c5565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f613462565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b815260040180806020018281038252602881526020018061452f6028913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e88287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b606081428110156113b4576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601a602482015260008051602061447f833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260248152602001806145576024913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613522565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139fd915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d0816565b10156118935760405162461bcd60e51b815260040180806020018281038252602881526020018061452f6028913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b815260206004820152601a602482015260008051602061447f833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139fd915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b815260040180806020018281038252602881526020018061452f6028913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261312e565b60608142811015611b67576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b815260206004820152601a602482015260008051602061447f833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b815260040180806020018281038252602881526020018061452f6028913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b5095945050505050565b6000610dbe848484613d58565b60608142811015611ec7576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260248152602001806145576024913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e48565b60008142811015611ff1576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361312e565b8042811015612170576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b815260206004820152601a602482015260008051602061447f833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139fd915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c613462565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613ef4565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b81526004018080602001828103825260238152602001806143ec6023913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b81526004018080602001828103825260238152602001806144c76023913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613316565b600080600061279d7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613462565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613fd2565b909450925060006128ea7f00000000000000000000000000000000000000000000000000000000000000008e8e613462565b90506128f88d338388613522565b6129048c338387613522565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b612a148a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613fd2565b90945092506000612a667f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050612a748b338388613522565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c343385340361312e565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b815260206004820152601a602482015260008051602061447f833981519152604482015290519081900360640190fd5b612d767f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b81526004018080602001828103825260248152602001806145576024913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eb37f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f888287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b6020026020010151340361312e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b613127576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061317a5780518252601f19909201916020918201910161315b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131dc576040519150601f19603f3d011682016040523d82523d6000602084013e6131e1565b606091505b50509050806132215760405162461bcd60e51b815260040180806020018281038252602381526020018061450c6023913960400191505060405180910390fd5b505050565b60008084116132665760405162461bcd60e51b815260040180806020018281038252602881526020018061449f6028913960400191505060405180910390fd5b6000831180156132765750600082115b6132b15760405162461bcd60e51b81526004018080602001828103825260258152602001806144386025913960400191505060405180910390fd5b60006132c5856103e563ffffffff61424616565b905060006132d9828563ffffffff61424616565b905060006132ff836132f3886103e863ffffffff61424616565b9063ffffffff6142a916565b905080828161330a57fe5b04979650505050505050565b606060028251101561336f576040805162461bcd60e51b815260206004820152601b60248201527f5858737761704c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561338757600080fd5b506040519080825280602002602001820160405280156133b1578160200160208202803683370190505b50905082816000815181106133c257fe5b60200260200101818152505060005b600183510381101561345a57600080613414878685815181106133f057fe5b602002602001015187866001018151811061340757fe5b60200260200101516142f8565b9150915061343684848151811061342757fe5b60200260200101518383613226565b84846001018151811061344557fe5b602090810291909101015250506001016133d1565b509392505050565b60008060006134718585613ef4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527fca3ecce045ebe97893ccf104eb6268c7c1a70ca4d033e700152640dff71919d0609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135a75780518252601f199092019160209182019101613588565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613609576040519150601f19603f3d011682016040523d82523d6000602084013e61360e565b606091505b509150915081801561363c57508051158061363c575080806020019051602081101561363957600080fd5b50515b6136775760405162461bcd60e51b815260040180806020018281038252602481526020018061457b6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138bf5760008084838151811061369d57fe5b60200260200101518584600101815181106136b457fe5b60200260200101519150915060006136cc8383613ef4565b50905060008785600101815181106136e057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461370e57826000613712565b6000835b91509150600060028a51038810613729578861376a565b61376a7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061375d57fe5b6020026020010151613462565b90506137977f00000000000000000000000000000000000000000000000000000000000000008888613462565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137d4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561384557818101518382015260200161382d565b50505050905090810190601f1680156138725780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561389457600080fd5b505af11580156138a8573d6000803e3d6000fd5b505060019099019850613682975050505050505050565b50505050565b606060028251101561391e576040805162461bcd60e51b815260206004820152601b60248201527f5858737761704c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561393657600080fd5b50604051908082528060200260200182016040528015613960578160200160208202803683370190505b509050828160018351038151811061397457fe5b60209081029190910101528151600019015b801561345a576000806139b6878660018603815181106139a257fe5b602002602001015187868151811061340757fe5b915091506139d88484815181106139c957fe5b60200260200101518383613d58565b8460018503815181106139e757fe5b6020908102919091010152505060001901613986565b60005b600183510381101561322157600080848381518110613a1b57fe5b6020026020010151858460010181518110613a3257fe5b6020026020010151915091506000613a4a8383613ef4565b5090506000613a7a7f00000000000000000000000000000000000000000000000000000000000000008585613462565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613abb57600080fd5b505afa158015613acf573d6000803e3d6000fd5b505050506040513d6060811015613ae557600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b1b578284613b1e565b83835b91509150613b7c828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b89868383613226565b945050505050600080856001600160a01b0316886001600160a01b031614613bb357826000613bb7565b6000835b91509150600060028c51038a10613bce578a613c02565b613c027f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061375d57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c8c578181015183820152602001613c74565b50505050905090810190601f168015613cb95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cdb57600080fd5b505af1158015613cef573d6000803e3d6000fd5b50506001909b019a50613a009950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d985760405162461bcd60e51b815260040180806020018281038252602981526020018061440f6029913960400191505060405180910390fd5b600083118015613da85750600082115b613de35760405162461bcd60e51b81526004018080602001828103825260258152602001806144386025913960400191505060405180910390fd5b6000613e076103e8613dfb868863ffffffff61424616565b9063ffffffff61424616565b90506000613e216103e5613dfb868963ffffffff613d0816565b9050613e3e6001828481613e3157fe5b049063ffffffff6142a916565b9695505050505050565b6000808411613e885760405162461bcd60e51b815260040180806020018281038252602281526020018061445d6022913960400191505060405180910390fd5b600083118015613e985750600082115b613ed35760405162461bcd60e51b81526004018080602001828103825260258152602001806144386025913960400191505060405180910390fd5b82613ee4858463ffffffff61424616565b81613eeb57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f485760405162461bcd60e51b81526004018080602001828103825260228152602001806144ea6022913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613f68578284613f6b565b83835b90925090506001600160a01b038216613fcb576040805162461bcd60e51b815260206004820152601b60248201527f5858737761704c6962726172793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561404c57600080fd5b505afa158015614060573d6000803e3d6000fd5b505050506040513d602081101561407657600080fd5b50516001600160a01b0316141561412957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156140fc57600080fd5b505af1158015614110573d6000803e3d6000fd5b505050506040513d602081101561412657600080fd5b50505b6000806141577f00000000000000000000000000000000000000000000000000000000000000008b8b6142f8565b91509150816000148015614169575080155b1561417957879350869250614239565b6000614186898484613e48565b90508781116141d957858110156141ce5760405162461bcd60e51b81526004018080602001828103825260238152602001806144c76023913960400191505060405180910390fd5b889450925082614237565b60006141e6898486613e48565b9050898111156141f257fe5b878110156142315760405162461bcd60e51b81526004018080602001828103825260238152602001806143ec6023913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806142615750508082028282828161425e57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143078585613ef4565b509050614315868686613462565b50600080614324888888613462565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561435c57600080fd5b505afa158015614370573d6000803e3d6000fd5b505050506040513d606081101561438657600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143b95780826143bc565b81815b9099909850965050505050505056fe585873776170526f757465723a20455850495245440000000000000000000000585873776170526f757465723a20494e53554646494349454e545f415f414d4f554e545858737761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545858737761704c6962726172793a20494e53554646494349454e545f4c49515549444954595858737761704c6962726172793a20494e53554646494349454e545f414d4f554e54585873776170526f757465723a20494e56414c49445f504154480000000000005858737761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54585873776170526f757465723a20494e53554646494349454e545f425f414d4f554e545858737761704c6962726172793a204944454e544943414c5f4144445245535345535472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544585873776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54585873776170526f757465723a204558434553534956455f494e5055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a2646970667358221220e673ba5a7fcde313a2f34a5e4df8c1c2067ec3e60871a0ab340b5b6f271af11564736f6c63430006060033000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b67
Deployed Bytecode
0x60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b67161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b610d0d897f000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b678a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b676001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361312e565b50965096945050505050565b6000610dbe848484613226565b949350505050565b60608142811015610e0c576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b671686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601a602482015260008051602061447f833981519152604482015290519081900360640190fd5b610efd7f000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c8988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b815260040180806020018281038252602881526020018061452f6028913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c8a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613462565b85600081518110610fe657fe5b6020026020010151613522565b6110328287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061367f915050565b7f000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b676001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161312e565b509695505050505050565b60606111207f000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c84846138c5565b90505b92915050565b60008060006111597f000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c8f8f613462565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b6112c77f000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c8988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b815260040180806020018281038252602881526020018061452f6028913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e88287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b606081428110156113b4576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b6716868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601a602482015260008051602061447f833981519152604482015290519081900360640190fd5b6114a57f000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260248152602001806145576024913960400191505060405180910390fd5b6000806115487f000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c8d7f000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b67613462565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c8989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613522565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139fd915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d0816565b10156118935760405162461bcd60e51b815260040180806020018281038252602881526020018061452f6028913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b67168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b815260206004820152601a602482015260008051602061447f833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139fd915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b6716916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b815260040180806020018281038252602881526020018061452f6028913960400191505060405180910390fd5b7f000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b676001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261312e565b60608142811015611b67576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b7f000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b676001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b815260206004820152601a602482015260008051602061447f833981519152604482015290519081900360640190fd5b611c557f000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c3488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b815260040180806020018281038252602881526020018061452f6028913960400191505060405180910390fd5b7f000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b676001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b676001600160a01b031663a9059cbb611d957f000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c8989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b5095945050505050565b6000610dbe848484613d58565b60608142811015611ec7576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b611f257f000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260248152602001806145576024913960400191505060405180910390fd5b7f000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b6781565b6000610dbe848484613e48565b60008142811015611ff1576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b6789898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b676001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361312e565b8042811015612170576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b7f000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b676001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b815260206004820152601a602482015260008051602061447f833981519152604482015290519081900360640190fd5b60003490507f000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b676001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b676001600160a01b031663a9059cbb6122d97f000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c8989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139fd915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b600061252c7f000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c8c8c613462565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613ef4565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b81526004018080602001828103825260238152602001806143ec6023913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b81526004018080602001828103825260238152602001806144c76023913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c81565b60606111207f000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c8484613316565b600080600061279d7f000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c8e7f000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b67613462565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613fd2565b909450925060006128ea7f000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c8e8e613462565b90506128f88d338388613522565b6129048c338387613522565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b612a148a7f000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b678b348c8c613fd2565b90945092506000612a667f000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c8c7f000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b67613462565b9050612a748b338388613522565b7f000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b676001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b676001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c343385340361312e565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b7f000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b676001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b815260206004820152601a602482015260008051602061447f833981519152604482015290519081900360640190fd5b612d767f000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b81526004018080602001828103825260248152602001806145576024913960400191505060405180910390fd5b7f000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b676001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b676001600160a01b031663a9059cbb612eb37f000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c8989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f888287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b6020026020010151340361312e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b613127576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061317a5780518252601f19909201916020918201910161315b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131dc576040519150601f19603f3d011682016040523d82523d6000602084013e6131e1565b606091505b50509050806132215760405162461bcd60e51b815260040180806020018281038252602381526020018061450c6023913960400191505060405180910390fd5b505050565b60008084116132665760405162461bcd60e51b815260040180806020018281038252602881526020018061449f6028913960400191505060405180910390fd5b6000831180156132765750600082115b6132b15760405162461bcd60e51b81526004018080602001828103825260258152602001806144386025913960400191505060405180910390fd5b60006132c5856103e563ffffffff61424616565b905060006132d9828563ffffffff61424616565b905060006132ff836132f3886103e863ffffffff61424616565b9063ffffffff6142a916565b905080828161330a57fe5b04979650505050505050565b606060028251101561336f576040805162461bcd60e51b815260206004820152601b60248201527f5858737761704c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561338757600080fd5b506040519080825280602002602001820160405280156133b1578160200160208202803683370190505b50905082816000815181106133c257fe5b60200260200101818152505060005b600183510381101561345a57600080613414878685815181106133f057fe5b602002602001015187866001018151811061340757fe5b60200260200101516142f8565b9150915061343684848151811061342757fe5b60200260200101518383613226565b84846001018151811061344557fe5b602090810291909101015250506001016133d1565b509392505050565b60008060006134718585613ef4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527fca3ecce045ebe97893ccf104eb6268c7c1a70ca4d033e700152640dff71919d0609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135a75780518252601f199092019160209182019101613588565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613609576040519150601f19603f3d011682016040523d82523d6000602084013e61360e565b606091505b509150915081801561363c57508051158061363c575080806020019051602081101561363957600080fd5b50515b6136775760405162461bcd60e51b815260040180806020018281038252602481526020018061457b6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138bf5760008084838151811061369d57fe5b60200260200101518584600101815181106136b457fe5b60200260200101519150915060006136cc8383613ef4565b50905060008785600101815181106136e057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461370e57826000613712565b6000835b91509150600060028a51038810613729578861376a565b61376a7f000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c878c8b6002018151811061375d57fe5b6020026020010151613462565b90506137977f000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c8888613462565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137d4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561384557818101518382015260200161382d565b50505050905090810190601f1680156138725780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561389457600080fd5b505af11580156138a8573d6000803e3d6000fd5b505060019099019850613682975050505050505050565b50505050565b606060028251101561391e576040805162461bcd60e51b815260206004820152601b60248201527f5858737761704c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561393657600080fd5b50604051908082528060200260200182016040528015613960578160200160208202803683370190505b509050828160018351038151811061397457fe5b60209081029190910101528151600019015b801561345a576000806139b6878660018603815181106139a257fe5b602002602001015187868151811061340757fe5b915091506139d88484815181106139c957fe5b60200260200101518383613d58565b8460018503815181106139e757fe5b6020908102919091010152505060001901613986565b60005b600183510381101561322157600080848381518110613a1b57fe5b6020026020010151858460010181518110613a3257fe5b6020026020010151915091506000613a4a8383613ef4565b5090506000613a7a7f000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c8585613462565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613abb57600080fd5b505afa158015613acf573d6000803e3d6000fd5b505050506040513d6060811015613ae557600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b1b578284613b1e565b83835b91509150613b7c828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b89868383613226565b945050505050600080856001600160a01b0316886001600160a01b031614613bb357826000613bb7565b6000835b91509150600060028c51038a10613bce578a613c02565b613c027f000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c898e8d6002018151811061375d57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c8c578181015183820152602001613c74565b50505050905090810190601f168015613cb95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cdb57600080fd5b505af1158015613cef573d6000803e3d6000fd5b50506001909b019a50613a009950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d985760405162461bcd60e51b815260040180806020018281038252602981526020018061440f6029913960400191505060405180910390fd5b600083118015613da85750600082115b613de35760405162461bcd60e51b81526004018080602001828103825260258152602001806144386025913960400191505060405180910390fd5b6000613e076103e8613dfb868863ffffffff61424616565b9063ffffffff61424616565b90506000613e216103e5613dfb868963ffffffff613d0816565b9050613e3e6001828481613e3157fe5b049063ffffffff6142a916565b9695505050505050565b6000808411613e885760405162461bcd60e51b815260040180806020018281038252602281526020018061445d6022913960400191505060405180910390fd5b600083118015613e985750600082115b613ed35760405162461bcd60e51b81526004018080602001828103825260258152602001806144386025913960400191505060405180910390fd5b82613ee4858463ffffffff61424616565b81613eeb57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f485760405162461bcd60e51b81526004018080602001828103825260228152602001806144ea6022913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613f68578284613f6b565b83835b90925090506001600160a01b038216613fcb576040805162461bcd60e51b815260206004820152601b60248201527f5858737761704c6962726172793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c9092169163e6a4390591604480820192602092909190829003018186803b15801561404c57600080fd5b505afa158015614060573d6000803e3d6000fd5b505050506040513d602081101561407657600080fd5b50516001600160a01b0316141561412957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c9092169163c9c65396916044808201926020929091908290030181600087803b1580156140fc57600080fd5b505af1158015614110573d6000803e3d6000fd5b505050506040513d602081101561412657600080fd5b50505b6000806141577f000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c8b8b6142f8565b91509150816000148015614169575080155b1561417957879350869250614239565b6000614186898484613e48565b90508781116141d957858110156141ce5760405162461bcd60e51b81526004018080602001828103825260238152602001806144c76023913960400191505060405180910390fd5b889450925082614237565b60006141e6898486613e48565b9050898111156141f257fe5b878110156142315760405162461bcd60e51b81526004018080602001828103825260238152602001806143ec6023913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806142615750508082028282828161425e57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143078585613ef4565b509050614315868686613462565b50600080614324888888613462565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561435c57600080fd5b505afa158015614370573d6000803e3d6000fd5b505050506040513d606081101561438657600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143b95780826143bc565b81815b9099909850965050505050505056fe585873776170526f757465723a20455850495245440000000000000000000000585873776170526f757465723a20494e53554646494349454e545f415f414d4f554e545858737761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545858737761704c6962726172793a20494e53554646494349454e545f4c49515549444954595858737761704c6962726172793a20494e53554646494349454e545f414d4f554e54585873776170526f757465723a20494e56414c49445f504154480000000000005858737761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54585873776170526f757465723a20494e53554646494349454e545f425f414d4f554e545858737761704c6962726172793a204944454e544943414c5f4144445245535345535472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544585873776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54585873776170526f757465723a204558434553534956455f494e5055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a2646970667358221220e673ba5a7fcde313a2f34a5e4df8c1c2067ec3e60871a0ab340b5b6f271af11564736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b67
-----Decoded View---------------
Arg [0] : _factory (address): 0x537e479670f396a562e7a865f3aca4720967ee7c
Arg [1] : _WETH (address): 0xdc332535823a197cf0a5e3116d319a1eea960b67
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000537e479670f396a562e7a865f3aca4720967ee7c
Arg [1] : 000000000000000000000000dc332535823a197cf0a5e3116d319a1eea960b67
Deployed ByteCode Sourcemap
15426:18334:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15897:10;-1:-1:-1;;;;;15911:4:0;15897:18;;15890:26;;;;15426:18334;;12:1:-1;9;2:12;19996:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19996:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19996:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32716:259;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32716:259:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32716:259:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27093:838;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27093:838:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27093:838:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27093:838:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27093: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;27093:838:0;;-1:-1:-1;27093:838:0;-1:-1:-1;;;;;;27093: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;27093:838:0;;;;;;;;;;;;;;;;;33507:250;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33507:250:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33507:250:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33507:250:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33507:250: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;33507:250:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33507:250:0;;-1:-1:-1;33507:250:0;;-1:-1:-1;;;;;33507:250:0:i;20675:671::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20675:671:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20675:671:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24352:619::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24352:619:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24352:619:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24352:619:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24352:619: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;24352:619:0;;-1:-1:-1;24352:619:0;-1:-1:-1;;;;;;24352:619:0;;;;;;;;:::i;26271:816::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26271:816:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26271:816:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26271:816:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26271: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;26271:816:0;;-1:-1:-1;26271:816:0;-1:-1:-1;;;;;;26271:816:0;;;;;;;;:::i;22800:712::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22800:712:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22800:712:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30084:708::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30084:708:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30084:708:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30084:708:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30084:708: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;30084:708:0;;-1:-1:-1;30084:708:0;-1:-1:-1;;;;;;30084:708:0;;;;;;;;:::i;31645:834::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31645:834:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31645:834:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31645:834:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31645:834: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;31645:834:0;;-1:-1:-1;31645:834:0;-1:-1:-1;;;;;;31645:834:0;;;;;;;;:::i;25580:685::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25580:685:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25580:685:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25580:685: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;25580:685:0;;-1:-1:-1;25580:685:0;-1:-1:-1;;;;;;25580:685:0;;;;;;;;:::i;32983:258::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32983:258:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32983:258:0;;;;;;;;;;;;:::i;24977:597::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24977:597:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24977:597:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24977:597:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24977:597: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;24977:597:0;;-1:-1:-1;24977:597:0;-1:-1:-1;;;;;;24977:597:0;;;;;;;;:::i;15554:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15554:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;15554:38:0;;;;;;;;;;;;;;32523:185;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32523:185:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32523:185:0;;;;;;;;;;;;:::i;22094:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22094:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22094:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30798:841::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30798:841:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30798:841:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30798:841: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;30798:841:0;;-1:-1:-1;30798:841:0;-1:-1:-1;;;;;;30798:841:0;;;;;;;;:::i;19143:847::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19143:847:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19143:847:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15506:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15506:41:0;;;:::i;33249:250::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33249:250:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33249:250:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33249:250:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33249:250: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;33249:250:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33249:250:0;;-1:-1:-1;33249:250:0;;-1:-1:-1;;;;;33249:250:0:i;21352:663::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21352:663:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21352:663:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17394:732::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17394:732:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17394:732:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18132:968;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18132:968:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;27937:798::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27937:798:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27937:798:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27937:798: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;27937:798:0;;-1:-1:-1;27937:798:0;-1:-1:-1;;;;;;27937:798:0;;;;;;;;:::i;19996:673::-;20233:16;20251:14;20214:8;15663:15;15651:8;:27;;15643:61;;;;;-1:-1:-1;;;15643:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15643:61:0;;;;;;;;;;;;;;;20305:196:::1;20335:5;20355:4;20374:9;20398:14;20427:12;20462:4;20482:8;20305:15;:196::i;:::-;20278:223:::0;;-1:-1:-1;20278:223:0;-1:-1:-1;20512:51:0::1;20540:5:::0;20547:2;20278:223;20512:27:::1;:51::i;:::-;20580:4;-1:-1:-1::0;;;;;20574:20:0::1;;20595:9;20574:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20574:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20574:31:0;;;;20616:45;20647:2;20651:9;20616:30;:45::i;:::-;19996:673:::0;;;;;;;;;;:::o;32716:259::-;32869:14;32908:59;32935:8;32945:9;32956:10;32908:26;:59::i;:::-;32901:66;32716:259;-1:-1:-1;;;;32716:259:0:o;27093:838::-;27307:21;27279:8;15663:15;15651:8;:27;;15643:61;;;;;-1:-1:-1;;;15643:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15643:61:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27379:4:0::1;27354:29;:4:::0;;-1:-1:-1;;27359:15:0;;27354:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27354:21:0::1;-1:-1:-1::0;;;;;27354:29:0::1;;27346:68;;;::::0;;-1:-1:-1;;;27346:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27346:68:0;;;;;;;;;;;;;::::1;;27435:52;27463:7;27472:8;27482:4;;27435:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27435:27:0::1;::::0;-1:-1:-1;;;27435:52:0:i:1;:::-;27425:62;;27537:12;27506:7;27531:1;27514:7;:14;:18;27506:27;;;;;;;;;;;;;;:43;;27498:96;;;;-1:-1:-1::0;;;27498:96:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27605:138;27651:4;;27656:1;27651:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27651:7:0::1;27660:10;27672:48;27694:7;27703:4;;27708:1;27703:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27703:7:0::1;27712:4;;27717:1;27712:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27712:7:0::1;27672:21;:48::i;:::-;27722:7;27730:1;27722:10;;;;;;;;;;;;;;27605:31;:138::i;:::-;27754:35;27760:7;27769:4;;27754:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27783:4:0::1;::::0;-1:-1:-1;27754:5:0::1;::::0;-1:-1:-1;;27754:35:0:i:1;:::-;27806:4;-1:-1:-1::0;;;;;27800:20:0::1;;27821:7;27846:1;27829:7;:14;:18;27821:27;;;;;;;;;;;;;;27800:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27800:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27800:49:0;;;;27860:63;27891:2;27895:7;27920:1;27903:7;:14;:18;27895:27;;;;;;;;;;;;;;27860:30;:63::i;:::-;27093:838:::0;;;;;;;;;:::o;33507:250::-;33651:21;33697:52;33724:7;33733:9;33744:4;33697:26;:52::i;:::-;33690:59;;33507:250;;;;;:::o;20675:671::-;20981:12;20995;21020;21035:46;21057:7;21066:6;21074;21035:21;:46::i;:::-;21020:61;;21092:10;21105;:33;;21129:9;21105:33;;;-1:-1:-1;;21105:33:0;21149:77;;;-1:-1:-1;;;21149:77:0;;21174:10;21149:77;;;;21194:4;21149:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21092:46;;-1:-1:-1;;;;;;21149:24:0;;;;;:77;;;;;-1:-1:-1;;21149:77:0;;;;;;;;-1:-1:-1;21149:24:0;:77;;;2:2:-1;;;;27:1;24;17:12;2:2;21149:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21149:77:0;;;;21258:80;21274:6;21282;21290:9;21301:10;21313;21325:2;21329:8;21258:15;:80::i;:::-;21237:101;;;;;;;;20675:671;;;;;;;;;;;;;;;;:::o;24352:619::-;24576:21;24557:8;15663:15;15651:8;:27;;15643:61;;;;;-1:-1:-1;;;15643:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15643:61:0;;;;;;;;;;;;;;;24620:52:::1;24648:7;24657:8;24667:4;;24620:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24620:27:0::1;::::0;-1:-1:-1;;;24620:52:0:i:1;:::-;24610:62;;24722:12;24691:7;24716:1;24699:7;:14;:18;24691:27;;;;;;;;;;;;;;:43;;24683:96;;;;-1:-1:-1::0;;;24683:96:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24790:138;24836:4;;24841:1;24836:7;;;;;;24790:138;24939:24;24945:7;24954:4;;24939:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24960:2:0;;-1:-1:-1;24939:5:0::1;::::0;-1:-1:-1;;24939:24:0:i:1;26271:816::-:0;26485:21;26457:8;15663:15;15651:8;:27;;15643:61;;;;;-1:-1:-1;;;15643:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15643:61:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26557:4:0::1;26532:29;:4:::0;;-1:-1:-1;;26537:15:0;;26532:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26532:21:0::1;-1:-1:-1::0;;;;;26532:29:0::1;;26524:68;;;::::0;;-1:-1:-1;;;26524:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26524:68:0;;;;;;;;;;;;;::::1;;26613:52;26640:7;26649:9;26660:4;;26613:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26613:26:0::1;::::0;-1:-1:-1;;;26613:52:0:i:1;:::-;26603:62;;26698:11;26684:7;26692:1;26684:10;;;;;;;;;;;;;;:25;;26676:74;;;;-1:-1:-1::0;;;26676:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22800:712:::0;23118:14;23145:12;23160:43;23182:7;23191:5;23198:4;23160:21;:43::i;:::-;23145:58;;23214:10;23227;:33;;23251:9;23227:33;;;-1:-1:-1;;23227:33:0;23271:77;;;-1:-1:-1;;;23271:77:0;;23296:10;23271:77;;;;23316:4;23271:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23214:46;;-1:-1:-1;;;;;;23271:24:0;;;;;:77;;;;;-1:-1:-1;;23271:77:0;;;;;;;;-1:-1:-1;23271:24:0;:77;;;2:2:-1;;;;27:1;24;17:12;2:2;23271:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23271:77:0;;;;23371:133;23433:5;23440:9;23451:14;23467:12;23481:2;23485:8;23371:47;:133::i;:::-;23359:145;22800:712;-1:-1:-1;;;;;;;;;;;;;22800:712:0:o;30084:708::-;30318:8;15663:15;15651:8;:27;;15643:61;;;;;-1:-1:-1;;;15643:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15643:61:0;;;;;;;;;;;;;;;30339:136:::1;30385:4;;30390:1;30385:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30385:7:0::1;30394:10;30406:48;30428:7;30437:4;;30442:1;30437:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30437:7:0::1;30446:4;;30451:1;30446:7;;;;;;30406:48;30456:8;30339:31;:136::i;:::-;30486:18;30514:4:::0;;-1:-1:-1;;30519:15:0;;30514:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30514:21:0::1;-1:-1:-1::0;;;;;30507:39:0::1;;30547:2;30507:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30507:43:0::1;-1:-1:-1::0;;;;;30507:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30507:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30507:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30507:43:0;30561:44:::1;::::0;;30507:43:::1;30561:44:::0;;::::1;::::0;;;;;;;;;;;30507:43;;-1:-1:-1;30561:44:0::1;::::0;;;30596:4;;;;;;30561:44;::::1;::::0;30596:4;;30561:44;30596:4;30561:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30602:2:0;;-1:-1:-1;30561:34:0::1;::::0;-1:-1:-1;;30561:44:0:i:1;:::-;30704:12:::0;30638:62:::1;30686:13:::0;30645:4;;-1:-1:-1;;30650:15:0;;30645:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30645:21:0::1;-1:-1:-1::0;;;;;30638:39:0::1;;30678:2;30638:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30638:43:0::1;-1:-1:-1::0;;;;;30638:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30638:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30638:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30638:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;30616:168;;;;-1:-1:-1::0;;;30616:168:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15715:1;30084:708:::0;;;;;;;:::o;31645:834::-;31912:8;15663:15;15651:8;:27;;15643:61;;;;;-1:-1:-1;;;15643:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15643:61:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31971:4:0::1;31946:29;:4:::0;;-1:-1:-1;;31951:15:0;;31946:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31946:21:0::1;-1:-1:-1::0;;;;;31946:29:0::1;;31938:68;;;::::0;;-1:-1:-1;;;31938:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31938:68:0;;;;;;;;;;;;;::::1;;32017:136;32063:4;;32068:1;32063:7;;;;;;32017:136;32164:55;32199:4;;32164:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32213:4:0::1;::::0;-1:-1:-1;32164:34:0::1;::::0;-1:-1:-1;;32164:55:0:i:1;:::-;32247:37;::::0;;-1:-1:-1;;;32247:37:0;;32278:4:::1;32247:37;::::0;::::1;::::0;;;32230:14:::1;::::0;-1:-1:-1;;;;;32254:4:0::1;32247:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32247:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32247:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32247:37:0;;-1:-1:-1;32303:25:0;;::::1;;32295:78;;;;-1:-1:-1::0;;;32295:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32390:4;-1:-1:-1::0;;;;;32384:20:0::1;;32405:9;32384:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32384:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32384:31:0;;;;32426:45;32457:2;32461:9;32426:30;:45::i;25580:685::-:0;25796:21;25768:8;15663:15;15651:8;:27;;15643:61;;;;;-1:-1:-1;;;15643:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15643:61:0;;;;;;;;;;;;;;;25854:4:::1;-1:-1:-1::0;;;;;25843:15:0::1;:4;;25848:1;25843:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25843:7:0::1;-1:-1:-1::0;;;;;25843:15:0::1;;25835:54;;;::::0;;-1:-1:-1;;;25835:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;25835:54:0;;;;;;;;;;;;;::::1;;25910:53;25938:7;25947:9;25958:4;;25910:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25910:27:0::1;::::0;-1:-1:-1;;;25910:53:0:i:1;:::-;25900:63;;26013:12;25982:7;26007:1;25990:7;:14;:18;25982:27;;;;;;;;;;;;;;:43;;25974:96;;;;-1:-1:-1::0;;;25974:96:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26087:4;-1:-1:-1::0;;;;;26081:19:0::1;;26108:7;26116:1;26108:10;;;;;;;;;;;;;;26081:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26081:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26081:40:0;;;;;26145:4;-1:-1:-1::0;;;;;26139:20:0::1;;26160:48;26182:7;26191:4;;26196:1;26191:7;;;;;;26160:48;26210:7;26218:1;26210:10;;;;;;;;;;;;;;26139:82;;;;;;;;;;;;;-1:-1:-1::0;;;;;26139:82:0::1;-1:-1:-1::0;;;;;26139:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26139:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26139:82:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26139:82:0;26132:90:::1;;;;26233:24;26239:7;26248:4;;26233:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26254:2:0;;-1:-1:-1;26233:5:0::1;::::0;-1:-1:-1;;26233:24:0:i:1;:::-;25580:685:::0;;;;;;;;:::o;32983:258::-;33136:13;33174:59;33200:9;33211;33222:10;33174:25;:59::i;24977:597::-;25201:21;25182:8;15663:15;15651:8;:27;;15643:61;;;;;-1:-1:-1;;;15643:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15643:61:0;;;;;;;;;;;;;;;25245:52:::1;25272:7;25281:9;25292:4;;25245:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25245:26:0::1;::::0;-1:-1:-1;;;25245:52:0:i:1;:::-;25235:62;;25330:11;25316:7;25324:1;25316:10;;;;;;;;;;;;;;:25;;25308:74;;;;-1:-1:-1::0;;;25308:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15554:38:::0;;;:::o;32523:185::-;32620:12;32652:48;32672:7;32681:8;32691;32652:19;:48::i;22094:700::-;22360:14;22341:8;15663:15;15651:8;:27;;15643:61;;;;;-1:-1:-1;;;15643:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15643:61:0;;;;;;;;;;;;;;;22403:196:::1;22433:5;22453:4;22472:9;22496:14;22525:12;22560:4;22580:8;22403:15;:196::i;:::-;22649:38;::::0;;-1:-1:-1;;;22649:38:0;;22681:4:::1;22649:38;::::0;::::1;::::0;;;22387:212;;-1:-1:-1;22610:78:0::1;::::0;-1:-1:-1;22638:5:0;;22645:2;;-1:-1:-1;;;;;22649: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;22649:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22649:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22649:38:0;22610:27:::1;:78::i;:::-;22705:4;-1:-1:-1::0;;;;;22699:20:0::1;;22720:9;22699:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22699:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22699:31:0;;;;22741:45;22772:2;22776:9;22741:30;:45::i;30798:841::-:0;31058:8;15663:15;15651:8;:27;;15643:61;;;;;-1:-1:-1;;;15643:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15643:61:0;;;;;;;;;;;;;;;31103:4:::1;-1:-1:-1::0;;;;;31092:15:0::1;:4;;31097:1;31092:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31092:7:0::1;-1:-1:-1::0;;;;;31092:15:0::1;;31084:54;;;::::0;;-1:-1:-1;;;31084:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31084:54:0;;;;;;;;;;;;;::::1;;31149:13;31165:9;31149:25;;31191:4;-1:-1:-1::0;;;;;31185:19:0::1;;31212:8;31185:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31185:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31185:38:0;;;;;31247:4;-1:-1:-1::0;;;;;31241:20:0::1;;31262:48;31284:7;31293:4;;31298:1;31293:7;;;;;;31262:48;31312:8;31241:80;;;;;;;;;;;;;-1:-1:-1::0;;;;;31241:80:0::1;-1:-1:-1::0;;;;;31241:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31241:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31241:80:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31241:80:0;31234:88:::1;;;;31333:18;31361:4:::0;;-1:-1:-1;;31366:15:0;;31361:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31361:21:0::1;-1:-1:-1::0;;;;;31354:39:0::1;;31394:2;31354:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31354:43:0::1;-1:-1:-1::0;;;;;31354:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31354:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31354:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31354:43:0;31408:44:::1;::::0;;31354:43:::1;31408:44:::0;;::::1;::::0;;;;;;;;;;;31354:43;;-1:-1:-1;31408:44:0::1;::::0;;;31443:4;;;;;;31408:44;::::1;::::0;31443:4;;31408:44;31443:4;31408:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31449:2:0;;-1:-1:-1;31408:34:0::1;::::0;-1:-1:-1;;31408:44:0:i:1;:::-;31551:12:::0;31485:62:::1;31533:13:::0;31492:4;;-1:-1:-1;;31497:15:0;;31492:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31492:21:0::1;-1:-1:-1::0;;;;;31485:39:0::1;;31525:2;31485:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31485:43:0::1;-1:-1:-1::0;;;;;31485:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;19143:847:0::0;19397:12;19411;19378:8;15663:15;15651:8;:27;;15643:61;;;;;-1:-1:-1;;;15643:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15643:61:0;;;;;;;;;;;;;;;19436:12:::1;19451:46;19473:7;19482:6;19490;19451:21;:46::i;:::-;19508:59;::::0;;-1:-1:-1;;;19508:59:0;;19539:10:::1;19508:59;::::0;::::1;::::0;-1:-1:-1;;;;;19508:30:0;::::1;:59:::0;;;;;;;;;;;;;;19436:61;;-1:-1:-1;19508:30:0;;::::1;::::0;:59;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;19508:30:0;:59;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19508:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19508:59:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;19635:26:0::1;::::0;;-1:-1:-1;;;19635:26:0;;-1:-1:-1;;;;;19635:26:0;;::::1;;::::0;::::1;::::0;;;19605:12:::1;::::0;;;19635:22;;::::1;::::0;::::1;::::0;:26;;;;;;;;;;;19605:12;19635:22;:26;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19635:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19635:26:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19635:26:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;19635:26:0;-1:-1:-1;19673:14:0::1;19692:40;19717:6:::0;19725;19692:24:::1;:40::i;:::-;19672:60;;;19774:6;-1:-1:-1::0;;;;;19764:16:0::1;:6;-1:-1:-1::0;;;;;19764:16:0::1;;:58;;19805:7;19814;19764:58;;;19784:7;19793;19764:58;19743:79:::0;;-1:-1:-1;19743:79:0;-1:-1:-1;19841:21:0;;::::1;;19833:69;;;;-1:-1:-1::0;;;19833:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19932:10;19921:7;:21;;19913:69;;;;-1:-1:-1::0;;;19913:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15715:1;;;;19143:847:::0;;;;;;;;;;;:::o;15506:41::-;;;:::o;33249:250::-;33393:21;33439:52;33467:7;33476:8;33486:4;33439:27;:52::i;21352:663::-;21641:16;21659:14;21686:12;21701:43;21723:7;21732:5;21739:4;21701:21;:43::i;:::-;21686:58;;21755:10;21768;:33;;21792:9;21768:33;;;-1:-1:-1;;21768:33:0;21812:77;;;-1:-1:-1;;;21812:77:0;;21837:10;21812:77;;;;21857:4;21812:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21755:46;;-1:-1:-1;;;;;;21812:24:0;;;;;:77;;;;;-1:-1:-1;;21812:77:0;;;;;;;;-1:-1:-1;21812:24:0;:77;;;2:2:-1;;;;27:1;24;17:12;2:2;21812:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21812:77:0;;;;21927:80;21946:5;21953:9;21964:14;21980:12;21994:2;21998:8;21927:18;:80::i;:::-;21900:107;;;;-1:-1:-1;21352:663:0;-1:-1:-1;;;;;;;;;;;;;21352:663:0:o;17394:732::-;17682:12;17696;17710:14;17663:8;15663:15;15651:8;:27;;15643:61;;;;;-1:-1:-1;;;15643:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15643:61:0;;;;;;;;;;;;;;;17758:85:::1;17772:6;17780;17788:14;17804;17820:10;17832;17758:13;:85::i;:::-;17737:106:::0;;-1:-1:-1;17737:106:0;-1:-1:-1;17854:12:0::1;17869:46;17891:7;17900:6:::0;17908;17869:21:::1;:46::i;:::-;17854:61;;17926:66;17958:6;17966:10;17978:4;17984:7;17926:31;:66::i;:::-;18003;18035:6;18043:10;18055:4;18061:7;18003:31;:66::i;:::-;18104:4;-1:-1:-1::0;;;;;18092:22:0::1;;18115:2;18092:26;;;;;;;;;;;;;-1:-1:-1::0;;;;;18092:26:0::1;-1:-1:-1::0;;;;;18092:26:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18092:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18092:26:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18092:26:0;17394:732;;;;-1:-1:-1;18092:26:0;;-1:-1:-1;17394:732:0;;-1:-1:-1;;;;;;;;;17394:732:0:o;18132:968::-;18385:16;18403:14;18419;18366:8;15663:15;15651:8;:27;;15643:61;;;;;-1:-1:-1;;;15643:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15643:61:0;;;;;;;;;;;;;;;18473:176:::1;18501:5;18521:4;18540:18;18573:9;18597:14;18626:12;18473:13;:176::i;:::-;18446:203:::0;;-1:-1:-1;18446:203:0;-1:-1:-1;18660:12:0::1;18675:43;18697:7;18706:5:::0;18713:4:::1;18675:21;:43::i;:::-;18660:58;;18729:69;18761:5;18768:10;18780:4;18786:11;18729:31;:69::i;:::-;18815:4;-1:-1:-1::0;;;;;18809:19:0::1;;18836:9;18809:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18809:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18809:39:0;;;;;18872:4;-1:-1:-1::0;;;;;18866:20:0::1;;18887:4;18893:9;18866:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;18866:37:0::1;-1:-1:-1::0;;;;;18866:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18866:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18866:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18866:37:0;18859:45:::1;;;;18939:4;-1:-1:-1::0;;;;;18927:22:0::1;;18950:2;18927:26;;;;;;;;;;;;;-1:-1:-1::0;;;;;18927:26:0::1;-1:-1:-1::0;;;;;18927:26:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18927:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18927:26:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18927:26:0;;-1:-1:-1;19004:9:0::1;:21:::0;-1:-1:-1;19000:92:0::1;;;19027:65;19058:10;19082:9;19070;:21;19027:30;:65::i;:::-;15715:1;18132:968:::0;;;;;;;;;;;:::o;27937:798::-;28150:21;28122:8;15663:15;15651:8;:27;;15643:61;;;;;-1:-1:-1;;;15643:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15643:61:0;;;;;;;;;;;;;;;28208:4:::1;-1:-1:-1::0;;;;;28197:15:0::1;:4;;28202:1;28197:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28197:7:0::1;-1:-1:-1::0;;;;;28197:15:0::1;;28189:54;;;::::0;;-1:-1:-1;;;28189:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28189:54:0;;;;;;;;;;;;;::::1;;28264:52;28291:7;28300:9;28311:4;;28264:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28264:26:0::1;::::0;-1:-1:-1;;;28264:52:0:i:1;:::-;28254:62;;28349:9;28335:7;28343:1;28335:10;;;;;;;;;;;;;;:23;;28327:72;;;;-1:-1:-1::0;;;28327:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28416:4;-1:-1:-1::0;;;;;28410:19:0::1;;28437:7;28445:1;28437:10;;;;;;;;;;;;;;28410:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28410:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28410:40:0;;;;;28474:4;-1:-1:-1::0;;;;;28468:20:0::1;;28489:48;28511:7;28520:4;;28525:1;28520:7;;;;;;28489:48;28539:7;28547:1;28539:10;;;;;;;;;;;;;;28468:82;;;;;;;;;;;;;-1:-1:-1::0;;;;;28468:82:0::1;-1:-1:-1::0;;;;;28468:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28468:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28468:82:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28468:82:0;28461:90:::1;;;;28562:24;28568:7;28577:4;;28562:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28583:2:0;;-1:-1:-1;28562:5:0::1;::::0;-1:-1:-1;;28562:24:0:i:1;:::-;28649:7;28657:1;28649:10;;;;;;;;;;;;;;28637:9;:22;28633:94;;;28661:66;28692:10;28716:7;28724:1;28716:10;;;;;;;;;;;;;;28704:9;:22;28661:30;:66::i;1184:361::-:0;1379:45;;;-1:-1:-1;;;;;1379:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1379:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1368:57:0;;;;1333:12;;1347:17;;1368:10;;;;1379:45;1368:57;;;25:18:-1;1368: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;;;1368: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;;1332:93:0;;;;1444:7;:57;;;;-1:-1:-1;1456:11:0;;:16;;:44;;;1487:4;1476:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1476:24:0;1456:44;1436:101;;;;;-1:-1:-1;;;1436:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1184:361;;;;;:::o;1963:195::-;2071:12;;;2033;2071;;;;;;;;;-1:-1:-1;;;;;2050:7:0;;;2064:5;;2050:34;;;;;;;;;;;;;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;;;2050:34:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;2032:52:0;;;2103:7;2095:55;;;;-1:-1:-1;;;2095:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1963:195;;;:::o;12130:511::-;12223:14;12269:1;12258:8;:12;12250:65;;;;-1:-1:-1;;;12250:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12346:1;12334:9;:13;:31;;;;;12364:1;12351:10;:14;12334:31;12326:81;;;;-1:-1:-1;;;12326:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12418:20;12441:17;:8;12454:3;12441:17;:12;:17;:::i;:::-;12418:40;-1:-1:-1;12469:14:0;12486:31;12418:40;12506:10;12486:31;:19;:31;:::i;:::-;12469:48;-1:-1:-1;12528:16:0;12547:40;12571:15;12547:19;:9;12561:4;12547:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;12528:59;;12622:11;12610:9;:23;;;;;;;12130:511;-1:-1:-1;;;;;;;12130:511:0:o;13310:508::-;13411:21;13468:1;13453:4;:11;:16;;13445:56;;;;;-1:-1:-1;;;13445:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13533:4;:11;13522:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13522:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;13522:23:0;;13512:33;;13569:8;13556:7;13564:1;13556:10;;;;;;;;;;;;;:21;;;;;13593:6;13588:223;13619:1;13605:4;:11;:15;13601:1;:19;13588:223;;;13643:14;13659:15;13678:42;13690:7;13699:4;13704:1;13699:7;;;;;;;;;;;;;;13708:4;13713:1;13717;13713:5;13708:11;;;;;;;;;;;;;;13678;:42::i;:::-;13642:78;;;;13752:47;13765:7;13773:1;13765:10;;;;;;;;;;;;;;13777:9;13788:10;13752:12;:47::i;:::-;13735:7;13743:1;13747;13743:5;13735:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;13622:3:0;;13588:223;;;;13310:508;;;;;:::o;10613:478::-;10702:12;10728:14;10744;10762:26;10773:6;10781;10762:10;:26::i;:::-;10926:32;;;-1:-1:-1;;10926:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;10926:32:0;;;;;10916:43;;;;;;-1:-1:-1;;;;;;10829:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10829:251:0;;;;;;;10819:262;;;;;;;;;10613:478;-1:-1:-1;;;;;10613:478:0:o;1553:402::-;1778:51;;;-1:-1:-1;;;;;1778:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1778:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1767:63:0;;;;1732:12;;1746:17;;1767:10;;;;1778:51;1767:63;;;25:18:-1;1767: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;;;1767: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;;1731:99:0;;;;1849:7;:57;;;;-1:-1:-1;1861:11:0;;:16;;:44;;;1892:4;1881:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1881:24:0;1861:44;1841:106;;;;-1:-1:-1;;;1841:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1553:402;;;;;;:::o;23623:723::-;23730:6;23725:614;23756:1;23742:4;:11;:15;23738:1;:19;23725:614;;;23780:13;23795:14;23814:4;23819:1;23814:7;;;;;;;;;;;;;;23823:4;23828:1;23832;23828:5;23823:11;;;;;;;;;;;;;;23779:56;;;;23851:14;23870:39;23895:5;23902:6;23870:24;:39::i;:::-;23850:59;;;23924:14;23941:7;23949:1;23953;23949:5;23941:14;;;;;;;;;;;;;;23924:31;;23971:15;23988;24016:6;-1:-1:-1;;;;;24007:15:0;:5;-1:-1:-1;;;;;24007:15:0;;:61;;24049:9;24065:1;24007:61;;;24031:1;24035:9;24007:61;23970:98;;;;24083:10;24114:1;24100:4;:11;:15;24096:1;:19;:79;;24172:3;24096:79;;;24118:51;24140:7;24149:6;24157:4;24162:1;24166;24162:5;24157:11;;;;;;;;;;;;;;24118:21;:51::i;:::-;24083:92;;24202:45;24224:7;24233:5;24240:6;24202:21;:45::i;:::-;-1:-1:-1;;;;;24190:63:0;;24272:10;24284;24296:2;24310:1;24300:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;24300:12:0;87:42:-1;143:17;;-1:-1;24300:12:0;;24190:137;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24190:137:0;-1:-1:-1;;;;;24190:137: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;24190:137:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24190:137:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;23759:3:0;;;;;-1:-1:-1;23725:614:0;;-1:-1:-1;;;;;;;;23725:614:0;;;23623:723;;;:::o;13899:529::-;14000:21;14057:1;14042:4;:11;:16;;14034:56;;;;;-1:-1:-1;;;14034:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14122:4;:11;14111:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14111:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14111:23:0;;14101:33;;14175:9;14145:7;14170:1;14153:7;:14;:18;14145:27;;;;;;;;;;;;;;;;;:39;14209:11;;-1:-1:-1;;14209:15:0;14195:226;14226:5;;14195:226;;14254:14;14270:15;14289:42;14301:7;14310:4;14319:1;14315;:5;14310:11;;;;;;;;;;;;;;14323:4;14328:1;14323:7;;;;;;;14289:42;14253:78;;;;14363:46;14375:7;14383:1;14375:10;;;;;;;;;;;;;;14387:9;14398:10;14363:11;:46::i;:::-;14346:7;14358:1;14354;:5;14346:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14233:3:0;14195:226;;28882:1196;28995:6;28990:1081;29021:1;29007:4;:11;:15;29003:1;:19;28990:1081;;;29045:13;29060:14;29079:4;29084:1;29079:7;;;;;;;;;;;;;;29088:4;29093:1;29097;29093:5;29088:11;;;;;;;;;;;;;;29044:56;;;;29116:14;29135:39;29160:5;29167:6;29135:24;:39::i;:::-;29115:59;;;29189:16;29220:45;29242:7;29251:5;29258:6;29220:21;:45::i;:::-;29189:77;;29281:16;29312:17;29400:13;29415;29433:4;-1:-1:-1;;;;;29433:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29433:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29433:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29433:18:0;;;;;;;-1:-1:-1;;;;;29399:52:0;;;;-1:-1:-1;29399:52:0;;-1:-1:-1;29467:17:0;;-1:-1:-1;;;;;29508:15:0;;;;;;;:61;;29550:8;29560;29508:61;;;29527:8;29537;29508:61;29466:103;;;;29598:56;29641:12;29605:5;-1:-1:-1;;;;;29598:23:0;;29630:4;29598:38;;;;;;;;;;;;;-1:-1:-1;;;;;29598:38:0;-1:-1:-1;;;;;29598:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;29598:56:0;29584:70;;29684:68;29711:11;29724:12;29738:13;29684:26;:68::i;:::-;29669:83;;28990:1081;;;;29783:15;29800;29828:6;-1:-1:-1;;;;;29819:15:0;:5;-1:-1:-1;;;;;29819:15:0;;:67;;29864:12;29883:1;29819:67;;;29843:1;29847:12;29819:67;29782:104;;;;29901:10;29932:1;29918:4;:11;:15;29914:1;:19;:79;;29990:3;29914:79;;;29936:51;29958:7;29967:6;29975:4;29980:1;29984;29980:5;29975:11;;;;;;;29936:51;30046:12;;;30056:1;30046:12;;;;;;;;;;-1:-1:-1;;;30008:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30008:51:0;;;;;;;;;;;;;;;;;;;;;;29901:92;;-1:-1:-1;30008:9:0;;;;;;30018:10;;30030;;29901:92;;30046:12;;30008:51;;;;;;;;30046:12;;30008:51;;;;30046: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;30008:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30008:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29024:3:0;;;;;-1:-1:-1;28990:1081:0;;-1:-1:-1;;;;;;;;;;28990:1081:0;9730:129;9814:5;;;9809:16;;;;9801:50;;;;;-1:-1:-1;;;9801:50:0;;;;;;;;;;;;-1:-1:-1;;;9801:50:0;;;;;;;;;;;;;;12762:466;12855:13;12901:1;12889:9;:13;12881:67;;;;-1:-1:-1;;;12881:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12979:1;12967:9;:13;:31;;;;;12997:1;12984:10;:14;12967:31;12959:81;;;;-1:-1:-1;;;12959:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13051:14;13068:34;13097:4;13068:24;:9;13082;13068:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13051:51;-1:-1:-1;13113:16:0;13132:34;13162:3;13132:25;:10;13147:9;13132:25;:14;:25;:::i;:34::-;13113:53;;13188:32;13218:1;13201:11;13189:9;:23;;;;;;;13188:32;:29;:32;:::i;:::-;13177:43;12762:466;-1:-1:-1;;;;;;12762:466:0:o;11693:315::-;11775:12;11818:1;11808:7;:11;11800:58;;;;-1:-1:-1;;;11800:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11888:1;11877:8;:12;:28;;;;;11904:1;11893:8;:12;11877:28;11869:78;;;;-1:-1:-1;;;11869:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11992:8;11968:21;:7;11980:8;11968:21;:11;:21;:::i;:::-;:32;;;;;;;11693:315;-1:-1:-1;;;;11693:315:0:o;10178:343::-;10253:14;10269;10314:6;-1:-1:-1;;;;;10304:16:0;:6;-1:-1:-1;;;;;10304:16:0;;;10296:63;;;;-1:-1:-1;;;10296:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10398:6;-1:-1:-1;;;;;10389:15:0;:6;-1:-1:-1;;;;;10389:15:0;;:53;;10427:6;10435;10389:53;;;10408:6;10416;10389:53;10370:72;;-1:-1:-1;10370:72:0;-1:-1:-1;;;;;;10461:20:0;;10453:60;;;;;-1:-1:-1;;;10453:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10178:343;;;;;:::o;16019:1369::-;16332:47;;;-1:-1:-1;;;16332:47:0;;-1:-1:-1;;;;;16332:47:0;;;;;;;;;;;;;;;;16237:12;;;;;;16347:7;16332:31;;;;;;:47;;;;;;;;;;;;;;;:31;:47;;;2:2:-1;;;;27:1;24;17:12;2:2;16332:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16332:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16332:47:0;-1:-1:-1;;;;;16332:61:0;;16328:144;;;16410:50;;;-1:-1:-1;;;16410:50:0;;-1:-1:-1;;;;;16410:50:0;;;;;;;;;;;;;;;;16425:7;16410:34;;;;;;:50;;;;;;;;;;;;;;;-1:-1:-1;16410:34:0;:50;;;2:2:-1;;;;27:1;24;17:12;2:2;16410:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16410:50:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;16328:144:0;16483:13;16498;16515:50;16541:7;16550:6;16558;16515:25;:50::i;:::-;16482:83;;;;16580:8;16592:1;16580:13;:30;;;;-1:-1:-1;16597:13:0;;16580:30;16576:805;;;16649:14;;-1:-1:-1;16665:14:0;;-1:-1:-1;16576:805:0;;;16713:19;16735:55;16755:14;16771:8;16781;16735:19;:55::i;:::-;16713:77;;16827:14;16809;:32;16805:565;;16888:10;16870:14;:28;;16862:76;;;;-1:-1:-1;;;16862:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16979:14;;-1:-1:-1;16995:14:0;-1:-1:-1;16995:14:0;16805:565;;;17051:19;17073:55;17093:14;17109:8;17119;17073:19;:55::i;:::-;17051:77;;17172:14;17154;:32;;17147:40;;;;17232:10;17214:14;:28;;17206:76;;;;-1:-1:-1;;;17206:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17323:14;-1:-1:-1;17339:14:0;;-1:-1:-1;16805:565:0;16576:805;;16019:1369;;;;;;;;;;;:::o;9867:142::-;9919:6;9946;;;:30;;-1:-1:-1;;9961:5:0;;;9975:1;9970;9961:5;9970:1;9956:15;;;;;:20;9946:30;9938:63;;;;;-1:-1:-1;;;9938:63:0;;;;;;;;;;;;-1:-1:-1;;;9938:63:0;;;;;;;;;;;;;;9594:128;9678:5;;;9673:16;;;;9665:49;;;;;-1:-1:-1;;;9665:49:0;;;;;;;;;;;;-1:-1:-1;;;9665:49:0;;;;;;;;;;;;;;11149:431;11242:13;11257;11284:14;11303:26;11314:6;11322;11303:10;:26::i;:::-;11283:46;;;11340:32;11348:7;11357:6;11365;11340:7;:32::i;:::-;;11384:13;11399;11429:32;11437:7;11446:6;11454;11429:7;:32::i;:::-;-1:-1:-1;;;;;11417:57:0;;:59;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11417:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11417:59:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11417:59:0;;;;;;;-1:-1:-1;;;;;11383:93:0;;;;-1:-1:-1;11383:93:0;;-1:-1:-1;;;;;;11510:16:0;;;;;;;:62;;11553:8;11563;11510:62;;;11530:8;11540;11510:62;11487:85;;;;-1:-1:-1;11149:431:0;-1:-1:-1;;;;;;;11149:431:0:o
Swarm Source
ipfs://e673ba5a7fcde313a2f34a5e4df8c1c2067ec3e60871a0ab340b5b6f271af115
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|