More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 221 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Swap Exact Token... | 21388528 | 15 days ago | IN | 0 ETH | 0.00664687 | ||||
Swap Exact Token... | 21388520 | 15 days ago | IN | 0 ETH | 0.00047255 | ||||
Swap Exact Token... | 21386171 | 15 days ago | IN | 0 ETH | 0.00474477 | ||||
Swap Tokens For ... | 21386163 | 15 days ago | IN | 0 ETH | 0.00472105 | ||||
Swap Exact Token... | 21321654 | 24 days ago | IN | 0 ETH | 0.004617 | ||||
Swap Exact Token... | 21321651 | 24 days ago | IN | 0 ETH | 0.00467311 | ||||
Swap Exact Token... | 20766846 | 102 days ago | IN | 0 ETH | 0.00098144 | ||||
Swap Exact Token... | 20480276 | 142 days ago | IN | 0 ETH | 0.00060471 | ||||
Swap Exact ETH F... | 20344724 | 161 days ago | IN | 0.079 ETH | 0.00067133 | ||||
Swap Exact Token... | 20300050 | 167 days ago | IN | 0 ETH | 0.00047425 | ||||
Swap Exact ETH F... | 20294673 | 168 days ago | IN | 0.0019 ETH | 0.00036395 | ||||
Swap Exact ETH F... | 20293801 | 168 days ago | IN | 0.0048 ETH | 0.00033923 | ||||
Add Liquidity ET... | 20256064 | 173 days ago | IN | 0.0018 ETH | 0.00044309 | ||||
Add Liquidity ET... | 20250058 | 174 days ago | IN | 0.00281 ETH | 0.00052196 | ||||
Swap Exact ETH F... | 20249957 | 174 days ago | IN | 0.006 ETH | 0.00035256 | ||||
Add Liquidity ET... | 20235050 | 176 days ago | IN | 0.00305039 ETH | 0.00167488 | ||||
Swap Exact ETH F... | 20222571 | 178 days ago | IN | 0.0035 ETH | 0.00043758 | ||||
Remove Liquidity... | 20222556 | 178 days ago | IN | 0 ETH | 0.00043765 | ||||
Swap Exact ETH F... | 20222451 | 178 days ago | IN | 0.007 ETH | 0.00062156 | ||||
Swap Exact ETH F... | 20136602 | 190 days ago | IN | 0.012 ETH | 0.00056199 | ||||
Swap Exact ETH F... | 20102048 | 195 days ago | IN | 0.055 ETH | 0.00078879 | ||||
Add Liquidity ET... | 20101174 | 195 days ago | IN | 0.0005 ETH | 0.00048281 | ||||
Add Liquidity ET... | 20101117 | 195 days ago | IN | 0.004 ETH | 0.00051416 | ||||
Swap Exact ETH F... | 20101038 | 195 days ago | IN | 0.01 ETH | 0.00064903 | ||||
Swap Exact ETH F... | 20101000 | 195 days ago | IN | 0.001 ETH | 0.00060908 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
21388528 | 15 days ago | 0.04893547 ETH | ||||
21388528 | 15 days ago | 0.04893547 ETH | ||||
21386171 | 15 days ago | 0.05744313 ETH | ||||
21386171 | 15 days ago | 0.05744313 ETH | ||||
21386163 | 15 days ago | 0.08019 ETH | ||||
21386163 | 15 days ago | 0.08019 ETH | ||||
21321654 | 24 days ago | 0.0392492 ETH | ||||
21321654 | 24 days ago | 0.0392492 ETH | ||||
21321651 | 24 days ago | 0.08624849 ETH | ||||
21321651 | 24 days ago | 0.08624849 ETH | ||||
20766846 | 102 days ago | 0.04818913 ETH | ||||
20766846 | 102 days ago | 0.04818913 ETH | ||||
20730697 | 107 days ago | 0.01933007 ETH | ||||
20730697 | 107 days ago | 0.00019525 ETH | ||||
20730697 | 107 days ago | 0.01952533 ETH | ||||
20480276 | 142 days ago | 0.05212431 ETH | ||||
20480276 | 142 days ago | 0.05212431 ETH | ||||
20344724 | 161 days ago | 0.07821 ETH | ||||
20344724 | 161 days ago | 0.00079 ETH | ||||
20300050 | 167 days ago | 0.00616802 ETH | ||||
20300050 | 167 days ago | 0.00616802 ETH | ||||
20294673 | 168 days ago | 0.001881 ETH | ||||
20294673 | 168 days ago | 0.000019 ETH | ||||
20293801 | 168 days ago | 0.004752 ETH | ||||
20293801 | 168 days ago | 0.000048 ETH |
Loading...
Loading
Contract Name:
RARESwapRouter
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-18 */ pragma solidity =0.6.6; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; return msg.data; } } pragma solidity =0.6.6; abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() public{ _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity >=0.6.2; interface IRARESwapRouter01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } pragma solidity >=0.6.2; interface IRARESwapRouter is IRARESwapRouter01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } pragma solidity >=0.5.0; interface IToken { function addPair(address pair, address token) external; function depositLPFee(uint amount, address token) external; } pragma solidity >=0.5.0; interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } pragma solidity >=0.5.0; interface IERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); } pragma solidity =0.6.6; // a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math) library SafeMath { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x, 'ds-math-add-overflow'); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x, 'ds-math-sub-underflow'); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow'); } function div(uint x, uint y) internal pure returns (uint z) { require(y > 0, "ds-math-div-underflow"); z = x / y; } } pragma solidity >=0.5.0; interface IRARESwapPair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function baseToken() external view returns (address); function getTotalFee() external view returns (uint); 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 updateTotalFee(uint totalFee) external returns (bool); 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, address _baseToken); 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, uint amount0Fee, uint amount1Fee, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; function setBaseToken(address _baseToken) external; } pragma solidity >=0.5.0; interface IRARESwapFactory { 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 pairExist(address pair) external view returns (bool); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function routerInitialize(address) external; function routerAddress() external view returns (address); } pragma solidity =0.6.6; abstract contract FeeStore is Ownable { uint public adminFee; address public adminFeeAddress; address public factoryAddress; mapping (address => address) public pairFeeAddress; function initialize(address _factory, uint256 _adminFee, address _adminFeeAddress) internal { factoryAddress = _factory; adminFee = _adminFee; adminFeeAddress = _adminFeeAddress; } function feeAdddressSetWhileSwap(address pair,address tokenAddress) public onlyOwner { require(IRARESwapFactory(factoryAddress).pairExist(pair), "RARESwap FeeStore: Pair is not Exist"); require(IRARESwapPair(pair).token0() == tokenAddress || IRARESwapPair(pair).token1() == tokenAddress, "RARESwap FeeStore: Invalid token address"); pairFeeAddress[pair] = tokenAddress; } function feeAddressGet() public view returns (address) { return (adminFeeAddress == address(0) ? address(this) : adminFeeAddress); } function setAdminFee (address _adminFeeAddress, uint _adminFee) external onlyOwner { require (_adminFee <= 100, "RARESwap: Fee exceeds 1%"); adminFeeAddress = _adminFeeAddress; adminFee = _adminFee; } } pragma solidity >=0.5.0; library RARESwapLibrary { 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, 'RARESwapLibrary: IDENTICAL_ADDRESSES'); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'RARESwapLibrary: 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'8d5eb48a29e28c3f8b5e9069d5c3e5b0913896e4ff564c3a3cef172ae085cfda' // init code hash )))); } // fetches and sorts the reserves for a pair function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) { (address token0,) = sortTokens(tokenA, tokenB); (uint reserve0, uint reserve1,,) = IRARESwapPair(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, 'RARESwapLibrary: INSUFFICIENT_AMOUNT'); require(reserveA > 0 && reserveB > 0, 'RARESwapLibrary: 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, bool tokenFee, uint totalFee) internal pure returns (uint amountOut) { require(amountIn > 0, 'RARESwapLibrary: INSUFFICIENT_INPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'RARESwapLibrary: INSUFFICIENT_LIQUIDITY'); uint amountInMultiplier = tokenFee ? 10000 - totalFee : 10000; uint amountInWithFee = amountIn.mul(amountInMultiplier); uint numerator = amountInWithFee.mul(reserveOut); uint denominator = reserveIn.mul(10000).add(amountInWithFee); amountOut = numerator / denominator; } // given an output amount of an asset and pair reserves, returns a required input amount of the other asset function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut, bool tokenFee, uint totalFee) internal pure returns (uint amountIn) { require(amountOut > 0, 'RARESwapLibrary: INSUFFICIENT_OUTPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'RARESwapLibrary: INSUFFICIENT_LIQUIDITY'); uint amountOutMultiplier = tokenFee ? 10000 - totalFee : 10000; uint numerator = reserveIn.mul(amountOut).mul(10000); uint denominator = reserveOut.sub(amountOut).mul(amountOutMultiplier); 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, 'RARESwapLibrary: INVALID_PATH'); amounts = new uint[](path.length); amounts[0] = amountIn; for (uint i; i < path.length - 1; i++) { IRARESwapPair pair = IRARESwapPair(pairFor(factory, path[i], path[i + 1])); address baseToken = pair.baseToken(); uint totalFee = pair.getTotalFee(); (uint reserveIn, uint reserveOut) = getReserves(factory, path[i], path[i + 1]); amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut, baseToken != address(0), totalFee); } } // 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, 'RARESwapLibrary: INVALID_PATH'); amounts = new uint[](path.length); amounts[amounts.length - 1] = amountOut; for (uint i = path.length - 1; i > 0; i--) { IRARESwapPair pair = IRARESwapPair(pairFor(factory, path[i - 1], path[i])); address baseToken = pair.baseToken(); uint totalFee = pair.getTotalFee(); (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]); amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut, baseToken != address(0), totalFee); } } function adminFeeCalculation(uint256 _amounts,uint256 _adminFee) internal pure returns (uint256,uint256) { uint adminFeeDeduct = (_amounts.mul(_adminFee)) / (10000); _amounts = _amounts.sub(adminFeeDeduct); return (_amounts,adminFeeDeduct); } } pragma solidity >=0.6.0; // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeApprove( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::safeApprove: approve failed' ); } function safeTransfer( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::safeTransfer: transfer failed' ); } function safeTransferFrom( address token, address from, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::transferFrom: transferFrom failed' ); } function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, 'TransferHelper::safeTransferETH: ETH transfer failed'); } } pragma solidity =0.6.6; abstract contract SupportingSwap is FeeStore, IRARESwapRouter { using SafeMath for uint; address public override factory; address public override WETH; modifier ensure(uint deadline) { require(deadline >= block.timestamp, 'RARESwapRouter: EXPIRED'); _; } 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,) = RARESwapLibrary.sortTokens(input, output); uint amountOut = amounts[i + 1]; (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0)); (uint amount0Fee, uint amount1Fee) = _calculateFees(input, output, amounts[i], amount0Out, amount1Out); address to = i < path.length - 2 ? RARESwapLibrary.pairFor(factory, output, path[i + 2]) : _to; IRARESwapPair(RARESwapLibrary.pairFor(factory, input, output)).swap( amount0Out, amount1Out, amount0Fee, amount1Fee, 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) { require(path.length == 2, "RARESwapRouter: ONLY_TWO_TOKENS_ALLOWED"); address pair = RARESwapLibrary.pairFor(factory, path[0], path[1]); uint adminFeeDeduct; if(path[0] == pairFeeAddress[pair]){ (amountIn,adminFeeDeduct) = RARESwapLibrary.adminFeeCalculation(amountIn, adminFee); TransferHelper.safeTransferFrom( path[0], msg.sender, feeAddressGet(), adminFeeDeduct ); } amounts = RARESwapLibrary.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'RARESwapRouter: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, pair, 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) { require(path.length == 2, "RARESwapRouter: ONLY_TWO_TOKENS_ALLOWED"); address pair = RARESwapLibrary.pairFor(factory, path[0], path[1]); uint adminFeeDeduct; if(path[0] == pairFeeAddress[pair]) { amounts = RARESwapLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'RARESwapRouter: EXCESSIVE_INPUT_AMOUNT'); (amounts[0], adminFeeDeduct) = RARESwapLibrary.adminFeeCalculation(amounts[0], adminFee); TransferHelper.safeTransferFrom( path[0], msg.sender, feeAddressGet(), adminFeeDeduct ); amounts = RARESwapLibrary.getAmountsOut(factory, amounts[0], path); TransferHelper.safeTransferFrom( path[0], msg.sender, pair, amounts[0] ); } else { amounts = RARESwapLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'RARESwapRouter: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, pair, 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.length == 2, "RARESwapRouter: ONLY_TWO_TOKENS_ALLOWED"); require(path[0] == WETH, 'RARESwapRouter: INVALID_PATH'); uint bnb = msg.value; address pair = RARESwapLibrary.pairFor(factory, path[0], path[1]); uint adminFeeDeduct; if(path[0] == pairFeeAddress[pair]){ (bnb, adminFeeDeduct) = RARESwapLibrary.adminFeeCalculation(bnb, adminFee); if(address(this) != feeAddressGet()){ payable(feeAddressGet()).transfer(adminFeeDeduct); } } amounts = RARESwapLibrary.getAmountsOut(factory, msg.value, path); require(amounts[amounts.length - 1] >= amountOutMin, 'RARESwapRouter: INSUFFICIENT_OUTPUT_AMOUNT'); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(pair, 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.length == 2, "RARESwapRouter: ONLY_TWO_TOKENS_ALLOWED"); require(path[path.length - 1] == WETH, 'RARESwapRouter: INVALID_PATH'); uint adminFeeDeduct; address pair = RARESwapLibrary.pairFor(factory, path[0], path[1]); if(path[0] == pairFeeAddress[pair]){ amounts = RARESwapLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'RARESwapRouter: EXCESSIVE_INPUT_AMOUNT'); (amounts[0],adminFeeDeduct) = RARESwapLibrary.adminFeeCalculation(amounts[0],adminFee); TransferHelper.safeTransferFrom( path[0], msg.sender, feeAddressGet(), adminFeeDeduct ); amounts = RARESwapLibrary.getAmountsOut(factory, amounts[0], path); TransferHelper.safeTransferFrom( path[0], msg.sender, pair, amounts[0] ); } else { amounts = RARESwapLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'RARESwapRouter: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, pair, amounts[0] ); } _swap(amounts, path, address(this)); uint amountETHOut = amounts[amounts.length - 1]; if(path[1] == pairFeeAddress[pair]){ (amountETHOut,adminFeeDeduct) = RARESwapLibrary.adminFeeCalculation(amountETHOut,adminFee); } IWETH(WETH).withdraw(amountETHOut); TransferHelper.safeTransferETH(to, amountETHOut); } function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path.length == 2, "RARESwapRouter: ONLY_TWO_TOKENS_ALLOWED"); require(path[path.length - 1] == WETH, 'RARESwapRouter: INVALID_PATH'); uint adminFeeDeduct; address pair = RARESwapLibrary.pairFor(factory, path[0], path[1]); if(path[0] == pairFeeAddress[pair]){ (amountIn,adminFeeDeduct) = RARESwapLibrary.adminFeeCalculation(amountIn, adminFee); TransferHelper.safeTransferFrom( path[0], msg.sender, feeAddressGet(), adminFeeDeduct ); } amounts = RARESwapLibrary.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'RARESwapRouter: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, pair, amounts[0] ); _swap(amounts, path, address(this)); uint amountETHOut = amounts[amounts.length - 1]; if(path[1] == pairFeeAddress[pair]){ (amountETHOut,adminFeeDeduct) = RARESwapLibrary.adminFeeCalculation(amountETHOut,adminFee); } IWETH(WETH).withdraw(amountETHOut); TransferHelper.safeTransferETH(to, amountETHOut); } function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external virtual override payable ensure(deadline) returns (uint[] memory amounts) { require(path.length == 2, "RARESwapRouter: ONLY_TWO_TOKENS_ALLOWED"); require(path[0] == WETH, 'RARESwapRouter: INVALID_PATH'); address pair = RARESwapLibrary.pairFor(factory, path[0], path[1]); uint adminFeeDeduct; if(path[0] == pairFeeAddress[pair]){ amounts = RARESwapLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= msg.value, 'RARESwapRouter: EXCESSIVE_INPUT_AMOUNT'); (amounts[0], adminFeeDeduct) = RARESwapLibrary.adminFeeCalculation(amounts[0], adminFee); if(address(this) != feeAddressGet()){ payable(feeAddressGet()).transfer(adminFeeDeduct); } amounts = RARESwapLibrary.getAmountsOut(factory, amounts[0], path); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(pair, amounts[0])); } else { amounts = RARESwapLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= msg.value, 'RARESwapRouter: EXCESSIVE_INPUT_AMOUNT'); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(RARESwapLibrary.pairFor(factory, path[0], path[1]), amounts[0])); } _swap(amounts, path, to); // refund dust eth, if any uint bal = amounts[0].add(adminFeeDeduct); if (msg.value > bal) TransferHelper.safeTransferETH(msg.sender, msg.value - bal); } function _calculateFees(address input, address output, uint amountIn, uint amount0Out, uint amount1Out) internal view virtual returns (uint amount0Fee, uint amount1Fee) { IRARESwapPair pair = IRARESwapPair(RARESwapLibrary.pairFor(factory, input, output)); (address token0,) = RARESwapLibrary.sortTokens(input, output); address baseToken = pair.baseToken(); uint totalFee = pair.getTotalFee(); amount0Fee = baseToken != token0 ? uint(0) : input == token0 ? amountIn.mul(totalFee).div(10**4) : amount0Out.mul(totalFee).div(10**4); amount1Fee = baseToken == token0 ? uint(0) : input != token0 ? amountIn.mul(totalFee).div(10**4) : amount1Out.mul(totalFee).div(10**4); } function _calculateAmounts(address input, address output, address token0) internal view returns (uint amountInput, uint amountOutput) { IRARESwapPair pair = IRARESwapPair(RARESwapLibrary.pairFor(factory, input, output)); (uint reserve0, uint reserve1,, address baseToken) = pair.getReserves(); uint totalFee = pair.getTotalFee(); (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0); amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput); amountOutput = RARESwapLibrary.getAmountOut(amountInput, reserveInput, reserveOutput, baseToken != address(0), totalFee); } // **** 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,) = RARESwapLibrary.sortTokens(input, output); (uint amountInput, uint amountOutput) = _calculateAmounts(input, output, token0); (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0)); (uint amount0Fee, uint amount1Fee) = _calculateFees(input, output, amountInput, amount0Out, amount1Out); address to = i < path.length - 2 ? RARESwapLibrary.pairFor(factory, output, path[i + 2]) : _to; IRARESwapPair pair = IRARESwapPair(RARESwapLibrary.pairFor(factory, input, output)); pair.swap(amount0Out, amount1Out, amount0Fee, amount1Fee, to, new bytes(0)); } } function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { require(path.length == 2, "RARESwapRouter: ONLY_TWO_TOKENS_ALLOWED"); address pair = RARESwapLibrary.pairFor(factory, path[0], path[1]); uint adminFeeDeduct; if(path[0] == pairFeeAddress[pair]){ (amountIn,adminFeeDeduct) = RARESwapLibrary.adminFeeCalculation(amountIn,adminFee); TransferHelper.safeTransferFrom( path[0], msg.sender, feeAddressGet(), adminFeeDeduct ); } TransferHelper.safeTransferFrom( path[0], msg.sender, pair, amountIn ); uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); if(path[1] == pairFeeAddress[pair]){ (amountOutMin,adminFeeDeduct) = RARESwapLibrary.adminFeeCalculation(amountOutMin,adminFee); } require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'RARESwapRouter: INSUFFICIENT_OUTPUT_AMOUNT' ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override payable ensure(deadline) { require(path.length == 2, "RARESwapRouter: ONLY_TWO_TOKENS_ALLOWED"); require(path[0] == WETH, 'RARESwapRouter: INVALID_PATH'); uint amountIn = msg.value; address pair = RARESwapLibrary.pairFor(factory, path[0], path[1]); uint adminFeeDeduct; if(path[0] == pairFeeAddress[pair]){ (amountIn,adminFeeDeduct) = RARESwapLibrary.adminFeeCalculation(amountIn,adminFee); if(address(this) != feeAddressGet()){ payable(feeAddressGet()).transfer(adminFeeDeduct); } } IWETH(WETH).deposit{value: amountIn}(); assert(IWETH(WETH).transfer(pair, amountIn)); uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); if(path[1] == pairFeeAddress[pair]){ (amountOutMin,adminFeeDeduct) = RARESwapLibrary.adminFeeCalculation(amountOutMin,adminFee); } require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'RARESwapRouter: INSUFFICIENT_OUTPUT_AMOUNT' ); } function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { require(path.length == 2, "RARESwapRouter: ONLY_TWO_TOKENS_ALLOWED"); require(path[path.length - 1] == WETH, 'RARESwapRouter: INVALID_PATH'); address pair = RARESwapLibrary.pairFor(factory, path[0], path[1]); if(path[0] == pairFeeAddress[pair]){ uint adminFeeDeduct = (amountIn.mul(adminFee)) / (10000); amountIn = amountIn.sub(adminFeeDeduct); TransferHelper.safeTransferFrom( path[0], msg.sender, feeAddressGet(), adminFeeDeduct ); } TransferHelper.safeTransferFrom( path[0], msg.sender, pair, amountIn ); _swapSupportingFeeOnTransferTokens(path, address(this)); uint amountOut = IERC20(WETH).balanceOf(address(this)); amountOutMin; if(path[1] == pairFeeAddress[pair]){ uint adminFeeDeduct = (amountOut.mul(adminFee)) / (10000); amountOut = amountOut.sub(adminFeeDeduct); } 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 RARESwapLibrary.quote(amountA, reserveA, reserveB); } function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) public pure virtual override returns (uint amountOut) { return RARESwapLibrary.getAmountOut(amountIn, reserveIn, reserveOut, false, 0); } function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) public pure virtual override returns (uint amountIn) { return RARESwapLibrary.getAmountIn(amountOut, reserveIn, reserveOut, false, 0); } function getAmountsOut(uint amountIn, address[] memory path) public view virtual override returns (uint[] memory amounts) { return RARESwapLibrary.getAmountsOut(factory, amountIn, path); } function getAmountsIn(uint amountOut, address[] memory path) public view virtual override returns (uint[] memory amounts) { return RARESwapLibrary.getAmountsIn(factory, amountOut, path); } } pragma solidity =0.6.6; contract RARESwapRouter is SupportingSwap { using SafeMath for uint; address private BUSD; constructor(address _factory, address _WETH, address _BUSD, uint256 _adminFee, address _adminFeeAddress) public { factory = _factory; WETH = _WETH; BUSD = _BUSD; initialize(_factory, _adminFee, _adminFeeAddress); IRARESwapFactory(_factory).routerInitialize(address(this)); } 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 (getPair(tokenA, tokenB) == address(0)) { if(tokenA == WETH) { IRARESwapFactory(factory).createPair(tokenB, tokenA); pairFeeAddress[getPair(tokenA,tokenB)] = tokenA; } else { IRARESwapFactory(factory).createPair(tokenA, tokenB); pairFeeAddress[getPair(tokenA,tokenB)] = tokenB; } } (uint reserveA, uint reserveB) = RARESwapLibrary.getReserves(factory, tokenA, tokenB); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); if (tokenA == WETH) { pairFeeAddress[getPair(tokenA,tokenB)] = tokenA; } else if (tokenA == BUSD) { pairFeeAddress[getPair(tokenA,tokenB)] = tokenA; } else { pairFeeAddress[getPair(tokenA,tokenB)] = tokenB; } } else { uint amountBOptimal = RARESwapLibrary.quote(amountADesired, reserveA, reserveB); if (amountBOptimal <= amountBDesired) { require(amountBOptimal >= amountBMin, 'RARESwapRouter: INSUFFICIENT_B_AMOUNT'); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint amountAOptimal = RARESwapLibrary.quote(amountBDesired, reserveB, reserveA); assert(amountAOptimal <= amountADesired); require(amountAOptimal >= amountAMin, 'RARESwapRouter: INSUFFICIENT_A_AMOUNT'); (amountA, amountB) = (amountAOptimal, amountBDesired); } } } function getPair(address tokenA,address tokenB) public view returns (address){ return IRARESwapFactory(factory).getPair(tokenA, tokenB); } 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 = RARESwapLibrary.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = IRARESwapPair(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 amountETH, uint amountToken, uint liquidity) { (amountETH, amountToken) = _addLiquidity( WETH, token, msg.value, amountTokenDesired, amountETHMin, amountTokenMin ); address pair = RARESwapLibrary.pairFor(factory, token, WETH); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWETH(WETH).deposit{value: amountETH}(); assert(IWETH(WETH).transfer(pair, amountETH)); liquidity = IRARESwapPair(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 = RARESwapLibrary.pairFor(factory, tokenA, tokenB); IRARESwapPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (uint amount0, uint amount1) = IRARESwapPair(pair).burn(to); (address token0,) = RARESwapLibrary.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, 'RARESwapRouter: INSUFFICIENT_A_AMOUNT'); require(amountB >= amountBMin, 'RARESwapRouter: 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 = RARESwapLibrary.pairFor(factory, tokenA, tokenB); uint value = approveMax ? uint(-1) : liquidity; IRARESwapPair(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 = RARESwapLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IRARESwapPair(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 = RARESwapLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IRARESwapPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); amountETH = removeLiquidityETHSupportingFeeOnTransferTokens( token, liquidity, amountTokenMin, amountETHMin, to, deadline ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"},{"internalType":"address","name":"_BUSD","type":"address"},{"internalType":"uint256","name":"_adminFee","type":"uint256"},{"internalType":"address","name":"_adminFeeAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"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":"amountETH","type":"uint256"},{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"adminFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminFeeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factoryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"feeAdddressSetWhileSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeAddressGet","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":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"getPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pairFeeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_adminFeeAddress","type":"address"},{"internalType":"uint256","name":"_adminFee","type":"uint256"}],"name":"setAdminFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200619b3803806200619b833981810160405260a08110156200003757600080fd5b508051602082015160408301516060840151608090940151929391929091906200007c6200006d6001600160e01b036200013b16565b6001600160e01b036200013f16565b600580546001600160a01b038088166001600160a01b031992831617909255600680548784169083161790556007805492861692909116919091179055620000cf8583836001600160e01b036200018f16565b6040805163b77fe18360e01b815230600482015290516001600160a01b0387169163b77fe18391602480830192600092919082900301818387803b1580156200011757600080fd5b505af11580156200012c573d6000803e3d6000fd5b505050505050505050620001c3565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600380546001600160a01b039485166001600160a01b03199182161790915560019290925560028054919093169116179055565b615fc880620001d36000396000f3fe6080604052600436106102085760003560e01c8063a0be06f911610118578063dcacce69116100a0578063e8e337001161006f578063e8e3370014610d0d578063f2fde38b14610d8d578063f305d71914610dc0578063f543a80214610e06578063fb3bdb4114610e4157610223565b8063dcacce6914610bf3578063ded9382a14610c26578063e07769ed14610c99578063e6a4390514610cd257610223565b8063af2979eb116100e7578063af2979eb146109f5578063b6f9de9514610a48578063baa2abde14610acc578063c45a015514610b29578063d06ca61f14610b3e57610223565b8063a0be06f914610980578063ad5c464814610995578063ad615dec146109aa578063add10aa2146109e057610223565b80635b0d59841161019b5780637ff36ab51161016a5780637ff36ab51461080657806385f8c2591461088a5780638803dbee146108c05780638da5cb5b14610956578063966dae0e1461096b57610223565b80635b0d5984146106525780635c11d795146106c5578063715018a61461075b578063791ac9471461077057610223565b80631f00ca74116101d75780631f00ca74146103f35780632195995c146104a857806338ed1739146105265780634a25d94a146105bc57610223565b806302751cec14610228578063054d50d41461029457806308a17149146102dc57806318cbafe51461030d57610223565b36610223576006546001600160a01b0316331461022157fe5b005b600080fd5b34801561023457600080fd5b5061027b600480360360c081101561024b57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610ec5565b6040805192835260208301919091528051918290030190f35b3480156102a057600080fd5b506102ca600480360360608110156102b757600080fd5b5080359060208101359060400135610fb3565b60408051918252519081900360200190f35b3480156102e857600080fd5b506102f1610fcb565b604080516001600160a01b039092168252519081900360200190f35b34801561031957600080fd5b506103a3600480360360a081101561033057600080fd5b813591602081013591810190606081016040820135600160201b81111561035657600080fd5b82018360208201111561036857600080fd5b803590602001918460208302840111600160201b8311171561038957600080fd5b91935091506001600160a01b038135169060200135610fda565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103df5781810151838201526020016103c7565b505050509050019250505060405180910390f35b3480156103ff57600080fd5b506103a36004803603604081101561041657600080fd5b81359190810190604081016020820135600160201b81111561043757600080fd5b82018360208201111561044957600080fd5b803590602001918460208302840111600160201b8311171561046a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506113c1945050505050565b3480156104b457600080fd5b5061027b60048036036101608110156104cc57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff61010082013516906101208101359061014001356113e4565b34801561053257600080fd5b506103a3600480360360a081101561054957600080fd5b813591602081013591810190606081016040820135600160201b81111561056f57600080fd5b82018360208201111561058157600080fd5b803590602001918460208302840111600160201b831117156105a257600080fd5b91935091506001600160a01b0381351690602001356114cc565b3480156105c857600080fd5b506103a3600480360360a08110156105df57600080fd5b813591602081013591810190606081016040820135600160201b81111561060557600080fd5b82018360208201111561061757600080fd5b803590602001918460208302840111600160201b8311171561063857600080fd5b91935091506001600160a01b03813516906020013561172e565b34801561065e57600080fd5b506102ca600480360361014081101561067657600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611a92565b3480156106d157600080fd5b50610221600480360360a08110156106e857600080fd5b813591602081013591810190606081016040820135600160201b81111561070e57600080fd5b82018360208201111561072057600080fd5b803590602001918460208302840111600160201b8311171561074157600080fd5b91935091506001600160a01b038135169060200135611b75565b34801561076757600080fd5b50610221611ef8565b34801561077c57600080fd5b50610221600480360360a081101561079357600080fd5b813591602081013591810190606081016040820135600160201b8111156107b957600080fd5b8201836020820111156107cb57600080fd5b803590602001918460208302840111600160201b831117156107ec57600080fd5b91935091506001600160a01b038135169060200135611f66565b6103a36004803603608081101561081c57600080fd5b81359190810190604081016020820135600160201b81111561083d57600080fd5b82018360208201111561084f57600080fd5b803590602001918460208302840111600160201b8311171561087057600080fd5b91935091506001600160a01b0381351690602001356122e6565b34801561089657600080fd5b506102ca600480360360608110156108ad57600080fd5b50803590602081013590604001356126be565b3480156108cc57600080fd5b506103a3600480360360a08110156108e357600080fd5b813591602081013591810190606081016040820135600160201b81111561090957600080fd5b82018360208201111561091b57600080fd5b803590602001918460208302840111600160201b8311171561093c57600080fd5b91935091506001600160a01b0381351690602001356126ce565b34801561096257600080fd5b506102f1612968565b34801561097757600080fd5b506102f1612977565b34801561098c57600080fd5b506102ca612986565b3480156109a157600080fd5b506102f161298c565b3480156109b657600080fd5b506102ca600480360360608110156109cd57600080fd5b508035906020810135906040013561299b565b3480156109ec57600080fd5b506102f16129a8565b348015610a0157600080fd5b506102ca600480360360c0811015610a1857600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356129d4565b61022160048036036080811015610a5e57600080fd5b81359190810190604081016020820135600160201b811115610a7f57600080fd5b820183602082011115610a9157600080fd5b803590602001918460208302840111600160201b83111715610ab257600080fd5b91935091506001600160a01b038135169060200135612b34565b348015610ad857600080fd5b5061027b600480360360e0811015610aef57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612fa6565b348015610b3557600080fd5b506102f16131d7565b348015610b4a57600080fd5b506103a360048036036040811015610b6157600080fd5b81359190810190604081016020820135600160201b811115610b8257600080fd5b820183602082011115610b9457600080fd5b803590602001918460208302840111600160201b83111715610bb557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506131e6945050505050565b348015610bff57600080fd5b506102f160048036036020811015610c1657600080fd5b50356001600160a01b0316613200565b348015610c3257600080fd5b5061027b6004803603610140811015610c4a57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561321b565b348015610ca557600080fd5b5061022160048036036040811015610cbc57600080fd5b506001600160a01b038135169060200135613319565b348015610cde57600080fd5b506102f160048036036040811015610cf557600080fd5b506001600160a01b03813581169160200135166133f7565b348015610d1957600080fd5b50610d6f6004803603610100811015610d3157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613483565b60408051938452602084019290925282820152519081900360600190f35b348015610d9957600080fd5b5061022160048036036020811015610db057600080fd5b50356001600160a01b03166135ac565b610d6f600480360360c0811015610dd657600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561365f565b348015610e1257600080fd5b5061022160048036036040811015610e2957600080fd5b506001600160a01b038135811691602001351661388e565b6103a360048036036080811015610e5757600080fd5b81359190810190604081016020820135600160201b811115610e7857600080fd5b820183602082011115610e8a57600080fd5b803590602001918460208302840111600160201b83111715610eab57600080fd5b91935091506001600160a01b038135169060200135613b06565b6000808242811015610f0c576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b600654610f28908a906001600160a01b03168a8a8a308a612fa6565b9093509150610f38898685614133565b60065460408051632e1a7d4d60e01b81526004810185905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b158015610f8557600080fd5b505af1158015610f99573d6000803e3d6000fd5b50505050610fa78583614287565b50965096945050505050565b6000610fc384848460008061437f565b949350505050565b6002546001600160a01b031681565b60608142811015611020576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b6002851461105f5760405162461bcd60e51b8152600401808060200182810382526027815260200180615ef76027913960400191505060405180910390fd5b6006546001600160a01b03168686600019810181811061107b57fe5b905060200201356001600160a01b03166001600160a01b0316146110d4576040805162461bcd60e51b815260206004820152601c6024820152600080516020615caa833981519152604482015290519081900360640190fd5b6005546000908190611125906001600160a01b0316898984816110f357fe5b905060200201356001600160a01b03168a8a600181811061111057fe5b905060200201356001600160a01b0316614487565b6001600160a01b03808216600090815260046020526040812054929350911690899089908161115057fe5b905060200201356001600160a01b03166001600160a01b031614156111ad5761117b8a600154614547565b909a5091506111ad888860008161118e57fe5b905060200201356001600160a01b0316336111a76129a8565b85614587565b600554604080516020808b0282810182019093528a82526111f7936001600160a01b0316928e92918d918d918291908501908490808284376000920191909152506146e492505050565b9350888460018651038151811061120a57fe5b6020026020010151101561124f5760405162461bcd60e51b815260040180806020018281038252602a815260200180615e16602a913960400191505060405180910390fd5b61128b8888600081811061125f57fe5b905060200201356001600160a01b031633838760008151811061127e57fe5b6020026020010151614587565b6112ca84898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614969915050565b6000846001865103815181106112dc57fe5b6020908102919091018101516001600160a01b0380851660009081526004909352604090922054909250168989600181811061131457fe5b905060200201356001600160a01b03166001600160a01b031614156113445761133f81600154614547565b935090505b60065460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b15801561139157600080fd5b505af11580156113a5573d6000803e3d6000fd5b505050506113b38782614287565b505050509695505050505050565b6005546060906113db906001600160a01b03168484614bb8565b90505b92915050565b60055460009081908190611402906001600160a01b03168f8f614487565b9050600087611411578c611415565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561148b57600080fd5b505af115801561149f573d6000803e3d6000fd5b505050506114b28f8f8f8f8f8f8f612fa6565b809450819550505050509b509b9950505050505050505050565b60608142811015611512576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b600285146115515760405162461bcd60e51b8152600401808060200182810382526027815260200180615ef76027913960400191505060405180910390fd5b60055460009061158b906001600160a01b03168888848161156e57fe5b905060200201356001600160a01b03168989600181811061111057fe5b6001600160a01b038082166000908152600460205260408120549293509116888883816115b457fe5b905060200201356001600160a01b03166001600160a01b03161415611611576115df8a600154614547565b909a50905061161188886000816115f257fe5b905060200201356001600160a01b03163361160b6129a8565b84614587565b600554604080516020808b0282810182019093528a825261165b936001600160a01b0316928e92918d918d918291908501908490808284376000920191909152506146e492505050565b9350888460018651038151811061166e57fe5b602002602001015110156116b35760405162461bcd60e51b815260040180806020018281038252602a815260200180615e16602a913960400191505060405180910390fd5b6116e2888860008181106116c357fe5b905060200201356001600160a01b031633848760008151811061127e57fe5b611721848989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b9250614969915050565b5050509695505050505050565b60608142811015611774576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b600285146117b35760405162461bcd60e51b8152600401808060200182810382526027815260200180615ef76027913960400191505060405180910390fd5b6006546001600160a01b0316868660001981018181106117cf57fe5b905060200201356001600160a01b03166001600160a01b031614611828576040805162461bcd60e51b815260206004820152601c6024820152600080516020615caa833981519152604482015290519081900360640190fd5b6005546000908190611847906001600160a01b0316898984816110f357fe5b6001600160a01b03808216600090815260046020526040812054929350911690899089908161187257fe5b905060200201356001600160a01b03166001600160a01b031614156119f357600554604080516020808b0282810182019093528a82526118db936001600160a01b0316928e92918d918d91829190850190849080828437600092019190915250614bb892505050565b935088846000815181106118eb57fe5b602002602001015111156119305760405162461bcd60e51b8152600401808060200182810382526026815260200180615dc66026913960400191505060405180910390fd5b6119508460008151811061194057fe5b6020026020010151600154614547565b8560008151811061195d57fe5b6020026020010181945082815250505061197d8888600081811061118e57fe5b60055484516119dc916001600160a01b031690869060009061199b57fe5b60200260200101518a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506146e492505050565b93506119ee8888600081811061125f57fe5b61128b565b600554604080516020808b0282810182019093528a8252611a3d936001600160a01b0316928e92918d918d91829190850190849080828437600092019190915250614bb892505050565b93508884600081518110611a4d57fe5b6020026020010151111561124f5760405162461bcd60e51b8152600401808060200182810382526026815260200180615dc66026913960400191505060405180910390fd5b6005546006546000918291611ab5916001600160a01b03908116918f9116614487565b9050600086611ac4578b611ac8565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015611b3e57600080fd5b505af1158015611b52573d6000803e3d6000fd5b50505050611b648d8d8d8d8d8d6129d4565b9d9c50505050505050505050505050565b8042811015611bb9576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b60028414611bf85760405162461bcd60e51b8152600401808060200182810382526027815260200180615ef76027913960400191505060405180910390fd5b600554600090611c32906001600160a01b031687878481611c1557fe5b905060200201356001600160a01b03168888600181811061111057fe5b6001600160a01b03808216600090815260046020526040812054929350911687878381611c5b57fe5b905060200201356001600160a01b03166001600160a01b03161415611c9957611c8689600154614547565b9099509050611c9987876000816115f257fe5b611cc187876000818110611ca957fe5b905060200201356001600160a01b031633848c614587565b600087876000198101818110611cd357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611d3857600080fd5b505afa158015611d4c573d6000803e3d6000fd5b505050506040513d6020811015611d6257600080fd5b50516040805160208a810282810182019093528a8252929350611da49290918b918b9182918501908490808284376000920191909152508a9250614e1d915050565b6001600160a01b038084166000908152600460205260409020541688886001818110611dcc57fe5b905060200201356001600160a01b03166001600160a01b03161415611dfd57611df789600154614547565b90995091505b88611eaf828a8a6000198101818110611e1257fe5b905060200201356001600160a01b03166001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e7757600080fd5b505afa158015611e8b573d6000803e3d6000fd5b505050506040513d6020811015611ea157600080fd5b50519063ffffffff61505716565b1015611eec5760405162461bcd60e51b815260040180806020018281038252602a815260200180615e16602a913960400191505060405180910390fd5b50505050505050505050565b611f006150a7565b6001600160a01b0316611f11612968565b6001600160a01b031614611f5a576040805162461bcd60e51b81526020600482018190526024820152600080516020615e67833981519152604482015290519081900360640190fd5b611f6460006150ab565b565b8042811015611faa576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b60028414611fe95760405162461bcd60e51b8152600401808060200182810382526027815260200180615ef76027913960400191505060405180910390fd5b6006546001600160a01b03168585600019810181811061200557fe5b905060200201356001600160a01b03166001600160a01b03161461205e576040805162461bcd60e51b815260206004820152601c6024820152600080516020615caa833981519152604482015290519081900360640190fd5b60055460009061207b906001600160a01b031687878481611c1557fe5b6001600160a01b0380821660009081526004602052604081205492935091169087908790816120a657fe5b905060200201356001600160a01b03166001600160a01b0316141561210d5760006127106120df6001548b6150fb90919063ffffffff16565b816120e657fe5b0490506120f9898263ffffffff61505716565b985061210b878760008181106115f257fe5b505b6121358686600081811061211d57fe5b905060200201356001600160a01b031633838b614587565b612173868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614e1d915050565b600654604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156121be57600080fd5b505afa1580156121d2573d6000803e3d6000fd5b505050506040513d60208110156121e857600080fd5b50516001600160a01b03808416600090815260046020526040902054919250168787600181811061221557fe5b905060200201356001600160a01b03166001600160a01b0316141561226c57600061271061224e600154846150fb90919063ffffffff16565b8161225557fe5b049050612268828263ffffffff61505716565b9150505b60065460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156122b957600080fd5b505af11580156122cd573d6000803e3d6000fd5b505050506122db8582614287565b505050505050505050565b6060814281101561232c576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b6002851461236b5760405162461bcd60e51b8152600401808060200182810382526027815260200180615ef76027913960400191505060405180910390fd5b6006546001600160a01b0316868660008161238257fe5b905060200201356001600160a01b03166001600160a01b0316146123db576040805162461bcd60e51b815260206004820152601c6024820152600080516020615caa833981519152604482015290519081900360640190fd5b60055434906000906123fa906001600160a01b0316898984816110f357fe5b6001600160a01b0380821660009081526004602052604081205492935091168989838161242357fe5b905060200201356001600160a01b03166001600160a01b031614156124b55761244e83600154614547565b909350905061245b6129a8565b6001600160a01b0316306001600160a01b0316146124b55761247b6129a8565b6001600160a01b03166108fc829081150290604051600060405180830381858888f193505050501580156124b3573d6000803e3d6000fd5b505b600554604080516020808c0282810182019093528b82526124ff936001600160a01b0316923492918e918e918291908501908490808284376000920191909152506146e492505050565b9450898560018751038151811061251257fe5b602002602001015110156125575760405162461bcd60e51b815260040180806020018281038252602a815260200180615e16602a913960400191505060405180910390fd5b60065485516001600160a01b039091169063d0e30db090879060009061257957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156125ac57600080fd5b505af11580156125c0573d6000803e3d6000fd5b505060065488516001600160a01b03909116935063a9059cbb925085915088906000906125e957fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561264057600080fd5b505af1158015612654573d6000803e3d6000fd5b505050506040513d602081101561266a57600080fd5b505161267257fe5b6126b1858a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508c9250614969915050565b5050505095945050505050565b6000610fc384848460008061515e565b60608142811015612714576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b600285146127535760405162461bcd60e51b8152600401808060200182810382526027815260200180615ef76027913960400191505060405180910390fd5b600554600090612770906001600160a01b03168888848161156e57fe5b6001600160a01b0380821660009081526004602052604081205492935091168888838161279957fe5b905060200201356001600160a01b03166001600160a01b031614156128c957600554604080516020808b0282810182019093528a8252612802936001600160a01b0316928e92918d918d91829190850190849080828437600092019190915250614bb892505050565b9350888460008151811061281257fe5b602002602001015111156128575760405162461bcd60e51b8152600401808060200182810382526026815260200180615dc66026913960400191505060405180910390fd5b6128678460008151811061194057fe5b8560008151811061287457fe5b60200260200101819350828152505050612894888860008181106115f257fe5b60055484516128b2916001600160a01b031690869060009061199b57fe5b93506128c4888860008181106116c357fe5b6116e2565b600554604080516020808b0282810182019093528a8252612913936001600160a01b0316928e92918d918d91829190850190849080828437600092019190915250614bb892505050565b9350888460008151811061292357fe5b602002602001015111156116b35760405162461bcd60e51b8152600401808060200182810382526026815260200180615dc66026913960400191505060405180910390fd5b6000546001600160a01b031690565b6003546001600160a01b031681565b60015481565b6006546001600160a01b031681565b6000610fc3848484615266565b6002546000906001600160a01b0316156129cd576002546001600160a01b03166129cf565b305b905090565b60008142811015612a1a576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b600654612a369089906001600160a01b03168989893089612fa6565b604080516370a0823160e01b81523060048201529051919450612aba92508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015612a8957600080fd5b505afa158015612a9d573d6000803e3d6000fd5b505050506040513d6020811015612ab357600080fd5b5051614133565b60065460408051632e1a7d4d60e01b81526004810185905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b158015612b0757600080fd5b505af1158015612b1b573d6000803e3d6000fd5b50505050612b298483614287565b509695505050505050565b8042811015612b78576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b60028414612bb75760405162461bcd60e51b8152600401808060200182810382526027815260200180615ef76027913960400191505060405180910390fd5b6006546001600160a01b03168585600081612bce57fe5b905060200201356001600160a01b03166001600160a01b031614612c27576040805162461bcd60e51b815260206004820152601c6024820152600080516020615caa833981519152604482015290519081900360640190fd5b6005543490600090612c46906001600160a01b03168888848161156e57fe5b6001600160a01b03808216600090815260046020526040812054929350911688888381612c6f57fe5b905060200201356001600160a01b03166001600160a01b03161415612d0157612c9a83600154614547565b9093509050612ca76129a8565b6001600160a01b0316306001600160a01b031614612d0157612cc76129a8565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015612cff573d6000803e3d6000fd5b505b600660009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015612d5157600080fd5b505af1158015612d65573d6000803e3d6000fd5b50506006546040805163a9059cbb60e01b81526001600160a01b038881166004830152602482018a9052915191909216945063a9059cbb9350604480830193506020928290030181600087803b158015612dbe57600080fd5b505af1158015612dd2573d6000803e3d6000fd5b505050506040513d6020811015612de857600080fd5b5051612df057fe5b600088886000198101818110612e0257fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612e6757600080fd5b505afa158015612e7b573d6000803e3d6000fd5b505050506040513d6020811015612e9157600080fd5b50516040805160208b810282810182019093528b8252929350612ed39290918c918c9182918501908490808284376000920191909152508b9250614e1d915050565b6001600160a01b038084166000908152600460205260409020541689896001818110612efb57fe5b905060200201356001600160a01b03166001600160a01b03161415612f2c57612f268a600154614547565b909a5091505b89611eaf828b8b6000198101818110612f4157fe5b905060200201356001600160a01b03166001600160a01b03166370a082318b6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e7757600080fd5b6000808242811015612fed576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b600554600090613007906001600160a01b03168c8c614487565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561306257600080fd5b505af1158015613076573d6000803e3d6000fd5b505050506040513d602081101561308c57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156130d957600080fd5b505af11580156130ed573d6000803e3d6000fd5b505050506040513d604081101561310357600080fd5b5080516020909101519092509050600061311d8e8e615312565b509050806001600160a01b03168e6001600160a01b031614613140578183613143565b82825b90975095508a8710156131875760405162461bcd60e51b8152600401808060200182810382526025815260200180615d796025913960400191505060405180910390fd5b898610156131c65760405162461bcd60e51b8152600401808060200182810382526025815260200180615ed26025913960400191505060405180910390fd5b505050505097509795505050505050565b6005546001600160a01b031681565b6005546060906113db906001600160a01b031684846146e4565b6004602052600090815260409020546001600160a01b031681565b6000806000613255600560009054906101000a90046001600160a01b03168e600660009054906101000a90046001600160a01b0316614487565b9050600087613264578c613268565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156132de57600080fd5b505af11580156132f2573d6000803e3d6000fd5b505050506133048e8e8e8e8e8e610ec5565b909f909e509c50505050505050505050505050565b6133216150a7565b6001600160a01b0316613332612968565b6001600160a01b03161461337b576040805162461bcd60e51b81526020600482018190526024820152600080516020615e67833981519152604482015290519081900360640190fd5b60648111156133d1576040805162461bcd60e51b815260206004820152601860248201527f52415245537761703a2046656520657863656564732031250000000000000000604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b039390931692909217909155600155565b6005546040805163e6a4390560e01b81526001600160a01b03858116600483015284811660248301529151600093929092169163e6a4390591604480820192602092909190829003018186803b15801561345057600080fd5b505afa158015613464573d6000803e3d6000fd5b505050506040513d602081101561347a57600080fd5b50519392505050565b600080600083428110156134cc576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b6134da8c8c8c8c8c8c6153e9565b60055491955093506000906134f9906001600160a01b03168e8e614487565b90506135078d338388614587565b6135138c338387614587565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561356b57600080fd5b505af115801561357f573d6000803e3d6000fd5b505050506040513d602081101561359557600080fd5b5051949d939c50939a509198505050505050505050565b6135b46150a7565b6001600160a01b03166135c5612968565b6001600160a01b03161461360e576040805162461bcd60e51b81526020600482018190526024820152600080516020615e67833981519152604482015290519081900360640190fd5b6001600160a01b0381166136535760405162461bcd60e51b8152600401808060200182810382526026815260200180615cee6026913960400191505060405180910390fd5b61365c816150ab565b50565b600080600083428110156136a8576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b6006546136c2906001600160a01b03168b348c8b8d6153e9565b6005546006549296509094506000916136e9916001600160a01b03908116918e9116614487565b90506136f78b338387614587565b600660009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0866040518263ffffffff1660e01b81526004016000604051808303818588803b15801561374757600080fd5b505af115801561375b573d6000803e3d6000fd5b50506006546040805163a9059cbb60e01b81526001600160a01b038781166004830152602482018c9052915191909216945063a9059cbb9350604480830193506020928290030181600087803b1580156137b457600080fd5b505af11580156137c8573d6000803e3d6000fd5b505050506040513d60208110156137de57600080fd5b50516137e657fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561383e57600080fd5b505af1158015613852573d6000803e3d6000fd5b505050506040513d602081101561386857600080fd5b50519250348510156138805761388033863403614287565b505096509650969350505050565b6138966150a7565b6001600160a01b03166138a7612968565b6001600160a01b0316146138f0576040805162461bcd60e51b81526020600482018190526024820152600080516020615e67833981519152604482015290519081900360640190fd5b6003546040805163ac393aff60e01b81526001600160a01b0385811660048301529151919092169163ac393aff916024808301926020929190829003018186803b15801561393d57600080fd5b505afa158015613951573d6000803e3d6000fd5b505050506040513d602081101561396757600080fd5b50516139a45760405162461bcd60e51b8152600401808060200182810382526024815260200180615f6f6024913960400191505060405180910390fd5b806001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156139e757600080fd5b505afa1580156139fb573d6000803e3d6000fd5b505050506040513d6020811015613a1157600080fd5b50516001600160a01b03161480613a9d5750806001600160a01b0316826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015613a6657600080fd5b505afa158015613a7a573d6000803e3d6000fd5b505050506040513d6020811015613a9057600080fd5b50516001600160a01b0316145b613ad85760405162461bcd60e51b8152600401808060200182810382526028815260200180615d9e6028913960400191505060405180910390fd5b6001600160a01b03918216600090815260046020526040902080546001600160a01b03191691909216179055565b60608142811015613b4c576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b60028514613b8b5760405162461bcd60e51b8152600401808060200182810382526027815260200180615ef76027913960400191505060405180910390fd5b6006546001600160a01b03168686600081613ba257fe5b905060200201356001600160a01b03166001600160a01b031614613bfb576040805162461bcd60e51b815260206004820152601c6024820152600080516020615caa833981519152604482015290519081900360640190fd5b600554600090613c18906001600160a01b03168888848161156e57fe5b6001600160a01b03808216600090815260046020526040812054929350911688888381613c4157fe5b905060200201356001600160a01b03166001600160a01b03161415613ecd57600554604080516020808b0282810182019093528a8252613caa936001600160a01b0316928d92918d918d91829190850190849080828437600092019190915250614bb892505050565b93503484600081518110613cba57fe5b60200260200101511115613cff5760405162461bcd60e51b8152600401808060200182810382526026815260200180615dc66026913960400191505060405180910390fd5b613d0f8460008151811061194057fe5b85600081518110613d1c57fe5b60200260200101819350828152505050613d346129a8565b6001600160a01b0316306001600160a01b031614613d8e57613d546129a8565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015613d8c573d6000803e3d6000fd5b505b6005548451613dac916001600160a01b031690869060009061199b57fe5b60065481519195506001600160a01b03169063d0e30db0908690600090613dcf57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015613e0257600080fd5b505af1158015613e16573d6000803e3d6000fd5b505060065487516001600160a01b03909116935063a9059cbb92508591508790600090613e3f57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613e9657600080fd5b505af1158015613eaa573d6000803e3d6000fd5b505050506040513d6020811015613ec057600080fd5b5051613ec857fe5b6140b5565b600554604080516020808b0282810182019093528a8252613f17936001600160a01b0316928d92918d918d91829190850190849080828437600092019190915250614bb892505050565b93503484600081518110613f2757fe5b60200260200101511115613f6c5760405162461bcd60e51b8152600401808060200182810382526026815260200180615dc66026913960400191505060405180910390fd5b60065484516001600160a01b039091169063d0e30db0908690600090613f8e57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015613fc157600080fd5b505af1158015613fd5573d6000803e3d6000fd5b50506006546005546001600160a01b03918216945063a9059cbb935061401f9250168b8b60008161400257fe5b905060200201356001600160a01b03168c8c600181811061111057fe5b8660008151811061402c57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561408357600080fd5b505af1158015614097573d6000803e3d6000fd5b505050506040513d60208110156140ad57600080fd5b50516140b557fe5b6140f4848989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b9250614969915050565b600061411d828660008151811061410757fe5b602002602001015161577690919063ffffffff16565b9050803411156126b1576126b133823403614287565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106141b05780518252601f199092019160209182019101614191565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614212576040519150601f19603f3d011682016040523d82523d6000602084013e614217565b606091505b5091509150818015614245575080511580614245575080806020019051602081101561424257600080fd5b50515b6142805760405162461bcd60e51b815260040180806020018281038252602d815260200180615f42602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106142d35780518252601f1990920191602091820191016142b4565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614335576040519150601f19603f3d011682016040523d82523d6000602084013e61433a565b606091505b505090508061437a5760405162461bcd60e51b8152600401808060200182810382526034815260200180615d456034913960400191505060405180910390fd5b505050565b60008086116143bf5760405162461bcd60e51b815260040180806020018281038252602a815260200180615dec602a913960400191505060405180910390fd5b6000851180156143cf5750600084115b61440a5760405162461bcd60e51b8152600401808060200182810382526027815260200180615e406027913960400191505060405180910390fd5b6000836144195761271061441f565b82612710035b90506000614433888363ffffffff6150fb16565b90506000614447828863ffffffff6150fb16565b9050600061446d836144618b61271063ffffffff6150fb16565b9063ffffffff61577616565b905080828161447857fe5b049a9950505050505050505050565b60008060006144968585615312565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f8d5eb48a29e28c3f8b5e9069d5c3e5b0913896e4ff564c3a3cef172ae085cfda609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6000808061271061455e868663ffffffff6150fb16565b8161456557fe5b049050614578858263ffffffff61505716565b945084925090505b9250929050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b6020831061460c5780518252601f1990920191602091820191016145ed565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461466e576040519150601f19603f3d011682016040523d82523d6000602084013e614673565b606091505b50915091508180156146a15750805115806146a1575080806020019051602081101561469e57600080fd5b50515b6146dc5760405162461bcd60e51b8152600401808060200182810382526031815260200180615d146031913960400191505060405180910390fd5b505050505050565b606060028251101561473d576040805162461bcd60e51b815260206004820152601d60248201527f52415245537761704c6962726172793a20494e56414c49445f50415448000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561475557600080fd5b5060405190808252806020026020018201604052801561477f578160200160208202803683370190505b509050828160008151811061479057fe5b60200260200101818152505060005b60018351038110156149615760006147e1868584815181106147bd57fe5b60200260200101518685600101815181106147d457fe5b6020026020010151614487565b90506000816001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b15801561481e57600080fd5b505afa158015614832573d6000803e3d6000fd5b505050506040513d602081101561484857600080fd5b5051604080516307ae316d60e41b815290519192506000916001600160a01b03851691637ae316d0916004808301926020929190829003018186803b15801561489057600080fd5b505afa1580156148a4573d6000803e3d6000fd5b505050506040513d60208110156148ba57600080fd5b5051865190915060009081906148fc908b908a90899081106148d857fe5b60200260200101518a89600101815181106148ef57fe5b60200260200101516157c5565b9150915061493687878151811061490f57fe5b6020026020010151838360006001600160a01b0316886001600160a01b031614158761437f565b87876001018151811061494557fe5b602090810291909101015250506001909301925061479f915050565b509392505050565b60005b6001835103811015614bb25760008084838151811061498757fe5b602002602001015185846001018151811061499e57fe5b60200260200101519150915060006149b68383615312565b50905060008785600101815181106149ca57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146149f8578260006149fc565b6000835b91509150600080614a2388888e8c81518110614a1457fe5b6020026020010151878761588c565b91509150600060028c51038a10614a3a578a614a5e565b6005548c51614a5e916001600160a01b0316908a908f9060028f019081106147d457fe5b600554909150614a78906001600160a01b03168a8a614487565b6001600160a01b031663f8b134c6868686868660006040519080825280601f01601f191660200182016040528015614ab7576020820181803683370190505b506040518763ffffffff1660e01b815260040180878152602001868152602001858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614b34578181015183820152602001614b1c565b50505050905090810190601f168015614b615780820380516001836020036101000a031916815260200191505b50975050505050505050600060405180830381600087803b158015614b8557600080fd5b505af1158015614b99573d6000803e3d6000fd5b50506001909b019a5061496c9950505050505050505050565b50505050565b6060600282511015614c11576040805162461bcd60e51b815260206004820152601d60248201527f52415245537761704c6962726172793a20494e56414c49445f50415448000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015614c2957600080fd5b50604051908082528060200260200182016040528015614c53578160200160208202803683370190505b5090508281600183510381518110614c6757fe5b60209081029190910101528151600019015b8015614961576000614ca886856001850381518110614c9457fe5b60200260200101518685815181106147d457fe5b90506000816001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b158015614ce557600080fd5b505afa158015614cf9573d6000803e3d6000fd5b505050506040513d6020811015614d0f57600080fd5b5051604080516307ae316d60e41b815290519192506000916001600160a01b03851691637ae316d0916004808301926020929190829003018186803b158015614d5757600080fd5b505afa158015614d6b573d6000803e3d6000fd5b505050506040513d6020811015614d8157600080fd5b505186519091506000908190614db7908b908a906000198a01908110614da357fe5b60200260200101518a89815181106148ef57fe5b91509150614df1878781518110614dca57fe5b6020026020010151838360006001600160a01b0316886001600160a01b031614158761515e565b876001880381518110614e0057fe5b602090810291909101015250506000199093019250614c79915050565b60005b600183510381101561437a57600080848381518110614e3b57fe5b6020026020010151858460010181518110614e5257fe5b6020026020010151915091506000614e6a8383615312565b509050600080614e7b858585615a86565b91509150600080846001600160a01b0316876001600160a01b031614614ea357826000614ea7565b6000835b91509150600080614ebb898988878761588c565b91509150600060028d51038b10614ed2578b614efb565b614efb600560009054906101000a90046001600160a01b03168a8f8e600201815181106147d457fe5b600554909150600090614f18906001600160a01b03168c8c614487565b90506001600160a01b03811663f8b134c6878787878760006040519080825280601f01601f191660200182016040528015614f5a576020820181803683370190505b506040518763ffffffff1660e01b815260040180878152602001868152602001858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614fd7578181015183820152602001614fbf565b50505050905090810190601f1680156150045780820380516001836020036101000a031916815260200191505b50975050505050505050600060405180830381600087803b15801561502857600080fd5b505af115801561503c573d6000803e3d6000fd5b50506001909d019c50614e209b505050505050505050505050565b808203828111156113de576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008115806151165750508082028282828161511357fe5b04145b6113de576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b600080861161519e5760405162461bcd60e51b815260040180806020018281038252602b815260200180615ea7602b913960400191505060405180910390fd5b6000851180156151ae5750600084115b6151e95760405162461bcd60e51b8152600401808060200182810382526027815260200180615e406027913960400191505060405180910390fd5b6000836151f8576127106151fe565b82612710035b90506000615224612710615218898b63ffffffff6150fb16565b9063ffffffff6150fb16565b9050600061523c83615218898c63ffffffff61505716565b9050615259600182848161524c57fe5b049063ffffffff61577616565b9998505050505050505050565b60008084116152a65760405162461bcd60e51b8152600401808060200182810382526024815260200180615cca6024913960400191505060405180910390fd5b6000831180156152b65750600082115b6152f15760405162461bcd60e51b8152600401808060200182810382526027815260200180615e406027913960400191505060405180910390fd5b82615302858463ffffffff6150fb16565b8161530957fe5b04949350505050565b600080826001600160a01b0316846001600160a01b031614156153665760405162461bcd60e51b8152600401808060200182810382526024815260200180615f1e6024913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610615386578284615389565b83835b90925090506001600160a01b038216614580576040805162461bcd60e51b815260206004820152601d60248201527f52415245537761704c6962726172793a205a45524f5f41444452455353000000604482015290519081900360640190fd5b600080806153f789896133f7565b6001600160a01b031614156155aa576006546001600160a01b03898116911614156154e557600554604080516364e329cb60e11b81526001600160a01b038a811660048301528b811660248301529151919092169163c9c653969160448083019260209291908290030181600087803b15801561547357600080fd5b505af1158015615487573d6000803e3d6000fd5b505050506040513d602081101561549d57600080fd5b50889050600460006154af838b6133f7565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790556155aa565b600554604080516364e329cb60e11b81526001600160a01b038b811660048301528a811660248301529151919092169163c9c653969160448083019260209291908290030181600087803b15801561553c57600080fd5b505af1158015615550573d6000803e3d6000fd5b505050506040513d602081101561556657600080fd5b50879050600460006155788b846133f7565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790555b60055460009081906155c6906001600160a01b03168b8b6157c5565b915091508160001480156155d8575080155b156156a9576006548894508793506001600160a01b038b81169116141561563e5789600460006156088d8d6133f7565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790556156a4565b6007546001600160a01b038b8116911614156156635789600460006156088d8d6133f7565b88600460006156728d8d6133f7565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790555b615769565b60006156b6898484615266565b905087811161570957858110156156fe5760405162461bcd60e51b8152600401808060200182810382526025815260200180615ed26025913960400191505060405180910390fd5b889450925082615767565b6000615716898486615266565b90508981111561572257fe5b878110156157615760405162461bcd60e51b8152600401808060200182810382526025815260200180615d796025913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b808201828110156113de576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006157d48585615312565b5090506000806157e5888888614487565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160806040518083038186803b15801561581d57600080fd5b505afa158015615831573d6000803e3d6000fd5b505050506040513d608081101561584757600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b038781169084161461587a57808261587d565b81815b90999098509650505050505050565b600554600090819081906158aa906001600160a01b03168989614487565b905060006158b88989615312565b5090506000826001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b1580156158f657600080fd5b505afa15801561590a573d6000803e3d6000fd5b505050506040513d602081101561592057600080fd5b5051604080516307ae316d60e41b815290519192506000916001600160a01b03861691637ae316d0916004808301926020929190829003018186803b15801561596857600080fd5b505afa15801561597c573d6000803e3d6000fd5b505050506040513d602081101561599257600080fd5b505190506001600160a01b038281169084161415615a0557826001600160a01b03168b6001600160a01b0316146159ea576159e56127106159d98a8463ffffffff6150fb16565b9063ffffffff615c4a16565b615a00565b615a006127106159d98b8463ffffffff6150fb16565b615a08565b60005b9550826001600160a01b0316826001600160a01b031614615a7357826001600160a01b03168b6001600160a01b03161415615a5857615a536127106159d9898463ffffffff6150fb16565b615a6e565b615a6e6127106159d98b8463ffffffff6150fb16565b615a76565b60005b9450505050509550959350505050565b60055460009081908190615aa4906001600160a01b03168787614487565b90506000806000836001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160806040518083038186803b158015615ae457600080fd5b505afa158015615af8573d6000803e3d6000fd5b505050506040513d6080811015615b0e57600080fd5b508051602080830151606090930151604080516307ae316d60e41b815290516001600160701b03948516985093909416955093506000926001600160a01b03881692637ae316d092600480840193919291829003018186803b158015615b7357600080fd5b505afa158015615b87573d6000803e3d6000fd5b505050506040513d6020811015615b9d57600080fd5b505190506000806001600160a01b038c8116908b1614615bbe578486615bc1565b85855b91509150615c1f828d6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e7757600080fd5b9850615c398983836001600160a01b03881615158761437f565b975050505050505050935093915050565b6000808211615c98576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d6469762d756e646572666c6f7760581b604482015290519081900360640190fd5b818381615ca157fe5b04939250505056fe5241524553776170526f757465723a20494e56414c49445f504154480000000052415245537761704c6962726172793a20494e53554646494349454e545f414d4f554e544f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c65645241524553776170526f757465723a20494e53554646494349454e545f415f414d4f554e5452415245537761702046656553746f72653a20496e76616c696420746f6b656e20616464726573735241524553776170526f757465723a204558434553534956455f494e5055545f414d4f554e5452415245537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545241524553776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5452415245537761704c6962726172793a20494e53554646494349454e545f4c49515549444954594f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725241524553776170526f757465723a204558504952454400000000000000000052415245537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545241524553776170526f757465723a20494e53554646494349454e545f425f414d4f554e545241524553776170526f757465723a204f4e4c595f54574f5f544f4b454e535f414c4c4f57454452415245537761704c6962726172793a204944454e544943414c5f4144445245535345535472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c656452415245537761702046656553746f72653a2050616972206973206e6f74204578697374a2646970667358221220931bf6ff12243863091525b1a373acd415b9fda72b6e5a3528fda022fe7e90dd64736f6c634300060600330000000000000000000000009deeb73e971127b2634d7633182004380774451f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000004fabb145d64652a948d72533023f6e7a623c7c53000000000000000000000000000000000000000000000000000000000000006400000000000000000000000018b1dd3673a64f287ea1975f04dd1f462363735c
Deployed Bytecode
0x6080604052600436106102085760003560e01c8063a0be06f911610118578063dcacce69116100a0578063e8e337001161006f578063e8e3370014610d0d578063f2fde38b14610d8d578063f305d71914610dc0578063f543a80214610e06578063fb3bdb4114610e4157610223565b8063dcacce6914610bf3578063ded9382a14610c26578063e07769ed14610c99578063e6a4390514610cd257610223565b8063af2979eb116100e7578063af2979eb146109f5578063b6f9de9514610a48578063baa2abde14610acc578063c45a015514610b29578063d06ca61f14610b3e57610223565b8063a0be06f914610980578063ad5c464814610995578063ad615dec146109aa578063add10aa2146109e057610223565b80635b0d59841161019b5780637ff36ab51161016a5780637ff36ab51461080657806385f8c2591461088a5780638803dbee146108c05780638da5cb5b14610956578063966dae0e1461096b57610223565b80635b0d5984146106525780635c11d795146106c5578063715018a61461075b578063791ac9471461077057610223565b80631f00ca74116101d75780631f00ca74146103f35780632195995c146104a857806338ed1739146105265780634a25d94a146105bc57610223565b806302751cec14610228578063054d50d41461029457806308a17149146102dc57806318cbafe51461030d57610223565b36610223576006546001600160a01b0316331461022157fe5b005b600080fd5b34801561023457600080fd5b5061027b600480360360c081101561024b57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610ec5565b6040805192835260208301919091528051918290030190f35b3480156102a057600080fd5b506102ca600480360360608110156102b757600080fd5b5080359060208101359060400135610fb3565b60408051918252519081900360200190f35b3480156102e857600080fd5b506102f1610fcb565b604080516001600160a01b039092168252519081900360200190f35b34801561031957600080fd5b506103a3600480360360a081101561033057600080fd5b813591602081013591810190606081016040820135600160201b81111561035657600080fd5b82018360208201111561036857600080fd5b803590602001918460208302840111600160201b8311171561038957600080fd5b91935091506001600160a01b038135169060200135610fda565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103df5781810151838201526020016103c7565b505050509050019250505060405180910390f35b3480156103ff57600080fd5b506103a36004803603604081101561041657600080fd5b81359190810190604081016020820135600160201b81111561043757600080fd5b82018360208201111561044957600080fd5b803590602001918460208302840111600160201b8311171561046a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506113c1945050505050565b3480156104b457600080fd5b5061027b60048036036101608110156104cc57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff61010082013516906101208101359061014001356113e4565b34801561053257600080fd5b506103a3600480360360a081101561054957600080fd5b813591602081013591810190606081016040820135600160201b81111561056f57600080fd5b82018360208201111561058157600080fd5b803590602001918460208302840111600160201b831117156105a257600080fd5b91935091506001600160a01b0381351690602001356114cc565b3480156105c857600080fd5b506103a3600480360360a08110156105df57600080fd5b813591602081013591810190606081016040820135600160201b81111561060557600080fd5b82018360208201111561061757600080fd5b803590602001918460208302840111600160201b8311171561063857600080fd5b91935091506001600160a01b03813516906020013561172e565b34801561065e57600080fd5b506102ca600480360361014081101561067657600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611a92565b3480156106d157600080fd5b50610221600480360360a08110156106e857600080fd5b813591602081013591810190606081016040820135600160201b81111561070e57600080fd5b82018360208201111561072057600080fd5b803590602001918460208302840111600160201b8311171561074157600080fd5b91935091506001600160a01b038135169060200135611b75565b34801561076757600080fd5b50610221611ef8565b34801561077c57600080fd5b50610221600480360360a081101561079357600080fd5b813591602081013591810190606081016040820135600160201b8111156107b957600080fd5b8201836020820111156107cb57600080fd5b803590602001918460208302840111600160201b831117156107ec57600080fd5b91935091506001600160a01b038135169060200135611f66565b6103a36004803603608081101561081c57600080fd5b81359190810190604081016020820135600160201b81111561083d57600080fd5b82018360208201111561084f57600080fd5b803590602001918460208302840111600160201b8311171561087057600080fd5b91935091506001600160a01b0381351690602001356122e6565b34801561089657600080fd5b506102ca600480360360608110156108ad57600080fd5b50803590602081013590604001356126be565b3480156108cc57600080fd5b506103a3600480360360a08110156108e357600080fd5b813591602081013591810190606081016040820135600160201b81111561090957600080fd5b82018360208201111561091b57600080fd5b803590602001918460208302840111600160201b8311171561093c57600080fd5b91935091506001600160a01b0381351690602001356126ce565b34801561096257600080fd5b506102f1612968565b34801561097757600080fd5b506102f1612977565b34801561098c57600080fd5b506102ca612986565b3480156109a157600080fd5b506102f161298c565b3480156109b657600080fd5b506102ca600480360360608110156109cd57600080fd5b508035906020810135906040013561299b565b3480156109ec57600080fd5b506102f16129a8565b348015610a0157600080fd5b506102ca600480360360c0811015610a1857600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356129d4565b61022160048036036080811015610a5e57600080fd5b81359190810190604081016020820135600160201b811115610a7f57600080fd5b820183602082011115610a9157600080fd5b803590602001918460208302840111600160201b83111715610ab257600080fd5b91935091506001600160a01b038135169060200135612b34565b348015610ad857600080fd5b5061027b600480360360e0811015610aef57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612fa6565b348015610b3557600080fd5b506102f16131d7565b348015610b4a57600080fd5b506103a360048036036040811015610b6157600080fd5b81359190810190604081016020820135600160201b811115610b8257600080fd5b820183602082011115610b9457600080fd5b803590602001918460208302840111600160201b83111715610bb557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506131e6945050505050565b348015610bff57600080fd5b506102f160048036036020811015610c1657600080fd5b50356001600160a01b0316613200565b348015610c3257600080fd5b5061027b6004803603610140811015610c4a57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561321b565b348015610ca557600080fd5b5061022160048036036040811015610cbc57600080fd5b506001600160a01b038135169060200135613319565b348015610cde57600080fd5b506102f160048036036040811015610cf557600080fd5b506001600160a01b03813581169160200135166133f7565b348015610d1957600080fd5b50610d6f6004803603610100811015610d3157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613483565b60408051938452602084019290925282820152519081900360600190f35b348015610d9957600080fd5b5061022160048036036020811015610db057600080fd5b50356001600160a01b03166135ac565b610d6f600480360360c0811015610dd657600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561365f565b348015610e1257600080fd5b5061022160048036036040811015610e2957600080fd5b506001600160a01b038135811691602001351661388e565b6103a360048036036080811015610e5757600080fd5b81359190810190604081016020820135600160201b811115610e7857600080fd5b820183602082011115610e8a57600080fd5b803590602001918460208302840111600160201b83111715610eab57600080fd5b91935091506001600160a01b038135169060200135613b06565b6000808242811015610f0c576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b600654610f28908a906001600160a01b03168a8a8a308a612fa6565b9093509150610f38898685614133565b60065460408051632e1a7d4d60e01b81526004810185905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b158015610f8557600080fd5b505af1158015610f99573d6000803e3d6000fd5b50505050610fa78583614287565b50965096945050505050565b6000610fc384848460008061437f565b949350505050565b6002546001600160a01b031681565b60608142811015611020576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b6002851461105f5760405162461bcd60e51b8152600401808060200182810382526027815260200180615ef76027913960400191505060405180910390fd5b6006546001600160a01b03168686600019810181811061107b57fe5b905060200201356001600160a01b03166001600160a01b0316146110d4576040805162461bcd60e51b815260206004820152601c6024820152600080516020615caa833981519152604482015290519081900360640190fd5b6005546000908190611125906001600160a01b0316898984816110f357fe5b905060200201356001600160a01b03168a8a600181811061111057fe5b905060200201356001600160a01b0316614487565b6001600160a01b03808216600090815260046020526040812054929350911690899089908161115057fe5b905060200201356001600160a01b03166001600160a01b031614156111ad5761117b8a600154614547565b909a5091506111ad888860008161118e57fe5b905060200201356001600160a01b0316336111a76129a8565b85614587565b600554604080516020808b0282810182019093528a82526111f7936001600160a01b0316928e92918d918d918291908501908490808284376000920191909152506146e492505050565b9350888460018651038151811061120a57fe5b6020026020010151101561124f5760405162461bcd60e51b815260040180806020018281038252602a815260200180615e16602a913960400191505060405180910390fd5b61128b8888600081811061125f57fe5b905060200201356001600160a01b031633838760008151811061127e57fe5b6020026020010151614587565b6112ca84898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614969915050565b6000846001865103815181106112dc57fe5b6020908102919091018101516001600160a01b0380851660009081526004909352604090922054909250168989600181811061131457fe5b905060200201356001600160a01b03166001600160a01b031614156113445761133f81600154614547565b935090505b60065460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b15801561139157600080fd5b505af11580156113a5573d6000803e3d6000fd5b505050506113b38782614287565b505050509695505050505050565b6005546060906113db906001600160a01b03168484614bb8565b90505b92915050565b60055460009081908190611402906001600160a01b03168f8f614487565b9050600087611411578c611415565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561148b57600080fd5b505af115801561149f573d6000803e3d6000fd5b505050506114b28f8f8f8f8f8f8f612fa6565b809450819550505050509b509b9950505050505050505050565b60608142811015611512576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b600285146115515760405162461bcd60e51b8152600401808060200182810382526027815260200180615ef76027913960400191505060405180910390fd5b60055460009061158b906001600160a01b03168888848161156e57fe5b905060200201356001600160a01b03168989600181811061111057fe5b6001600160a01b038082166000908152600460205260408120549293509116888883816115b457fe5b905060200201356001600160a01b03166001600160a01b03161415611611576115df8a600154614547565b909a50905061161188886000816115f257fe5b905060200201356001600160a01b03163361160b6129a8565b84614587565b600554604080516020808b0282810182019093528a825261165b936001600160a01b0316928e92918d918d918291908501908490808284376000920191909152506146e492505050565b9350888460018651038151811061166e57fe5b602002602001015110156116b35760405162461bcd60e51b815260040180806020018281038252602a815260200180615e16602a913960400191505060405180910390fd5b6116e2888860008181106116c357fe5b905060200201356001600160a01b031633848760008151811061127e57fe5b611721848989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b9250614969915050565b5050509695505050505050565b60608142811015611774576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b600285146117b35760405162461bcd60e51b8152600401808060200182810382526027815260200180615ef76027913960400191505060405180910390fd5b6006546001600160a01b0316868660001981018181106117cf57fe5b905060200201356001600160a01b03166001600160a01b031614611828576040805162461bcd60e51b815260206004820152601c6024820152600080516020615caa833981519152604482015290519081900360640190fd5b6005546000908190611847906001600160a01b0316898984816110f357fe5b6001600160a01b03808216600090815260046020526040812054929350911690899089908161187257fe5b905060200201356001600160a01b03166001600160a01b031614156119f357600554604080516020808b0282810182019093528a82526118db936001600160a01b0316928e92918d918d91829190850190849080828437600092019190915250614bb892505050565b935088846000815181106118eb57fe5b602002602001015111156119305760405162461bcd60e51b8152600401808060200182810382526026815260200180615dc66026913960400191505060405180910390fd5b6119508460008151811061194057fe5b6020026020010151600154614547565b8560008151811061195d57fe5b6020026020010181945082815250505061197d8888600081811061118e57fe5b60055484516119dc916001600160a01b031690869060009061199b57fe5b60200260200101518a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506146e492505050565b93506119ee8888600081811061125f57fe5b61128b565b600554604080516020808b0282810182019093528a8252611a3d936001600160a01b0316928e92918d918d91829190850190849080828437600092019190915250614bb892505050565b93508884600081518110611a4d57fe5b6020026020010151111561124f5760405162461bcd60e51b8152600401808060200182810382526026815260200180615dc66026913960400191505060405180910390fd5b6005546006546000918291611ab5916001600160a01b03908116918f9116614487565b9050600086611ac4578b611ac8565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015611b3e57600080fd5b505af1158015611b52573d6000803e3d6000fd5b50505050611b648d8d8d8d8d8d6129d4565b9d9c50505050505050505050505050565b8042811015611bb9576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b60028414611bf85760405162461bcd60e51b8152600401808060200182810382526027815260200180615ef76027913960400191505060405180910390fd5b600554600090611c32906001600160a01b031687878481611c1557fe5b905060200201356001600160a01b03168888600181811061111057fe5b6001600160a01b03808216600090815260046020526040812054929350911687878381611c5b57fe5b905060200201356001600160a01b03166001600160a01b03161415611c9957611c8689600154614547565b9099509050611c9987876000816115f257fe5b611cc187876000818110611ca957fe5b905060200201356001600160a01b031633848c614587565b600087876000198101818110611cd357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611d3857600080fd5b505afa158015611d4c573d6000803e3d6000fd5b505050506040513d6020811015611d6257600080fd5b50516040805160208a810282810182019093528a8252929350611da49290918b918b9182918501908490808284376000920191909152508a9250614e1d915050565b6001600160a01b038084166000908152600460205260409020541688886001818110611dcc57fe5b905060200201356001600160a01b03166001600160a01b03161415611dfd57611df789600154614547565b90995091505b88611eaf828a8a6000198101818110611e1257fe5b905060200201356001600160a01b03166001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e7757600080fd5b505afa158015611e8b573d6000803e3d6000fd5b505050506040513d6020811015611ea157600080fd5b50519063ffffffff61505716565b1015611eec5760405162461bcd60e51b815260040180806020018281038252602a815260200180615e16602a913960400191505060405180910390fd5b50505050505050505050565b611f006150a7565b6001600160a01b0316611f11612968565b6001600160a01b031614611f5a576040805162461bcd60e51b81526020600482018190526024820152600080516020615e67833981519152604482015290519081900360640190fd5b611f6460006150ab565b565b8042811015611faa576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b60028414611fe95760405162461bcd60e51b8152600401808060200182810382526027815260200180615ef76027913960400191505060405180910390fd5b6006546001600160a01b03168585600019810181811061200557fe5b905060200201356001600160a01b03166001600160a01b03161461205e576040805162461bcd60e51b815260206004820152601c6024820152600080516020615caa833981519152604482015290519081900360640190fd5b60055460009061207b906001600160a01b031687878481611c1557fe5b6001600160a01b0380821660009081526004602052604081205492935091169087908790816120a657fe5b905060200201356001600160a01b03166001600160a01b0316141561210d5760006127106120df6001548b6150fb90919063ffffffff16565b816120e657fe5b0490506120f9898263ffffffff61505716565b985061210b878760008181106115f257fe5b505b6121358686600081811061211d57fe5b905060200201356001600160a01b031633838b614587565b612173868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614e1d915050565b600654604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156121be57600080fd5b505afa1580156121d2573d6000803e3d6000fd5b505050506040513d60208110156121e857600080fd5b50516001600160a01b03808416600090815260046020526040902054919250168787600181811061221557fe5b905060200201356001600160a01b03166001600160a01b0316141561226c57600061271061224e600154846150fb90919063ffffffff16565b8161225557fe5b049050612268828263ffffffff61505716565b9150505b60065460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156122b957600080fd5b505af11580156122cd573d6000803e3d6000fd5b505050506122db8582614287565b505050505050505050565b6060814281101561232c576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b6002851461236b5760405162461bcd60e51b8152600401808060200182810382526027815260200180615ef76027913960400191505060405180910390fd5b6006546001600160a01b0316868660008161238257fe5b905060200201356001600160a01b03166001600160a01b0316146123db576040805162461bcd60e51b815260206004820152601c6024820152600080516020615caa833981519152604482015290519081900360640190fd5b60055434906000906123fa906001600160a01b0316898984816110f357fe5b6001600160a01b0380821660009081526004602052604081205492935091168989838161242357fe5b905060200201356001600160a01b03166001600160a01b031614156124b55761244e83600154614547565b909350905061245b6129a8565b6001600160a01b0316306001600160a01b0316146124b55761247b6129a8565b6001600160a01b03166108fc829081150290604051600060405180830381858888f193505050501580156124b3573d6000803e3d6000fd5b505b600554604080516020808c0282810182019093528b82526124ff936001600160a01b0316923492918e918e918291908501908490808284376000920191909152506146e492505050565b9450898560018751038151811061251257fe5b602002602001015110156125575760405162461bcd60e51b815260040180806020018281038252602a815260200180615e16602a913960400191505060405180910390fd5b60065485516001600160a01b039091169063d0e30db090879060009061257957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156125ac57600080fd5b505af11580156125c0573d6000803e3d6000fd5b505060065488516001600160a01b03909116935063a9059cbb925085915088906000906125e957fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561264057600080fd5b505af1158015612654573d6000803e3d6000fd5b505050506040513d602081101561266a57600080fd5b505161267257fe5b6126b1858a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508c9250614969915050565b5050505095945050505050565b6000610fc384848460008061515e565b60608142811015612714576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b600285146127535760405162461bcd60e51b8152600401808060200182810382526027815260200180615ef76027913960400191505060405180910390fd5b600554600090612770906001600160a01b03168888848161156e57fe5b6001600160a01b0380821660009081526004602052604081205492935091168888838161279957fe5b905060200201356001600160a01b03166001600160a01b031614156128c957600554604080516020808b0282810182019093528a8252612802936001600160a01b0316928e92918d918d91829190850190849080828437600092019190915250614bb892505050565b9350888460008151811061281257fe5b602002602001015111156128575760405162461bcd60e51b8152600401808060200182810382526026815260200180615dc66026913960400191505060405180910390fd5b6128678460008151811061194057fe5b8560008151811061287457fe5b60200260200101819350828152505050612894888860008181106115f257fe5b60055484516128b2916001600160a01b031690869060009061199b57fe5b93506128c4888860008181106116c357fe5b6116e2565b600554604080516020808b0282810182019093528a8252612913936001600160a01b0316928e92918d918d91829190850190849080828437600092019190915250614bb892505050565b9350888460008151811061292357fe5b602002602001015111156116b35760405162461bcd60e51b8152600401808060200182810382526026815260200180615dc66026913960400191505060405180910390fd5b6000546001600160a01b031690565b6003546001600160a01b031681565b60015481565b6006546001600160a01b031681565b6000610fc3848484615266565b6002546000906001600160a01b0316156129cd576002546001600160a01b03166129cf565b305b905090565b60008142811015612a1a576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b600654612a369089906001600160a01b03168989893089612fa6565b604080516370a0823160e01b81523060048201529051919450612aba92508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015612a8957600080fd5b505afa158015612a9d573d6000803e3d6000fd5b505050506040513d6020811015612ab357600080fd5b5051614133565b60065460408051632e1a7d4d60e01b81526004810185905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b158015612b0757600080fd5b505af1158015612b1b573d6000803e3d6000fd5b50505050612b298483614287565b509695505050505050565b8042811015612b78576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b60028414612bb75760405162461bcd60e51b8152600401808060200182810382526027815260200180615ef76027913960400191505060405180910390fd5b6006546001600160a01b03168585600081612bce57fe5b905060200201356001600160a01b03166001600160a01b031614612c27576040805162461bcd60e51b815260206004820152601c6024820152600080516020615caa833981519152604482015290519081900360640190fd5b6005543490600090612c46906001600160a01b03168888848161156e57fe5b6001600160a01b03808216600090815260046020526040812054929350911688888381612c6f57fe5b905060200201356001600160a01b03166001600160a01b03161415612d0157612c9a83600154614547565b9093509050612ca76129a8565b6001600160a01b0316306001600160a01b031614612d0157612cc76129a8565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015612cff573d6000803e3d6000fd5b505b600660009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015612d5157600080fd5b505af1158015612d65573d6000803e3d6000fd5b50506006546040805163a9059cbb60e01b81526001600160a01b038881166004830152602482018a9052915191909216945063a9059cbb9350604480830193506020928290030181600087803b158015612dbe57600080fd5b505af1158015612dd2573d6000803e3d6000fd5b505050506040513d6020811015612de857600080fd5b5051612df057fe5b600088886000198101818110612e0257fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612e6757600080fd5b505afa158015612e7b573d6000803e3d6000fd5b505050506040513d6020811015612e9157600080fd5b50516040805160208b810282810182019093528b8252929350612ed39290918c918c9182918501908490808284376000920191909152508b9250614e1d915050565b6001600160a01b038084166000908152600460205260409020541689896001818110612efb57fe5b905060200201356001600160a01b03166001600160a01b03161415612f2c57612f268a600154614547565b909a5091505b89611eaf828b8b6000198101818110612f4157fe5b905060200201356001600160a01b03166001600160a01b03166370a082318b6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e7757600080fd5b6000808242811015612fed576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b600554600090613007906001600160a01b03168c8c614487565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561306257600080fd5b505af1158015613076573d6000803e3d6000fd5b505050506040513d602081101561308c57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156130d957600080fd5b505af11580156130ed573d6000803e3d6000fd5b505050506040513d604081101561310357600080fd5b5080516020909101519092509050600061311d8e8e615312565b509050806001600160a01b03168e6001600160a01b031614613140578183613143565b82825b90975095508a8710156131875760405162461bcd60e51b8152600401808060200182810382526025815260200180615d796025913960400191505060405180910390fd5b898610156131c65760405162461bcd60e51b8152600401808060200182810382526025815260200180615ed26025913960400191505060405180910390fd5b505050505097509795505050505050565b6005546001600160a01b031681565b6005546060906113db906001600160a01b031684846146e4565b6004602052600090815260409020546001600160a01b031681565b6000806000613255600560009054906101000a90046001600160a01b03168e600660009054906101000a90046001600160a01b0316614487565b9050600087613264578c613268565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156132de57600080fd5b505af11580156132f2573d6000803e3d6000fd5b505050506133048e8e8e8e8e8e610ec5565b909f909e509c50505050505050505050505050565b6133216150a7565b6001600160a01b0316613332612968565b6001600160a01b03161461337b576040805162461bcd60e51b81526020600482018190526024820152600080516020615e67833981519152604482015290519081900360640190fd5b60648111156133d1576040805162461bcd60e51b815260206004820152601860248201527f52415245537761703a2046656520657863656564732031250000000000000000604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b039390931692909217909155600155565b6005546040805163e6a4390560e01b81526001600160a01b03858116600483015284811660248301529151600093929092169163e6a4390591604480820192602092909190829003018186803b15801561345057600080fd5b505afa158015613464573d6000803e3d6000fd5b505050506040513d602081101561347a57600080fd5b50519392505050565b600080600083428110156134cc576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b6134da8c8c8c8c8c8c6153e9565b60055491955093506000906134f9906001600160a01b03168e8e614487565b90506135078d338388614587565b6135138c338387614587565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561356b57600080fd5b505af115801561357f573d6000803e3d6000fd5b505050506040513d602081101561359557600080fd5b5051949d939c50939a509198505050505050505050565b6135b46150a7565b6001600160a01b03166135c5612968565b6001600160a01b03161461360e576040805162461bcd60e51b81526020600482018190526024820152600080516020615e67833981519152604482015290519081900360640190fd5b6001600160a01b0381166136535760405162461bcd60e51b8152600401808060200182810382526026815260200180615cee6026913960400191505060405180910390fd5b61365c816150ab565b50565b600080600083428110156136a8576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b6006546136c2906001600160a01b03168b348c8b8d6153e9565b6005546006549296509094506000916136e9916001600160a01b03908116918e9116614487565b90506136f78b338387614587565b600660009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0866040518263ffffffff1660e01b81526004016000604051808303818588803b15801561374757600080fd5b505af115801561375b573d6000803e3d6000fd5b50506006546040805163a9059cbb60e01b81526001600160a01b038781166004830152602482018c9052915191909216945063a9059cbb9350604480830193506020928290030181600087803b1580156137b457600080fd5b505af11580156137c8573d6000803e3d6000fd5b505050506040513d60208110156137de57600080fd5b50516137e657fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561383e57600080fd5b505af1158015613852573d6000803e3d6000fd5b505050506040513d602081101561386857600080fd5b50519250348510156138805761388033863403614287565b505096509650969350505050565b6138966150a7565b6001600160a01b03166138a7612968565b6001600160a01b0316146138f0576040805162461bcd60e51b81526020600482018190526024820152600080516020615e67833981519152604482015290519081900360640190fd5b6003546040805163ac393aff60e01b81526001600160a01b0385811660048301529151919092169163ac393aff916024808301926020929190829003018186803b15801561393d57600080fd5b505afa158015613951573d6000803e3d6000fd5b505050506040513d602081101561396757600080fd5b50516139a45760405162461bcd60e51b8152600401808060200182810382526024815260200180615f6f6024913960400191505060405180910390fd5b806001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156139e757600080fd5b505afa1580156139fb573d6000803e3d6000fd5b505050506040513d6020811015613a1157600080fd5b50516001600160a01b03161480613a9d5750806001600160a01b0316826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015613a6657600080fd5b505afa158015613a7a573d6000803e3d6000fd5b505050506040513d6020811015613a9057600080fd5b50516001600160a01b0316145b613ad85760405162461bcd60e51b8152600401808060200182810382526028815260200180615d9e6028913960400191505060405180910390fd5b6001600160a01b03918216600090815260046020526040902080546001600160a01b03191691909216179055565b60608142811015613b4c576040805162461bcd60e51b81526020600482015260176024820152600080516020615e87833981519152604482015290519081900360640190fd5b60028514613b8b5760405162461bcd60e51b8152600401808060200182810382526027815260200180615ef76027913960400191505060405180910390fd5b6006546001600160a01b03168686600081613ba257fe5b905060200201356001600160a01b03166001600160a01b031614613bfb576040805162461bcd60e51b815260206004820152601c6024820152600080516020615caa833981519152604482015290519081900360640190fd5b600554600090613c18906001600160a01b03168888848161156e57fe5b6001600160a01b03808216600090815260046020526040812054929350911688888381613c4157fe5b905060200201356001600160a01b03166001600160a01b03161415613ecd57600554604080516020808b0282810182019093528a8252613caa936001600160a01b0316928d92918d918d91829190850190849080828437600092019190915250614bb892505050565b93503484600081518110613cba57fe5b60200260200101511115613cff5760405162461bcd60e51b8152600401808060200182810382526026815260200180615dc66026913960400191505060405180910390fd5b613d0f8460008151811061194057fe5b85600081518110613d1c57fe5b60200260200101819350828152505050613d346129a8565b6001600160a01b0316306001600160a01b031614613d8e57613d546129a8565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015613d8c573d6000803e3d6000fd5b505b6005548451613dac916001600160a01b031690869060009061199b57fe5b60065481519195506001600160a01b03169063d0e30db0908690600090613dcf57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015613e0257600080fd5b505af1158015613e16573d6000803e3d6000fd5b505060065487516001600160a01b03909116935063a9059cbb92508591508790600090613e3f57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613e9657600080fd5b505af1158015613eaa573d6000803e3d6000fd5b505050506040513d6020811015613ec057600080fd5b5051613ec857fe5b6140b5565b600554604080516020808b0282810182019093528a8252613f17936001600160a01b0316928d92918d918d91829190850190849080828437600092019190915250614bb892505050565b93503484600081518110613f2757fe5b60200260200101511115613f6c5760405162461bcd60e51b8152600401808060200182810382526026815260200180615dc66026913960400191505060405180910390fd5b60065484516001600160a01b039091169063d0e30db0908690600090613f8e57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015613fc157600080fd5b505af1158015613fd5573d6000803e3d6000fd5b50506006546005546001600160a01b03918216945063a9059cbb935061401f9250168b8b60008161400257fe5b905060200201356001600160a01b03168c8c600181811061111057fe5b8660008151811061402c57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561408357600080fd5b505af1158015614097573d6000803e3d6000fd5b505050506040513d60208110156140ad57600080fd5b50516140b557fe5b6140f4848989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b9250614969915050565b600061411d828660008151811061410757fe5b602002602001015161577690919063ffffffff16565b9050803411156126b1576126b133823403614287565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106141b05780518252601f199092019160209182019101614191565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614212576040519150601f19603f3d011682016040523d82523d6000602084013e614217565b606091505b5091509150818015614245575080511580614245575080806020019051602081101561424257600080fd5b50515b6142805760405162461bcd60e51b815260040180806020018281038252602d815260200180615f42602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106142d35780518252601f1990920191602091820191016142b4565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614335576040519150601f19603f3d011682016040523d82523d6000602084013e61433a565b606091505b505090508061437a5760405162461bcd60e51b8152600401808060200182810382526034815260200180615d456034913960400191505060405180910390fd5b505050565b60008086116143bf5760405162461bcd60e51b815260040180806020018281038252602a815260200180615dec602a913960400191505060405180910390fd5b6000851180156143cf5750600084115b61440a5760405162461bcd60e51b8152600401808060200182810382526027815260200180615e406027913960400191505060405180910390fd5b6000836144195761271061441f565b82612710035b90506000614433888363ffffffff6150fb16565b90506000614447828863ffffffff6150fb16565b9050600061446d836144618b61271063ffffffff6150fb16565b9063ffffffff61577616565b905080828161447857fe5b049a9950505050505050505050565b60008060006144968585615312565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f8d5eb48a29e28c3f8b5e9069d5c3e5b0913896e4ff564c3a3cef172ae085cfda609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6000808061271061455e868663ffffffff6150fb16565b8161456557fe5b049050614578858263ffffffff61505716565b945084925090505b9250929050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b6020831061460c5780518252601f1990920191602091820191016145ed565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461466e576040519150601f19603f3d011682016040523d82523d6000602084013e614673565b606091505b50915091508180156146a15750805115806146a1575080806020019051602081101561469e57600080fd5b50515b6146dc5760405162461bcd60e51b8152600401808060200182810382526031815260200180615d146031913960400191505060405180910390fd5b505050505050565b606060028251101561473d576040805162461bcd60e51b815260206004820152601d60248201527f52415245537761704c6962726172793a20494e56414c49445f50415448000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561475557600080fd5b5060405190808252806020026020018201604052801561477f578160200160208202803683370190505b509050828160008151811061479057fe5b60200260200101818152505060005b60018351038110156149615760006147e1868584815181106147bd57fe5b60200260200101518685600101815181106147d457fe5b6020026020010151614487565b90506000816001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b15801561481e57600080fd5b505afa158015614832573d6000803e3d6000fd5b505050506040513d602081101561484857600080fd5b5051604080516307ae316d60e41b815290519192506000916001600160a01b03851691637ae316d0916004808301926020929190829003018186803b15801561489057600080fd5b505afa1580156148a4573d6000803e3d6000fd5b505050506040513d60208110156148ba57600080fd5b5051865190915060009081906148fc908b908a90899081106148d857fe5b60200260200101518a89600101815181106148ef57fe5b60200260200101516157c5565b9150915061493687878151811061490f57fe5b6020026020010151838360006001600160a01b0316886001600160a01b031614158761437f565b87876001018151811061494557fe5b602090810291909101015250506001909301925061479f915050565b509392505050565b60005b6001835103811015614bb25760008084838151811061498757fe5b602002602001015185846001018151811061499e57fe5b60200260200101519150915060006149b68383615312565b50905060008785600101815181106149ca57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146149f8578260006149fc565b6000835b91509150600080614a2388888e8c81518110614a1457fe5b6020026020010151878761588c565b91509150600060028c51038a10614a3a578a614a5e565b6005548c51614a5e916001600160a01b0316908a908f9060028f019081106147d457fe5b600554909150614a78906001600160a01b03168a8a614487565b6001600160a01b031663f8b134c6868686868660006040519080825280601f01601f191660200182016040528015614ab7576020820181803683370190505b506040518763ffffffff1660e01b815260040180878152602001868152602001858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614b34578181015183820152602001614b1c565b50505050905090810190601f168015614b615780820380516001836020036101000a031916815260200191505b50975050505050505050600060405180830381600087803b158015614b8557600080fd5b505af1158015614b99573d6000803e3d6000fd5b50506001909b019a5061496c9950505050505050505050565b50505050565b6060600282511015614c11576040805162461bcd60e51b815260206004820152601d60248201527f52415245537761704c6962726172793a20494e56414c49445f50415448000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015614c2957600080fd5b50604051908082528060200260200182016040528015614c53578160200160208202803683370190505b5090508281600183510381518110614c6757fe5b60209081029190910101528151600019015b8015614961576000614ca886856001850381518110614c9457fe5b60200260200101518685815181106147d457fe5b90506000816001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b158015614ce557600080fd5b505afa158015614cf9573d6000803e3d6000fd5b505050506040513d6020811015614d0f57600080fd5b5051604080516307ae316d60e41b815290519192506000916001600160a01b03851691637ae316d0916004808301926020929190829003018186803b158015614d5757600080fd5b505afa158015614d6b573d6000803e3d6000fd5b505050506040513d6020811015614d8157600080fd5b505186519091506000908190614db7908b908a906000198a01908110614da357fe5b60200260200101518a89815181106148ef57fe5b91509150614df1878781518110614dca57fe5b6020026020010151838360006001600160a01b0316886001600160a01b031614158761515e565b876001880381518110614e0057fe5b602090810291909101015250506000199093019250614c79915050565b60005b600183510381101561437a57600080848381518110614e3b57fe5b6020026020010151858460010181518110614e5257fe5b6020026020010151915091506000614e6a8383615312565b509050600080614e7b858585615a86565b91509150600080846001600160a01b0316876001600160a01b031614614ea357826000614ea7565b6000835b91509150600080614ebb898988878761588c565b91509150600060028d51038b10614ed2578b614efb565b614efb600560009054906101000a90046001600160a01b03168a8f8e600201815181106147d457fe5b600554909150600090614f18906001600160a01b03168c8c614487565b90506001600160a01b03811663f8b134c6878787878760006040519080825280601f01601f191660200182016040528015614f5a576020820181803683370190505b506040518763ffffffff1660e01b815260040180878152602001868152602001858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614fd7578181015183820152602001614fbf565b50505050905090810190601f1680156150045780820380516001836020036101000a031916815260200191505b50975050505050505050600060405180830381600087803b15801561502857600080fd5b505af115801561503c573d6000803e3d6000fd5b50506001909d019c50614e209b505050505050505050505050565b808203828111156113de576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008115806151165750508082028282828161511357fe5b04145b6113de576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b600080861161519e5760405162461bcd60e51b815260040180806020018281038252602b815260200180615ea7602b913960400191505060405180910390fd5b6000851180156151ae5750600084115b6151e95760405162461bcd60e51b8152600401808060200182810382526027815260200180615e406027913960400191505060405180910390fd5b6000836151f8576127106151fe565b82612710035b90506000615224612710615218898b63ffffffff6150fb16565b9063ffffffff6150fb16565b9050600061523c83615218898c63ffffffff61505716565b9050615259600182848161524c57fe5b049063ffffffff61577616565b9998505050505050505050565b60008084116152a65760405162461bcd60e51b8152600401808060200182810382526024815260200180615cca6024913960400191505060405180910390fd5b6000831180156152b65750600082115b6152f15760405162461bcd60e51b8152600401808060200182810382526027815260200180615e406027913960400191505060405180910390fd5b82615302858463ffffffff6150fb16565b8161530957fe5b04949350505050565b600080826001600160a01b0316846001600160a01b031614156153665760405162461bcd60e51b8152600401808060200182810382526024815260200180615f1e6024913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610615386578284615389565b83835b90925090506001600160a01b038216614580576040805162461bcd60e51b815260206004820152601d60248201527f52415245537761704c6962726172793a205a45524f5f41444452455353000000604482015290519081900360640190fd5b600080806153f789896133f7565b6001600160a01b031614156155aa576006546001600160a01b03898116911614156154e557600554604080516364e329cb60e11b81526001600160a01b038a811660048301528b811660248301529151919092169163c9c653969160448083019260209291908290030181600087803b15801561547357600080fd5b505af1158015615487573d6000803e3d6000fd5b505050506040513d602081101561549d57600080fd5b50889050600460006154af838b6133f7565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790556155aa565b600554604080516364e329cb60e11b81526001600160a01b038b811660048301528a811660248301529151919092169163c9c653969160448083019260209291908290030181600087803b15801561553c57600080fd5b505af1158015615550573d6000803e3d6000fd5b505050506040513d602081101561556657600080fd5b50879050600460006155788b846133f7565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790555b60055460009081906155c6906001600160a01b03168b8b6157c5565b915091508160001480156155d8575080155b156156a9576006548894508793506001600160a01b038b81169116141561563e5789600460006156088d8d6133f7565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790556156a4565b6007546001600160a01b038b8116911614156156635789600460006156088d8d6133f7565b88600460006156728d8d6133f7565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790555b615769565b60006156b6898484615266565b905087811161570957858110156156fe5760405162461bcd60e51b8152600401808060200182810382526025815260200180615ed26025913960400191505060405180910390fd5b889450925082615767565b6000615716898486615266565b90508981111561572257fe5b878110156157615760405162461bcd60e51b8152600401808060200182810382526025815260200180615d796025913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b808201828110156113de576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006157d48585615312565b5090506000806157e5888888614487565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160806040518083038186803b15801561581d57600080fd5b505afa158015615831573d6000803e3d6000fd5b505050506040513d608081101561584757600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b038781169084161461587a57808261587d565b81815b90999098509650505050505050565b600554600090819081906158aa906001600160a01b03168989614487565b905060006158b88989615312565b5090506000826001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b1580156158f657600080fd5b505afa15801561590a573d6000803e3d6000fd5b505050506040513d602081101561592057600080fd5b5051604080516307ae316d60e41b815290519192506000916001600160a01b03861691637ae316d0916004808301926020929190829003018186803b15801561596857600080fd5b505afa15801561597c573d6000803e3d6000fd5b505050506040513d602081101561599257600080fd5b505190506001600160a01b038281169084161415615a0557826001600160a01b03168b6001600160a01b0316146159ea576159e56127106159d98a8463ffffffff6150fb16565b9063ffffffff615c4a16565b615a00565b615a006127106159d98b8463ffffffff6150fb16565b615a08565b60005b9550826001600160a01b0316826001600160a01b031614615a7357826001600160a01b03168b6001600160a01b03161415615a5857615a536127106159d9898463ffffffff6150fb16565b615a6e565b615a6e6127106159d98b8463ffffffff6150fb16565b615a76565b60005b9450505050509550959350505050565b60055460009081908190615aa4906001600160a01b03168787614487565b90506000806000836001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160806040518083038186803b158015615ae457600080fd5b505afa158015615af8573d6000803e3d6000fd5b505050506040513d6080811015615b0e57600080fd5b508051602080830151606090930151604080516307ae316d60e41b815290516001600160701b03948516985093909416955093506000926001600160a01b03881692637ae316d092600480840193919291829003018186803b158015615b7357600080fd5b505afa158015615b87573d6000803e3d6000fd5b505050506040513d6020811015615b9d57600080fd5b505190506000806001600160a01b038c8116908b1614615bbe578486615bc1565b85855b91509150615c1f828d6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e7757600080fd5b9850615c398983836001600160a01b03881615158761437f565b975050505050505050935093915050565b6000808211615c98576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d6469762d756e646572666c6f7760581b604482015290519081900360640190fd5b818381615ca157fe5b04939250505056fe5241524553776170526f757465723a20494e56414c49445f504154480000000052415245537761704c6962726172793a20494e53554646494349454e545f414d4f554e544f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c65645241524553776170526f757465723a20494e53554646494349454e545f415f414d4f554e5452415245537761702046656553746f72653a20496e76616c696420746f6b656e20616464726573735241524553776170526f757465723a204558434553534956455f494e5055545f414d4f554e5452415245537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545241524553776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5452415245537761704c6962726172793a20494e53554646494349454e545f4c49515549444954594f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725241524553776170526f757465723a204558504952454400000000000000000052415245537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545241524553776170526f757465723a20494e53554646494349454e545f425f414d4f554e545241524553776170526f757465723a204f4e4c595f54574f5f544f4b454e535f414c4c4f57454452415245537761704c6962726172793a204944454e544943414c5f4144445245535345535472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c656452415245537761702046656553746f72653a2050616972206973206e6f74204578697374a2646970667358221220931bf6ff12243863091525b1a373acd415b9fda72b6e5a3528fda022fe7e90dd64736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000009deeb73e971127b2634d7633182004380774451f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000004fabb145d64652a948d72533023f6e7a623c7c53000000000000000000000000000000000000000000000000000000000000006400000000000000000000000018b1dd3673a64f287ea1975f04dd1f462363735c
-----Decoded View---------------
Arg [0] : _factory (address): 0x9DEEB73E971127B2634D7633182004380774451f
Arg [1] : _WETH (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [2] : _BUSD (address): 0x4Fabb145d64652a948d72533023f6E7A623C7C53
Arg [3] : _adminFee (uint256): 100
Arg [4] : _adminFeeAddress (address): 0x18b1dD3673A64f287EA1975f04DD1f462363735C
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000009deeb73e971127b2634d7633182004380774451f
Arg [1] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [2] : 0000000000000000000000004fabb145d64652a948d72533023f6e7a623c7c53
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [4] : 00000000000000000000000018b1dd3673a64f287ea1975f04dd1f462363735c
Deployed Bytecode Sourcemap
39304:8877:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39805:4;;-1:-1:-1;;;;;39805:4:0;39791:10;:18;39784:26;;;;39304:8877;;12:1:-1;9;2:12;44650:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44650:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;44650:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;38281:251;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38281:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38281:251:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;13329:30;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13329:30:0;;;:::i;:::-;;;;-1:-1:-1;;;;;13329:30:0;;;;;;;;;;;;;;28240:1448;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28240:1448:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28240:1448:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28240:1448:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28240:1448: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;28240:1448:0;;-1:-1:-1;28240:1448:0;-1:-1:-1;;;;;;28240:1448: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;28240:1448:0;;;;;;;;;;;;;;;;;39038:232;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39038:232:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;39038:232:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;39038:232:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;39038:232: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;39038:232:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;39038:232:0;;-1:-1:-1;39038:232:0;;-1:-1:-1;;;;;39038:232:0:i;45329:675::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;45329:675:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;45329:675:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22756:1055::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22756:1055:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;22756:1055:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;22756:1055:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;22756:1055: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;22756:1055:0;;-1:-1:-1;22756:1055:0;-1:-1:-1;;;;;;22756:1055:0;;;;;;;;:::i;26401:1833::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26401:1833:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26401:1833:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26401:1833:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26401:1833: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;26401:1833:0;;-1:-1:-1;26401:1833:0;-1:-1:-1;;;;;;26401:1833:0;;;;;;;;:::i;47462:716::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;47462:716:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;47462:716:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33939:1303::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33939:1303:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33939:1303:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33939:1303:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33939:1303: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;33939:1303:0;;-1:-1:-1;33939:1303:0;-1:-1:-1;;;;;;33939:1303:0;;;;;;;;:::i;1896:103::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1896:103:0;;;:::i;36674:1368::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36674:1368:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;36674:1368:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;36674:1368:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;36674:1368: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;36674:1368:0;;-1:-1:-1;36674:1368:0;-1:-1:-1;;;;;;36674:1368:0;;;;;;;;:::i;25272:1123::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25272:1123:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25272:1123:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25272:1123: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;25272:1123:0;;-1:-1:-1;25272:1123:0;-1:-1:-1;;;;;;25272:1123:0;;;;;;;;:::i;38540:250::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38540:250:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38540:250:0;;;;;;;;;;;;:::i;23817:1447::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23817:1447:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;23817:1447:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;23817:1447:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;23817:1447: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;23817:1447:0;;-1:-1:-1;23817:1447:0;-1:-1:-1;;;;;;23817:1447:0;;;;;;;;:::i;1245:87::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1245:87:0;;;:::i;13366:29::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13366:29:0;;;:::i;13302:20::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13302:20:0;;;:::i;21704:28::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21704:28:0;;;:::i;38086:187::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38086:187:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38086:187:0;;;;;;;;;;;;:::i;14094:146::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14094:146:0;;;:::i;46756:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;46756:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;46756:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;35248:1420::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;35248:1420:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;35248:1420:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35248:1420: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;35248:1420:0;;-1:-1:-1;35248:1420:0;-1:-1:-1;;;;;;35248:1420:0;;;;;;;;:::i;43785:859::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43785:859:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;43785:859:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21666:31::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21666:31:0;;;:::i;38798:232::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38798:232:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;38798:232:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;38798:232:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;38798:232: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;38798:232:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;38798:232:0;;-1:-1:-1;38798:232:0;;-1:-1:-1;;;;;38798:232:0:i;13402:50::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13402:50:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13402:50:0;-1:-1:-1;;;;;13402:50:0;;:::i;46010:667::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;46010:667:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;46010:667:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14248:232::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14248:232:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;14248:232:0;;;;;;;;:::i;41868:152::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41868:152:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;41868:152:0;;;;;;;;;;:::i;42028:736::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42028:736:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;42028:736:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;2154:201;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2154:201:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2154:201:0;-1:-1:-1;;;;;2154:201:0;;:::i;42770:972::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;42770:972:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13681:405::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13681:405:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;13681:405:0;;;;;;;;;;:::i;29694:1708::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29694:1708:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;29694:1708:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29694:1708: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;29694:1708:0;;-1:-1:-1;29694:1708:0;-1:-1:-1;;;;;;29694:1708:0;;;;;;;;:::i;44650:673::-;44887:16;44905:14;44868:8;21803:15;21791:8;:27;;21783:63;;;;;-1:-1:-1;;;21783:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21783:63:0;;;;;;;;;;;;;;;45009:4:::1;::::0;44959:196:::1;::::0;44989:5;;-1:-1:-1;;;;;45009:4:0::1;45028:9:::0;45052:14;45081:12;45116:4:::1;45136:8:::0;44959:15:::1;:196::i;:::-;44932:223:::0;;-1:-1:-1;44932:223:0;-1:-1:-1;45166:51:0::1;45194:5:::0;45201:2;44932:223;45166:27:::1;:51::i;:::-;45234:4;::::0;45228:31:::1;::::0;;-1:-1:-1;;;45228:31:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;45234:4:0;;::::1;::::0;45228:20:::1;::::0;:31;;;;;45234:4:::1;::::0;45228:31;;;;;;;;45234:4;;45228:31;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;45228:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;45228:31:0;;;;45270:45;45301:2;45305:9;45270:30;:45::i;:::-;44650:673:::0;;;;;;;;;;:::o;38281:251::-;38414:14;38453:71;38482:8;38492:9;38503:10;38515:5;38522:1;38453:28;:71::i;:::-;38446:78;38281:251;-1:-1:-1;;;;38281:251:0:o;13329:30::-;;;-1:-1:-1;;;;;13329:30:0;;:::o;28240:1448::-;28434:21;28410:8;21803:15;21791:8;:27;;21783:63;;;;;-1:-1:-1;;;21783:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21783:63:0;;;;;;;;;;;;;;;28496:1:::1;28481:16:::0;::::1;28473:68;;;;-1:-1:-1::0;;;28473:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28585:4;::::0;-1:-1:-1;;;;;28585:4:0::1;28560::::0;;-1:-1:-1;;28565:15:0;;28560:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28560:21:0::1;-1:-1:-1::0;;;;;28560:29:0::1;;28552:70;;;::::0;;-1:-1:-1;;;28552:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28552:70:0;;;;;;;;;;;;;::::1;;28704:7;::::0;28635:19:::1;::::0;;;28680:50:::1;::::0;-1:-1:-1;;;;;28704:7:0::1;28713:4:::0;;28635:19;28713:7;::::1;;;;;;;;;;-1:-1:-1::0;;;;;28713:7:0::1;28722:4;;28727:1;28722:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28722:7:0::1;28680:23;:50::i;:::-;-1:-1:-1::0;;;;;28755:20:0;;::::1;;::::0;;;:14:::1;:20;::::0;;;;;28665:65;;-1:-1:-1;28755:20:0;::::1;::::0;28744:4;;;;:7;::::1;;;;;;;;;;-1:-1:-1::0;;;;;28744:7:0::1;-1:-1:-1::0;;;;;28744:31:0::1;;28741:277;;;28819:55;28855:8;28865;;28819:35;:55::i;:::-;28791:83:::0;;-1:-1:-1;28791:83:0;-1:-1:-1;28889:117:0::1;28939:4:::0;;28944:1:::1;28939:7:::0;::::1;;;;;;;;;;-1:-1:-1::0;;;;;28939:7:0::1;28948:10;28960:15;:13;:15::i;:::-;28977:14;28889:31;:117::i;:::-;29070:7;::::0;29040:54:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;29070:7:0::1;::::0;29079:8;;29040:54;29089:4;;;;;;29040:54;;::::1;::::0;29089:4;;29040:54;29089:4;29040:54;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29040:29:0::1;::::0;-1:-1:-1;;;29040:54:0:i:1;:::-;29030:64;;29144:12;29113:7;29138:1;29121:7;:14;:18;29113:27;;;;;;;;;;;;;;:43;;29105:98;;;;-1:-1:-1::0;;;29105:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29214:94;29260:4;;29265:1;29260:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29260:7:0::1;29269:10;29281:4;29287:7;29295:1;29287:10;;;;;;;;;;;;;;29214:31;:94::i;:::-;29319:35;29325:7;29334:4;;29319:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29348:4:0::1;::::0;-1:-1:-1;29319:5:0::1;::::0;-1:-1:-1;;29319:35:0:i:1;:::-;29367:17;29387:7;29412:1;29395:7;:14;:18;29387:27;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;29439:20:0;;::::1;;::::0;;;:14:::1;:20:::0;;;;;;;;29387:27;;-1:-1:-1;29439:20:0::1;29428:4:::0;;29439:20;29428:7;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;29428:7:0::1;-1:-1:-1::0;;;;;29428:31:0::1;;29425:152;;;29507:58;29543:12;29556:8;;29507:35;:58::i;:::-;29475:90:::0;-1:-1:-1;29475:90:0;-1:-1:-1;29425:152:0::1;29593:4;::::0;29587:34:::1;::::0;;-1:-1:-1;;;29587:34:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;29593:4:0;;::::1;::::0;29587:20:::1;::::0;:34;;;;;29593:4:::1;::::0;29587:34;;;;;;;;29593:4;;29587:34;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;29587:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29587:34:0;;;;29632:48;29663:2;29667:12;29632:30;:48::i;:::-;21857:1;;;28240:1448:::0;;;;;;;;;:::o;39038:232::-;39237:7;;39162:21;;39208:54;;-1:-1:-1;;;;;39237:7:0;39246:9;39257:4;39208:28;:54::i;:::-;39201:61;;39038:232;;;;;:::o;45329:675::-;45713:7;;45635:12;;;;;;45689:48;;-1:-1:-1;;;;;45713:7:0;45722:6;45730;45689:23;:48::i;:::-;45674:63;;45748:10;45761;:33;;45785:9;45761:33;;;-1:-1:-1;;45761:33:0;45805:79;;;-1:-1:-1;;;45805:79:0;;45832:10;45805:79;;;;45852:4;45805:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45748:46;;-1:-1:-1;;;;;;45805:26:0;;;;;:79;;;;;-1:-1:-1;;45805:79:0;;;;;;;;-1:-1:-1;45805:26:0;:79;;;2:2:-1;;;;27:1;24;17:12;2:2;45805:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45805:79:0;;;;45916:80;45932:6;45940;45948:9;45959:10;45971;45983:2;45987:8;45916:15;:80::i;:::-;45895:101;;;;;;;;45329:675;;;;;;;;;;;;;;;;:::o;22756:1055::-;22980:21;22961:8;21803:15;21791:8;:27;;21783:63;;;;;-1:-1:-1;;;21783:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21783:63:0;;;;;;;;;;;;;;;23037:1:::1;23022:16:::0;::::1;23014:68;;;;-1:-1:-1::0;;;23014:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23132:7;::::0;23093:12:::1;::::0;23108:50:::1;::::0;-1:-1:-1;;;;;23132:7:0::1;23141:4:::0;;23093:12;23141:7;::::1;;;;;;;;;;-1:-1:-1::0;;;;;23141:7:0::1;23150:4;;23155:1;23150:7;;;;;;23108:50;-1:-1:-1::0;;;;;23215:20:0;;::::1;23171:19;23215:20:::0;;;:14:::1;:20;::::0;;;;;23093:65;;-1:-1:-1;23171:19:0;23215:20:::1;23204:4:::0;;23171:19;23204:7;::::1;;;;;;;;;;-1:-1:-1::0;;;;;23204:7:0::1;-1:-1:-1::0;;;;;23204:31:0::1;;23201:277;;;23279:55;23315:8;23325;;23279:35;:55::i;:::-;23251:83:::0;;-1:-1:-1;23251:83:0;-1:-1:-1;23349:117:0::1;23399:4:::0;;23404:1:::1;23399:7:::0;::::1;;;;;;;;;;-1:-1:-1::0;;;;;23399:7:0::1;23408:10;23420:15;:13;:15::i;:::-;23437:14;23349:31;:117::i;:::-;23530:7;::::0;23500:54:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;23530:7:0::1;::::0;23539:8;;23500:54;23549:4;;;;;;23500:54;;::::1;::::0;23549:4;;23500:54;23549:4;23500:54;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;23500:29:0::1;::::0;-1:-1:-1;;;23500:54:0:i:1;:::-;23490:64;;23604:12;23573:7;23598:1;23581:7;:14;:18;23573:27;;;;;;;;;;;;;;:43;;23565:98;;;;-1:-1:-1::0;;;23565:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23674:94;23720:4;;23725:1;23720:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;23720:7:0::1;23729:10;23741:4;23747:7;23755:1;23747:10;;;;;;;23674:94;23779:24;23785:7;23794:4;;23779:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;23800:2:0;;-1:-1:-1;23779:5:0::1;::::0;-1:-1:-1;;23779:24:0:i:1;:::-;21857:1;;22756:1055:::0;;;;;;;;;:::o;26401:1833::-;26595:21;26571:8;21803:15;21791:8;:27;;21783:63;;;;;-1:-1:-1;;;21783:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21783:63:0;;;;;;;;;;;;;;;26657:1:::1;26642:16:::0;::::1;26634:68;;;;-1:-1:-1::0;;;26634:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26746:4;::::0;-1:-1:-1;;;;;26746:4:0::1;26721::::0;;-1:-1:-1;;26726:15:0;;26721:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26721:21:0::1;-1:-1:-1::0;;;;;26721:29:0::1;;26713:70;;;::::0;;-1:-1:-1;;;26713:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26713:70:0;;;;;;;;;;;;;::::1;;26865:7;::::0;26796:19:::1;::::0;;;26841:50:::1;::::0;-1:-1:-1;;;;;26865:7:0::1;26874:4:::0;;26796:19;26874:7;::::1;;;26841:50;-1:-1:-1::0;;;;;26916:20:0;;::::1;;::::0;;;:14:::1;:20;::::0;;;;;26826:65;;-1:-1:-1;26916:20:0;::::1;::::0;26905:4;;;;:7;::::1;;;;;;;;;;-1:-1:-1::0;;;;;26905:7:0::1;-1:-1:-1::0;;;;;26905:31:0::1;;26902:953;;;26991:7;::::0;26962:54:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;26991:7:0::1;::::0;27000:9;;26962:54;27011:4;;;;;;26962:54;;::::1;::::0;27011:4;;26962:54;27011:4;26962:54;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26962:28:0::1;::::0;-1:-1:-1;;;26962:54:0:i:1;:::-;26952:64;;27053:11;27039:7;27047:1;27039:10;;;;;;;;;;;;;;:25;;27031:76;;;;-1:-1:-1::0;;;27031:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27152:56;27188:7;27196:1;27188:10;;;;;;;;;;;;;;27199:8;;27152:35;:56::i;:::-;27123:7;27131:1;27123:10;;;;;;;;;;;;;27122:86;;;;;;::::0;::::1;;27223:117;27273:4;;27278:1;27273:7;;;;;;27223:117;27395:7;::::0;27404:10;;27365:56:::1;::::0;-1:-1:-1;;;;;27395:7:0::1;::::0;27404;;27395::::1;::::0;27404:10:::1;;;;;;;;;;27416:4;;27365:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27365:29:0::1;::::0;-1:-1:-1;;;27365:56:0:i:1;:::-;27355:66;;27436:102;27486:4;;27491:1;27486:7;;;;;;27436:102;26902:953;;;27610:7;::::0;27581:54:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;27610:7:0::1;::::0;27619:9;;27581:54;27630:4;;;;;;27581:54;;::::1;::::0;27630:4;;27581:54;27630:4;27581:54;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27581:28:0::1;::::0;-1:-1:-1;;;27581:54:0:i:1;:::-;27571:64;;27672:11;27658:7;27666:1;27658:10;;;;;;;;;;;;;;:25;;27650:76;;;;-1:-1:-1::0;;;27650:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47462:716:::0;47846:7;;47862:4;;47780:14;;;;47822:45;;-1:-1:-1;;;;;47846:7:0;;;;47855:5;;47862:4;47822:23;:45::i;:::-;47807:60;;47878:10;47891;:33;;47915:9;47891:33;;;-1:-1:-1;;47891:33:0;47935:79;;;-1:-1:-1;;;47935:79:0;;47962:10;47935:79;;;;47982:4;47935:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47878:46;;-1:-1:-1;;;;;;47935:26:0;;;;;:79;;;;;-1:-1:-1;;47935:79:0;;;;;;;;-1:-1:-1;47935:26:0;:79;;;2:2:-1;;;;27:1;24;17:12;2:2;47935:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47935:79:0;;;;48037:133;48099:5;48106:9;48117:14;48133:12;48147:2;48151:8;48037:47;:133::i;:::-;48025:145;47462:716;-1:-1:-1;;;;;;;;;;;;;47462:716:0:o;33939:1303::-;34173:8;21803:15;21791:8;:27;;21783:63;;;;;-1:-1:-1;;;21783:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21783:63:0;;;;;;;;;;;;;;;34217:1:::1;34202:16:::0;::::1;34194:68;;;;-1:-1:-1::0;;;34194:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34314:7;::::0;34275:12:::1;::::0;34290:50:::1;::::0;-1:-1:-1;;;;;34314:7:0::1;34323:4:::0;;34275:12;34323:7;::::1;;;;;;;;;;-1:-1:-1::0;;;;;34323:7:0::1;34332:4;;34337:1;34332:7;;;;;;34290:50;-1:-1:-1::0;;;;;34395:20:0;;::::1;34351:19;34395:20:::0;;;:14:::1;:20;::::0;;;;;34275:65;;-1:-1:-1;34351:19:0;34395:20:::1;34384:4:::0;;34351:19;34384:7;::::1;;;;;;;;;;-1:-1:-1::0;;;;;34384:7:0::1;-1:-1:-1::0;;;;;34384:31:0::1;;34381:276;;;34459:54;34495:8;34504;;34459:35;:54::i;:::-;34431:82:::0;;-1:-1:-1;34431:82:0;-1:-1:-1;34528:117:0::1;34578:4:::0;;34583:1:::1;34578:7:::0;::::1;;;34528:117;34669:92;34715:4;;34720:1;34715:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;34715:7:0::1;34724:10;34736:4;34742:8;34669:31;:92::i;:::-;34772:18;34800:4:::0;;-1:-1:-1;;34805:15:0;;34800:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;34800:21:0::1;-1:-1:-1::0;;;;;34793:39:0::1;;34833:2;34793:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;34793:43:0::1;-1:-1:-1::0;;;;;34793:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34793:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34793:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;34793:43:0;34847:44:::1;::::0;;34793:43:::1;34847:44:::0;;::::1;::::0;;;;;;;;;;;34793:43;;-1:-1:-1;34847:44:0::1;::::0;;;34882:4;;;;;;34847:44;::::1;::::0;34882:4;;34847:44;34882:4;34847:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;34888:2:0;;-1:-1:-1;34847:34:0::1;::::0;-1:-1:-1;;34847:44:0:i:1;:::-;-1:-1:-1::0;;;;;34916:20:0;;::::1;;::::0;;;:14:::1;:20;::::0;;;;;::::1;34905:4:::0;;34916:20;34905:7;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;34905:7:0::1;-1:-1:-1::0;;;;;34905:31:0::1;;34902:152;;;34984:58;35020:12;35033:8;;34984:35;:58::i;:::-;34952:90:::0;;-1:-1:-1;34952:90:0;-1:-1:-1;34902:152:0::1;35152:12:::0;35086:62:::1;35134:13:::0;35093:4;;-1:-1:-1;;35098:15:0;;35093:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;35093:21:0::1;-1:-1:-1::0;;;;;35086:39:0::1;;35126:2;35086:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;35086:43:0::1;-1:-1:-1::0;;;;;35086:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;35086:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35086:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;35086:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;35064:170;;;;-1:-1:-1::0;;;35064:170:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21857:1;;;33939:1303:::0;;;;;;;:::o;1896:103::-;1476:12;:10;:12::i;:::-;-1:-1:-1;;;;;1465:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1465:23:0;;1457:68;;;;;-1:-1:-1;;;1457:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1457:68:0;;;;;;;;;;;;;;;1961:30:::1;1988:1;1961:18;:30::i;:::-;1896:103::o:0;36674:1368::-;36925:8;21803:15;21791:8;:27;;21783:63;;;;;-1:-1:-1;;;21783:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21783:63:0;;;;;;;;;;;;;;;36974:1:::1;36959:16:::0;::::1;36951:68;;;;-1:-1:-1::0;;;36951:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37063:4;::::0;-1:-1:-1;;;;;37063:4:0::1;37038::::0;;-1:-1:-1;;37043:15:0;;37038:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37038:21:0::1;-1:-1:-1::0;;;;;37038:29:0::1;;37030:70;;;::::0;;-1:-1:-1;;;37030:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;37030:70:0;;;;;;;;;;;;;::::1;;37150:7;::::0;37111:12:::1;::::0;37126:50:::1;::::0;-1:-1:-1;;;;;37150:7:0::1;37159:4:::0;;37111:12;37159:7;::::1;;;37126:50;-1:-1:-1::0;;;;;37203:20:0;;::::1;;::::0;;;:14:::1;:20;::::0;;;;;37111:65;;-1:-1:-1;37203:20:0;::::1;::::0;37192:4;;;;:7;::::1;;;;;;;;;;-1:-1:-1::0;;;;;37192:7:0::1;-1:-1:-1::0;;;;;37192:31:0::1;;37189:304;;;37239:19;37289:5;37262:22;37275:8;;37262;:12;;:22;;;;:::i;:::-;37261:34;;;;;;::::0;-1:-1:-1;37321:28:0::1;:8:::0;37261:34;37321:28:::1;:12;:28;:::i;:::-;37310:39;;37364:117;37414:4;;37419:1;37414:7;;;;;;37364:117;37189:304;;37505:92;37551:4;;37556:1;37551:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;37551:7:0::1;37560:10;37572:4;37578:8;37505:31;:92::i;:::-;37608:55;37643:4;;37608:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;37657:4:0::1;::::0;-1:-1:-1;37608:34:0::1;::::0;-1:-1:-1;;37608:55:0:i:1;:::-;37698:4;::::0;37691:37:::1;::::0;;-1:-1:-1;;;37691:37:0;;37722:4:::1;37691:37;::::0;::::1;::::0;;;37674:14:::1;::::0;-1:-1:-1;;;;;37698:4:0::1;::::0;37691:22:::1;::::0;:37;;;;;::::1;::::0;;;;;;;;37698:4;37691:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;37691:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;37691:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;37691:37:0;-1:-1:-1;;;;;37776:20:0;;::::1;;::::0;;;:14:::1;37691:37;37776:20:::0;;;;;37691:37;;-1:-1:-1;37776:20:0::1;37765:4:::0;;37776:20;37765:7;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37765:7:0::1;-1:-1:-1::0;;;;;37765:31:0::1;;37762:175;;;37812:19;37863:5;37835:23;37849:8;;37835:9;:13;;:23;;;;:::i;:::-;37834:35;;;;;;::::0;-1:-1:-1;37896:29:0::1;:9:::0;37834:35;37896:29:::1;:13;:29;:::i;:::-;37884:41;;37762:175;;37953:4;::::0;37947:31:::1;::::0;;-1:-1:-1;;;37947:31:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;37953:4:0;;::::1;::::0;37947:20:::1;::::0;:31;;;;;37953:4:::1;::::0;37947:31;;;;;;;;37953:4;;37947:31;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;37947:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;37947:31:0;;;;37989:45;38020:2;38024:9;37989:30;:45::i;:::-;21857:1;;36674:1368:::0;;;;;;;:::o;25272:1123::-;25464:21;25440:8;21803:15;21791:8;:27;;21783:63;;;;;-1:-1:-1;;;21783:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21783:63:0;;;;;;;;;;;;;;;25526:1:::1;25511:16:::0;::::1;25503:68;;;;-1:-1:-1::0;;;25503:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25601:4;::::0;-1:-1:-1;;;;;25601:4:0::1;25590::::0;;25601::::1;25590:7:::0;::::1;;;;;;;;;;-1:-1:-1::0;;;;;25590:7:0::1;-1:-1:-1::0;;;;;25590:15:0::1;;25582:56;;;::::0;;-1:-1:-1;;;25582:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;25582:56:0;;;;;;;;;;;;;::::1;;25721:7;::::0;25662:9:::1;::::0;25651:8:::1;::::0;25697:50:::1;::::0;-1:-1:-1;;;;;25721:7:0::1;25730:4:::0;;25651:8;25730:7;::::1;;;25697:50;-1:-1:-1::0;;;;;25802:20:0;;::::1;25758:19;25802:20:::0;;;:14:::1;:20;::::0;;;;;25682:65;;-1:-1:-1;25758:19:0;25802:20:::1;25791:4:::0;;25758:19;25791:7;::::1;;;;;;;;;;-1:-1:-1::0;;;;;25791:7:0::1;-1:-1:-1::0;;;;;25791:31:0::1;;25788:270;;;25862:50;25898:3;25903:8;;25862:35;:50::i;:::-;25838:74:::0;;-1:-1:-1;25838:74:0;-1:-1:-1;25947:15:0::1;:13;:15::i;:::-;-1:-1:-1::0;;;;;25930:32:0::1;25938:4;-1:-1:-1::0;;;;;25930:32:0::1;;25927:120;;25990:15;:13;:15::i;:::-;-1:-1:-1::0;;;;;25982:33:0::1;:49;26016:14;25982:49;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25982:49:0;25927:120;26110:7;::::0;26080:55:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;26110:7:0::1;::::0;26119:9:::1;::::0;26080:55;26130:4;;;;;;26080:55;;::::1;::::0;26130:4;;26080:55;26130:4;26080:55;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26080:29:0::1;::::0;-1:-1:-1;;;26080:55:0:i:1;:::-;26070:65;;26185:12;26154:7;26179:1;26162:7;:14;:18;26154:27;;;;;;;;;;;;;;:43;;26146:98;;;;-1:-1:-1::0;;;26146:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26261:4;::::0;26282:10;;-1:-1:-1;;;;;26261:4:0;;::::1;::::0;26255:19:::1;::::0;26282:7;;26261:4:::1;::::0;26282:10:::1;;;;;;;;;;26255:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26255:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;26319:4:0::1;::::0;26340:10;;-1:-1:-1;;;;;26319:4:0;;::::1;::::0;-1:-1:-1;26313:20:0::1;::::0;-1:-1:-1;26334:4:0;;-1:-1:-1;26340:7:0;;26319:4:::1;::::0;26340:10:::1;;;;;;;;;;26313:38;;;;;;;;;;;;;-1:-1:-1::0;;;;;26313:38:0::1;-1:-1:-1::0;;;;;26313:38:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26313:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26313:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26313:38:0;26306:46:::1;;;;26363:24;26369:7;26378:4;;26363:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26384:2:0;;-1:-1:-1;26363:5:0::1;::::0;-1:-1:-1;;26363:24:0:i:1;:::-;21857:1;;;25272:1123:::0;;;;;;;;:::o;38540:250::-;38673:13;38711:71;38739:9;38750;38761:10;38773:5;38780:1;38711:27;:71::i;23817:1447::-;24041:21;24022:8;21803:15;21791:8;:27;;21783:63;;;;;-1:-1:-1;;;21783:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21783:63:0;;;;;;;;;;;;;;;24098:1:::1;24083:16:::0;::::1;24075:68;;;;-1:-1:-1::0;;;24075:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24193:7;::::0;24154:12:::1;::::0;24169:50:::1;::::0;-1:-1:-1;;;;;24193:7:0::1;24202:4:::0;;24154:12;24202:7;::::1;;;24169:50;-1:-1:-1::0;;;;;24274:20:0;;::::1;24230:19;24274:20:::0;;;:14:::1;:20;::::0;;;;;24154:65;;-1:-1:-1;24230:19:0;24274:20:::1;24263:4:::0;;24230:19;24263:7;::::1;;;;;;;;;;-1:-1:-1::0;;;;;24263:7:0::1;-1:-1:-1::0;;;;;24263:31:0::1;;24260:960;;;24350:7;::::0;24321:54:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;24350:7:0::1;::::0;24359:9;;24321:54;24370:4;;;;;;24321:54;;::::1;::::0;24370:4;;24321:54;24370:4;24321:54;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24321:28:0::1;::::0;-1:-1:-1;;;24321:54:0:i:1;:::-;24311:64;;24412:11;24398:7;24406:1;24398:10;;;;;;;;;;;;;;:25;;24390:76;;;;-1:-1:-1::0;;;24390:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24512:57;24548:7;24556:1;24548:10;;;;;;;24512:57;24482:7;24490:1;24482:10;;;;;;;;;;;;;24481:88;;;;;;::::0;::::1;;24584:117;24634:4;;24639:1;24634:7;;;;;;24584:117;24758:7;::::0;24767:10;;24728:56:::1;::::0;-1:-1:-1;;;;;24758:7:0::1;::::0;24767;;24758::::1;::::0;24767:10:::1;;;24728:56;24718:66;;24799:102;24849:4;;24854:1;24849:7;;;;;;24799:102;24260:960;;;24975:7;::::0;24946:54:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;24975:7:0::1;::::0;24984:9;;24946:54;24995:4;;;;;;24946:54;;::::1;::::0;24995:4;;24946:54;24995:4;24946:54;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24946:28:0::1;::::0;-1:-1:-1;;;24946:54:0:i:1;:::-;24936:64;;25037:11;25023:7;25031:1;25023:10;;;;;;;;;;;;;;:25;;25015:76;;;;-1:-1:-1::0;;;25015:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1245:87:::0;1291:7;1318:6;-1:-1:-1;;;;;1318:6:0;1245:87;:::o;13366:29::-;;;-1:-1:-1;;;;;13366:29:0;;:::o;13302:20::-;;;;:::o;21704:28::-;;;-1:-1:-1;;;;;21704:28:0;;:::o;38086:187::-;38183:12;38215:50;38237:7;38246:8;38256;38215:21;:50::i;14094:146::-;14168:15;;14140:7;;-1:-1:-1;;;;;14168:15:0;:29;:63;;14216:15;;-1:-1:-1;;;;;14216:15:0;14168:63;;;14208:4;14168:63;14160:72;;14094:146;:::o;46756:700::-;47022:14;47003:8;21803:15;21791:8;:27;;21783:63;;;;;-1:-1:-1;;;21783:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21783:63:0;;;;;;;;;;;;;;;47115:4:::1;::::0;47065:196:::1;::::0;47095:5;;-1:-1:-1;;;;;47115:4:0::1;47134:9:::0;47158:14;47187:12;47222:4:::1;47242:8:::0;47065:15:::1;:196::i;:::-;47311:38;::::0;;-1:-1:-1;;;47311:38:0;;47343:4:::1;47311:38;::::0;::::1;::::0;;;47049:212;;-1:-1:-1;47272:78:0::1;::::0;-1:-1:-1;47300:5:0;;47307:2;;-1:-1:-1;;;;;47311: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;47311:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;47311:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;47311:38:0;47272:27:::1;:78::i;:::-;47367:4;::::0;47361:31:::1;::::0;;-1:-1:-1;;;47361:31:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;47367:4:0;;::::1;::::0;47361:20:::1;::::0;:31;;;;;47367:4:::1;::::0;47361:31;;;;;;;;47367:4;;47361:31;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;47361:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;47361:31:0;;;;47403:45;47434:2;47438:9;47403:30;:45::i;:::-;46756:700:::0;;;;;;;;;:::o;35248:1420::-;35488:8;21803:15;21791:8;:27;;21783:63;;;;;-1:-1:-1;;;21783:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21783:63:0;;;;;;;;;;;;;;;35537:1:::1;35522:16:::0;::::1;35514:68;;;;-1:-1:-1::0;;;35514:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35612:4;::::0;-1:-1:-1;;;;;35612:4:0::1;35601::::0;;35612::::1;35601:7:::0;::::1;;;;;;;;;;-1:-1:-1::0;;;;;35601:7:0::1;-1:-1:-1::0;;;;;35601:15:0::1;;35593:56;;;::::0;;-1:-1:-1;;;35593:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;35593:56:0;;;;;;;;;;;;;::::1;;35737:7;::::0;35676:9:::1;::::0;35660:13:::1;::::0;35713:50:::1;::::0;-1:-1:-1;;;;;35737:7:0::1;35746:4:::0;;35660:13;35746:7;::::1;;;35713:50;-1:-1:-1::0;;;;;35818:20:0;;::::1;35774:19;35818:20:::0;;;:14:::1;:20;::::0;;;;;35698:65;;-1:-1:-1;35774:19:0;35818:20:::1;35807:4:::0;;35774:19;35807:7;::::1;;;;;;;;;;-1:-1:-1::0;;;;;35807:7:0::1;-1:-1:-1::0;;;;;35807:31:0::1;;35804:278;;;35882:54;35918:8;35927;;35882:35;:54::i;:::-;35854:82:::0;;-1:-1:-1;35854:82:0;-1:-1:-1;35971:15:0::1;:13;:15::i;:::-;-1:-1:-1::0;;;;;35954:32:0::1;35962:4;-1:-1:-1::0;;;;;35954:32:0::1;;35951:120;;36014:15;:13;:15::i;:::-;-1:-1:-1::0;;;;;36006:33:0::1;:49;36040:14;36006:49;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36006:49:0;35951:120;36100:4;;;;;;;;;-1:-1:-1::0;;;;;36100:4:0::1;-1:-1:-1::0;;;;;36094:19:0::1;;36121:8;36094:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36094:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;36156:4:0::1;::::0;36150:36:::1;::::0;;-1:-1:-1;;;36150:36:0;;-1:-1:-1;;;;;36150:36:0;;::::1;;::::0;::::1;::::0;;;;;;;;;36156:4;;;::::1;::::0;-1:-1:-1;36150:20:0::1;::::0;-1:-1:-1;36150:36:0;;;;;-1:-1:-1;36150:36:0::1;::::0;;;;;;36156:4:::1;::::0;36150:36;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;36150:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36150:36:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;36150:36:0;36143:44:::1;;;;36198:18;36226:4:::0;;-1:-1:-1;;36231:15:0;;36226:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;36226:21:0::1;-1:-1:-1::0;;;;;36219:39:0::1;;36259:2;36219:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;36219:43:0::1;-1:-1:-1::0;;;;;36219:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36219:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36219:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;36219:43:0;36273:44:::1;::::0;;36219:43:::1;36273:44:::0;;::::1;::::0;;;;;;;;;;;36219:43;;-1:-1:-1;36273:44:0::1;::::0;;;36308:4;;;;;;36273:44;::::1;::::0;36308:4;;36273:44;36308:4;36273:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;36314:2:0;;-1:-1:-1;36273:34:0::1;::::0;-1:-1:-1;;36273:44:0:i:1;:::-;-1:-1:-1::0;;;;;36342:20:0;;::::1;;::::0;;;:14:::1;:20;::::0;;;;;::::1;36331:4:::0;;36342:20;36331:7;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;36331:7:0::1;-1:-1:-1::0;;;;;36331:31:0::1;;36328:152;;;36410:58;36446:12;36459:8;;36410:35;:58::i;:::-;36378:90:::0;;-1:-1:-1;36378:90:0;-1:-1:-1;36328:152:0::1;36578:12:::0;36512:62:::1;36560:13:::0;36519:4;;-1:-1:-1;;36524:15:0;;36519:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;36519:21:0::1;-1:-1:-1::0;;;;;36512:39:0::1;;36552:2;36512:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;36512:43:0::1;-1:-1:-1::0;;;;;36512:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;43785:859:0::0;44039:12;44053;44020:8;21803:15;21791:8;:27;;21783:63;;;;;-1:-1:-1;;;21783:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21783:63:0;;;;;;;;;;;;;;;44117:7:::1;::::0;44078:12:::1;::::0;44093:48:::1;::::0;-1:-1:-1;;;;;44117:7:0::1;44126:6:::0;44134;44093:23:::1;:48::i;:::-;44152:61;::::0;;-1:-1:-1;;;44152:61:0;;44185:10:::1;44152:61;::::0;::::1;::::0;-1:-1:-1;;;;;44152:32:0;::::1;:61:::0;;;;;;;;;;;;;;44078:63;;-1:-1:-1;44152:32:0;;::::1;::::0;:61;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;44152:32:0;:61;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;44152:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;44152:61:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;44281:28:0::1;::::0;;-1:-1:-1;;;44281:28:0;;-1:-1:-1;;;;;44281:28:0;;::::1;;::::0;::::1;::::0;;;44251:12:::1;::::0;;;44281:24;;::::1;::::0;::::1;::::0;:28;;;;;;;;;;;44251:12;44281:24;:28;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;44281:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;44281:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;44281:28:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;44281:28:0;-1:-1:-1;44321:14:0::1;44340:42;44367:6:::0;44375;44340:26:::1;:42::i;:::-;44320:62;;;44424:6;-1:-1:-1::0;;;;;44414:16:0::1;:6;-1:-1:-1::0;;;;;44414:16:0::1;;:58;;44455:7;44464;44414:58;;;44434:7;44443;44414:58;44393:79:::0;;-1:-1:-1;44393:79:0;-1:-1:-1;44491:21:0;;::::1;;44483:71;;;;-1:-1:-1::0;;;44483:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44584:10;44573:7;:21;;44565:71;;;;-1:-1:-1::0;;;44565:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21857:1;;;;43785:859:::0;;;;;;;;;;;:::o;21666:31::-;;;-1:-1:-1;;;;;21666:31:0;;:::o;38798:232::-;38998:7;;38922:21;;38968:54;;-1:-1:-1;;;;;38998:7:0;39007:8;39017:4;38968:29;:54::i;13402:50::-;;;;;;;;;;;;-1:-1:-1;;;;;13402:50:0;;:::o;46010:667::-;46299:16;46317:14;46344:12;46359:45;46383:7;;;;;;;;;-1:-1:-1;;;;;46383:7:0;46392:5;46399:4;;;;;;;;;-1:-1:-1;;;;;46399:4:0;46359:23;:45::i;:::-;46344:60;;46415:10;46428;:33;;46452:9;46428:33;;;-1:-1:-1;;46428:33:0;46472:79;;;-1:-1:-1;;;46472:79:0;;46499:10;46472:79;;;;46519:4;46472:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46415:46;;-1:-1:-1;;;;;;46472:26:0;;;;;:79;;;;;-1:-1:-1;;46472:79:0;;;;;;;;-1:-1:-1;46472:26:0;:79;;;2:2:-1;;;;27:1;24;17:12;2:2;46472:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;46472:79:0;;;;46589:80;46608:5;46615:9;46626:14;46642:12;46656:2;46660:8;46589:18;:80::i;:::-;46562:107;;;;-1:-1:-1;46010:667:0;-1:-1:-1;;;;;;;;;;;;;46010:667:0:o;14248:232::-;1476:12;:10;:12::i;:::-;-1:-1:-1;;;;;1465:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1465:23:0;;1457:68;;;;;-1:-1:-1;;;1457:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1457:68:0;;;;;;;;;;;;;;;14364:3:::1;14351:9;:16;;14342:54;;;::::0;;-1:-1:-1;;;14342:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;14407:15;:34:::0;;-1:-1:-1;;;;;;14407:34:0::1;-1:-1:-1::0;;;;;14407:34:0;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;14452:20:0;14248:232::o;41868:152::-;41980:7;;41963:49;;;-1:-1:-1;;;41963:49:0;;-1:-1:-1;;;;;41963:49:0;;;;;;;;;;;;;;;;41937:7;;41980;;;;;41963:33;;:49;;;;;;;;;;;;;;;41980:7;41963:49;;;2:2:-1;;;;27:1;24;17:12;2:2;41963:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41963:49:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;41963:49:0;;41868:152;-1:-1:-1;;;41868:152:0:o;42028:736::-;42316:12;42330;42344:14;42297:8;21803:15;21791:8;:27;;21783:63;;;;;-1:-1:-1;;;21783:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21783:63:0;;;;;;;;;;;;;;;42392:85:::1;42406:6;42414;42422:14;42438;42454:10;42466;42392:13;:85::i;:::-;42527:7;::::0;42371:106;;-1:-1:-1;42371:106:0;-1:-1:-1;42488:12:0::1;::::0;42503:48:::1;::::0;-1:-1:-1;;;;;42527:7:0::1;42536:6:::0;42544;42503:23:::1;:48::i;:::-;42488:63;;42562:66;42594:6;42602:10;42614:4;42620:7;42562:31;:66::i;:::-;42639;42671:6;42679:10;42691:4;42697:7;42639:31;:66::i;:::-;42742:4;-1:-1:-1::0;;;;;42728:24:0::1;;42753:2;42728:28;;;;;;;;;;;;;-1:-1:-1::0;;;;;42728:28:0::1;-1:-1:-1::0;;;;;42728:28:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;42728:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;42728:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;42728:28:0;42028:736;;;;-1:-1:-1;42728:28:0;;-1:-1:-1;42028:736:0;;-1:-1:-1;;;;;;;;;42028:736:0:o;2154:201::-;1476:12;:10;:12::i;:::-;-1:-1:-1;;;;;1465:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1465:23:0;;1457:68;;;;;-1:-1:-1;;;1457:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1457:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;2243:22:0;::::1;2235:73;;;;-1:-1:-1::0;;;2235:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2319:28;2338:8;2319:18;:28::i;:::-;2154:201:::0;:::o;42770:972::-;43023:14;43039:16;43057:14;43004:8;21803:15;21791:8;:27;;21783:63;;;;;-1:-1:-1;;;21783:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21783:63:0;;;;;;;;;;;;;;;43139:4:::1;::::0;43111:176:::1;::::0;-1:-1:-1;;;;;43139:4:0::1;43158:5:::0;43178:9:::1;43202:18:::0;43235:12;43262:14;43111:13:::1;:176::i;:::-;43337:7;::::0;43353:4:::1;::::0;43084:203;;-1:-1:-1;43084:203:0;;-1:-1:-1;43298:12:0::1;::::0;43313:45:::1;::::0;-1:-1:-1;;;;;43337:7:0;;::::1;::::0;43346:5;;43353:4:::1;43313:23;:45::i;:::-;43298:60;;43369:69;43401:5;43408:10;43420:4;43426:11;43369:31;:69::i;:::-;43455:4;;;;;;;;;-1:-1:-1::0;;;;;43455:4:0::1;-1:-1:-1::0;;;;;43449:19:0::1;;43476:9;43449:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;43449:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;43512:4:0::1;::::0;43506:37:::1;::::0;;-1:-1:-1;;;43506:37:0;;-1:-1:-1;;;;;43506:37:0;;::::1;;::::0;::::1;::::0;;;;;;;;;43512:4;;;::::1;::::0;-1:-1:-1;43506:20:0::1;::::0;-1:-1:-1;43506:37:0;;;;;-1:-1:-1;43506:37:0::1;::::0;;;;;;43512:4:::1;::::0;43506:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;43506:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;43506:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;43506:37:0;43499:45:::1;;;;43581:4;-1:-1:-1::0;;;;;43567:24:0::1;;43592:2;43567:28;;;;;;;;;;;;;-1:-1:-1::0;;;;;43567:28:0::1;-1:-1:-1::0;;;;;43567:28:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;43567:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;43567:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;43567:28:0;;-1:-1:-1;43646:9:0::1;:21:::0;-1:-1:-1;43642:92:0::1;;;43669:65;43700:10;43724:9;43712;:21;43669:30;:65::i;:::-;21857:1;42770:972:::0;;;;;;;;;;;:::o;13681:405::-;1476:12;:10;:12::i;:::-;-1:-1:-1;;;;;1465:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1465:23:0;;1457:68;;;;;-1:-1:-1;;;1457:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1457:68:0;;;;;;;;;;;;;;;13802:14:::1;::::0;13785:48:::1;::::0;;-1:-1:-1;;;13785:48:0;;-1:-1:-1;;;;;13785:48:0;;::::1;;::::0;::::1;::::0;;;13802:14;;;::::1;::::0;13785:42:::1;::::0;:48;;;;;::::1;::::0;;;;;;;;13802:14;13785:48;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;13785:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13785:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;13785:48:0;13777:97:::1;;;;-1:-1:-1::0;;;13777:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13925:12;-1:-1:-1::0;;;;;13893:44:0::1;13907:4;-1:-1:-1::0;;;;;13893:26:0::1;;:28;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;13893:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13893:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;13893:28:0;-1:-1:-1;;;;;13893:44:0::1;;::::0;:92:::1;;;13973:12;-1:-1:-1::0;;;;;13941:44:0::1;13955:4;-1:-1:-1::0;;;;;13941:26:0::1;;:28;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;13941:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13941:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;13941:28:0;-1:-1:-1;;;;;13941:44:0::1;;13893:92;13885:145;;;;-1:-1:-1::0;;;13885:145:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;14043:20:0;;::::1;;::::0;;;:14:::1;:20;::::0;;;;:35;;-1:-1:-1;;;;;;14043:35:0::1;::::0;;;::::1;;::::0;;13681:405::o;29694:1708::-;29883:21;29859:8;21803:15;21791:8;:27;;21783:63;;;;;-1:-1:-1;;;21783:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21783:63:0;;;;;;;;;;;;;;;29945:1:::1;29930:16:::0;::::1;29922:68;;;;-1:-1:-1::0;;;29922:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30020:4;::::0;-1:-1:-1;;;;;30020:4:0::1;30009::::0;;30020::::1;30009:7:::0;::::1;;;;;;;;;;-1:-1:-1::0;;;;;30009:7:0::1;-1:-1:-1::0;;;;;30009:15:0::1;;30001:56;;;::::0;;-1:-1:-1;;;30001:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;30001:56:0;;;;;;;;;;;;;::::1;;30109:7;::::0;30070:12:::1;::::0;30085:50:::1;::::0;-1:-1:-1;;;;;30109:7:0::1;30118:4:::0;;30070:12;30118:7;::::1;;;30085:50;-1:-1:-1::0;;;;;30192:20:0;;::::1;30148:19;30192:20:::0;;;:14:::1;:20;::::0;;;;;30070:65;;-1:-1:-1;30148:19:0;30192:20:::1;30181:4:::0;;30148:19;30181:7;::::1;;;;;;;;;;-1:-1:-1::0;;;;;30181:7:0::1;-1:-1:-1::0;;;;;30181:31:0::1;;30178:1001;;;30267:7;::::0;30238:54:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;30267:7:0::1;::::0;30276:9;;30238:54;30287:4;;;;;;30238:54;;::::1;::::0;30287:4;;30238:54;30287:4;30238:54;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30238:28:0::1;::::0;-1:-1:-1;;;30238:54:0:i:1;:::-;30228:64;;30329:9;30315:7;30323:1;30315:10;;;;;;;;;;;;;;:23;;30307:74;;;;-1:-1:-1::0;;;30307:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30429:57;30465:7;30473:1;30465:10;;;;;;;30429:57;30399:7;30407:1;30399:10;;;;;;;;;;;;;30398:88;;;;;;::::0;::::1;;30521:15;:13;:15::i;:::-;-1:-1:-1::0;;;;;30504:32:0::1;30512:4;-1:-1:-1::0;;;;;30504:32:0::1;;30501:120;;30564:15;:13;:15::i;:::-;-1:-1:-1::0;;;;;30556:33:0::1;:49;30590:14;30556:49;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30556:49:0;30501:120;30675:7;::::0;30684:10;;30645:56:::1;::::0;-1:-1:-1;;;;;30675:7:0::1;::::0;30684;;30675::::1;::::0;30684:10:::1;;;30645:56;30722:4;::::0;30743:10;;30635:66;;-1:-1:-1;;;;;;30722:4:0::1;::::0;30716:19:::1;::::0;30635:66;;30722:4:::1;::::0;30743:10:::1;;;;;;;;;;30716:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30716:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;30784:4:0::1;::::0;30805:10;;-1:-1:-1;;;;;30784:4:0;;::::1;::::0;-1:-1:-1;30778:20:0::1;::::0;-1:-1:-1;30799:4:0;;-1:-1:-1;30805:7:0;;30784:4:::1;::::0;30805:10:::1;;;;;;;;;;30778:38;;;;;;;;;;;;;-1:-1:-1::0;;;;;30778:38:0::1;-1:-1:-1::0;;;;;30778:38:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30778:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30778:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30778:38:0;30771:46:::1;;;;30178:1001;;;30891:7;::::0;30862:54:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;30891:7:0::1;::::0;30900:9;;30862:54;30911:4;;;;;;30862:54;;::::1;::::0;30911:4;;30862:54;30911:4;30862:54;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30862:28:0::1;::::0;-1:-1:-1;;;30862:54:0:i:1;:::-;30852:64;;30953:9;30939:7;30947:1;30939:10;;;;;;;;;;;;;;:23;;30931:74;;;;-1:-1:-1::0;;;30931:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31026:4;::::0;31047:10;;-1:-1:-1;;;;;31026:4:0;;::::1;::::0;31020:19:::1;::::0;31047:7;;31026:4:::1;::::0;31047:10:::1;;;;;;;;;;31020:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31020:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;31088:4:0::1;::::0;31127:7:::1;::::0;-1:-1:-1;;;;;31088:4:0;;::::1;::::0;-1:-1:-1;31082:20:0::1;::::0;-1:-1:-1;31103:50:0::1;::::0;-1:-1:-1;31127:7:0::1;31136:4:::0;;31088::::1;31136:7:::0;::::1;;;;;;;;;;-1:-1:-1::0;;;;;31136:7:0::1;31145:4;;31150:1;31145:7;;;;;;31103:50;31155:7;31163:1;31155:10;;;;;;;;;;;;;;31082:84;;;;;;;;;;;;;-1:-1:-1::0;;;;;31082:84:0::1;-1:-1:-1::0;;;;;31082:84:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31082:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31082:84:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31082:84:0;31075:92:::1;;;;31191:24;31197:7;31206:4;;31191:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31212:2:0;;-1:-1:-1;31191:5:0::1;::::0;-1:-1:-1;;31191:24:0:i:1;:::-;31262:8;31273:30;31288:14;31273:7;31281:1;31273:10;;;;;;;;;;;;;;:14;;:30;;;;:::i;:::-;31262:41;;31330:3;31318:9;:15;31314:80;;;31335:59;31366:10;31390:3;31378:9;:15;31335:30;:59::i;20461:403::-:0;20669:45;;;-1:-1:-1;;;;;20669:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;20669:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;20658:57:0;;;;20623:12;;20637:17;;20658:10;;;;20669:45;20658:57;;;25:18:-1;20658: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;;;20658: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;;20622:93:0;;;;20738:7;:57;;;;-1:-1:-1;20750:11:0;;:16;;:44;;;20781:4;20770:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20770:24:0;20750:44;20722:136;;;;-1:-1:-1;;;20722:136:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20461:403;;;;;:::o;21324:207::-;21433:12;;;21393;21433;;;;;;;;;-1:-1:-1;;;;;21411:7:0;;;21426:5;;21411:35;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;21411:35:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;21392:54:0;;;21461:7;21453:72;;;;-1:-1:-1;;;21453:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21324:207;;;:::o;16599:633::-;16722:14;16768:1;16757:8;:12;16749:67;;;;-1:-1:-1;;;16749:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16847:1;16835:9;:13;:31;;;;;16865:1;16852:10;:14;16835:31;16827:83;;;;-1:-1:-1;;;16827:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16921:23;16947:8;:35;;16977:5;16947:35;;;16966:8;16958:5;:16;16947:35;16921:61;-1:-1:-1;16993:20:0;17016:32;:8;16921:61;17016:32;:12;:32;:::i;:::-;16993:55;-1:-1:-1;17059:14:0;17076:31;16993:55;17096:10;17076:31;:19;:31;:::i;:::-;17059:48;-1:-1:-1;17118:16:0;17137:41;17162:15;17137:20;:9;17151:5;17137:20;:13;:20;:::i;:::-;:24;:41;:24;:41;:::i;:::-;17118:60;;17213:11;17201:9;:23;;;;;;;16599:633;-1:-1:-1;;;;;;;;;;16599:633:0:o;15118:478::-;15207:12;15233:14;15249;15267:26;15278:6;15286;15267:10;:26::i;:::-;15431:32;;;-1:-1:-1;;15431:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;15431:32:0;;;;;15421:43;;;;;;-1:-1:-1;;;;;;15334:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;15334:251:0;;;;;;;15324:262;;;;;;;;;15118:478;-1:-1:-1;;;;;15118:478:0:o;19603:276::-;19691:7;;;19770:5;19742:23;:8;19755:9;19742:23;:12;:23;:::i;:::-;19741:35;;;;;;;-1:-1:-1;19798:28:0;:8;19741:35;19798:28;:12;:28;:::i;:::-;19787:39;-1:-1:-1;19787:39:0;;-1:-1:-1;19856:14:0;-1:-1:-1;19603:276:0;;;;;;:::o;20870:448::-;21113:51;;;-1:-1:-1;;;;;21113:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;21113:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;21102:63:0;;;;21067:12;;21081:17;;21102:10;;;;21113:51;21102:63;;;25:18:-1;21102: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;;;21102: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;;21066:99:0;;;;21188:7;:57;;;;-1:-1:-1;21200:11:0;;:16;;:44;;;21231:4;21220:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21220:24:0;21200:44;21172:140;;;;-1:-1:-1;;;21172:140:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20870:448;;;;;;:::o;18025:734::-;18126:21;18183:1;18168:4;:11;:16;;18160:58;;;;;-1:-1:-1;;;18160:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18250:4;:11;18239:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18239:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;18239:23:0;;18229:33;;18286:8;18273:7;18281:1;18273:10;;;;;;;;;;;;;:21;;;;;18310:6;18305:447;18336:1;18322:4;:11;:15;18318:1;:19;18305:447;;;18359:18;18394:38;18402:7;18411:4;18416:1;18411:7;;;;;;;;;;;;;;18420:4;18425:1;18429;18425:5;18420:11;;;;;;;;;;;;;;18394:7;:38::i;:::-;18359:74;;18448:17;18468:4;-1:-1:-1;;;;;18468:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18468:16:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18468:16:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18468:16:0;18515:18;;;-1:-1:-1;;;18515:18:0;;;;18468:16;;-1:-1:-1;18499:13:0;;-1:-1:-1;;;;;18515:16:0;;;;;:18;;;;;18468:16;;18515:18;;;;;;;:16;:18;;;2:2:-1;;;;27:1;24;17:12;2:2;18515:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18515:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18515:18:0;18605:7;;18515:18;;-1:-1:-1;18549:14:0;;;;18584:42;;18596:7;;18605:4;;18610:1;;18605:7;;;;;;;;;;;;18614:4;18619:1;18623;18619:5;18614:11;;;;;;;;;;;;;;18584;:42::i;:::-;18548:78;;;;18658:82;18671:7;18679:1;18671:10;;;;;;;;;;;;;;18683:9;18694:10;18727:1;-1:-1:-1;;;;;18706:23:0;:9;-1:-1:-1;;;;;18706:23:0;;;18731:8;18658:12;:82::i;:::-;18641:7;18649:1;18653;18649:5;18641:14;;;;;;;;;;;;;;;;;:99;-1:-1:-1;;18339:3:0;;;;;-1:-1:-1;18305:447:0;;-1:-1:-1;;18305:447:0;;;18025:734;;;;;:::o;21874:874::-;21981:6;21976:765;22007:1;21993:4;:11;:15;21989:1;:19;21976:765;;;22031:13;22046:14;22065:4;22070:1;22065:7;;;;;;;;;;;;;;22074:4;22079:1;22083;22079:5;22074:11;;;;;;;;;;;;;;22030:56;;;;22102:14;22121:41;22148:5;22155:6;22121:26;:41::i;:::-;22101:61;;;22177:14;22194:7;22202:1;22206;22202:5;22194:14;;;;;;;;;;;;;;22177:31;;22224:15;22241;22269:6;-1:-1:-1;;;;;22260:15:0;:5;-1:-1:-1;;;;;22260:15:0;;:61;;22302:9;22318:1;22260:61;;;22284:1;22288:9;22260:61;22223:98;;;;22337:15;22354;22373:65;22388:5;22395:6;22403:7;22411:1;22403:10;;;;;;;;;;;;;;22415;22427;22373:14;:65::i;:::-;22336:102;;;;22453:10;22484:1;22470:4;:11;:15;22466:1;:19;:81;;22544:3;22466:81;;;22512:7;;22529:11;;22488:53;;-1:-1:-1;;;;;22512:7:0;;22521:6;;22529:4;;22538:1;22534:5;;;22529:11;;;;;22488:53;22600:7;;22453:94;;-1:-1:-1;22576:47:0;;-1:-1:-1;;;;;22600:7:0;22609:5;22616:6;22576:23;:47::i;:::-;-1:-1:-1;;;;;22562:67:0;;22648:10;22660;22672;22684;22696:2;22710:1;22700:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;22700:12:0;87:42:-1;143:17;;-1:-1;22700:12:0;;22562:165;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22562:165:0;-1:-1:-1;;;;;22562:165: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;22562:165:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22562:165:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;22010:3:0;;;;;-1:-1:-1;21976:765:0;;-1:-1:-1;;;;;;;;;;21976:765:0;;;21874:874;;;:::o;18840:755::-;18941:21;18998:1;18983:4;:11;:16;;18975:58;;;;;-1:-1:-1;;;18975:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19065:4;:11;19054:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19054:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;19054:23:0;;19044:33;;19118:9;19088:7;19113:1;19096:7;:14;:18;19088:27;;;;;;;;;;;;;;;;;:39;19152:11;;-1:-1:-1;;19152:15:0;19138:450;19169:5;;19138:450;;19196:18;19231:38;19239:7;19248:4;19257:1;19253;:5;19248:11;;;;;;;;;;;;;;19261:4;19266:1;19261:7;;;;;;;19231:38;19196:74;;19285:17;19305:4;-1:-1:-1;;;;;19305:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19305:16:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19305:16:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19305:16:0;19352:18;;;-1:-1:-1;;;19352:18:0;;;;19305:16;;-1:-1:-1;19336:13:0;;-1:-1:-1;;;;;19352:16:0;;;;;:18;;;;;19305:16;;19352:18;;;;;;;:16;:18;;;2:2:-1;;;;27:1;24;17:12;2:2;19352:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19352:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19352:18:0;19442:11;;19352:18;;-1:-1:-1;19386:14:0;;;;19421:42;;19433:7;;19442:4;;-1:-1:-1;;19447:5:0;;;19442:11;;;;;;;;;;;;19455:4;19460:1;19455:7;;;;;;;19421:42;19385:78;;;;19495:81;19507:7;19515:1;19507:10;;;;;;;;;;;;;;19519:9;19530:10;19563:1;-1:-1:-1;;;;;19542:23:0;:9;-1:-1:-1;;;;;19542:23:0;;;19567:8;19495:11;:81::i;:::-;19478:7;19490:1;19486;:5;19478:14;;;;;;;;;;;;;;;;;:98;-1:-1:-1;;;;19176:3:0;;;;-1:-1:-1;19138:450:0;;-1:-1:-1;;19138:450:0;32983:950;33096:6;33091:835;33122:1;33108:4;:11;:15;33104:1;:19;33091:835;;;33146:13;33161:14;33180:4;33185:1;33180:7;;;;;;;;;;;;;;33189:4;33194:1;33198;33194:5;33189:11;;;;;;;;;;;;;;33145:56;;;;33217:14;33236:41;33263:5;33270:6;33236:26;:41::i;:::-;33216:61;;;33295:16;33313:17;33334:40;33352:5;33359:6;33367;33334:17;:40::i;:::-;33294:80;;;;33390:15;33407;33435:6;-1:-1:-1;;;;;33426:15:0;:5;-1:-1:-1;;;;;33426:15:0;;:67;;33471:12;33490:1;33426:67;;;33450:1;33454:12;33426:67;33389:104;;;;33511:15;33528;33547:66;33562:5;33569:6;33577:11;33590:10;33602;33547:14;:66::i;:::-;33510:103;;;;33630:10;33661:1;33647:4;:11;:15;33643:1;:19;:81;;33721:3;33643:81;;;33665:53;33689:7;;;;;;;;;-1:-1:-1;;;;;33689:7:0;33698:6;33706:4;33711:1;33715;33711:5;33706:11;;;;;;;33665:53;33800:7;;33630:94;;-1:-1:-1;33741:18:0;;33776:47;;-1:-1:-1;;;;;33800:7:0;33809:5;33816:6;33776:23;:47::i;:::-;33741:83;-1:-1:-1;;;;;;33839:9:0;;;33849:10;33861;33873;33885;33897:2;33911:1;33901:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;33901:12:0;87:42:-1;143:17;;-1:-1;33901:12:0;;33839:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33839:75:0;-1:-1:-1;;;;;33839:75: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;33839:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33839:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;33125:3:0;;;;;-1:-1:-1;33091:835:0;;-1:-1:-1;;;;;;;;;;;;33091:835:0;9158:129;9242:5;;;9237:16;;;;9229:50;;;;;-1:-1:-1;;;9229:50:0;;;;;;;;;;;;-1:-1:-1;;;9229:50:0;;;;;;;;;;;;;;567:98;647:10;567:98;:::o;2515:191::-;2589:16;2608:6;;-1:-1:-1;;;;;2625:17:0;;;-1:-1:-1;;;;;;2625:17:0;;;;;;2658:40;;2608:6;;;;;;;2658:40;;2589:16;2658:40;2515:191;;:::o;9295:142::-;9347:6;9374;;;:30;;-1:-1:-1;;9389:5:0;;;9403:1;9398;9389:5;9398:1;9384:15;;;;;:20;9374:30;9366:63;;;;;-1:-1:-1;;;9366:63:0;;;;;;;;;;;;-1:-1:-1;;;9366:63:0;;;;;;;;;;;;;;17353:590;17476:13;17522:1;17510:9;:13;17502:69;;;;-1:-1:-1;;;17502:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17602:1;17590:9;:13;:31;;;;;17620:1;17607:10;:14;17590:31;17582:83;;;;-1:-1:-1;;;17582:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17676:24;17703:8;:35;;17733:5;17703:35;;;17722:8;17714:5;:16;17703:35;17676:62;-1:-1:-1;17749:14:0;17766:35;17795:5;17766:24;:9;17780;17766:24;:13;:24;:::i;:::-;:28;:35;:28;:35;:::i;:::-;17749:52;-1:-1:-1;17812:16:0;17831:50;17861:19;17831:25;:10;17846:9;17831:25;:14;:25;:::i;:50::-;17812:69;;17903:32;17933:1;17916:11;17904:9;:23;;;;;;;17903:32;:29;:32;:::i;:::-;17892:43;17353:590;-1:-1:-1;;;;;;;;;17353:590:0:o;16158:319::-;16240:12;16283:1;16273:7;:11;16265:60;;;;-1:-1:-1;;;16265:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16355:1;16344:8;:12;:28;;;;;16371:1;16360:8;:12;16344:28;16336:80;;;;-1:-1:-1;;;16336:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16461:8;16437:21;:7;16449:8;16437:21;:11;:21;:::i;:::-;:32;;;;;;;16158:319;-1:-1:-1;;;;16158:319:0:o;14679:347::-;14754:14;14770;14815:6;-1:-1:-1;;;;;14805:16:0;:6;-1:-1:-1;;;;;14805:16:0;;;14797:65;;;;-1:-1:-1;;;14797:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14901:6;-1:-1:-1;;;;;14892:15:0;:6;-1:-1:-1;;;;;14892:15:0;;:53;;14930:6;14938;14892:53;;;14911:6;14919;14892:53;14873:72;;-1:-1:-1;14873:72:0;-1:-1:-1;;;;;;14964:20:0;;14956:62;;;;;-1:-1:-1;;;14956:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;39913:1947;40131:12;;;40226:23;40234:6;40242;40226:7;:23::i;:::-;-1:-1:-1;;;;;40226:37:0;;40222:400;;;40293:4;;-1:-1:-1;;;;;40283:14:0;;;40293:4;;40283:14;40280:331;;;40335:7;;40318:52;;;-1:-1:-1;;;40318:52:0;;-1:-1:-1;;;;;40318:52:0;;;;;;;;;;;;;;;;40335:7;;;;;40318:36;;:52;;;;;;;;;;;;;;40335:7;;40318:52;;;2:2:-1;;;;27:1;24;17:12;2:2;40318:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40318:52:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;40430:6:0;;-1:-1:-1;40389:14:0;:38;40404:22;40430:6;40419;40404:7;:22::i;:::-;-1:-1:-1;;;;;40389:38:0;;;;;;;;;;;;;;-1:-1:-1;40389:38:0;:47;;-1:-1:-1;;;;;;40389:47:0;;;;;;;;;;;40280:331;;;40494:7;;40477:52;;;-1:-1:-1;;;40477:52:0;;-1:-1:-1;;;;;40477:52:0;;;;;;;;;;;;;;;;40494:7;;;;;40477:36;;:52;;;;;;;;;;;;;;40494:7;;40477:52;;;2:2:-1;;;;27:1;24;17:12;2:2;40477:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40477:52:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;40589:6:0;;-1:-1:-1;40548:14:0;:38;40563:22;40571:6;40589;40563:7;:22::i;:::-;-1:-1:-1;;;;;40548:38:0;;;;;;;;;;;;;;-1:-1:-1;40548:38:0;:47;;-1:-1:-1;;;;;;40548:47:0;;;;;;;;;;;40280:331;40693:7;;40633:13;;;;40665:52;;-1:-1:-1;;;;;40693:7:0;40702:6;40710;40665:27;:52::i;:::-;40632:85;;;;40732:8;40744:1;40732:13;:30;;;;-1:-1:-1;40749:13:0;;40732:30;40728:1125;;;40861:4;;40801:14;;-1:-1:-1;40817:14:0;;-1:-1:-1;;;;;;40851:14:0;;;40861:4;;40851:14;40847:298;;;40927:6;40886:14;:38;40901:22;40909:6;40916;40901:7;:22::i;:::-;-1:-1:-1;;;;;40886:38:0;;;;;;;;;;;;;;-1:-1:-1;40886:38:0;:47;;-1:-1:-1;;;;;;40886:47:0;;;;;;;;;;;40847:298;;;40969:4;;-1:-1:-1;;;;;40959:14:0;;;40969:4;;40959:14;40955:190;;;41035:6;40994:14;:38;41009:22;41017:6;41024;41009:7;:22::i;40955:190::-;41123:6;41082:14;:38;41097:22;41105:6;41112;41097:7;:22::i;:::-;-1:-1:-1;;;;;41082:38:0;;;;;;;;;;;;;;-1:-1:-1;41082:38:0;:47;;-1:-1:-1;;;;;;41082:47:0;;;;;;;;;;;40955:190;40728:1125;;;41177:19;41199:57;41221:14;41237:8;41247;41199:21;:57::i;:::-;41177:79;;41293:14;41275;:32;41271:571;;41354:10;41336:14;:28;;41328:78;;;;-1:-1:-1;;;41328:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41447:14;;-1:-1:-1;41463:14:0;-1:-1:-1;41463:14:0;41271:571;;;41519:19;41541:57;41563:14;41579:8;41589;41541:21;:57::i;:::-;41519:79;;41642:14;41624;:32;;41617:40;;;;41702:10;41684:14;:28;;41676:78;;;;-1:-1:-1;;;41676:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41795:14;-1:-1:-1;41811:14:0;;-1:-1:-1;41271:571:0;40728:1125;;39913:1947;;;;;;;;;;;:::o;9022:128::-;9106:5;;;9101:16;;;;9093:49;;;;;-1:-1:-1;;;9093:49:0;;;;;;;;;;;;-1:-1:-1;;;9093:49:0;;;;;;;;;;;;;;15654:391;15747:13;15762;15789:14;15808:26;15819:6;15827;15808:10;:26::i;:::-;15788:46;;;15846:13;15861;15894:32;15902:7;15911:6;15919;15894:7;:32::i;:::-;-1:-1:-1;;;;;15880:59:0;;:61;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15880:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15880:61:0;;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;15880:61:0;;;;;;;-1:-1:-1;;;;;15845:96:0;;;;-1:-1:-1;15845:96:0;;-1:-1:-1;;;;;;15975:16:0;;;;;;;:62;;16018:8;16028;15975:62;;;15995:8;16005;15975:62;15952:85;;;;-1:-1:-1;15654:391:0;-1:-1:-1;;;;;;;15654:391:0:o;31412:725::-;31651:7;;31547:15;;;;;;31627:47;;-1:-1:-1;;;;;31651:7:0;31660:5;31667:6;31627:23;:47::i;:::-;31592:83;;31687:14;31706:41;31733:5;31740:6;31706:26;:41::i;:::-;31686:61;;;31758:17;31778:4;-1:-1:-1;;;;;31778:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31778:16:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31778:16:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31778:16:0;31821:18;;;-1:-1:-1;;;31821:18:0;;;;31778:16;;-1:-1:-1;31805:13:0;;-1:-1:-1;;;;;31821:16:0;;;;;:18;;;;;31778:16;;31821:18;;;;;;;:16;:18;;;2:2:-1;;;;27:1;24;17:12;2:2;31821:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31821:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31821:18:0;;-1:-1:-1;;;;;;31863:19:0;;;;;;;;:121;;31904:6;-1:-1:-1;;;;;31895:15:0;:5;-1:-1:-1;;;;;31895:15:0;;:89;;31949:35;31978:5;31949:24;:10;31964:8;31949:24;:14;:24;:::i;:::-;:28;:35;:28;:35;:::i;:::-;31895:89;;;31913:33;31940:5;31913:22;:8;31926;31913:22;:12;:22;:::i;:33::-;31863:121;;;31890:1;31863:121;31850:134;;32021:6;-1:-1:-1;;;;;32008:19:0;:9;-1:-1:-1;;;;;32008:19:0;;:121;;32049:6;-1:-1:-1;;;;;32040:15:0;:5;-1:-1:-1;;;;;32040:15:0;;;:89;;32094:35;32123:5;32094:24;:10;32109:8;32094:24;:14;:24;:::i;:35::-;32040:89;;;32058:33;32085:5;32058:22;:8;32071;32058:22;:12;:22;:::i;:33::-;32008:121;;;32035:1;32008:121;31995:134;;31412:725;;;;;;;;;;;;:::o;32145:693::-;32349:7;;32242:16;;;;;;32325:47;;-1:-1:-1;;;;;32349:7:0;32358:5;32365:6;32325:23;:47::i;:::-;32290:83;;32387:13;32402;32418:17;32439:4;-1:-1:-1;;;;;32439:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32439:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32439:18:0;;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;32439:18:0;;;;;;;;;;;;;32484;;-1:-1:-1;;;32484:18:0;;;;-1:-1:-1;;;;;32386:71:0;;;;-1:-1:-1;32386:71:0;;;;;-1:-1:-1;32439:18:0;-1:-1:-1;32468:13:0;;-1:-1:-1;;;;;32484:16:0;;;;;:18;;;;;32439;;32484;;;;;;:16;:18;;;2:2:-1;;;;27:1;24;17:12;2:2;32484:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32484:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32484:18:0;;-1:-1:-1;32514:17:0;;-1:-1:-1;;;;;32555:15:0;;;;;;;:61;;32597:8;32607;32555:61;;;32574:8;32584;32555:61;32513:103;;;;32643:56;32686:12;32650:5;-1:-1:-1;;;;;32643:23:0;;32675:4;32643:38;;;;;;;;;;;;;-1:-1:-1;;;;;32643:38:0;-1:-1:-1;;;;;32643:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;32643:56:0;32629:70;-1:-1:-1;32725:105:0;32629:70;32767:12;32781:13;-1:-1:-1;;;;;32796:23:0;;;;32821:8;32725:28;:105::i;:::-;32710:120;;32145:693;;;;;;;;;;;;;:::o;9445:138::-;9497:6;9528:1;9524;:5;9516:39;;;;;-1:-1:-1;;;9516:39:0;;;;;;;;;;;;-1:-1:-1;;;9516:39:0;;;;;;;;;;;;;;;9574:1;9570;:5;;;;;;;9445:138;-1:-1:-1;;;9445:138:0:o
Swarm Source
ipfs://931bf6ff12243863091525b1a373acd415b9fda72b6e5a3528fda022fe7e90dd
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $3,348.68 | 0.00052651 | $1.76 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.