More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 25,989 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 59077102 | 32 days ago | IN | 0 AVAX | 0.00004876 | ||||
Transfer | 59077018 | 32 days ago | IN | 0 AVAX | 0.00015201 | ||||
Transfer | 59076905 | 32 days ago | IN | 0 AVAX | 0.00015204 | ||||
Cashout All | 59076905 | 32 days ago | IN | 0 AVAX | 0.00083469 | ||||
Transfer | 59076705 | 32 days ago | IN | 0 AVAX | 0.00015204 | ||||
Cashout All | 59076705 | 32 days ago | IN | 0 AVAX | 0.00078339 | ||||
Transfer | 59076621 | 32 days ago | IN | 0 AVAX | 0.00015201 | ||||
Cashout All | 59076621 | 32 days ago | IN | 0 AVAX | 0.00078339 | ||||
Transfer | 59076543 | 32 days ago | IN | 0 AVAX | 0.00015201 | ||||
Transfer | 59076460 | 32 days ago | IN | 0 AVAX | 0.00010136 | ||||
Transfer | 59076458 | 32 days ago | IN | 0 AVAX | 0.00033094 | ||||
Transfer | 59076368 | 32 days ago | IN | 0 AVAX | 0.00015201 | ||||
Cashout Reward | 59076368 | 32 days ago | IN | 0 AVAX | 0.00073287 | ||||
Transfer | 59076277 | 32 days ago | IN | 0 AVAX | 0.00015204 | ||||
Transfer | 59076188 | 32 days ago | IN | 0 AVAX | 0.00015204 | ||||
Transfer | 59076106 | 32 days ago | IN | 0 AVAX | 0.00015204 | ||||
Cashout Reward | 59076106 | 32 days ago | IN | 0 AVAX | 0.0007329 | ||||
Transfer | 59076003 | 32 days ago | IN | 0 AVAX | 0.00015204 | ||||
Transfer | 59075882 | 32 days ago | IN | 0 AVAX | 0.00015204 | ||||
Transfer | 59075771 | 32 days ago | IN | 0 AVAX | 0.00015204 | ||||
Transfer | 59075680 | 32 days ago | IN | 0 AVAX | 0.00015204 | ||||
Cashout All | 59075618 | 32 days ago | IN | 0 AVAX | 0.0008867 | ||||
Transfer | 59075537 | 32 days ago | IN | 0 AVAX | 0.00020334 | ||||
Approve | 59008944 | 33 days ago | IN | 0 AVAX | 0.00010952 | ||||
Transfer | 59007818 | 33 days ago | IN | 0 AVAX | 0.00057091 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
59076905 | 32 days ago | 0.00610191 AVAX | ||||
59076905 | 32 days ago | 0.00610191 AVAX | ||||
59076705 | 32 days ago | 0.00608562 AVAX | ||||
59076705 | 32 days ago | 0.00608562 AVAX | ||||
59076621 | 32 days ago | 0.00608832 AVAX | ||||
59076621 | 32 days ago | 0.00608832 AVAX | ||||
59076368 | 32 days ago | 0.00607675 AVAX | ||||
59076368 | 32 days ago | 0.00607675 AVAX | ||||
59076106 | 32 days ago | 0.0060849 AVAX | ||||
59076106 | 32 days ago | 0.0060849 AVAX | ||||
59075618 | 32 days ago | 0.01228325 AVAX | ||||
59075618 | 32 days ago | 0.01228325 AVAX | ||||
12472343 | 1127 days ago | 0.00007233 AVAX | ||||
12472343 | 1127 days ago | 0.00007233 AVAX | ||||
11890001 | 1141 days ago | 0.00004265 AVAX | ||||
11890001 | 1141 days ago | 0.00004265 AVAX | ||||
11589112 | 1148 days ago | 0.00002973 AVAX | ||||
11589112 | 1148 days ago | 0.00002973 AVAX | ||||
11382088 | 1152 days ago | 0.00008518 AVAX | ||||
11382088 | 1152 days ago | 0.00008518 AVAX | ||||
10784370 | 1166 days ago | 0.00002391 AVAX | ||||
10784370 | 1166 days ago | 0.00002391 AVAX | ||||
10612055 | 1170 days ago | 0.00003799 AVAX | ||||
10612055 | 1170 days ago | 0.00003799 AVAX | ||||
10357277 | 1176 days ago | 0.00186497 AVAX |
Loading...
Loading
Contract Name:
Comet
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at snowscan.xyz on 2021-12-17 */ /* Discord: https://discord.gg/cometnodes Twitter: https://twitter.com/cometnode Telegram: https://t.me/cometnodes Website: https://cometnodes.com */ pragma solidity ^0.8.0; library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is TKNaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouTKNd) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouTKNd) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouTKNd) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouTKNd) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } interface IJoeRouter01 { function factory() external pure returns (address); function WAVAX() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityAVAX( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountAVAXMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountAVAX, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityAVAX( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountAVAXMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountAVAX); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityAVAXWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountAVAXMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountAVAX); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactAVAXForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactAVAX( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForAVAX( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapAVAXForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IJoeRouter02 is IJoeRouter01 { function removeLiquidityAVAXSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountAVAXMin, address to, uint256 deadline ) external returns (uint256 amountAVAX); function removeLiquidityAVAXWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountAVAXMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountAVAX); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactAVAXForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForAVAXSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IJoeFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint256); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function migrator() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function setMigrator(address) external; } contract Ownable { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _owner = msg.sender; emit OwnershipTransferred(address(0), msg.sender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == msg.sender, "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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @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); } contract ERC20 is IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(msg.sender, recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(msg.sender, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, msg.sender, _allowances[sender][msg.sender].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( msg.sender, spender, _allowances[msg.sender][spender].add(addedValue) ); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve( msg.sender, spender, _allowances[msg.sender][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub( amount, "ERC20: transfer amount exceeds balance" ); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub( amount, "ERC20: burn amount exceeds balance" ); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } /** * @title PaymentSplitter * @dev This contract allows to split Ether payments among a group of accounts. The sender does not need to be aware * that the Ether will be split in this way, since it is handled transparently by the contract. * * The split can be in equal parts or in any other arbitrary proportion. The way this is specified is by assigning each * account to a number of shares. Of all the Ether that this contract receives, each account will then be able to claim * an amount proportional to the percentage of total shares they were assigned. * * `PaymentSplitter` follows a _pull payment_ model. This means that payments are not automatically forwarded to the * accounts but kept in this contract, and the actual transfer is triggered as a separate step by calling the {release} * function. * * NOTE: This contract assumes that ERC20 tokens will behave similarly to native tokens (Ether). Rebasing tokens, and * tokens that apply fees during transfers, are likely to not be supported as expected. If in doubt, we encourage you * to run tests before sending real value to this contract. */ contract PaymentSplitter { event PayeeAdded(address account, uint256 shares); event PaymentReleased(address to, uint256 amount); event ERC20PaymentReleased( IERC20 indexed token, address to, uint256 amount ); event PaymentReceived(address from, uint256 amount); uint256 private _totalShares; uint256 private _totalReleased; mapping(address => uint256) private _shares; mapping(address => uint256) private _released; address[] private _payees; mapping(IERC20 => uint256) private _erc20TotalReleased; mapping(IERC20 => mapping(address => uint256)) private _erc20Released; /** * @dev Creates an instance of `PaymentSplitter` where each account in `payees` is assigned the number of shares at * the matching position in the `shares` array. * * All addresses in `payees` must be non-zero. Both arrays must have the same non-zero length, and there must be no * duplicates in `payees`. */ constructor(address[] memory payees, uint256[] memory shares_) payable { require( payees.length == shares_.length, "PaymentSplitter: payees and shares length mismatch" ); require(payees.length > 0, "PaymentSplitter: no payees"); for (uint256 i = 0; i < payees.length; i++) { _addPayee(payees[i], shares_[i]); } } /** * @dev The Ether received will be logged with {PaymentReceived} events. Note that these events are not fully * reliable: it's possible for a contract to receive Ether without triggering this function. This only affects the * reliability of the events, and not the actual splitting of Ether. * * To learn more about this see the Solidity documentation for * https://solidity.readthedocs.io/en/latest/contracts.html#fallback-function[fallback * functions]. */ receive() external payable virtual { emit PaymentReceived(msg.sender, msg.value); } /** * @dev Getter for the total shares held by payees. */ function totalShares() public view returns (uint256) { return _totalShares; } /** * @dev Getter for the total amount of Ether already released. */ function totalReleased() public view returns (uint256) { return _totalReleased; } /** * @dev Getter for the total amount of `token` already released. `token` should be the address of an IERC20 * contract. */ function totalReleased(IERC20 token) public view returns (uint256) { return _erc20TotalReleased[token]; } /** * @dev Getter for the amount of shares held by an account. */ function shares(address account) public view returns (uint256) { return _shares[account]; } /** * @dev Getter for the amount of Ether already released to a payee. */ function released(address account) public view returns (uint256) { return _released[account]; } /** * @dev Getter for the amount of `token` tokens already released to a payee. `token` should be the address of an * IERC20 contract. */ function released(IERC20 token, address account) public view returns (uint256) { return _erc20Released[token][account]; } /** * @dev Getter for the address of the payee number `index`. */ function payee(uint256 index) public view returns (address) { return _payees[index]; } /** * @dev Triggers a transfer to `account` of the amount of Ether they are owed, according to their percentage of the * total shares and their previous withdrawals. */ function release(address payable account) public virtual { require(_shares[account] > 0, "PaymentSplitter: account has no shares"); uint256 totalReceived = address(this).balance + totalReleased(); uint256 payment = _pendingPayment( account, totalReceived, released(account) ); require(payment != 0, "PaymentSplitter: account is not due payment"); _released[account] += payment; _totalReleased += payment; Address.sendValue(account, payment); emit PaymentReleased(account, payment); } /** * @dev Triggers a transfer to `account` of the amount of `token` tokens they are owed, according to their * percentage of the total shares and their previous withdrawals. `token` must be the address of an IERC20 * contract. */ function release(IERC20 token, address account) public virtual { require(_shares[account] > 0, "PaymentSplitter: account has no shares"); uint256 totalReceived = token.balanceOf(address(this)) + totalReleased(token); uint256 payment = _pendingPayment( account, totalReceived, released(token, account) ); require(payment != 0, "PaymentSplitter: account is not due payment"); _erc20Released[token][account] += payment; _erc20TotalReleased[token] += payment; SafeERC20.safeTransfer(token, account, payment); emit ERC20PaymentReleased(token, account, payment); } /** * @dev internal logic for computing the pending payment of an `account` given the token historical balances and * already released amounts. */ function _pendingPayment( address account, uint256 totalReceived, uint256 alreadyReleased ) private view returns (uint256) { return (totalReceived * _shares[account]) / _totalShares - alreadyReleased; } /** * @dev Add a new payee to the contract. * @param account The address of the payee to add. * @param shares_ The number of shares owned by the payee. */ function _addPayee(address account, uint256 shares_) private { require( account != address(0), "PaymentSplitter: account is the zero address" ); require(shares_ > 0, "PaymentSplitter: shares are 0"); require( _shares[account] == 0, "PaymentSplitter: account already has shares" ); _payees.push(account); _shares[account] = shares_; _totalShares = _totalShares + shares_; emit PayeeAdded(account, shares_); } } contract NODERewardManagement { using SafeMath for uint256; struct NodeEntity { uint256 creationTime; uint256 lastClaimTime; uint256 dividendsPaid; uint256 expireTime; } mapping(address => NodeEntity[]) private _nodesOfUser; mapping(address => bool) public _managers; uint256 public nodePrice; uint256 public rewardsPerMinute; bool public distribution = false; uint256 public totalNodesCreated = 0; uint256 public totalRewardStaked = 0; uint256 public claimInterval = 60; uint256 public stakeNodeStartAmount = 0 * 10 ** 18; uint256 public nodeStartAmount = 1 * 10 ** 18; event NodeCreated(address indexed from, string name, uint256 index, uint256 totalNodesCreated); constructor( uint256 _nodePrice, uint256 _rewardsPerMinute ) { _managers[msg.sender] = true; nodePrice = _nodePrice; rewardsPerMinute = _rewardsPerMinute; } modifier onlyManager() { require(_managers[msg.sender] == true, "Only managers can call this function"); _; } function addManager(address manager) external onlyManager { _managers[manager] = true; } function createNode(address account, string memory name, uint256 expireTime) external onlyManager { uint256 realExpireTime = 0; if (expireTime > 0) { realExpireTime = block.timestamp + expireTime; } _nodesOfUser[account].push( NodeEntity({ creationTime: block.timestamp, lastClaimTime: block.timestamp, dividendsPaid: 0, expireTime: realExpireTime }) ); totalNodesCreated++; emit NodeCreated(account, name, _nodesOfUser[account].length, totalNodesCreated); } function dividendsOwing(NodeEntity memory node) private view returns (uint256 availableRewards) { uint256 currentTime = block.timestamp; if (currentTime > node.expireTime && node.expireTime > 0) { currentTime = node.expireTime; } uint256 minutesPassed = (currentTime).sub(node.creationTime).div(claimInterval); return minutesPassed.mul(rewardsPerMinute).add(node.expireTime > 0 ? stakeNodeStartAmount : nodeStartAmount).sub(node.dividendsPaid); } function _checkExpired(NodeEntity memory node) private view returns (bool isExpired) { return (node.expireTime > 0 && node.expireTime <= block.timestamp); } function _getNodeByIndex( NodeEntity[] storage nodes, uint256 index ) private view returns (NodeEntity storage) { uint256 numberOfNodes = nodes.length; require( numberOfNodes > 0, "CASHOUT ERROR: You don't have nodes to cash-out" ); require(index < numberOfNodes, "CASHOUT ERROR: Invalid node"); return nodes[index]; } function _cashoutNodeReward(address account, uint256 index) external onlyManager returns (uint256) { NodeEntity[] storage nodes = _nodesOfUser[account]; uint256 numberOfNodes = nodes.length; require( numberOfNodes > 0, "CASHOUT ERROR: You don't have nodes to cash-out" ); NodeEntity storage node = _getNodeByIndex(nodes, index); uint256 rewardNode = dividendsOwing(node); node.dividendsPaid += rewardNode; return rewardNode; } function _cashoutAllNodesReward(address account) external onlyManager returns (uint256) { NodeEntity[] storage nodes = _nodesOfUser[account]; uint256 nodesCount = nodes.length; require(nodesCount > 0, "NODE: NO NODE OWNER"); NodeEntity storage _node; uint256 rewardsTotal = 0; for (uint256 i = 0; i < nodesCount; i++) { _node = nodes[i]; uint256 rewardNode = dividendsOwing(_node); rewardsTotal += rewardNode; _node.dividendsPaid += rewardNode; } return rewardsTotal; } function _getRewardAmountOf(address account) external view returns (uint256) { require(isNodeOwner(account), "GET REWARD OF: NO NODE OWNER"); uint256 nodesCount; uint256 rewardCount = 0; NodeEntity[] storage nodes = _nodesOfUser[account]; nodesCount = nodes.length; NodeEntity storage _node; for (uint256 i = 0; i < nodesCount; i++) { _node = nodes[i]; rewardCount += dividendsOwing(_node); } return rewardCount; } function _getRewardAmountOf(address account, uint256 index) external view returns (uint256) { require(isNodeOwner(account), "GET REWARD OF: NO NODE OWNER"); NodeEntity[] storage nodes = _nodesOfUser[account]; uint256 numberOfNodes = nodes.length; require( numberOfNodes > 0, "CASHOUT ERROR: You don't have nodes to cash-out" ); NodeEntity storage node = _getNodeByIndex(nodes, index); uint256 rewardNode = dividendsOwing(node); return rewardNode; } function _getNodeRewardAmountOf(address account, uint256 index) external view returns (uint256) { NodeEntity memory node = _getNodeByIndex(_nodesOfUser[account], index); return dividendsOwing(node); } function _getNodesExpireTime(address account) external view returns (string memory) { require(isNodeOwner(account), "GET CREATIME: NO NODE OWNER"); NodeEntity[] memory nodes = _nodesOfUser[account]; uint256 nodesCount = nodes.length; NodeEntity memory _node; string memory _expireTimes = uint2str(nodes[0].expireTime); string memory separator = "#"; for (uint256 i = 1; i < nodesCount; i++) { _node = nodes[i]; _expireTimes = string( abi.encodePacked( _expireTimes, separator, uint2str(_node.expireTime) ) ); } return _expireTimes; } function _getNodesCreationTime(address account) external view returns (string memory) { require(isNodeOwner(account), "GET CREATIME: NO NODE OWNER"); NodeEntity[] memory nodes = _nodesOfUser[account]; uint256 nodesCount = nodes.length; NodeEntity memory _node; string memory _creationTimes = uint2str(nodes[0].creationTime); string memory separator = "#"; for (uint256 i = 1; i < nodesCount; i++) { _node = nodes[i]; _creationTimes = string( abi.encodePacked( _creationTimes, separator, uint2str(_node.creationTime) ) ); } return _creationTimes; } function _getNodesRewardAvailable(address account) external view returns (string memory) { require(isNodeOwner(account), "GET REWARD: NO NODE OWNER"); NodeEntity[] memory nodes = _nodesOfUser[account]; uint256 nodesCount = nodes.length; NodeEntity memory _node; string memory _rewardsAvailable = uint2str(dividendsOwing(nodes[0])); string memory separator = "#"; for (uint256 i = 1; i < nodesCount; i++) { _node = nodes[i]; _rewardsAvailable = string( abi.encodePacked( _rewardsAvailable, separator, uint2str(dividendsOwing(_node)) ) ); } return _rewardsAvailable; } function _getNodesLastClaimTime(address account) external view returns (string memory) { require(isNodeOwner(account), "LAST CLAIME TIME: NO NODE OWNER"); NodeEntity[] memory nodes = _nodesOfUser[account]; uint256 nodesCount = nodes.length; NodeEntity memory _node; string memory _lastClaimTimes = uint2str(nodes[0].lastClaimTime); string memory separator = "#"; for (uint256 i = 1; i < nodesCount; i++) { _node = nodes[i]; _lastClaimTimes = string( abi.encodePacked( _lastClaimTimes, separator, uint2str(_node.lastClaimTime) ) ); } return _lastClaimTimes; } function getNodes(address user) external view returns (NodeEntity[] memory nodes) { return _nodesOfUser[user]; } function uint2str(uint256 _i) internal pure returns (string memory _uintAsString) { if (_i == 0) { return "0"; } uint256 j = _i; uint256 len; while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint256 k = len; while (_i != 0) { k = k - 1; uint8 temp = (48 + uint8(_i - (_i / 10) * 10)); bytes1 b1 = bytes1(temp); bstr[k] = b1; _i /= 10; } return string(bstr); } function _changeStakeNodeStartAmount(uint256 newStartAmount) external onlyManager { stakeNodeStartAmount = newStartAmount; } function _changeNodeStartAmount(uint256 newStartAmount) external onlyManager { nodeStartAmount = newStartAmount; } function _changeNodePrice(uint256 newNodePrice) external onlyManager { nodePrice = newNodePrice; } function _changeRewardsPerMinute(uint256 newPrice) external onlyManager { rewardsPerMinute = newPrice; } function _changeClaimInterval(uint256 newInterval) external onlyManager { claimInterval = newInterval; } function _getNodeNumberOf(address account) public view returns (uint256) { return _nodesOfUser[account].length; } function isNodeOwner(address account) private view returns (bool) { return _nodesOfUser[account].length > 0; } function _isNodeOwner(address account) external view returns (bool) { return isNodeOwner(account); } } contract Comet is ERC20, Ownable, PaymentSplitter { using SafeMath for uint256; NODERewardManagement public nodeRewardManagement; IJoeRouter02 public uniswapV2Router; address public uniswapV2Pair; address public futurUsePool; address public distributionPool; address public stakingPool = 0x1A4C49cf5d526edaf8955c176ED3cA5531D1270E; address public deadWallet = 0x000000000000000000000000000000000000dEaD; uint256 public rewardsFee; uint256 public liquidityPoolFee; uint256 public futurFee; uint256 public totalFees; uint256 public cashoutFee; uint256 private rwSwap; bool private swapping = false; bool private swapLiquify = true; uint256 public swapTokensAmount; uint256[] private nodeFees; mapping(address => bool) public _isBlacklisted; mapping(address => bool) public _isExcluded; mapping(address => bool) public automatedMarketMakerPairs; bool private protectSale = false; uint256 public maxTxAmount = 25 * 10 ** 18; struct StakePosition { uint256 creationTime; uint256 expireTime; uint256 balance; uint256 id; } mapping(address => StakePosition[]) public stakePositions; uint256 stakePositionIndex = 0; event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event LiquidityWalletUpdated( address indexed newLiquidityWallet, address indexed oldLiquidityWallet ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); constructor( address[] memory payees, uint256[] memory shares, address[] memory addresses, uint256[] memory balances, uint256[] memory fees, uint256 swapAmount, address uniV2Router, address nodeManagement ) ERC20("Comet", "COMET") PaymentSplitter(payees, shares) { nodeRewardManagement = NODERewardManagement(nodeManagement); futurUsePool = addresses[4]; distributionPool = addresses[5]; require(futurUsePool != address(0) && distributionPool != address(0), "FUTUR & REWARD ADDRESS CANNOT BE ZERO"); require(uniV2Router != address(0), "ROUTER CANNOT BE ZERO"); require( fees[0] != 0 && fees[1] != 0 && fees[2] != 0 && fees[3] != 0, "CONSTR: Fees equal 0" ); futurFee = fees[0]; rewardsFee = fees[1]; liquidityPoolFee = fees[2]; cashoutFee = fees[3]; rwSwap = fees[4]; nodeFees = [8000000000000000000, 7330000000000000000, 6670000000000000000, 6000000000000000000, 5330000000000000000, 4670000000000000000, 4000000000000000000, 3880000000000000000, 3770000000000000000, 3650000000000000000, 3540000000000000000, 3420000000000000000, 3310000000000000000, 3190000000000000000, 3080000000000000000, 2960000000000000000, 2850000000000000000, 2730000000000000000, 2620000000000000000, 2500000000000000000, 2299999999999999700, 2100000000000000000, 1900000000000000000, 1700000000000000000, 1500000000000000000, 1300000000000000000, 1100000000000000100, 900000000000000000, 700000000000000000, 500000000000000000]; totalFees = rewardsFee.add(liquidityPoolFee).add(futurFee); require(addresses.length > 0 && balances.length > 0, "CONSTR: addresses array length must be greater than zero"); require(addresses.length == balances.length, "CONSTR: addresses arrays length mismatch"); for (uint256 i = 0; i < addresses.length; i++) { _isExcluded[addresses[i]] = true; _mint(addresses[i], balances[i] * (10**18)); } require(totalSupply() == 20456743e18, "CONSTR: totalSupply must equal 20 million"); require(swapAmount > 0, "CONSTR: Swap amount incorrect"); swapTokensAmount = swapAmount * (10**18); protectSale = true; } function setNodeManagement(address nodeManagement) external onlyOwner { nodeRewardManagement = NODERewardManagement(nodeManagement); } function updateUniswapV2Router(address newAddress) public onlyOwner { require(newAddress != address(uniswapV2Router), "TKN: The router already has that address"); emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router)); uniswapV2Router = IJoeRouter02(newAddress); address _uniswapV2Pair = IJoeFactory(uniswapV2Router.factory()) .createPair(address(this), uniswapV2Router.WAVAX()); uniswapV2Pair = _uniswapV2Pair; } function updateSwapTokensAmount(uint256 newVal) external onlyOwner { swapTokensAmount = newVal; } function updateFuturWall(address payable wall) external onlyOwner { futurUsePool = wall; } function updateRewardsWall(address payable wall) external onlyOwner { distributionPool = wall; } function updateStakingPool(address payable wall) external onlyOwner { stakingPool = wall; } function updateRewardsFee(uint256 value) external onlyOwner { rewardsFee = value; totalFees = rewardsFee.add(liquidityPoolFee).add(futurFee); } function updateLiquidityFee(uint256 value) external onlyOwner { liquidityPoolFee = value; totalFees = rewardsFee.add(liquidityPoolFee).add(futurFee); } function updateFuturFee(uint256 value) external onlyOwner { futurFee = value; totalFees = rewardsFee.add(liquidityPoolFee).add(futurFee); } function updateCashoutFee(uint256 value) external onlyOwner { cashoutFee = value; } function updateRwSwapFee(uint256 value) external onlyOwner { rwSwap = value; } function changeMaxTxAmount(uint256 value) external onlyOwner { maxTxAmount = value; } function changeProtectSale(bool value) external onlyOwner { protectSale = value; } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { _setAutomatedMarketMakerPair(pair, value); } function blacklistMalicious(address account, bool value) external onlyOwner { _isBlacklisted[account] = value; } function setIsExcluded(address account, bool value) external onlyOwner { _isExcluded[account] = value; } function _setAutomatedMarketMakerPair(address pair, bool value) private { require( automatedMarketMakerPairs[pair] != value, "TKN: Automated market maker pair is already set to that value" ); automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require( !_isBlacklisted[from] && !_isBlacklisted[to], "Blacklisted address" ); if (from != owner() && to != owner() && from != address(this) && to != address(this) && !_isExcluded[from] && !_isExcluded[to]) { require(amount <= maxTxAmount, "Please transfer under the max transaction amount"); if (protectSale && from == uniswapV2Pair) { _isBlacklisted[to] = true; } } super._transfer(from, to, amount); } function swapAndSendToFee(address destination, uint256 tokens) private { uint256 initialETHBalance = address(this).balance; swapTokensForEth(tokens); uint256 newBalance = (address(this).balance).sub(initialETHBalance); payable(destination).transfer(newBalance); } function swapAndLiquify(uint256 tokens) private { uint256 half = tokens.div(2); uint256 otherHalf = tokens.sub(half); uint256 initialBalance = address(this).balance; swapTokensForEth(half); uint256 newBalance = address(this).balance.sub(initialBalance); addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WAVAX(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForAVAXSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityAVAX{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(0), block.timestamp ); } function getStakePositions(address staker) public view returns (StakePosition[] memory positions){ return stakePositions[staker]; } function createStakePosition(uint256 amount, uint256 duration) private { address staker = msg.sender; uint256 positionId = stakePositionIndex++; stakePositions[staker].push( StakePosition({ creationTime: block.timestamp, expireTime: block.timestamp + duration, balance: amount, id: positionId }) ); } function withdrawStakingPosition(uint256 index) public { address staker = msg.sender; StakePosition storage position = stakePositions[staker][index]; require(position.expireTime <= block.timestamp, "You are not eligible to claim this position yet"); require(position.balance > 0, "There is nothing to claim from this position"); uint256 amount = position.balance; position.balance = 0; super._transfer(stakingPool, msg.sender, amount); } function createNodeWithTokens(string memory name) public { require(bytes(name).length > 3 && bytes(name).length < 20, "NODE CREATION: NAME SIZE INVALID"); address sender = msg.sender; require(sender != address(0), "NODE CREATION: creation from the zero address"); require(!_isBlacklisted[sender], "NODE CREATION: Blacklisted address"); require(sender != futurUsePool && sender != distributionPool, "NODE CREATION: futur and rewardsPool cannot create node"); uint256 nodePrice = nodeRewardManagement.nodePrice(); require(balanceOf(sender) >= nodePrice, "NODE CREATION: Balance too low for creation."); uint256 contractTokenBalance = balanceOf(address(this)); bool swapAmountOk = contractTokenBalance >= swapTokensAmount; if ( swapAmountOk && swapLiquify && !swapping && sender != owner() && !automatedMarketMakerPairs[sender] ) { swapping = true; uint256 rewardsPoolTokens = contractTokenBalance .mul(rewardsFee) .div(100); super._transfer( address(this), distributionPool, rewardsPoolTokens ); uint256 swapTokens = contractTokenBalance.mul(liquidityPoolFee).div( 100 ); swapAndLiquify(swapTokens); swapAndSendToFee(distributionPool, balanceOf(address(this))); swapping = false; } super._transfer(sender, address(this), nodePrice); nodeRewardManagement.createNode(sender, name, 0); } function createNodeWithStakePosition(string memory name, uint256 stakeDays) public { require(bytes(name).length > 3 && bytes(name).length < 32, "NODE CREATION: NAME SIZE INVALID"); address sender = msg.sender; require(sender != address(0), "NODE CREATION: creation from the zero address"); require(!_isBlacklisted[sender], "NODE CREATION: Blacklisted address"); require(sender != futurUsePool && sender != distributionPool, "NODE CREATION: futur and rewardsPool cannot create node"); require(stakeDays >= 1 && stakeDays <= 30, "Stake time must be between 1 and 30 days"); uint256 duration = stakeDays * 1 days; uint256 nodeFee = nodeFees[stakeDays - 1]; uint256 nodePrice = nodeRewardManagement.nodePrice(); require(balanceOf(sender) >= nodePrice + nodeFee, "NODE CREATION: Balance too low for creation."); uint256 contractTokenBalance = balanceOf(address(this)); bool swapAmountOk = contractTokenBalance >= swapTokensAmount; if ( swapAmountOk && swapLiquify && !swapping && sender != owner() && !automatedMarketMakerPairs[sender] ) { swapping = true; uint256 rewardsPoolTokens = contractTokenBalance .mul(rewardsFee) .div(100); super._transfer( address(this), distributionPool, rewardsPoolTokens ); uint256 swapTokens = contractTokenBalance.mul(liquidityPoolFee).div( 100 ); swapAndLiquify(swapTokens); swapAndSendToFee(distributionPool, balanceOf(address(this))); swapping = false; } super._transfer(sender, address(this), nodePrice + nodeFee); createStakePosition(nodePrice, duration); nodeRewardManagement.createNode(sender, name, duration); } function cashoutReward(uint256 blocktime) public { address sender = msg.sender; require(sender != address(0), "CSHT: creation from the zero address"); require(!_isBlacklisted[sender], "MANIA CSHT: Blacklisted address"); require( sender != futurUsePool && sender != distributionPool, "CSHT: futur and rewardsPool cannot cashout rewards" ); uint256 rewardAmount = nodeRewardManagement._getRewardAmountOf( sender, blocktime ); require( rewardAmount > 0, "CSHT: You don't have enough reward to cash out" ); uint256 feeAmount = rewardAmount.mul(cashoutFee).div(100); rewardAmount = rewardAmount.sub(feeAmount); if (swapLiquify && cashoutFee > 0) { super._transfer(distributionPool, address(this), feeAmount); swapAndSendToFee(futurUsePool, feeAmount); } super._transfer(distributionPool, sender, rewardAmount); nodeRewardManagement._cashoutNodeReward(sender, blocktime); } function cashoutAll() public { address sender = msg.sender; require( sender != address(0), "MANIA CSHT: creation from the zero address" ); require(!_isBlacklisted[sender], "MANIA CSHT: Blacklisted address"); require( sender != futurUsePool && sender != distributionPool, "MANIA CSHT: futur and rewardsPool cannot cashout rewards" ); uint256 rewardAmount = nodeRewardManagement._getRewardAmountOf(sender); require( rewardAmount > 0, "MANIA CSHT: You don't have enough reward to cash out" ); uint256 feeAmount = rewardAmount.mul(cashoutFee).div(100); rewardAmount = rewardAmount.sub(feeAmount); if (swapLiquify && cashoutFee > 0) { super._transfer(distributionPool, address(this), feeAmount); swapAndSendToFee(futurUsePool, feeAmount); } super._transfer(distributionPool, sender, rewardAmount); nodeRewardManagement._cashoutAllNodesReward(sender); } function changeSwapLiquify(bool newVal) public onlyOwner { swapLiquify = newVal; } function getNodeNumberOf(address account) public view returns (uint256) { return nodeRewardManagement._getNodeNumberOf(account); } function getRewardAmountOf(address account) public view onlyOwner returns (uint256) { return nodeRewardManagement._getRewardAmountOf(account); } function getRewardAmount() public view returns (uint256) { require(msg.sender != address(0), "SENDER CAN'T BE ZERO"); require( nodeRewardManagement._isNodeOwner(msg.sender), "NO NODE OWNER" ); return nodeRewardManagement._getRewardAmountOf(msg.sender); } function changeNodeFees(uint256[] memory newNodeFees) public onlyOwner { require(newNodeFees.length == 30, "Must have 30 items"); nodeFees = newNodeFees; } function changeNodePrice(uint256 newNodePrice) public onlyOwner { nodeRewardManagement._changeNodePrice(newNodePrice); } function getNodePrice() public view returns (uint256) { return nodeRewardManagement.nodePrice(); } function changeClaimInterval(uint256 newInterval) public onlyOwner { nodeRewardManagement._changeClaimInterval(newInterval); } function getClaimInterval() public view returns (uint256) { return nodeRewardManagement.claimInterval(); } function changeRewardsPerMinute(uint256 newPrice) public onlyOwner { nodeRewardManagement._changeRewardsPerMinute(newPrice); } function getRewardsPerMinute() public view returns (uint256) { return nodeRewardManagement.rewardsPerMinute(); } function getNodesCreatime() public view returns (string memory) { require(msg.sender != address(0), "SENDER CAN'T BE ZERO"); require( nodeRewardManagement._isNodeOwner(msg.sender), "NO NODE OWNER" ); return nodeRewardManagement._getNodesCreationTime(msg.sender); } function getNodesExpireTime() public view returns (string memory) { require(msg.sender != address(0), "SENDER CAN'T BE ZERO"); require( nodeRewardManagement._isNodeOwner(msg.sender), "NO NODE OWNER" ); return nodeRewardManagement._getNodesExpireTime(msg.sender); } function getNodesRewards() public view returns (string memory) { require(msg.sender != address(0), "SENDER CAN'T BE ZERO"); require( nodeRewardManagement._isNodeOwner(msg.sender), "NO NODE OWNER" ); return nodeRewardManagement._getNodesRewardAvailable(msg.sender); } function getNodesLastClaims() public view returns (string memory) { require(msg.sender != address(0), "SENDER CAN'T BE ZERO"); require( nodeRewardManagement._isNodeOwner(msg.sender), "NO NODE OWNER" ); return nodeRewardManagement._getNodesLastClaimTime(msg.sender); } function getTotalRewardStaked() public view returns (uint256) { return nodeRewardManagement.totalRewardStaked(); } function getTotalNodesCreated() public view returns (uint256) { return nodeRewardManagement.totalNodesCreated(); } function manualswap(uint amount) public onlyOwner { if (amount > balanceOf(address(this))) amount = balanceOf(address(this)); swapTokensForEth(amount); } function manualsend(uint amount) public onlyOwner { if (amount > address(this).balance) amount = address(this).balance; payable(owner()).transfer(amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address[]","name":"payees","type":"address[]"},{"internalType":"uint256[]","name":"shares","type":"uint256[]"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"balances","type":"uint256[]"},{"internalType":"uint256[]","name":"fees","type":"uint256[]"},{"internalType":"uint256","name":"swapAmount","type":"uint256"},{"internalType":"address","name":"uniV2Router","type":"address"},{"internalType":"address","name":"nodeManagement","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20PaymentReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","type":"event"},{"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":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"PayeeAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistMalicious","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cashoutAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cashoutFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocktime","type":"uint256"}],"name":"cashoutReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newInterval","type":"uint256"}],"name":"changeClaimInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"changeMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"newNodeFees","type":"uint256[]"}],"name":"changeNodeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNodePrice","type":"uint256"}],"name":"changeNodePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"changeProtectSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"changeRewardsPerMinute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newVal","type":"bool"}],"name":"changeSwapLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"stakeDays","type":"uint256"}],"name":"createNodeWithStakePosition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"createNodeWithTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributionPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"futurFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"futurUsePool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getClaimInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getNodeNumberOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodesCreatime","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodesExpireTime","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodesLastClaims","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodesRewards","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getRewardAmountOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardsPerMinute","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getStakePositions","outputs":[{"components":[{"internalType":"uint256","name":"creationTime","type":"uint256"},{"internalType":"uint256","name":"expireTime","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"id","type":"uint256"}],"internalType":"struct Comet.StakePosition[]","name":"positions","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalNodesCreated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalRewardStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityPoolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nodeRewardManagement","outputs":[{"internalType":"contract NODERewardManagement","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"payee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setIsExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nodeManagement","type":"address"}],"name":"setNodeManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakePositions","outputs":[{"internalType":"uint256","name":"creationTime","type":"uint256"},{"internalType":"uint256","name":"expireTime","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IJoeRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"updateCashoutFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"updateFuturFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wall","type":"address"}],"name":"updateFuturWall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"updateLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"updateRewardsFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wall","type":"address"}],"name":"updateRewardsWall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"updateRwSwapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wall","type":"address"}],"name":"updateStakingPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateSwapTokensAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"withdrawStakingPosition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052601280546001600160a01b0319908116731a4c49cf5d526edaf8955c176ed3ca5531d1270e179091556013805490911661dead179055601a805461ffff19166101001790556020805460ff1916905568015af1d78b58c4000060215560006023553480156200007257600080fd5b506040516200644838038062006448833981016040819052620000959162000d4c565b87876040518060400160405280600581526020016410dbdb595d60da1b8152506040518060400160405280600581526020016410d3d3515560da1b8152508160039080519060200190620000eb92919062000b62565b5080516200010190600490602084019062000b62565b5050600580546001600160a01b031916339081179091556040519091506000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a38051825114620001735760405162461bcd60e51b81526004016200016a906200104a565b60405180910390fd5b6000825111620001975760405162461bcd60e51b81526004016200016a9062001167565b60005b82518110156200021b5762000206838281518110620001c957634e487b7160e01b600052603260045260246000fd5b6020026020010151838381518110620001f257634e487b7160e01b600052603260045260246000fd5b60200260200101516200090760201b60201c565b806200021281620012e1565b9150506200019a565b5050600d80546001600160a01b0319166001600160a01b038416179055508551869060049081106200025d57634e487b7160e01b600052603260045260246000fd5b6020026020010151601060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555085600581518110620002ad57634e487b7160e01b600052603260045260246000fd5b6020908102919091010151601180546001600160a01b0319166001600160a01b039283161790556010541615801590620002f157506011546001600160a01b031615155b620003105760405162461bcd60e51b81526004016200016a9062000ef2565b6001600160a01b038216620003395760405162461bcd60e51b81526004016200016a9062000fcb565b836000815181106200035b57634e487b7160e01b600052603260045260246000fd5b60200260200101516000141580156200039e5750836001815181106200039157634e487b7160e01b600052603260045260246000fd5b6020026020010151600014155b8015620003d5575083600281518110620003c857634e487b7160e01b600052603260045260246000fd5b6020026020010151600014155b80156200040c575083600381518110620003ff57634e487b7160e01b600052603260045260246000fd5b6020026020010151600014155b6200042b5760405162461bcd60e51b81526004016200016a9062000e6f565b836000815181106200044d57634e487b7160e01b600052603260045260246000fd5b6020026020010151601681905550836001815181106200047d57634e487b7160e01b600052603260045260246000fd5b602002602001015160148190555083600281518110620004ad57634e487b7160e01b600052603260045260246000fd5b602002602001015160158190555083600381518110620004dd57634e487b7160e01b600052603260045260246000fd5b6020026020010151601881905550836004815181106200050d57634e487b7160e01b600052603260045260246000fd5b602090810291909101810151601955604080516103c081018252676f05b59d3b20000081526765b96429fb9d000092810192909252675c9099a92bdb0000908201526753444835ec58000060608201526749f7f6c2acd5000060808201526740cf2c41dd13000060a0820152673782dace9d90000060c08201526735d887716084000060e0820152673451bb06933900006101008201526732a767a9562d00006101208201526731209b3e88e20000610140820152672f7647e14bd60000610160820152672def7b767e8b0000610180820152672c452819417f00006101a0820152672abe5bae743400006101c08201526729140851372800006101e082015267278d3be669dd00006102008201526725e2e8892cd1000061022082015267245c1c1e5f8600006102408201526722b1c8c1227a0000610260820152671feb3dd06765fed4610280820152671d24b2dfac5200006102a0820152671a5e27eef13e00006102c08201526717979cfe362a00006102e08201526714d1120d7b16000061030082015267120a871cc0020000610320820152670f43fc2c04ee0064610340820152670c7d713b49da00006103608201526709b6e64a8ec600006103808201526706f05b59d3b200006103a0820152620006ef90601c90601e62000bf1565b50620007296016546200071560155460145462000a3960201b620032db1790919060201c565b62000a3960201b620032db1790919060201c565b6017558551158015906200073e575060008551115b6200075d5760405162461bcd60e51b81526004016200016a9062000f37565b8451865114620007815760405162461bcd60e51b81526004016200016a9062001002565b60005b86518110156200087a576001601e6000898481518110620007b557634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550620008658782815181106200081957634e487b7160e01b600052603260045260246000fd5b60200260200101518783815181106200084257634e487b7160e01b600052603260045260246000fd5b6020026020010151670de0b6b3a76400006200085f919062001282565b62000a74565b806200087181620012e1565b91505062000784565b506200088562000b57565b6a10ebe24297ce6ff43c000014620008b15760405162461bcd60e51b81526004016200016a906200111e565b60008311620008d45760405162461bcd60e51b81526004016200016a906200109c565b620008e883670de0b6b3a764000062001282565b601b5550506020805460ff19166001179055506200132b945050505050565b6001600160a01b038216620009305760405162461bcd60e51b81526004016200016a9062000ea6565b60008111620009535760405162461bcd60e51b81526004016200016a906200119e565b6001600160a01b038216600090815260086020526040902054156200098c5760405162461bcd60e51b81526004016200016a90620010d3565b600a8054600181019091557fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b0384169081179091556000908152600860205260409020819055600654620009f690829062001267565b6006556040517f40c340f65e17194d14ddddb073d3c9f888e3cb52b5aae0c6c7706b4fbc905fac9062000a2d908490849062000e56565b60405180910390a15050565b60008062000a48838562001267565b90508381101562000a6d5760405162461bcd60e51b81526004016200016a9062000f94565b9392505050565b6001600160a01b03821662000a9d5760405162461bcd60e51b81526004016200016a90620011d5565b62000aab6000838362000b5d565b62000ac78160025462000a3960201b620032db1790919060201c565b6002556001600160a01b0382166000908152602081815260409091205462000afa918390620032db62000a39821b17901c565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000b4b9085906200120c565b60405180910390a35050565b60025490565b505050565b82805462000b7090620012a4565b90600052602060002090601f01602090048101928262000b94576000855562000bdf565b82601f1062000baf57805160ff191683800117855562000bdf565b8280016001018555821562000bdf579182015b8281111562000bdf57825182559160200191906001019062000bc2565b5062000bed92915062000c3a565b5090565b82805482825590600052602060002090810192821562000bdf579160200282015b8281111562000bdf57825182906001600160401b031690559160200191906001019062000c12565b5b8082111562000bed576000815560010162000c3b565b80516001600160a01b038116811462000c6957600080fd5b919050565b600082601f83011262000c7f578081fd5b8151602062000c9862000c928362001241565b62001215565b828152818101908583018385028701840188101562000cb5578586fd5b855b8581101562000cde5762000ccb8262000c51565b8452928401929084019060010162000cb7565b5090979650505050505050565b600082601f83011262000cfc578081fd5b8151602062000d0f62000c928362001241565b828152818101908583018385028701840188101562000d2c578586fd5b855b8581101562000cde5781518452928401929084019060010162000d2e565b600080600080600080600080610100898b03121562000d69578384fd5b88516001600160401b038082111562000d80578586fd5b62000d8e8c838d0162000c6e565b995060208b015191508082111562000da4578586fd5b62000db28c838d0162000ceb565b985060408b015191508082111562000dc8578586fd5b62000dd68c838d0162000c6e565b975060608b015191508082111562000dec578586fd5b62000dfa8c838d0162000ceb565b965060808b015191508082111562000e10578586fd5b5062000e1f8b828c0162000ceb565b94505060a0890151925062000e3760c08a0162000c51565b915062000e4760e08a0162000c51565b90509295985092959890939650565b6001600160a01b03929092168252602082015260400190565b60208082526014908201527f434f4e5354523a204665657320657175616c2030000000000000000000000000604082015260600190565b6020808252602c908201527f5061796d656e7453706c69747465723a206163636f756e74206973207468652060408201526b7a65726f206164647265737360a01b606082015260800190565b60208082526025908201527f465554555220262052455741524420414444524553532043414e4e4f54204245604082015264205a45524f60d81b606082015260800190565b60208082526038908201527f434f4e5354523a20616464726573736573206172726179206c656e677468206d60408201527f7573742062652067726561746572207468616e207a65726f0000000000000000606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526015908201527f524f555445522043414e4e4f54204245205a45524f0000000000000000000000604082015260600190565b60208082526028908201527f434f4e5354523a2061646472657373657320617272617973206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526032908201527f5061796d656e7453706c69747465723a2070617965657320616e6420736861726040820152710cae640d8cadccee8d040dad2e6dac2e8c6d60731b606082015260800190565b6020808252601d908201527f434f4e5354523a205377617020616d6f756e7420696e636f7272656374000000604082015260600190565b6020808252602b908201527f5061796d656e7453706c69747465723a206163636f756e7420616c726561647960408201526a206861732073686172657360a81b606082015260800190565b60208082526029908201527f434f4e5354523a20746f74616c537570706c79206d75737420657175616c2032604082015268181036b4b63634b7b760b91b606082015260800190565b6020808252601a908201527f5061796d656e7453706c69747465723a206e6f20706179656573000000000000604082015260600190565b6020808252601d908201527f5061796d656e7453706c69747465723a20736861726573206172652030000000604082015260600190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b6040518181016001600160401b038111828210171562001239576200123962001315565b604052919050565b60006001600160401b038211156200125d576200125d62001315565b5060209081020190565b600082198211156200127d576200127d620012ff565b500190565b60008160001904831182151516156200129f576200129f620012ff565b500290565b600281046001821680620012b957607f821691505b60208210811415620012db57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415620012f857620012f8620012ff565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b61510d806200133b6000396000f3fe60806040526004361061048d5760003560e01c8063796f838e11610255578063a538ddf211610144578063cf8e2f8e116100c1578063e12e3ca511610085578063e12e3ca514610d66578063e33b7de314610d86578063ee1afdbf14610d9b578063f2fde38b14610db0578063f74c993414610dd0578063fb0a749414610df0576104cd565b8063cf8e2f8e14610cc6578063d79779b214610ce6578063d892934214610d06578063dd62ed3e14610d26578063de89c0ca14610d46576104cd565b8063b96392c111610108578063b96392c114610c3c578063bdf24a5314610c5c578063c0b37af314610c71578063c5ca7d6d14610c91578063ce7c2ac214610ca6576104cd565b8063a538ddf214610bb2578063a9059cbb14610bc7578063a99bc40914610be7578063ab57476114610c07578063b62496f514610c1c576104cd565b80638e675663116101d25780639852595c116101965780639852595c14610b105780639a7a23d614610b30578063a04ec53914610b50578063a457c2d714610b7d578063a5021a1714610b9d576104cd565b80638e67566314610a865780638f0ba4ca14610aa65780639349c47d14610ac657806394471c4214610ae657806395d89b4114610afb576104cd565b806388c41d7c1161021957806388c41d7c146109fc5780638b83209b14610a1c5780638bc9c7b014610a3c5780638c0b5e2214610a5c5780638da5cb5b14610a71576104cd565b8063796f838e146109725780638013858b14610992578063823349b3146109b257806385141a77146109c7578063881dce60146109dc576104cd565b80633f7b97bb1161037c5780635f1c3182116102f9578063677daa57116102bd578063677daa57146108d35780636815a91c146108f3578063697e2f8e146109135780636d9ae0be1461092857806370a082311461093d578063715018a61461095d576104cd565b80635f1c318214610849578063642d7e6e1461085e57806365b8dbc01461087357806365bfe430146108935780636770474b146108b3576104cd565b8063545579731161034057806354557973146107ca57806354f12f1f146107df578063583bd7a6146107f45780635b0d4674146108145780635d512ac714610829576104cd565b80633f7b97bb1461074b578063406072a91461076057806348b750441461078057806349bd5a5e146107a05780634dc9b819146107b5576104cd565b8063191655871161040a5780632bb14e1d116103ce5780632bb14e1d146106bf578063313ce567146106d457806339509351146106f65780633a98ef39146107165780633c33f9a71461072b576104cd565b8063191655871461060f5780631ad34a4f1461062f5780631cdd3be31461064f57806323b872dd1461066f5780632403bd771461068f576104cd565b80630c08f300116104515780630c08f3001461058e5780630c56ae3b146105ae57806313114a9d146105d05780631694505e146105e557806318160ddd146105fa576104cd565b806306fdde03146104d2578063084a6bff146104fd578063095ea7b31461051f57806309a69f571461054c5780630b285b1f1461056e576104cd565b366104cd577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be77033346040516104c3929190614344565b60405180910390a1005b600080fd5b3480156104de57600080fd5b506104e7610e10565b6040516104f49190614455565b60405180910390f35b34801561050957600080fd5b5061051d610518366004614288565b610ea2565b005b34801561052b57600080fd5b5061053f61053a36600461408c565b610efc565b6040516104f4919061444a565b34801561055857600080fd5b50610561610f13565b6040516104f49190614e1b565b34801561057a57600080fd5b5061053f610589366004613faf565b611053565b34801561059a57600080fd5b5061051d6105a9366004613faf565b611068565b3480156105ba57600080fd5b506105c36110b4565b6040516104f49190614330565b3480156105dc57600080fd5b506105616110c3565b3480156105f157600080fd5b506105c36110c9565b34801561060657600080fd5b506105616110d8565b34801561061b57600080fd5b5061051d61062a366004613faf565b6110de565b34801561063b57600080fd5b5061051d61064a366004614288565b6111ec565b34801561065b57600080fd5b5061053f61066a366004613faf565b611265565b34801561067b57600080fd5b5061053f61068a36600461401f565b61127a565b34801561069b57600080fd5b506106af6106aa36600461408c565b6112e4565b6040516104f49493929190614eaa565b3480156106cb57600080fd5b5061056161132a565b3480156106e057600080fd5b506106e9611330565b6040516104f49190614ec5565b34801561070257600080fd5b5061053f61071136600461408c565b611335565b34801561072257600080fd5b5061056161136b565b34801561073757600080fd5b5061051d610746366004614288565b611371565b34801561075757600080fd5b506104e7611420565b34801561076c57600080fd5b5061056161077b366004614196565b61155f565b34801561078c57600080fd5b5061051d61079b366004614196565b61158a565b3480156107ac57600080fd5b506105c3611740565b3480156107c157600080fd5b5061056161174f565b3480156107d657600080fd5b5061051d611794565b3480156107eb57600080fd5b506105616119eb565b34801561080057600080fd5b5061051d61080f36600461415e565b6119f1565b34801561082057600080fd5b506104e7611a35565b34801561083557600080fd5b5061051d6108443660046140b7565b611b20565b34801561085557600080fd5b50610561611b7e565b34801561086a57600080fd5b50610561611b84565b34801561087f57600080fd5b5061051d61088e366004613faf565b611bc9565b34801561089f57600080fd5b5061051d6108ae366004614288565b611e1a565b3480156108bf57600080fd5b5061051d6108ce366004614288565b612076565b3480156108df57600080fd5b5061051d6108ee366004614288565b6120a5565b3480156108ff57600080fd5b5061051d61090e366004614288565b6120d4565b34801561091f57600080fd5b506105c3612103565b34801561093457600080fd5b50610561612112565b34801561094957600080fd5b50610561610958366004613faf565b612118565b34801561096957600080fd5b5061051d612133565b34801561097e57600080fd5b5061051d61098d366004614288565b6121a7565b34801561099e57600080fd5b5061051d6109ad366004614288565b61222f565b3480156109be57600080fd5b50610561612289565b3480156109d357600080fd5b506105c36122ce565b3480156109e857600080fd5b5061051d6109f7366004614288565b6122dd565b348015610a0857600080fd5b5061051d610a17366004614288565b61232f565b348015610a2857600080fd5b506105c3610a37366004614288565b612373565b348015610a4857600080fd5b5061051d610a57366004614288565b6123b1565b348015610a6857600080fd5b506105616123e0565b348015610a7d57600080fd5b506105c36123e6565b348015610a9257600080fd5b5061051d610aa1366004614288565b6123f5565b348015610ab257600080fd5b5061051d610ac13660046141a8565b612439565b348015610ad257600080fd5b5061051d610ae1366004613faf565b61273f565b348015610af257600080fd5b5061056161278b565b348015610b0757600080fd5b506104e76127d0565b348015610b1c57600080fd5b50610561610b2b366004613faf565b6127df565b348015610b3c57600080fd5b5061051d610b4b36600461405f565b6127fa565b348015610b5c57600080fd5b50610b70610b6b366004613faf565b61282e565b6040516104f491906143e6565b348015610b8957600080fd5b5061053f610b9836600461408c565b6128cb565b348015610ba957600080fd5b5061056161291a565b348015610bbe57600080fd5b506105c361295f565b348015610bd357600080fd5b5061053f610be236600461408c565b61296e565b348015610bf357600080fd5b5061051d610c02366004613faf565b61297b565b348015610c1357600080fd5b506105616129c7565b348015610c2857600080fd5b5061053f610c37366004613faf565b6129cd565b348015610c4857600080fd5b50610561610c57366004613faf565b6129e2565b348015610c6857600080fd5b506104e7612a8f565b348015610c7d57600080fd5b5061051d610c8c366004614245565b612b7a565b348015610c9d57600080fd5b506105c3612f10565b348015610cb257600080fd5b50610561610cc1366004613faf565b612f1f565b348015610cd257600080fd5b5061051d610ce136600461405f565b612f3a565b348015610cf257600080fd5b50610561610d01366004613faf565b612f8f565b348015610d1257600080fd5b5061051d610d2136600461405f565b612faa565b348015610d3257600080fd5b50610561610d41366004613fe7565b612fff565b348015610d5257600080fd5b5061051d610d61366004614288565b61302a565b348015610d7257600080fd5b5061051d610d8136600461415e565b613084565b348015610d9257600080fd5b506105616130c1565b348015610da757600080fd5b506104e76130c7565b348015610dbc57600080fd5b5061051d610dcb366004613faf565b6131b2565b348015610ddc57600080fd5b50610561610deb366004613faf565b61325e565b348015610dfc57600080fd5b5061051d610e0b366004613faf565b61328f565b606060038054610e1f90614fbf565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4b90614fbf565b8015610e985780601f10610e6d57610100808354040283529160200191610e98565b820191906000526020600020905b815481529060010190602001808311610e7b57829003601f168201915b5050505050905090565b6005546001600160a01b03163314610ed55760405162461bcd60e51b8152600401610ecc90614b2d565b60405180910390fd5b6014819055601654601554610ef69190610ef09084906132db565b906132db565b60175550565b6000610f0933848461330a565b5060015b92915050565b600033610f325760405162461bcd60e51b8152600401610ecc906146ac565b600d5460405163041ac82b60e41b81526001600160a01b03909116906341ac82b090610f62903390600401614330565b60206040518083038186803b158015610f7a57600080fd5b505afa158015610f8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb2919061417a565b610fce5760405162461bcd60e51b8152600401610ecc906144fd565b600d546040516330cd31af60e11b81526001600160a01b039091169063619a635e90610ffe903390600401614330565b60206040518083038186803b15801561101657600080fd5b505afa15801561102a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104e91906142a0565b905090565b601e6020526000908152604090205460ff1681565b6005546001600160a01b031633146110925760405162461bcd60e51b8152600401610ecc90614b2d565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6012546001600160a01b031681565b60175481565b600e546001600160a01b031681565b60025490565b6001600160a01b0381166000908152600860205260409020546111135760405162461bcd60e51b8152600401610ecc906146da565b600061111d6130c1565b6111279047614f25565b9050600061113e8383611139866127df565b6133be565b90508061115d5760405162461bcd60e51b8152600401610ecc90614802565b6001600160a01b03831660009081526009602052604081208054839290611185908490614f25565b92505081905550806007600082825461119e9190614f25565b909155506111ae90508382613404565b7fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b05683826040516111df929190614344565b60405180910390a1505050565b6005546001600160a01b031633146112165760405162461bcd60e51b8152600401610ecc90614b2d565b478111156112215750475b6112296123e6565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015611261573d6000803e3d6000fd5b5050565b601d6020526000908152604090205460ff1681565b60006112878484846134a5565b6112d984336112d48560405180606001604052806028815260200161508b602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061367f565b61330a565b5060015b9392505050565b6022602052816000526040600020818154811061130057600080fd5b60009182526020909120600490910201805460018201546002830154600390930154919450925084565b60145481565b601290565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f099185906112d490866132db565b60065490565b3360008181526022602052604081208054849081106113a057634e487b7160e01b600052603260045260246000fd5b9060005260206000209060040201905042816001015411156113d45760405162461bcd60e51b8152600401610ecc9061465d565b60008160020154116113f85760405162461bcd60e51b8152600401610ecc90614c1b565b600281018054600090915560125461141a906001600160a01b031633836136b9565b50505050565b60603361143f5760405162461bcd60e51b8152600401610ecc906146ac565b600d5460405163041ac82b60e41b81526001600160a01b03909116906341ac82b09061146f903390600401614330565b60206040518083038186803b15801561148757600080fd5b505afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061417a565b6114db5760405162461bcd60e51b8152600401610ecc906144fd565b600d5460405163c87aefa160e01b81526001600160a01b039091169063c87aefa19061150b903390600401614330565b60006040518083038186803b15801561152357600080fd5b505afa158015611537573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261104e91908101906141db565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b6001600160a01b0381166000908152600860205260409020546115bf5760405162461bcd60e51b8152600401610ecc906146da565b60006115ca83612f8f565b6040516370a0823160e01b81526001600160a01b038516906370a08231906115f6903090600401614330565b60206040518083038186803b15801561160e57600080fd5b505afa158015611622573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164691906142a0565b6116509190614f25565b905060006116638383611139878761155f565b9050806116825760405162461bcd60e51b8152600401610ecc90614802565b6001600160a01b038085166000908152600c60209081526040808320938716835292905290812080548392906116b9908490614f25565b90915550506001600160a01b0384166000908152600b6020526040812080548392906116e6908490614f25565b909155506116f790508484836137ce565b836001600160a01b03167f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a8483604051611732929190614344565b60405180910390a250505050565b600f546001600160a01b031681565b600d54604080516345193f5560e11b815290516000926001600160a01b031691638a327eaa916004808301926020929190829003018186803b15801561101657600080fd5b33806117b25760405162461bcd60e51b8152600401610ecc90614d7c565b6001600160a01b0381166000908152601d602052604090205460ff16156117eb5760405162461bcd60e51b8152600401610ecc9061484d565b6010546001600160a01b0382811691161480159061181757506011546001600160a01b03828116911614155b6118335760405162461bcd60e51b8152600401610ecc90614a41565b600d546040516330cd31af60e11b81526000916001600160a01b03169063619a635e90611864908590600401614330565b60206040518083038186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b491906142a0565b9050600081116118d65760405162461bcd60e51b8152600401610ecc90614dc7565b60006118f860646118f26018548561382490919063ffffffff16565b90613869565b905061190482826138ab565b601a54909250610100900460ff16801561192057506000601854115b156119525760115461193c906001600160a01b031630836136b9565b601054611952906001600160a01b0316826138ed565b601154611969906001600160a01b031684846136b9565b600d5460405163170a62c760e21b81526001600160a01b0390911690635c298b1c90611999908690600401614330565b602060405180830381600087803b1580156119b357600080fd5b505af11580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141a91906142a0565b60155481565b6005546001600160a01b03163314611a1b5760405162461bcd60e51b8152600401610ecc90614b2d565b601a80549115156101000261ff0019909216919091179055565b606033611a545760405162461bcd60e51b8152600401610ecc906146ac565b600d5460405163041ac82b60e41b81526001600160a01b03909116906341ac82b090611a84903390600401614330565b60206040518083038186803b158015611a9c57600080fd5b505afa158015611ab0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad4919061417a565b611af05760405162461bcd60e51b8152600401610ecc906144fd565b600d5460405163251c4fd760e11b81526001600160a01b0390911690634a389fae9061150b903390600401614330565b6005546001600160a01b03163314611b4a5760405162461bcd60e51b8152600401610ecc90614b2d565b8051601e14611b6b5760405162461bcd60e51b8152600401610ecc90614baa565b805161126190601c906020840190613efe565b601b5481565b600d546040805163d754d43360e01b815290516000926001600160a01b03169163d754d433916004808301926020929190829003018186803b15801561101657600080fd5b6005546001600160a01b03163314611bf35760405162461bcd60e51b8152600401610ecc90614b2d565b600e546001600160a01b0382811691161415611c215760405162461bcd60e51b8152600401610ecc90614884565b600e546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600e80546001600160a01b0319166001600160a01b0383811691909117918290556040805163c45a015560e01b815290516000939092169163c45a015591600480820192602092909190829003018186803b158015611cba57600080fd5b505afa158015611cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf29190613fcb565b6001600160a01b031663c9c6539630600e60009054906101000a90046001600160a01b03166001600160a01b03166373b295c26040518163ffffffff1660e01b815260040160206040518083038186803b158015611d4f57600080fd5b505afa158015611d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d879190613fcb565b6040518363ffffffff1660e01b8152600401611da492919061435d565b602060405180830381600087803b158015611dbe57600080fd5b505af1158015611dd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df69190613fcb565b600f80546001600160a01b0319166001600160a01b03929092169190911790555050565b3380611e385760405162461bcd60e51b8152600401610ecc90614618565b6001600160a01b0381166000908152601d602052604090205460ff1615611e715760405162461bcd60e51b8152600401610ecc9061484d565b6010546001600160a01b03828116911614801590611e9d57506011546001600160a01b03828116911614155b611eb95760405162461bcd60e51b8152600401610ecc90614468565b600d546040516329b8573160e21b81526000916001600160a01b03169063a6e15cc490611eec9085908790600401614344565b60206040518083038186803b158015611f0457600080fd5b505afa158015611f18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3c91906142a0565b905060008111611f5e5760405162461bcd60e51b8152600401610ecc9061477d565b6000611f7a60646118f26018548561382490919063ffffffff16565b9050611f8682826138ab565b601a54909250610100900460ff168015611fa257506000601854115b15611fd457601154611fbe906001600160a01b031630836136b9565b601054611fd4906001600160a01b0316826138ed565b601154611feb906001600160a01b031684846136b9565b600d5460405163376db80160e11b81526001600160a01b0390911690636edb70029061201d9086908890600401614344565b602060405180830381600087803b15801561203757600080fd5b505af115801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f91906142a0565b5050505050565b6005546001600160a01b031633146120a05760405162461bcd60e51b8152600401610ecc90614b2d565b601b55565b6005546001600160a01b031633146120cf5760405162461bcd60e51b8152600401610ecc90614b2d565b602155565b6005546001600160a01b031633146120fe5760405162461bcd60e51b8152600401610ecc90614b2d565b601855565b600d546001600160a01b031681565b60185481565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461215d5760405162461bcd60e51b8152600401610ecc90614b2d565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146121d15760405162461bcd60e51b8152600401610ecc90614b2d565b600d54604051633ee278b960e21b81526001600160a01b039091169063fb89e2e490612201908490600401614e1b565b600060405180830381600087803b15801561221b57600080fd5b505af115801561206f573d6000803e3d6000fd5b6005546001600160a01b031633146122595760405162461bcd60e51b8152600401610ecc90614b2d565b600d5460405163cece91eb60e01b81526001600160a01b039091169063cece91eb90612201908490600401614e1b565b600d546040805163b8527aef60e01b815290516000926001600160a01b03169163b8527aef916004808301926020929190829003018186803b15801561101657600080fd5b6013546001600160a01b031681565b6005546001600160a01b031633146123075760405162461bcd60e51b8152600401610ecc90614b2d565b61231030612118565b8111156123235761232030612118565b90505b61232c8161393c565b50565b6005546001600160a01b031633146123595760405162461bcd60e51b8152600401610ecc90614b2d565b6016819055601554601454610ef6918391610ef0916132db565b6000600a828154811061239657634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031692915050565b6005546001600160a01b031633146123db5760405162461bcd60e51b8152600401610ecc90614b2d565b601955565b60215481565b6005546001600160a01b031690565b6005546001600160a01b0316331461241f5760405162461bcd60e51b8152600401610ecc90614b2d565b6015819055601654601454610ef69190610ef090846132db565b6003815111801561244b575060148151105b6124675760405162461bcd60e51b8152600401610ecc90614524565b33806124855760405162461bcd60e51b8152600401610ecc90614a9e565b6001600160a01b0381166000908152601d602052604090205460ff16156124be5760405162461bcd60e51b8152600401610ecc906149ff565b6010546001600160a01b038281169116148015906124ea57506011546001600160a01b03828116911614155b6125065760405162461bcd60e51b8152600401610ecc906149a2565b600d5460408051631e3fd85760e31b815290516000926001600160a01b03169163f1fec2b8916004808301926020929190829003018186803b15801561254b57600080fd5b505afa15801561255f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258391906142a0565b90508061258f83612118565b10156125ad5760405162461bcd60e51b8152600401610ecc906148cc565b60006125b830612118565b601b54909150811080159081906125d65750601a54610100900460ff165b80156125e55750601a5460ff16155b801561260a57506125f46123e6565b6001600160a01b0316846001600160a01b031614155b801561262f57506001600160a01b0384166000908152601f602052604090205460ff16155b156126c657601a805460ff19166001179055601454600090612659906064906118f2908690613824565b6011549091506126749030906001600160a01b0316836136b9565b600061269060646118f26015548761382490919063ffffffff16565b905061269b81613ac1565b6011546126b9906001600160a01b03166126b430612118565b6138ed565b5050601a805460ff191690555b6126d18430856136b9565b600d54604051634810cb9960e11b81526001600160a01b03909116906390219732906127069087908990600090600401614377565b600060405180830381600087803b15801561272057600080fd5b505af1158015612734573d6000803e3d6000fd5b505050505050505050565b6005546001600160a01b031633146127695760405162461bcd60e51b8152600401610ecc90614b2d565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b600d54604080516305a19d0960e11b815290516000926001600160a01b031691630b433a12916004808301926020929190829003018186803b15801561101657600080fd5b606060048054610e1f90614fbf565b6001600160a01b031660009081526009602052604090205490565b6005546001600160a01b031633146128245760405162461bcd60e51b8152600401610ecc90614b2d565b6112618282613b42565b6001600160a01b0381166000908152602260209081526040808320805482518185028101850190935280835260609492939192909184015b828210156128c0578382906000526020600020906004020160405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505081526020019060010190612866565b505050509050919050565b6000610f0933846112d4856040518060600160405280602581526020016150b3602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061367f565b600d5460408051631e3fd85760e31b815290516000926001600160a01b03169163f1fec2b8916004808301926020929190829003018186803b15801561101657600080fd5b6010546001600160a01b031681565b6000610f093384846134a5565b6005546001600160a01b031633146129a55760405162461bcd60e51b8152600401610ecc90614b2d565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b60165481565b601f6020526000908152604090205460ff1681565b6005546000906001600160a01b03163314612a0f5760405162461bcd60e51b8152600401610ecc90614b2d565b600d546040516330cd31af60e11b81526001600160a01b039091169063619a635e90612a3f908590600401614330565b60206040518083038186803b158015612a5757600080fd5b505afa158015612a6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0d91906142a0565b606033612aae5760405162461bcd60e51b8152600401610ecc906146ac565b600d5460405163041ac82b60e41b81526001600160a01b03909116906341ac82b090612ade903390600401614330565b60206040518083038186803b158015612af657600080fd5b505afa158015612b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b2e919061417a565b612b4a5760405162461bcd60e51b8152600401610ecc906144fd565b600d546040516364940ce760e11b81526001600160a01b039091169063c92819ce9061150b903390600401614330565b60038251118015612b8c575060208251105b612ba85760405162461bcd60e51b8152600401610ecc90614524565b3380612bc65760405162461bcd60e51b8152600401610ecc90614a9e565b6001600160a01b0381166000908152601d602052604090205460ff1615612bff5760405162461bcd60e51b8152600401610ecc906149ff565b6010546001600160a01b03828116911614801590612c2b57506011546001600160a01b03828116911614155b612c475760405162461bcd60e51b8152600401610ecc906149a2565b60018210158015612c595750601e8211155b612c755760405162461bcd60e51b8152600401610ecc90614b62565b6000612c848362015180614f5d565b90506000601c612c95600186614f7c565b81548110612cb357634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910154600d5460408051631e3fd85760e31b815290519295506001600160a01b039091169263f1fec2b892600480840193829003018186803b158015612d0357600080fd5b505afa158015612d17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d3b91906142a0565b9050612d478282614f25565b612d5085612118565b1015612d6e5760405162461bcd60e51b8152600401610ecc906148cc565b6000612d7930612118565b601b5490915081108015908190612d975750601a54610100900460ff165b8015612da65750601a5460ff16155b8015612dcb5750612db56123e6565b6001600160a01b0316866001600160a01b031614155b8015612df057506001600160a01b0386166000908152601f602052604090205460ff16155b15612e8257601a805460ff19166001179055601454600090612e1a906064906118f2908690613824565b601154909150612e359030906001600160a01b0316836136b9565b6000612e5160646118f26015548761382490919063ffffffff16565b9050612e5c81613ac1565b601154612e75906001600160a01b03166126b430612118565b5050601a805460ff191690555b612e968630612e918787614f25565b6136b9565b612ea08386613bd5565b600d54604051634810cb9960e11b81526001600160a01b0390911690639021973290612ed49089908c908a90600401614377565b600060405180830381600087803b158015612eee57600080fd5b505af1158015612f02573d6000803e3d6000fd5b505050505050505050505050565b6011546001600160a01b031681565b6001600160a01b031660009081526008602052604090205490565b6005546001600160a01b03163314612f645760405162461bcd60e51b8152600401610ecc90614b2d565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b6001600160a01b03166000908152600b602052604090205490565b6005546001600160a01b03163314612fd45760405162461bcd60e51b8152600401610ecc90614b2d565b6001600160a01b03919091166000908152601d60205260409020805460ff1916911515919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146130545760405162461bcd60e51b8152600401610ecc90614b2d565b600d54604051630a1cb8e360e21b81526001600160a01b0390911690632872e38c90612201908490600401614e1b565b6005546001600160a01b031633146130ae5760405162461bcd60e51b8152600401610ecc90614b2d565b6020805460ff1916911515919091179055565b60075490565b6060336130e65760405162461bcd60e51b8152600401610ecc906146ac565b600d5460405163041ac82b60e41b81526001600160a01b03909116906341ac82b090613116903390600401614330565b60206040518083038186803b15801561312e57600080fd5b505afa158015613142573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613166919061417a565b6131825760405162461bcd60e51b8152600401610ecc906144fd565b600d54604051632bacfd8160e11b81526001600160a01b0390911690635759fb029061150b903390600401614330565b6005546001600160a01b031633146131dc5760405162461bcd60e51b8152600401610ecc90614b2d565b6001600160a01b0381166132025760405162461bcd60e51b8152600401610ecc90614559565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600d5460405163112469f960e21b81526000916001600160a01b031690634491a7e490612a3f908590600401614330565b6005546001600160a01b031633146132b95760405162461bcd60e51b8152600401610ecc90614b2d565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000806132e88385614f25565b9050838110156112dd5760405162461bcd60e51b8152600401610ecc906145e1565b6001600160a01b0383166133305760405162461bcd60e51b8152600401610ecc90614c67565b6001600160a01b0382166133565760405162461bcd60e51b8152600401610ecc9061459f565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906133b1908590614e1b565b60405180910390a3505050565b6006546001600160a01b038416600090815260086020526040812054909183916133e89086614f5d565b6133f29190614f3d565b6133fc9190614f7c565b949350505050565b804710156134245760405162461bcd60e51b8152600401610ecc906147cb565b6000826001600160a01b03168260405161343d9061432d565b60006040518083038185875af1925050503d806000811461347a576040519150601f19603f3d011682016040523d82523d6000602084013e61347f565b606091505b50509050806134a05760405162461bcd60e51b8152600401610ecc90614720565b505050565b6001600160a01b0383166134cb5760405162461bcd60e51b8152600401610ecc90614bd6565b6001600160a01b0382166134f15760405162461bcd60e51b8152600401610ecc906144ba565b6001600160a01b0383166000908152601d602052604090205460ff1615801561353357506001600160a01b0382166000908152601d602052604090205460ff16155b61354f5760405162461bcd60e51b8152600401610ecc90614975565b6135576123e6565b6001600160a01b0316836001600160a01b031614158015613591575061357b6123e6565b6001600160a01b0316826001600160a01b031614155b80156135a657506001600160a01b0383163014155b80156135bb57506001600160a01b0382163014155b80156135e057506001600160a01b0383166000908152601e602052604090205460ff16155b801561360557506001600160a01b0382166000908152601e602052604090205460ff16155b156136745760215481111561362c5760405162461bcd60e51b8152600401610ecc90614ce2565b60205460ff16801561364b5750600f546001600160a01b038481169116145b15613674576001600160a01b0382166000908152601d60205260409020805460ff191660011790555b6134a08383836136b9565b600081848411156136a35760405162461bcd60e51b8152600401610ecc9190614455565b5060006136b08486614f7c565b95945050505050565b6001600160a01b0383166136df5760405162461bcd60e51b8152600401610ecc90614bd6565b6001600160a01b0382166137055760405162461bcd60e51b8152600401610ecc906144ba565b6137108383836134a0565b61374d81604051806060016040528060268152602001615065602691396001600160a01b038616600090815260208190526040902054919061367f565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461377c90826132db565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906133b1908590614e1b565b6134a08363a9059cbb60e01b84846040516024016137ed929190614344565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613c87565b60008261383357506000610f0d565b600061383f8385614f5d565b90508261384c8583614f3d565b146112dd5760405162461bcd60e51b8152600401610ecc90614aec565b60006112dd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d16565b60006112dd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061367f565b476138f78261393c565b600061390347836138ab565b6040519091506001600160a01b0385169082156108fc029083906000818181858888f1935050505015801561206f573d6000803e3d6000fd5b604080516002808252606082018352600092602083019080368337019050509050308160008151811061397f57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600e54604080516339d94ae160e11b8152905191909316926373b295c2926004808301939192829003018186803b1580156139d357600080fd5b505afa1580156139e7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0b9190613fcb565b81600181518110613a2c57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600e54613a52913091168461330a565b600e54604051633b158ab160e11b81526001600160a01b039091169063762b156290613a8b908590600090869030904290600401614e24565b600060405180830381600087803b158015613aa557600080fd5b505af1158015613ab9573d6000803e3d6000fd5b505050505050565b6000613ace826002613869565b90506000613adc83836138ab565b905047613ae88361393c565b6000613af447836138ab565b9050613b008382613d44565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051613b3393929190614e94565b60405180910390a15050505050565b6001600160a01b0382166000908152601f602052604090205460ff1615158115151415613b815760405162461bcd60e51b8152600401610ecc90614918565b6001600160a01b0382166000818152601f6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6023805433916000919082613be983614ffa565b91905055905060226000836001600160a01b03166001600160a01b0316815260200190815260200160002060405180608001604052804281526020018542613c319190614f25565b815260208082019790975260409081019390935281546001818101845560009384529287902082516004909202019081559581015191860191909155908101516002850155606001516003909301929092555050565b6000613cdc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613deb9092919063ffffffff16565b8051909150156134a05780806020019051810190613cfa919061417a565b6134a05760405162461bcd60e51b8152600401610ecc90614d32565b60008183613d375760405162461bcd60e51b8152600401610ecc9190614455565b5060006136b08486614f3d565b600e54613d5c9030906001600160a01b03168461330a565b600e54604051637c8d9fb960e11b81526001600160a01b039091169063f91b3f72908390613d9990309087906000908190819042906004016143ab565b6060604051808303818588803b158015613db257600080fd5b505af1158015613dc6573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061206f91906142b8565b60606133fc848460008585613dff85613e94565b613e1b5760405162461bcd60e51b8152600401610ecc90614cab565b600080866001600160a01b03168587604051613e379190614311565b60006040518083038185875af1925050503d8060008114613e74576040519150601f19603f3d011682016040523d82523d6000602084013e613e79565b606091505b5091509150613e89828286613ec5565b979650505050505050565b600080826001600160a01b0316803b806020016040519081016040528181526000908060200190933c511192915050565b60608315613ed45750816112dd565b825115613ee45782518084602001fd5b8160405162461bcd60e51b8152600401610ecc9190614455565b828054828255906000526020600020908101928215613f39579160200282015b82811115613f39578251825591602001919060010190613f1e565b50613f45929150613f49565b5090565b5b80821115613f455760008155600101613f4a565b600082601f830112613f6e578081fd5b8135613f81613f7c82614efd565b614ed3565b818152846020838601011115613f95578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215613fc0578081fd5b81356112dd81615041565b600060208284031215613fdc578081fd5b81516112dd81615041565b60008060408385031215613ff9578081fd5b823561400481615041565b9150602083013561401481615041565b809150509250929050565b600080600060608486031215614033578081fd5b833561403e81615041565b9250602084013561404e81615041565b929592945050506040919091013590565b60008060408385031215614071578182fd5b823561407c81615041565b9150602083013561401481615056565b6000806040838503121561409e578182fd5b82356140a981615041565b946020939093013593505050565b600060208083850312156140c9578182fd5b823567ffffffffffffffff808211156140e0578384fd5b818501915085601f8301126140f3578384fd5b8135818111156141055761410561502b565b8381029150614115848301614ed3565b8181528481019084860184860187018a101561412f578788fd5b8795505b83861015614151578035835260019590950194918601918601614133565b5098975050505050505050565b60006020828403121561416f578081fd5b81356112dd81615056565b60006020828403121561418b578081fd5b81516112dd81615056565b60008060408385031215613ff9578182fd5b6000602082840312156141b9578081fd5b813567ffffffffffffffff8111156141cf578182fd5b6133fc84828501613f5e565b6000602082840312156141ec578081fd5b815167ffffffffffffffff811115614202578182fd5b8201601f81018413614212578182fd5b8051614220613f7c82614efd565b818152856020838501011115614234578384fd5b6136b0826020830160208601614f93565b60008060408385031215614257578182fd5b823567ffffffffffffffff81111561426d578283fd5b61427985828601613f5e565b95602094909401359450505050565b600060208284031215614299578081fd5b5035919050565b6000602082840312156142b1578081fd5b5051919050565b6000806000606084860312156142cc578081fd5b8351925060208401519150604084015190509250925092565b600081518084526142fd816020860160208601614f93565b601f01601f19169290920160200192915050565b60008251614323818460208701614f93565b9190910192915050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b038416815260606020820181905260009061439b908301856142e5565b9050826040830152949350505050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b602080825282518282018190526000919060409081850190868401855b8281101561443d57815180518552868101518786015285810151868601526060908101519085015260809093019290850190600101614403565b5091979650505050505050565b901515815260200190565b6000602082526112dd60208301846142e5565b60208082526032908201527f435348543a20667574757220616e642072657761726473506f6f6c2063616e6e6040820152716f7420636173686f7574207265776172647360701b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252600d908201526c2727902727a2229027aba722a960991b604082015260600190565b6020808252818101527f4e4f4445204352454154494f4e3a204e414d452053495a4520494e56414c4944604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526025908201527f435348543a20206372656174696f6e2066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602f908201527f596f7520617265206e6f7420656c696769626c6520746f20636c61696d20746860408201526e1a5cc81c1bdcda5d1a5bdb881e595d608a1b606082015260800190565b60208082526014908201527353454e4445522043414e2754204245205a45524f60601b604082015260600190565b60208082526026908201527f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060408201526573686172657360d01b606082015260800190565b6020808252603a908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260408201527f6563697069656e74206d61792068617665207265766572746564000000000000606082015260800190565b6020808252602e908201527f435348543a20596f7520646f6e2774206861766520656e6f756768207265776160408201526d1c99081d1bc818d85cda081bdd5d60921b606082015260800190565b6020808252601d908201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604082015260600190565b6020808252602b908201527f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060408201526a191d59481c185e5b595b9d60aa1b606082015260800190565b6020808252601f908201527f4d414e494120435348543a20426c61636b6c6973746564206164647265737300604082015260600190565b60208082526028908201527f544b4e3a2054686520726f7574657220616c7265616479206861732074686174604082015267206164647265737360c01b606082015260800190565b6020808252602c908201527f4e4f4445204352454154494f4e3a2042616c616e636520746f6f206c6f77206660408201526b37b91031b932b0ba34b7b71760a11b606082015260800190565b6020808252603d908201527f544b4e3a204175746f6d61746564206d61726b6574206d616b6572207061697260408201527f20697320616c72656164792073657420746f20746861742076616c7565000000606082015260800190565b602080825260139082015272426c61636b6c6973746564206164647265737360681b604082015260600190565b60208082526037908201527f4e4f4445204352454154494f4e3a20667574757220616e64207265776172647360408201527f506f6f6c2063616e6e6f7420637265617465206e6f6465000000000000000000606082015260800190565b60208082526022908201527f4e4f4445204352454154494f4e3a20426c61636b6c6973746564206164647265604082015261737360f01b606082015260800190565b60208082526038908201527f4d414e494120435348543a20667574757220616e642072657761726473506f6f60408201527f6c2063616e6e6f7420636173686f757420726577617264730000000000000000606082015260800190565b6020808252602e908201527f4e4f4445204352454154494f4e3a20206372656174696f6e2066726f6d20746860408201526d65207a65726f206164647265737360901b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f5374616b652074696d65206d757374206265206265747765656e203120616e64604082015267203330206461797360c01b606082015260800190565b6020808252601290820152714d7573742068617665203330206974656d7360701b604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602c908201527f5468657265206973206e6f7468696e6720746f20636c61696d2066726f6d207460408201526b3434b9903837b9b4ba34b7b760a11b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526030908201527f506c65617365207472616e7366657220756e64657220746865206d617820747260408201526f185b9cd858dd1a5bdb88185b5bdd5b9d60821b606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252602b908201527f4d414e494120435348543a20206372656174696f6e2066726f6d20746865207a60408201526a65726f206164647265737360a81b606082015260800190565b60208082526034908201527f4d414e494120435348543a20596f7520646f6e2774206861766520656e6f75676040820152731a081c995dd85c99081d1bc818d85cda081bdd5d60621b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015614e735784516001600160a01b031683529383019391830191600101614e4e565b50506001600160a01b03969096166060850152505050608001529392505050565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715614ef557614ef561502b565b604052919050565b600067ffffffffffffffff821115614f1757614f1761502b565b50601f01601f191660200190565b60008219821115614f3857614f38615015565b500190565b600082614f5857634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615614f7757614f77615015565b500290565b600082821015614f8e57614f8e615015565b500390565b60005b83811015614fae578181015183820152602001614f96565b8381111561141a5750506000910152565b600281046001821680614fd357607f821691505b60208210811415614ff457634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561500e5761500e615015565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461232c57600080fd5b801515811461232c57600080fdfe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b047a4d4cb59110be03b835f089e6b77cc1c9c88642153e8c74ea66f2523882864736f6c63430008000033000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000003600000000000000000000000000000000000000000000000000000000000000480000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000060ae616a2155ee3d9a68541ba4544862310933d4000000000000000000000000facf8166d2d8f9a16ca2966f1b407564947f778d00000000000000000000000000000000000000000000000000000000000000040000000000000000000000006a6f2aeef4807546094ebe8240db27f080ce22950000000000000000000000008025241defa2f6e9cde1d0b494fa355024d0f7f2000000000000000000000000ae640d231eb2ebc7fd50142c441a31ba4b5b09fc00000000000000000000000075f9b0d1a96ff7057b962c3557757798a074f81e0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001900000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000001900000000000000000000000000000000000000000000000000000000000000080000000000000000000000006a6f2aeef4807546094ebe8240db27f080ce22950000000000000000000000008025241defa2f6e9cde1d0b494fa355024d0f7f2000000000000000000000000ae640d231eb2ebc7fd50142c441a31ba4b5b09fc00000000000000000000000075f9b0d1a96ff7057b962c3557757798a074f81e000000000000000000000000f421c71cd4fad50ec1c9957411965611ca7d1af00000000000000000000000003dddd320ba6133989ff4cd421946b2e1b1756dea0000000000000000000000001a4c49cf5d526edaf8955c176ed3ca5531d1270e000000000000000000000000000000000000000000000000000000000000dead00000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000035b600000000000000000000000000000000000000000000000000000000000035b600000000000000000000000000000000000000000000000000000000000035b600000000000000000000000000000000000000000000000000000000000035b60000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000186a00000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000128e2e700000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001e
Deployed Bytecode
0x60806040526004361061048d5760003560e01c8063796f838e11610255578063a538ddf211610144578063cf8e2f8e116100c1578063e12e3ca511610085578063e12e3ca514610d66578063e33b7de314610d86578063ee1afdbf14610d9b578063f2fde38b14610db0578063f74c993414610dd0578063fb0a749414610df0576104cd565b8063cf8e2f8e14610cc6578063d79779b214610ce6578063d892934214610d06578063dd62ed3e14610d26578063de89c0ca14610d46576104cd565b8063b96392c111610108578063b96392c114610c3c578063bdf24a5314610c5c578063c0b37af314610c71578063c5ca7d6d14610c91578063ce7c2ac214610ca6576104cd565b8063a538ddf214610bb2578063a9059cbb14610bc7578063a99bc40914610be7578063ab57476114610c07578063b62496f514610c1c576104cd565b80638e675663116101d25780639852595c116101965780639852595c14610b105780639a7a23d614610b30578063a04ec53914610b50578063a457c2d714610b7d578063a5021a1714610b9d576104cd565b80638e67566314610a865780638f0ba4ca14610aa65780639349c47d14610ac657806394471c4214610ae657806395d89b4114610afb576104cd565b806388c41d7c1161021957806388c41d7c146109fc5780638b83209b14610a1c5780638bc9c7b014610a3c5780638c0b5e2214610a5c5780638da5cb5b14610a71576104cd565b8063796f838e146109725780638013858b14610992578063823349b3146109b257806385141a77146109c7578063881dce60146109dc576104cd565b80633f7b97bb1161037c5780635f1c3182116102f9578063677daa57116102bd578063677daa57146108d35780636815a91c146108f3578063697e2f8e146109135780636d9ae0be1461092857806370a082311461093d578063715018a61461095d576104cd565b80635f1c318214610849578063642d7e6e1461085e57806365b8dbc01461087357806365bfe430146108935780636770474b146108b3576104cd565b8063545579731161034057806354557973146107ca57806354f12f1f146107df578063583bd7a6146107f45780635b0d4674146108145780635d512ac714610829576104cd565b80633f7b97bb1461074b578063406072a91461076057806348b750441461078057806349bd5a5e146107a05780634dc9b819146107b5576104cd565b8063191655871161040a5780632bb14e1d116103ce5780632bb14e1d146106bf578063313ce567146106d457806339509351146106f65780633a98ef39146107165780633c33f9a71461072b576104cd565b8063191655871461060f5780631ad34a4f1461062f5780631cdd3be31461064f57806323b872dd1461066f5780632403bd771461068f576104cd565b80630c08f300116104515780630c08f3001461058e5780630c56ae3b146105ae57806313114a9d146105d05780631694505e146105e557806318160ddd146105fa576104cd565b806306fdde03146104d2578063084a6bff146104fd578063095ea7b31461051f57806309a69f571461054c5780630b285b1f1461056e576104cd565b366104cd577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be77033346040516104c3929190614344565b60405180910390a1005b600080fd5b3480156104de57600080fd5b506104e7610e10565b6040516104f49190614455565b60405180910390f35b34801561050957600080fd5b5061051d610518366004614288565b610ea2565b005b34801561052b57600080fd5b5061053f61053a36600461408c565b610efc565b6040516104f4919061444a565b34801561055857600080fd5b50610561610f13565b6040516104f49190614e1b565b34801561057a57600080fd5b5061053f610589366004613faf565b611053565b34801561059a57600080fd5b5061051d6105a9366004613faf565b611068565b3480156105ba57600080fd5b506105c36110b4565b6040516104f49190614330565b3480156105dc57600080fd5b506105616110c3565b3480156105f157600080fd5b506105c36110c9565b34801561060657600080fd5b506105616110d8565b34801561061b57600080fd5b5061051d61062a366004613faf565b6110de565b34801561063b57600080fd5b5061051d61064a366004614288565b6111ec565b34801561065b57600080fd5b5061053f61066a366004613faf565b611265565b34801561067b57600080fd5b5061053f61068a36600461401f565b61127a565b34801561069b57600080fd5b506106af6106aa36600461408c565b6112e4565b6040516104f49493929190614eaa565b3480156106cb57600080fd5b5061056161132a565b3480156106e057600080fd5b506106e9611330565b6040516104f49190614ec5565b34801561070257600080fd5b5061053f61071136600461408c565b611335565b34801561072257600080fd5b5061056161136b565b34801561073757600080fd5b5061051d610746366004614288565b611371565b34801561075757600080fd5b506104e7611420565b34801561076c57600080fd5b5061056161077b366004614196565b61155f565b34801561078c57600080fd5b5061051d61079b366004614196565b61158a565b3480156107ac57600080fd5b506105c3611740565b3480156107c157600080fd5b5061056161174f565b3480156107d657600080fd5b5061051d611794565b3480156107eb57600080fd5b506105616119eb565b34801561080057600080fd5b5061051d61080f36600461415e565b6119f1565b34801561082057600080fd5b506104e7611a35565b34801561083557600080fd5b5061051d6108443660046140b7565b611b20565b34801561085557600080fd5b50610561611b7e565b34801561086a57600080fd5b50610561611b84565b34801561087f57600080fd5b5061051d61088e366004613faf565b611bc9565b34801561089f57600080fd5b5061051d6108ae366004614288565b611e1a565b3480156108bf57600080fd5b5061051d6108ce366004614288565b612076565b3480156108df57600080fd5b5061051d6108ee366004614288565b6120a5565b3480156108ff57600080fd5b5061051d61090e366004614288565b6120d4565b34801561091f57600080fd5b506105c3612103565b34801561093457600080fd5b50610561612112565b34801561094957600080fd5b50610561610958366004613faf565b612118565b34801561096957600080fd5b5061051d612133565b34801561097e57600080fd5b5061051d61098d366004614288565b6121a7565b34801561099e57600080fd5b5061051d6109ad366004614288565b61222f565b3480156109be57600080fd5b50610561612289565b3480156109d357600080fd5b506105c36122ce565b3480156109e857600080fd5b5061051d6109f7366004614288565b6122dd565b348015610a0857600080fd5b5061051d610a17366004614288565b61232f565b348015610a2857600080fd5b506105c3610a37366004614288565b612373565b348015610a4857600080fd5b5061051d610a57366004614288565b6123b1565b348015610a6857600080fd5b506105616123e0565b348015610a7d57600080fd5b506105c36123e6565b348015610a9257600080fd5b5061051d610aa1366004614288565b6123f5565b348015610ab257600080fd5b5061051d610ac13660046141a8565b612439565b348015610ad257600080fd5b5061051d610ae1366004613faf565b61273f565b348015610af257600080fd5b5061056161278b565b348015610b0757600080fd5b506104e76127d0565b348015610b1c57600080fd5b50610561610b2b366004613faf565b6127df565b348015610b3c57600080fd5b5061051d610b4b36600461405f565b6127fa565b348015610b5c57600080fd5b50610b70610b6b366004613faf565b61282e565b6040516104f491906143e6565b348015610b8957600080fd5b5061053f610b9836600461408c565b6128cb565b348015610ba957600080fd5b5061056161291a565b348015610bbe57600080fd5b506105c361295f565b348015610bd357600080fd5b5061053f610be236600461408c565b61296e565b348015610bf357600080fd5b5061051d610c02366004613faf565b61297b565b348015610c1357600080fd5b506105616129c7565b348015610c2857600080fd5b5061053f610c37366004613faf565b6129cd565b348015610c4857600080fd5b50610561610c57366004613faf565b6129e2565b348015610c6857600080fd5b506104e7612a8f565b348015610c7d57600080fd5b5061051d610c8c366004614245565b612b7a565b348015610c9d57600080fd5b506105c3612f10565b348015610cb257600080fd5b50610561610cc1366004613faf565b612f1f565b348015610cd257600080fd5b5061051d610ce136600461405f565b612f3a565b348015610cf257600080fd5b50610561610d01366004613faf565b612f8f565b348015610d1257600080fd5b5061051d610d2136600461405f565b612faa565b348015610d3257600080fd5b50610561610d41366004613fe7565b612fff565b348015610d5257600080fd5b5061051d610d61366004614288565b61302a565b348015610d7257600080fd5b5061051d610d8136600461415e565b613084565b348015610d9257600080fd5b506105616130c1565b348015610da757600080fd5b506104e76130c7565b348015610dbc57600080fd5b5061051d610dcb366004613faf565b6131b2565b348015610ddc57600080fd5b50610561610deb366004613faf565b61325e565b348015610dfc57600080fd5b5061051d610e0b366004613faf565b61328f565b606060038054610e1f90614fbf565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4b90614fbf565b8015610e985780601f10610e6d57610100808354040283529160200191610e98565b820191906000526020600020905b815481529060010190602001808311610e7b57829003601f168201915b5050505050905090565b6005546001600160a01b03163314610ed55760405162461bcd60e51b8152600401610ecc90614b2d565b60405180910390fd5b6014819055601654601554610ef69190610ef09084906132db565b906132db565b60175550565b6000610f0933848461330a565b5060015b92915050565b600033610f325760405162461bcd60e51b8152600401610ecc906146ac565b600d5460405163041ac82b60e41b81526001600160a01b03909116906341ac82b090610f62903390600401614330565b60206040518083038186803b158015610f7a57600080fd5b505afa158015610f8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb2919061417a565b610fce5760405162461bcd60e51b8152600401610ecc906144fd565b600d546040516330cd31af60e11b81526001600160a01b039091169063619a635e90610ffe903390600401614330565b60206040518083038186803b15801561101657600080fd5b505afa15801561102a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104e91906142a0565b905090565b601e6020526000908152604090205460ff1681565b6005546001600160a01b031633146110925760405162461bcd60e51b8152600401610ecc90614b2d565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6012546001600160a01b031681565b60175481565b600e546001600160a01b031681565b60025490565b6001600160a01b0381166000908152600860205260409020546111135760405162461bcd60e51b8152600401610ecc906146da565b600061111d6130c1565b6111279047614f25565b9050600061113e8383611139866127df565b6133be565b90508061115d5760405162461bcd60e51b8152600401610ecc90614802565b6001600160a01b03831660009081526009602052604081208054839290611185908490614f25565b92505081905550806007600082825461119e9190614f25565b909155506111ae90508382613404565b7fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b05683826040516111df929190614344565b60405180910390a1505050565b6005546001600160a01b031633146112165760405162461bcd60e51b8152600401610ecc90614b2d565b478111156112215750475b6112296123e6565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015611261573d6000803e3d6000fd5b5050565b601d6020526000908152604090205460ff1681565b60006112878484846134a5565b6112d984336112d48560405180606001604052806028815260200161508b602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061367f565b61330a565b5060015b9392505050565b6022602052816000526040600020818154811061130057600080fd5b60009182526020909120600490910201805460018201546002830154600390930154919450925084565b60145481565b601290565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f099185906112d490866132db565b60065490565b3360008181526022602052604081208054849081106113a057634e487b7160e01b600052603260045260246000fd5b9060005260206000209060040201905042816001015411156113d45760405162461bcd60e51b8152600401610ecc9061465d565b60008160020154116113f85760405162461bcd60e51b8152600401610ecc90614c1b565b600281018054600090915560125461141a906001600160a01b031633836136b9565b50505050565b60603361143f5760405162461bcd60e51b8152600401610ecc906146ac565b600d5460405163041ac82b60e41b81526001600160a01b03909116906341ac82b09061146f903390600401614330565b60206040518083038186803b15801561148757600080fd5b505afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061417a565b6114db5760405162461bcd60e51b8152600401610ecc906144fd565b600d5460405163c87aefa160e01b81526001600160a01b039091169063c87aefa19061150b903390600401614330565b60006040518083038186803b15801561152357600080fd5b505afa158015611537573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261104e91908101906141db565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b6001600160a01b0381166000908152600860205260409020546115bf5760405162461bcd60e51b8152600401610ecc906146da565b60006115ca83612f8f565b6040516370a0823160e01b81526001600160a01b038516906370a08231906115f6903090600401614330565b60206040518083038186803b15801561160e57600080fd5b505afa158015611622573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164691906142a0565b6116509190614f25565b905060006116638383611139878761155f565b9050806116825760405162461bcd60e51b8152600401610ecc90614802565b6001600160a01b038085166000908152600c60209081526040808320938716835292905290812080548392906116b9908490614f25565b90915550506001600160a01b0384166000908152600b6020526040812080548392906116e6908490614f25565b909155506116f790508484836137ce565b836001600160a01b03167f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a8483604051611732929190614344565b60405180910390a250505050565b600f546001600160a01b031681565b600d54604080516345193f5560e11b815290516000926001600160a01b031691638a327eaa916004808301926020929190829003018186803b15801561101657600080fd5b33806117b25760405162461bcd60e51b8152600401610ecc90614d7c565b6001600160a01b0381166000908152601d602052604090205460ff16156117eb5760405162461bcd60e51b8152600401610ecc9061484d565b6010546001600160a01b0382811691161480159061181757506011546001600160a01b03828116911614155b6118335760405162461bcd60e51b8152600401610ecc90614a41565b600d546040516330cd31af60e11b81526000916001600160a01b03169063619a635e90611864908590600401614330565b60206040518083038186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b491906142a0565b9050600081116118d65760405162461bcd60e51b8152600401610ecc90614dc7565b60006118f860646118f26018548561382490919063ffffffff16565b90613869565b905061190482826138ab565b601a54909250610100900460ff16801561192057506000601854115b156119525760115461193c906001600160a01b031630836136b9565b601054611952906001600160a01b0316826138ed565b601154611969906001600160a01b031684846136b9565b600d5460405163170a62c760e21b81526001600160a01b0390911690635c298b1c90611999908690600401614330565b602060405180830381600087803b1580156119b357600080fd5b505af11580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141a91906142a0565b60155481565b6005546001600160a01b03163314611a1b5760405162461bcd60e51b8152600401610ecc90614b2d565b601a80549115156101000261ff0019909216919091179055565b606033611a545760405162461bcd60e51b8152600401610ecc906146ac565b600d5460405163041ac82b60e41b81526001600160a01b03909116906341ac82b090611a84903390600401614330565b60206040518083038186803b158015611a9c57600080fd5b505afa158015611ab0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad4919061417a565b611af05760405162461bcd60e51b8152600401610ecc906144fd565b600d5460405163251c4fd760e11b81526001600160a01b0390911690634a389fae9061150b903390600401614330565b6005546001600160a01b03163314611b4a5760405162461bcd60e51b8152600401610ecc90614b2d565b8051601e14611b6b5760405162461bcd60e51b8152600401610ecc90614baa565b805161126190601c906020840190613efe565b601b5481565b600d546040805163d754d43360e01b815290516000926001600160a01b03169163d754d433916004808301926020929190829003018186803b15801561101657600080fd5b6005546001600160a01b03163314611bf35760405162461bcd60e51b8152600401610ecc90614b2d565b600e546001600160a01b0382811691161415611c215760405162461bcd60e51b8152600401610ecc90614884565b600e546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600e80546001600160a01b0319166001600160a01b0383811691909117918290556040805163c45a015560e01b815290516000939092169163c45a015591600480820192602092909190829003018186803b158015611cba57600080fd5b505afa158015611cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf29190613fcb565b6001600160a01b031663c9c6539630600e60009054906101000a90046001600160a01b03166001600160a01b03166373b295c26040518163ffffffff1660e01b815260040160206040518083038186803b158015611d4f57600080fd5b505afa158015611d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d879190613fcb565b6040518363ffffffff1660e01b8152600401611da492919061435d565b602060405180830381600087803b158015611dbe57600080fd5b505af1158015611dd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df69190613fcb565b600f80546001600160a01b0319166001600160a01b03929092169190911790555050565b3380611e385760405162461bcd60e51b8152600401610ecc90614618565b6001600160a01b0381166000908152601d602052604090205460ff1615611e715760405162461bcd60e51b8152600401610ecc9061484d565b6010546001600160a01b03828116911614801590611e9d57506011546001600160a01b03828116911614155b611eb95760405162461bcd60e51b8152600401610ecc90614468565b600d546040516329b8573160e21b81526000916001600160a01b03169063a6e15cc490611eec9085908790600401614344565b60206040518083038186803b158015611f0457600080fd5b505afa158015611f18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3c91906142a0565b905060008111611f5e5760405162461bcd60e51b8152600401610ecc9061477d565b6000611f7a60646118f26018548561382490919063ffffffff16565b9050611f8682826138ab565b601a54909250610100900460ff168015611fa257506000601854115b15611fd457601154611fbe906001600160a01b031630836136b9565b601054611fd4906001600160a01b0316826138ed565b601154611feb906001600160a01b031684846136b9565b600d5460405163376db80160e11b81526001600160a01b0390911690636edb70029061201d9086908890600401614344565b602060405180830381600087803b15801561203757600080fd5b505af115801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f91906142a0565b5050505050565b6005546001600160a01b031633146120a05760405162461bcd60e51b8152600401610ecc90614b2d565b601b55565b6005546001600160a01b031633146120cf5760405162461bcd60e51b8152600401610ecc90614b2d565b602155565b6005546001600160a01b031633146120fe5760405162461bcd60e51b8152600401610ecc90614b2d565b601855565b600d546001600160a01b031681565b60185481565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461215d5760405162461bcd60e51b8152600401610ecc90614b2d565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146121d15760405162461bcd60e51b8152600401610ecc90614b2d565b600d54604051633ee278b960e21b81526001600160a01b039091169063fb89e2e490612201908490600401614e1b565b600060405180830381600087803b15801561221b57600080fd5b505af115801561206f573d6000803e3d6000fd5b6005546001600160a01b031633146122595760405162461bcd60e51b8152600401610ecc90614b2d565b600d5460405163cece91eb60e01b81526001600160a01b039091169063cece91eb90612201908490600401614e1b565b600d546040805163b8527aef60e01b815290516000926001600160a01b03169163b8527aef916004808301926020929190829003018186803b15801561101657600080fd5b6013546001600160a01b031681565b6005546001600160a01b031633146123075760405162461bcd60e51b8152600401610ecc90614b2d565b61231030612118565b8111156123235761232030612118565b90505b61232c8161393c565b50565b6005546001600160a01b031633146123595760405162461bcd60e51b8152600401610ecc90614b2d565b6016819055601554601454610ef6918391610ef0916132db565b6000600a828154811061239657634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031692915050565b6005546001600160a01b031633146123db5760405162461bcd60e51b8152600401610ecc90614b2d565b601955565b60215481565b6005546001600160a01b031690565b6005546001600160a01b0316331461241f5760405162461bcd60e51b8152600401610ecc90614b2d565b6015819055601654601454610ef69190610ef090846132db565b6003815111801561244b575060148151105b6124675760405162461bcd60e51b8152600401610ecc90614524565b33806124855760405162461bcd60e51b8152600401610ecc90614a9e565b6001600160a01b0381166000908152601d602052604090205460ff16156124be5760405162461bcd60e51b8152600401610ecc906149ff565b6010546001600160a01b038281169116148015906124ea57506011546001600160a01b03828116911614155b6125065760405162461bcd60e51b8152600401610ecc906149a2565b600d5460408051631e3fd85760e31b815290516000926001600160a01b03169163f1fec2b8916004808301926020929190829003018186803b15801561254b57600080fd5b505afa15801561255f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258391906142a0565b90508061258f83612118565b10156125ad5760405162461bcd60e51b8152600401610ecc906148cc565b60006125b830612118565b601b54909150811080159081906125d65750601a54610100900460ff165b80156125e55750601a5460ff16155b801561260a57506125f46123e6565b6001600160a01b0316846001600160a01b031614155b801561262f57506001600160a01b0384166000908152601f602052604090205460ff16155b156126c657601a805460ff19166001179055601454600090612659906064906118f2908690613824565b6011549091506126749030906001600160a01b0316836136b9565b600061269060646118f26015548761382490919063ffffffff16565b905061269b81613ac1565b6011546126b9906001600160a01b03166126b430612118565b6138ed565b5050601a805460ff191690555b6126d18430856136b9565b600d54604051634810cb9960e11b81526001600160a01b03909116906390219732906127069087908990600090600401614377565b600060405180830381600087803b15801561272057600080fd5b505af1158015612734573d6000803e3d6000fd5b505050505050505050565b6005546001600160a01b031633146127695760405162461bcd60e51b8152600401610ecc90614b2d565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b600d54604080516305a19d0960e11b815290516000926001600160a01b031691630b433a12916004808301926020929190829003018186803b15801561101657600080fd5b606060048054610e1f90614fbf565b6001600160a01b031660009081526009602052604090205490565b6005546001600160a01b031633146128245760405162461bcd60e51b8152600401610ecc90614b2d565b6112618282613b42565b6001600160a01b0381166000908152602260209081526040808320805482518185028101850190935280835260609492939192909184015b828210156128c0578382906000526020600020906004020160405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505081526020019060010190612866565b505050509050919050565b6000610f0933846112d4856040518060600160405280602581526020016150b3602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061367f565b600d5460408051631e3fd85760e31b815290516000926001600160a01b03169163f1fec2b8916004808301926020929190829003018186803b15801561101657600080fd5b6010546001600160a01b031681565b6000610f093384846134a5565b6005546001600160a01b031633146129a55760405162461bcd60e51b8152600401610ecc90614b2d565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b60165481565b601f6020526000908152604090205460ff1681565b6005546000906001600160a01b03163314612a0f5760405162461bcd60e51b8152600401610ecc90614b2d565b600d546040516330cd31af60e11b81526001600160a01b039091169063619a635e90612a3f908590600401614330565b60206040518083038186803b158015612a5757600080fd5b505afa158015612a6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0d91906142a0565b606033612aae5760405162461bcd60e51b8152600401610ecc906146ac565b600d5460405163041ac82b60e41b81526001600160a01b03909116906341ac82b090612ade903390600401614330565b60206040518083038186803b158015612af657600080fd5b505afa158015612b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b2e919061417a565b612b4a5760405162461bcd60e51b8152600401610ecc906144fd565b600d546040516364940ce760e11b81526001600160a01b039091169063c92819ce9061150b903390600401614330565b60038251118015612b8c575060208251105b612ba85760405162461bcd60e51b8152600401610ecc90614524565b3380612bc65760405162461bcd60e51b8152600401610ecc90614a9e565b6001600160a01b0381166000908152601d602052604090205460ff1615612bff5760405162461bcd60e51b8152600401610ecc906149ff565b6010546001600160a01b03828116911614801590612c2b57506011546001600160a01b03828116911614155b612c475760405162461bcd60e51b8152600401610ecc906149a2565b60018210158015612c595750601e8211155b612c755760405162461bcd60e51b8152600401610ecc90614b62565b6000612c848362015180614f5d565b90506000601c612c95600186614f7c565b81548110612cb357634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910154600d5460408051631e3fd85760e31b815290519295506001600160a01b039091169263f1fec2b892600480840193829003018186803b158015612d0357600080fd5b505afa158015612d17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d3b91906142a0565b9050612d478282614f25565b612d5085612118565b1015612d6e5760405162461bcd60e51b8152600401610ecc906148cc565b6000612d7930612118565b601b5490915081108015908190612d975750601a54610100900460ff165b8015612da65750601a5460ff16155b8015612dcb5750612db56123e6565b6001600160a01b0316866001600160a01b031614155b8015612df057506001600160a01b0386166000908152601f602052604090205460ff16155b15612e8257601a805460ff19166001179055601454600090612e1a906064906118f2908690613824565b601154909150612e359030906001600160a01b0316836136b9565b6000612e5160646118f26015548761382490919063ffffffff16565b9050612e5c81613ac1565b601154612e75906001600160a01b03166126b430612118565b5050601a805460ff191690555b612e968630612e918787614f25565b6136b9565b612ea08386613bd5565b600d54604051634810cb9960e11b81526001600160a01b0390911690639021973290612ed49089908c908a90600401614377565b600060405180830381600087803b158015612eee57600080fd5b505af1158015612f02573d6000803e3d6000fd5b505050505050505050505050565b6011546001600160a01b031681565b6001600160a01b031660009081526008602052604090205490565b6005546001600160a01b03163314612f645760405162461bcd60e51b8152600401610ecc90614b2d565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b6001600160a01b03166000908152600b602052604090205490565b6005546001600160a01b03163314612fd45760405162461bcd60e51b8152600401610ecc90614b2d565b6001600160a01b03919091166000908152601d60205260409020805460ff1916911515919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146130545760405162461bcd60e51b8152600401610ecc90614b2d565b600d54604051630a1cb8e360e21b81526001600160a01b0390911690632872e38c90612201908490600401614e1b565b6005546001600160a01b031633146130ae5760405162461bcd60e51b8152600401610ecc90614b2d565b6020805460ff1916911515919091179055565b60075490565b6060336130e65760405162461bcd60e51b8152600401610ecc906146ac565b600d5460405163041ac82b60e41b81526001600160a01b03909116906341ac82b090613116903390600401614330565b60206040518083038186803b15801561312e57600080fd5b505afa158015613142573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613166919061417a565b6131825760405162461bcd60e51b8152600401610ecc906144fd565b600d54604051632bacfd8160e11b81526001600160a01b0390911690635759fb029061150b903390600401614330565b6005546001600160a01b031633146131dc5760405162461bcd60e51b8152600401610ecc90614b2d565b6001600160a01b0381166132025760405162461bcd60e51b8152600401610ecc90614559565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600d5460405163112469f960e21b81526000916001600160a01b031690634491a7e490612a3f908590600401614330565b6005546001600160a01b031633146132b95760405162461bcd60e51b8152600401610ecc90614b2d565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000806132e88385614f25565b9050838110156112dd5760405162461bcd60e51b8152600401610ecc906145e1565b6001600160a01b0383166133305760405162461bcd60e51b8152600401610ecc90614c67565b6001600160a01b0382166133565760405162461bcd60e51b8152600401610ecc9061459f565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906133b1908590614e1b565b60405180910390a3505050565b6006546001600160a01b038416600090815260086020526040812054909183916133e89086614f5d565b6133f29190614f3d565b6133fc9190614f7c565b949350505050565b804710156134245760405162461bcd60e51b8152600401610ecc906147cb565b6000826001600160a01b03168260405161343d9061432d565b60006040518083038185875af1925050503d806000811461347a576040519150601f19603f3d011682016040523d82523d6000602084013e61347f565b606091505b50509050806134a05760405162461bcd60e51b8152600401610ecc90614720565b505050565b6001600160a01b0383166134cb5760405162461bcd60e51b8152600401610ecc90614bd6565b6001600160a01b0382166134f15760405162461bcd60e51b8152600401610ecc906144ba565b6001600160a01b0383166000908152601d602052604090205460ff1615801561353357506001600160a01b0382166000908152601d602052604090205460ff16155b61354f5760405162461bcd60e51b8152600401610ecc90614975565b6135576123e6565b6001600160a01b0316836001600160a01b031614158015613591575061357b6123e6565b6001600160a01b0316826001600160a01b031614155b80156135a657506001600160a01b0383163014155b80156135bb57506001600160a01b0382163014155b80156135e057506001600160a01b0383166000908152601e602052604090205460ff16155b801561360557506001600160a01b0382166000908152601e602052604090205460ff16155b156136745760215481111561362c5760405162461bcd60e51b8152600401610ecc90614ce2565b60205460ff16801561364b5750600f546001600160a01b038481169116145b15613674576001600160a01b0382166000908152601d60205260409020805460ff191660011790555b6134a08383836136b9565b600081848411156136a35760405162461bcd60e51b8152600401610ecc9190614455565b5060006136b08486614f7c565b95945050505050565b6001600160a01b0383166136df5760405162461bcd60e51b8152600401610ecc90614bd6565b6001600160a01b0382166137055760405162461bcd60e51b8152600401610ecc906144ba565b6137108383836134a0565b61374d81604051806060016040528060268152602001615065602691396001600160a01b038616600090815260208190526040902054919061367f565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461377c90826132db565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906133b1908590614e1b565b6134a08363a9059cbb60e01b84846040516024016137ed929190614344565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613c87565b60008261383357506000610f0d565b600061383f8385614f5d565b90508261384c8583614f3d565b146112dd5760405162461bcd60e51b8152600401610ecc90614aec565b60006112dd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d16565b60006112dd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061367f565b476138f78261393c565b600061390347836138ab565b6040519091506001600160a01b0385169082156108fc029083906000818181858888f1935050505015801561206f573d6000803e3d6000fd5b604080516002808252606082018352600092602083019080368337019050509050308160008151811061397f57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600e54604080516339d94ae160e11b8152905191909316926373b295c2926004808301939192829003018186803b1580156139d357600080fd5b505afa1580156139e7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0b9190613fcb565b81600181518110613a2c57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600e54613a52913091168461330a565b600e54604051633b158ab160e11b81526001600160a01b039091169063762b156290613a8b908590600090869030904290600401614e24565b600060405180830381600087803b158015613aa557600080fd5b505af1158015613ab9573d6000803e3d6000fd5b505050505050565b6000613ace826002613869565b90506000613adc83836138ab565b905047613ae88361393c565b6000613af447836138ab565b9050613b008382613d44565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051613b3393929190614e94565b60405180910390a15050505050565b6001600160a01b0382166000908152601f602052604090205460ff1615158115151415613b815760405162461bcd60e51b8152600401610ecc90614918565b6001600160a01b0382166000818152601f6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6023805433916000919082613be983614ffa565b91905055905060226000836001600160a01b03166001600160a01b0316815260200190815260200160002060405180608001604052804281526020018542613c319190614f25565b815260208082019790975260409081019390935281546001818101845560009384529287902082516004909202019081559581015191860191909155908101516002850155606001516003909301929092555050565b6000613cdc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613deb9092919063ffffffff16565b8051909150156134a05780806020019051810190613cfa919061417a565b6134a05760405162461bcd60e51b8152600401610ecc90614d32565b60008183613d375760405162461bcd60e51b8152600401610ecc9190614455565b5060006136b08486614f3d565b600e54613d5c9030906001600160a01b03168461330a565b600e54604051637c8d9fb960e11b81526001600160a01b039091169063f91b3f72908390613d9990309087906000908190819042906004016143ab565b6060604051808303818588803b158015613db257600080fd5b505af1158015613dc6573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061206f91906142b8565b60606133fc848460008585613dff85613e94565b613e1b5760405162461bcd60e51b8152600401610ecc90614cab565b600080866001600160a01b03168587604051613e379190614311565b60006040518083038185875af1925050503d8060008114613e74576040519150601f19603f3d011682016040523d82523d6000602084013e613e79565b606091505b5091509150613e89828286613ec5565b979650505050505050565b600080826001600160a01b0316803b806020016040519081016040528181526000908060200190933c511192915050565b60608315613ed45750816112dd565b825115613ee45782518084602001fd5b8160405162461bcd60e51b8152600401610ecc9190614455565b828054828255906000526020600020908101928215613f39579160200282015b82811115613f39578251825591602001919060010190613f1e565b50613f45929150613f49565b5090565b5b80821115613f455760008155600101613f4a565b600082601f830112613f6e578081fd5b8135613f81613f7c82614efd565b614ed3565b818152846020838601011115613f95578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215613fc0578081fd5b81356112dd81615041565b600060208284031215613fdc578081fd5b81516112dd81615041565b60008060408385031215613ff9578081fd5b823561400481615041565b9150602083013561401481615041565b809150509250929050565b600080600060608486031215614033578081fd5b833561403e81615041565b9250602084013561404e81615041565b929592945050506040919091013590565b60008060408385031215614071578182fd5b823561407c81615041565b9150602083013561401481615056565b6000806040838503121561409e578182fd5b82356140a981615041565b946020939093013593505050565b600060208083850312156140c9578182fd5b823567ffffffffffffffff808211156140e0578384fd5b818501915085601f8301126140f3578384fd5b8135818111156141055761410561502b565b8381029150614115848301614ed3565b8181528481019084860184860187018a101561412f578788fd5b8795505b83861015614151578035835260019590950194918601918601614133565b5098975050505050505050565b60006020828403121561416f578081fd5b81356112dd81615056565b60006020828403121561418b578081fd5b81516112dd81615056565b60008060408385031215613ff9578182fd5b6000602082840312156141b9578081fd5b813567ffffffffffffffff8111156141cf578182fd5b6133fc84828501613f5e565b6000602082840312156141ec578081fd5b815167ffffffffffffffff811115614202578182fd5b8201601f81018413614212578182fd5b8051614220613f7c82614efd565b818152856020838501011115614234578384fd5b6136b0826020830160208601614f93565b60008060408385031215614257578182fd5b823567ffffffffffffffff81111561426d578283fd5b61427985828601613f5e565b95602094909401359450505050565b600060208284031215614299578081fd5b5035919050565b6000602082840312156142b1578081fd5b5051919050565b6000806000606084860312156142cc578081fd5b8351925060208401519150604084015190509250925092565b600081518084526142fd816020860160208601614f93565b601f01601f19169290920160200192915050565b60008251614323818460208701614f93565b9190910192915050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b038416815260606020820181905260009061439b908301856142e5565b9050826040830152949350505050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b602080825282518282018190526000919060409081850190868401855b8281101561443d57815180518552868101518786015285810151868601526060908101519085015260809093019290850190600101614403565b5091979650505050505050565b901515815260200190565b6000602082526112dd60208301846142e5565b60208082526032908201527f435348543a20667574757220616e642072657761726473506f6f6c2063616e6e6040820152716f7420636173686f7574207265776172647360701b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252600d908201526c2727902727a2229027aba722a960991b604082015260600190565b6020808252818101527f4e4f4445204352454154494f4e3a204e414d452053495a4520494e56414c4944604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526025908201527f435348543a20206372656174696f6e2066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602f908201527f596f7520617265206e6f7420656c696769626c6520746f20636c61696d20746860408201526e1a5cc81c1bdcda5d1a5bdb881e595d608a1b606082015260800190565b60208082526014908201527353454e4445522043414e2754204245205a45524f60601b604082015260600190565b60208082526026908201527f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060408201526573686172657360d01b606082015260800190565b6020808252603a908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260408201527f6563697069656e74206d61792068617665207265766572746564000000000000606082015260800190565b6020808252602e908201527f435348543a20596f7520646f6e2774206861766520656e6f756768207265776160408201526d1c99081d1bc818d85cda081bdd5d60921b606082015260800190565b6020808252601d908201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604082015260600190565b6020808252602b908201527f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060408201526a191d59481c185e5b595b9d60aa1b606082015260800190565b6020808252601f908201527f4d414e494120435348543a20426c61636b6c6973746564206164647265737300604082015260600190565b60208082526028908201527f544b4e3a2054686520726f7574657220616c7265616479206861732074686174604082015267206164647265737360c01b606082015260800190565b6020808252602c908201527f4e4f4445204352454154494f4e3a2042616c616e636520746f6f206c6f77206660408201526b37b91031b932b0ba34b7b71760a11b606082015260800190565b6020808252603d908201527f544b4e3a204175746f6d61746564206d61726b6574206d616b6572207061697260408201527f20697320616c72656164792073657420746f20746861742076616c7565000000606082015260800190565b602080825260139082015272426c61636b6c6973746564206164647265737360681b604082015260600190565b60208082526037908201527f4e4f4445204352454154494f4e3a20667574757220616e64207265776172647360408201527f506f6f6c2063616e6e6f7420637265617465206e6f6465000000000000000000606082015260800190565b60208082526022908201527f4e4f4445204352454154494f4e3a20426c61636b6c6973746564206164647265604082015261737360f01b606082015260800190565b60208082526038908201527f4d414e494120435348543a20667574757220616e642072657761726473506f6f60408201527f6c2063616e6e6f7420636173686f757420726577617264730000000000000000606082015260800190565b6020808252602e908201527f4e4f4445204352454154494f4e3a20206372656174696f6e2066726f6d20746860408201526d65207a65726f206164647265737360901b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f5374616b652074696d65206d757374206265206265747765656e203120616e64604082015267203330206461797360c01b606082015260800190565b6020808252601290820152714d7573742068617665203330206974656d7360701b604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602c908201527f5468657265206973206e6f7468696e6720746f20636c61696d2066726f6d207460408201526b3434b9903837b9b4ba34b7b760a11b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526030908201527f506c65617365207472616e7366657220756e64657220746865206d617820747260408201526f185b9cd858dd1a5bdb88185b5bdd5b9d60821b606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252602b908201527f4d414e494120435348543a20206372656174696f6e2066726f6d20746865207a60408201526a65726f206164647265737360a81b606082015260800190565b60208082526034908201527f4d414e494120435348543a20596f7520646f6e2774206861766520656e6f75676040820152731a081c995dd85c99081d1bc818d85cda081bdd5d60621b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015614e735784516001600160a01b031683529383019391830191600101614e4e565b50506001600160a01b03969096166060850152505050608001529392505050565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715614ef557614ef561502b565b604052919050565b600067ffffffffffffffff821115614f1757614f1761502b565b50601f01601f191660200190565b60008219821115614f3857614f38615015565b500190565b600082614f5857634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615614f7757614f77615015565b500290565b600082821015614f8e57614f8e615015565b500390565b60005b83811015614fae578181015183820152602001614f96565b8381111561141a5750506000910152565b600281046001821680614fd357607f821691505b60208210811415614ff457634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561500e5761500e615015565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461232c57600080fd5b801515811461232c57600080fdfe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b047a4d4cb59110be03b835f089e6b77cc1c9c88642153e8c74ea66f2523882864736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000003600000000000000000000000000000000000000000000000000000000000000480000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000060ae616a2155ee3d9a68541ba4544862310933d4000000000000000000000000facf8166d2d8f9a16ca2966f1b407564947f778d00000000000000000000000000000000000000000000000000000000000000040000000000000000000000006a6f2aeef4807546094ebe8240db27f080ce22950000000000000000000000008025241defa2f6e9cde1d0b494fa355024d0f7f2000000000000000000000000ae640d231eb2ebc7fd50142c441a31ba4b5b09fc00000000000000000000000075f9b0d1a96ff7057b962c3557757798a074f81e0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001900000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000001900000000000000000000000000000000000000000000000000000000000000080000000000000000000000006a6f2aeef4807546094ebe8240db27f080ce22950000000000000000000000008025241defa2f6e9cde1d0b494fa355024d0f7f2000000000000000000000000ae640d231eb2ebc7fd50142c441a31ba4b5b09fc00000000000000000000000075f9b0d1a96ff7057b962c3557757798a074f81e000000000000000000000000f421c71cd4fad50ec1c9957411965611ca7d1af00000000000000000000000003dddd320ba6133989ff4cd421946b2e1b1756dea0000000000000000000000001a4c49cf5d526edaf8955c176ed3ca5531d1270e000000000000000000000000000000000000000000000000000000000000dead00000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000035b600000000000000000000000000000000000000000000000000000000000035b600000000000000000000000000000000000000000000000000000000000035b600000000000000000000000000000000000000000000000000000000000035b60000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000186a00000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000128e2e700000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001e
-----Decoded View---------------
Arg [0] : payees (address[]): 0x6a6F2AEef4807546094ebE8240dB27F080CE2295,0x8025241DEfA2F6E9CdE1d0b494fA355024d0f7f2,0xaE640d231eb2eBc7fD50142c441a31BA4B5b09Fc,0x75f9B0d1A96ff7057b962C3557757798A074F81E
Arg [1] : shares (uint256[]): 25,25,25,25
Arg [2] : addresses (address[]): 0x6a6F2AEef4807546094ebE8240dB27F080CE2295,0x8025241DEfA2F6E9CdE1d0b494fA355024d0f7f2,0xaE640d231eb2eBc7fD50142c441a31BA4B5b09Fc,0x75f9B0d1A96ff7057b962C3557757798A074F81E,0xF421C71CD4Fad50eC1C9957411965611CA7D1aF0,0x3ddDd320bA6133989FF4Cd421946b2E1B1756dEA,0x1A4C49cf5d526edaf8955c176ED3cA5531D1270E,0x000000000000000000000000000000000000dEaD
Arg [3] : balances (uint256[]): 220000,220000,220000,220000,10000,100000,10000,19456743
Arg [4] : fees (uint256[]): 2,42,10,10,30
Arg [5] : swapAmount (uint256): 30
Arg [6] : uniV2Router (address): 0x60aE616a2155Ee3d9A68541Ba4544862310933d4
Arg [7] : nodeManagement (address): 0xFAcF8166D2d8F9A16ca2966F1b407564947F778d
-----Encoded View---------------
42 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000240
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000360
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000480
Arg [5] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [6] : 00000000000000000000000060ae616a2155ee3d9a68541ba4544862310933d4
Arg [7] : 000000000000000000000000facf8166d2d8f9a16ca2966f1b407564947f778d
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [9] : 0000000000000000000000006a6f2aeef4807546094ebe8240db27f080ce2295
Arg [10] : 0000000000000000000000008025241defa2f6e9cde1d0b494fa355024d0f7f2
Arg [11] : 000000000000000000000000ae640d231eb2ebc7fd50142c441a31ba4b5b09fc
Arg [12] : 00000000000000000000000075f9b0d1a96ff7057b962c3557757798a074f81e
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [16] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [19] : 0000000000000000000000006a6f2aeef4807546094ebe8240db27f080ce2295
Arg [20] : 0000000000000000000000008025241defa2f6e9cde1d0b494fa355024d0f7f2
Arg [21] : 000000000000000000000000ae640d231eb2ebc7fd50142c441a31ba4b5b09fc
Arg [22] : 00000000000000000000000075f9b0d1a96ff7057b962c3557757798a074f81e
Arg [23] : 000000000000000000000000f421c71cd4fad50ec1c9957411965611ca7d1af0
Arg [24] : 0000000000000000000000003dddd320ba6133989ff4cd421946b2e1b1756dea
Arg [25] : 0000000000000000000000001a4c49cf5d526edaf8955c176ed3ca5531d1270e
Arg [26] : 000000000000000000000000000000000000000000000000000000000000dead
Arg [27] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [28] : 0000000000000000000000000000000000000000000000000000000000035b60
Arg [29] : 0000000000000000000000000000000000000000000000000000000000035b60
Arg [30] : 0000000000000000000000000000000000000000000000000000000000035b60
Arg [31] : 0000000000000000000000000000000000000000000000000000000000035b60
Arg [32] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [33] : 00000000000000000000000000000000000000000000000000000000000186a0
Arg [34] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [35] : 000000000000000000000000000000000000000000000000000000000128e2e7
Arg [36] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [37] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [38] : 000000000000000000000000000000000000000000000000000000000000002a
Arg [39] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [40] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [41] : 000000000000000000000000000000000000000000000000000000000000001e
Deployed Bytecode Sourcemap
59311:20184:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44189:38;44205:10;44217:9;44189:38;;;;;;;:::i;:::-;;;;;;;;59311:20184;;;;;20190:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;64525:166;;;;;;;;;;-1:-1:-1;64525:166:0;;;;;:::i;:::-;;:::i;:::-;;22496:208;;;;;;;;;;-1:-1:-1;22496:208:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;76211:321::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;60161:43::-;;;;;;;;;;-1:-1:-1;60161:43:0;;;;;:::i;:::-;;:::i;64185:104::-;;;;;;;;;;-1:-1:-1;64185:104:0;;;;;:::i;:::-;;:::i;59609:71::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;59868:24::-;;;;;;;;;;;;;:::i;59460:35::-;;;;;;;;;;;;;:::i;21310:108::-;;;;;;;;;;;;;:::i;46005:618::-;;;;;;;;;;-1:-1:-1;46005:618:0;;;;;:::i;:::-;;:::i;79328:164::-;;;;;;;;;;-1:-1:-1;79328:164:0;;;;;:::i;:::-;;:::i;60111:46::-;;;;;;;;;;-1:-1:-1;60111:46:0;;;;;:::i;:::-;;:::i;23186:450::-;;;;;;;;;;-1:-1:-1;23186:450:0;;;;;:::i;:::-;;:::i;60499:57::-;;;;;;;;;;-1:-1:-1;60499:57:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;59768:25::-;;;;;;;;;;;;;:::i;21152:93::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24045:296::-;;;;;;;;;;-1:-1:-1;24045:296:0;;;;;:::i;:::-;;:::i;44318:91::-;;;;;;;;;;;;;:::i;69319:468::-;;;;;;;;;;-1:-1:-1;69319:468:0;;;;;:::i;:::-;;:::i;77867:331::-;;;;;;;;;;;;;:::i;45447:167::-;;;;;;;;;;-1:-1:-1;45447:167:0;;;;;:::i;:::-;;:::i;46891:704::-;;;;;;;;;;-1:-1:-1;46891:704:0;;;;;:::i;:::-;;:::i;59505:28::-;;;;;;;;;;;;;:::i;78889:128::-;;;;;;;;;;;;;:::i;74666:1074::-;;;;;;;;;;;;;:::i;59800:31::-;;;;;;;;;;;;;:::i;75748:96::-;;;;;;;;;;-1:-1:-1;75748:96:0;;;;;:::i;:::-;;:::i;78206:333::-;;;;;;;;;;;;;:::i;76538:163::-;;;;;;;;;;-1:-1:-1;76538:163:0;;;;;:::i;:::-;;:::i;60038:31::-;;;;;;;;;;;;;:::i;77396:126::-;;;;;;;;;;;;;:::i;63572:486::-;;;;;;;;;;-1:-1:-1;63572:486:0;;;;;:::i;:::-;;:::i;73574:1084::-;;;;;;;;;;-1:-1:-1;73574:1084:0;;;;;:::i;:::-;;:::i;64066:111::-;;;;;;;;;;-1:-1:-1;64066:111:0;;;;;:::i;:::-;;:::i;65254:90::-;;;;;;;;;;-1:-1:-1;65254:90:0;;;;;:::i;:::-;;:::i;65051:97::-;;;;;;;;;;-1:-1:-1;65051:97:0;;;;;:::i;:::-;;:::i;59403:48::-;;;;;;;;;;;;;:::i;59901:25::-;;;;;;;;;;;;;:::i;21481:177::-;;;;;;;;;;-1:-1:-1;21481:177:0;;;;;:::i;:::-;;:::i;15421:148::-;;;;;;;;;;;;;:::i;76972:140::-;;;;;;;;;;-1:-1:-1;76972:140:0;;;;;:::i;:::-;;:::i;76709:134::-;;;;;;;;;;-1:-1:-1;76709:134:0;;;;;:::i;:::-;;:::i;79025:128::-;;;;;;;;;;;;;:::i;59689:70::-;;;;;;;;;;;;;:::i;79159:161::-;;;;;;;;;;-1:-1:-1;79159:161:0;;;;;:::i;:::-;;:::i;64881:162::-;;;;;;;;;;-1:-1:-1;64881:162:0;;;;;:::i;:::-;;:::i;45705:100::-;;;;;;;;;;-1:-1:-1;45705:100:0;;;;;:::i;:::-;;:::i;65156:92::-;;;;;;;;;;-1:-1:-1;65156:92:0;;;;;:::i;:::-;;:::i;60317:42::-;;;;;;;;;;;;;:::i;14781:79::-;;;;;;;;;;;;;:::i;64699:174::-;;;;;;;;;;-1:-1:-1;64699:174:0;;;;;:::i;:::-;;:::i;69796:1737::-;;;;;;;;;;-1:-1:-1;69796:1737:0;;;;;:::i;:::-;;:::i;64297:110::-;;;;;;;;;;-1:-1:-1;64297:110:0;;;;;:::i;:::-;;:::i;77120:120::-;;;;;;;;;;;;;:::i;20409:104::-;;;;;;;;;;;;;:::i;45169:109::-;;;;;;;;;;-1:-1:-1;45169:109:0;;;;;:::i;:::-;;:::i;65446:163::-;;;;;;;;;;-1:-1:-1;65446:163:0;;;;;:::i;:::-;;:::i;68826:136::-;;;;;;;;;;-1:-1:-1;68826:136:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;24844:396::-;;;;;;;;;;-1:-1:-1;24844:396:0;;;;;:::i;:::-;;:::i;76851:112::-;;;;;;;;;;;;;:::i;59540:27::-;;;;;;;;;;;;;:::i;21871:214::-;;;;;;;;;;-1:-1:-1;21871:214:0;;;;;:::i;:::-;;:::i;64412:105::-;;;;;;;;;;-1:-1:-1;64412:105:0;;;;;:::i;:::-;;:::i;59838:23::-;;;;;;;;;;;;;:::i;60211:57::-;;;;;;;;;;-1:-1:-1;60211:57:0;;;;;:::i;:::-;;:::i;76004:199::-;;;;;;;;;;-1:-1:-1;76004:199:0;;;;;:::i;:::-;;:::i;77530:331::-;;;;;;;;;;;;;:::i;71539:2026::-;;;;;;;;;;-1:-1:-1;71539:2026:0;;;;;:::i;:::-;;:::i;59574:31::-;;;;;;;;;;;;;:::i;44965:105::-;;;;;;;;;;-1:-1:-1;44965:105:0;;;;;:::i;:::-;;:::i;65772:141::-;;;;;;;;;;-1:-1:-1;65772:141:0;;;;;:::i;:::-;;:::i;44755:119::-;;;;;;;;;;-1:-1:-1;44755:119:0;;;;;:::i;:::-;;:::i;65617:149::-;;;;;;;;;;-1:-1:-1;65617:149:0;;;;;:::i;:::-;;:::i;22148:201::-;;;;;;;;;;-1:-1:-1;22148:201:0;;;;;:::i;:::-;;:::i;77248:140::-;;;;;;;;;;-1:-1:-1;77248:140:0;;;;;:::i;:::-;;:::i;65350:87::-;;;;;;;;;;-1:-1:-1;65350:87:0;;;;;:::i;:::-;;:::i;44503:95::-;;;;;;;;;;;;;:::i;78547:334::-;;;;;;;;;;;;;:::i;15724:281::-;;;;;;;;;;-1:-1:-1;15724:281:0;;;;;:::i;:::-;;:::i;75852:144::-;;;;;;;;;;-1:-1:-1;75852:144:0;;;;;:::i;:::-;;:::i;63416:148::-;;;;;;;;;;-1:-1:-1;63416:148:0;;;;;:::i;:::-;;:::i;20190:100::-;20244:13;20277:5;20270:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20190:100;:::o;64525:166::-;14993:6;;-1:-1:-1;;;;;14993:6:0;15003:10;14993:20;14985:65;;;;-1:-1:-1;;;14985:65:0;;;;;;;:::i;:::-;;;;;;;;;64596:10:::1;:18:::0;;;64674:8:::1;::::0;64652:16:::1;::::0;64637:46:::1;::::0;64674:8;64637:32:::1;::::0;64609:5;;64637:14:::1;:32::i;:::-;:36:::0;::::1;:46::i;:::-;64625:9;:58:::0;-1:-1:-1;64525:166:0:o;22496:208::-;22615:4;22637:37;22646:10;22658:7;22667:6;22637:8;:37::i;:::-;-1:-1:-1;22692:4:0;22496:208;;;;;:::o;76211:321::-;76259:7;76287:10;76279:57;;;;-1:-1:-1;;;76279:57:0;;;;;;;:::i;:::-;76369:20;;:45;;-1:-1:-1;;;76369:45:0;;-1:-1:-1;;;;;76369:20:0;;;;:33;;:45;;76403:10;;76369:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;76347:108;;;;-1:-1:-1;;;76347:108:0;;;;;;;:::i;:::-;76473:20;;:51;;-1:-1:-1;;;76473:51:0;;-1:-1:-1;;;;;76473:20:0;;;;:39;;:51;;76513:10;;76473:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;76466:58;;76211:321;:::o;60161:43::-;;;;;;;;;;;;;;;:::o;64185:104::-;14993:6;;-1:-1:-1;;;;;14993:6:0;15003:10;14993:20;14985:65;;;;-1:-1:-1;;;14985:65:0;;;;;;;:::i;:::-;64262:12:::1;:19:::0;;-1:-1:-1;;;;;;64262:19:0::1;-1:-1:-1::0;;;;;64262:19:0;;;::::1;::::0;;;::::1;::::0;;64185:104::o;59609:71::-;;;-1:-1:-1;;;;;59609:71:0;;:::o;59868:24::-;;;;:::o;59460:35::-;;;-1:-1:-1;;;;;59460:35:0;;:::o;21310:108::-;21398:12;;21310:108;:::o;46005:618::-;-1:-1:-1;;;;;46081:16:0;;46100:1;46081:16;;;:7;:16;;;;;;46073:71;;;;-1:-1:-1;;;46073:71:0;;;;;;;:::i;:::-;46157:21;46205:15;:13;:15::i;:::-;46181:39;;:21;:39;:::i;:::-;46157:63;;46231:15;46249:108;46279:7;46301:13;46329:17;46338:7;46329:8;:17::i;:::-;46249:15;:108::i;:::-;46231:126;-1:-1:-1;46378:12:0;46370:68;;;;-1:-1:-1;;;46370:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46451:18:0;;;;;;:9;:18;;;;;:29;;46473:7;;46451:18;:29;;46473:7;;46451:29;:::i;:::-;;;;;;;;46509:7;46491:14;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;46529:35:0;;-1:-1:-1;46547:7:0;46556;46529:17;:35::i;:::-;46582:33;46598:7;46607;46582:33;;;;;;;:::i;:::-;;;;;;;;46005:618;;;:::o;79328:164::-;14993:6;;-1:-1:-1;;;;;14993:6:0;15003:10;14993:20;14985:65;;;;-1:-1:-1;;;14985:65:0;;;;;;;:::i;:::-;79396:21:::1;79387:6;:30;79383:66;;;-1:-1:-1::0;79428:21:0::1;79383:66;79462:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;79454:25:0::1;:33;79480:6;79454:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;79328:164:::0;:::o;60111:46::-;;;;;;;;;;;;;;;:::o;23186:450::-;23326:4;23343:36;23353:6;23361:9;23372:6;23343:9;:36::i;:::-;23390:216;23413:6;23434:10;23459:136;23513:6;23459:136;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23459:19:0;;;;;;:11;:19;;;;;;;;23479:10;23459:31;;;;;;;;;:136;:35;:136::i;:::-;23390:8;:216::i;:::-;-1:-1:-1;23624:4:0;23186:450;;;;;;:::o;60499:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;60499:57:0;-1:-1:-1;60499:57:0;:::o;59768:25::-;;;;:::o;21152:93::-;21235:2;21152:93;:::o;24045:296::-;24205:10;24160:4;24252:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;24252:32:0;;;;;;;;;;24160:4;;24182:129;;24230:7;;24252:48;;24289:10;24252:36;:48::i;44318:91::-;44389:12;;44318:91;:::o;69319:468::-;69396:10;69379:14;69444:22;;;:14;:22;;;;;:29;;69467:5;;69444:29;;;;-1:-1:-1;;;69444:29:0;;;;;;;;;;;;;;;;;;;69411:62;;69509:15;69486:8;:19;;;:38;;69478:98;;;;-1:-1:-1;;;69478:98:0;;;;;;;:::i;:::-;69608:1;69589:8;:16;;;:20;69581:77;;;;-1:-1:-1;;;69581:77:0;;;;;;;:::i;:::-;69684:16;;;;;69667:14;69705:20;;;69746:11;;69730:48;;-1:-1:-1;;;;;69746:11:0;69759:10;69684:16;69730:15;:48::i;:::-;69319:468;;;;:::o;77867:331::-;77918:13;77952:10;77944:57;;;;-1:-1:-1;;;77944:57:0;;;;;;;:::i;:::-;78034:20;;:45;;-1:-1:-1;;;78034:45:0;;-1:-1:-1;;;;;78034:20:0;;;;:33;;:45;;78068:10;;78034:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;78012:108;;;;-1:-1:-1;;;78012:108:0;;;;;;;:::i;:::-;78138:20;;:52;;-1:-1:-1;;;78138:52:0;;-1:-1:-1;;;;;78138:20:0;;;;:40;;:52;;78179:10;;78138:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;78138:52:0;;;;;;;;;;;;:::i;45447:167::-;-1:-1:-1;;;;;45576:21:0;;;45544:7;45576:21;;;:14;:21;;;;;;;;:30;;;;;;;;;;;;;45447:167::o;46891:704::-;-1:-1:-1;;;;;46973:16:0;;46992:1;46973:16;;;:7;:16;;;;;;46965:71;;;;-1:-1:-1;;;46965:71:0;;;;;;;:::i;:::-;47049:21;47119:20;47133:5;47119:13;:20::i;:::-;47073:30;;-1:-1:-1;;;47073:30:0;;-1:-1:-1;;;;;47073:15:0;;;;;:30;;47097:4;;47073:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:66;;;;:::i;:::-;47049:90;;47150:15;47168:115;47198:7;47220:13;47248:24;47257:5;47264:7;47248:8;:24::i;47168:115::-;47150:133;-1:-1:-1;47304:12:0;47296:68;;;;-1:-1:-1;;;47296:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47377:21:0;;;;;;;:14;:21;;;;;;;;:30;;;;;;;;;;;:41;;47411:7;;47377:21;:41;;47411:7;;47377:41;:::i;:::-;;;;-1:-1:-1;;;;;;;47429:26:0;;;;;;:19;:26;;;;;:37;;47459:7;;47429:26;:37;;47459:7;;47429:37;:::i;:::-;;;;-1:-1:-1;47479:47:0;;-1:-1:-1;47502:5:0;47509:7;47518;47479:22;:47::i;:::-;47563:5;-1:-1:-1;;;;;47542:45:0;;47570:7;47579;47542:45;;;;;;;:::i;:::-;;;;;;;;46891:704;;;;:::o;59505:28::-;;;-1:-1:-1;;;;;59505:28:0;;:::o;78889:128::-;78969:20;;:40;;;-1:-1:-1;;;78969:40:0;;;;78942:7;;-1:-1:-1;;;;;78969:20:0;;:38;;:40;;;;;;;;;;;;;;:20;:40;;;;;;;;;;74666:1074;74723:10;74766:20;74744:113;;;;-1:-1:-1;;;74744:113:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;74877:22:0;;;;;;:14;:22;;;;;;;;74876:23;74868:67;;;;-1:-1:-1;;;74868:67:0;;;;;;;:::i;:::-;74978:12;;-1:-1:-1;;;;;74968:22:0;;;74978:12;;74968:22;;;;:52;;-1:-1:-1;75004:16:0;;-1:-1:-1;;;;;74994:26:0;;;75004:16;;74994:26;;74968:52;74946:158;;;;-1:-1:-1;;;74946:158:0;;;;;;;:::i;:::-;75138:20;;:47;;-1:-1:-1;;;75138:47:0;;75115:20;;-1:-1:-1;;;;;75138:20:0;;:39;;:47;;75178:6;;75138:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;75115:70;;75233:1;75218:12;:16;75196:118;;;;-1:-1:-1;;;75196:118:0;;;;;;;:::i;:::-;75329:17;75349:37;75382:3;75349:28;75366:10;;75349:12;:16;;:28;;;;:::i;:::-;:32;;:37::i;:::-;75329:57;-1:-1:-1;75406:27:0;:12;75329:57;75406:16;:27::i;:::-;75450:11;;75391:42;;-1:-1:-1;75450:11:0;;;;;:29;;;;;75478:1;75465:10;;:14;75450:29;75446:159;;;75503:16;;75487:59;;-1:-1:-1;;;;;75503:16:0;75529:4;75536:9;75487:15;:59::i;:::-;75569:12;;75552:41;;-1:-1:-1;;;;;75569:12:0;75583:9;75552:16;:41::i;:::-;75631:16;;75615:55;;-1:-1:-1;;;;;75631:16:0;75649:6;75657:12;75615:15;:55::i;:::-;75681:20;;:51;;-1:-1:-1;;;75681:51:0;;-1:-1:-1;;;;;75681:20:0;;;;:43;;:51;;75725:6;;75681:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;59800:31::-;;;;:::o;75748:96::-;14993:6;;-1:-1:-1;;;;;14993:6:0;15003:10;14993:20;14985:65;;;;-1:-1:-1;;;14985:65:0;;;;;;;:::i;:::-;75816:11:::1;:20:::0;;;::::1;;;;-1:-1:-1::0;;75816:20:0;;::::1;::::0;;;::::1;::::0;;75748:96::o;78206:333::-;78254:13;78288:10;78280:57;;;;-1:-1:-1;;;78280:57:0;;;;;;;:::i;:::-;78370:20;;:45;;-1:-1:-1;;;78370:45:0;;-1:-1:-1;;;;;78370:20:0;;;;:33;;:45;;78404:10;;78370:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;78348:108;;;;-1:-1:-1;;;78348:108:0;;;;;;;:::i;:::-;78474:20;;:57;;-1:-1:-1;;;78474:57:0;;-1:-1:-1;;;;;78474:20:0;;;;:45;;:57;;78520:10;;78474:57;;;:::i;76538:163::-;14993:6;;-1:-1:-1;;;;;14993:6:0;15003:10;14993:20;14985:65;;;;-1:-1:-1;;;14985:65:0;;;;;;;:::i;:::-;76622:11:::1;:18;76644:2;76622:24;76614:55;;;;-1:-1:-1::0;;;76614:55:0::1;;;;;;;:::i;:::-;76674:22:::0;;::::1;::::0;:8:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;60038:31::-:0;;;;:::o;77396:126::-;77475:20;;:39;;;-1:-1:-1;;;77475:39:0;;;;77448:7;;-1:-1:-1;;;;;77475:20:0;;:37;;:39;;;;;;;;;;;;;;:20;:39;;;;;;;;;;63572:486;14993:6;;-1:-1:-1;;;;;14993:6:0;15003:10;14993:20;14985:65;;;;-1:-1:-1;;;14985:65:0;;;;;;;:::i;:::-;63681:15:::1;::::0;-1:-1:-1;;;;;63659:38:0;;::::1;63681:15:::0;::::1;63659:38;;63651:91;;;;-1:-1:-1::0;;;63651:91:0::1;;;;;;;:::i;:::-;63800:15;::::0;63758:59:::1;::::0;-1:-1:-1;;;;;63800:15:0;;::::1;::::0;63758:59;::::1;::::0;::::1;::::0;63800:15:::1;::::0;63758:59:::1;63828:15;:42:::0;;-1:-1:-1;;;;;;63828:42:0::1;-1:-1:-1::0;;;;;63828:42:0;;::::1;::::0;;;::::1;::::0;;;;63918:25:::1;::::0;;-1:-1:-1;;;63918:25:0;;;;-1:-1:-1;;63918:15:0;;::::1;::::0;:23:::1;::::0;:25:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;:15;:25;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;63906:63:0::1;;63978:4;63985:15;;;;;;;;;-1:-1:-1::0;;;;;63985:15:0::1;-1:-1:-1::0;;;;;63985:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;63906:103;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;64020:13;:30:::0;;-1:-1:-1;;;;;;64020:30:0::1;-1:-1:-1::0;;;;;64020:30:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;63572:486:0:o;73574:1084::-;73651:10;73680:20;73672:70;;;;-1:-1:-1;;;73672:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;73762:22:0;;;;;;:14;:22;;;;;;;;73761:23;73753:67;;;;-1:-1:-1;;;73753:67:0;;;;;;;:::i;:::-;73863:12;;-1:-1:-1;;;;;73853:22:0;;;73863:12;;73853:22;;;;:52;;-1:-1:-1;73889:16:0;;-1:-1:-1;;;;;73879:26:0;;;73889:16;;73879:26;;73853:52;73831:152;;;;-1:-1:-1;;;73831:152:0;;;;;;;:::i;:::-;74017:20;;:95;;-1:-1:-1;;;74017:95:0;;73994:20;;-1:-1:-1;;;;;74017:20:0;;:39;;:95;;74071:6;;74092:9;;74017:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;73994:118;;74160:1;74145:12;:16;74123:112;;;;-1:-1:-1;;;74123:112:0;;;;;;;:::i;:::-;74242:17;74262:37;74295:3;74262:28;74279:10;;74262:12;:16;;:28;;;;:::i;:37::-;74242:57;-1:-1:-1;74319:27:0;:12;74242:57;74319:16;:27::i;:::-;74361:11;;74304:42;;-1:-1:-1;74361:11:0;;;;;:29;;;;;74389:1;74376:10;;:14;74361:29;74357:159;;;74414:16;;74398:59;;-1:-1:-1;;;;;74414:16:0;74440:4;74447:9;74398:15;:59::i;:::-;74480:12;;74463:41;;-1:-1:-1;;;;;74480:12:0;74494:9;74463:16;:41::i;:::-;74542:16;;74526:55;;-1:-1:-1;;;;;74542:16:0;74560:6;74568:12;74526:15;:55::i;:::-;74592:20;;:58;;-1:-1:-1;;;74592:58:0;;-1:-1:-1;;;;;74592:20:0;;;;:39;;:58;;74632:6;;74640:9;;74592:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;73574:1084;;;;:::o;64066:111::-;14993:6;;-1:-1:-1;;;;;14993:6:0;15003:10;14993:20;14985:65;;;;-1:-1:-1;;;14985:65:0;;;;;;;:::i;:::-;64144:16:::1;:25:::0;64066:111::o;65254:90::-;14993:6;;-1:-1:-1;;;;;14993:6:0;15003:10;14993:20;14985:65;;;;-1:-1:-1;;;14985:65:0;;;;;;;:::i;:::-;65320:11:::1;:19:::0;65254:90::o;65051:97::-;14993:6;;-1:-1:-1;;;;;14993:6:0;15003:10;14993:20;14985:65;;;;-1:-1:-1;;;14985:65:0;;;;;;;:::i;:::-;65122:10:::1;:18:::0;65051:97::o;59403:48::-;;;-1:-1:-1;;;;;59403:48:0;;:::o;59901:25::-;;;;:::o;21481:177::-;-1:-1:-1;;;;;21632:18:0;21600:7;21632:18;;;;;;;;;;;;21481:177::o;15421:148::-;14993:6;;-1:-1:-1;;;;;14993:6:0;15003:10;14993:20;14985:65;;;;-1:-1:-1;;;14985:65:0;;;;;;;:::i;:::-;15512:6:::1;::::0;15491:40:::1;::::0;15528:1:::1;::::0;-1:-1:-1;;;;;15512:6:0::1;::::0;15491:40:::1;::::0;15528:1;;15491:40:::1;15542:6;:19:::0;;-1:-1:-1;;;;;;15542:19:0::1;::::0;;15421:148::o;76972:140::-;14993:6;;-1:-1:-1;;;;;14993:6:0;15003:10;14993:20;14985:65;;;;-1:-1:-1;;;14985:65:0;;;;;;;:::i;:::-;77050:20:::1;::::0;:54:::1;::::0;-1:-1:-1;;;77050:54:0;;-1:-1:-1;;;;;77050:20:0;;::::1;::::0;:41:::1;::::0;:54:::1;::::0;77092:11;;77050:54:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;76709:134:::0;14993:6;;-1:-1:-1;;;;;14993:6:0;15003:10;14993:20;14985:65;;;;-1:-1:-1;;;14985:65:0;;;;;;;:::i;:::-;76784:20:::1;::::0;:51:::1;::::0;-1:-1:-1;;;76784:51:0;;-1:-1:-1;;;;;76784:20:0;;::::1;::::0;:37:::1;::::0;:51:::1;::::0;76822:12;;76784:51:::1;;;:::i;79025:128::-:0;79105:20;;:40;;;-1:-1:-1;;;79105:40:0;;;;79078:7;;-1:-1:-1;;;;;79105:20:0;;:38;;:40;;;;;;;;;;;;;;:20;:40;;;;;;;;;;59689:70;;;-1:-1:-1;;;;;59689:70:0;;:::o;79159:161::-;14993:6;;-1:-1:-1;;;;;14993:6:0;15003:10;14993:20;14985:65;;;;-1:-1:-1;;;14985:65:0;;;;;;;:::i;:::-;79227:24:::1;79245:4;79227:9;:24::i;:::-;79218:6;:33;79214:72;;;79262:24;79280:4;79262:9;:24::i;:::-;79253:33;;79214:72;79291:24;79308:6;79291:16;:24::i;:::-;79159:161:::0;:::o;64881:162::-;14993:6;;-1:-1:-1;;;;;14993:6:0;15003:10;14993:20;14985:65;;;;-1:-1:-1;;;14985:65:0;;;;;;;:::i;:::-;64950:8:::1;:16:::0;;;65004::::1;::::0;64989:10:::1;::::0;:46:::1;::::0;64961:5;;64989:32:::1;::::0;:14:::1;:32::i;45705:100::-:0;45756:7;45783;45791:5;45783:14;;;;;;-1:-1:-1;;;45783:14:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;45783:14:0;;45705:100;-1:-1:-1;;45705:100:0:o;65156:92::-;14993:6;;-1:-1:-1;;;;;14993:6:0;15003:10;14993:20;14985:65;;;;-1:-1:-1;;;14985:65:0;;;;;;;:::i;:::-;65226:6:::1;:14:::0;65156:92::o;60317:42::-;;;;:::o;14781:79::-;14846:6;;-1:-1:-1;;;;;14846:6:0;14781:79;:::o;64699:174::-;14993:6;;-1:-1:-1;;;;;14993:6:0;15003:10;14993:20;14985:65;;;;-1:-1:-1;;;14985:65:0;;;;;;;:::i;:::-;64772:16:::1;:24:::0;;;64856:8:::1;::::0;64819:10:::1;::::0;:46:::1;::::0;64856:8;64819:32:::1;::::0;64791:5;64819:14:::1;:32::i;69796:1737::-:0;69893:1;69878:4;69872:18;:22;:49;;;;;69919:2;69904:4;69898:18;:23;69872:49;69864:94;;;;-1:-1:-1;;;69864:94:0;;;;;;;:::i;:::-;69990:10;70025:20;70017:79;;;;-1:-1:-1;;;70017:79:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;70122:22:0;;;;;;:14;:22;;;;;;;;70121:23;70113:70;;;;-1:-1:-1;;;70113:70:0;;;;;;;:::i;:::-;70216:12;;-1:-1:-1;;;;;70206:22:0;;;70216:12;;70206:22;;;;:52;;-1:-1:-1;70242:16:0;;-1:-1:-1;;;;;70232:26:0;;;70242:16;;70232:26;;70206:52;70198:120;;;;-1:-1:-1;;;70198:120:0;;;;;;;:::i;:::-;70353:20;;:32;;;-1:-1:-1;;;70353:32:0;;;;70333:17;;-1:-1:-1;;;;;70353:20:0;;:30;;:32;;;;;;;;;;;;;;:20;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;70333:52;;70419:9;70398:17;70408:6;70398:9;:17::i;:::-;:30;;70390:87;;;;-1:-1:-1;;;70390:87:0;;;;;;;:::i;:::-;70488:28;70519:24;70537:4;70519:9;:24::i;:::-;70598:16;;70488:55;;-1:-1:-1;70574:40:0;;;;;;;70645;;-1:-1:-1;70674:11:0;;;;;;;70645:40;:66;;;;-1:-1:-1;70703:8:0;;;;70702:9;70645:66;:100;;;;;70738:7;:5;:7::i;:::-;-1:-1:-1;;;;;70728:17:0;:6;-1:-1:-1;;;;;70728:17:0;;;70645:100;:151;;;;-1:-1:-1;;;;;;70763:33:0;;;;;;:25;:33;;;;;;;;70762:34;70645:151;70627:780;;;70823:8;:15;;-1:-1:-1;;70823:15:0;70834:4;70823:15;;;70926:10;;70823:8;;70883:81;;70960:3;;70883:54;;:20;;:42;:54::i;:81::-;71051:16;;70855:109;;-1:-1:-1;70985:133:0;;71027:4;;-1:-1:-1;;;;;71051:16:0;70855:109;70985:15;:133::i;:::-;71138:18;71159:83;71224:3;71159:42;71184:16;;71159:20;:24;;:42;;;;:::i;:83::-;71138:104;;71259:26;71274:10;71259:14;:26::i;:::-;71319:16;;71302:60;;-1:-1:-1;;;;;71319:16:0;71337:24;71355:4;71337:9;:24::i;:::-;71302:16;:60::i;:::-;-1:-1:-1;;71379:8:0;:16;;-1:-1:-1;;71379:16:0;;;70627:780;71417:49;71433:6;71449:4;71456:9;71417:15;:49::i;:::-;71477:20;;:48;;-1:-1:-1;;;71477:48:0;;-1:-1:-1;;;;;71477:20:0;;;;:31;;:48;;71509:6;;71517:4;;71477:20;;:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;69796:1737;;;;;:::o;64297:110::-;14993:6;;-1:-1:-1;;;;;14993:6:0;15003:10;14993:20;14985:65;;;;-1:-1:-1;;;14985:65:0;;;;;;;:::i;:::-;64376:16:::1;:23:::0;;-1:-1:-1;;;;;;64376:23:0::1;-1:-1:-1::0;;;;;64376:23:0;;;::::1;::::0;;;::::1;::::0;;64297:110::o;77120:120::-;77196:20;;:36;;;-1:-1:-1;;;77196:36:0;;;;77169:7;;-1:-1:-1;;;;;77196:20:0;;:34;;:36;;;;;;;;;;;;;;:20;:36;;;;;;;;;;20409:104;20465:13;20498:7;20491:14;;;;;:::i;45169:109::-;-1:-1:-1;;;;;45252:18:0;45225:7;45252:18;;;:9;:18;;;;;;;45169:109::o;65446:163::-;14993:6;;-1:-1:-1;;;;;14993:6:0;15003:10;14993:20;14985:65;;;;-1:-1:-1;;;14985:65:0;;;;;;;:::i;:::-;65560:41:::1;65589:4;65595:5;65560:28;:41::i;68826:136::-:0;-1:-1:-1;;;;;68935:22:0;;;;;;:14;:22;;;;;;;;68928:29;;;;;;;;;;;;;;;;;68890:32;;68928:29;;68935:22;;68928:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;68826:136;;;:::o;24844:396::-;24964:4;24986:224;25009:10;25034:7;25056:143;25111:15;25056:143;;;;;;;;;;;;;;;;;25068:10;25056:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;25056:32:0;;;;;;;;;;;:143;:36;:143::i;76851:112::-;76923:20;;:32;;;-1:-1:-1;;;76923:32:0;;;;76896:7;;-1:-1:-1;;;;;76923:20:0;;:30;;:32;;;;;;;;;;;;;;:20;:32;;;;;;;;;;59540:27;;;-1:-1:-1;;;;;59540:27:0;;:::o;21871:214::-;21993:4;22015:40;22025:10;22037:9;22048:6;22015:9;:40::i;64412:105::-;14993:6;;-1:-1:-1;;;;;14993:6:0;15003:10;14993:20;14985:65;;;;-1:-1:-1;;;14985:65:0;;;;;;;:::i;:::-;64491:11:::1;:18:::0;;-1:-1:-1;;;;;;64491:18:0::1;-1:-1:-1::0;;;;;64491:18:0;;;::::1;::::0;;;::::1;::::0;;64412:105::o;59838:23::-;;;;:::o;60211:57::-;;;;;;;;;;;;;;;:::o;76004:199::-;14993:6;;76115:7;;-1:-1:-1;;;;;14993:6:0;15003:10;14993:20;14985:65;;;;-1:-1:-1;;;14985:65:0;;;;;;;:::i;:::-;76147:20:::1;::::0;:48:::1;::::0;-1:-1:-1;;;76147:48:0;;-1:-1:-1;;;;;76147:20:0;;::::1;::::0;:39:::1;::::0;:48:::1;::::0;76187:7;;76147:48:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;77530:331::-:0;77579:13;77613:10;77605:57;;;;-1:-1:-1;;;77605:57:0;;;;;;;:::i;:::-;77695:20;;:45;;-1:-1:-1;;;77695:45:0;;-1:-1:-1;;;;;77695:20:0;;;;:33;;:45;;77729:10;;77695:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;77673:108;;;;-1:-1:-1;;;77673:108:0;;;;;;;:::i;:::-;77799:20;;:54;;-1:-1:-1;;;77799:54:0;;-1:-1:-1;;;;;77799:20:0;;;;:42;;:54;;77842:10;;77799:54;;;:::i;71539:2026::-;71662:1;71647:4;71641:18;:22;:49;;;;;71688:2;71673:4;71667:18;:23;71641:49;71633:94;;;;-1:-1:-1;;;71633:94:0;;;;;;;:::i;:::-;71759:10;71794:20;71786:79;;;;-1:-1:-1;;;71786:79:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;71891:22:0;;;;;;:14;:22;;;;;;;;71890:23;71882:70;;;;-1:-1:-1;;;71882:70:0;;;;;;;:::i;:::-;71985:12;;-1:-1:-1;;;;;71975:22:0;;;71985:12;;71975:22;;;;:52;;-1:-1:-1;72011:16:0;;-1:-1:-1;;;;;72001:26:0;;;72011:16;;72001:26;;71975:52;71967:120;;;;-1:-1:-1;;;71967:120:0;;;;;;;:::i;:::-;72119:1;72106:9;:14;;:33;;;;;72137:2;72124:9;:15;;72106:33;72098:86;;;;-1:-1:-1;;;72098:86:0;;;;;;;:::i;:::-;72193:16;72212:18;:9;72224:6;72212:18;:::i;:::-;72193:37;-1:-1:-1;72235:15:0;72253:8;72262:13;72274:1;72262:9;:13;:::i;:::-;72253:23;;;;;;-1:-1:-1;;;72253:23:0;;;;;;;;;;;;;;;;;;;;;72305:20;;:32;;;-1:-1:-1;;;72305:32:0;;;;72253:23;;-1:-1:-1;;;;;;72305:20:0;;;;:30;;:32;;;;;;;;;;:20;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;72285:52;-1:-1:-1;72371:19:0;72383:7;72285:52;72371:19;:::i;:::-;72350:17;72360:6;72350:9;:17::i;:::-;:40;;72342:97;;;;-1:-1:-1;;;72342:97:0;;;;;;;:::i;:::-;72450:28;72481:24;72499:4;72481:9;:24::i;:::-;72564:16;;72450:55;;-1:-1:-1;72540:40:0;;;;;;;72611;;-1:-1:-1;72640:11:0;;;;;;;72611:40;:66;;;;-1:-1:-1;72669:8:0;;;;72668:9;72611:66;:100;;;;;72704:7;:5;:7::i;:::-;-1:-1:-1;;;;;72694:17:0;:6;-1:-1:-1;;;;;72694:17:0;;;72611:100;:151;;;;-1:-1:-1;;;;;;72729:33:0;;;;;;:25;:33;;;;;;;;72728:34;72611:151;72593:780;;;72789:8;:15;;-1:-1:-1;;72789:15:0;72800:4;72789:15;;;72892:10;;72789:8;;72849:81;;72926:3;;72849:54;;:20;;:42;:54::i;:81::-;73017:16;;72821:109;;-1:-1:-1;72951:133:0;;72993:4;;-1:-1:-1;;;;;73017:16:0;72821:109;72951:15;:133::i;:::-;73104:18;73125:83;73190:3;73125:42;73150:16;;73125:20;:24;;:42;;;;:::i;:83::-;73104:104;;73225:26;73240:10;73225:14;:26::i;:::-;73285:16;;73268:60;;-1:-1:-1;;;;;73285:16:0;73303:24;73321:4;73303:9;:24::i;73268:60::-;-1:-1:-1;;73345:8:0;:16;;-1:-1:-1;;73345:16:0;;;72593:780;73387:59;73403:6;73419:4;73426:19;73438:7;73426:9;:19;:::i;:::-;73387:15;:59::i;:::-;73451:40;73471:9;73482:8;73451:19;:40::i;:::-;73502:20;;:55;;-1:-1:-1;;;73502:55:0;;-1:-1:-1;;;;;73502:20:0;;;;:31;;:55;;73534:6;;73542:4;;73548:8;;73502:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;71539:2026;;;;;;;;:::o;59574:31::-;;;-1:-1:-1;;;;;59574:31:0;;:::o;44965:105::-;-1:-1:-1;;;;;45046:16:0;45019:7;45046:16;;;:7;:16;;;;;;;44965:105::o;65772:141::-;14993:6;;-1:-1:-1;;;;;14993:6:0;15003:10;14993:20;14985:65;;;;-1:-1:-1;;;14985:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;65877:20:0;;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:28;;-1:-1:-1;;65877:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;65772:141::o;44755:119::-;-1:-1:-1;;;;;44840:26:0;44813:7;44840:26;;;:19;:26;;;;;;;44755:119::o;65617:149::-;14993:6;;-1:-1:-1;;;;;14993:6:0;15003:10;14993:20;14985:65;;;;-1:-1:-1;;;14985:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;65727:23:0;;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;65727:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;65617:149::o;22148:201::-;-1:-1:-1;;;;;22314:18:0;;;22282:7;22314:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;22148:201::o;77248:140::-;14993:6;;-1:-1:-1;;;;;14993:6:0;15003:10;14993:20;14985:65;;;;-1:-1:-1;;;14985:65:0;;;;;;;:::i;:::-;77326:20:::1;::::0;:54:::1;::::0;-1:-1:-1;;;77326:54:0;;-1:-1:-1;;;;;77326:20:0;;::::1;::::0;:44:::1;::::0;:54:::1;::::0;77371:8;;77326:54:::1;;;:::i;65350:87::-:0;14993:6;;-1:-1:-1;;;;;14993:6:0;15003:10;14993:20;14985:65;;;;-1:-1:-1;;;14985:65:0;;;;;;;:::i;:::-;65413:11:::1;:19:::0;;-1:-1:-1;;65413:19:0::1;::::0;::::1;;::::0;;;::::1;::::0;;65350:87::o;44503:95::-;44576:14;;44503:95;:::o;78547:334::-;78598:13;78632:10;78624:57;;;;-1:-1:-1;;;78624:57:0;;;;;;;:::i;:::-;78714:20;;:45;;-1:-1:-1;;;78714:45:0;;-1:-1:-1;;;;;78714:20:0;;;;:33;;:45;;78748:10;;78714:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;78692:108;;;;-1:-1:-1;;;78692:108:0;;;;;;;:::i;:::-;78818:20;;:55;;-1:-1:-1;;;78818:55:0;;-1:-1:-1;;;;;78818:20:0;;;;:43;;:55;;78862:10;;78818:55;;;:::i;15724:281::-;14993:6;;-1:-1:-1;;;;;14993:6:0;15003:10;14993:20;14985:65;;;;-1:-1:-1;;;14985:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15827:22:0;::::1;15805:110;;;;-1:-1:-1::0;;;15805:110:0::1;;;;;;;:::i;:::-;15952:6;::::0;15931:38:::1;::::0;-1:-1:-1;;;;;15931:38:0;;::::1;::::0;15952:6:::1;::::0;15931:38:::1;::::0;15952:6:::1;::::0;15931:38:::1;15980:6;:17:::0;;-1:-1:-1;;;;;;15980:17:0::1;-1:-1:-1::0;;;;;15980:17:0;;;::::1;::::0;;;::::1;::::0;;15724:281::o;75852:144::-;75942:20;;:46;;-1:-1:-1;;;75942:46:0;;75915:7;;-1:-1:-1;;;;;75942:20:0;;:37;;:46;;75980:7;;75942:46;;;:::i;63416:148::-;14993:6;;-1:-1:-1;;;;;14993:6:0;15003:10;14993:20;14985:65;;;;-1:-1:-1;;;14985:65:0;;;;;;;:::i;:::-;63497:20:::1;:59:::0;;-1:-1:-1;;;;;;63497:59:0::1;-1:-1:-1::0;;;;;63497:59:0;;;::::1;::::0;;;::::1;::::0;;63416:148::o;449:181::-;507:7;;539:5;543:1;539;:5;:::i;:::-;527:17;;568:1;563;:6;;555:46;;;;-1:-1:-1;;;555:46:0;;;;;;;:::i;28231:380::-;-1:-1:-1;;;;;28367:19:0;;28359:68;;;;-1:-1:-1;;;28359:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28446:21:0;;28438:68;;;;-1:-1:-1;;;28438:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28519:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;28571:32;;;;;28549:6;;28571:32;:::i;:::-;;;;;;;;28231:380;;;:::o;47773:261::-;47996:12;;-1:-1:-1;;;;;47976:16:0;;47919:7;47976:16;;;:7;:16;;;;;;47919:7;;48011:15;;47960:32;;:13;:32;:::i;:::-;47959:49;;;;:::i;:::-;:67;;;;:::i;:::-;47939:87;47773:261;-1:-1:-1;;;;47773:261:0:o;31686:317::-;31801:6;31776:21;:31;;31768:73;;;;-1:-1:-1;;;31768:73:0;;;;;;;:::i;:::-;31855:12;31873:9;-1:-1:-1;;;;;31873:14:0;31895:6;31873:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31854:52;;;31925:7;31917:78;;;;-1:-1:-1;;;31917:78:0;;;;;;;:::i;:::-;31686:317;;;:::o;66279:771::-;-1:-1:-1;;;;;66411:18:0;;66403:68;;;;-1:-1:-1;;;66403:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;66490:16:0;;66482:64;;;;-1:-1:-1;;;66482:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;66580:20:0;;;;;;:14;:20;;;;;;;;66579:21;:44;;;;-1:-1:-1;;;;;;66605:18:0;;;;;;:14;:18;;;;;;;;66604:19;66579:44;66557:113;;;;-1:-1:-1;;;66557:113:0;;;;;;;:::i;:::-;66699:7;:5;:7::i;:::-;-1:-1:-1;;;;;66691:15:0;:4;-1:-1:-1;;;;;66691:15:0;;;:32;;;;;66716:7;:5;:7::i;:::-;-1:-1:-1;;;;;66710:13:0;:2;-1:-1:-1;;;;;66710:13:0;;;66691:32;:57;;;;-1:-1:-1;;;;;;66727:21:0;;66743:4;66727:21;;66691:57;:80;;;;-1:-1:-1;;;;;;66752:19:0;;66766:4;66752:19;;66691:80;:102;;;;-1:-1:-1;;;;;;66776:17:0;;;;;;:11;:17;;;;;;;;66775:18;66691:102;:122;;;;-1:-1:-1;;;;;;66798:15:0;;;;;;:11;:15;;;;;;;;66797:16;66691:122;66687:308;;;66839:11;;66829:6;:21;;66821:82;;;;-1:-1:-1;;;66821:82:0;;;;;;;:::i;:::-;66913:11;;;;:36;;;;-1:-1:-1;66936:13:0;;-1:-1:-1;;;;;66928:21:0;;;66936:13;;66928:21;66913:36;66909:81;;;-1:-1:-1;;;;;66958:18:0;;;;;;:14;:18;;;;;:25;;-1:-1:-1;;66958:25:0;66979:4;66958:25;;;66909:81;67009:33;67025:4;67031:2;67035:6;67009:15;:33::i;1352:226::-;1472:7;1508:12;1500:6;;;;1492:29;;;;-1:-1:-1;;;1492:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1532:9:0;1544:5;1548:1;1544;:5;:::i;:::-;1532:17;1352:226;-1:-1:-1;;;;;1352:226:0:o;25730:610::-;-1:-1:-1;;;;;25870:20:0;;25862:70;;;;-1:-1:-1;;;25862:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25951:23:0;;25943:71;;;;-1:-1:-1;;;25943:71:0;;;;;;;:::i;:::-;26027:47;26048:6;26056:9;26067:6;26027:20;:47::i;:::-;26107:108;26143:6;26107:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26107:17:0;;:9;:17;;;;;;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;26087:17:0;;;:9;:17;;;;;;;;;;;:128;;;;26249:20;;;;;;;:32;;26274:6;26249:24;:32::i;:::-;-1:-1:-1;;;;;26226:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;26297:35;;;;;;;;;;26325:6;;26297:35;:::i;37754:211::-;37871:86;37891:5;37921:23;;;37946:2;37950:5;37898:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;37898:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;37898:58:0;-1:-1:-1;;;;;;37898:58:0;;;;;;;;;;37871:19;:86::i;1837:471::-;1895:7;2140:6;2136:47;;-1:-1:-1;2170:1:0;2163:8;;2136:47;2195:9;2207:5;2211:1;2207;:5;:::i;:::-;2195:17;-1:-1:-1;2240:1:0;2231:5;2235:1;2195:17;2231:5;:::i;:::-;:10;2223:56;;;;-1:-1:-1;;;2223:56:0;;;;;;;:::i;2784:132::-;2842:7;2869:39;2873:1;2876;2869:39;;;;;;;;;;;;;;;;;:3;:39::i;913:136::-;971:7;998:43;1002:1;1005;998:43;;;;;;;;;;;;;;;;;:3;:43::i;67058:304::-;67168:21;67200:24;67217:6;67200:16;:24::i;:::-;67235:18;67256:46;67257:21;67284:17;67256:27;:46::i;:::-;67313:41;;67235:67;;-1:-1:-1;;;;;;67313:29:0;;;:41;;;;;67235:67;;67313:41;;;;67235:67;67313:29;:41;;;;;;;;;;;;;;;;;;;67796:498;67880:16;;;67894:1;67880:16;;;;;;;;67856:21;;67880:16;;;;;;;;;;-1:-1:-1;67880:16:0;67856:40;;67925:4;67907;67912:1;67907:7;;;;;;-1:-1:-1;;;67907:7:0;;;;;;;;;-1:-1:-1;;;;;67907:23:0;;;:7;;;;;;;;;;:23;;;;67951:15;;:23;;;-1:-1:-1;;;67951:23:0;;;;:15;;;;;:21;;:23;;;;;67907:7;;67951:23;;;;;:15;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;67941:4;67946:1;67941:7;;;;;;-1:-1:-1;;;67941:7:0;;;;;;;;;-1:-1:-1;;;;;67941:33:0;;;:7;;;;;;;;;:33;68019:15;;67987:62;;68004:4;;68019:15;68037:11;67987:8;:62::i;:::-;68064:15;;:225;;-1:-1:-1;;;68064:225:0;;-1:-1:-1;;;;;68064:15:0;;;;:67;;:225;;68146:11;;68064:15;;68216:4;;68243;;68263:15;;68064:225;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;67796:498;;:::o;67370:420::-;67429:12;67444:13;:6;67455:1;67444:10;:13::i;:::-;67429:28;-1:-1:-1;67468:17:0;67488:16;:6;67429:28;67488:10;:16::i;:::-;67468:36;-1:-1:-1;67542:21:0;67576:22;67593:4;67576:16;:22::i;:::-;67611:18;67632:41;:21;67658:14;67632:25;:41::i;:::-;67611:62;;67686:35;67699:9;67710:10;67686:12;:35::i;:::-;67739:43;67754:4;67760:10;67772:9;67739:43;;;;;;;;:::i;:::-;;;;;;;;67370:420;;;;;:::o;65921:350::-;-1:-1:-1;;;;;66026:31:0;;;;;;:25;:31;;;;;;;;:40;;;;;;;66004:151;;;;-1:-1:-1;;;66004:151:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;66166:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;66166:39:0;;;;;;;;;;66223:40;;66166:39;;:31;66223:40;;;65921:350;;:::o;68967:346::-;69100:18;:20;;69060:10;;69043:14;;69100:20;69043:14;69100:20;;;:::i;:::-;;;;;69079:41;;69125:14;:22;69140:6;-1:-1:-1;;;;;69125:22:0;-1:-1:-1;;;;;69125:22:0;;;;;;;;;;;;69158:145;;;;;;;;69193:15;69158:145;;;;69245:8;69227:15;:26;;;;:::i;:::-;69158:145;;;;;;;;;;;;;;;;;;69125:183;;;;;;;;-1:-1:-1;69125:183:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;68967:346:0:o;40327:716::-;40751:23;40777:69;40805:4;40777:69;;;;;;;;;;;;;;;;;40785:5;-1:-1:-1;;;;;40777:27:0;;;:69;;;;;:::i;:::-;40861:17;;40751:95;;-1:-1:-1;40861:21:0;40857:179;;40958:10;40947:30;;;;;;;;;;;;:::i;:::-;40939:85;;;;-1:-1:-1;;;40939:85:0;;;;;;;:::i;3412:312::-;3532:7;3567:12;3560:5;3552:28;;;;-1:-1:-1;;;3552:28:0;;;;;;;;:::i;:::-;-1:-1:-1;3591:9:0;3603:5;3607:1;3603;:5;:::i;68303:517::-;68483:15;;68451:62;;68468:4;;-1:-1:-1;;;;;68483:15:0;68501:11;68451:8;:62::i;:::-;68556:15;;:256;;-1:-1:-1;;;68556:256:0;;-1:-1:-1;;;;;68556:15:0;;;;:32;;68596:9;;68556:256;;68629:4;;68649:11;;68556:15;;;;;;68786;;68556:256;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33170:229::-;33307:12;33339:52;33361:6;33369:4;33375:1;33378:12;33307;34585:18;34596:6;34585:10;:18::i;:::-;34577:60;;;;-1:-1:-1;;;34577:60:0;;;;;;;:::i;:::-;34651:12;34665:23;34692:6;-1:-1:-1;;;;;34692:11:0;34711:5;34718:4;34692:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34650:73;;;;34741:51;34758:7;34767:10;34779:12;34741:16;:51::i;:::-;34734:58;34290:510;-1:-1:-1;;;;;;;34290:510:0:o;30425:326::-;30485:4;30742:1;30720:7;-1:-1:-1;;;;;30720:12:0;;;;;;;;;;;;;;;;;;;;;;;;:19;:23;;30425:326;-1:-1:-1;;30425:326:0:o;36976:712::-;37126:12;37155:7;37151:530;;;-1:-1:-1;37186:10:0;37179:17;;37151:530;37300:17;;:21;37296:374;;37498:10;37492:17;37559:15;37546:10;37542:2;37538:19;37531:44;37446:148;37641:12;37634:20;;-1:-1:-1;;;37634:20:0;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:487:1;;112:3;105:4;97:6;93:17;89:27;79:2;;134:5;127;120:20;79:2;174:6;161:20;205:50;220:34;251:2;220:34;:::i;:::-;205:50;:::i;:::-;280:2;271:7;264:19;326:3;319:4;314:2;306:6;302:15;298:26;295:35;292:2;;;347:5;340;333:20;292:2;416;409:4;401:6;397:17;390:4;381:7;377:18;364:55;439:16;;;457:4;435:27;428:42;;;;443:7;69:432;-1:-1:-1;;69:432:1:o;506:259::-;;618:2;606:9;597:7;593:23;589:32;586:2;;;639:6;631;624:22;586:2;683:9;670:23;702:33;729:5;702:33;:::i;770:263::-;;893:2;881:9;872:7;868:23;864:32;861:2;;;914:6;906;899:22;861:2;951:9;945:16;970:33;997:5;970:33;:::i;1310:402::-;;;1439:2;1427:9;1418:7;1414:23;1410:32;1407:2;;;1460:6;1452;1445:22;1407:2;1504:9;1491:23;1523:33;1550:5;1523:33;:::i;:::-;1575:5;-1:-1:-1;1632:2:1;1617:18;;1604:32;1645:35;1604:32;1645:35;:::i;:::-;1699:7;1689:17;;;1397:315;;;;;:::o;1717:470::-;;;;1863:2;1851:9;1842:7;1838:23;1834:32;1831:2;;;1884:6;1876;1869:22;1831:2;1928:9;1915:23;1947:33;1974:5;1947:33;:::i;:::-;1999:5;-1:-1:-1;2056:2:1;2041:18;;2028:32;2069:35;2028:32;2069:35;:::i;:::-;1821:366;;2123:7;;-1:-1:-1;;;2177:2:1;2162:18;;;;2149:32;;1821:366::o;2192:396::-;;;2318:2;2306:9;2297:7;2293:23;2289:32;2286:2;;;2339:6;2331;2324:22;2286:2;2383:9;2370:23;2402:33;2429:5;2402:33;:::i;:::-;2454:5;-1:-1:-1;2511:2:1;2496:18;;2483:32;2524;2483;2524;:::i;2593:327::-;;;2722:2;2710:9;2701:7;2697:23;2693:32;2690:2;;;2743:6;2735;2728:22;2690:2;2787:9;2774:23;2806:33;2833:5;2806:33;:::i;:::-;2858:5;2910:2;2895:18;;;;2882:32;;-1:-1:-1;;;2680:240:1:o;2925:1002::-;;3040:2;3083;3071:9;3062:7;3058:23;3054:32;3051:2;;;3104:6;3096;3089:22;3051:2;3149:9;3136:23;3178:18;3219:2;3211:6;3208:14;3205:2;;;3240:6;3232;3225:22;3205:2;3283:6;3272:9;3268:22;3258:32;;3328:7;3321:4;3317:2;3313:13;3309:27;3299:2;;3355:6;3347;3340:22;3299:2;3396;3383:16;3418:2;3414;3411:10;3408:2;;;3424:18;;:::i;:::-;3471:2;3467;3463:11;3453:21;;3494:27;3517:2;3513;3509:11;3494:27;:::i;:::-;3555:15;;;3586:12;;;;3618:11;;;3648;;;3644:20;;3641:33;-1:-1:-1;3638:2:1;;;3692:6;3684;3677:22;3638:2;3719:6;3710:15;;3734:163;3748:2;3745:1;3742:9;3734:163;;;3805:17;;3793:30;;3766:1;3759:9;;;;;3843:12;;;;3875;;3734:163;;;-1:-1:-1;3916:5:1;3020:907;-1:-1:-1;;;;;;;;3020:907:1:o;3932:253::-;;4041:2;4029:9;4020:7;4016:23;4012:32;4009:2;;;4062:6;4054;4047:22;4009:2;4106:9;4093:23;4125:30;4149:5;4125:30;:::i;4190:257::-;;4310:2;4298:9;4289:7;4285:23;4281:32;4278:2;;;4331:6;4323;4316:22;4278:2;4368:9;4362:16;4387:30;4411:5;4387:30;:::i;4731:417::-;;;4875:2;4863:9;4854:7;4850:23;4846:32;4843:2;;;4896:6;4888;4881:22;5153:344;;5275:2;5263:9;5254:7;5250:23;5246:32;5243:2;;;5296:6;5288;5281:22;5243:2;5341:9;5328:23;5374:18;5366:6;5363:30;5360:2;;;5411:6;5403;5396:22;5360:2;5439:52;5483:7;5474:6;5463:9;5459:22;5439:52;:::i;5502:677::-;;5635:2;5623:9;5614:7;5610:23;5606:32;5603:2;;;5656:6;5648;5641:22;5603:2;5694:9;5688:16;5727:18;5719:6;5716:30;5713:2;;;5764:6;5756;5749:22;5713:2;5792:22;;5845:4;5837:13;;5833:27;-1:-1:-1;5823:2:1;;5879:6;5871;5864:22;5823:2;5913;5907:9;5938:50;5953:34;5984:2;5953:34;:::i;5938:50::-;6011:2;6004:5;5997:17;6051:7;6046:2;6041;6037;6033:11;6029:20;6026:33;6023:2;;;6077:6;6069;6062:22;6023:2;6095:54;6146:2;6141;6134:5;6130:14;6125:2;6121;6117:11;6095:54;:::i;6184:412::-;;;6323:2;6311:9;6302:7;6298:23;6294:32;6291:2;;;6344:6;6336;6329:22;6291:2;6389:9;6376:23;6422:18;6414:6;6411:30;6408:2;;;6459:6;6451;6444:22;6408:2;6487:52;6531:7;6522:6;6511:9;6507:22;6487:52;:::i;:::-;6477:62;6586:2;6571:18;;;;6558:32;;-1:-1:-1;;;;6281:315:1:o;6601:190::-;;6713:2;6701:9;6692:7;6688:23;6684:32;6681:2;;;6734:6;6726;6719:22;6681:2;-1:-1:-1;6762:23:1;;6671:120;-1:-1:-1;6671:120:1:o;6796:194::-;;6919:2;6907:9;6898:7;6894:23;6890:32;6887:2;;;6940:6;6932;6925:22;6887:2;-1:-1:-1;6968:16:1;;6877:113;-1:-1:-1;6877:113:1:o;6995:316::-;;;;7152:2;7140:9;7131:7;7127:23;7123:32;7120:2;;;7173:6;7165;7158:22;7120:2;7207:9;7201:16;7191:26;;7257:2;7246:9;7242:18;7236:25;7226:35;;7301:2;7290:9;7286:18;7280:25;7270:35;;7110:201;;;;;:::o;7316:260::-;;7398:5;7392:12;7425:6;7420:3;7413:19;7441:63;7497:6;7490:4;7485:3;7481:14;7474:4;7467:5;7463:16;7441:63;:::i;:::-;7558:2;7537:15;-1:-1:-1;;7533:29:1;7524:39;;;;7565:4;7520:50;;7368:208;-1:-1:-1;;7368:208:1:o;7581:274::-;;7748:6;7742:13;7764:53;7810:6;7805:3;7798:4;7790:6;7786:17;7764:53;:::i;:::-;7833:16;;;;;7718:137;-1:-1:-1;;7718:137:1:o;7860:205::-;8060:3;8051:14::o;8070:203::-;-1:-1:-1;;;;;8234:32:1;;;;8216:51;;8204:2;8189:18;;8171:102::o;8278:282::-;-1:-1:-1;;;;;8478:32:1;;;;8460:51;;8542:2;8527:18;;8520:34;8448:2;8433:18;;8415:145::o;8565:304::-;-1:-1:-1;;;;;8795:15:1;;;8777:34;;8847:15;;8842:2;8827:18;;8820:43;8727:2;8712:18;;8694:175::o;8874:398::-;-1:-1:-1;;;;;9087:32:1;;9069:51;;9156:2;9151;9136:18;;9129:30;;;8874:398;;9176:47;;9204:18;;9196:6;9176:47;:::i;:::-;9168:55;;9259:6;9254:2;9243:9;9239:18;9232:34;9059:213;;;;;;:::o;9951:607::-;-1:-1:-1;;;;;10310:15:1;;;10292:34;;10357:2;10342:18;;10335:34;;;;10400:2;10385:18;;10378:34;;;;10443:2;10428:18;;10421:34;;;;10492:15;;;10486:3;10471:19;;10464:44;10272:3;10524:19;;10517:35;;;;10241:3;10226:19;;10208:350::o;10563:938::-;10796:2;10848:21;;;10918:13;;10821:18;;;10940:22;;;10563:938;;10796:2;10981;;10999:18;;;;11040:15;;;10563:938;11086:389;11100:6;11097:1;11094:13;11086:389;;;11159:13;;11197:9;;11185:22;;11247:11;;;11241:18;11227:12;;;11220:40;11300:11;;;11294:18;11280:12;;;11273:40;11336:4;11380:11;;;11374:18;11360:12;;;11353:40;11422:4;11413:14;;;;11450:15;;;;11122:1;11115:9;11086:389;;;-1:-1:-1;11492:3:1;;10776:725;-1:-1:-1;;;;;;;10776:725:1:o;11506:187::-;11671:14;;11664:22;11646:41;;11634:2;11619:18;;11601:92::o;12163:222::-;;12312:2;12301:9;12294:21;12332:47;12375:2;12364:9;12360:18;12352:6;12332:47;:::i;12390:414::-;12592:2;12574:21;;;12631:2;12611:18;;;12604:30;12670:34;12665:2;12650:18;;12643:62;-1:-1:-1;;;12736:2:1;12721:18;;12714:48;12794:3;12779:19;;12564:240::o;12809:399::-;13011:2;12993:21;;;13050:2;13030:18;;;13023:30;13089:34;13084:2;13069:18;;13062:62;-1:-1:-1;;;13155:2:1;13140:18;;13133:33;13198:3;13183:19;;12983:225::o;13213:337::-;13415:2;13397:21;;;13454:2;13434:18;;;13427:30;-1:-1:-1;;;13488:2:1;13473:18;;13466:43;13541:2;13526:18;;13387:163::o;13555:356::-;13757:2;13739:21;;;13776:18;;;13769:30;13835:34;13830:2;13815:18;;13808:62;13902:2;13887:18;;13729:182::o;13916:402::-;14118:2;14100:21;;;14157:2;14137:18;;;14130:30;14196:34;14191:2;14176:18;;14169:62;-1:-1:-1;;;14262:2:1;14247:18;;14240:36;14308:3;14293:19;;14090:228::o;14323:398::-;14525:2;14507:21;;;14564:2;14544:18;;;14537:30;14603:34;14598:2;14583:18;;14576:62;-1:-1:-1;;;14669:2:1;14654:18;;14647:32;14711:3;14696:19;;14497:224::o;14726:351::-;14928:2;14910:21;;;14967:2;14947:18;;;14940:30;15006:29;15001:2;14986:18;;14979:57;15068:2;15053:18;;14900:177::o;15082:401::-;15284:2;15266:21;;;15323:2;15303:18;;;15296:30;15362:34;15357:2;15342:18;;15335:62;-1:-1:-1;;;15428:2:1;15413:18;;15406:35;15473:3;15458:19;;15256:227::o;15488:411::-;15690:2;15672:21;;;15729:2;15709:18;;;15702:30;15768:34;15763:2;15748:18;;15741:62;-1:-1:-1;;;15834:2:1;15819:18;;15812:45;15889:3;15874:19;;15662:237::o;15904:344::-;16106:2;16088:21;;;16145:2;16125:18;;;16118:30;-1:-1:-1;;;16179:2:1;16164:18;;16157:50;16239:2;16224:18;;16078:170::o;16253:402::-;16455:2;16437:21;;;16494:2;16474:18;;;16467:30;16533:34;16528:2;16513:18;;16506:62;-1:-1:-1;;;16599:2:1;16584:18;;16577:36;16645:3;16630:19;;16427:228::o;16660:422::-;16862:2;16844:21;;;16901:2;16881:18;;;16874:30;16940:34;16935:2;16920:18;;16913:62;17011:28;17006:2;16991:18;;16984:56;17072:3;17057:19;;16834:248::o;17087:410::-;17289:2;17271:21;;;17328:2;17308:18;;;17301:30;17367:34;17362:2;17347:18;;17340:62;-1:-1:-1;;;17433:2:1;17418:18;;17411:44;17487:3;17472:19;;17261:236::o;17502:353::-;17704:2;17686:21;;;17743:2;17723:18;;;17716:30;17782:31;17777:2;17762:18;;17755:59;17846:2;17831:18;;17676:179::o;18267:407::-;18469:2;18451:21;;;18508:2;18488:18;;;18481:30;18547:34;18542:2;18527:18;;18520:62;-1:-1:-1;;;18613:2:1;18598:18;;18591:41;18664:3;18649:19;;18441:233::o;18679:355::-;18881:2;18863:21;;;18920:2;18900:18;;;18893:30;18959:33;18954:2;18939:18;;18932:61;19025:2;19010:18;;18853:181::o;19039:404::-;19241:2;19223:21;;;19280:2;19260:18;;;19253:30;19319:34;19314:2;19299:18;;19292:62;-1:-1:-1;;;19385:2:1;19370:18;;19363:38;19433:3;19418:19;;19213:230::o;19448:408::-;19650:2;19632:21;;;19689:2;19669:18;;;19662:30;19728:34;19723:2;19708:18;;19701:62;-1:-1:-1;;;19794:2:1;19779:18;;19772:42;19846:3;19831:19;;19622:234::o;19861:425::-;20063:2;20045:21;;;20102:2;20082:18;;;20075:30;20141:34;20136:2;20121:18;;20114:62;20212:31;20207:2;20192:18;;20185:59;20276:3;20261:19;;20035:251::o;20291:343::-;20493:2;20475:21;;;20532:2;20512:18;;;20505:30;-1:-1:-1;;;20566:2:1;20551:18;;20544:49;20625:2;20610:18;;20465:169::o;20639:419::-;20841:2;20823:21;;;20880:2;20860:18;;;20853:30;20919:34;20914:2;20899:18;;20892:62;20990:25;20985:2;20970:18;;20963:53;21048:3;21033:19;;20813:245::o;21063:398::-;21265:2;21247:21;;;21304:2;21284:18;;;21277:30;21343:34;21338:2;21323:18;;21316:62;-1:-1:-1;;;21409:2:1;21394:18;;21387:32;21451:3;21436:19;;21237:224::o;21466:420::-;21668:2;21650:21;;;21707:2;21687:18;;;21680:30;21746:34;21741:2;21726:18;;21719:62;21817:26;21812:2;21797:18;;21790:54;21876:3;21861:19;;21640:246::o;21891:410::-;22093:2;22075:21;;;22132:2;22112:18;;;22105:30;22171:34;22166:2;22151:18;;22144:62;-1:-1:-1;;;22237:2:1;22222:18;;22215:44;22291:3;22276:19;;22065:236::o;22306:397::-;22508:2;22490:21;;;22547:2;22527:18;;;22520:30;22586:34;22581:2;22566:18;;22559:62;-1:-1:-1;;;22652:2:1;22637:18;;22630:31;22693:3;22678:19;;22480:223::o;22708:356::-;22910:2;22892:21;;;22929:18;;;22922:30;22988:34;22983:2;22968:18;;22961:62;23055:2;23040:18;;22882:182::o;23069:404::-;23271:2;23253:21;;;23310:2;23290:18;;;23283:30;23349:34;23344:2;23329:18;;23322:62;-1:-1:-1;;;23415:2:1;23400:18;;23393:38;23463:3;23448:19;;23243:230::o;23478:342::-;23680:2;23662:21;;;23719:2;23699:18;;;23692:30;-1:-1:-1;;;23753:2:1;23738:18;;23731:48;23811:2;23796:18;;23652:168::o;23825:401::-;24027:2;24009:21;;;24066:2;24046:18;;;24039:30;24105:34;24100:2;24085:18;;24078:62;-1:-1:-1;;;24171:2:1;24156:18;;24149:35;24216:3;24201:19;;23999:227::o;24231:408::-;24433:2;24415:21;;;24472:2;24452:18;;;24445:30;24511:34;24506:2;24491:18;;24484:62;-1:-1:-1;;;24577:2:1;24562:18;;24555:42;24629:3;24614:19;;24405:234::o;24644:400::-;24846:2;24828:21;;;24885:2;24865:18;;;24858:30;24924:34;24919:2;24904:18;;24897:62;-1:-1:-1;;;24990:2:1;24975:18;;24968:34;25034:3;25019:19;;24818:226::o;25049:353::-;25251:2;25233:21;;;25290:2;25270:18;;;25263:30;25329:31;25324:2;25309:18;;25302:59;25393:2;25378:18;;25223:179::o;25407:412::-;25609:2;25591:21;;;25648:2;25628:18;;;25621:30;25687:34;25682:2;25667:18;;25660:62;-1:-1:-1;;;25753:2:1;25738:18;;25731:46;25809:3;25794:19;;25581:238::o;25824:406::-;26026:2;26008:21;;;26065:2;26045:18;;;26038:30;26104:34;26099:2;26084:18;;26077:62;-1:-1:-1;;;26170:2:1;26155:18;;26148:40;26220:3;26205:19;;25998:232::o;26235:407::-;26437:2;26419:21;;;26476:2;26456:18;;;26449:30;26515:34;26510:2;26495:18;;26488:62;-1:-1:-1;;;26581:2:1;26566:18;;26559:41;26632:3;26617:19;;26409:233::o;26647:416::-;26849:2;26831:21;;;26888:2;26868:18;;;26861:30;26927:34;26922:2;26907:18;;26900:62;-1:-1:-1;;;26993:2:1;26978:18;;26971:50;27053:3;27038:19;;26821:242::o;27068:177::-;27214:25;;;27202:2;27187:18;;27169:76::o;27250:983::-;;27560:3;27549:9;27545:19;27591:6;27580:9;27573:25;27617:2;27655:6;27650:2;27639:9;27635:18;27628:34;27698:3;27693:2;27682:9;27678:18;27671:31;27722:6;27757;27751:13;27788:6;27780;27773:22;27826:3;27815:9;27811:19;27804:26;;27865:2;27857:6;27853:15;27839:29;;27886:4;27899:195;27913:6;27910:1;27907:13;27899:195;;;27978:13;;-1:-1:-1;;;;;27974:39:1;27962:52;;28069:15;;;;28034:12;;;;28010:1;27928:9;27899:195;;;-1:-1:-1;;;;;;;28150:32:1;;;;28145:2;28130:18;;28123:60;-1:-1:-1;;;28214:3:1;28199:19;28192:35;28111:3;27521:712;-1:-1:-1;;;27521:712:1:o;28238:319::-;28440:25;;;28496:2;28481:18;;28474:34;;;;28539:2;28524:18;;28517:34;28428:2;28413:18;;28395:162::o;28562:391::-;28793:25;;;28849:2;28834:18;;28827:34;;;;28892:2;28877:18;;28870:34;28935:2;28920:18;;28913:34;28780:3;28765:19;;28747:206::o;28958:184::-;29130:4;29118:17;;;;29100:36;;29088:2;29073:18;;29055:87::o;29147:251::-;29217:2;29211:9;29247:17;;;29294:18;29279:34;;29315:22;;;29276:62;29273:2;;;29341:18;;:::i;:::-;29377:2;29370:22;29191:207;;-1:-1:-1;29191:207:1:o;29403:191::-;;29487:18;29479:6;29476:30;29473:2;;;29509:18;;:::i;:::-;-1:-1:-1;29577:2:1;29554:17;-1:-1:-1;;29550:31:1;29583:4;29546:42;;29463:131::o;29599:128::-;;29670:1;29666:6;29663:1;29660:13;29657:2;;;29676:18;;:::i;:::-;-1:-1:-1;29712:9:1;;29647:80::o;29732:217::-;;29798:1;29788:2;;-1:-1:-1;;;29823:31:1;;29877:4;29874:1;29867:15;29905:4;29830:1;29895:15;29788:2;-1:-1:-1;29934:9:1;;29778:171::o;29954:168::-;;30060:1;30056;30052:6;30048:14;30045:1;30042:21;30037:1;30030:9;30023:17;30019:45;30016:2;;;30067:18;;:::i;:::-;-1:-1:-1;30107:9:1;;30006:116::o;30127:125::-;;30195:1;30192;30189:8;30186:2;;;30200:18;;:::i;:::-;-1:-1:-1;30237:9:1;;30176:76::o;30257:258::-;30329:1;30339:113;30353:6;30350:1;30347:13;30339:113;;;30429:11;;;30423:18;30410:11;;;30403:39;30375:2;30368:10;30339:113;;;30470:6;30467:1;30464:13;30461:2;;;-1:-1:-1;;30505:1:1;30487:16;;30480:27;30310:205::o;30520:380::-;30605:1;30595:12;;30652:1;30642:12;;;30663:2;;30717:4;30709:6;30705:17;30695:27;;30663:2;30770;30762:6;30759:14;30739:18;30736:38;30733:2;;;30816:10;30811:3;30807:20;30804:1;30797:31;30851:4;30848:1;30841:15;30879:4;30876:1;30869:15;30733:2;;30575:325;;;:::o;30905:135::-;;-1:-1:-1;;30965:17:1;;30962:2;;;30985:18;;:::i;:::-;-1:-1:-1;31032:1:1;31021:13;;30952:88::o;31045:127::-;31106:10;31101:3;31097:20;31094:1;31087:31;31137:4;31134:1;31127:15;31161:4;31158:1;31151:15;31177:127;31238:10;31233:3;31229:20;31226:1;31219:31;31269:4;31266:1;31259:15;31293:4;31290:1;31283:15;31309:133;-1:-1:-1;;;;;31386:31:1;;31376:42;;31366:2;;31432:1;31429;31422:12;31447:120;31535:5;31528:13;31521:21;31514:5;31511:32;31501:2;;31557:1;31554;31547:12
Swarm Source
ipfs://b047a4d4cb59110be03b835f089e6b77cc1c9c88642153e8c74ea66f25238828
Loading...
Loading
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.