More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,090 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Leave Staking | 19869553 | 75 days ago | IN | 0 ETH | 0.00079329 | ||||
Leave Staking | 19753090 | 91 days ago | IN | 0 ETH | 0.0008707 | ||||
Leave Staking | 19753050 | 91 days ago | IN | 0 ETH | 0.00099759 | ||||
Leave Staking | 19338731 | 149 days ago | IN | 0 ETH | 0.00548304 | ||||
Claim | 19338724 | 149 days ago | IN | 0 ETH | 0.00137124 | ||||
Claim | 18734806 | 234 days ago | IN | 0 ETH | 0.00218094 | ||||
Claim | 18087674 | 324 days ago | IN | 0 ETH | 0.0008588 | ||||
Claim | 17752991 | 371 days ago | IN | 0 ETH | 0.00068288 | ||||
Claim | 17556976 | 399 days ago | IN | 0 ETH | 0.00072529 | ||||
Claim | 17452266 | 414 days ago | IN | 0 ETH | 0.00099531 | ||||
Claim | 17398893 | 421 days ago | IN | 0 ETH | 0.00115773 | ||||
Claim | 17346439 | 428 days ago | IN | 0 ETH | 0.00149764 | ||||
Claim | 17303309 | 434 days ago | IN | 0 ETH | 0.00165318 | ||||
Claim | 17252591 | 442 days ago | IN | 0 ETH | 0.00188861 | ||||
Leave Staking | 17242629 | 443 days ago | IN | 0 ETH | 0.01943813 | ||||
Claim | 17226452 | 445 days ago | IN | 0 ETH | 0.00334419 | ||||
Claim | 17131638 | 459 days ago | IN | 0 ETH | 0.00126803 | ||||
Claim | 17131628 | 459 days ago | IN | 0 ETH | 0.00208201 | ||||
Claim | 17098603 | 463 days ago | IN | 0 ETH | 0.00177629 | ||||
Claim | 16976765 | 481 days ago | IN | 0 ETH | 0.00195834 | ||||
Leave Staking | 16960419 | 483 days ago | IN | 0 ETH | 0.00257147 | ||||
Claim | 16960415 | 483 days ago | IN | 0 ETH | 0.00061195 | ||||
Leave Staking | 16958386 | 483 days ago | IN | 0 ETH | 0.00215165 | ||||
Claim | 16958384 | 483 days ago | IN | 0 ETH | 0.00056986 | ||||
Claim | 16914035 | 490 days ago | IN | 0 ETH | 0.00092321 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
18734806 | 234 days ago | 0.00510187 ETH | ||||
18731646 | 234 days ago | 0.00510187 ETH | ||||
18087674 | 324 days ago | 0.01587228 ETH | ||||
18069062 | 327 days ago | 0.01587228 ETH | ||||
17752991 | 371 days ago | 0.00696492 ETH | ||||
17752198 | 371 days ago | 0.00696492 ETH | ||||
17556976 | 399 days ago | 0.0096945 ETH | ||||
17556066 | 399 days ago | 0.0096945 ETH | ||||
17452266 | 414 days ago | 0.01149903 ETH | ||||
17451993 | 414 days ago | 0.01149903 ETH | ||||
17398893 | 421 days ago | 0.01046176 ETH | ||||
17397813 | 421 days ago | 0.01046176 ETH | ||||
17346439 | 428 days ago | 0.01005089 ETH | ||||
17346410 | 428 days ago | 0.01005089 ETH | ||||
17303309 | 434 days ago | 0.05100224 ETH | ||||
17300804 | 435 days ago | 0.05100224 ETH | ||||
17252591 | 442 days ago | 0.00824931 ETH | ||||
17242629 | 443 days ago | 0.00824931 ETH | ||||
17226452 | 445 days ago | 0.01017463 ETH | ||||
17201527 | 449 days ago | 0.01017463 ETH | ||||
17131628 | 459 days ago | 0.01151568 ETH | ||||
17127294 | 459 days ago | 0.01151568 ETH | ||||
17098603 | 463 days ago | 0.02955203 ETH | ||||
17054577 | 470 days ago | 0.02955203 ETH | ||||
16976765 | 481 days ago | 0.01384763 ETH |
Loading...
Loading
Contract Name:
HULKStake
Compiler Version
v0.8.5+commit.a4f2e591
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-08 */ // File: IPancakeRouterV2.sol pragma solidity 0.8.5; interface IPancakeRouter01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IPancakeRouter02 is IPancakeRouter01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IPancakeFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File: Context.sol pragma solidity >= 0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: Ownable.sol pragma solidity >= 0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: IERC20.sol pragma solidity >= 0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: ReentrancyGuard.sol pragma solidity >= 0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract 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 () { _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; } modifier isHuman() { require(tx.origin == msg.sender, "Humans only"); _; } } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @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) { return a + b; } /** * @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 a - b; } /** * @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) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: HULKStake.sol //SPDX-License-Identifier: MIT pragma solidity >= 0.8.0; contract HULKStake is Ownable, ReentrancyGuard { using SafeMath for uint256; uint256 public DECIMALS = 18; IPancakeRouter02 internal _router; //address of the token IERC20 public HULK; uint256 poolFee = 3; // fee deducted from, deposits, withdrawals uint256 public earlyWithdrawFee = 10; uint256 public earlyWithdrawFeeTime = 3 days; address public devWallet = 0x2E8c54dE18F9f12caab6C0Ddf82b4711F591b6C2; struct userStakeProfile { uint256 stakedAmount; uint256 claimedAmount; uint256 lastBlockCompounded; uint256 lastBlockStaked; } mapping (address => userStakeProfile) public stakings; uint256 public ETHPerBlock; uint256 public totalUsers; uint256 public totalStaked; uint256 public totalClaimed; event StakeUpdated (address indexed recipeint, uint256 indexed _amount); constructor () { setRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); HULK = IERC20(0x91a5de30e57831529a3c1aF636A78a7E4E83f3aa); setETHPerBlock(40000000000000); // set ETH per block to 0.00004 ETH. ~6646 blocks in 24h. 0.00004 x 6646 = 0.26584 ETH } function setRouter(address routerAddress) public onlyOwner { require(routerAddress != address(0), "Cannot use the zero address as router address"); _router = IPancakeRouter02(routerAddress); } function totalPoolReserve() public view returns(uint256){ return address(this).balance; } function swapETHForTokens(address to, address token, uint256 ETHAmount) internal returns(bool) { // Generate pair for WETH -> Future address[] memory path = new address[](2); path[0] = _router.WETH(); path[1] = token; // Swap and send the tokens to the 'to' address try _router.swapExactETHForTokensSupportingFeeOnTransferTokens{ value: ETHAmount }(0, path, to, block.timestamp + 360) { return true; } catch { return false; } } // Set reward amount per block function setETHPerBlock (uint256 _amount) public onlyOwner { require(_amount >= 0, "HULK per Block can not be negative" ); ETHPerBlock = _amount; } /// Stake the provided amount function enterStaking (uint256 _amount) public isHuman { require(HULK.balanceOf(msg.sender) >= _amount, "Insufficient HULK tokens for transfer"); require(_amount > 0,"Invalid staking amount"); require(totalPoolReserve() > 0, "Reward Pool Exhausted"); HULK.transferFrom(msg.sender, address(this), _amount); _amount = takeHULKPoolFee(_amount); userStakeProfile memory profile = stakings[msg.sender]; if(profile.stakedAmount == 0){ profile.lastBlockCompounded = block.number; totalUsers++; } profile.stakedAmount += _amount; profile.lastBlockStaked = block.number; totalStaked += _amount; stakings[msg.sender] = profile; } //leaves staking function leaveStaking (uint256 _amount) public isHuman { userStakeProfile memory profile = stakings[msg.sender]; require(profile.stakedAmount >= _amount, "Withdraw amount can not be greater than stake"); totalStaked -= _amount; profile.stakedAmount -= _amount; stakings[msg.sender] = profile; // claim pending reward if(getReward(msg.sender) > 0){ claim(); } if(block.number < stakings[msg.sender].lastBlockStaked.add(earlyWithdrawFeeTime)){ uint256 withdrawalFee = _amount * earlyWithdrawFee / 100; _amount -= withdrawalFee; HULK.transfer(devWallet, withdrawalFee); }else{ _amount = takeHULKPoolFee(_amount); } profile.lastBlockCompounded = block.number; HULK.transfer(msg.sender, _amount); //remove if(stakings[msg.sender].stakedAmount == 0){ totalUsers--; delete stakings[msg.sender]; } } // gets reward amount from a user function getReward(address _address) internal view returns (uint256) { if(block.number <= stakings[_address].lastBlockCompounded){ return 0; }else { uint256 totalPool = totalPoolReserve(); if(totalPool == 0 || totalStaked == 0 ){ return 0; }else { uint256 blocks = block.number.sub(stakings[_address].lastBlockCompounded); //if the staker reward is greater than total pool => set it to total pool uint256 totalReward = blocks.mul(ETHPerBlock); uint256 stakerReward = totalReward.mul(stakings[_address].stakedAmount).div(totalStaked); if(stakerReward > totalPool){ stakerReward = totalPool; } return stakerReward; } } } /// Get pending rewards of a user to display on DAPP, even if farming is disabled it shows remaining balance function pendingReward (address _address) public view returns (uint256){ return getReward(_address); } /// transfers the rewards of a user to their address function claim() public isHuman{ uint256 reward = getReward(msg.sender); (bool os, ) = payable(msg.sender).call{value: reward}(""); require(os,"failed claim"); stakings[msg.sender].claimedAmount = stakings[msg.sender].claimedAmount.add(reward); stakings[msg.sender].lastBlockCompounded = block.number; totalClaimed = totalClaimed.add(reward); } /// compounds the rewards of the caller, buys more HULK and stakes that function singleCompound() public isHuman { require(stakings[msg.sender].stakedAmount > 0, "Please Stake HULK to compound"); uint256 reward = getReward(msg.sender); reward = takeETHPoolFee(reward); // swap reward to extra tokens and log uint256 initialBalance = HULK.balanceOf(address(this)); require(swapETHForTokens(address(this), address(HULK), reward),"swapping failed"); uint256 addedBalance = HULK.balanceOf(address(this)) - initialBalance; // add extra tokens stakings[msg.sender].stakedAmount += addedBalance; totalStaked += addedBalance; stakings[msg.sender].lastBlockCompounded = block.number; totalClaimed = totalClaimed.add(reward); emit StakeUpdated(msg.sender,reward); } // update ecosystem wallet function updatedevWallet(address wallet) public onlyOwner{ devWallet = wallet; } // update pool fee function updatePoolFee(uint256 _amount) public onlyOwner{ poolFee = _amount; } // remove ETH from totalpool in case of emergency/migration function migratePool() public payable onlyOwner { (bool os, ) = payable(devWallet).call{value: totalPoolReserve()}(""); require(os); } // sends ETH fee and returns remaining reward for user function takeETHPoolFee(uint256 reward) internal view returns(uint256){ uint256 Fee = reward / 100 * poolFee; // take fee reward -= Fee; devWallet.call{value:Fee}; return reward; } // sends HULK fee and burns a portion of it function takeHULKPoolFee(uint256 reward) internal returns(uint256){ uint256 Fee = reward / 100 * poolFee; // take fee reward -= Fee; HULK.transfer(devWallet,Fee); return reward; } function returnStakeData() public view returns (bytes memory) { return abi.encode(HULK.balanceOf(msg.sender), stakings[msg.sender].stakedAmount, pendingReward(msg.sender), totalPoolReserve(), totalUsers, totalClaimed, totalStaked,ETHPerBlock); } // Ensures that the contract is able to receive ETH and adds it to the total pool receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipeint","type":"address"},{"indexed":true,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"StakeUpdated","type":"event"},{"inputs":[],"name":"DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ETHPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HULK","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyWithdrawFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyWithdrawFeeTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"enterStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"leaveStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migratePool","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"pendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"returnStakeData","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setETHPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"singleCompound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakings","outputs":[{"internalType":"uint256","name":"stakedAmount","type":"uint256"},{"internalType":"uint256","name":"claimedAmount","type":"uint256"},{"internalType":"uint256","name":"lastBlockCompounded","type":"uint256"},{"internalType":"uint256","name":"lastBlockStaked","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPoolReserve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalUsers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"updatePoolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"updatedevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260126002556003600555600a6006556203f480600755732e8c54de18f9f12caab6c0ddf82b4711f591b6c2600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200007c57600080fd5b506200009d620000916200013b60201b60201c565b6200014360201b60201c565b60018081905550620000c9737a250d5630b4cf539739df2c5dacb4c659f2488d6200020760201b60201c565b7391a5de30e57831529a3c1af636a78a7e4e83f3aa600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200013565246139ca80006200034d60201b60201c565b62000609565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002176200013b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200023d6200042d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000296576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200028d906200050f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000309576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200030090620004cb565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6200035d6200013b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003836200042d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003dc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003d3906200050f565b60405180910390fd5b600081101562000423576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200041a90620004ed565b60405180910390fd5b80600a8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600062000465602d8362000531565b9150620004728262000542565b604082019050919050565b60006200048c60228362000531565b9150620004998262000591565b604082019050919050565b6000620004b360208362000531565b9150620004c082620005e0565b602082019050919050565b60006020820190508181036000830152620004e68162000456565b9050919050565b6000602082019050818103600083015262000508816200047d565b9050919050565b600060208201905081810360008301526200052a81620004a4565b9050919050565b600082825260208201905092915050565b7f43616e6e6f742075736520746865207a65726f2061646472657373206173207260008201527f6f75746572206164647265737300000000000000000000000000000000000000602082015250565b7f48554c4b2070657220426c6f636b2063616e206e6f74206265206e656761746960008201527f7665000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6130a380620006196000396000f3fe60806040526004361061016a5760003560e01c80638da5cb5b116100d1578063c0d786551161008a578063dc6e13e111610064578063dc6e13e114610496578063f2fde38b146104d6578063f40f0f52146104ff578063fc1704411461053c57610171565b8063c0d7865514610419578063c2cac04b14610442578063d54ad2a11461046b57610171565b80638da5cb5b146103175780638ea5220f1461034257806395bcaa411461036d578063a80a788214610398578063b354bac9146103c3578063bff1f9e1146103ee57610171565b80635692f138116101235780635692f1381461023f57806367dcaf94146102565780636903d0b614610281578063715018a6146102ac578063817b1cd2146102c35780638676712c146102ee57610171565b80630cded5f0146101765780631058d2811461018057806318b93049146101a95780632e0f2625146101d457806341441d3b146101ff5780634e71d92d1461022857610171565b3661017157005b600080fd5b61017e610565565b005b34801561018c57600080fd5b506101a760048036038101906101a2919061236d565b610683565b005b3480156101b557600080fd5b506101be610b57565b6040516101cb9190612718565b60405180910390f35b3480156101e057600080fd5b506101e9610c8f565b6040516101f69190612921565b60405180910390f35b34801561020b57600080fd5b506102266004803603810190610221919061236d565b610c95565b005b34801561023457600080fd5b5061023d61108b565b005b34801561024b57600080fd5b506102546112b3565b005b34801561026257600080fd5b5061026b6116b0565b6040516102789190612921565b60405180910390f35b34801561028d57600080fd5b506102966116b6565b6040516102a39190612921565b60405180910390f35b3480156102b857600080fd5b506102c16116bc565b005b3480156102cf57600080fd5b506102d8611744565b6040516102e59190612921565b60405180910390f35b3480156102fa57600080fd5b506103156004803603810190610310919061236d565b61174a565b005b34801561032357600080fd5b5061032c611814565b604051610339919061269d565b60405180910390f35b34801561034e57600080fd5b5061035761183d565b604051610364919061269d565b60405180910390f35b34801561037957600080fd5b50610382611863565b60405161038f9190612921565b60405180910390f35b3480156103a457600080fd5b506103ad61186b565b6040516103ba9190612921565b60405180910390f35b3480156103cf57600080fd5b506103d8611871565b6040516103e5919061273a565b60405180910390f35b3480156103fa57600080fd5b50610403611897565b6040516104109190612921565b60405180910390f35b34801561042557600080fd5b50610440600480360381019061043b91906122e6565b61189d565b005b34801561044e57600080fd5b506104696004803603810190610464919061236d565b6119cd565b005b34801561047757600080fd5b50610480611a53565b60405161048d9190612921565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b891906122e6565b611a59565b6040516104cd949392919061293c565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f891906122e6565b611a89565b005b34801561050b57600080fd5b50610526600480360381019061052191906122e6565b611b81565b6040516105339190612921565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e91906122e6565b611b93565b005b61056d611c53565b73ffffffffffffffffffffffffffffffffffffffff1661058b611814565b73ffffffffffffffffffffffffffffffffffffffff16146105e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d890612861565b60405180910390fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610624611863565b60405161063090612688565b60006040518083038185875af1925050503d806000811461066d576040519150601f19603f3d011682016040523d82523d6000602084013e610672565b606091505b505090508061068057600080fd5b50565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146106f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e890612881565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806080016040529081600082015481526020016001820154815260200160028201548152602001600382015481525050905081816000015110156107ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a5906128a1565b60405180910390fd5b81600c60008282546107c09190612b51565b9250508190555081816000018181516107d99190612b51565b9150818152505080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030155905050600061085633611c5b565b11156108655761086461108b565b5b6108bc600754600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154611dd390919063ffffffff16565b4310156109c75760006064600654846108d59190612af7565b6108df9190612ac6565b905080836108ed9190612b51565b9250600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161096e9291906126ef565b602060405180830381600087803b15801561098857600080fd5b505af115801561099c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c09190612340565b50506109d3565b6109d082611de9565b91505b43816040018181525050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401610a3a9291906126ef565b602060405180830381600087803b158015610a5457600080fd5b505af1158015610a68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8c9190612340565b506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415610b5357600b6000815480929190610aeb90612c36565b9190505550600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160009055600382016000905550505b5050565b6060600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610bb4919061269d565b60206040518083038186803b158015610bcc57600080fd5b505afa158015610be0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c04919061239a565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610c5033611b81565b610c58611863565b600b54600d54600c54600a54604051602001610c7b989796959493929190612981565b604051602081830303815290604052905090565b60025481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfa90612881565b60405180910390fd5b80600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610d5f919061269d565b60206040518083038186803b158015610d7757600080fd5b505afa158015610d8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610daf919061239a565b1015610df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de790612821565b60405180910390fd5b60008111610e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2a906128c1565b60405180910390fd5b6000610e3d611863565b11610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e74906127a1565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401610edc939291906126b8565b602060405180830381600087803b158015610ef657600080fd5b505af1158015610f0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2e9190612340565b50610f3881611de9565b90506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820154815250509050600081600001511415610fe05743816040018181525050600b6000815480929190610fda90612c60565b91905055505b8181600001818151610ff29190612a70565b915081815250504381606001818152505081600c60008282546110159190612a70565b9250508190555080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301559050505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146110f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f090612881565b60405180910390fd5b600061110433611c5b565b905060003373ffffffffffffffffffffffffffffffffffffffff168260405161112c90612688565b60006040518083038185875af1925050503d8060008114611169576040519150601f19603f3d011682016040523d82523d6000602084013e61116e565b606091505b50509050806111b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a990612801565b60405180910390fd5b61120782600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154611dd390919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555043600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506112a982600d54611dd390919063ffffffff16565b600d819055505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131890612881565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154116113a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139d90612901565b60405180910390fd5b60006113b133611c5b565b90506113bc81611ef1565b90506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161141b919061269d565b60206040518083038186803b15801561143357600080fd5b505afa158015611447573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146b919061239a565b905061149a30600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f35565b6114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d0906128e1565b60405180910390fd5b600081600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611537919061269d565b60206040518083038186803b15801561154f57600080fd5b505afa158015611563573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611587919061239a565b6115919190612b51565b905080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282546115e59190612a70565b9250508190555080600c60008282546115fe9190612a70565b9250508190555043600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555061166183600d54611dd390919063ffffffff16565b600d81905550823373ffffffffffffffffffffffffffffffffffffffff167fab0e25dc39626189cfb41155020ba89e726b10244275733e9d7c63cf33ffccdb60405160405180910390a3505050565b600a5481565b60075481565b6116c4611c53565b73ffffffffffffffffffffffffffffffffffffffff166116e2611814565b73ffffffffffffffffffffffffffffffffffffffff1614611738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172f90612861565b60405180910390fd5b6117426000612177565b565b600c5481565b611752611c53565b73ffffffffffffffffffffffffffffffffffffffff16611770611814565b73ffffffffffffffffffffffffffffffffffffffff16146117c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bd90612861565b60405180910390fd5b600081101561180a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180190612841565b60405180910390fd5b80600a8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600047905090565b60065481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b6118a5611c53565b73ffffffffffffffffffffffffffffffffffffffff166118c3611814565b73ffffffffffffffffffffffffffffffffffffffff1614611919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191090612861565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611989576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611980906127e1565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6119d5611c53565b73ffffffffffffffffffffffffffffffffffffffff166119f3611814565b73ffffffffffffffffffffffffffffffffffffffff1614611a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4090612861565b60405180910390fd5b8060058190555050565b600d5481565b60096020528060005260406000206000915090508060000154908060010154908060020154908060030154905084565b611a91611c53565b73ffffffffffffffffffffffffffffffffffffffff16611aaf611814565b73ffffffffffffffffffffffffffffffffffffffff1614611b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afc90612861565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c906127c1565b60405180910390fd5b611b7e81612177565b50565b6000611b8c82611c5b565b9050919050565b611b9b611c53565b73ffffffffffffffffffffffffffffffffffffffff16611bb9611814565b73ffffffffffffffffffffffffffffffffffffffff1614611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0690612861565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201544311611caf5760009050611dce565b6000611cb9611863565b90506000811480611ccc57506000600c54145b15611cdb576000915050611dce565b6000611d32600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201544361223b90919063ffffffff16565b90506000611d4b600a548361225190919063ffffffff16565b90506000611db8600c54611daa600960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001548561225190919063ffffffff16565b61226790919063ffffffff16565b905083811115611dc6578390505b809450505050505b919050565b60008183611de19190612a70565b905092915050565b600080600554606484611dfc9190612ac6565b611e069190612af7565b90508083611e149190612b51565b9250600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611e959291906126ef565b602060405180830381600087803b158015611eaf57600080fd5b505af1158015611ec3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee79190612340565b5082915050919050565b600080600554606484611f049190612ac6565b611f0e9190612af7565b90508083611f1c9190612b51565b9250600860009054906101000a90505082915050919050565b600080600267ffffffffffffffff811115611f5357611f52612d36565b5b604051908082528060200260200182016040528015611f815781602001602082028036833780820191505090505b509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611fec57600080fd5b505afa158015612000573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120249190612313565b8160008151811061203857612037612d07565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050838160018151811061208757612086612d07565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008489610168426121129190612a70565b6040518663ffffffff1660e01b81526004016121319493929190612755565b6000604051808303818588803b15801561214a57600080fd5b505af19350505050801561215c575060015b61216a576000915050612170565b60019150505b9392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836122499190612b51565b905092915050565b6000818361225f9190612af7565b905092915050565b600081836122759190612ac6565b905092915050565b60008135905061228c81613028565b92915050565b6000815190506122a181613028565b92915050565b6000815190506122b68161303f565b92915050565b6000813590506122cb81613056565b92915050565b6000815190506122e081613056565b92915050565b6000602082840312156122fc576122fb612d65565b5b600061230a8482850161227d565b91505092915050565b60006020828403121561232957612328612d65565b5b600061233784828501612292565b91505092915050565b60006020828403121561235657612355612d65565b5b6000612364848285016122a7565b91505092915050565b60006020828403121561238357612382612d65565b5b6000612391848285016122bc565b91505092915050565b6000602082840312156123b0576123af612d65565b5b60006123be848285016122d1565b91505092915050565b60006123d383836123df565b60208301905092915050565b6123e881612b85565b82525050565b6123f781612b85565b82525050565b600061240882612a0f565b6124128185612a32565b935061241d836129ff565b8060005b8381101561244e57815161243588826123c7565b975061244083612a25565b925050600181019050612421565b5085935050505092915050565b600061246682612a1a565b6124708185612a43565b9350612480818560208601612c03565b61248981612d6a565b840191505092915050565b61249d81612bcd565b82525050565b6124ac81612bf1565b82525050565b60006124bf601583612a5f565b91506124ca82612d7b565b602082019050919050565b60006124e2602683612a5f565b91506124ed82612da4565b604082019050919050565b6000612505602d83612a5f565b915061251082612df3565b604082019050919050565b6000612528600c83612a5f565b915061253382612e42565b602082019050919050565b600061254b602583612a5f565b915061255682612e6b565b604082019050919050565b600061256e602283612a5f565b915061257982612eba565b604082019050919050565b6000612591602083612a5f565b915061259c82612f09565b602082019050919050565b60006125b4600b83612a5f565b91506125bf82612f32565b602082019050919050565b60006125d7602d83612a5f565b91506125e282612f5b565b604082019050919050565b60006125fa600083612a54565b915061260582612faa565b600082019050919050565b600061261d601683612a5f565b915061262882612fad565b602082019050919050565b6000612640600f83612a5f565b915061264b82612fd6565b602082019050919050565b6000612663601d83612a5f565b915061266e82612fff565b602082019050919050565b61268281612bc3565b82525050565b6000612693826125ed565b9150819050919050565b60006020820190506126b260008301846123ee565b92915050565b60006060820190506126cd60008301866123ee565b6126da60208301856123ee565b6126e76040830184612679565b949350505050565b600060408201905061270460008301856123ee565b6127116020830184612679565b9392505050565b60006020820190508181036000830152612732818461245b565b905092915050565b600060208201905061274f6000830184612494565b92915050565b600060808201905061276a60008301876124a3565b818103602083015261277c81866123fd565b905061278b60408301856123ee565b6127986060830184612679565b95945050505050565b600060208201905081810360008301526127ba816124b2565b9050919050565b600060208201905081810360008301526127da816124d5565b9050919050565b600060208201905081810360008301526127fa816124f8565b9050919050565b6000602082019050818103600083015261281a8161251b565b9050919050565b6000602082019050818103600083015261283a8161253e565b9050919050565b6000602082019050818103600083015261285a81612561565b9050919050565b6000602082019050818103600083015261287a81612584565b9050919050565b6000602082019050818103600083015261289a816125a7565b9050919050565b600060208201905081810360008301526128ba816125ca565b9050919050565b600060208201905081810360008301526128da81612610565b9050919050565b600060208201905081810360008301526128fa81612633565b9050919050565b6000602082019050818103600083015261291a81612656565b9050919050565b60006020820190506129366000830184612679565b92915050565b60006080820190506129516000830187612679565b61295e6020830186612679565b61296b6040830185612679565b6129786060830184612679565b95945050505050565b600061010082019050612997600083018b612679565b6129a4602083018a612679565b6129b16040830189612679565b6129be6060830188612679565b6129cb6080830187612679565b6129d860a0830186612679565b6129e560c0830185612679565b6129f260e0830184612679565b9998505050505050505050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000612a7b82612bc3565b9150612a8683612bc3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612abb57612aba612ca9565b5b828201905092915050565b6000612ad182612bc3565b9150612adc83612bc3565b925082612aec57612aeb612cd8565b5b828204905092915050565b6000612b0282612bc3565b9150612b0d83612bc3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612b4657612b45612ca9565b5b828202905092915050565b6000612b5c82612bc3565b9150612b6783612bc3565b925082821015612b7a57612b79612ca9565b5b828203905092915050565b6000612b9082612ba3565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612bd882612bdf565b9050919050565b6000612bea82612ba3565b9050919050565b6000612bfc82612bc3565b9050919050565b60005b83811015612c21578082015181840152602081019050612c06565b83811115612c30576000848401525b50505050565b6000612c4182612bc3565b91506000821415612c5557612c54612ca9565b5b600182039050919050565b6000612c6b82612bc3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612c9e57612c9d612ca9565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f52657761726420506f6f6c204578686175737465640000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f742075736520746865207a65726f2061646472657373206173207260008201527f6f75746572206164647265737300000000000000000000000000000000000000602082015250565b7f6661696c656420636c61696d0000000000000000000000000000000000000000600082015250565b7f496e73756666696369656e742048554c4b20746f6b656e7320666f722074726160008201527f6e73666572000000000000000000000000000000000000000000000000000000602082015250565b7f48554c4b2070657220426c6f636b2063616e206e6f74206265206e656761746960008201527f7665000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f48756d616e73206f6e6c79000000000000000000000000000000000000000000600082015250565b7f576974686472617720616d6f756e742063616e206e6f7420626520677265617460008201527f6572207468616e207374616b6500000000000000000000000000000000000000602082015250565b50565b7f496e76616c6964207374616b696e6720616d6f756e7400000000000000000000600082015250565b7f7377617070696e67206661696c65640000000000000000000000000000000000600082015250565b7f506c65617365205374616b652048554c4b20746f20636f6d706f756e64000000600082015250565b61303181612b85565b811461303c57600080fd5b50565b61304881612b97565b811461305357600080fd5b50565b61305f81612bc3565b811461306a57600080fd5b5056fea264697066735822122013a8dfbebbdfc5366e58d1856d0afef1a330c8851334b9be954df17fbb7fe7e964736f6c63430008050033
Deployed Bytecode
0x60806040526004361061016a5760003560e01c80638da5cb5b116100d1578063c0d786551161008a578063dc6e13e111610064578063dc6e13e114610496578063f2fde38b146104d6578063f40f0f52146104ff578063fc1704411461053c57610171565b8063c0d7865514610419578063c2cac04b14610442578063d54ad2a11461046b57610171565b80638da5cb5b146103175780638ea5220f1461034257806395bcaa411461036d578063a80a788214610398578063b354bac9146103c3578063bff1f9e1146103ee57610171565b80635692f138116101235780635692f1381461023f57806367dcaf94146102565780636903d0b614610281578063715018a6146102ac578063817b1cd2146102c35780638676712c146102ee57610171565b80630cded5f0146101765780631058d2811461018057806318b93049146101a95780632e0f2625146101d457806341441d3b146101ff5780634e71d92d1461022857610171565b3661017157005b600080fd5b61017e610565565b005b34801561018c57600080fd5b506101a760048036038101906101a2919061236d565b610683565b005b3480156101b557600080fd5b506101be610b57565b6040516101cb9190612718565b60405180910390f35b3480156101e057600080fd5b506101e9610c8f565b6040516101f69190612921565b60405180910390f35b34801561020b57600080fd5b506102266004803603810190610221919061236d565b610c95565b005b34801561023457600080fd5b5061023d61108b565b005b34801561024b57600080fd5b506102546112b3565b005b34801561026257600080fd5b5061026b6116b0565b6040516102789190612921565b60405180910390f35b34801561028d57600080fd5b506102966116b6565b6040516102a39190612921565b60405180910390f35b3480156102b857600080fd5b506102c16116bc565b005b3480156102cf57600080fd5b506102d8611744565b6040516102e59190612921565b60405180910390f35b3480156102fa57600080fd5b506103156004803603810190610310919061236d565b61174a565b005b34801561032357600080fd5b5061032c611814565b604051610339919061269d565b60405180910390f35b34801561034e57600080fd5b5061035761183d565b604051610364919061269d565b60405180910390f35b34801561037957600080fd5b50610382611863565b60405161038f9190612921565b60405180910390f35b3480156103a457600080fd5b506103ad61186b565b6040516103ba9190612921565b60405180910390f35b3480156103cf57600080fd5b506103d8611871565b6040516103e5919061273a565b60405180910390f35b3480156103fa57600080fd5b50610403611897565b6040516104109190612921565b60405180910390f35b34801561042557600080fd5b50610440600480360381019061043b91906122e6565b61189d565b005b34801561044e57600080fd5b506104696004803603810190610464919061236d565b6119cd565b005b34801561047757600080fd5b50610480611a53565b60405161048d9190612921565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b891906122e6565b611a59565b6040516104cd949392919061293c565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f891906122e6565b611a89565b005b34801561050b57600080fd5b50610526600480360381019061052191906122e6565b611b81565b6040516105339190612921565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e91906122e6565b611b93565b005b61056d611c53565b73ffffffffffffffffffffffffffffffffffffffff1661058b611814565b73ffffffffffffffffffffffffffffffffffffffff16146105e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d890612861565b60405180910390fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610624611863565b60405161063090612688565b60006040518083038185875af1925050503d806000811461066d576040519150601f19603f3d011682016040523d82523d6000602084013e610672565b606091505b505090508061068057600080fd5b50565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146106f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e890612881565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806080016040529081600082015481526020016001820154815260200160028201548152602001600382015481525050905081816000015110156107ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a5906128a1565b60405180910390fd5b81600c60008282546107c09190612b51565b9250508190555081816000018181516107d99190612b51565b9150818152505080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030155905050600061085633611c5b565b11156108655761086461108b565b5b6108bc600754600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154611dd390919063ffffffff16565b4310156109c75760006064600654846108d59190612af7565b6108df9190612ac6565b905080836108ed9190612b51565b9250600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161096e9291906126ef565b602060405180830381600087803b15801561098857600080fd5b505af115801561099c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c09190612340565b50506109d3565b6109d082611de9565b91505b43816040018181525050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401610a3a9291906126ef565b602060405180830381600087803b158015610a5457600080fd5b505af1158015610a68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8c9190612340565b506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415610b5357600b6000815480929190610aeb90612c36565b9190505550600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160009055600382016000905550505b5050565b6060600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610bb4919061269d565b60206040518083038186803b158015610bcc57600080fd5b505afa158015610be0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c04919061239a565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610c5033611b81565b610c58611863565b600b54600d54600c54600a54604051602001610c7b989796959493929190612981565b604051602081830303815290604052905090565b60025481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfa90612881565b60405180910390fd5b80600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610d5f919061269d565b60206040518083038186803b158015610d7757600080fd5b505afa158015610d8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610daf919061239a565b1015610df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de790612821565b60405180910390fd5b60008111610e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2a906128c1565b60405180910390fd5b6000610e3d611863565b11610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e74906127a1565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401610edc939291906126b8565b602060405180830381600087803b158015610ef657600080fd5b505af1158015610f0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2e9190612340565b50610f3881611de9565b90506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820154815250509050600081600001511415610fe05743816040018181525050600b6000815480929190610fda90612c60565b91905055505b8181600001818151610ff29190612a70565b915081815250504381606001818152505081600c60008282546110159190612a70565b9250508190555080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301559050505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146110f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f090612881565b60405180910390fd5b600061110433611c5b565b905060003373ffffffffffffffffffffffffffffffffffffffff168260405161112c90612688565b60006040518083038185875af1925050503d8060008114611169576040519150601f19603f3d011682016040523d82523d6000602084013e61116e565b606091505b50509050806111b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a990612801565b60405180910390fd5b61120782600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154611dd390919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555043600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506112a982600d54611dd390919063ffffffff16565b600d819055505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131890612881565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154116113a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139d90612901565b60405180910390fd5b60006113b133611c5b565b90506113bc81611ef1565b90506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161141b919061269d565b60206040518083038186803b15801561143357600080fd5b505afa158015611447573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146b919061239a565b905061149a30600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f35565b6114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d0906128e1565b60405180910390fd5b600081600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611537919061269d565b60206040518083038186803b15801561154f57600080fd5b505afa158015611563573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611587919061239a565b6115919190612b51565b905080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282546115e59190612a70565b9250508190555080600c60008282546115fe9190612a70565b9250508190555043600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555061166183600d54611dd390919063ffffffff16565b600d81905550823373ffffffffffffffffffffffffffffffffffffffff167fab0e25dc39626189cfb41155020ba89e726b10244275733e9d7c63cf33ffccdb60405160405180910390a3505050565b600a5481565b60075481565b6116c4611c53565b73ffffffffffffffffffffffffffffffffffffffff166116e2611814565b73ffffffffffffffffffffffffffffffffffffffff1614611738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172f90612861565b60405180910390fd5b6117426000612177565b565b600c5481565b611752611c53565b73ffffffffffffffffffffffffffffffffffffffff16611770611814565b73ffffffffffffffffffffffffffffffffffffffff16146117c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bd90612861565b60405180910390fd5b600081101561180a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180190612841565b60405180910390fd5b80600a8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600047905090565b60065481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b6118a5611c53565b73ffffffffffffffffffffffffffffffffffffffff166118c3611814565b73ffffffffffffffffffffffffffffffffffffffff1614611919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191090612861565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611989576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611980906127e1565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6119d5611c53565b73ffffffffffffffffffffffffffffffffffffffff166119f3611814565b73ffffffffffffffffffffffffffffffffffffffff1614611a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4090612861565b60405180910390fd5b8060058190555050565b600d5481565b60096020528060005260406000206000915090508060000154908060010154908060020154908060030154905084565b611a91611c53565b73ffffffffffffffffffffffffffffffffffffffff16611aaf611814565b73ffffffffffffffffffffffffffffffffffffffff1614611b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afc90612861565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c906127c1565b60405180910390fd5b611b7e81612177565b50565b6000611b8c82611c5b565b9050919050565b611b9b611c53565b73ffffffffffffffffffffffffffffffffffffffff16611bb9611814565b73ffffffffffffffffffffffffffffffffffffffff1614611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0690612861565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201544311611caf5760009050611dce565b6000611cb9611863565b90506000811480611ccc57506000600c54145b15611cdb576000915050611dce565b6000611d32600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201544361223b90919063ffffffff16565b90506000611d4b600a548361225190919063ffffffff16565b90506000611db8600c54611daa600960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001548561225190919063ffffffff16565b61226790919063ffffffff16565b905083811115611dc6578390505b809450505050505b919050565b60008183611de19190612a70565b905092915050565b600080600554606484611dfc9190612ac6565b611e069190612af7565b90508083611e149190612b51565b9250600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611e959291906126ef565b602060405180830381600087803b158015611eaf57600080fd5b505af1158015611ec3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee79190612340565b5082915050919050565b600080600554606484611f049190612ac6565b611f0e9190612af7565b90508083611f1c9190612b51565b9250600860009054906101000a90505082915050919050565b600080600267ffffffffffffffff811115611f5357611f52612d36565b5b604051908082528060200260200182016040528015611f815781602001602082028036833780820191505090505b509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611fec57600080fd5b505afa158015612000573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120249190612313565b8160008151811061203857612037612d07565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050838160018151811061208757612086612d07565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008489610168426121129190612a70565b6040518663ffffffff1660e01b81526004016121319493929190612755565b6000604051808303818588803b15801561214a57600080fd5b505af19350505050801561215c575060015b61216a576000915050612170565b60019150505b9392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836122499190612b51565b905092915050565b6000818361225f9190612af7565b905092915050565b600081836122759190612ac6565b905092915050565b60008135905061228c81613028565b92915050565b6000815190506122a181613028565b92915050565b6000815190506122b68161303f565b92915050565b6000813590506122cb81613056565b92915050565b6000815190506122e081613056565b92915050565b6000602082840312156122fc576122fb612d65565b5b600061230a8482850161227d565b91505092915050565b60006020828403121561232957612328612d65565b5b600061233784828501612292565b91505092915050565b60006020828403121561235657612355612d65565b5b6000612364848285016122a7565b91505092915050565b60006020828403121561238357612382612d65565b5b6000612391848285016122bc565b91505092915050565b6000602082840312156123b0576123af612d65565b5b60006123be848285016122d1565b91505092915050565b60006123d383836123df565b60208301905092915050565b6123e881612b85565b82525050565b6123f781612b85565b82525050565b600061240882612a0f565b6124128185612a32565b935061241d836129ff565b8060005b8381101561244e57815161243588826123c7565b975061244083612a25565b925050600181019050612421565b5085935050505092915050565b600061246682612a1a565b6124708185612a43565b9350612480818560208601612c03565b61248981612d6a565b840191505092915050565b61249d81612bcd565b82525050565b6124ac81612bf1565b82525050565b60006124bf601583612a5f565b91506124ca82612d7b565b602082019050919050565b60006124e2602683612a5f565b91506124ed82612da4565b604082019050919050565b6000612505602d83612a5f565b915061251082612df3565b604082019050919050565b6000612528600c83612a5f565b915061253382612e42565b602082019050919050565b600061254b602583612a5f565b915061255682612e6b565b604082019050919050565b600061256e602283612a5f565b915061257982612eba565b604082019050919050565b6000612591602083612a5f565b915061259c82612f09565b602082019050919050565b60006125b4600b83612a5f565b91506125bf82612f32565b602082019050919050565b60006125d7602d83612a5f565b91506125e282612f5b565b604082019050919050565b60006125fa600083612a54565b915061260582612faa565b600082019050919050565b600061261d601683612a5f565b915061262882612fad565b602082019050919050565b6000612640600f83612a5f565b915061264b82612fd6565b602082019050919050565b6000612663601d83612a5f565b915061266e82612fff565b602082019050919050565b61268281612bc3565b82525050565b6000612693826125ed565b9150819050919050565b60006020820190506126b260008301846123ee565b92915050565b60006060820190506126cd60008301866123ee565b6126da60208301856123ee565b6126e76040830184612679565b949350505050565b600060408201905061270460008301856123ee565b6127116020830184612679565b9392505050565b60006020820190508181036000830152612732818461245b565b905092915050565b600060208201905061274f6000830184612494565b92915050565b600060808201905061276a60008301876124a3565b818103602083015261277c81866123fd565b905061278b60408301856123ee565b6127986060830184612679565b95945050505050565b600060208201905081810360008301526127ba816124b2565b9050919050565b600060208201905081810360008301526127da816124d5565b9050919050565b600060208201905081810360008301526127fa816124f8565b9050919050565b6000602082019050818103600083015261281a8161251b565b9050919050565b6000602082019050818103600083015261283a8161253e565b9050919050565b6000602082019050818103600083015261285a81612561565b9050919050565b6000602082019050818103600083015261287a81612584565b9050919050565b6000602082019050818103600083015261289a816125a7565b9050919050565b600060208201905081810360008301526128ba816125ca565b9050919050565b600060208201905081810360008301526128da81612610565b9050919050565b600060208201905081810360008301526128fa81612633565b9050919050565b6000602082019050818103600083015261291a81612656565b9050919050565b60006020820190506129366000830184612679565b92915050565b60006080820190506129516000830187612679565b61295e6020830186612679565b61296b6040830185612679565b6129786060830184612679565b95945050505050565b600061010082019050612997600083018b612679565b6129a4602083018a612679565b6129b16040830189612679565b6129be6060830188612679565b6129cb6080830187612679565b6129d860a0830186612679565b6129e560c0830185612679565b6129f260e0830184612679565b9998505050505050505050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000612a7b82612bc3565b9150612a8683612bc3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612abb57612aba612ca9565b5b828201905092915050565b6000612ad182612bc3565b9150612adc83612bc3565b925082612aec57612aeb612cd8565b5b828204905092915050565b6000612b0282612bc3565b9150612b0d83612bc3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612b4657612b45612ca9565b5b828202905092915050565b6000612b5c82612bc3565b9150612b6783612bc3565b925082821015612b7a57612b79612ca9565b5b828203905092915050565b6000612b9082612ba3565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612bd882612bdf565b9050919050565b6000612bea82612ba3565b9050919050565b6000612bfc82612bc3565b9050919050565b60005b83811015612c21578082015181840152602081019050612c06565b83811115612c30576000848401525b50505050565b6000612c4182612bc3565b91506000821415612c5557612c54612ca9565b5b600182039050919050565b6000612c6b82612bc3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612c9e57612c9d612ca9565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f52657761726420506f6f6c204578686175737465640000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f742075736520746865207a65726f2061646472657373206173207260008201527f6f75746572206164647265737300000000000000000000000000000000000000602082015250565b7f6661696c656420636c61696d0000000000000000000000000000000000000000600082015250565b7f496e73756666696369656e742048554c4b20746f6b656e7320666f722074726160008201527f6e73666572000000000000000000000000000000000000000000000000000000602082015250565b7f48554c4b2070657220426c6f636b2063616e206e6f74206265206e656761746960008201527f7665000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f48756d616e73206f6e6c79000000000000000000000000000000000000000000600082015250565b7f576974686472617720616d6f756e742063616e206e6f7420626520677265617460008201527f6572207468616e207374616b6500000000000000000000000000000000000000602082015250565b50565b7f496e76616c6964207374616b696e6720616d6f756e7400000000000000000000600082015250565b7f7377617070696e67206661696c65640000000000000000000000000000000000600082015250565b7f506c65617365205374616b652048554c4b20746f20636f6d706f756e64000000600082015250565b61303181612b85565b811461303c57600080fd5b50565b61304881612b97565b811461305357600080fd5b50565b61305f81612bc3565b811461306a57600080fd5b5056fea264697066735822122013a8dfbebbdfc5366e58d1856d0afef1a330c8851334b9be954df17fbb7fe7e964736f6c63430008050033
Deployed Bytecode Sourcemap
21997:8202:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29082:157;;;:::i;:::-;;25117:1068;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29813:259;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22086:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24289:797;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27434:405;;;;;;;;;;;;;:::i;:::-;;27925:823;;;;;;;;;;;;;:::i;:::-;;22700:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22330:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7964:103;;;;;;;;;;;;;:::i;:::-;;22765:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24076:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7313:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22383:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23442:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22287:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22192:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22733:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23234:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28914:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22798:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22640:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;8222:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27252:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28788:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29082:157;7544:12;:10;:12::i;:::-;7533:23;;:7;:5;:7::i;:::-;:23;;;7525:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29142:7:::1;29163:9;;;;;;;;;;;29155:23;;29186:18;:16;:18::i;:::-;29155:54;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29141:68;;;29228:2;29220:11;;;::::0;::::1;;29130:109;29082:157::o:0;25117:1068::-;14806:10;14793:23;;:9;:23;;;14785:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;25183:31:::1;25217:8;:20;25226:10;25217:20;;;;;;;;;;;;;;;25183:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;25280:7;25256;:20;;;:31;;25248:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;25365:7;25350:11;;:22;;;;;;;:::i;:::-;;;;;;;;25407:7;25383;:20;;:31;;;;;;;:::i;:::-;;;;;;::::0;::::1;25448:7;25425:8;:20;25434:10;25425:20;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25532:1;25508:21;25518:10;25508:9;:21::i;:::-;:25;25505:74;;;25553:7;:5;:7::i;:::-;25505:74;25621:62;25662:20;;25621:8;:20;25630:10;25621:20;;;;;;;;;;;;;;;:36;;;:40;;:62;;;;:::i;:::-;25606:12;:77;25603:322;;;25699:21;25752:3;25733:16;;25723:7;:26;;;;:::i;:::-;:32;;;;:::i;:::-;25699:56;;25781:13;25770:24;;;;;:::i;:::-;;;25809:4;;;;;;;;;;;:13;;;25823:9;;;;;;;;;;;25834:13;25809:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25684:176;25603:322;;;25889:24;25905:7;25889:15;:24::i;:::-;25879:34;;25603:322;25967:12;25937:7;:27;;:42;;;::::0;::::1;25990:4;;;;;;;;;;;:13;;;26004:10;26016:7;25990:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26095:1;26058:8;:20;26067:10;26058:20;;;;;;;;;;;;;;;:33;;;:38;26055:123;;;26112:10;;:12;;;;;;;;;:::i;:::-;;;;;;26146:8;:20;26155:10;26146:20;;;;;;;;;;;;;;;;26139:27:::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;26055:123;25172:1013;25117:1068:::0;:::o;29813:259::-;29861:12;29904:4;;;;;;;;;;;:14;;;29919:10;29904:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29932:8;:20;29941:10;29932:20;;;;;;;;;;;;;;;:33;;;29967:25;29981:10;29967:13;:25::i;:::-;29994:18;:16;:18::i;:::-;30014:10;;30026:12;;30040:11;;30052;;29893:171;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29886:178;;29813:259;:::o;22086:28::-;;;;:::o;24289:797::-;14806:10;14793:23;;:9;:23;;;14785:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;24393:7:::1;24363:4;;;;;;;;;;;:14;;;24378:10;24363:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;;24355:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;24471:1;24461:7;:11;24453:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;24538:1;24517:18;:16;:18::i;:::-;:22;24509:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;24586:4;;;;;;;;;;;:17;;;24604:10;24624:4;24631:7;24586:53;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24660:24;24676:7;24660:15;:24::i;:::-;24650:34;;24697:31;24731:8;:20;24740:10;24731:20;;;;;;;;;;;;;;;24697:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;24791:1;24767:7;:20;;;:25;24764:125;;;24838:12;24808:7;:27;;:42;;;::::0;::::1;24865:10;;:12;;;;;;;;;:::i;:::-;;;;;;24764:125;24927:7;24903;:20;;:31;;;;;;;:::i;:::-;;;;;;::::0;::::1;24975:12;24949:7;:23;;:38;;;::::0;::::1;25019:7;25004:11;;:22;;;;;;;:::i;:::-;;;;;;;;25070:7;25047:8;:20;25056:10;25047:20;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24344:742;24289:797:::0;:::o;27434:405::-;14806:10;14793:23;;:9;:23;;;14785:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;27478:14:::1;27495:21;27505:10;27495:9;:21::i;:::-;27478:38;;27528:7;27549:10;27541:24;;27573:6;27541:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27527:57;;;27603:2;27595:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;27669:46;27708:6;27669:8;:20;27678:10;27669:20;;;;;;;;;;;;;;;:34;;;:38;;:46;;;;:::i;:::-;27632:8;:20;27641:10;27632:20;;;;;;;;;;;;;;;:34;;:83;;;;27769:12;27726:8;:20;27735:10;27726:20;;;;;;;;;;;;;;;:40;;:55;;;;27807:24;27824:6;27807:12;;:16;;:24;;;;:::i;:::-;27792:12;:39;;;;27465:374;;27434:405::o:0;27925:823::-;14806:10;14793:23;;:9;:23;;;14785:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;28021:1:::1;27985:8;:20;27994:10;27985:20;;;;;;;;;;;;;;;:33;;;:37;27977:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;28077:14;28094:21;28104:10;28094:9;:21::i;:::-;28077:38;;28135:22;28150:6;28135:14;:22::i;:::-;28126:31;;28219:22;28244:4;;;;;;;;;;;:14;;;28267:4;28244:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28219:54;;28292;28317:4;28332;;;;;;;;;;;28339:6;28292:16;:54::i;:::-;28284:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28376:20;28431:14;28399:4;;;;;;;;;;;:14;;;28422:4;28399:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;;;:::i;:::-;28376:69;;28524:12;28487:8;:20;28496:10;28487:20;;;;;;;;;;;;;;;:33;;;:49;;;;;;;:::i;:::-;;;;;;;;28563:12;28548:11;;:27;;;;;;;:::i;:::-;;;;;;;;28629:12;28586:8;:20;28595:10;28586:20;;;;;;;;;;;;;;;:40;;:55;;;;28667:24;28684:6;28667:12;;:16;;:24;;;;:::i;:::-;28652:12;:39;;;;28733:6;28722:10;28709:31;;;;;;;;;;;;27966:782;;;27925:823::o:0;22700:26::-;;;;:::o;22330:44::-;;;;:::o;7964:103::-;7544:12;:10;:12::i;:::-;7533:23;;:7;:5;:7::i;:::-;:23;;;7525:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8029:30:::1;8056:1;8029:18;:30::i;:::-;7964:103::o:0;22765:26::-;;;;:::o;24076:170::-;7544:12;:10;:12::i;:::-;7533:23;;:7;:5;:7::i;:::-;:23;;;7525:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24165:1:::1;24154:7;:12;;24146:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24231:7;24217:11;:21;;;;24076:170:::0;:::o;7313:87::-;7359:7;7386:6;;;;;;;;;;;7379:13;;7313:87;:::o;22383:69::-;;;;;;;;;;;;;:::o;23442:103::-;23490:7;23516:21;23509:28;;23442:103;:::o;22287:36::-;;;;:::o;22192:18::-;;;;;;;;;;;;;:::o;22733:25::-;;;;:::o;23234:200::-;7544:12;:10;:12::i;:::-;7533:23;;:7;:5;:7::i;:::-;:23;;;7525:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23331:1:::1;23306:27;;:13;:27;;;;23298:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;23415:13;23388:7;;:41;;;;;;;;;;;;;;;;;;23234:200:::0;:::o;28914:91::-;7544:12;:10;:12::i;:::-;7533:23;;:7;:5;:7::i;:::-;:23;;;7525:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28990:7:::1;28980;:17;;;;28914:91:::0;:::o;22798:27::-;;;;:::o;22640:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8222:201::-;7544:12;:10;:12::i;:::-;7533:23;;:7;:5;:7::i;:::-;:23;;;7525:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8331:1:::1;8311:22;;:8;:22;;;;8303:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8387:28;8406:8;8387:18;:28::i;:::-;8222:201:::0;:::o;27252:116::-;27315:7;27341:19;27351:8;27341:9;:19::i;:::-;27334:26;;27252:116;;;:::o;28788:94::-;7544:12;:10;:12::i;:::-;7533:23;;:7;:5;:7::i;:::-;:23;;;7525:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28868:6:::1;28856:9;;:18;;;;;;;;;;;;;;;;;;28788:94:::0;:::o;6123:98::-;6176:7;6203:10;6196:17;;6123:98;:::o;26236:894::-;26296:7;26337:8;:18;26346:8;26337:18;;;;;;;;;;;;;;;:38;;;26321:12;:54;26318:805;;26398:1;26391:8;;;;26318:805;26431:17;26451:18;:16;:18::i;:::-;26431:38;;26500:1;26487:9;:14;:34;;;;26520:1;26505:11;;:16;26487:34;26484:614;;;26549:1;26542:8;;;;;26484:614;26596:14;26613:56;26630:8;:18;26639:8;26630:18;;;;;;;;;;;;;;;:38;;;26613:12;:16;;:56;;;;:::i;:::-;26596:73;;26779:19;26801:23;26812:11;;26801:6;:10;;:23;;;;:::i;:::-;26779:45;;26843:20;26866:65;26919:11;;26866:48;26882:8;:18;26891:8;26882:18;;;;;;;;;;;;;;;:31;;;26866:11;:15;;:48;;;;:::i;:::-;:52;;:65;;;;:::i;:::-;26843:88;;26968:9;26953:12;:24;26950:95;;;27016:9;27001:24;;26950:95;27070:12;27063:19;;;;;;26236:894;;;;:::o;17733:98::-;17791:7;17822:1;17818;:5;;;;:::i;:::-;17811:12;;17733:98;;;;:::o;29580:225::-;29638:7;29659:11;29688:7;;29682:3;29673:6;:12;;;;:::i;:::-;:22;;;;:::i;:::-;29659:36;;29729:3;29719:13;;;;;:::i;:::-;;;29743:4;;;;;;;;;;;:13;;;29757:9;;;;;;;;;;;29767:3;29743:28;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29791:6;29784:13;;;29580:225;;;:::o;29307:216::-;29369:7;29388:11;29417:7;;29411:3;29402:6;:12;;;;:::i;:::-;:22;;;;:::i;:::-;29388:36;;29458:3;29448:13;;;;;:::i;:::-;;;29466:9;;;;;;;;;;29509:6;29502:13;;;29307:216;;;:::o;23554:478::-;23643:4;23694:21;23732:1;23718:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23694:40;;23749:7;;;;;;;;;;;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23739:4;23744:1;23739:7;;;;;;;;:::i;:::-;;;;;;;:24;;;;;;;;;;;23778:5;23768:4;23773:1;23768:7;;;;;;;;:::i;:::-;;;;;;;:15;;;;;;;;;;;23853:7;;;;;;;;;;;:58;;;23920:9;23932:1;23935:4;23941:2;23963:3;23945:15;:21;;;;:::i;:::-;23853:114;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23849:179;;24017:5;24010:12;;;;;23849:179;23982:4;23975:11;;;23554:478;;;;;;:::o;8583:191::-;8657:16;8676:6;;;;;;;;;;;8657:25;;8702:8;8693:6;;:17;;;;;;;;;;;;;;;;;;8757:8;8726:40;;8747:8;8726:40;;;;;;;;;;;;8646:128;8583:191;:::o;18114:98::-;18172:7;18203:1;18199;:5;;;;:::i;:::-;18192:12;;18114:98;;;;:::o;18471:::-;18529:7;18560:1;18556;:5;;;;:::i;:::-;18549:12;;18471:98;;;;:::o;18870:::-;18928:7;18959:1;18955;:5;;;;:::i;:::-;18948:12;;18870:98;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:137::-;355:5;386:6;380:13;371:22;;402:30;426:5;402:30;:::i;:::-;361:77;;;;:::o;444:139::-;490:5;528:6;515:20;506:29;;544:33;571:5;544:33;:::i;:::-;496:87;;;;:::o;589:143::-;646:5;677:6;671:13;662:22;;693:33;720:5;693:33;:::i;:::-;652:80;;;;:::o;738:329::-;797:6;846:2;834:9;825:7;821:23;817:32;814:2;;;852:79;;:::i;:::-;814:2;972:1;997:53;1042:7;1033:6;1022:9;1018:22;997:53;:::i;:::-;987:63;;943:117;804:263;;;;:::o;1073:351::-;1143:6;1192:2;1180:9;1171:7;1167:23;1163:32;1160:2;;;1198:79;;:::i;:::-;1160:2;1318:1;1343:64;1399:7;1390:6;1379:9;1375:22;1343:64;:::i;:::-;1333:74;;1289:128;1150:274;;;;:::o;1430:345::-;1497:6;1546:2;1534:9;1525:7;1521:23;1517:32;1514:2;;;1552:79;;:::i;:::-;1514:2;1672:1;1697:61;1750:7;1741:6;1730:9;1726:22;1697:61;:::i;:::-;1687:71;;1643:125;1504:271;;;;:::o;1781:329::-;1840:6;1889:2;1877:9;1868:7;1864:23;1860:32;1857:2;;;1895:79;;:::i;:::-;1857:2;2015:1;2040:53;2085:7;2076:6;2065:9;2061:22;2040:53;:::i;:::-;2030:63;;1986:117;1847:263;;;;:::o;2116:351::-;2186:6;2235:2;2223:9;2214:7;2210:23;2206:32;2203:2;;;2241:79;;:::i;:::-;2203:2;2361:1;2386:64;2442:7;2433:6;2422:9;2418:22;2386:64;:::i;:::-;2376:74;;2332:128;2193:274;;;;:::o;2473:179::-;2542:10;2563:46;2605:3;2597:6;2563:46;:::i;:::-;2641:4;2636:3;2632:14;2618:28;;2553:99;;;;:::o;2658:108::-;2735:24;2753:5;2735:24;:::i;:::-;2730:3;2723:37;2713:53;;:::o;2772:118::-;2859:24;2877:5;2859:24;:::i;:::-;2854:3;2847:37;2837:53;;:::o;2926:732::-;3045:3;3074:54;3122:5;3074:54;:::i;:::-;3144:86;3223:6;3218:3;3144:86;:::i;:::-;3137:93;;3254:56;3304:5;3254:56;:::i;:::-;3333:7;3364:1;3349:284;3374:6;3371:1;3368:13;3349:284;;;3450:6;3444:13;3477:63;3536:3;3521:13;3477:63;:::i;:::-;3470:70;;3563:60;3616:6;3563:60;:::i;:::-;3553:70;;3409:224;3396:1;3393;3389:9;3384:14;;3349:284;;;3353:14;3649:3;3642:10;;3050:608;;;;;;;:::o;3664:360::-;3750:3;3778:38;3810:5;3778:38;:::i;:::-;3832:70;3895:6;3890:3;3832:70;:::i;:::-;3825:77;;3911:52;3956:6;3951:3;3944:4;3937:5;3933:16;3911:52;:::i;:::-;3988:29;4010:6;3988:29;:::i;:::-;3983:3;3979:39;3972:46;;3754:270;;;;;:::o;4030:159::-;4131:51;4176:5;4131:51;:::i;:::-;4126:3;4119:64;4109:80;;:::o;4195:147::-;4290:45;4329:5;4290:45;:::i;:::-;4285:3;4278:58;4268:74;;:::o;4348:366::-;4490:3;4511:67;4575:2;4570:3;4511:67;:::i;:::-;4504:74;;4587:93;4676:3;4587:93;:::i;:::-;4705:2;4700:3;4696:12;4689:19;;4494:220;;;:::o;4720:366::-;4862:3;4883:67;4947:2;4942:3;4883:67;:::i;:::-;4876:74;;4959:93;5048:3;4959:93;:::i;:::-;5077:2;5072:3;5068:12;5061:19;;4866:220;;;:::o;5092:366::-;5234:3;5255:67;5319:2;5314:3;5255:67;:::i;:::-;5248:74;;5331:93;5420:3;5331:93;:::i;:::-;5449:2;5444:3;5440:12;5433:19;;5238:220;;;:::o;5464:366::-;5606:3;5627:67;5691:2;5686:3;5627:67;:::i;:::-;5620:74;;5703:93;5792:3;5703:93;:::i;:::-;5821:2;5816:3;5812:12;5805:19;;5610:220;;;:::o;5836:366::-;5978:3;5999:67;6063:2;6058:3;5999:67;:::i;:::-;5992:74;;6075:93;6164:3;6075:93;:::i;:::-;6193:2;6188:3;6184:12;6177:19;;5982:220;;;:::o;6208:366::-;6350:3;6371:67;6435:2;6430:3;6371:67;:::i;:::-;6364:74;;6447:93;6536:3;6447:93;:::i;:::-;6565:2;6560:3;6556:12;6549:19;;6354:220;;;:::o;6580:366::-;6722:3;6743:67;6807:2;6802:3;6743:67;:::i;:::-;6736:74;;6819:93;6908:3;6819:93;:::i;:::-;6937:2;6932:3;6928:12;6921:19;;6726:220;;;:::o;6952:366::-;7094:3;7115:67;7179:2;7174:3;7115:67;:::i;:::-;7108:74;;7191:93;7280:3;7191:93;:::i;:::-;7309:2;7304:3;7300:12;7293:19;;7098:220;;;:::o;7324:366::-;7466:3;7487:67;7551:2;7546:3;7487:67;:::i;:::-;7480:74;;7563:93;7652:3;7563:93;:::i;:::-;7681:2;7676:3;7672:12;7665:19;;7470:220;;;:::o;7696:398::-;7855:3;7876:83;7957:1;7952:3;7876:83;:::i;:::-;7869:90;;7968:93;8057:3;7968:93;:::i;:::-;8086:1;8081:3;8077:11;8070:18;;7859:235;;;:::o;8100:366::-;8242:3;8263:67;8327:2;8322:3;8263:67;:::i;:::-;8256:74;;8339:93;8428:3;8339:93;:::i;:::-;8457:2;8452:3;8448:12;8441:19;;8246:220;;;:::o;8472:366::-;8614:3;8635:67;8699:2;8694:3;8635:67;:::i;:::-;8628:74;;8711:93;8800:3;8711:93;:::i;:::-;8829:2;8824:3;8820:12;8813:19;;8618:220;;;:::o;8844:366::-;8986:3;9007:67;9071:2;9066:3;9007:67;:::i;:::-;9000:74;;9083:93;9172:3;9083:93;:::i;:::-;9201:2;9196:3;9192:12;9185:19;;8990:220;;;:::o;9216:118::-;9303:24;9321:5;9303:24;:::i;:::-;9298:3;9291:37;9281:53;;:::o;9340:379::-;9524:3;9546:147;9689:3;9546:147;:::i;:::-;9539:154;;9710:3;9703:10;;9528:191;;;:::o;9725:222::-;9818:4;9856:2;9845:9;9841:18;9833:26;;9869:71;9937:1;9926:9;9922:17;9913:6;9869:71;:::i;:::-;9823:124;;;;:::o;9953:442::-;10102:4;10140:2;10129:9;10125:18;10117:26;;10153:71;10221:1;10210:9;10206:17;10197:6;10153:71;:::i;:::-;10234:72;10302:2;10291:9;10287:18;10278:6;10234:72;:::i;:::-;10316;10384:2;10373:9;10369:18;10360:6;10316:72;:::i;:::-;10107:288;;;;;;:::o;10401:332::-;10522:4;10560:2;10549:9;10545:18;10537:26;;10573:71;10641:1;10630:9;10626:17;10617:6;10573:71;:::i;:::-;10654:72;10722:2;10711:9;10707:18;10698:6;10654:72;:::i;:::-;10527:206;;;;;:::o;10739:309::-;10850:4;10888:2;10877:9;10873:18;10865:26;;10937:9;10931:4;10927:20;10923:1;10912:9;10908:17;10901:47;10965:76;11036:4;11027:6;10965:76;:::i;:::-;10957:84;;10855:193;;;;:::o;11054:250::-;11161:4;11199:2;11188:9;11184:18;11176:26;;11212:85;11294:1;11283:9;11279:17;11270:6;11212:85;:::i;:::-;11166:138;;;;:::o;11310:720::-;11545:4;11583:3;11572:9;11568:19;11560:27;;11597:79;11673:1;11662:9;11658:17;11649:6;11597:79;:::i;:::-;11723:9;11717:4;11713:20;11708:2;11697:9;11693:18;11686:48;11751:108;11854:4;11845:6;11751:108;:::i;:::-;11743:116;;11869:72;11937:2;11926:9;11922:18;11913:6;11869:72;:::i;:::-;11951;12019:2;12008:9;12004:18;11995:6;11951:72;:::i;:::-;11550:480;;;;;;;:::o;12036:419::-;12202:4;12240:2;12229:9;12225:18;12217:26;;12289:9;12283:4;12279:20;12275:1;12264:9;12260:17;12253:47;12317:131;12443:4;12317:131;:::i;:::-;12309:139;;12207:248;;;:::o;12461:419::-;12627:4;12665:2;12654:9;12650:18;12642:26;;12714:9;12708:4;12704:20;12700:1;12689:9;12685:17;12678:47;12742:131;12868:4;12742:131;:::i;:::-;12734:139;;12632:248;;;:::o;12886:419::-;13052:4;13090:2;13079:9;13075:18;13067:26;;13139:9;13133:4;13129:20;13125:1;13114:9;13110:17;13103:47;13167:131;13293:4;13167:131;:::i;:::-;13159:139;;13057:248;;;:::o;13311:419::-;13477:4;13515:2;13504:9;13500:18;13492:26;;13564:9;13558:4;13554:20;13550:1;13539:9;13535:17;13528:47;13592:131;13718:4;13592:131;:::i;:::-;13584:139;;13482:248;;;:::o;13736:419::-;13902:4;13940:2;13929:9;13925:18;13917:26;;13989:9;13983:4;13979:20;13975:1;13964:9;13960:17;13953:47;14017:131;14143:4;14017:131;:::i;:::-;14009:139;;13907:248;;;:::o;14161:419::-;14327:4;14365:2;14354:9;14350:18;14342:26;;14414:9;14408:4;14404:20;14400:1;14389:9;14385:17;14378:47;14442:131;14568:4;14442:131;:::i;:::-;14434:139;;14332:248;;;:::o;14586:419::-;14752:4;14790:2;14779:9;14775:18;14767:26;;14839:9;14833:4;14829:20;14825:1;14814:9;14810:17;14803:47;14867:131;14993:4;14867:131;:::i;:::-;14859:139;;14757:248;;;:::o;15011:419::-;15177:4;15215:2;15204:9;15200:18;15192:26;;15264:9;15258:4;15254:20;15250:1;15239:9;15235:17;15228:47;15292:131;15418:4;15292:131;:::i;:::-;15284:139;;15182:248;;;:::o;15436:419::-;15602:4;15640:2;15629:9;15625:18;15617:26;;15689:9;15683:4;15679:20;15675:1;15664:9;15660:17;15653:47;15717:131;15843:4;15717:131;:::i;:::-;15709:139;;15607:248;;;:::o;15861:419::-;16027:4;16065:2;16054:9;16050:18;16042:26;;16114:9;16108:4;16104:20;16100:1;16089:9;16085:17;16078:47;16142:131;16268:4;16142:131;:::i;:::-;16134:139;;16032:248;;;:::o;16286:419::-;16452:4;16490:2;16479:9;16475:18;16467:26;;16539:9;16533:4;16529:20;16525:1;16514:9;16510:17;16503:47;16567:131;16693:4;16567:131;:::i;:::-;16559:139;;16457:248;;;:::o;16711:419::-;16877:4;16915:2;16904:9;16900:18;16892:26;;16964:9;16958:4;16954:20;16950:1;16939:9;16935:17;16928:47;16992:131;17118:4;16992:131;:::i;:::-;16984:139;;16882:248;;;:::o;17136:222::-;17229:4;17267:2;17256:9;17252:18;17244:26;;17280:71;17348:1;17337:9;17333:17;17324:6;17280:71;:::i;:::-;17234:124;;;;:::o;17364:553::-;17541:4;17579:3;17568:9;17564:19;17556:27;;17593:71;17661:1;17650:9;17646:17;17637:6;17593:71;:::i;:::-;17674:72;17742:2;17731:9;17727:18;17718:6;17674:72;:::i;:::-;17756;17824:2;17813:9;17809:18;17800:6;17756:72;:::i;:::-;17838;17906:2;17895:9;17891:18;17882:6;17838:72;:::i;:::-;17546:371;;;;;;;:::o;17923:997::-;18212:4;18250:3;18239:9;18235:19;18227:27;;18264:71;18332:1;18321:9;18317:17;18308:6;18264:71;:::i;:::-;18345:72;18413:2;18402:9;18398:18;18389:6;18345:72;:::i;:::-;18427;18495:2;18484:9;18480:18;18471:6;18427:72;:::i;:::-;18509;18577:2;18566:9;18562:18;18553:6;18509:72;:::i;:::-;18591:73;18659:3;18648:9;18644:19;18635:6;18591:73;:::i;:::-;18674;18742:3;18731:9;18727:19;18718:6;18674:73;:::i;:::-;18757;18825:3;18814:9;18810:19;18801:6;18757:73;:::i;:::-;18840;18908:3;18897:9;18893:19;18884:6;18840:73;:::i;:::-;18217:703;;;;;;;;;;;:::o;19007:132::-;19074:4;19097:3;19089:11;;19127:4;19122:3;19118:14;19110:22;;19079:60;;;:::o;19145:114::-;19212:6;19246:5;19240:12;19230:22;;19219:40;;;:::o;19265:98::-;19316:6;19350:5;19344:12;19334:22;;19323:40;;;:::o;19369:113::-;19439:4;19471;19466:3;19462:14;19454:22;;19444:38;;;:::o;19488:184::-;19587:11;19621:6;19616:3;19609:19;19661:4;19656:3;19652:14;19637:29;;19599:73;;;;:::o;19678:168::-;19761:11;19795:6;19790:3;19783:19;19835:4;19830:3;19826:14;19811:29;;19773:73;;;;:::o;19852:147::-;19953:11;19990:3;19975:18;;19965:34;;;;:::o;20005:169::-;20089:11;20123:6;20118:3;20111:19;20163:4;20158:3;20154:14;20139:29;;20101:73;;;;:::o;20180:305::-;20220:3;20239:20;20257:1;20239:20;:::i;:::-;20234:25;;20273:20;20291:1;20273:20;:::i;:::-;20268:25;;20427:1;20359:66;20355:74;20352:1;20349:81;20346:2;;;20433:18;;:::i;:::-;20346:2;20477:1;20474;20470:9;20463:16;;20224:261;;;;:::o;20491:185::-;20531:1;20548:20;20566:1;20548:20;:::i;:::-;20543:25;;20582:20;20600:1;20582:20;:::i;:::-;20577:25;;20621:1;20611:2;;20626:18;;:::i;:::-;20611:2;20668:1;20665;20661:9;20656:14;;20533:143;;;;:::o;20682:348::-;20722:7;20745:20;20763:1;20745:20;:::i;:::-;20740:25;;20779:20;20797:1;20779:20;:::i;:::-;20774:25;;20967:1;20899:66;20895:74;20892:1;20889:81;20884:1;20877:9;20870:17;20866:105;20863:2;;;20974:18;;:::i;:::-;20863:2;21022:1;21019;21015:9;21004:20;;20730:300;;;;:::o;21036:191::-;21076:4;21096:20;21114:1;21096:20;:::i;:::-;21091:25;;21130:20;21148:1;21130:20;:::i;:::-;21125:25;;21169:1;21166;21163:8;21160:2;;;21174:18;;:::i;:::-;21160:2;21219:1;21216;21212:9;21204:17;;21081:146;;;;:::o;21233:96::-;21270:7;21299:24;21317:5;21299:24;:::i;:::-;21288:35;;21278:51;;;:::o;21335:90::-;21369:7;21412:5;21405:13;21398:21;21387:32;;21377:48;;;:::o;21431:126::-;21468:7;21508:42;21501:5;21497:54;21486:65;;21476:81;;;:::o;21563:77::-;21600:7;21629:5;21618:16;;21608:32;;;:::o;21646:154::-;21710:9;21743:51;21788:5;21743:51;:::i;:::-;21730:64;;21720:80;;;:::o;21806:127::-;21870:9;21903:24;21921:5;21903:24;:::i;:::-;21890:37;;21880:53;;;:::o;21939:121::-;21997:9;22030:24;22048:5;22030:24;:::i;:::-;22017:37;;22007:53;;;:::o;22066:307::-;22134:1;22144:113;22158:6;22155:1;22152:13;22144:113;;;22243:1;22238:3;22234:11;22228:18;22224:1;22219:3;22215:11;22208:39;22180:2;22177:1;22173:10;22168:15;;22144:113;;;22275:6;22272:1;22269:13;22266:2;;;22355:1;22346:6;22341:3;22337:16;22330:27;22266:2;22115:258;;;;:::o;22379:171::-;22418:3;22441:24;22459:5;22441:24;:::i;:::-;22432:33;;22487:4;22480:5;22477:15;22474:2;;;22495:18;;:::i;:::-;22474:2;22542:1;22535:5;22531:13;22524:20;;22422:128;;;:::o;22556:233::-;22595:3;22618:24;22636:5;22618:24;:::i;:::-;22609:33;;22664:66;22657:5;22654:77;22651:2;;;22734:18;;:::i;:::-;22651:2;22781:1;22774:5;22770:13;22763:20;;22599:190;;;:::o;22795:180::-;22843:77;22840:1;22833:88;22940:4;22937:1;22930:15;22964:4;22961:1;22954:15;22981:180;23029:77;23026:1;23019:88;23126:4;23123:1;23116:15;23150:4;23147:1;23140:15;23167:180;23215:77;23212:1;23205:88;23312:4;23309:1;23302:15;23336:4;23333:1;23326:15;23353:180;23401:77;23398:1;23391:88;23498:4;23495:1;23488:15;23522:4;23519:1;23512:15;23662:117;23771:1;23768;23761:12;23785:102;23826:6;23877:2;23873:7;23868:2;23861:5;23857:14;23853:28;23843:38;;23833:54;;;:::o;23893:171::-;24033:23;24029:1;24021:6;24017:14;24010:47;23999:65;:::o;24070:225::-;24210:34;24206:1;24198:6;24194:14;24187:58;24279:8;24274:2;24266:6;24262:15;24255:33;24176:119;:::o;24301:232::-;24441:34;24437:1;24429:6;24425:14;24418:58;24510:15;24505:2;24497:6;24493:15;24486:40;24407:126;:::o;24539:162::-;24679:14;24675:1;24667:6;24663:14;24656:38;24645:56;:::o;24707:224::-;24847:34;24843:1;24835:6;24831:14;24824:58;24916:7;24911:2;24903:6;24899:15;24892:32;24813:118;:::o;24937:221::-;25077:34;25073:1;25065:6;25061:14;25054:58;25146:4;25141:2;25133:6;25129:15;25122:29;25043:115;:::o;25164:182::-;25304:34;25300:1;25292:6;25288:14;25281:58;25270:76;:::o;25352:161::-;25492:13;25488:1;25480:6;25476:14;25469:37;25458:55;:::o;25519:232::-;25659:34;25655:1;25647:6;25643:14;25636:58;25728:15;25723:2;25715:6;25711:15;25704:40;25625:126;:::o;25757:114::-;25863:8;:::o;25877:172::-;26017:24;26013:1;26005:6;26001:14;25994:48;25983:66;:::o;26055:165::-;26195:17;26191:1;26183:6;26179:14;26172:41;26161:59;:::o;26226:179::-;26366:31;26362:1;26354:6;26350:14;26343:55;26332:73;:::o;26411:122::-;26484:24;26502:5;26484:24;:::i;:::-;26477:5;26474:35;26464:2;;26523:1;26520;26513:12;26464:2;26454:79;:::o;26539:116::-;26609:21;26624:5;26609:21;:::i;:::-;26602:5;26599:32;26589:2;;26645:1;26642;26635:12;26589:2;26579:76;:::o;26661:122::-;26734:24;26752:5;26734:24;:::i;:::-;26727:5;26724:35;26714:2;;26773:1;26770;26763:12;26714:2;26704:79;:::o
Swarm Source
ipfs://13a8dfbebbdfc5366e58d1856d0afef1a330c8851334b9be954df17fbb7fe7e9
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.