Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ConnectUniswapV2
Compiler Version
v0.6.0+commit.26b70077
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-01-06 */ pragma solidity ^0.6.0; interface TokenInterface { function approve(address, uint256) external; function transfer(address, uint) external; function transferFrom(address, address, uint) external; function deposit() external payable; function withdraw(uint) external; function balanceOf(address) external view returns (uint); function decimals() external view returns (uint); } interface MemoryInterface { function getUint(uint id) external returns (uint num); function setUint(uint id, uint val) external; } interface EventInterface { function emitEvent(uint connectorType, uint connectorID, bytes32 eventCode, bytes calldata eventData) external; } contract Stores { /** * @dev Return ethereum address */ function getEthAddr() internal pure returns (address) { return 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; // ETH Address } /** * @dev Return memory variable address */ function getMemoryAddr() internal pure returns (address) { return 0x8a5419CfC711B2343c17a6ABf4B2bAFaBb06957F; // InstaMemory Address } /** * @dev Return InstaEvent Address. */ function getEventAddr() internal pure returns (address) { return 0x2af7ea6Cb911035f3eb1ED895Cb6692C39ecbA97; // InstaEvent Address } /** * @dev Get Uint value from InstaMemory Contract. */ function getUint(uint getId, uint val) internal returns (uint returnVal) { returnVal = getId == 0 ? val : MemoryInterface(getMemoryAddr()).getUint(getId); } /** * @dev Set Uint value in InstaMemory Contract. */ function setUint(uint setId, uint val) virtual internal { if (setId != 0) MemoryInterface(getMemoryAddr()).setUint(setId, val); } /** * @dev emit event on event contract */ function emitEvent(bytes32 eventCode, bytes memory eventData) virtual internal { (uint model, uint id) = connectorID(); EventInterface(getEventAddr()).emitEvent(model, id, eventCode, eventData); } /** * @dev Connector Details. */ function connectorID() public pure returns(uint model, uint id) { (model, id) = (1, 71); } } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract DSMath { uint constant WAD = 10 ** 18; uint constant RAY = 10 ** 27; function add(uint x, uint y) internal pure returns (uint z) { z = SafeMath.add(x, y); } function sub(uint x, uint y) internal virtual pure returns (uint z) { z = SafeMath.sub(x, y); } function mul(uint x, uint y) internal pure returns (uint z) { z = SafeMath.mul(x, y); } function div(uint x, uint y) internal pure returns (uint z) { z = SafeMath.div(x, y); } function wmul(uint x, uint y) internal pure returns (uint z) { z = SafeMath.add(SafeMath.mul(x, y), WAD / 2) / WAD; } function wdiv(uint x, uint y) internal pure returns (uint z) { z = SafeMath.add(SafeMath.mul(x, WAD), y / 2) / y; } function rdiv(uint x, uint y) internal pure returns (uint z) { z = SafeMath.add(SafeMath.mul(x, RAY), y / 2) / y; } function rmul(uint x, uint y) internal pure returns (uint z) { z = SafeMath.add(SafeMath.mul(x, y), RAY / 2) / RAY; } } pragma solidity >=0.4.0; // computes square roots using the babylonian method // https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method library Babylonian { // credit for this implementation goes to // https://github.com/abdk-consulting/abdk-libraries-solidity/blob/master/ABDKMath64x64.sol#L687 function sqrt(uint256 x) internal pure returns (uint256) { if (x == 0) return 0; // this block is equivalent to r = uint256(1) << (BitMath.mostSignificantBit(x) / 2); // however that code costs significantly more gas uint256 xx = x; uint256 r = 1; if (xx >= 0x100000000000000000000000000000000) { xx >>= 128; r <<= 64; } if (xx >= 0x10000000000000000) { xx >>= 64; r <<= 32; } if (xx >= 0x100000000) { xx >>= 32; r <<= 16; } if (xx >= 0x10000) { xx >>= 16; r <<= 8; } if (xx >= 0x100) { xx >>= 8; r <<= 4; } if (xx >= 0x10) { xx >>= 4; r <<= 2; } if (xx >= 0x8) { r <<= 1; } r = (r + x / r) >> 1; r = (r + x / r) >> 1; r = (r + x / r) >> 1; r = (r + x / r) >> 1; r = (r + x / r) >> 1; r = (r + x / r) >> 1; r = (r + x / r) >> 1; // Seven iterations should be enough uint256 r1 = x / r; return (r < r1 ? r : r1); } } interface IUniswapV2Router02 { 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 removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); 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 quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Factory { 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 feeTo() external view returns (address); function feeToSetter() external view returns (address); function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Pair { function balanceOf(address owner) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); } contract UniswapHelpers is Stores, DSMath { using SafeMath for uint256; /** * @dev Return WETH address */ function getAddressWETH() internal pure returns (address) { return 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; // mainnet // return 0xd0A1E359811322d97991E03f863a0C30C2cF029C; // kovan } /** * @dev Return uniswap v2 router02 Address */ function getUniswapAddr() internal pure returns (address) { return 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; } function convert18ToDec(uint _dec, uint256 _amt) internal pure returns (uint256 amt) { amt = (_amt / 10 ** (18 - _dec)); } function convertTo18(uint _dec, uint256 _amt) internal pure returns (uint256 amt) { amt = mul(_amt, 10 ** (18 - _dec)); } function getTokenBalace(address token) internal view returns (uint256 amt) { amt = token == getEthAddr() ? address(this).balance : TokenInterface(token).balanceOf(address(this)); } function changeEthAddress(address buy, address sell) internal pure returns(TokenInterface _buy, TokenInterface _sell){ _buy = buy == getEthAddr() ? TokenInterface(getAddressWETH()) : TokenInterface(buy); _sell = sell == getEthAddr() ? TokenInterface(getAddressWETH()) : TokenInterface(sell); } function convertEthToWeth(TokenInterface token, uint amount) internal { if(address(token) == getAddressWETH()) token.deposit.value(amount)(); } function convertWethToEth(TokenInterface token, uint amount) internal { if(address(token) == getAddressWETH()) { token.approve(getAddressWETH(), amount); token.withdraw(amount); } } function getExpectedBuyAmt( IUniswapV2Router02 router, address[] memory paths, uint sellAmt ) internal view returns(uint buyAmt) { uint[] memory amts = router.getAmountsOut( sellAmt, paths ); buyAmt = amts[1]; } function getExpectedSellAmt( IUniswapV2Router02 router, address[] memory paths, uint buyAmt ) internal view returns(uint sellAmt) { uint[] memory amts = router.getAmountsIn( buyAmt, paths ); sellAmt = amts[0]; } function checkPair( IUniswapV2Router02 router, address[] memory paths ) internal view { address pair = IUniswapV2Factory(router.factory()).getPair(paths[0], paths[1]); require(pair != address(0), "No-exchange-address"); } function getPaths( address buyAddr, address sellAddr ) internal pure returns(address[] memory paths) { paths = new address[](2); paths[0] = address(sellAddr); paths[1] = address(buyAddr); } function changeEthToWeth( address[] memory tokens ) internal pure returns(TokenInterface[] memory _tokens) { _tokens = new TokenInterface[](2); _tokens[0] = tokens[0] == getEthAddr() ? TokenInterface(getAddressWETH()) : TokenInterface(tokens[0]); _tokens[1] = tokens[1] == getEthAddr() ? TokenInterface(getAddressWETH()) : TokenInterface(tokens[1]); } function calculateSwapInAmount(uint256 reserveIn, uint256 userIn) internal pure returns (uint256) { return Babylonian .sqrt( reserveIn.mul( userIn.mul(3988000).add(reserveIn.mul(3988009)) ) ).sub(reserveIn.mul(1997)) / 1994; } } contract LiquidityHelpers is UniswapHelpers { function _addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint slippage ) internal returns (uint _amtA, uint _amtB, uint _liquidity) { IUniswapV2Router02 router = IUniswapV2Router02(getUniswapAddr()); (TokenInterface _tokenA, TokenInterface _tokenB) = changeEthAddress(tokenA, tokenB); convertEthToWeth(_tokenA, amountADesired); convertEthToWeth(_tokenB, amountBDesired); _tokenA.approve(address(router), 0); _tokenA.approve(address(router), amountADesired); _tokenB.approve(address(router), 0); _tokenB.approve(address(router), amountBDesired); uint minAmtA = wmul(sub(WAD, slippage), amountADesired); uint minAmtB = wmul(sub(WAD, slippage), amountBDesired); (_amtA, _amtB, _liquidity) = router.addLiquidity( address(_tokenA), address(_tokenB), amountADesired, amountBDesired, minAmtA, minAmtB, address(this), now + 1 ); if (_amtA < amountADesired) { convertWethToEth(_tokenA, _tokenA.balanceOf(address(this))); } if (_amtB < amountBDesired) { convertWethToEth(_tokenB, _tokenB.balanceOf(address(this))); } } function _addSingleLiquidity( address tokenA, address tokenB, uint amountA, uint minUniAmount ) internal returns (uint _amtA, uint _amtB, uint _liquidity) { IUniswapV2Router02 router = IUniswapV2Router02(getUniswapAddr()); (TokenInterface _tokenA, TokenInterface _tokenB) = changeEthAddress(tokenA, tokenB); uint256 _amountA = amountA; if (amountA == uint(-1)) { _amountA = tokenA == getEthAddr() ? address(this).balance : _tokenA.balanceOf(address(this)); } convertEthToWeth(_tokenA, _amountA); uint256 _amountB; (_amountA, _amountB)= _swapSingleToken(router, _tokenA, _tokenB, _amountA); _tokenA.approve(address(router), 0); _tokenA.approve(address(router), _amountA); _tokenB.approve(address(router), 0); _tokenB.approve(address(router), _amountB); (_amtA, _amtB, _liquidity) = router.addLiquidity( address(_tokenA), address(_tokenB), _amountA, _amountB, 1, // TODO @thrilok209: check this 1, // TODO @thrilok209: check this address(this), now + 1 ); require(_liquidity >= minUniAmount, "too much slippage"); if (_amountA > _amtA) { convertWethToEth(_tokenA, _tokenA.balanceOf(address(this))); } if (_amountB > _amtB) { convertWethToEth(_tokenB, _tokenB.balanceOf(address(this))); } } function _swapSingleToken( IUniswapV2Router02 router, TokenInterface tokenA, TokenInterface tokenB, uint _amountA ) internal returns(uint256 amountA, uint256 amountB){ IUniswapV2Factory factory = IUniswapV2Factory(router.factory()); IUniswapV2Pair lpToken = IUniswapV2Pair(factory.getPair(address(tokenA), address(tokenB))); require(address(lpToken) != address(0), "No-exchange-address"); (uint256 reserveA, uint256 reserveB, ) = lpToken.getReserves(); uint256 reserveIn = lpToken.token0() == address(tokenA) ? reserveA : reserveB; uint256 swapAmtA = calculateSwapInAmount(reserveIn, _amountA); address[] memory paths = getPaths(address(tokenB), address(tokenA)); tokenA.approve(address(router), swapAmtA); amountB = router.swapExactTokensForTokens( swapAmtA, 1, // TODO @thrilok209: check this paths, address(this), now + 1 )[1]; amountA = sub(_amountA, swapAmtA); } function _removeLiquidity( address tokenA, address tokenB, uint _amt, uint unitAmtA, uint unitAmtB ) internal returns (uint _amtA, uint _amtB, uint _uniAmt) { IUniswapV2Router02 router; TokenInterface _tokenA; TokenInterface _tokenB; (router, _tokenA, _tokenB, _uniAmt) = _getRemoveLiquidityData( tokenA, tokenB, _amt ); { uint minAmtA = convert18ToDec(_tokenA.decimals(), wmul(unitAmtA, _uniAmt)); uint minAmtB = convert18ToDec(_tokenB.decimals(), wmul(unitAmtB, _uniAmt)); (_amtA, _amtB) = router.removeLiquidity( address(_tokenA), address(_tokenB), _uniAmt, minAmtA, minAmtB, address(this), now + 1 ); } convertWethToEth(_tokenA, _amtA); convertWethToEth(_tokenB, _amtB); } function _getRemoveLiquidityData( address tokenA, address tokenB, uint _amt ) internal returns (IUniswapV2Router02 router, TokenInterface _tokenA, TokenInterface _tokenB, uint _uniAmt) { router = IUniswapV2Router02(getUniswapAddr()); (_tokenA, _tokenB) = changeEthAddress(tokenA, tokenB); address exchangeAddr = IUniswapV2Factory(router.factory()).getPair(address(_tokenA), address(_tokenB)); require(exchangeAddr != address(0), "pair-not-found."); TokenInterface uniToken = TokenInterface(exchangeAddr); _uniAmt = _amt == uint(-1) ? uniToken.balanceOf(address(this)) : _amt; uniToken.approve(address(router), _uniAmt); } } contract UniswapLiquidity is LiquidityHelpers { event LogDepositLiquidity( address indexed tokenA, address indexed tokenB, uint amtA, uint amtB, uint uniAmount, uint getIdA, uint getIdB, uint setId ); event LogWithdrawLiquidity( address indexed tokenA, address indexed tokenB, uint amountA, uint amountB, uint uniAmount, uint getId, uint[] setId ); /** * @dev Deposit Liquidity. * @param tokenA tokenA address.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param tokenB tokenB address.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param amountADesired tokenA amount. * @param amountBDesired tokenB amount. * @param slippage slippage for tokenA & tokenB.(For 1%: 1e16, 10%: 1e17) * @param getIdA Get tokenA amount at this ID from `InstaMemory` Contract. * @param getIdB Get tokenB amount at this ID from `InstaMemory` Contract. * @param setId Set token amount at this ID in `InstaMemory` Contract. */ function deposit( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint slippage, uint getIdA, uint getIdB, uint setId ) external payable { uint _amtADesired = getUint(getIdA, amountADesired); uint _amtBDesired = getUint(getIdB, amountBDesired); (uint _amtA, uint _amtB, uint _uniAmt) = _addLiquidity( tokenA, tokenB, _amtADesired, _amtBDesired, slippage ); setUint(setId, _uniAmt); emit LogDepositLiquidity( tokenA, tokenB, _amtA, _amtB, _uniAmt, getIdA, getIdB, setId ); } /** * @dev Deposit Liquidity using Single token. * @param tokenA tokenA address.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param tokenB tokenB address.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param amountA tokenA amount. * @param minUniAmount min uni token amount. * @param getId Get tokenA amount at this ID from `InstaMemory` Contract. * @param setId Set token amount at this ID in `InstaMemory` Contract. */ function singleDeposit( address tokenA, address tokenB, uint amountA, uint minUniAmount, uint getId, uint setId ) external payable { uint _amt = getUint(getId, amountA); (uint _amtA, uint _amtB, uint _uniAmt) = _addSingleLiquidity( tokenA, tokenB, _amt, minUniAmount ); setUint(setId, _uniAmt); emit LogDepositLiquidity( tokenA, tokenB, _amtA, _amtB, _uniAmt, getId, 0, setId ); } /** * @dev Withdraw Liquidity. * @param tokenA tokenA address.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param tokenB tokenB address.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param uniAmt uni token amount. * @param unitAmtA unit amount of amtA/uniAmt with slippage. * @param unitAmtB unit amount of amtB/uniAmt with slippage. * @param getId Get token amount at this ID from `InstaMemory` Contract. * @param setIds Set token amounts at this IDs in `InstaMemory` Contract. */ function withdraw( address tokenA, address tokenB, uint uniAmt, uint unitAmtA, uint unitAmtB, uint getId, uint[] calldata setIds ) external payable { uint _amt = getUint(getId, uniAmt); (uint _amtA, uint _amtB, uint _uniAmt) = _removeLiquidity( tokenA, tokenB, _amt, unitAmtA, unitAmtB ); setUint(setIds[0], _amtA); setUint(setIds[1], _amtB); emit LogWithdrawLiquidity( tokenA, tokenB, _amtA, _amtB, _uniAmt, getId, setIds ); } } contract UniswapResolver is UniswapLiquidity { event LogBuy( address indexed buyToken, address indexed sellToken, uint256 buyAmt, uint256 sellAmt, uint256 getId, uint256 setId ); event LogSell( address indexed buyToken, address indexed sellToken, uint256 buyAmt, uint256 sellAmt, uint256 getId, uint256 setId ); /** * @dev Buy ETH/ERC20_Token. * @param buyAddr buying token address.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param sellAddr selling token amount.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param buyAmt buying token amount. * @param unitAmt unit amount of sellAmt/buyAmt with slippage. * @param getId Get token amount at this ID from `InstaMemory` Contract. * @param setId Set token amount at this ID in `InstaMemory` Contract. */ function buy( address buyAddr, address sellAddr, uint buyAmt, uint unitAmt, uint getId, uint setId ) external payable { uint _buyAmt = getUint(getId, buyAmt); (TokenInterface _buyAddr, TokenInterface _sellAddr) = changeEthAddress(buyAddr, sellAddr); address[] memory paths = getPaths(address(_buyAddr), address(_sellAddr)); uint _slippageAmt = convert18ToDec(_sellAddr.decimals(), wmul(unitAmt, convertTo18(_buyAddr.decimals(), _buyAmt))); IUniswapV2Router02 router = IUniswapV2Router02(getUniswapAddr()); checkPair(router, paths); uint _expectedAmt = getExpectedSellAmt(router, paths, _buyAmt); require(_slippageAmt >= _expectedAmt, "Too much slippage"); convertEthToWeth(_sellAddr, _expectedAmt); _sellAddr.approve(address(router), _expectedAmt); uint _sellAmt = router.swapTokensForExactTokens( _buyAmt, _expectedAmt, paths, address(this), now + 1 )[0]; convertWethToEth(_buyAddr, _buyAmt); setUint(setId, _sellAmt); emit LogBuy(buyAddr, sellAddr, _buyAmt, _sellAmt, getId, setId); } /** * @dev Sell ETH/ERC20_Token. * @param buyAddr buying token address.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param sellAddr selling token amount.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param sellAmt selling token amount. * @param unitAmt unit amount of buyAmt/sellAmt with slippage. * @param getId Get token amount at this ID from `InstaMemory` Contract. * @param setId Set token amount at this ID in `InstaMemory` Contract. */ function sell( address buyAddr, address sellAddr, uint sellAmt, uint unitAmt, uint getId, uint setId ) external payable { uint _sellAmt = getUint(getId, sellAmt); (TokenInterface _buyAddr, TokenInterface _sellAddr) = changeEthAddress(buyAddr, sellAddr); address[] memory paths = getPaths(address(_buyAddr), address(_sellAddr)); if (_sellAmt == uint(-1)) { _sellAmt = sellAddr == getEthAddr() ? address(this).balance : _sellAddr.balanceOf(address(this)); } uint _slippageAmt = convert18ToDec(_buyAddr.decimals(), wmul(unitAmt, convertTo18(_sellAddr.decimals(), _sellAmt))); IUniswapV2Router02 router = IUniswapV2Router02(getUniswapAddr()); checkPair(router, paths); uint _expectedAmt = getExpectedBuyAmt(router, paths, _sellAmt); require(_slippageAmt <= _expectedAmt, "Too much slippage"); convertEthToWeth(_sellAddr, _sellAmt); _sellAddr.approve(address(router), _sellAmt); uint _buyAmt = router.swapExactTokensForTokens( _sellAmt, _expectedAmt, paths, address(this), now + 1 )[1]; convertWethToEth(_buyAddr, _buyAmt); setUint(setId, _buyAmt); emit LogSell(buyAddr, sellAddr, _buyAmt, _sellAmt, getId, setId); } } contract ConnectUniswapV2 is UniswapResolver { string public name = "UniswapV2-v1.1"; }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyToken","type":"address"},{"indexed":true,"internalType":"address","name":"sellToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"buyAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"getId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"setId","type":"uint256"}],"name":"LogBuy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenA","type":"address"},{"indexed":true,"internalType":"address","name":"tokenB","type":"address"},{"indexed":false,"internalType":"uint256","name":"amtA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amtB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"uniAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"getIdA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"getIdB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"setId","type":"uint256"}],"name":"LogDepositLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyToken","type":"address"},{"indexed":true,"internalType":"address","name":"sellToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"buyAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"getId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"setId","type":"uint256"}],"name":"LogSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenA","type":"address"},{"indexed":true,"internalType":"address","name":"tokenB","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"uniAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"getId","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"setId","type":"uint256[]"}],"name":"LogWithdrawLiquidity","type":"event"},{"inputs":[{"internalType":"address","name":"buyAddr","type":"address"},{"internalType":"address","name":"sellAddr","type":"address"},{"internalType":"uint256","name":"buyAmt","type":"uint256"},{"internalType":"uint256","name":"unitAmt","type":"uint256"},{"internalType":"uint256","name":"getId","type":"uint256"},{"internalType":"uint256","name":"setId","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"connectorID","outputs":[{"internalType":"uint256","name":"model","type":"uint256"},{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"pure","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":"slippage","type":"uint256"},{"internalType":"uint256","name":"getIdA","type":"uint256"},{"internalType":"uint256","name":"getIdB","type":"uint256"},{"internalType":"uint256","name":"setId","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"buyAddr","type":"address"},{"internalType":"address","name":"sellAddr","type":"address"},{"internalType":"uint256","name":"sellAmt","type":"uint256"},{"internalType":"uint256","name":"unitAmt","type":"uint256"},{"internalType":"uint256","name":"getId","type":"uint256"},{"internalType":"uint256","name":"setId","type":"uint256"}],"name":"sell","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"minUniAmount","type":"uint256"},{"internalType":"uint256","name":"getId","type":"uint256"},{"internalType":"uint256","name":"setId","type":"uint256"}],"name":"singleDeposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"uniAmt","type":"uint256"},{"internalType":"uint256","name":"unitAmtA","type":"uint256"},{"internalType":"uint256","name":"unitAmtB","type":"uint256"},{"internalType":"uint256","name":"getId","type":"uint256"},{"internalType":"uint256[]","name":"setIds","type":"uint256[]"}],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600e81526020017f556e697377617056322d76312e31000000000000000000000000000000000000815250600090805190602001906200005192919062000066565b503480156200005f57600080fd5b5062000115565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620000a957805160ff1916838001178555620000da565b82800160010185558215620000da579182015b82811115620000d9578251825591602001919060010190620000bc565b5b509050620000e99190620000ed565b5090565b6200011291905b808211156200010e576000816000905550600101620000f4565b5090565b90565b613cca80620001256000396000f3fe6080604052600436106100705760003560e01c8063848d8f281161004e578063848d8f2814610232578063af7c9c75146102be578063c78078681461034a578063eb15f7811461042b57610070565b806306fdde031461007557806321e74bf61461010557806345c9acfe146101a6575b600080fd5b34801561008157600080fd5b5061008a61045d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100ca5780820151818401526020810190506100af565b50505050905090810190601f1680156100f75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101a4600480360361010081101561011c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291905050506104fb565b005b610230600480360360c08110156101bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291905050506105d5565b005b6102bc600480360360c081101561024857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050610bfb565b005b610348600480360360c08110156102d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291905050506110fd565b005b610429600480360360e081101561036057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156103e557600080fd5b8201836020820111156103f757600080fd5b8035906020019184602083028401116401000000008311171561041957600080fd5b90919293919293905050506111c6565b005b34801561043757600080fd5b506104406112e8565b604051808381526020018281526020019250505060405180910390f35b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104f35780601f106104c8576101008083540402835291602001916104f3565b820191906000526020600020905b8154815290600101906020018083116104d657829003601f168201915b505050505081565b60006105078488611301565b905060006105158488611301565b905060008060006105298d8d87878d6113ae565b92509250925061053986826119b0565b8b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167f98446d47f482c993d2f97a98ef5d5e5353a7bdc8aaee667ec7bf97925d629f7b8585858d8d8d60405180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390a350505050505050505050505050565b60006105e18386611301565b90506000806105f08989611a37565b9150915060606106008383611ad7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84141561072657610632611ba2565b73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614610721578173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156106e157600080fd5b505afa1580156106f5573d6000803e3d6000fd5b505050506040513d602081101561070b57600080fd5b8101908080519060200190929190505050610723565b475b93505b60006108448473ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561077157600080fd5b505afa158015610785573d6000803e3d6000fd5b505050506040513d602081101561079b57600080fd5b810190808051906020019092919050505061083f8a61083a8773ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156107f957600080fd5b505afa15801561080d573d6000803e3d6000fd5b505050506040513d602081101561082357600080fd5b81019080805190602001909291905050508a611bbe565b611bd8565b611c18565b90506000610850611c32565b905061085c8184611c4e565b6000610869828589611e8e565b9050808311156108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f546f6f206d75636820736c69707061676500000000000000000000000000000081525060200191505060405180910390fd5b6108eb8588612022565b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b383896040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561097257600080fd5b505af1158015610986573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff166338ed173989848830600142016040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610a46578082015181840152602081019050610a2b565b505050509050019650505050505050600060405180830381600087803b158015610a6f57600080fd5b505af1158015610a83573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015610aad57600080fd5b8101908080516040519392919084640100000000821115610acd57600080fd5b83820191506020820185811115610ae357600080fd5b8251866020820283011164010000000082111715610b0057600080fd5b8083526020830192505050908051906020019060200280838360005b83811015610b37578082015181840152602081019050610b1c565b50505050905001604052505050600181518110610b5057fe5b60200260200101519050610b6487826120c3565b610b6e89826119b0565b8c73ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff167f1cfcd3047f831e194b89f1ca8957ba1aa919764f692e915eef67b5e7a3e71acb838b8e8e6040518085815260200184815260200183815260200182815260200194505050505060405180910390a35050505050505050505050505050565b6000610c078386611301565b9050600080610c168989611a37565b915091506060610c268383611ad7565b90506000610d468373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610c7357600080fd5b505afa158015610c87573d6000803e3d6000fd5b505050506040513d6020811015610c9d57600080fd5b8101908080519060200190929190505050610d418a610d3c8873ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610cfb57600080fd5b505afa158015610d0f573d6000803e3d6000fd5b505050506040513d6020811015610d2557600080fd5b81019080805190602001909291905050508a611bbe565b611bd8565b611c18565b90506000610d52611c32565b9050610d5e8184611c4e565b6000610d6b828589612214565b905080831015610de3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f546f6f206d75636820736c69707061676500000000000000000000000000000081525060200191505060405180910390fd5b610ded8582612022565b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b383836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610e7457600080fd5b505af1158015610e88573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff16638803dbee89848830600142016040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610f48578082015181840152602081019050610f2d565b505050509050019650505050505050600060405180830381600087803b158015610f7157600080fd5b505af1158015610f85573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015610faf57600080fd5b8101908080516040519392919084640100000000821115610fcf57600080fd5b83820191506020820185811115610fe557600080fd5b825186602082028301116401000000008211171561100257600080fd5b8083526020830192505050908051906020019060200280838360005b8381101561103957808201518184015260208101905061101e565b5050505090500160405250505060008151811061105257fe5b6020026020010151905061106687896120c3565b61107089826119b0565b8c73ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff167f1c35239455616e5d56d6e721c41fe501666f6d3f292e87e7c20f6d08dcb0b44b8a848e8e6040518085815260200184815260200183815260200182815260200194505050505060405180910390a35050505050505050505050505050565b60006111098386611301565b9050600080600061111c8a8a868a6123a8565b92509250925061112c85826119b0565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167f98446d47f482c993d2f97a98ef5d5e5353a7bdc8aaee667ec7bf97925d629f7b8585858b60008c60405180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390a350505050505050505050565b60006111d28488611301565b905060008060006111e68c8c868c8c612b17565b925092509250611209868660008181106111fc57fe5b90506020020135846119b0565b6112268686600181811061121957fe5b90506020020135836119b0565b8a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f43f0c8ec69d4b420508325850527c82aaa490daf01006b263b7e034035a234598585858c8c8c60405180878152602001868152602001858152602001848152602001806020018281038252848482818152602001925060200280828437600081840152601f19601f82011690508083019250505097505050505050505060405180910390a3505050505050505050505050565b6000806001604781915080905080925081935050509091565b60008083146113a457611312612de3565b73ffffffffffffffffffffffffffffffffffffffff1663a9c70eaa846040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561136457600080fd5b505af1158015611378573d6000803e3d6000fd5b505050506040513d602081101561138e57600080fd5b81019080805190602001909291905050506113a6565b815b905092915050565b6000806000806113bc611c32565b90506000806113cb8b8b611a37565b915091506113d9828a612022565b6113e38189612022565b8173ffffffffffffffffffffffffffffffffffffffff1663095ea7b38460006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561146b57600080fd5b505af115801561147f573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663095ea7b3848b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561150a57600080fd5b505af115801561151e573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663095ea7b38460006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156115aa57600080fd5b505af11580156115be573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3848a6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561164957600080fd5b505af115801561165d573d6000803e3d6000fd5b50505050600061167e611678670de0b6b3a76400008a612dff565b8b611bd8565b9050600061169d611697670de0b6b3a76400008b612dff565b8b611bd8565b90508473ffffffffffffffffffffffffffffffffffffffff1663e8e3370085858e8e878730600142016040518963ffffffff1660e01b8152600401808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200198505050505050505050606060405180830381600087803b1580156117b157600080fd5b505af11580156117c5573d6000803e3d6000fd5b505050506040513d60608110156117db57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050809850819950829a505050508a8810156118d6576118d5848573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561189557600080fd5b505afa1580156118a9573d6000803e3d6000fd5b505050506040513d60208110156118bf57600080fd5b81019080805190602001909291905050506120c3565b5b898710156119a05761199f838473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561195f57600080fd5b505afa158015611973573d6000803e3d6000fd5b505050506040513d602081101561198957600080fd5b81019080805190602001909291905050506120c3565b5b5050505050955095509592505050565b60008214611a33576119c0612de3565b73ffffffffffffffffffffffffffffffffffffffff166361e3c94483836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015611a1a57600080fd5b505af1158015611a2e573d6000803e3d6000fd5b505050505b5050565b600080611a42611ba2565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611a7a5783611a83565b611a82612e13565b5b9150611a8d611ba2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611ac55782611ace565b611acd612e13565b5b90509250929050565b60606002604051908082528060200260200182016040528015611b095781602001602082028038833980820191505090505b5090508181600081518110611b1a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508281600181518110611b6257fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505092915050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee905090565b6000611bd08284601203600a0a612e2f565b905092915050565b6000670de0b6b3a7640000611c08611bf08585612e43565b6002670de0b6b3a764000081611c0257fe5b04612ec9565b81611c0f57fe5b04905092915050565b600082601203600a0a8281611c2957fe5b04905092915050565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905090565b60008273ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611c9657600080fd5b505afa158015611caa573d6000803e3d6000fd5b505050506040513d6020811015611cc057600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663e6a4390583600081518110611cf957fe5b602002602001015184600181518110611d0e57fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015611da957600080fd5b505afa158015611dbd573d6000803e3d6000fd5b505050506040513d6020811015611dd357600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e89576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4e6f2d65786368616e67652d616464726573730000000000000000000000000081525060200191505060405180910390fd5b505050565b600060608473ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84866040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015611f08578082015181840152602081019050611eed565b50505050905001935050505060006040518083038186803b158015611f2c57600080fd5b505afa158015611f40573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611f6a57600080fd5b8101908080516040519392919084640100000000821115611f8a57600080fd5b83820191506020820185811115611fa057600080fd5b8251866020820283011164010000000082111715611fbd57600080fd5b8083526020830192505050908051906020019060200280838360005b83811015611ff4578082015181840152602081019050611fd9565b5050505090500160405250505090508060018151811061201057fe5b60200260200101519150509392505050565b61202a612e13565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120bf578173ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156120a557600080fd5b505af11580156120b9573d6000803e3d6000fd5b50505050505b5050565b6120cb612e13565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612210578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b3612122612e13565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561218c57600080fd5b505af11580156121a0573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156121f757600080fd5b505af115801561220b573d6000803e3d6000fd5b505050505b5050565b600060608473ffffffffffffffffffffffffffffffffffffffff16631f00ca7484866040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561228e578082015181840152602081019050612273565b50505050905001935050505060006040518083038186803b1580156122b257600080fd5b505afa1580156122c6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156122f057600080fd5b810190808051604051939291908464010000000082111561231057600080fd5b8382019150602082018581111561232657600080fd5b825186602082028301116401000000008211171561234357600080fd5b8083526020830192505050908051906020019060200280838360005b8381101561237a57808201518184015260208101905061235f565b5050505090500160405250505090508060008151811061239657fe5b60200260200101519150509392505050565b6000806000806123b6611c32565b90506000806123c58a8a611a37565b9150915060008890507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8914156124f2576123fe611ba2565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16146124ed578273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156124ad57600080fd5b505afa1580156124c1573d6000803e3d6000fd5b505050506040513d60208110156124d757600080fd5b81019080805190602001909291905050506124ef565b475b90505b6124fc8382612022565b600061250a85858585612f51565b80925081935050508373ffffffffffffffffffffffffffffffffffffffff1663095ea7b38660006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561259a57600080fd5b505af11580156125ae573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663095ea7b386846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561263957600080fd5b505af115801561264d573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1663095ea7b38660006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156126d957600080fd5b505af11580156126ed573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1663095ea7b386836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561277857600080fd5b505af115801561278c573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff1663e8e337008585858560018030600142016040518963ffffffff1660e01b8152600401808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200198505050505050505050606060405180830381600087803b1580156128a357600080fd5b505af11580156128b7573d6000803e3d6000fd5b505050506040513d60608110156128cd57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050809850819950829a5050505088861015612974576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f746f6f206d75636820736c69707061676500000000000000000000000000000081525060200191505060405180910390fd5b87821115612a3e57612a3d848573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156129fd57600080fd5b505afa158015612a11573d6000803e3d6000fd5b505050506040513d6020811015612a2757600080fd5b81019080805190602001909291905050506120c3565b5b86811115612b0857612b07838473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612ac757600080fd5b505afa158015612adb573d6000803e3d6000fd5b505050506040513d6020811015612af157600080fd5b81019080805190602001909291905050506120c3565b5b50505050509450945094915050565b600080600080600080612b2b8b8b8b61358e565b809750819450829550839650505050506000612bd08373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612b8657600080fd5b505afa158015612b9a573d6000803e3d6000fd5b505050506040513d6020811015612bb057600080fd5b8101908080519060200190929190505050612bcb8b88611bd8565b611c18565b90506000612c678373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612c1d57600080fd5b505afa158015612c31573d6000803e3d6000fd5b505050506040513d6020811015612c4757600080fd5b8101908080519060200190929190505050612c628b89611bd8565b611c18565b90508473ffffffffffffffffffffffffffffffffffffffff1663baa2abde858589868630600142016040518863ffffffff1660e01b8152600401808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019750505050505050506040805180830381600087803b158015612d7257600080fd5b505af1158015612d86573d6000803e3d6000fd5b505050506040513d6040811015612d9c57600080fd5b81019080805190602001909291908051906020019092919050505080985081995050505050612dcb82876120c3565b612dd581866120c3565b505050955095509592505050565b6000738a5419cfc711b2343c17a6abf4b2bafabb06957f905090565b6000612e0b838361395a565b905092915050565b600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2905090565b6000612e3b8383612e43565b905092915050565b600080831415612e565760009050612ec3565b6000828402905082848281612e6757fe5b0414612ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613c746021913960400191505060405180910390fd5b809150505b92915050565b600080828401905083811015612f47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612f9c57600080fd5b505afa158015612fb0573d6000803e3d6000fd5b505050506040513d6020811015612fc657600080fd5b8101908080519060200190929190505050905060008173ffffffffffffffffffffffffffffffffffffffff1663e6a4390588886040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561308c57600080fd5b505afa1580156130a0573d6000803e3d6000fd5b505050506040513d60208110156130b657600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561316c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4e6f2d65786368616e67652d616464726573730000000000000000000000000081525060200191505060405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156131b557600080fd5b505afa1580156131c9573d6000803e3d6000fd5b505050506040513d60608110156131df57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff16915060008973ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561328857600080fd5b505afa15801561329c573d6000803e3d6000fd5b505050506040513d60208110156132b257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16146132e457816132e6565b825b905060006132f4828a6139a4565b905060606133028b8d611ad7565b90508b73ffffffffffffffffffffffffffffffffffffffff1663095ea7b38e846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561338b57600080fd5b505af115801561339f573d6000803e3d6000fd5b505050508c73ffffffffffffffffffffffffffffffffffffffff166338ed17398360018430600142016040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561345e578082015181840152602081019050613443565b505050509050019650505050505050600060405180830381600087803b15801561348757600080fd5b505af115801561349b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156134c557600080fd5b81019080805160405193929190846401000000008211156134e557600080fd5b838201915060208201858111156134fb57600080fd5b825186602082028301116401000000008211171561351857600080fd5b8083526020830192505050908051906020019060200280838360005b8381101561354f578082015181840152602081019050613534565b5050505090500160405250505060018151811061356857fe5b6020026020010151975061357c8a83612dff565b98505050505050505094509492505050565b60008060008061359c611c32565b93506135a88787611a37565b809350819450505060008473ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156135f857600080fd5b505afa15801561360c573d6000803e3d6000fd5b505050506040513d602081101561362257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663e6a4390585856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156136e357600080fd5b505afa1580156136f7573d6000803e3d6000fd5b505050506040513d602081101561370d57600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156137c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f706169722d6e6f742d666f756e642e000000000000000000000000000000000081525060200191505060405180910390fd5b60008190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87146137f557866138ae565b8073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561387257600080fd5b505afa158015613886573d6000803e3d6000fd5b505050506040513d602081101561389c57600080fd5b81019080805190602001909291905050505b92508073ffffffffffffffffffffffffffffffffffffffff1663095ea7b387856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561393757600080fd5b505af115801561394b573d6000803e3d6000fd5b50505050505093509350935093565b600061399c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a36565b905092915050565b60006107ca613a266139c16107cd86612e4390919063ffffffff16565b613a18613a13613a046139e0623cda298a612e4390919063ffffffff16565b6139f6623cda208a612e4390919063ffffffff16565b612ec990919063ffffffff16565b88612e4390919063ffffffff16565b613af6565b61395a90919063ffffffff16565b81613a2d57fe5b04905092915050565b6000838311158290613ae3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613aa8578082015181840152602081019050613a8d565b50505050905090810190601f168015613ad55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080821415613b095760009050613c6e565b60008290506000600190507001000000000000000000000000000000008210613b3b57608082901c9150604081901b90505b680100000000000000008210613b5a57604082901c9150602081901b90505b6401000000008210613b7557602082901c9150601081901b90505b620100008210613b8e57601082901c9150600881901b90505b6101008210613ba657600882901c9150600481901b90505b60108210613bbd57600482901c9150600281901b90505b60088210613bcd57600181901b90505b6001818581613bd857fe5b048201901c90506001818581613bea57fe5b048201901c90506001818581613bfc57fe5b048201901c90506001818581613c0e57fe5b048201901c90506001818581613c2057fe5b048201901c90506001818581613c3257fe5b048201901c90506001818581613c4457fe5b048201901c90506000818581613c5657fe5b049050808210613c665780613c68565b815b93505050505b91905056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220431c1c456e00b34f5c9def14904897c77af3467afbf6d57643ca29f8ba35317b64736f6c63430006000033
Deployed Bytecode
0x6080604052600436106100705760003560e01c8063848d8f281161004e578063848d8f2814610232578063af7c9c75146102be578063c78078681461034a578063eb15f7811461042b57610070565b806306fdde031461007557806321e74bf61461010557806345c9acfe146101a6575b600080fd5b34801561008157600080fd5b5061008a61045d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100ca5780820151818401526020810190506100af565b50505050905090810190601f1680156100f75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101a4600480360361010081101561011c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291905050506104fb565b005b610230600480360360c08110156101bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291905050506105d5565b005b6102bc600480360360c081101561024857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050610bfb565b005b610348600480360360c08110156102d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291905050506110fd565b005b610429600480360360e081101561036057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156103e557600080fd5b8201836020820111156103f757600080fd5b8035906020019184602083028401116401000000008311171561041957600080fd5b90919293919293905050506111c6565b005b34801561043757600080fd5b506104406112e8565b604051808381526020018281526020019250505060405180910390f35b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104f35780601f106104c8576101008083540402835291602001916104f3565b820191906000526020600020905b8154815290600101906020018083116104d657829003601f168201915b505050505081565b60006105078488611301565b905060006105158488611301565b905060008060006105298d8d87878d6113ae565b92509250925061053986826119b0565b8b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167f98446d47f482c993d2f97a98ef5d5e5353a7bdc8aaee667ec7bf97925d629f7b8585858d8d8d60405180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390a350505050505050505050505050565b60006105e18386611301565b90506000806105f08989611a37565b9150915060606106008383611ad7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84141561072657610632611ba2565b73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614610721578173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156106e157600080fd5b505afa1580156106f5573d6000803e3d6000fd5b505050506040513d602081101561070b57600080fd5b8101908080519060200190929190505050610723565b475b93505b60006108448473ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561077157600080fd5b505afa158015610785573d6000803e3d6000fd5b505050506040513d602081101561079b57600080fd5b810190808051906020019092919050505061083f8a61083a8773ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156107f957600080fd5b505afa15801561080d573d6000803e3d6000fd5b505050506040513d602081101561082357600080fd5b81019080805190602001909291905050508a611bbe565b611bd8565b611c18565b90506000610850611c32565b905061085c8184611c4e565b6000610869828589611e8e565b9050808311156108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f546f6f206d75636820736c69707061676500000000000000000000000000000081525060200191505060405180910390fd5b6108eb8588612022565b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b383896040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561097257600080fd5b505af1158015610986573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff166338ed173989848830600142016040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610a46578082015181840152602081019050610a2b565b505050509050019650505050505050600060405180830381600087803b158015610a6f57600080fd5b505af1158015610a83573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015610aad57600080fd5b8101908080516040519392919084640100000000821115610acd57600080fd5b83820191506020820185811115610ae357600080fd5b8251866020820283011164010000000082111715610b0057600080fd5b8083526020830192505050908051906020019060200280838360005b83811015610b37578082015181840152602081019050610b1c565b50505050905001604052505050600181518110610b5057fe5b60200260200101519050610b6487826120c3565b610b6e89826119b0565b8c73ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff167f1cfcd3047f831e194b89f1ca8957ba1aa919764f692e915eef67b5e7a3e71acb838b8e8e6040518085815260200184815260200183815260200182815260200194505050505060405180910390a35050505050505050505050505050565b6000610c078386611301565b9050600080610c168989611a37565b915091506060610c268383611ad7565b90506000610d468373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610c7357600080fd5b505afa158015610c87573d6000803e3d6000fd5b505050506040513d6020811015610c9d57600080fd5b8101908080519060200190929190505050610d418a610d3c8873ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610cfb57600080fd5b505afa158015610d0f573d6000803e3d6000fd5b505050506040513d6020811015610d2557600080fd5b81019080805190602001909291905050508a611bbe565b611bd8565b611c18565b90506000610d52611c32565b9050610d5e8184611c4e565b6000610d6b828589612214565b905080831015610de3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f546f6f206d75636820736c69707061676500000000000000000000000000000081525060200191505060405180910390fd5b610ded8582612022565b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b383836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610e7457600080fd5b505af1158015610e88573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff16638803dbee89848830600142016040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610f48578082015181840152602081019050610f2d565b505050509050019650505050505050600060405180830381600087803b158015610f7157600080fd5b505af1158015610f85573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015610faf57600080fd5b8101908080516040519392919084640100000000821115610fcf57600080fd5b83820191506020820185811115610fe557600080fd5b825186602082028301116401000000008211171561100257600080fd5b8083526020830192505050908051906020019060200280838360005b8381101561103957808201518184015260208101905061101e565b5050505090500160405250505060008151811061105257fe5b6020026020010151905061106687896120c3565b61107089826119b0565b8c73ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff167f1c35239455616e5d56d6e721c41fe501666f6d3f292e87e7c20f6d08dcb0b44b8a848e8e6040518085815260200184815260200183815260200182815260200194505050505060405180910390a35050505050505050505050505050565b60006111098386611301565b9050600080600061111c8a8a868a6123a8565b92509250925061112c85826119b0565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167f98446d47f482c993d2f97a98ef5d5e5353a7bdc8aaee667ec7bf97925d629f7b8585858b60008c60405180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390a350505050505050505050565b60006111d28488611301565b905060008060006111e68c8c868c8c612b17565b925092509250611209868660008181106111fc57fe5b90506020020135846119b0565b6112268686600181811061121957fe5b90506020020135836119b0565b8a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f43f0c8ec69d4b420508325850527c82aaa490daf01006b263b7e034035a234598585858c8c8c60405180878152602001868152602001858152602001848152602001806020018281038252848482818152602001925060200280828437600081840152601f19601f82011690508083019250505097505050505050505060405180910390a3505050505050505050505050565b6000806001604781915080905080925081935050509091565b60008083146113a457611312612de3565b73ffffffffffffffffffffffffffffffffffffffff1663a9c70eaa846040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561136457600080fd5b505af1158015611378573d6000803e3d6000fd5b505050506040513d602081101561138e57600080fd5b81019080805190602001909291905050506113a6565b815b905092915050565b6000806000806113bc611c32565b90506000806113cb8b8b611a37565b915091506113d9828a612022565b6113e38189612022565b8173ffffffffffffffffffffffffffffffffffffffff1663095ea7b38460006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561146b57600080fd5b505af115801561147f573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663095ea7b3848b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561150a57600080fd5b505af115801561151e573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663095ea7b38460006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156115aa57600080fd5b505af11580156115be573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3848a6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561164957600080fd5b505af115801561165d573d6000803e3d6000fd5b50505050600061167e611678670de0b6b3a76400008a612dff565b8b611bd8565b9050600061169d611697670de0b6b3a76400008b612dff565b8b611bd8565b90508473ffffffffffffffffffffffffffffffffffffffff1663e8e3370085858e8e878730600142016040518963ffffffff1660e01b8152600401808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200198505050505050505050606060405180830381600087803b1580156117b157600080fd5b505af11580156117c5573d6000803e3d6000fd5b505050506040513d60608110156117db57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050809850819950829a505050508a8810156118d6576118d5848573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561189557600080fd5b505afa1580156118a9573d6000803e3d6000fd5b505050506040513d60208110156118bf57600080fd5b81019080805190602001909291905050506120c3565b5b898710156119a05761199f838473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561195f57600080fd5b505afa158015611973573d6000803e3d6000fd5b505050506040513d602081101561198957600080fd5b81019080805190602001909291905050506120c3565b5b5050505050955095509592505050565b60008214611a33576119c0612de3565b73ffffffffffffffffffffffffffffffffffffffff166361e3c94483836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015611a1a57600080fd5b505af1158015611a2e573d6000803e3d6000fd5b505050505b5050565b600080611a42611ba2565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611a7a5783611a83565b611a82612e13565b5b9150611a8d611ba2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611ac55782611ace565b611acd612e13565b5b90509250929050565b60606002604051908082528060200260200182016040528015611b095781602001602082028038833980820191505090505b5090508181600081518110611b1a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508281600181518110611b6257fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505092915050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee905090565b6000611bd08284601203600a0a612e2f565b905092915050565b6000670de0b6b3a7640000611c08611bf08585612e43565b6002670de0b6b3a764000081611c0257fe5b04612ec9565b81611c0f57fe5b04905092915050565b600082601203600a0a8281611c2957fe5b04905092915050565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905090565b60008273ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611c9657600080fd5b505afa158015611caa573d6000803e3d6000fd5b505050506040513d6020811015611cc057600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663e6a4390583600081518110611cf957fe5b602002602001015184600181518110611d0e57fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015611da957600080fd5b505afa158015611dbd573d6000803e3d6000fd5b505050506040513d6020811015611dd357600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e89576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4e6f2d65786368616e67652d616464726573730000000000000000000000000081525060200191505060405180910390fd5b505050565b600060608473ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84866040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015611f08578082015181840152602081019050611eed565b50505050905001935050505060006040518083038186803b158015611f2c57600080fd5b505afa158015611f40573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611f6a57600080fd5b8101908080516040519392919084640100000000821115611f8a57600080fd5b83820191506020820185811115611fa057600080fd5b8251866020820283011164010000000082111715611fbd57600080fd5b8083526020830192505050908051906020019060200280838360005b83811015611ff4578082015181840152602081019050611fd9565b5050505090500160405250505090508060018151811061201057fe5b60200260200101519150509392505050565b61202a612e13565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120bf578173ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156120a557600080fd5b505af11580156120b9573d6000803e3d6000fd5b50505050505b5050565b6120cb612e13565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612210578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b3612122612e13565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561218c57600080fd5b505af11580156121a0573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156121f757600080fd5b505af115801561220b573d6000803e3d6000fd5b505050505b5050565b600060608473ffffffffffffffffffffffffffffffffffffffff16631f00ca7484866040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561228e578082015181840152602081019050612273565b50505050905001935050505060006040518083038186803b1580156122b257600080fd5b505afa1580156122c6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156122f057600080fd5b810190808051604051939291908464010000000082111561231057600080fd5b8382019150602082018581111561232657600080fd5b825186602082028301116401000000008211171561234357600080fd5b8083526020830192505050908051906020019060200280838360005b8381101561237a57808201518184015260208101905061235f565b5050505090500160405250505090508060008151811061239657fe5b60200260200101519150509392505050565b6000806000806123b6611c32565b90506000806123c58a8a611a37565b9150915060008890507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8914156124f2576123fe611ba2565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16146124ed578273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156124ad57600080fd5b505afa1580156124c1573d6000803e3d6000fd5b505050506040513d60208110156124d757600080fd5b81019080805190602001909291905050506124ef565b475b90505b6124fc8382612022565b600061250a85858585612f51565b80925081935050508373ffffffffffffffffffffffffffffffffffffffff1663095ea7b38660006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561259a57600080fd5b505af11580156125ae573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663095ea7b386846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561263957600080fd5b505af115801561264d573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1663095ea7b38660006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156126d957600080fd5b505af11580156126ed573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1663095ea7b386836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561277857600080fd5b505af115801561278c573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff1663e8e337008585858560018030600142016040518963ffffffff1660e01b8152600401808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200198505050505050505050606060405180830381600087803b1580156128a357600080fd5b505af11580156128b7573d6000803e3d6000fd5b505050506040513d60608110156128cd57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050809850819950829a5050505088861015612974576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f746f6f206d75636820736c69707061676500000000000000000000000000000081525060200191505060405180910390fd5b87821115612a3e57612a3d848573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156129fd57600080fd5b505afa158015612a11573d6000803e3d6000fd5b505050506040513d6020811015612a2757600080fd5b81019080805190602001909291905050506120c3565b5b86811115612b0857612b07838473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612ac757600080fd5b505afa158015612adb573d6000803e3d6000fd5b505050506040513d6020811015612af157600080fd5b81019080805190602001909291905050506120c3565b5b50505050509450945094915050565b600080600080600080612b2b8b8b8b61358e565b809750819450829550839650505050506000612bd08373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612b8657600080fd5b505afa158015612b9a573d6000803e3d6000fd5b505050506040513d6020811015612bb057600080fd5b8101908080519060200190929190505050612bcb8b88611bd8565b611c18565b90506000612c678373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612c1d57600080fd5b505afa158015612c31573d6000803e3d6000fd5b505050506040513d6020811015612c4757600080fd5b8101908080519060200190929190505050612c628b89611bd8565b611c18565b90508473ffffffffffffffffffffffffffffffffffffffff1663baa2abde858589868630600142016040518863ffffffff1660e01b8152600401808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019750505050505050506040805180830381600087803b158015612d7257600080fd5b505af1158015612d86573d6000803e3d6000fd5b505050506040513d6040811015612d9c57600080fd5b81019080805190602001909291908051906020019092919050505080985081995050505050612dcb82876120c3565b612dd581866120c3565b505050955095509592505050565b6000738a5419cfc711b2343c17a6abf4b2bafabb06957f905090565b6000612e0b838361395a565b905092915050565b600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2905090565b6000612e3b8383612e43565b905092915050565b600080831415612e565760009050612ec3565b6000828402905082848281612e6757fe5b0414612ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613c746021913960400191505060405180910390fd5b809150505b92915050565b600080828401905083811015612f47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612f9c57600080fd5b505afa158015612fb0573d6000803e3d6000fd5b505050506040513d6020811015612fc657600080fd5b8101908080519060200190929190505050905060008173ffffffffffffffffffffffffffffffffffffffff1663e6a4390588886040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561308c57600080fd5b505afa1580156130a0573d6000803e3d6000fd5b505050506040513d60208110156130b657600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561316c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4e6f2d65786368616e67652d616464726573730000000000000000000000000081525060200191505060405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156131b557600080fd5b505afa1580156131c9573d6000803e3d6000fd5b505050506040513d60608110156131df57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff16915060008973ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561328857600080fd5b505afa15801561329c573d6000803e3d6000fd5b505050506040513d60208110156132b257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16146132e457816132e6565b825b905060006132f4828a6139a4565b905060606133028b8d611ad7565b90508b73ffffffffffffffffffffffffffffffffffffffff1663095ea7b38e846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561338b57600080fd5b505af115801561339f573d6000803e3d6000fd5b505050508c73ffffffffffffffffffffffffffffffffffffffff166338ed17398360018430600142016040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561345e578082015181840152602081019050613443565b505050509050019650505050505050600060405180830381600087803b15801561348757600080fd5b505af115801561349b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156134c557600080fd5b81019080805160405193929190846401000000008211156134e557600080fd5b838201915060208201858111156134fb57600080fd5b825186602082028301116401000000008211171561351857600080fd5b8083526020830192505050908051906020019060200280838360005b8381101561354f578082015181840152602081019050613534565b5050505090500160405250505060018151811061356857fe5b6020026020010151975061357c8a83612dff565b98505050505050505094509492505050565b60008060008061359c611c32565b93506135a88787611a37565b809350819450505060008473ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156135f857600080fd5b505afa15801561360c573d6000803e3d6000fd5b505050506040513d602081101561362257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663e6a4390585856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156136e357600080fd5b505afa1580156136f7573d6000803e3d6000fd5b505050506040513d602081101561370d57600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156137c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f706169722d6e6f742d666f756e642e000000000000000000000000000000000081525060200191505060405180910390fd5b60008190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87146137f557866138ae565b8073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561387257600080fd5b505afa158015613886573d6000803e3d6000fd5b505050506040513d602081101561389c57600080fd5b81019080805190602001909291905050505b92508073ffffffffffffffffffffffffffffffffffffffff1663095ea7b387856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561393757600080fd5b505af115801561394b573d6000803e3d6000fd5b50505050505093509350935093565b600061399c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a36565b905092915050565b60006107ca613a266139c16107cd86612e4390919063ffffffff16565b613a18613a13613a046139e0623cda298a612e4390919063ffffffff16565b6139f6623cda208a612e4390919063ffffffff16565b612ec990919063ffffffff16565b88612e4390919063ffffffff16565b613af6565b61395a90919063ffffffff16565b81613a2d57fe5b04905092915050565b6000838311158290613ae3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613aa8578082015181840152602081019050613a8d565b50505050905090810190601f168015613ad55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080821415613b095760009050613c6e565b60008290506000600190507001000000000000000000000000000000008210613b3b57608082901c9150604081901b90505b680100000000000000008210613b5a57604082901c9150602081901b90505b6401000000008210613b7557602082901c9150601081901b90505b620100008210613b8e57601082901c9150600881901b90505b6101008210613ba657600882901c9150600481901b90505b60108210613bbd57600482901c9150600281901b90505b60088210613bcd57600181901b90505b6001818581613bd857fe5b048201901c90506001818581613bea57fe5b048201901c90506001818581613bfc57fe5b048201901c90506001818581613c0e57fe5b048201901c90506001818581613c2057fe5b048201901c90506001818581613c3257fe5b048201901c90506001818581613c4457fe5b048201901c90506000818581613c5657fe5b049050808210613c665780613c68565b815b93505050505b91905056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220431c1c456e00b34f5c9def14904897c77af3467afbf6d57643ca29f8ba35317b64736f6c63430006000033
Deployed Bytecode Sourcemap
31591:93:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31643:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31643:37:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;31643:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23734:1011;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;23734:1011:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30145:1437;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;30145:1437:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28342:1279;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;28342:1279:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25249:818;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;25249:818:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26647:726;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;26647:726:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;26647:726:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;26647:726:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26647:726:0;;;;;;;;;;;;:::i;:::-;;2076:98;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2076:98:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;31643:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23734:1011::-;23985:17;24005:31;24013:6;24021:14;24005:7;:31::i;:::-;23985:51;;24047:17;24067:31;24075:6;24083:14;24067:7;:31::i;:::-;24047:51;;24112:10;24124;24136:12;24152:335;24212:6;24265;24318:12;24377;24436:8;24152:13;:335::i;:::-;24111:376;;;;;;24498:23;24506:5;24513:7;24498;:23::i;:::-;24594:6;24539:196;;24573:6;24539:196;;;24615:5;24635;24655:7;24677:6;24698;24719:5;24539:196;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23734:1011;;;;;;;;;;;;;:::o;30145:1437::-;30335:13;30351:23;30359:5;30366:7;30351;:23::i;:::-;30335:39;;30386:23;30411:24;30439:35;30456:7;30465:8;30439:16;:35::i;:::-;30385:89;;;;30485:22;30510:47;30527:8;30546:9;30510:8;:47::i;:::-;30485:72;;30591:2;30574:8;:20;30570:149;;;30634:12;:10;:12::i;:::-;30622:24;;:8;:24;;;:85;;30673:9;:19;;;30701:4;30673:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30673:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30673:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30673:34:0;;;;;;;;;;;;;;;;30622:85;;;30649:21;30622:85;30611:96;;30570:149;30731:17;30751:108;30766:8;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30766:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30766:19:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30766:19:0;;;;;;;;;;;;;;;;30800:58;30805:7;30814:43;30826:9;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30826:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30826:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30826:20:0;;;;;;;;;;;;;;;;30848:8;30814:11;:43::i;:::-;30800:4;:58::i;:::-;30751:14;:108::i;:::-;30731:128;;30872:25;30919:16;:14;:16::i;:::-;30872:64;;30949:24;30959:6;30967:5;30949:9;:24::i;:::-;30984:17;31004:42;31022:6;31030:5;31037:8;31004:17;:42::i;:::-;30984:62;;31081:12;31065;:28;;31057:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31128:37;31145:9;31156:8;31128:16;:37::i;:::-;31176:9;:17;;;31202:6;31211:8;31176:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31176:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31176:44:0;;;;31233:12;31248:6;:31;;;31294:8;31317:12;31344:5;31372:4;31398:1;31392:3;:7;31248:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;31248:162:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31248:162:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31248:162:0;;;;;;39:16:-1;36:1;17:17;2:54;31248:162:0;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31248:162:0;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;385:12;380:3;373:25;421:4;416:3;412:14;405:21;;0:433;;31248:162:0;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;31248:162:0;;;;;;;;;;;31411:1;31248:165;;;;;;;;;;;;;;31233:180;;31426:35;31443:8;31453:7;31426:16;:35::i;:::-;31474:23;31482:5;31489:7;31474;:23::i;:::-;31532:8;31515:59;;31523:7;31515:59;;;31542:7;31551:8;31561:5;31568;31515:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30145:1437;;;;;;;;;;;;;;:::o;28342:1279::-;28530:12;28545:22;28553:5;28560:6;28545:7;:22::i;:::-;28530:37;;28579:23;28604:24;28632:35;28649:7;28658:8;28632:16;:35::i;:::-;28578:89;;;;28678:22;28703:47;28720:8;28739:9;28703:8;:47::i;:::-;28678:72;;28763:17;28783:107;28798:9;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28798:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28798:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28798:20:0;;;;;;;;;;;;;;;;28833:56;28838:7;28847:41;28859:8;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28859:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28859:19:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28859:19:0;;;;;;;;;;;;;;;;28880:7;28847:11;:41::i;:::-;28833:4;:56::i;:::-;28783:14;:107::i;:::-;28763:127;;28903:25;28950:16;:14;:16::i;:::-;28903:64;;28980:24;28990:6;28998:5;28980:9;:24::i;:::-;29015:17;29035:42;29054:6;29062:5;29069:7;29035:18;:42::i;:::-;29015:62;;29112:12;29096;:28;;29088:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29159:41;29176:9;29187:12;29159:16;:41::i;:::-;29211:9;:17;;;29237:6;29246:12;29211:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29211:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29211:48:0;;;;29272:13;29288:6;:31;;;29334:7;29356:12;29383:5;29411:4;29437:1;29431:3;:7;29288:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;29288:161:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29288:161:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29288:161:0;;;;;;39:16:-1;36:1;17:17;2:54;29288:161:0;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29288:161:0;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;385:12;380:3;373:25;421:4;416:3;412:14;405:21;;0:433;;29288:161:0;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;29288:161:0;;;;;;;;;;;29450:1;29288:164;;;;;;;;;;;;;;29272:180;;29465:35;29482:8;29492:7;29465:16;:35::i;:::-;29513:24;29521:5;29528:8;29513:7;:24::i;:::-;29571:8;29555:58;;29562:7;29555:58;;;29581:7;29590:8;29600:5;29607;29555:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28342:1279;;;;;;;;;;;;;;:::o;25249:818::-;25450:9;25462:23;25470:5;25477:7;25462;:23::i;:::-;25450:35;;25499:10;25511;25523:12;25539:278;25605:6;25658;25711:4;25762:12;25539:19;:278::i;:::-;25498:319;;;;;;25828:23;25836:5;25843:7;25828;:23::i;:::-;25924:6;25869:190;;25903:6;25869:190;;;25945:5;25965;25985:7;26007:5;26027:1;26043:5;25869:190;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25249:818;;;;;;;;;;:::o;26647:726::-;26874:9;26886:22;26894:5;26901:6;26886:7;:22::i;:::-;26874:34;;26922:10;26934;26946:12;26962:134;26993:6;27014;27035:4;27054:8;27077;26962:16;:134::i;:::-;26921:175;;;;;;27109:25;27117:6;;27124:1;27117:9;;;;;;;;;;;;;27128:5;27109:7;:25::i;:::-;27145;27153:6;;27160:1;27153:9;;;;;;;;;;;;;27164:5;27145:7;:25::i;:::-;27245:6;27189:176;;27224:6;27189:176;;;27266:5;27286;27306:7;27328:5;27348:6;;27189:176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;27189:176:0;;;;;;;;;;;;;;;;;;26647:726;;;;;;;;;;;;:::o;2076:98::-;2119:10;2131:7;2162:1;2165:2;2147:21;;;;;;;;;;;;;;2076:98;;:::o;1391:164::-;1448:14;1492:1;1483:5;:10;:66;;1518:15;:13;:15::i;:::-;1502:40;;;1543:5;1502:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1502:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1502:47:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1502:47:0;;;;;;;;;;;;;;;;1483:66;;;1496:3;1483:66;1471:78;;1391:164;;;;:::o;16765:1388::-;16947:10;16959;16971:15;16999:25;17046:16;:14;:16::i;:::-;16999:64;;17075:22;17099;17125:32;17142:6;17150;17125:16;:32::i;:::-;17074:83;;;;17170:41;17187:7;17196:14;17170:16;:41::i;:::-;17222;17239:7;17248:14;17222:16;:41::i;:::-;17274:7;:15;;;17298:6;17307:1;17274:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17274:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17274:35:0;;;;17320:7;:15;;;17344:6;17353:14;17320:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17320:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17320:48:0;;;;17381:7;:15;;;17405:6;17414:1;17381:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17381:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17381:35:0;;;;17427:7;:15;;;17451:6;17460:14;17427:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17427:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17427:48:0;;;;17487:12;17502:40;17507:18;7524:8;17516;17507:3;:18::i;:::-;17527:14;17502:4;:40::i;:::-;17487:55;;17553:12;17568:40;17573:18;7524:8;17582;17573:3;:18::i;:::-;17593:14;17568:4;:40::i;:::-;17553:55;;17649:6;:19;;;17691:7;17722;17745:14;17774;17803:7;17825;17855:4;17881:1;17875:3;:7;17649:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17649:244:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17649:244:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17649:244:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17620:273;;;;;;;;;;;;17918:14;17910:5;:22;17906:114;;;17949:59;17966:7;17975;:17;;;18001:4;17975:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17975:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17975:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17975:32:0;;;;;;;;;;;;;;;;17949:16;:59::i;:::-;17906:114;18044:14;18036:5;:22;18032:114;;;18075:59;18092:7;18101;:17;;;18127:4;18101:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18101:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18101:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18101:32:0;;;;;;;;;;;;;;;;18075:16;:59::i;:::-;18032:114;16765:1388;;;;;;;;;;;;;;:::o;1624:137::-;1700:1;1691:5;:10;1687:68;;1719:15;:13;:15::i;:::-;1703:40;;;1744:5;1751:3;1703:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1703:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1703:52:0;;;;1687:68;1624:137;;:::o;14044:316::-;14119:19;14140:20;14186:12;:10;:12::i;:::-;14179:19;;:3;:19;;;:76;;14251:3;14179:76;;;14216:16;:14;:16::i;:::-;14179:76;14172:83;;14282:12;:10;:12::i;:::-;14274:20;;:4;:20;;;:78;;14347:4;14274:78;;;14312:16;:14;:16::i;:::-;14274:78;14266:86;;14044:316;;;;;:::o;15663:244::-;15763:22;15820:1;15806:16;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;15806:16:0;;;;15798:24;;15852:8;15833:5;15839:1;15833:8;;;;;;;;;;;;;:28;;;;;;;;;;;15891:7;15872:5;15878:1;15872:8;;;;;;;;;;;;;:27;;;;;;;;;;;15663:244;;;;:::o;785:131::-;830:7;853:42;846:49;;785:131;:::o;13699:135::-;13768:11;13798:28;13802:4;13820;13815:2;:9;13808:2;:17;13798:3;:28::i;:::-;13792:34;;13699:135;;;;:::o;7984:125::-;8037:6;7524:8;8056:41;8069:18;8082:1;8085;8069:12;:18::i;:::-;8095:1;7524:8;8089:7;;;;;;8056:12;:41::i;:::-;:47;;;;;;8052:51;;7984:125;;;;:::o;13555:136::-;13627:11;13677:4;13672:2;:9;13665:2;:17;13658:4;:24;;;;;;13651:32;;13555:136;;;;:::o;13421:126::-;13470:7;13497:42;13490:49;;13421:126;:::o;15388:267::-;15508:12;15541:6;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15541:16:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15541:16:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15541:16:0;;;;;;;;;;;;;;;;15523:43;;;15567:5;15573:1;15567:8;;;;;;;;;;;;;;15577:5;15583:1;15577:8;;;;;;;;;;;;;;15523:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15523:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15523:63:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15523:63:0;;;;;;;;;;;;;;;;15508:78;;15621:1;15605:18;;:4;:18;;;;15597:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15388:267;;;:::o;14770:301::-;14918:11;14942:18;14963:6;:20;;;14998:7;15020:5;14963:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;14963:73:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14963:73:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14963:73:0;;;;;;39:16:-1;36:1;17:17;2:54;14963:73:0;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14963:73:0;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;385:12;380:3;373:25;421:4;416:3;412:14;405:21;;0:433;;14963:73:0;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;14963:73:0;;;;;;;;;;;14942:94;;15056:4;15061:1;15056:7;;;;;;;;;;;;;;15047:16;;14770:301;;;;;;:::o;14368:157::-;14470:16;:14;:16::i;:::-;14452:34;;14460:5;14452:34;;;14449:68;;;14488:5;:13;;;14508:6;14488:29;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14488:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14488:29:0;;;;;14449:68;14368:157;;:::o;14533:229::-;14634:16;:14;:16::i;:::-;14616:34;;14624:5;14616:34;;;14613:142;;;14667:5;:13;;;14681:16;:14;:16::i;:::-;14699:6;14667:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14667:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14667:39:0;;;;14721:5;:14;;;14736:6;14721:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14721:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14721:22:0;;;;14613:142;14533:229;;:::o;15079:301::-;15227:12;15252:18;15273:6;:19;;;15307:6;15328:5;15273:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;15273:71:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15273:71:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15273:71:0;;;;;;39:16:-1;36:1;17:17;2:54;15273:71:0;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15273:71:0;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;385:12;380:3;373:25;421:4;416:3;412:14;405:21;;0:433;;15273:71:0;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;15273:71:0;;;;;;;;;;;15252:92;;15365:4;15370:1;15365:7;;;;;;;;;;;;;;15355:17;;15079:301;;;;;;:::o;18161:1595::-;18316:10;18328;18340:15;18368:25;18415:16;:14;:16::i;:::-;18368:64;;18444:22;18468;18494:32;18511:6;18519;18494:16;:32::i;:::-;18443:83;;;;18547:16;18566:7;18547:26;;18614:2;18598:7;:19;18594:144;;;18655:12;:10;:12::i;:::-;18645:22;;:6;:22;;;:81;;18694:7;:17;;;18720:4;18694:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18694:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18694:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18694:32:0;;;;;;;;;;;;;;;;18645:81;;;18670:21;18645:81;18634:92;;18594:144;18750:35;18767:7;18776:8;18750:16;:35::i;:::-;18800:16;18860:52;18877:6;18885:7;18894;18903:8;18860:16;:52::i;:::-;18838:74;;;;;;;;18925:7;:15;;;18949:6;18958:1;18925:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18925:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18925:35:0;;;;18971:7;:15;;;18995:6;19004:8;18971:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18971:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18971:42:0;;;;19026:7;:15;;;19050:6;19059:1;19026:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19026:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19026:35:0;;;;19072:7;:15;;;19096:6;19105:8;19072:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19072:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19072:42:0;;;;19155:6;:19;;;19197:7;19228;19251:8;19274;19297:1;19345;19401:4;19427:1;19421:3;:7;19155:284;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19155:284:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19155:284:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19155:284:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19126:313;;;;;;;;;;;;19474:12;19460:10;:26;;19452:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19536:5;19525:8;:16;19521:108;;;19558:59;19575:7;19584;:17;;;19610:4;19584:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19584:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19584:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19584:32:0;;;;;;;;;;;;;;;;19558:16;:59::i;:::-;19521:108;19656:5;19645:8;:16;19641:108;;;19678:59;19695:7;19704;:17;;;19730:4;19704:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19704:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19704:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19704:32:0;;;;;;;;;;;;;;;;19678:16;:59::i;:::-;19641:108;18161:1595;;;;;;;;;;;;;:::o;20867:978::-;21036:10;21048;21060:12;21085:25;21121:22;21154;21225:95;21263:6;21284;21305:4;21225:23;:95::i;:::-;21187:133;;;;;;;;;;;;;;;;21342:12;21357:59;21372:7;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21372:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21372:18:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21372:18:0;;;;;;;;;;;;;;;;21392:23;21397:8;21407:7;21392:4;:23::i;:::-;21357:14;:59::i;:::-;21342:74;;21427:12;21442:59;21457:7;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21457:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21457:18:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21457:18:0;;;;;;;;;;;;;;;;21477:23;21482:8;21492:7;21477:4;:23::i;:::-;21442:14;:59::i;:::-;21427:74;;21529:6;:22;;;21574:7;21605;21628;21650;21672;21702:4;21728:1;21722:3;:7;21529:211;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21529:211:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21529:211:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21529:211:0;;;;;;;;;;;;;;;;;;;;;;;;;21512:228;;;;;;;;20867:978;;21762:32;21779:7;21788:5;21762:16;:32::i;:::-;21805;21822:7;21831:5;21805:16;:32::i;:::-;20867:978;;;;;;;;;;;;:::o;978:142::-;1026:7;1049:42;1042:49;;978:142;:::o;7673:103::-;7733:6;7752:18;7765:1;7768;7752:12;:18::i;:::-;7748:22;;7673:103;;;;:::o;13138:209::-;13187:7;13214:42;13207:49;;13138:209;:::o;7782:95::-;7834:6;7853:18;7866:1;7869;7853:12;:18::i;:::-;7849:22;;7782:95;;;;:::o;4377:471::-;4435:7;4685:1;4680;:6;4676:47;;;4710:1;4703:8;;;;4676:47;4735:9;4751:1;4747;:5;4735:17;;4780:1;4775;4771;:5;;;;;;:10;4763:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4839:1;4832:8;;;4377:471;;;;;:::o;3023:181::-;3081:7;3101:9;3117:1;3113;:5;3101:17;;3142:1;3137;:6;;3129:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3195:1;3188:8;;;3023:181;;;;:::o;19764:1095::-;19938:15;19955;19982:25;20028:6;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20028:16:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20028:16:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20028:16:0;;;;;;;;;;;;;;;;19982:63;;20056:22;20096:7;:15;;;20120:6;20137;20096:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20096:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20096:49:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20096:49:0;;;;;;;;;;;;;;;;20056:90;;20193:1;20165:30;;20173:7;20165:30;;;;20157:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20241:16;20259;20281:7;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20281:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20281:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20281:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20240:62;;;;;;;;;20313:17;20361:6;20333:35;;:7;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20333:16:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20333:16:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20333:16:0;;;;;;;;;;;;;;;;:35;;;:57;;20382:8;20333:57;;;20371:8;20333:57;20313:77;;20401:16;20420:42;20442:9;20453:8;20420:21;:42::i;:::-;20401:61;;20475:22;20500:42;20517:6;20534;20500:8;:42::i;:::-;20475:67;;20555:6;:14;;;20578:6;20587:8;20555:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20555:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20555:41:0;;;;20619:6;:31;;;20665:8;20688:1;20736:5;20764:4;20790:1;20784:3;:7;20619:183;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;20619:183:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20619:183:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20619:183:0;;;;;;39:16:-1;36:1;17:17;2:54;20619:183:0;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20619:183:0;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;385:12;380:3;373:25;421:4;416:3;412:14;405:21;;0:433;;20619:183:0;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;20619:183:0;;;;;;;;;;;20803:1;20619:186;;;;;;;;;;;;;;20609:196;;20828:23;20832:8;20842;20828:3;:23::i;:::-;20818:33;;19764:1095;;;;;;;;;;;;;;:::o;21853:723::-;21981:25;22008:22;22032;22056:12;22109:16;:14;:16::i;:::-;22081:45;;22158:32;22175:6;22183;22158:16;:32::i;:::-;22137:53;;;;;;;;22201:20;22242:6;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22242:16:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22242:16:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22242:16:0;;;;;;;;;;;;;;;;22224:43;;;22276:7;22294;22224:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22224:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22224:79:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22224:79:0;;;;;;;;;;;;;;;;22201:102;;22346:1;22322:26;;:12;:26;;;;22314:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22381:23;22422:12;22381:54;;22469:2;22456:4;:16;:59;;22511:4;22456:59;;;22475:8;:18;;;22502:4;22475:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22475:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22475:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22475:33:0;;;;;;;;;;;;;;;;22456:59;22446:69;;22526:8;:16;;;22551:6;22560:7;22526:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22526:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22526:42:0;;;;21853:723;;;;;;;;;:::o;3487:136::-;3545:7;3572:43;3576:1;3579;3572:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3565:50;;3487:136;;;;:::o;16320:387::-;16436:7;16695:4;16482:210;16672:19;16686:4;16672:9;:13;;:19;;;;:::i;:::-;16482:185;16538:110;16578:47;16602:22;16616:7;16602:9;:13;;:22;;;;:::i;:::-;16578:19;16589:7;16578:6;:10;;:19;;;;:::i;:::-;:23;;:47;;;;:::i;:::-;16538:9;:13;;:110;;;;:::i;:::-;16482:33;:185::i;:::-;:189;;:210;;;;:::i;:::-;:217;;;;;;16462:237;;16320:387;;;;:::o;3926:192::-;4012:7;4045:1;4040;:6;;4048:12;4032:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;4032:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4072:9;4088:1;4084;:5;4072:17;;4109:1;4102:8;;;3926:192;;;;;:::o;8850:1239::-;8898:7;8927:1;8922;:6;8918:20;;;8937:1;8930:8;;;;8918:20;9103:10;9116:1;9103:14;;9128:9;9140:1;9128:13;;9162:35;9156:2;:41;9152:107;;9221:3;9214:10;;;;;9245:2;9239:8;;;;;9152:107;9279:19;9273:2;:25;9269:90;;9322:2;9315:9;;;;;9345:2;9339:8;;;;;9269:90;9379:11;9373:2;:17;9369:82;;9414:2;9407:9;;;;;9437:2;9431:8;;;;;9369:82;9471:7;9465:2;:13;9461:77;;9502:2;9495:9;;;;;9525:1;9519:7;;;;;9461:77;9558:5;9552:2;:11;9548:74;;9587:1;9580:8;;;;;9609:1;9603:7;;;;;9548:74;9642:4;9636:2;:10;9632:73;;9670:1;9663:8;;;;;9692:1;9686:7;;;;;9632:73;9725:3;9719:2;:9;9715:49;;9751:1;9745:7;;;;;9715:49;9793:1;9787;9783;:5;;;;;;9779:1;:9;9778:16;;9774:20;;9824:1;9818;9814;:5;;;;;;9810:1;:9;9809:16;;9805:20;;9855:1;9849;9845;:5;;;;;;9841:1;:9;9840:16;;9836:20;;9886:1;9880;9876;:5;;;;;;9872:1;:9;9871:16;;9867:20;;9917:1;9911;9907;:5;;;;;;9903:1;:9;9902:16;;9898:20;;9948:1;9942;9938;:5;;;;;;9934:1;:9;9933:16;;9929:20;;9979:1;9973;9969;:5;;;;;;9965:1;:9;9964:16;;9960:20;;10028:10;10045:1;10041;:5;;;;;;10028:18;;10069:2;10065:1;:6;:15;;10078:2;10065:15;;;10074:1;10065:15;10057:24;;;;;8850:1239;;;;:::o
Swarm Source
ipfs://431c1c456e00b34f5c9def14904897c77af3467afbf6d57643ca29f8ba35317b
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.