Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 90 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 12952757 | 1289 days ago | IN | 0 ETH | 0.00879568 | ||||
Withdraw | 12952740 | 1289 days ago | IN | 0 ETH | 0.01101079 | ||||
Withdraw | 12912931 | 1295 days ago | IN | 0 ETH | 0.00736983 | ||||
Withdraw | 12905218 | 1297 days ago | IN | 0 ETH | 0.00717015 | ||||
Withdraw | 12901890 | 1297 days ago | IN | 0 ETH | 0.00704983 | ||||
Withdraw | 12900569 | 1297 days ago | IN | 0 ETH | 0.00086619 | ||||
Withdraw | 12900219 | 1297 days ago | IN | 0 ETH | 0.00733106 | ||||
Withdraw | 12899680 | 1298 days ago | IN | 0 ETH | 0.0056502 | ||||
Withdraw | 12888077 | 1299 days ago | IN | 0 ETH | 0.00512154 | ||||
Withdraw | 12887548 | 1299 days ago | IN | 0 ETH | 0.00343908 | ||||
Withdraw | 12881521 | 1300 days ago | IN | 0 ETH | 0.00343908 | ||||
Withdraw | 12881178 | 1300 days ago | IN | 0 ETH | 0.00356189 | ||||
Withdraw | 12881004 | 1300 days ago | IN | 0 ETH | 0.00391657 | ||||
Withdraw | 12880926 | 1300 days ago | IN | 0 ETH | 0.00037519 | ||||
Withdraw | 12880925 | 1300 days ago | IN | 0 ETH | 0.00334551 | ||||
Withdraw | 12880907 | 1300 days ago | IN | 0 ETH | 0.00396585 | ||||
Withdraw | 12880596 | 1301 days ago | IN | 0 ETH | 0.00409723 | ||||
Withdraw | 12879610 | 1301 days ago | IN | 0 ETH | 0.00409704 | ||||
Withdraw | 12876274 | 1301 days ago | IN | 0 ETH | 0.0052221 | ||||
Withdraw | 12874173 | 1302 days ago | IN | 0 ETH | 0.00512154 | ||||
Withdraw | 12873983 | 1302 days ago | IN | 0 ETH | 0.00496099 | ||||
Withdraw | 12873824 | 1302 days ago | IN | 0 ETH | 0.00488737 | ||||
Withdraw | 12873765 | 1302 days ago | IN | 0 ETH | 0.00535265 | ||||
Withdraw | 12675239 | 1333 days ago | IN | 0 ETH | 0.00364908 | ||||
Deposit | 12605343 | 1343 days ago | IN | 0 ETH | 0.00227869 |
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers. Name tag integration is not available in advanced view.
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
||||
---|---|---|---|---|---|---|---|
12952757 | 1289 days ago | 0 ETH | |||||
12952757 | 1289 days ago | 0 ETH | |||||
12952757 | 1289 days ago | 0 ETH | |||||
12952757 | 1289 days ago | 0 ETH | |||||
12952757 | 1289 days ago | 0 ETH | |||||
12952757 | 1289 days ago | 0 ETH | |||||
12952757 | 1289 days ago | 0 ETH | |||||
12952757 | 1289 days ago | 0 ETH | |||||
12952757 | 1289 days ago | 0 ETH | |||||
12952757 | 1289 days ago | 0 ETH | |||||
12952757 | 1289 days ago | 0 ETH | |||||
12952757 | 1289 days ago | 0 ETH | |||||
12952740 | 1289 days ago | 0 ETH | |||||
12952740 | 1289 days ago | 0 ETH | |||||
12952740 | 1289 days ago | 0 ETH | |||||
12952740 | 1289 days ago | 0 ETH | |||||
12952740 | 1289 days ago | 0 ETH | |||||
12952740 | 1289 days ago | 0 ETH | |||||
12952740 | 1289 days ago | 0 ETH | |||||
12952740 | 1289 days ago | 0 ETH | |||||
12952740 | 1289 days ago | 0 ETH | |||||
12952740 | 1289 days ago | 0 ETH | |||||
12952740 | 1289 days ago | 0 ETH | |||||
12912931 | 1295 days ago | 0 ETH | |||||
12912931 | 1295 days ago | 0 ETH |
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x930b5c97...045880A69 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
HotPotFund
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-01-27 */ pragma solidity >=0.5.0; interface IERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); } interface IUniswapV2Factory { function getPair(address tokenA, address tokenB) external view returns (address pair); } interface IUniswapV2Router { function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); } interface IUniswapV2Pair { function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function token0() external view returns (address); function token1() external view returns (address); function approve(address spender, uint value) external returns (bool); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); } interface IStakingRewards { // Views function lastTimeRewardApplicable() external view returns (uint256); function rewardPerToken() external view returns (uint256); function earned(address account) external view returns (uint256); function getRewardForDuration() external view returns (uint256); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); // Mutative function stake(uint256 amount) external; function withdraw(uint256 amount) external; function getReward() external; function exit() external; } interface ICurve { function exchange(int128 i, int128 j, uint256 dx, uint256 min_dy) external; function coins(uint256) external view returns (address coin); } 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) { require(b > 0, "SafeMath: division by zero"); 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) { require(b != 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; function safeTransfer(IERC20 token, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has two parts: // 1. The call itself is made, and success asserted // 2. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } contract HotPotFundERC20 { using SafeMath for uint; string public constant name = 'Hotpot V1'; string public constant symbol = 'HPT-V1'; uint8 public constant decimals = 18; uint public totalSupply; mapping(address => uint) public balanceOf; mapping(address => mapping(address => uint)) public allowance; event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); constructor() public { } function _mint(address to, uint value) internal { require(to != address(0), "ERC20: mint to the zero address"); totalSupply = totalSupply.add(value); balanceOf[to] = balanceOf[to].add(value); emit Transfer(address(0), to, value); } function _burn(address from, uint value) internal { require(from != address(0), "ERC20: burn from the zero address"); balanceOf[from] = balanceOf[from].sub(value); totalSupply = totalSupply.sub(value); emit Transfer(from, address(0), value); } function _approve(address owner, address spender, uint value) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); allowance[owner][spender] = value; emit Approval(owner, spender, value); } function _transfer(address from, address to, uint value) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); balanceOf[from] = balanceOf[from].sub(value); balanceOf[to] = balanceOf[to].add(value); emit Transfer(from, to, value); } function approve(address spender, uint value) external returns (bool) { _approve(msg.sender, spender, value); return true; } function transfer(address to, uint value) external returns (bool) { _transfer(msg.sender, to, value); return true; } function transferFrom(address from, address to, uint value) external returns (bool) { allowance[from][msg.sender] = allowance[from][msg.sender].sub(value); _transfer(from, to, value); return true; } } contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } contract HotPotFund is ReentrancyGuard, HotPotFundERC20 { using SafeMath for uint; using SafeERC20 for IERC20; address constant UNISWAP_FACTORY = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f; address constant UNISWAP_V2_ROUTER = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; address constant UNI = 0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984; uint constant DIVISOR = 100; uint constant FEE = 20; address public token; address public controller; uint public totalInvestment; mapping (address => uint) public investmentOf; // UNI mining rewards uint public totalDebts; mapping(address => uint256) public debtOf; // UNI mining pool pair->mining pool mapping(address => address) public uniPool; address[] public pairs; //Curve swap pools mapping (address => address) public curvePool; mapping (address => int128) CURVE_N_COINS; modifier onlyController() { require(msg.sender == controller, 'Only called by Controller.'); _; } event Deposit(address indexed owner, uint amount, uint share); event Withdraw(address indexed owner, uint amount, uint share); constructor (address _token, address _controller) public { //approve for add liquidity and swap. 2**256-1 never used up. IERC20(_token).safeApprove(UNISWAP_V2_ROUTER, 2**256-1); token = _token; controller = _controller; } function deposit(uint amount) public nonReentrant returns(uint share) { require(amount > 0, 'Are you kidding me?'); uint _total_assets = totalAssets(); IERC20(token).safeTransferFrom(msg.sender, address(this), amount); if(totalSupply == 0){ share = amount; } else{ share = amount.mul(totalSupply).div(_total_assets); // user uni debt uint debt = share.mul(totalDebts.add(totalUNIRewards())).div(totalSupply); if(debt > 0){ debtOf[msg.sender] = debtOf[msg.sender].add(debt); totalDebts = totalDebts.add(debt); } } investmentOf[msg.sender] = investmentOf[msg.sender].add(amount); totalInvestment = totalInvestment.add(amount); _mint(msg.sender, share); emit Deposit(msg.sender, amount, share); } function invest(uint amount, uint[] calldata proportions) external onlyController { uint len = pairs.length; require(len>0, 'Pairs is empty.'); address token0 = token; require(amount <= IERC20(token0).balanceOf(address(this)), "Not enough balance."); require(proportions.length == pairs.length, 'Proportions index out of range.'); uint _whole; for(uint i=0; i<len; i++){ if(proportions[i] == 0) continue; _whole = _whole.add(proportions[i]); uint amount0 = (amount.mul(proportions[i]).div(DIVISOR)) >> 1; if(amount0 == 0) continue; address token1 = pairs[i]; uint amount1 = _swap(token0, token1, amount0); (,uint amountB,) = IUniswapV2Router(UNISWAP_V2_ROUTER).addLiquidity( token0, token1, amount0, amount1, 0, 0, address(this), block.timestamp ); if(amount1 > amountB) _swap(token1, token0, amount1.sub(amountB)); } require(_whole == DIVISOR, 'Error proportion.'); } function setUNIPool(address pair, address _uniPool) external onlyController { require(pair!= address(0) && _uniPool!= address(0), "Invalid address."); if(uniPool[pair] != address(0)){ _withdrawStaking(IUniswapV2Pair(pair), totalSupply); } IERC20(pair).approve(_uniPool, 2**256-1); uniPool[pair] = _uniPool; } function mineUNI(address pair) public onlyController { address stakingRewardAddr = uniPool[pair]; if(stakingRewardAddr != address(0)){ uint liquidity = IUniswapV2Pair(pair).balanceOf(address(this)); if(liquidity > 0){ IStakingRewards(stakingRewardAddr).stake(liquidity); } } } function mineUNIAll() external onlyController { for(uint i = 0; i < pairs.length; i++){ IUniswapV2Pair pair = IUniswapV2Pair(IUniswapV2Factory(UNISWAP_FACTORY).getPair(token, pairs[i])); address stakingRewardAddr = uniPool[address(pair)]; if(stakingRewardAddr != address(0)){ uint liquidity = pair.balanceOf(address(this)); if(liquidity > 0){ IStakingRewards(stakingRewardAddr).stake(liquidity); } } } } function totalUNIRewards() public view returns(uint amount){ amount = IERC20(UNI).balanceOf(address(this)); for(uint i = 0; i < pairs.length; i++){ IUniswapV2Pair pair = IUniswapV2Pair(IUniswapV2Factory(UNISWAP_FACTORY).getPair(token, pairs[i])); address stakingRewardAddr = uniPool[address(pair)]; if(stakingRewardAddr != address(0)){ amount = amount.add(IStakingRewards(stakingRewardAddr).earned(address(this))); } } } function UNIRewardsOf(address account) public view returns(uint reward){ if(balanceOf[account] > 0){ uint uniAmount = totalUNIRewards(); uint totalAmount = totalDebts.add(uniAmount).mul(balanceOf[account]).div(totalSupply); reward = totalAmount.sub(debtOf[account]); } } function stakingLPOf(address pair) public view returns(uint liquidity){ if(uniPool[pair] != address(0)){ liquidity = IStakingRewards(uniPool[pair]).balanceOf(address(this)); } } function _withdrawStaking(IUniswapV2Pair pair, uint share) internal returns(uint liquidity){ address stakingRewardAddr = uniPool[address(pair)]; if(stakingRewardAddr != address(0)){ liquidity = IStakingRewards(stakingRewardAddr).balanceOf(address(this)).mul(share).div(totalSupply); if(liquidity > 0){ IStakingRewards(stakingRewardAddr).withdraw(liquidity); IStakingRewards(stakingRewardAddr).getReward(); } } } function withdraw(uint share) public nonReentrant returns(uint amount) { require(share > 0 && share <= balanceOf[msg.sender], 'Not enough balance.'); uint _investment; (amount, _investment) = _withdraw(msg.sender, share); investmentOf[msg.sender] = investmentOf[msg.sender].sub(_investment); totalInvestment = totalInvestment.sub(_investment); _burn(msg.sender, share); IERC20(token).safeTransfer(msg.sender, amount); emit Withdraw(msg.sender, amount, share); } function _withdraw( address user, uint share ) internal returns (uint amount, uint investment) { address token0 = token; amount = IERC20(token0).balanceOf(address(this)).mul(share).div(totalSupply); for(uint i = 0; i < pairs.length; i++) { address token1 = pairs[i]; IUniswapV2Pair pair = IUniswapV2Pair(IUniswapV2Factory(UNISWAP_FACTORY).getPair(token0, token1)); uint liquidity = pair.balanceOf(address(this)).mul(share).div(totalSupply); liquidity = liquidity.add(_withdrawStaking(pair, share)); if(liquidity == 0) continue; (uint amount0, uint amount1) = IUniswapV2Router(UNISWAP_V2_ROUTER).removeLiquidity( token0, token1, liquidity, 0, 0, address(this), block.timestamp ); amount = amount.add(amount0).add(_swap(token1, token0, amount1)); } //withdraw UNI reward uint uniAmount = IERC20(UNI).balanceOf(address(this)); uint totalAmount = totalDebts.add(uniAmount).mul(share).div(totalSupply); if(totalAmount > 0){ uint debt = debtOf[user].mul(share).div(balanceOf[user]); debtOf[user] = debtOf[user].sub(debt); totalDebts = totalDebts.sub(debt); uint reward = totalAmount.sub(debt); if(reward > uniAmount) reward = uniAmount; if(reward > 0) IERC20(UNI).transfer(user, reward); } investment = investmentOf[user].mul(share).div(balanceOf[user]); if(amount > investment){ uint _fee = (amount.sub(investment)).mul(FEE).div(DIVISOR); amount = amount.sub(_fee); IERC20(token0).safeTransfer(controller, _fee); } else { investment = amount; } } function assets(uint index) public view returns(uint _assets) { require(index < pairs.length, 'Pair index out of range.'); address token0 = token; address token1 = pairs[index]; IUniswapV2Pair pair = IUniswapV2Pair(IUniswapV2Factory(UNISWAP_FACTORY).getPair(token0, token1)); (uint reserve0, uint reserve1, ) = pair.getReserves(); uint liquidity = pair.balanceOf(address(this)).add(stakingLPOf(address(pair))); if( pair.token0() == token0 ) _assets = (reserve0 << 1).mul(liquidity).div(pair.totalSupply()); else // pair.token1() == token0 _assets = (reserve1 << 1).mul(liquidity).div(pair.totalSupply()); } function totalAssets() public view returns(uint _assets) { address token0 = token; for(uint i=0; i<pairs.length; i++){ address token1 = pairs[i]; IUniswapV2Pair pair = IUniswapV2Pair(IUniswapV2Factory(UNISWAP_FACTORY).getPair(token0, token1)); (uint reserve0, uint reserve1, ) = pair.getReserves(); uint liquidity = pair.balanceOf(address(this)).add(stakingLPOf(address(pair))); if( pair.token0() == token0 ) _assets = _assets.add((reserve0 << 1).mul(liquidity).div(pair.totalSupply())); else // pair.token1() == token0 _assets = _assets.add((reserve1 << 1).mul(liquidity).div(pair.totalSupply())); } _assets = _assets.add(IERC20(token0).balanceOf(address(this))); } function pairsLength() public view returns(uint) { return pairs.length; } function setCurvePool(address _token, address _curvePool, int128 N_COINS) external onlyController { curvePool[_token] = _curvePool; if(_curvePool != address(0)) { if(IERC20(token).allowance(address(this), _curvePool) == 0){ IERC20(token).safeApprove(_curvePool, 2**256-1); } if(IERC20(_token).allowance(address(this), _curvePool) == 0){ IERC20(_token).safeApprove(_curvePool, 2**256-1); } CURVE_N_COINS[_curvePool] = N_COINS; } } function addPair(address _token) external onlyController { address pair = IUniswapV2Factory(UNISWAP_FACTORY).getPair(token, _token); require(pair != address(0), 'Pair not exist.'); //approve for add liquidity and swap. IERC20(_token).safeApprove(UNISWAP_V2_ROUTER, 2**256-1); //approve for remove liquidity IUniswapV2Pair(pair).approve(UNISWAP_V2_ROUTER, 2**256-1); for(uint i = 0; i < pairs.length; i++) { require(pairs[i] != _token, 'Pair existed.'); } pairs.push(_token); } function reBalance( uint add_index, uint remove_index, uint liquidity ) external onlyController { require(remove_index < pairs.length, 'Pair index out of range.'); address token0 = token; address token1 = pairs[remove_index]; IUniswapV2Pair pair = IUniswapV2Pair(IUniswapV2Factory(UNISWAP_FACTORY).getPair(token0, token1)); uint stakingLP = stakingLPOf(address(pair)); if(stakingLP > 0) IStakingRewards(uniPool[address(pair)]).exit(); require(liquidity <= pair.balanceOf(address(this)) && liquidity > 0, 'Not enough liquidity.'); (uint amount0, uint amount1) = IUniswapV2Router(UNISWAP_V2_ROUTER).removeLiquidity( token0, token1, liquidity, 0, 0, address(this), block.timestamp ); amount0 = amount0.add(_swap(token1, token0, amount1)); //Only remove liquidity if(add_index >= pairs.length || add_index == remove_index) return; token1 = pairs[add_index]; amount0 = amount0 >> 1; amount1 = _swap(token0, token1, amount0); (,uint amountB,) = IUniswapV2Router(UNISWAP_V2_ROUTER).addLiquidity( token0, token1, amount0, amount1, 0, 0, address(this), block.timestamp ); if(amount1 > amountB) _swap(token1, token0, amount1.sub(amountB)); } function removePair(uint index) external onlyController { require(index < pairs.length, 'Pair index out of range.'); address token0 = token; address token1 = pairs[index]; IUniswapV2Pair pair = IUniswapV2Pair(IUniswapV2Factory(UNISWAP_FACTORY).getPair(token0, token1)); _withdrawStaking(pair, totalSupply); uint liquidity = pair.balanceOf(address(this)); if(liquidity > 0){ (uint amount0, uint amount1) = IUniswapV2Router(UNISWAP_V2_ROUTER).removeLiquidity( token0, token1, liquidity, 0, 0, address(this), block.timestamp ); amount0 = amount0.add(_swap(token1, token0, amount1)); } IERC20(token1).safeApprove(UNISWAP_V2_ROUTER, 0); for (uint i = index; i < pairs.length-1; i++){ pairs[i] = pairs[i+1]; } pairs.pop(); } function _swap(address tokenIn, address tokenOut, uint amount) private returns(uint) { address pool = tokenIn == token ? curvePool[tokenOut] : curvePool[tokenIn]; if(pool != address(0)){ int128 N_COINS = CURVE_N_COINS[pool]; int128 idxIn = N_COINS; int128 idxOut = N_COINS; for(int128 i=0; i<N_COINS; i++){ address coin = ICurve(pool).coins(uint(i)); if(coin == tokenIn) {idxIn = i; continue;} if(coin == tokenOut) idxOut = i; } if(idxIn != N_COINS && idxOut != N_COINS){ uint amountBefore = IERC20(tokenOut).balanceOf(address(this)); ICurve(pool).exchange(idxIn, idxOut, amount, 0); return (IERC20(tokenOut).balanceOf(address(this))).sub(amountBefore); } } address[] memory path = new address[](2); path[0] = tokenIn; path[1] = tokenOut; uint[] memory amounts = IUniswapV2Router(UNISWAP_V2_ROUTER).swapExactTokensForTokens( amount, 0, path, address(this), block.timestamp); return amounts[1]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_controller","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"share","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"share","type":"uint256"}],"name":"Withdraw","type":"event"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"UNIRewardsOf","outputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"addPair","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"assets","outputs":[{"internalType":"uint256","name":"_assets","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"curvePool","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"debtOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"share","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256[]","name":"proportions","type":"uint256[]"}],"name":"invest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"investmentOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"mineUNI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"mineUNIAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pairs","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pairsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"add_index","type":"uint256"},{"internalType":"uint256","name":"remove_index","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"reBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"removePair","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_curvePool","type":"address"},{"internalType":"int128","name":"N_COINS","type":"int128"}],"name":"setCurvePool","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"address","name":"_uniPool","type":"address"}],"name":"setUNIPool","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"stakingLPOf","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalAssets","outputs":[{"internalType":"uint256","name":"_assets","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalDebts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalInvestment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalUNIRewards","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"uniPool","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"share","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102065760003560e01c806378d1ce991161011a578063b91ac788116100ad578063dd62ed3e1161007c578063dd62ed3e14610601578063ed8a48441461062f578063f77c4791146106a6578063fc0c546a146106ae578063fedcf1d3146106b657610206565b8063b91ac7881461057b578063c2b7bbb614610598578063cf35bdd0146105be578063d283e75f146105db57610206565b80639b1146d8116100e95780639b1146d814610504578063a1ba46411461052a578063a9059cbb14610532578063b6b55f251461055e57610206565b806378d1ce991461045b57806393b19d681461049457806395c08f92146104d657806395d89b41146104fc57610206565b80632b42dc621161019d5780633268c9bd1161016c5780633268c9bd146103d657806334975748146103fc5780633b0cb86a146104045780634089382d1461042d57806370a082311461043557610206565b80632b42dc62146103565780632e1a7d4d146103755780632fcad52114610392578063313ce567146103b857610206565b806314a1c32d116101d957806314a1c32d146102ea57806318160ddd146102f257806323b872dd146102fa57806329349d961461033057610206565b806301e1d1141461020b57806306fdde0314610225578063095ea7b3146102a257806310ea13df146102e2575b600080fd5b6102136106e4565b60408051918252519081900360200190f35b61022d610b01565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561026757818101518382015260200161024f565b50505050905090810190601f1680156102945780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102ce600480360360408110156102b857600080fd5b506001600160a01b038135169060200135610b26565b604080519115158252519081900360200190f35b610213610b3d565b610213610b43565b610213610b49565b6102ce6004803603606081101561031057600080fd5b506001600160a01b03813581169160208101359091169060400135610b4f565b6102136004803603602081101561034657600080fd5b50356001600160a01b0316610bbd565b6103736004803603602081101561036c57600080fd5b5035610c65565b005b6102136004803603602081101561038b57600080fd5b503561100c565b610213600480360360208110156103a857600080fd5b50356001600160a01b0316611193565b6103c061123e565b6040805160ff9092168252519081900360200190f35b610373600480360360208110156103ec57600080fd5b50356001600160a01b0316611243565b610213611394565b6103736004803603606081101561041a57600080fd5b508035906020810135906040013561139a565b610213611859565b6102136004803603602081101561044b57600080fd5b50356001600160a01b0316611a5e565b6103736004803603606081101561047157600080fd5b506001600160a01b03813581169160208101359091169060400135600f0b611a70565b6104ba600480360360208110156104aa57600080fd5b50356001600160a01b0316611c7c565b604080516001600160a01b039092168252519081900360200190f35b610213600480360360208110156104ec57600080fd5b50356001600160a01b0316611c97565b61022d611ca9565b6104ba6004803603602081101561051a57600080fd5b50356001600160a01b0316611ccb565b610373611ce6565b6102ce6004803603604081101561054857600080fd5b506001600160a01b038135169060200135611f0e565b6102136004803603602081101561057457600080fd5b5035611f1b565b6104ba6004803603602081101561059157600080fd5b503561212f565b610373600480360360208110156105ae57600080fd5b50356001600160a01b0316612156565b610213600480360360208110156105d457600080fd5b5035612423565b610213600480360360208110156105f157600080fd5b50356001600160a01b031661275d565b6102136004803603604081101561061757600080fd5b506001600160a01b038135811691602001351661276f565b6103736004803603604081101561064557600080fd5b8135919081019060408101602082013564010000000081111561066757600080fd5b82018360208201111561067957600080fd5b8035906020019184602083028401116401000000008311171561069b57600080fd5b50909250905061278c565b6104ba612b3c565b6104ba612b4b565b610373600480360360408110156106cc57600080fd5b506001600160a01b0381358116916020013516612b5a565b6004546000906001600160a01b0316815b600b54811015610a76576000600b828154811061070e57fe5b60009182526020808320909101546040805163e6a4390560e01b81526001600160a01b038881166004830152909216602483018190529051909450735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9263e6a439059260448082019391829003018186803b15801561078057600080fd5b505afa158015610794573d6000803e3d6000fd5b505050506040513d60208110156107aa57600080fd5b505160408051630240bc6b60e21b8152905191925060009182916001600160a01b03851691630902f1ac91600480820192606092909190829003018186803b1580156107f557600080fd5b505afa158015610809573d6000803e3d6000fd5b505050506040513d606081101561081f57600080fd5b5080516020909101516001600160701b03918216935016905060006108c461084685611193565b604080516370a0823160e01b815230600482015290516001600160a01b038816916370a08231916024808301926020929190829003018186803b15801561088c57600080fd5b505afa1580156108a0573d6000803e3d6000fd5b505050506040513d60208110156108b657600080fd5b50519063ffffffff612ce716565b9050866001600160a01b0316846001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561090957600080fd5b505afa15801561091d573d6000803e3d6000fd5b505050506040513d602081101561093357600080fd5b50516001600160a01b031614156109e3576109dc6109cf856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561098357600080fd5b505afa158015610997573d6000803e3d6000fd5b505050506040513d60208110156109ad57600080fd5b50516109c3600187901b8563ffffffff612d4116565b9063ffffffff612d9a16565b899063ffffffff612ce716565b9750610a65565b610a626109cf856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2257600080fd5b505afa158015610a36573d6000803e3d6000fd5b505050506040513d6020811015610a4c57600080fd5b50516109c3600186901b8563ffffffff612d4116565b97505b5050600190930192506106f5915050565b50604080516370a0823160e01b81523060048201529051610afb916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015610ac257600080fd5b505afa158015610ad6573d6000803e3d6000fd5b505050506040513d6020811015610aec57600080fd5b5051839063ffffffff612ce716565b91505090565b60405180604001604052806009815260200168486f74706f7420563160b81b81525081565b6000610b33338484612e04565b5060015b92915050565b60065481565b60085481565b60015481565b6001600160a01b0383166000908152600360209081526040808320338452909152812054610b83908363ffffffff612ef016565b6001600160a01b0385166000908152600360209081526040808320338452909152902055610bb2848484612f32565b5060015b9392505050565b6001600160a01b03811660009081526002602052604081205415610c60576000610be5611859565b6001546001600160a01b0385166000908152600260205260408120546008549394509092610c2e92916109c391610c22908763ffffffff612ce716565b9063ffffffff612d4116565b6001600160a01b038516600090815260096020526040902054909150610c5b90829063ffffffff612ef016565b925050505b919050565b6005546001600160a01b03163314610cb2576040805162461bcd60e51b815260206004820152601a6024820152600080516020614173833981519152604482015290519081900360640190fd5b600b548110610d03576040805162461bcd60e51b81526020600482015260186024820152772830b4b91034b73232bc1037baba1037b3103930b733b29760411b604482015290519081900360640190fd5b600454600b80546001600160a01b03909216916000919084908110610d2457fe5b60009182526020808320909101546040805163e6a4390560e01b81526001600160a01b038781166004830152909216602483018190529051909450735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9263e6a439059260448082019391829003018186803b158015610d9657600080fd5b505afa158015610daa573d6000803e3d6000fd5b505050506040513d6020811015610dc057600080fd5b5051600154909150610dd3908290613076565b50604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015610e1e57600080fd5b505afa158015610e32573d6000803e3d6000fd5b505050506040513d6020811015610e4857600080fd5b505190508015610f315760408051635d5155ef60e11b81526001600160a01b0386811660048301528516602482015260448101839052600060648201819052608482018190523060a48301524260c4830152825190928392737a250d5630b4cf539739df2c5dacb4c659f2488d9263baa2abde9260e48084019391929182900301818787803b158015610eda57600080fd5b505af1158015610eee573d6000803e3d6000fd5b505050506040513d6040811015610f0457600080fd5b5080516020909101519092509050610f2d610f208688846131f2565b839063ffffffff612ce716565b5050505b610f606001600160a01b038416737a250d5630b4cf539739df2c5dacb4c659f2488d600063ffffffff61372616565b845b600b5460001901811015610fd757600b8160010181548110610f8057fe5b600091825260209091200154600b80546001600160a01b039092169183908110610fa657fe5b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055600101610f62565b50600b805480610fe357fe5b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b600060026000541415611066576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260005581158015906110895750336000908152600260205260409020548211155b6110d0576040805162461bcd60e51b81526020600482015260136024820152722737ba1032b737bab3b4103130b630b731b29760691b604482015290519081900360640190fd5b60006110dc3384613778565b336000908152600760205260409020549193509150611101908263ffffffff612ef016565b33600090815260076020526040902055600654611124908263ffffffff612ef016565b6006556111313384613cbb565b60045461114e906001600160a01b0316338463ffffffff613d9d16565b6040805183815260208101859052815133927ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568928290030190a2506001600055919050565b6001600160a01b038181166000908152600a602052604081205490911615610c60576001600160a01b038083166000908152600a60209081526040918290205482516370a0823160e01b815230600482015292519316926370a08231926024808201939291829003018186803b15801561120c57600080fd5b505afa158015611220573d6000803e3d6000fd5b505050506040513d602081101561123657600080fd5b505192915050565b601281565b6005546001600160a01b03163314611290576040805162461bcd60e51b815260206004820152601a6024820152600080516020614173833981519152604482015290519081900360640190fd5b6001600160a01b038082166000908152600a602052604090205416801561139057604080516370a0823160e01b815230600482015290516000916001600160a01b038516916370a0823191602480820192602092909190829003018186803b1580156112fb57600080fd5b505afa15801561130f573d6000803e3d6000fd5b505050506040513d602081101561132557600080fd5b50519050801561138e57816001600160a01b031663a694fc3a826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561137557600080fd5b505af1158015611389573d6000803e3d6000fd5b505050505b505b5050565b600b5490565b6005546001600160a01b031633146113e7576040805162461bcd60e51b815260206004820152601a6024820152600080516020614173833981519152604482015290519081900360640190fd5b600b548210611438576040805162461bcd60e51b81526020600482015260186024820152772830b4b91034b73232bc1037baba1037b3103930b733b29760411b604482015290519081900360640190fd5b600454600b80546001600160a01b0390921691600091908590811061145957fe5b60009182526020808320909101546040805163e6a4390560e01b81526001600160a01b038781166004830152909216602483018190529051909450735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9263e6a439059260448082019391829003018186803b1580156114cb57600080fd5b505afa1580156114df573d6000803e3d6000fd5b505050506040513d60208110156114f557600080fd5b50519050600061150482611193565b90508015611575576001600160a01b038083166000908152600a60205260408082205481516374fd6c7760e11b8152915193169263e9fad8ee9260048084019391929182900301818387803b15801561155c57600080fd5b505af1158015611570573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156115bb57600080fd5b505afa1580156115cf573d6000803e3d6000fd5b505050506040513d60208110156115e557600080fd5b505185118015906115f65750600085115b61163f576040805162461bcd60e51b81526020600482015260156024820152742737ba1032b737bab3b4103634b8bab4b234ba3c9760591b604482015290519081900360640190fd5b60408051635d5155ef60e11b81526001600160a01b0386811660048301528516602482015260448101879052600060648201819052608482018190523060a48301524260c4830152825190928392737a250d5630b4cf539739df2c5dacb4c659f2488d9263baa2abde9260e48084019391929182900301818787803b1580156116c757600080fd5b505af11580156116db573d6000803e3d6000fd5b505050506040513d60408110156116f157600080fd5b508051602090910151909250905061170d610f208688846131f2565b600b549092508910158061172057508789145b156117305750505050505061138e565b600b898154811061173d57fe5b6000918252602090912001546001600160a01b0316945060019190911c906117668686846131f2565b6040805162e8e33760e81b81526001600160a01b03898116600483015288166024820152604481018590526064810183905260006084820181905260a482018190523060c48301524260e483015291519293509091737a250d5630b4cf539739df2c5dacb4c659f2488d9163e8e337009161010480830192606092919082900301818787803b1580156117f857600080fd5b505af115801561180c573d6000803e3d6000fd5b505050506040513d606081101561182257600080fd5b506020015190508082111561184d5761184b8688611846858563ffffffff612ef016565b6131f2565b505b50505050505050505050565b604080516370a0823160e01b81523060048201529051600091731f9840a85d5af5bf1d1762f925bdaddc4201f984916370a0823191602480820192602092909190829003018186803b1580156118ae57600080fd5b505afa1580156118c2573d6000803e3d6000fd5b505050506040513d60208110156118d857600080fd5b5051905060005b600b54811015611a5a57600454600b8054600092735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9263e6a43905926001600160a01b03909216918690811061192557fe5b60009182526020918290200154604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015293909116602484015251604480840193829003018186803b15801561197b57600080fd5b505afa15801561198f573d6000803e3d6000fd5b505050506040513d60208110156119a557600080fd5b50516001600160a01b038082166000908152600a6020526040902054919250168015611a5057604080516246613160e11b81523060048201529051611a4d916001600160a01b03841691628cc26291602480820192602092909190829003018186803b158015611a1457600080fd5b505afa158015611a28573d6000803e3d6000fd5b505050506040513d6020811015611a3e57600080fd5b5051859063ffffffff612ce716565b93505b50506001016118df565b5090565b60026020526000908152604090205481565b6005546001600160a01b03163314611abd576040805162461bcd60e51b815260206004820152601a6024820152600080516020614173833981519152604482015290519081900360640190fd5b6001600160a01b038381166000908152600c6020526040902080546001600160a01b03191691841691821790551561138e576004805460408051636eb1769f60e11b815230938101939093526001600160a01b038581166024850152905191169163dd62ed3e916044808301926020929190829003018186803b158015611b4357600080fd5b505afa158015611b57573d6000803e3d6000fd5b505050506040513d6020811015611b6d57600080fd5b5051611b9257600454611b92906001600160a01b03168360001963ffffffff61372616565b60408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015611be257600080fd5b505afa158015611bf6573d6000803e3d6000fd5b505050506040513d6020811015611c0c57600080fd5b5051611c2e57611c2e6001600160a01b0384168360001963ffffffff61372616565b6001600160a01b0382166000908152600d602052604090208054600f83900b6fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff19909116179055505050565b600a602052600090815260409020546001600160a01b031681565b60076020526000908152604090205481565b604051806040016040528060068152602001654850542d563160d01b81525081565b600c602052600090815260409020546001600160a01b031681565b6005546001600160a01b03163314611d33576040805162461bcd60e51b815260206004820152601a6024820152600080516020614173833981519152604482015290519081900360640190fd5b60005b600b54811015611f0b57600454600b8054600092735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9263e6a43905926001600160a01b039092169186908110611d7c57fe5b60009182526020918290200154604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015293909116602484015251604480840193829003018186803b158015611dd257600080fd5b505afa158015611de6573d6000803e3d6000fd5b505050506040513d6020811015611dfc57600080fd5b50516001600160a01b038082166000908152600a6020526040902054919250168015611f0157604080516370a0823160e01b815230600482015290516000916001600160a01b038516916370a0823191602480820192602092909190829003018186803b158015611e6c57600080fd5b505afa158015611e80573d6000803e3d6000fd5b505050506040513d6020811015611e9657600080fd5b505190508015611eff57816001600160a01b031663a694fc3a826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611ee657600080fd5b505af1158015611efa573d6000803e3d6000fd5b505050505b505b5050600101611d36565b50565b6000610b33338484612f32565b600060026000541415611f75576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260005581611fc2576040805162461bcd60e51b815260206004820152601360248201527241726520796f75206b696464696e67206d653f60681b604482015290519081900360640190fd5b6000611fcc6106e4565b600454909150611fed906001600160a01b031633308663ffffffff613def16565b600154611ffc5782915061209a565b612015816109c360015486612d4190919063ffffffff16565b915060006120496001546109c361203c61202d611859565b6008549063ffffffff612ce716565b869063ffffffff612d4116565b905080156120985733600090815260096020526040902054612071908263ffffffff612ce716565b33600090815260096020526040902055600854612094908263ffffffff612ce716565b6008555b505b336000908152600760205260409020546120ba908463ffffffff612ce716565b336000908152600760205260409020556006546120dd908463ffffffff612ce716565b6006556120ea3383613e4f565b6040805184815260208101849052815133927f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15928290030190a2506001600055919050565b600b818154811061213c57fe5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146121a3576040805162461bcd60e51b815260206004820152601a6024820152600080516020614173833981519152604482015290519081900360640190fd5b600480546040805163e6a4390560e01b81526001600160a01b0392831693810193909352908316602483015251600091735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9163e6a4390591604480820192602092909190829003018186803b15801561220f57600080fd5b505afa158015612223573d6000803e3d6000fd5b505050506040513d602081101561223957600080fd5b505190506001600160a01b03811661228a576040805162461bcd60e51b815260206004820152600f60248201526e2830b4b9103737ba1032bc34b9ba1760891b604482015290519081900360640190fd5b6122ba6001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d60001963ffffffff61372616565b6040805163095ea7b360e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d6004820152600019602482015290516001600160a01b0383169163095ea7b39160448083019260209291908290030181600087803b15801561231e57600080fd5b505af1158015612332573d6000803e3d6000fd5b505050506040513d602081101561234857600080fd5b50600090505b600b548110156123cf57826001600160a01b0316600b828154811061236f57fe5b6000918252602090912001546001600160a01b031614156123c7576040805162461bcd60e51b815260206004820152600d60248201526c2830b4b91032bc34b9ba32b21760991b604482015290519081900360640190fd5b60010161234e565b5050600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0392909216919091179055565b600b546000908210612477576040805162461bcd60e51b81526020600482015260186024820152772830b4b91034b73232bc1037baba1037b3103930b733b29760411b604482015290519081900360640190fd5b600454600b80546001600160a01b0390921691600091908590811061249857fe5b60009182526020808320909101546040805163e6a4390560e01b81526001600160a01b038781166004830152909216602483018190529051909450735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9263e6a439059260448082019391829003018186803b15801561250a57600080fd5b505afa15801561251e573d6000803e3d6000fd5b505050506040513d602081101561253457600080fd5b505160408051630240bc6b60e21b8152905191925060009182916001600160a01b03851691630902f1ac91600480820192606092909190829003018186803b15801561257f57600080fd5b505afa158015612593573d6000803e3d6000fd5b505050506040513d60608110156125a957600080fd5b5080516020909101516001600160701b03918216935016905060006125d061084685611193565b9050856001600160a01b0316846001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561261557600080fd5b505afa158015612629573d6000803e3d6000fd5b505050506040513d602081101561263f57600080fd5b50516001600160a01b031614156126d3576126cc846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561268c57600080fd5b505afa1580156126a0573d6000803e3d6000fd5b505050506040513d60208110156126b657600080fd5b50516109c3600186901b8463ffffffff612d4116565b9650612752565b61274f846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561270f57600080fd5b505afa158015612723573d6000803e3d6000fd5b505050506040513d602081101561273957600080fd5b50516109c3600185901b8463ffffffff612d4116565b96505b505050505050919050565b60096020526000908152604090205481565b600360209081526000928352604080842090915290825290205481565b6005546001600160a01b031633146127d9576040805162461bcd60e51b815260206004820152601a6024820152600080516020614173833981519152604482015290519081900360640190fd5b600b5480612820576040805162461bcd60e51b815260206004820152600f60248201526e2830b4b9399034b99032b6b83a3c9760891b604482015290519081900360640190fd5b60048054604080516370a0823160e01b81523093810193909352516001600160a01b039091169182916370a0823191602480820192602092909190829003018186803b15801561286f57600080fd5b505afa158015612883573d6000803e3d6000fd5b505050506040513d602081101561289957600080fd5b50518511156128e5576040805162461bcd60e51b81526020600482015260136024820152722737ba1032b737bab3b4103130b630b731b29760691b604482015290519081900360640190fd5b600b54831461293b576040805162461bcd60e51b815260206004820152601f60248201527f50726f706f7274696f6e7320696e646578206f7574206f662072616e67652e00604482015290519081900360640190fd5b6000805b83811015612aea5785858281811061295357fe5b905060200201356000141561296757612ae2565b61298c86868381811061297657fe5b9050602002013583612ce790919063ffffffff16565b9150600060016129bc60646109c38a8a878181106129a657fe5b905060200201358c612d4190919063ffffffff16565b901c9050806129cb5750612ae2565b6000600b83815481106129da57fe5b60009182526020822001546001600160a01b031691506129fb8683856131f2565b6040805162e8e33760e81b81526001600160a01b03898116600483015285166024820152604481018690526064810183905260006084820181905260a482018190523060c48301524260e483015291519293509091737a250d5630b4cf539739df2c5dacb4c659f2488d9163e8e337009161010480830192606092919082900301818787803b158015612a8d57600080fd5b505af1158015612aa1573d6000803e3d6000fd5b505050506040513d6060811015612ab757600080fd5b5060200151905080821115612add57612adb8388611846858563ffffffff612ef016565b505b505050505b60010161293f565b5060648114612b34576040805162461bcd60e51b815260206004820152601160248201527022b93937b910383937b837b93a34b7b71760791b604482015290519081900360640190fd5b505050505050565b6005546001600160a01b031681565b6004546001600160a01b031681565b6005546001600160a01b03163314612ba7576040805162461bcd60e51b815260206004820152601a6024820152600080516020614173833981519152604482015290519081900360640190fd5b6001600160a01b03821615801590612bc757506001600160a01b03811615155b612c0b576040805162461bcd60e51b815260206004820152601060248201526f24b73b30b634b21030b2323932b9b99760811b604482015290519081900360640190fd5b6001600160a01b038281166000908152600a60205260409020541615612c3957612c3782600154613076565b505b6040805163095ea7b360e01b81526001600160a01b038381166004830152600019602483015291519184169163095ea7b3916044808201926020929091908290030181600087803b158015612c8d57600080fd5b505af1158015612ca1573d6000803e3d6000fd5b505050506040513d6020811015612cb757600080fd5b50506001600160a01b039182166000908152600a6020526040902080546001600160a01b03191691909216179055565b600082820183811015610bb6576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082612d5057506000610b37565b82820282848281612d5d57fe5b0414610bb65760405162461bcd60e51b81526004018080602001828103825260218152602001806141936021913960400191505060405180910390fd5b6000808211612df0576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b6000828481612dfb57fe5b04949350505050565b6001600160a01b038316612e495760405162461bcd60e51b81526004018080602001828103825260248152602001806141fa6024913960400191505060405180910390fd5b6001600160a01b038216612e8e5760405162461bcd60e51b81526004018080602001828103825260228152602001806141516022913960400191505060405180910390fd5b6001600160a01b03808416600081815260036020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000610bb683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613f41565b6001600160a01b038316612f775760405162461bcd60e51b81526004018080602001828103825260258152602001806141d56025913960400191505060405180910390fd5b6001600160a01b038216612fbc5760405162461bcd60e51b815260040180806020018281038252602381526020018061412e6023913960400191505060405180910390fd5b6001600160a01b038316600090815260026020526040902054612fe5908263ffffffff612ef016565b6001600160a01b03808516600090815260026020526040808220939093559084168152205461301a908263ffffffff612ce716565b6001600160a01b0380841660008181526002602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6001600160a01b038083166000908152600a602052604081205490911680156131eb576131316001546109c385846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156130f957600080fd5b505afa15801561310d573d6000803e3d6000fd5b505050506040513d602081101561312357600080fd5b50519063ffffffff612d4116565b915081156131eb57806001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561317f57600080fd5b505af1158015613193573d6000803e3d6000fd5b50505050806001600160a01b0316633d18b9126040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156131d257600080fd5b505af11580156131e6573d6000803e3d6000fd5b505050505b5092915050565b60045460009081906001600160a01b0386811691161461322c576001600160a01b038086166000908152600c602052604090205416613248565b6001600160a01b038085166000908152600c6020526040902054165b90506001600160a01b038116156134f1576001600160a01b0381166000908152600d6020526040812054600f0b90819081905b83600f0b81600f0b1215613345576000856001600160a01b031663c661065783600f0b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156132d257600080fd5b505afa1580156132e6573d6000803e3d6000fd5b505050506040513d60208110156132fc57600080fd5b505190506001600160a01b03808216908b16141561331d578193505061333d565b886001600160a01b0316816001600160a01b0316141561333b578192505b505b60010161327b565b5082600f0b82600f0b14158015613362575082600f0b81600f0b14155b156134ed57604080516370a0823160e01b815230600482015290516000916001600160a01b038a16916370a0823191602480820192602092909190829003018186803b1580156133b157600080fd5b505afa1580156133c5573d6000803e3d6000fd5b505050506040513d60208110156133db57600080fd5b505160408051630f7c084960e21b8152600f86810b810b600483015285810b900b6024820152604481018a905260006064820181905291519293506001600160a01b03881692633df021249260848084019391929182900301818387803b15801561344557600080fd5b505af1158015613459573d6000803e3d6000fd5b5050604080516370a0823160e01b815230600482015290516134e193508492506001600160a01b038c16916370a08231916024808301926020929190829003018186803b1580156134a957600080fd5b505afa1580156134bd573d6000803e3d6000fd5b505050506040513d60208110156134d357600080fd5b50519063ffffffff612ef016565b95505050505050610bb6565b5050505b6040805160028082526060808301845292602083019080388339019050509050858160008151811061351f57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061354d57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506060737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03166338ed17398660008530426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156136115781810151838201526020016135f9565b505050509050019650505050505050600060405180830381600087803b15801561363a57600080fd5b505af115801561364e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561367757600080fd5b810190808051604051939291908464010000000082111561369757600080fd5b9083019060208201858111156136ac57600080fd5b82518660208202830111640100000000821117156136c957600080fd5b82525081516020918201928201910280838360005b838110156136f65781810151838201526020016136de565b5050505090500160405250505090508060018151811061371257fe5b602002602001015193505050509392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261138e908490613fd8565b60048054600154604080516370a0823160e01b815230948101949094525160009384936001600160a01b0316926137d99290916109c391889186916370a0823191602480820192602092909190829003018186803b1580156130f957600080fd5b925060005b600b54811015613a15576000600b82815481106137f757fe5b60009182526020808320909101546040805163e6a4390560e01b81526001600160a01b038881166004830152909216602483018190529051909450735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9263e6a439059260448082019391829003018186803b15801561386957600080fd5b505afa15801561387d573d6000803e3d6000fd5b505050506040513d602081101561389357600080fd5b5051600154604080516370a0823160e01b815230600482015290519293506000926138f092916109c3918c916001600160a01b038816916370a0823191602480820192602092909190829003018186803b1580156130f957600080fd5b905061390c6138ff838a613076565b829063ffffffff612ce716565b90508061391b57505050613a0d565b60408051635d5155ef60e11b81526001600160a01b0387811660048301528516602482015260448101839052600060648201819052608482018190523060a48301524260c4830152825190928392737a250d5630b4cf539739df2c5dacb4c659f2488d9263baa2abde9260e48084019391929182900301818787803b1580156139a357600080fd5b505af11580156139b7573d6000803e3d6000fd5b505050506040513d60408110156139cd57600080fd5b5080516020909101519092509050613a056139e98689846131f2565b6139f98b8563ffffffff612ce716565b9063ffffffff612ce716565b985050505050505b6001016137de565b50604080516370a0823160e01b81523060048201529051600091731f9840a85d5af5bf1d1762f925bdaddc4201f984916370a0823191602480820192602092909190829003018186803b158015613a6b57600080fd5b505afa158015613a7f573d6000803e3d6000fd5b505050506040513d6020811015613a9557600080fd5b5051600154600854919250600091613abe91906109c3908990610c22908763ffffffff612ce716565b90508015613c12576001600160a01b0387166000908152600260209081526040808320546009909252822054613aff91906109c3908a63ffffffff612d4116565b6001600160a01b038916600090815260096020526040902054909150613b2b908263ffffffff612ef016565b6001600160a01b038916600090815260096020526040902055600854613b57908263ffffffff612ef016565b6008556000613b6c838363ffffffff612ef016565b905083811115613b795750825b8015613c0f576040805163a9059cbb60e01b81526001600160a01b038b166004820152602481018390529051731f9840a85d5af5bf1d1762f925bdaddc4201f9849163a9059cbb9160448083019260209291908290030181600087803b158015613be257600080fd5b505af1158015613bf6573d6000803e3d6000fd5b505050506040513d6020811015613c0c57600080fd5b50505b50505b6001600160a01b038716600090815260026020908152604080832054600790925290912054613c4c91906109c3908963ffffffff612d4116565b935083851115613cad576000613c7260646109c36014610c228a8a63ffffffff612ef016565b9050613c84868263ffffffff612ef016565b600554909650613ca7906001600160a01b0386811691168363ffffffff613d9d16565b50613cb1565b8493505b5050509250929050565b6001600160a01b038216613d005760405162461bcd60e51b81526004018080602001828103825260218152602001806141b46021913960400191505060405180910390fd5b6001600160a01b038216600090815260026020526040902054613d29908263ffffffff612ef016565b6001600160a01b038316600090815260026020526040902055600154613d55908263ffffffff612ef016565b6001556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261138e908490613fd8565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052613e49908590613fd8565b50505050565b6001600160a01b038216613eaa576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600154613ebd908263ffffffff612ce716565b6001556001600160a01b038216600090815260026020526040902054613ee9908263ffffffff612ce716565b6001600160a01b03831660008181526002602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008184841115613fd05760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613f95578181015183820152602001613f7d565b50505050905090810190601f168015613fc25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60006060836001600160a01b0316836040518082805190602001908083835b602083106140165780518252601f199092019160209182019101613ff7565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614078576040519150601f19603f3d011682016040523d82523d6000602084013e61407d565b606091505b5091509150816140d4576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115613e49578080602001905160208110156140f057600080fd5b5051613e495760405162461bcd60e51b815260040180806020018281038252602a81526020018061421e602a913960400191505060405180910390fdfe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734f6e6c792063616c6c656420627920436f6e74726f6c6c65722e000000000000536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a723158201a08d8e3abfaa2696a22890f7a9fc8c1722c9d5f369ab8b5e44a3c6edf37c9e364736f6c63430005110032
Deployed Bytecode Sourcemap
14707:15343:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14707:15343:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24368:819;;;:::i;:::-;;;;;;;;;;;;;;;;10561:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;10561:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12338:147;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12338:147:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;15203:27;;;:::i;15318:22::-;;;:::i;10698:23::-;;;:::i;12640:230::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12640:230:0;;;;;;;;;;;;;;;;;:::i;20104:332::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20104:332:0;-1:-1:-1;;;;;20104:332:0;;:::i;27903:957::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27903:957:0;;:::i;:::-;;21189:540;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21189:540:0;;:::i;20444:213::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20444:213:0;-1:-1:-1;;;;;20444:213:0;;:::i;10656:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18645:364;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18645:364:0;-1:-1:-1;;;;;18645:364:0;;:::i;25195:87::-;;;:::i;26445:1450::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26445:1450:0;;;;;;;;;;;;:::i;19575:521::-;;;:::i;10728:41::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10728:41:0;-1:-1:-1;;;;;10728:41:0;;:::i;25290:560::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;25290:560:0;;;;;;;;;;;;;;;;;;;:::i;15437:42::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15437:42:0;-1:-1:-1;;;;;15437:42:0;;:::i;:::-;;;;-1:-1:-1;;;;;15437:42:0;;;;;;;;;;;;;;15237:45;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15237:45:0;-1:-1:-1;;;;;15237:45:0;;:::i;10609:40::-;;;:::i;15543:45::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15543:45:0;-1:-1:-1;;;;;15543:45:0;;:::i;19017:550::-;;;:::i;12493:139::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12493:139:0;;;;;;;;:::i;16184:913::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16184:913:0;;:::i;15488:22::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15488:22:0;;:::i;25858:579::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25858:579:0;-1:-1:-1;;;;;25858:579:0;;:::i;23649:711::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23649:711:0;;:::i;15347:41::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15347:41:0;-1:-1:-1;;;;;15347:41:0;;:::i;10776:61::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10776:61:0;;;;;;;;;;:::i;17107:1149::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17107:1149:0;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;17107:1149:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;17107:1149: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;-1:-1;17107:1149:0;;-1:-1:-1;17107:1149:0;-1:-1:-1;17107:1149:0;:::i;15171:25::-;;;:::i;15144:20::-;;;:::i;18264:373::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;18264:373:0;;;;;;;;;;:::i;24368:819::-;24453:5;;24411:12;;-1:-1:-1;;;;;24453:5:0;24411:12;24469:638;24485:5;:12;24483:14;;24469:638;;;24518:14;24535:5;24541:1;24535:8;;;;;;;;;;;;;;;;;;;;24595:58;;;-1:-1:-1;;;24595:58:0;;-1:-1:-1;;;;;24595:58:0;;;;;;;24535:8;;;24595:58;;;;;;;;24535:8;;-1:-1:-1;14870:42:0;;24595;;:58;;;;;;;;;;;14870:42;24595:58;;;5:2:-1;;;;30:1;27;20:12;5:2;24595:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24595:58:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24595:58:0;24704:18;;;-1:-1:-1;;;24704:18:0;;;;24595:58;;-1:-1:-1;24670:13:0;;;;-1:-1:-1;;;;;24704:16:0;;;;;:18;;;;;;;;;;;;;;;:16;:18;;;5:2:-1;;;;30:1;27;20:12;5:2;24704:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24704:18:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24704:18:0;;;;;;;-1:-1:-1;;;;;24669:53:0;;;;-1:-1:-1;24669:53:0;;-1:-1:-1;24737:14:0;24754:61;24788:26;24808:4;24788:11;:26::i;:::-;24754:29;;;-1:-1:-1;;;24754:29:0;;24777:4;24754:29;;;;;;-1:-1:-1;;;;;24754:14:0;;;;;:29;;;;;;;;;;;;;;:14;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;24754:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24754:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24754:29:0;;:61;:33;:61;:::i;:::-;24737:78;;24851:6;-1:-1:-1;;;;;24834:23:0;:4;-1:-1:-1;;;;;24834:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24834:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24834:13:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24834:13:0;-1:-1:-1;;;;;24834:23:0;;24830:265;;;24887:67;24899:54;24934:4;-1:-1:-1;;;;;24934:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24934:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24934:18:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24934:18:0;24899:30;24912:1;24900:13;;;24919:9;24899:30;:19;:30;:::i;:::-;:34;:54;:34;:54;:::i;:::-;24887:7;;:67;:11;:67;:::i;:::-;24877:77;;24830:265;;;25028:67;25040:54;25075:4;-1:-1:-1;;;;;25075:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25075:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25075:18:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25075:18:0;25040:30;25053:1;25041:13;;;25060:9;25040:30;:19;:30;:::i;25028:67::-;25018:77;;24830:265;-1:-1:-1;;24499:3:0;;;;;-1:-1:-1;24469:638:0;;-1:-1:-1;;24469:638:0;;-1:-1:-1;25139:39:0;;;-1:-1:-1;;;25139:39:0;;25172:4;25139:39;;;;;;25127:52;;-1:-1:-1;;;;;25139:24:0;;;;;:39;;;;;;;;;;;;;;;:24;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;25139:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25139:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25139:39:0;25127:7;;:52;:11;:52;:::i;:::-;25117:62;;24368:819;;:::o;10561:41::-;;;;;;;;;;;;;;-1:-1:-1;;;10561:41:0;;;;:::o;12338:147::-;12402:4;12419:36;12428:10;12440:7;12449:5;12419:8;:36::i;:::-;-1:-1:-1;12473:4:0;12338:147;;;;;:::o;15203:27::-;;;;:::o;15318:22::-;;;;:::o;10698:23::-;;;;:::o;12640:230::-;-1:-1:-1;;;;;12765:15:0;;12718:4;12765:15;;;:9;:15;;;;;;;;12781:10;12765:27;;;;;;;;:38;;12797:5;12765:38;:31;:38;:::i;:::-;-1:-1:-1;;;;;12735:15:0;;;;;;:9;:15;;;;;;;;12751:10;12735:27;;;;;;;:68;12814:26;12745:4;12830:2;12834:5;12814:9;:26::i;:::-;-1:-1:-1;12858:4:0;12640:230;;;;;;:::o;20104:332::-;-1:-1:-1;;;;;20189:18:0;;20163:11;20189:18;;;:9;:18;;;;;;:22;20186:243;;20227:14;20244:17;:15;:17::i;:::-;20349:11;;-1:-1:-1;;;;;20325:18:0;;20276:16;20325:18;;;:9;:18;;;;;;20295:10;;20227:34;;-1:-1:-1;20276:16:0;;20295:66;;20349:11;20295:49;;:25;;20227:34;20295:25;:14;:25;:::i;:::-;:29;:49;:29;:49;:::i;:66::-;-1:-1:-1;;;;;20401:15:0;;;;;;:6;:15;;;;;;20276:85;;-1:-1:-1;20385:32:0;;20276:85;;20385:32;:15;:32;:::i;:::-;20376:41;;20186:243;;;20104:332;;;:::o;27903:957::-;15704:10;;-1:-1:-1;;;;;15704:10:0;15690;:24;15682:63;;;;;-1:-1:-1;;;15682:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15682:63:0;;;;;;;;;;;;;;;27986:5;:12;27978:20;;27970:57;;;;;-1:-1:-1;;;27970:57:0;;;;;;;;;;;;-1:-1:-1;;;27970:57:0;;;;;;;;;;;;;;;28057:5;;28090;:12;;-1:-1:-1;;;;;28057:5:0;;;;28040:14;;28090:5;28096;;28090:12;;;;;;;;;;;;;;;;;;28150:58;;;-1:-1:-1;;;28150:58:0;;-1:-1:-1;;;;;28150:58:0;;;;;;;28090:12;;;28150:58;;;;;;;;28090:12;;-1:-1:-1;14870:42:0;;28150;;:58;;;;;;;;;;;14870:42;28150:58;;;5:2:-1;;;;30:1;27;20:12;5:2;28150:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28150:58:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28150:58:0;28243:11;;28150:58;;-1:-1:-1;28220:35:0;;28150:58;;28220:16;:35::i;:::-;-1:-1:-1;28283:29:0;;;-1:-1:-1;;;28283:29:0;;28306:4;28283:29;;;;;;28266:14;;-1:-1:-1;;;;;28283:14:0;;;;;:29;;;;;;;;;;;;;;;:14;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;28283:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28283:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28283:29:0;;-1:-1:-1;28328:13:0;;28325:342;;28388:199;;;-1:-1:-1;;;28388:199:0;;-1:-1:-1;;;;;28388:199:0;;;;;;;;;;;;;;;;;;;28358:12;28388:199;;;;;;;;;;;;28550:4;28388:199;;;;28557:15;28388:199;;;;;;28358:12;;;;14956:42;;28388:51;;:199;;;;;;;;;;;;;28358:12;14956:42;28388:199;;;5:2:-1;;;;30:1;27;20:12;5:2;28388:199:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28388:199:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28388:199:0;;;;;;;;;-1:-1:-1;28388:199:0;-1:-1:-1;28612:43:0;28624:30;28630:6;28638;28388:199;28624:5;:30::i;:::-;28612:7;;:43;:11;:43;:::i;:::-;-1:-1:-1;;;28325:342:0;28677:48;-1:-1:-1;;;;;28677:26:0;;14956:42;28723:1;28677:48;:26;:48;:::i;:::-;28752:5;28738:93;28763:5;:12;-1:-1:-1;;28763:14:0;28759:18;;28738:93;;;28809:5;28815:1;28817;28815:3;28809:10;;;;;;;;;;;;;;;;;;28798:5;:8;;-1:-1:-1;;;;;28809:10:0;;;;28804:1;;28798:8;;;;;;;;;;;;;;;:21;;-1:-1:-1;;;;;;28798:21:0;-1:-1:-1;;;;;28798:21:0;;;;;;;;;;-1:-1:-1;28779:3:0;28738:93;;;;28841:5;:11;;;;;;;;;;;;;;;;-1:-1:-1;;28841:11:0;;;;;-1:-1:-1;;;;;;28841:11:0;;;;;;-1:-1:-1;;;;;27903:957:0:o;21189:540::-;21247:11;13752:1;14358:7;;:19;;14350:63;;;;;-1:-1:-1;;;14350:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13752:1;14491:7;:18;21279:9;;;;;:43;;-1:-1:-1;21311:10:0;21301:21;;;;:9;:21;;;;;;21292:30;;;21279:43;21271:75;;;;;-1:-1:-1;;;21271:75:0;;;;;;;;;;;;-1:-1:-1;;;21271:75:0;;;;;;;;;;;;;;;21359:16;21410:28;21420:10;21432:5;21410:9;:28::i;:::-;21489:10;21476:24;;;;:12;:24;;;;;;21386:52;;-1:-1:-1;21386:52:0;-1:-1:-1;21476:41:0;;21386:52;21476:41;:28;:41;:::i;:::-;21462:10;21449:24;;;;:12;:24;;;;;:68;21546:15;;:32;;21566:11;21546:32;:19;:32;:::i;:::-;21528:15;:50;21589:24;21595:10;21607:5;21589;:24::i;:::-;21631:5;;21624:46;;-1:-1:-1;;;;;21631:5:0;21651:10;21663:6;21624:46;:26;:46;:::i;:::-;21686:35;;;;;;;;;;;;;;21695:10;;21686:35;;;;;;;;-1:-1:-1;13708:1:0;14670:7;:22;21189:540;;-1:-1:-1;21189:540:0:o;20444:213::-;-1:-1:-1;;;;;20528:13:0;;;20499:14;20528:13;;;:7;:13;;;;;;20499:14;;20528:13;:27;20525:125;;-1:-1:-1;;;;;20599:13:0;;;;;;;:7;:13;;;;;;;;;;20583:55;;-1:-1:-1;;;20583:55:0;;20632:4;20583:55;;;;;;20599:13;;;20583:40;;:55;;;;;20599:13;20583:55;;;;;;20599:13;20583:55;;;5:2:-1;;;;30:1;27;20:12;5:2;20583:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20583:55:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20583:55:0;;20444:213;-1:-1:-1;;20444:213:0:o;10656:35::-;10689:2;10656:35;:::o;18645:364::-;15704:10;;-1:-1:-1;;;;;15704:10:0;15690;:24;15682:63;;;;;-1:-1:-1;;;15682:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15682:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;18737:13:0;;;18709:25;18737:13;;;:7;:13;;;;;;;18764:31;;18761:241;;18828:45;;;-1:-1:-1;;;18828:45:0;;18867:4;18828:45;;;;;;18811:14;;-1:-1:-1;;;;;18828:30:0;;;;;:45;;;;;;;;;;;;;;;:30;:45;;;5:2:-1;;;;30:1;27;20:12;5:2;18828:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18828:45:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18828:45:0;;-1:-1:-1;18891:13:0;;18888:103;;18940:17;-1:-1:-1;;;;;18924:40:0;;18965:9;18924:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18924:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18924:51:0;;;;18888:103;18761:241;;15756:1;18645:364;:::o;25195:87::-;25262:5;:12;25195:87;:::o;26445:1450::-;15704:10;;-1:-1:-1;;;;;15704:10:0;15690;:24;15682:63;;;;;-1:-1:-1;;;15682:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15682:63:0;;;;;;;;;;;;;;;26607:5;:12;26592:27;;26584:64;;;;;-1:-1:-1;;;26584:64:0;;;;;;;;;;;;-1:-1:-1;;;26584:64:0;;;;;;;;;;;;;;;26678:5;;26711;:19;;-1:-1:-1;;;;;26678:5:0;;;;26661:14;;26711:5;26717:12;;26711:19;;;;;;;;;;;;;;;;;;26778:58;;;-1:-1:-1;;;26778:58:0;;-1:-1:-1;;;;;26778:58:0;;;;;;;26711:19;;;26778:58;;;;;;;;26711:19;;-1:-1:-1;14870:42:0;;26778;;:58;;;;;;;;;;;14870:42;26778:58;;;5:2:-1;;;;30:1;27;20:12;5:2;26778:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26778:58:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26778:58:0;;-1:-1:-1;26850:14:0;26867:26;26778:58;26867:11;:26::i;:::-;26850:43;-1:-1:-1;26907:13:0;;26904:64;;-1:-1:-1;;;;;26938:22:0;;;;;;;:7;:22;;;;;;;26922:46;;-1:-1:-1;;;26922:46:0;;;;26938:22;;;26922:44;;:46;;;;;26938:22;;26922:46;;;;;;26938:22;;26922:46;;;5:2:-1;;;;30:1;27;20:12;5:2;26922:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26922:46:0;;;;26904:64;27002:29;;;-1:-1:-1;;;27002:29:0;;27025:4;27002:29;;;;;;-1:-1:-1;;;;;27002:14:0;;;;;:29;;;;;;;;;;;;;;:14;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;27002:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27002:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27002:29:0;26989:42;;;;;:59;;;27047:1;27035:9;:13;26989:59;26981:93;;;;;-1:-1:-1;;;26981:93:0;;;;;;;;;;;;-1:-1:-1;;;26981:93:0;;;;;;;;;;;;;;;27118:179;;;-1:-1:-1;;;27118:179:0;;-1:-1:-1;;;;;27118:179:0;;;;;;;;;;;;;;;;;;;27088:12;27118:179;;;;;;;;;;;;27264:4;27118:179;;;;27271:15;27118:179;;;;;;27088:12;;;;14956:42;;27118:51;;:179;;;;;;;;;;;;;27088:12;14956:42;27118:179;;;5:2:-1;;;;30:1;27;20:12;5:2;27118:179:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27118:179:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27118:179:0;;;;;;;;;-1:-1:-1;27118:179:0;-1:-1:-1;27318:43:0;27330:30;27336:6;27344;27118:179;27330:5;:30::i;27318:43::-;27423:5;:12;27308:53;;-1:-1:-1;27410:25:0;;;;:54;;;27452:12;27439:9;:25;27410:54;27407:66;;;27466:7;;;;;;;;27407:66;27494:5;27500:9;27494:16;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27494:16:0;;-1:-1:-1;27494:16:0;27531:12;;;;;27564:30;27570:6;27494:16;27531:12;27564:5;:30::i;:::-;27626:183;;;-1:-1:-1;;;27626:183:0;;-1:-1:-1;;;;;27626:183:0;;;;;;;;;;;;;;;;;;;;;;;;;27609:12;27626:183;;;;;;;;;;;;27776:4;27626:183;;;;27783:15;27626:183;;;;;;27554:40;;-1:-1:-1;27609:12:0;;14956:42;;27626:48;;:183;;;;;;;;;;;;;;27609:12;14956:42;27626:183;;;5:2:-1;;;;30:1;27;20:12;5:2;27626:183:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27626:183:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27626:183:0;;;;-1:-1:-1;27825:17:0;;;27822:65;;;27844:43;27850:6;27858;27866:20;:7;27878;27866:20;:11;:20;:::i;:::-;27844:5;:43::i;:::-;;27822:65;15756:1;;;;;;;26445:1450;;;:::o;19575:521::-;19654:36;;;-1:-1:-1;;;19654:36:0;;19684:4;19654:36;;;;;;19622:11;;15028:42;;19654:21;;:36;;;;;;;;;;;;;;;15028:42;19654:36;;;5:2:-1;;;;30:1;27;20:12;5:2;19654:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19654:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19654:36:0;;-1:-1:-1;19705:6:0;19701:388;19721:5;:12;19717:16;;19701:388;;;19834:5;;19841;:8;;19754:19;;14870:42;;19791;;-1:-1:-1;;;;;19834:5:0;;;;19847:1;;19841:8;;;;;;;;;;;;;;;;;19791:59;;;-1:-1:-1;;;;;;19791:59:0;;;;;;;-1:-1:-1;;;;;19791:59:0;;;;;;;19841:8;;;;19791:59;;;;;;;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;19791:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19791:59:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19791:59:0;-1:-1:-1;;;;;19894:22:0;;;19866:25;19894:22;;;:7;19791:59;19894:22;;;;;19791:59;;-1:-1:-1;19894:22:0;19934:31;;19931:147;;20005:56;;;-1:-1:-1;;;20005:56:0;;20055:4;20005:56;;;;;;19994:68;;-1:-1:-1;;;;;20005:41:0;;;;;:56;;;;;;;;;;;;;;;:41;:56;;;5:2:-1;;;;30:1;27;20:12;5:2;20005:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20005:56:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20005:56:0;19994:6;;:68;:10;:68;:::i;:::-;19985:77;;19931:147;-1:-1:-1;;19735:3:0;;19701:388;;;;19575:521;:::o;10728:41::-;;;;;;;;;;;;;:::o;25290:560::-;15704:10;;-1:-1:-1;;;;;15704:10:0;15690;:24;15682:63;;;;;-1:-1:-1;;;15682:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15682:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25399:17:0;;;;;;;:9;:17;;;;;:30;;-1:-1:-1;;;;;;25399:30:0;;;;;;;;;25443:24;25440:403;;25494:5;;;25487:50;;;-1:-1:-1;;;25487:50:0;;25519:4;25487:50;;;;;;;-1:-1:-1;;;;;25487:50:0;;;;;;;;;25494:5;;;25487:23;;:50;;;;;;;;;;;;;;25494:5;25487:50;;;5:2:-1;;;;30:1;27;20:12;5:2;25487:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25487:50:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25487:50:0;25484:141;;25569:5;;25562:47;;-1:-1:-1;;;;;25569:5:0;25588:10;-1:-1:-1;;25562:47:0;:25;:47;:::i;:::-;25642:51;;;-1:-1:-1;;;25642:51:0;;25675:4;25642:51;;;;-1:-1:-1;;;;;25642:51:0;;;;;;;;;:24;;;;;;:51;;;;;;;;;;;;;;;:24;:51;;;5:2:-1;;;;30:1;27;20:12;5:2;25642:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25642:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25642:51:0;25639:143;;25718:48;-1:-1:-1;;;;;25718:26:0;;25745:10;-1:-1:-1;;25718:48:0;:26;:48;:::i;:::-;-1:-1:-1;;;;;25796:25:0;;;;;;:13;:25;;;;;:35;;;;;;;;-1:-1:-1;;25796:35:0;;;;;;25290:560;;;:::o;15437:42::-;;;;;;;;;;;;-1:-1:-1;;;;;15437:42:0;;:::o;15237:45::-;;;;;;;;;;;;;:::o;10609:40::-;;;;;;;;;;;;;;-1:-1:-1;;;10609:40:0;;;;:::o;15543:45::-;;;;;;;;;;;;-1:-1:-1;;;;;15543:45:0;;:::o;19017:550::-;15704:10;;-1:-1:-1;;;;;15704:10:0;15690;:24;15682:63;;;;;-1:-1:-1;;;15682:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15682:63:0;;;;;;;;;;;;;;;19078:6;19074:486;19094:5;:12;19090:16;;19074:486;;;19207:5;;19214;:8;;19127:19;;14870:42;;19164;;-1:-1:-1;;;;;19207:5:0;;;;19220:1;;19214:8;;;;;;;;;;;;;;;;;19164:59;;;-1:-1:-1;;;;;;19164:59:0;;;;;;;-1:-1:-1;;;;;19164:59:0;;;;;;;19214:8;;;;19164:59;;;;;;;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;19164:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19164:59:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19164:59:0;-1:-1:-1;;;;;19267:22:0;;;19239:25;19267:22;;;:7;19164:59;19267:22;;;;;19164:59;;-1:-1:-1;19267:22:0;19307:31;;19304:245;;19375:29;;;-1:-1:-1;;;19375:29:0;;19398:4;19375:29;;;;;;19358:14;;-1:-1:-1;;;;;19375:14:0;;;;;:29;;;;;;;;;;;;;;;:14;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;19375:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19375:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19375:29:0;;-1:-1:-1;19426:13:0;;19423:111;;19479:17;-1:-1:-1;;;;;19463:40:0;;19504:9;19463:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19463:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19463:51:0;;;;19423:111;19304:245;;-1:-1:-1;;19108:3:0;;19074:486;;;;19017:550::o;12493:139::-;12553:4;12570:32;12580:10;12592:2;12596:5;12570:9;:32::i;16184:913::-;16242:10;13752:1;14358:7;;:19;;14350:63;;;;;-1:-1:-1;;;14350:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13752:1;14491:7;:18;16273:10;16265:42;;;;;-1:-1:-1;;;16265:42:0;;;;;;;;;;;;-1:-1:-1;;;16265:42:0;;;;;;;;;;;;;;;16318:18;16339:13;:11;:13::i;:::-;16370:5;;16318:34;;-1:-1:-1;16363:65:0;;-1:-1:-1;;;;;16370:5:0;16394:10;16414:4;16421:6;16363:65;:30;:65;:::i;:::-;16444:11;;16441:432;;16484:6;16476:14;;16441:432;;;16539:42;16567:13;16539:23;16550:11;;16539:6;:10;;:23;;;;:::i;:42::-;16531:50;;16626:9;16638:61;16687:11;;16638:44;16648:33;16663:17;:15;:17::i;:::-;16648:10;;;:33;:14;:33;:::i;:::-;16638:5;;:44;:9;:44;:::i;:61::-;16626:73;-1:-1:-1;16717:8:0;;16714:148;;16773:10;16766:18;;;;:6;:18;;;;;;:28;;16789:4;16766:28;:22;:28;:::i;:::-;16752:10;16745:18;;;;:6;:18;;;;;:49;16826:10;;:20;;16841:4;16826:20;:14;:20;:::i;:::-;16813:10;:33;16714:148;16441:432;;16925:10;16912:24;;;;:12;:24;;;;;;:36;;16941:6;16912:36;:28;:36;:::i;:::-;16898:10;16885:24;;;;:12;:24;;;;;:63;16977:15;;:27;;16997:6;16977:27;:19;:27;:::i;:::-;16959:15;:45;17015:24;17021:10;17033:5;17015;:24::i;:::-;17055:34;;;;;;;;;;;;;;17063:10;;17055:34;;;;;;;;-1:-1:-1;13708:1:0;14670:7;:22;16184:913;;-1:-1:-1;16184:913:0:o;15488:22::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15488:22:0;;-1:-1:-1;15488:22:0;:::o;25858:579::-;15704:10;;-1:-1:-1;;;;;15704:10:0;15690;:24;15682:63;;;;;-1:-1:-1;;;15682:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15682:63:0;;;;;;;;;;;;;;;25984:5;;;25941:57;;;-1:-1:-1;;;25941:57:0;;-1:-1:-1;;;;;25984:5:0;;;25941:57;;;;;;;;;;;;;;;25926:12;;14870:42;;25941;;:57;;;;;;;;;;;;;;;14870:42;25941:57;;;5:2:-1;;;;30:1;27;20:12;5:2;25941:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25941:57:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25941:57:0;;-1:-1:-1;;;;;;26017:18:0;;26009:46;;;;;-1:-1:-1;;;26009:46:0;;;;;;;;;;;;-1:-1:-1;;;26009:46:0;;;;;;;;;;;;;;;26115:55;-1:-1:-1;;;;;26115:26:0;;14956:42;-1:-1:-1;;26115:55:0;:26;:55;:::i;:::-;26221:57;;;-1:-1:-1;;;26221:57:0;;14956:42;26221:57;;;;-1:-1:-1;;26221:57:0;;;;;;-1:-1:-1;;;;;26221:28:0;;;;;:57;;;;;;;;;;;;;;-1:-1:-1;26221:28:0;:57;;;5:2:-1;;;;30:1;27;20:12;5:2;26221:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26221:57:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26295:6:0;;-1:-1:-1;26291:110:0;26311:5;:12;26307:16;;26291:110;;;26365:6;-1:-1:-1;;;;;26353:18:0;:5;26359:1;26353:8;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26353:8:0;:18;;26345:44;;;;;-1:-1:-1;;;26345:44:0;;;;;;;;;;;;-1:-1:-1;;;26345:44:0;;;;;;;;;;;;;;;26325:3;;26291:110;;;-1:-1:-1;;26411:5:0;27:10:-1;;39:1;23:18;;45:23;;-1:-1;26411:18:0;;;;;;;;-1:-1:-1;;;;;;26411:18:0;-1:-1:-1;;;;;26411:18:0;;;;;;;;;;25858:579::o;23649:711::-;23738:5;:12;23697;;23730:20;;23722:57;;;;;-1:-1:-1;;;23722:57:0;;;;;;;;;;;;-1:-1:-1;;;23722:57:0;;;;;;;;;;;;;;;23807:5;;23840;:12;;-1:-1:-1;;;;;23807:5:0;;;;23790:14;;23840:5;23846;;23840:12;;;;;;;;;;;;;;;;;;23900:58;;;-1:-1:-1;;;23900:58:0;;-1:-1:-1;;;;;23900:58:0;;;;;;;23840:12;;;23900:58;;;;;;;;23840:12;;-1:-1:-1;14870:42:0;;23900;;:58;;;;;;;;;;;14870:42;23900:58;;;5:2:-1;;;;30:1;27;20:12;5:2;23900:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23900:58:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23900:58:0;24005:18;;;-1:-1:-1;;;24005:18:0;;;;23900:58;;-1:-1:-1;23971:13:0;;;;-1:-1:-1;;;;;24005:16:0;;;;;:18;;;;;;;;;;;;;;;:16;:18;;;5:2:-1;;;;30:1;27;20:12;5:2;24005:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24005:18:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24005:18:0;;;;;;;-1:-1:-1;;;;;23970:53:0;;;;-1:-1:-1;23970:53:0;;-1:-1:-1;24036:14:0;24053:61;24087:26;24107:4;24087:11;:26::i;24053:61::-;24036:78;;24146:6;-1:-1:-1;;;;;24129:23:0;:4;-1:-1:-1;;;;;24129:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24129:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24129:13:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24129:13:0;-1:-1:-1;;;;;24129:23:0;;24125:227;;;24178:54;24213:4;-1:-1:-1;;;;;24213:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24213:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24213:18:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24213:18:0;24178:30;24191:1;24179:13;;;24198:9;24178:30;:19;:30;:::i;:54::-;24168:64;;24125:227;;;24298:54;24333:4;-1:-1:-1;;;;;24333:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24333:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24333:18:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24333:18:0;24298:30;24311:1;24299:13;;;24318:9;24298:30;:19;:30;:::i;:54::-;24288:64;;24125:227;23649:711;;;;;;;;;:::o;15347:41::-;;;;;;;;;;;;;:::o;10776:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;17107:1149::-;15704:10;;-1:-1:-1;;;;;15704:10:0;15690;:24;15682:63;;;;;-1:-1:-1;;;15682:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15682:63:0;;;;;;;;;;;;;;;17211:5;:12;17242:5;17234:33;;;;;-1:-1:-1;;;17234:33:0;;;;;;;;;;;;-1:-1:-1;;;17234:33:0;;;;;;;;;;;;;;;17295:5;;;17329:39;;;-1:-1:-1;;;17329:39:0;;17362:4;17329:39;;;;;;;;-1:-1:-1;;;;;17295:5:0;;;;;;17329:24;;:39;;;;;;;;;;;;;;;17295:5;17329:39;;;5:2:-1;;;;30:1;27;20:12;5:2;17329:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17329:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17329:39:0;17319:49;;;17311:81;;;;;-1:-1:-1;;;17311:81:0;;;;;;;;;;;;-1:-1:-1;;;17311:81:0;;;;;;;;;;;;;;;17433:5;:12;17411:34;;17403:78;;;;;-1:-1:-1;;;17403:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17494:11;;17516:675;17532:3;17530:1;:5;17516:675;;;17559:11;;17571:1;17559:14;;;;;;;;;;;;;17577:1;17559:19;17556:32;;;17580:8;;17556:32;17612:26;17623:11;;17635:1;17623:14;;;;;;;;;;;;;17612:6;:10;;:26;;;;:::i;:::-;17603:35;;17655:12;17715:1;17671:39;15103:3;17671:26;17682:11;;17694:1;17682:14;;;;;;;;;;;;;17671:6;:10;;:26;;;;:::i;:39::-;17670:46;;;-1:-1:-1;17734:12:0;17731:25;;17748:8;;;17731:25;17773:14;17790:5;17796:1;17790:8;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17790:8:0;;-1:-1:-1;17828:30:0;17834:6;17790:8;17850:7;17828:5;:30::i;:::-;17894:203;;;-1:-1:-1;;;17894:203:0;;-1:-1:-1;;;;;17894:203:0;;;;;;;;;;;;;;;;;;;;;;;;;17877:12;17894:203;;;;;;;;;;;;18060:4;17894:203;;;;18067:15;17894:203;;;;;;17813:45;;-1:-1:-1;17877:12:0;;14956:42;;17894:48;;:203;;;;;;;;;;;;;;17877:12;14956:42;17894:203;;;5:2:-1;;;;30:1;27;20:12;5:2;17894:203:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17894:203:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17894:203:0;;;;-1:-1:-1;18117:17:0;;;18114:65;;;18136:43;18142:6;18150;18158:20;:7;18170;18158:20;:11;:20;:::i;18136:43::-;;18114:65;17516:675;;;;;17537:3;;17516:675;;;;15103:3;18209:6;:17;18201:47;;;;;-1:-1:-1;;;18201:47:0;;;;;;;;;;;;-1:-1:-1;;;18201:47:0;;;;;;;;;;;;;;;15756:1;;;17107:1149;;;:::o;15171:25::-;;;-1:-1:-1;;;;;15171:25:0;;:::o;15144:20::-;;;-1:-1:-1;;;;;15144:20:0;;:::o;18264:373::-;15704:10;;-1:-1:-1;;;;;15704:10:0;15690;:24;15682:63;;;;;-1:-1:-1;;;15682:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15682:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;18359:17:0;;;;;;:42;;-1:-1:-1;;;;;;18380:21:0;;;;18359:42;18351:71;;;;;-1:-1:-1;;;18351:71:0;;;;;;;;;;;;-1:-1:-1;;;18351:71:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;18438:13:0;;;18463:1;18438:13;;;:7;:13;;;;;;;:27;18435:109;;18481:51;18513:4;18520:11;;18481:16;:51::i;:::-;;18435:109;18554:40;;;-1:-1:-1;;;18554:40:0;;-1:-1:-1;;;;;18554:40:0;;;;;;;-1:-1:-1;;18554:40:0;;;;;;:20;;;;;;:40;;;;;;;;;;;;;;;-1:-1:-1;18554:20:0;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;18554:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18554:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;;18605:13:0;;;;;;;:7;18554:40;18605:13;;;;:24;;-1:-1:-1;;;;;;18605:24:0;;;;;;;;18264:373::o;4232:181::-;4290:7;4322:5;;;4346:6;;;;4338:46;;;;;-1:-1:-1;;;4338:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;5586:471;5644:7;5889:6;5885:47;;-1:-1:-1;5919:1:0;5912:8;;5885:47;5956:5;;;5960:1;5956;:5;:1;5980:5;;;;;:10;5972:56;;;;-1:-1:-1;;;5972:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6533:266;6591:7;6623:1;6619;:5;6611:44;;;;;-1:-1:-1;;;6611:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6666:9;6682:1;6678;:5;;;;;;;6533:266;-1:-1:-1;;;;6533:266:0:o;11617:329::-;-1:-1:-1;;;;;11706:19:0;;11698:68;;;;-1:-1:-1;;;11698:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11785:21:0;;11777:68;;;;-1:-1:-1;;;11777:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11858:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;11907:31;;;;;;;;;;;;;;;;;11617:329;;;:::o;4696:136::-;4754:7;4781:43;4785:1;4788;4781:43;;;;;;;;;;;;;;;;;:3;:43::i;11954:376::-;-1:-1:-1;;;;;12038:18:0;;12030:68;;;;-1:-1:-1;;;12030:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12117:16:0;;12109:64;;;;-1:-1:-1;;;12109:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12204:15:0;;;;;;:9;:15;;;;;;:26;;12224:5;12204:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;12186:15:0;;;;;;;:9;:15;;;;;;:44;;;;12257:13;;;;;;;:24;;12275:5;12257:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;12241:13:0;;;;;;;:9;:13;;;;;;;;;:40;;;;12297:25;;;;;;;12241:13;;12297:25;;;;;;;;;;;;;11954:376;;;:::o;20665:516::-;-1:-1:-1;;;;;20795:22:0;;;20741:14;20795:22;;;:7;:22;;;;;;20741:14;;20795:22;20831:31;;20828:346;;20890:87;20965:11;;20890:70;20954:5;20906:17;-1:-1:-1;;;;;20890:44:0;;20943:4;20890:59;;;;;;;;;;;;;-1:-1:-1;;;;;20890:59:0;-1:-1:-1;;;;;20890:59:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20890:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20890:59:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20890:59:0;;:70;:63;:70;:::i;:87::-;20878:99;-1:-1:-1;20995:13:0;;20992:171;;21044:17;-1:-1:-1;;;;;21028:43:0;;21072:9;21028:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21028:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21028:54:0;;;;21117:17;-1:-1:-1;;;;;21101:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21101:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21101:46:0;;;;20992:171;20665:516;;;;;:::o;28868:1179::-;28991:5;;28948:4;;;;-1:-1:-1;;;;;28980:16:0;;;28991:5;;28980:16;:59;;-1:-1:-1;;;;;29021:18:0;;;;;;;:9;:18;;;;;;;28980:59;;;-1:-1:-1;;;;;28999:19:0;;;;;;;:9;:19;;;;;;;28980:59;28965:74;-1:-1:-1;;;;;;29053:18:0;;;29050:696;;-1:-1:-1;;;;;29104:19:0;;29087:14;29104:19;;;:13;:19;;;;;;;;;;;;;29213:218;29231:7;29229:9;;:1;:9;;;29213:218;;;29263:12;29285:4;-1:-1:-1;;;;;29278:18:0;;29302:1;29297:7;;29278:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29278:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29278:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29278:27:0;;-1:-1:-1;;;;;;29327:15:0;;;;;;;29324:42;;;29353:1;29345:9;;29356:8;;;29324:42;29395:8;-1:-1:-1;;;;;29387:16:0;:4;-1:-1:-1;;;;;29387:16:0;;29384:31;;;29414:1;29405:10;;29384:31;29213:218;;29240:3;;29213:218;;;;29457:7;29448:16;;:5;:16;;;;:37;;;;;29478:7;29468:17;;:6;:17;;;;29448:37;29445:290;;;29525:41;;;-1:-1:-1;;;29525:41:0;;29560:4;29525:41;;;;;;29505:17;;-1:-1:-1;;;;;29525:26:0;;;;;:41;;;;;;;;;;;;;;;:26;:41;;;5:2:-1;;;;30:1;27;20:12;5:2;29525:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29525:41:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29525:41:0;29585:47;;;-1:-1:-1;;;29585:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;29630:1;29585:47;;;;;;;;29525:41;;-1:-1:-1;;;;;;29585:21:0;;;;;:47;;;;;29630:1;;29585:47;;;;;;29630:1;29585:21;:47;;;5:2:-1;;;;30:1;27;20:12;5:2;29585:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29659:41:0;;;-1:-1:-1;;;29659:41:0;;29694:4;29659:41;;;;;;29658:61;;-1:-1:-1;29706:12:0;;-1:-1:-1;;;;;;29659:26:0;;;;;:41;;;;;;;;;;;;;;:26;:41;;;5:2:-1;;;;30:1;27;20:12;5:2;29659:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29659:41:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29659:41:0;;29658:61;:47;:61;:::i;:::-;29651:68;;;;;;;;;29445:290;29050:696;;;;29780:16;;;29794:1;29780:16;;;29756:21;29780:16;;;;;29756:21;29780:16;;;;;105:10:-1;29780:16:0;88:34:-1;136:17;;-1:-1;29780:16:0;29756:40;;29817:7;29807:4;29812:1;29807:7;;;;;;;;;;;;;:17;-1:-1:-1;;;;;29807:17:0;;;-1:-1:-1;;;;;29807:17:0;;;;;29845:8;29835:4;29840:1;29835:7;;;;;;;;;;;;;:18;-1:-1:-1;;;;;29835:18:0;;;-1:-1:-1;;;;;29835:18:0;;;;;29864:21;14956:42;-1:-1:-1;;;;;29888:60:0;;29963:6;29971:1;29974:4;29988;29995:15;29888:123;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29888:123:0;-1:-1:-1;;;;;29888:123:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;29888:123:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29888:123:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29888:123:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;29888:123:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;29888:123:0;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;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;373:25;;-1:-1;29888:123:0;;421:4:-1;412:14;;;;29888:123:0;;;;;412:14:-1;29888:123:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;29888:123:0;;;;;;;;;;;29864:147;;30029:7;30037:1;30029:10;;;;;;;;;;;;;;30022:17;;;;;28868:1179;;;;;:::o;9021:184::-;9134:62;;;-1:-1:-1;;;;;9134:62:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;9134:62:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;9108:89:0;;9127:5;;9108:18;:89::i;21737:1904::-;21883:5;;;;21963:11;21908:39;;;-1:-1:-1;;;21908:39:0;;21941:4;21908:39;;;;;;;;21825:11;;;;-1:-1:-1;;;;;21883:5:0;;21908:67;;21963:11;;21908:50;;21952:5;;21883;;21908:24;;:39;;;;;;;;;;;;;;;21883:5;21908:39;;;5:2:-1;;;;30:1;27;20:12;21908:67:0;21899:76;-1:-1:-1;21990:6:0;21986:731;22006:5;:12;22002:16;;21986:731;;;22040:14;22057:5;22063:1;22057:8;;;;;;;;;;;;;;;;;;;;22117:58;;;-1:-1:-1;;;22117:58:0;;-1:-1:-1;;;;;22117:58:0;;;;;;;22057:8;;;22117:58;;;;;;;;22057:8;;-1:-1:-1;14870:42:0;;22117;;:58;;;;;;;;;;;14870:42;22117:58;;;5:2:-1;;;;30:1;27;20:12;5:2;22117:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22117:58:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22117:58:0;22253:11;;22208:29;;;-1:-1:-1;;;22208:29:0;;22231:4;22208:29;;;;;;22117:58;;-1:-1:-1;22191:14:0;;22208:57;;22253:11;22208:40;;22242:5;;-1:-1:-1;;;;;22208:14:0;;;;;:29;;;;;22117:58;;22208:29;;;;;;;;:14;:29;;;5:2:-1;;;;30:1;27;20:12;22208:57:0;22191:74;;22293:44;22307:29;22324:4;22330:5;22307:16;:29::i;:::-;22293:9;;:44;:13;:44;:::i;:::-;22280:57;-1:-1:-1;22355:14:0;22352:27;;22371:8;;;;;22352:27;22427:199;;;-1:-1:-1;;;22427:199:0;;-1:-1:-1;;;;;22427:199:0;;;;;;;;;;;;;;;;;;;22397:12;22427:199;;;;;;;;;;;;22589:4;22427:199;;;;22596:15;22427:199;;;;;;22397:12;;;;14956:42;;22427:51;;:199;;;;;;;;;;;;;22397:12;14956:42;22427:199;;;5:2:-1;;;;30:1;27;20:12;5:2;22427:199:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22427:199:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22427:199:0;;;;;;;;;-1:-1:-1;22427:199:0;-1:-1:-1;22650:55:0;22674:30;22680:6;22688;22427:199;22674:5;:30::i;:::-;22650:19;:6;22661:7;22650:19;:10;:19;:::i;:::-;:23;:55;:23;:55;:::i;:::-;22641:64;;21986:731;;;;;;22020:3;;21986:731;;;-1:-1:-1;22777:36:0;;;-1:-1:-1;;;22777:36:0;;22807:4;22777:36;;;;;;22760:14;;15028:42;;22777:21;;:36;;;;;;;;;;;;;;;15028:42;22777:36;;;5:2:-1;;;;30:1;27;20:12;5:2;22777:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22777:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22777:36:0;22884:11;;22843:10;;22777:36;;-1:-1:-1;22824:16:0;;22843:53;;22884:11;22843:36;;22873:5;;22843:25;;22777:36;22843:25;:14;:25;:::i;:53::-;22824:72;-1:-1:-1;22910:15:0;;22907:372;;-1:-1:-1;;;;;22981:15:0;;22941:9;22981:15;;;:9;:15;;;;;;;;;22953:6;:12;;;;;;:44;;22981:15;22953:23;;22970:5;22953:23;:16;:23;:::i;:44::-;-1:-1:-1;;;;;23027:12:0;;;;;;:6;:12;;;;;;22941:56;;-1:-1:-1;23027:22:0;;22941:56;23027:22;:16;:22;:::i;:::-;-1:-1:-1;;;;;23012:12:0;;;;;;:6;:12;;;;;:37;23077:10;;:20;;23092:4;23077:20;:14;:20;:::i;:::-;23064:10;:33;23112:11;23126:21;:11;23142:4;23126:21;:15;:21;:::i;:::-;23112:35;;23174:9;23165:6;:18;23162:41;;;-1:-1:-1;23194:9:0;23162:41;23221:10;;23218:49;;23233:34;;;-1:-1:-1;;;23233:34:0;;-1:-1:-1;;;;;23233:34:0;;;;;;;;;;;;;;15028:42;;23233:20;;:34;;;;;;;;;;;;;;-1:-1:-1;15028:42:0;23233:34;;;5:2:-1;;;;30:1;27;20:12;5:2;23233:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23233:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;23218:49:0;22907:372;;;-1:-1:-1;;;;;23338:15:0;;;;;;:9;:15;;;;;;;;;23304:12;:18;;;;;;;:50;;23338:15;23304:29;;23327:5;23304:29;:22;:29;:::i;:50::-;23291:63;;23377:10;23368:6;:19;23365:269;;;23403:9;23415:46;15103:3;23415:33;15133:2;23416:22;:6;23427:10;23416:22;:10;:22;:::i;23415:46::-;23403:58;-1:-1:-1;23485:16:0;:6;23403:58;23485:16;:10;:16;:::i;:::-;23544:10;;23476:25;;-1:-1:-1;23516:45:0;;-1:-1:-1;;;;;23516:27:0;;;;23544:10;23556:4;23516:45;:27;:45;:::i;:::-;23365:269;;;;23616:6;23603:19;;23365:269;21737:1904;;;;;;;;:::o;11323:286::-;-1:-1:-1;;;;;11392:18:0;;11384:64;;;;-1:-1:-1;;;11384:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11479:15:0;;;;;;:9;:15;;;;;;:26;;11499:5;11479:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;11461:15:0;;;;;;:9;:15;;;;;:44;11530:11;;:22;;11546:5;11530:22;:15;:22;:::i;:::-;11516:11;:36;11568:33;;;;;;;;11591:1;;-1:-1:-1;;;;;11568:33:0;;;;;;;;;;;;11323:286;;:::o;8625:176::-;8734:58;;;-1:-1:-1;;;;;8734:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;8734:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;8708:85:0;;8727:5;;8708:18;:85::i;8809:204::-;8936:68;;;-1:-1:-1;;;;;8936:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;8936:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;8910:95:0;;8929:5;;8910:18;:95::i;:::-;8809:204;;;;:::o;11041:274::-;-1:-1:-1;;;;;11108:16:0;;11100:60;;;;;-1:-1:-1;;;11100:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11187:11;;:22;;11203:5;11187:22;:15;:22;:::i;:::-;11173:11;:36;-1:-1:-1;;;;;11236:13:0;;;;;;:9;:13;;;;;;:24;;11254:5;11236:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;11220:13:0;;;;;;:9;:13;;;;;;;;:40;;;;11276:31;;;;;;;11220:13;;;;11276:31;;;;;;;;;;11041:274;;:::o;5135:192::-;5221:7;5257:12;5249:6;;;;5241:29;;;;-1:-1:-1;;;5241:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;5241:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5293:5:0;;;5135:192::o;9596:894::-;10117:12;10131:23;10166:5;-1:-1:-1;;;;;10158:19:0;10178:4;10158:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;10158:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;10116:67:0;;;;10202:7;10194:52;;;;;-1:-1:-1;;;10194:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10263:17;;:21;10259:224;;10405:10;10394:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10394:30:0;10386:85;;;;-1:-1:-1;;;10386:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://1a08d8e3abfaa2696a22890f7a9fc8c1722c9d5f369ab8b5e44a3c6edf37c9e3
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.