Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 48 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 18523967 | 388 days ago | IN | 0 ETH | 0.00095266 | ||||
Open Door | 18523070 | 388 days ago | IN | 0 ETH | 0.00320553 | ||||
Generate Random ... | 18522329 | 388 days ago | IN | 0 ETH | 0.00469463 | ||||
Place Bet | 18522313 | 388 days ago | IN | 0 ETH | 0.00384812 | ||||
Set Game | 18522312 | 388 days ago | IN | 0 ETH | 0.00442895 | ||||
Generate Random ... | 18504938 | 390 days ago | IN | 0 ETH | 0.00204556 | ||||
Approve | 18474024 | 395 days ago | IN | 0 ETH | 0.0007141 | ||||
Approve | 18473909 | 395 days ago | IN | 0 ETH | 0.0008015 | ||||
Approve | 18473903 | 395 days ago | IN | 0 ETH | 0.001258 | ||||
Approve | 18473890 | 395 days ago | IN | 0 ETH | 0.0009565 | ||||
Approve | 18473873 | 395 days ago | IN | 0 ETH | 0.00080064 | ||||
Set Game | 18473872 | 395 days ago | IN | 0 ETH | 0.00421709 | ||||
Approve | 18473872 | 395 days ago | IN | 0 ETH | 0.00134012 | ||||
Approve | 18473870 | 395 days ago | IN | 0 ETH | 0.00122843 | ||||
Approve | 18473865 | 395 days ago | IN | 0 ETH | 0.00128293 | ||||
Transfer Ownersh... | 18473865 | 395 days ago | IN | 0 ETH | 0.00132058 | ||||
Approve | 18473865 | 395 days ago | IN | 0 ETH | 0.00129091 | ||||
Approve | 18473864 | 395 days ago | IN | 0 ETH | 0.00149081 | ||||
Approve | 18473856 | 395 days ago | IN | 0 ETH | 0.0011711 | ||||
Approve | 18473848 | 395 days ago | IN | 0 ETH | 0.00130264 | ||||
Approve | 18473844 | 395 days ago | IN | 0 ETH | 0.00160133 | ||||
Approve | 18473841 | 395 days ago | IN | 0 ETH | 0.00141875 | ||||
Approve | 18473841 | 395 days ago | IN | 0 ETH | 0.00155403 | ||||
Approve | 18473841 | 395 days ago | IN | 0 ETH | 0.00164691 | ||||
Approve | 18473841 | 395 days ago | IN | 0 ETH | 0.00164691 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
18475131 | 395 days ago | 0.00461551 ETH | ||||
18475131 | 395 days ago | 0.00461551 ETH | ||||
18474055 | 395 days ago | 0.00589465 ETH | ||||
18474055 | 395 days ago | 0.00589465 ETH | ||||
18474028 | 395 days ago | 0.00621111 ETH | ||||
18474028 | 395 days ago | 0.00621111 ETH | ||||
18473986 | 395 days ago | 0.00662583 ETH | ||||
18473986 | 395 days ago | 0.00662583 ETH | ||||
18473986 | 395 days ago | 0.00708354 ETH | ||||
18473986 | 395 days ago | 0.00708354 ETH | ||||
18473986 | 395 days ago | 0.0075904 ETH | ||||
18473986 | 395 days ago | 0.0075904 ETH | ||||
18473986 | 395 days ago | 0.00815371 ETH | ||||
18473986 | 395 days ago | 0.00815371 ETH | ||||
18473986 | 395 days ago | 0.00878217 ETH | ||||
18473986 | 395 days ago | 0.00878217 ETH | ||||
18473913 | 395 days ago | 0.00959887 ETH | ||||
18473913 | 395 days ago | 0.00959887 ETH | ||||
18473904 | 395 days ago | 0.00990666 ETH | ||||
18473904 | 395 days ago | 0.00990666 ETH | ||||
18473903 | 395 days ago | 0.01029079 ETH | ||||
18473903 | 395 days ago | 0.01029079 ETH | ||||
18473892 | 395 days ago | 0.01133277 ETH | ||||
18473892 | 395 days ago | 0.01133277 ETH | ||||
18473874 | 395 days ago | 0.01185048 ETH |
Loading...
Loading
Contract Name:
TreatToken
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-11-01 */ // File: interfaces/IDexRouter.sol pragma solidity ^0.8.0; interface IDexRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function getAmountsOut( uint amountIn, address[] calldata path ) external view returns (uint[] memory amounts); function getAmountsIn( uint amountOut, address[] calldata path ) external view returns (uint[] memory amounts); } // File: interfaces/IDexFactory.sol pragma solidity ^0.8.0; interface IDexFactory { function createPair( address tokenA, address tokenB ) external returns (address pair); } // File: libraries/SafeMath.sol 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; } } // File: interfaces/IERC20.sol pragma solidity ^0.8.0; 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 ); } // File: interfaces/IERC20Metadata.sol pragma solidity ^0.8.0; interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: contracts/Context.sol pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; return msg.data; } } // File: contracts/ERC20.sol pragma solidity ^0.8.0; contract ERC20 is Context, 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(_msgSender(), 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(_msgSender(), 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, _msgSender(), _allowances[sender][_msgSender()].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( _msgSender(), spender, _allowances[_msgSender()][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( _msgSender(), spender, _allowances[_msgSender()][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 {} } // File: interfaces/IOwnable.sol pragma solidity ^0.8.0; interface IOwnable { function owner() external returns (address); function transferOwnership(address recipient) external; function acceptOwnership() external; } // File: contracts/ConfirmedOwnerWithProposal.sol pragma solidity ^0.8.0; /** * @title The ConfirmedOwner contract * @notice A contract with helpers for basic contract ownership. */ contract ConfirmedOwnerWithProposal is IOwnable { address private s_owner; address private s_pendingOwner; event OwnershipTransferRequested(address indexed from, address indexed to); event OwnershipTransferred(address indexed from, address indexed to); constructor(address newOwner, address pendingOwner) { require(newOwner != address(0), "Cannot set owner to zero"); s_owner = newOwner; if (pendingOwner != address(0)) { _transferOwnership(pendingOwner); } } /** * @notice Allows an owner to begin transferring ownership to a new address, * pending. */ function transferOwnership(address to) public override onlyOwner { _transferOwnership(to); } /** * @notice Allows an ownership transfer to be completed by the recipient. */ function acceptOwnership() external override { require(msg.sender == s_pendingOwner, "Must be proposed owner"); address oldOwner = s_owner; s_owner = msg.sender; s_pendingOwner = address(0); emit OwnershipTransferred(oldOwner, msg.sender); } /** * @notice Get the current owner */ function owner() public view override returns (address) { return s_owner; } /** * @notice validate, transfer ownership, and emit relevant events */ function _transferOwnership(address to) private { require(to != msg.sender, "Cannot transfer to self"); s_pendingOwner = to; emit OwnershipTransferRequested(s_owner, to); } /** * @notice validate access */ function _validateOwnership() internal view { require(msg.sender == s_owner, "Only callable by owner"); } /** * @notice Reverts if called by anyone other than the contract owner. */ modifier onlyOwner() { _validateOwnership(); _; } } // File: contracts/ConfirmedOwner.sol pragma solidity ^0.8.0; /** * @title The ConfirmedOwner contract * @notice A contract with helpers for basic contract ownership. */ contract ConfirmedOwner is ConfirmedOwnerWithProposal { constructor( address newOwner ) ConfirmedOwnerWithProposal(newOwner, address(0)) {} } // File: interfaces/VRFCoordinatorV2Interface.sol pragma solidity ^0.8.0; interface VRFCoordinatorV2Interface { /** * @notice Get configuration relevant for making requests * @return minimumRequestConfirmations global min for request confirmations * @return maxGasLimit global max for request gas limit * @return s_provingKeyHashes list of registered key hashes */ function getRequestConfig() external view returns (uint16, uint32, bytes32[] memory); /** * @notice Request a set of random words. * @param keyHash - Corresponds to a particular oracle job which uses * that key for generating the VRF proof. Different keyHash's have different gas price * ceilings, so you can select a specific one to bound your maximum per request cost. * @param subId - The ID of the VRF subscription. Must be funded * with the minimum subscription balance required for the selected keyHash. * @param minimumRequestConfirmations - How many blocks you'd like the * oracle to wait before responding to the request. See SECURITY CONSIDERATIONS * for why you may want to request more. The acceptable range is * [minimumRequestBlockConfirmations, 200]. * @param callbackGasLimit - How much gas you'd like to receive in your * fulfillRandomWords callback. Note that gasleft() inside fulfillRandomWords * may be slightly less than this amount because of gas used calling the function * (argument decoding etc.), so you may need to request slightly more than you expect * to have inside fulfillRandomWords. The acceptable range is * [0, maxGasLimit] * @param numWords - The number of uint256 random values you'd like to receive * in your fulfillRandomWords callback. Note these numbers are expanded in a * secure way by the VRFCoordinator from a single random value supplied by the oracle. * @return requestId - A unique identifier of the request. Can be used to match * a request to a response in fulfillRandomWords. */ function requestRandomWords( bytes32 keyHash, uint64 subId, uint16 minimumRequestConfirmations, uint32 callbackGasLimit, uint32 numWords ) external returns (uint256 requestId); /** * @notice Create a VRF subscription. * @return subId - A unique subscription id. * @dev You can manage the consumer set dynamically with addConsumer/removeConsumer. * @dev Note to fund the subscription, use transferAndCall. For example * @dev LINKTOKEN.transferAndCall( * @dev address(COORDINATOR), * @dev amount, * @dev abi.encode(subId)); */ function createSubscription() external returns (uint64 subId); /** * @notice Get a VRF subscription. * @param subId - ID of the subscription * @return balance - LINK balance of the subscription in juels. * @return reqCount - number of requests for this subscription, determines fee tier. * @return owner - owner of the subscription. * @return consumers - list of consumer address which are able to use this subscription. */ function getSubscription( uint64 subId ) external view returns ( uint96 balance, uint64 reqCount, address owner, address[] memory consumers ); /** * @notice Request subscription owner transfer. * @param subId - ID of the subscription * @param newOwner - proposed new owner of the subscription */ function requestSubscriptionOwnerTransfer( uint64 subId, address newOwner ) external; /** * @notice Request subscription owner transfer. * @param subId - ID of the subscription * @dev will revert if original owner of subId has * not requested that msg.sender become the new owner. */ function acceptSubscriptionOwnerTransfer(uint64 subId) external; /** * @notice Add a consumer to a VRF subscription. * @param subId - ID of the subscription * @param consumer - New consumer which can use the subscription */ function addConsumer(uint64 subId, address consumer) external; /** * @notice Remove a consumer from a VRF subscription. * @param subId - ID of the subscription * @param consumer - Consumer to remove from the subscription */ function removeConsumer(uint64 subId, address consumer) external; /** * @notice Cancel a subscription * @param subId - ID of the subscription * @param to - Where to send the remaining LINK to */ function cancelSubscription(uint64 subId, address to) external; /* * @notice Check to see if there exists a request commitment consumers * for all consumers and keyhashes for a given sub. * @param subId - ID of the subscription * @return true if there exists at least one unfulfilled request for the subscription, false * otherwise. */ function pendingRequestExists(uint64 subId) external view returns (bool); } // File: contracts/VRFConsumerBaseV2.sol pragma solidity ^0.8.4; /** **************************************************************************** * @notice Interface for contracts using VRF randomness * ***************************************************************************** * @dev PURPOSE * * @dev Reggie the Random Oracle (not his real job) wants to provide randomness * @dev to Vera the verifier in such a way that Vera can be sure he's not * @dev making his output up to suit himself. Reggie provides Vera a public key * @dev to which he knows the secret key. Each time Vera provides a seed to * @dev Reggie, he gives back a value which is computed completely * @dev deterministically from the seed and the secret key. * * @dev Reggie provides a proof by which Vera can verify that the output was * @dev correctly computed once Reggie tells it to her, but without that proof, * @dev the output is indistinguishable to her from a uniform random sample * @dev from the output space. * * @dev The purpose of this contract is to make it easy for unrelated contracts * @dev to talk to Vera the verifier about the work Reggie is doing, to provide * @dev simple access to a verifiable source of randomness. It ensures 2 things: * @dev 1. The fulfillment came from the VRFCoordinator * @dev 2. The consumer contract implements fulfillRandomWords. * ***************************************************************************** * @dev USAGE * * @dev Calling contracts must inherit from VRFConsumerBase, and can * @dev initialize VRFConsumerBase's attributes in their constructor as * @dev shown: * * @dev contract VRFConsumer { * @dev constructor(<other arguments>, address _vrfCoordinator, address _link) * @dev VRFConsumerBase(_vrfCoordinator) public { * @dev <initialization with other arguments goes here> * @dev } * @dev } * * @dev The oracle will have given you an ID for the VRF keypair they have * @dev committed to (let's call it keyHash). Create subscription, fund it * @dev and your consumer contract as a consumer of it (see VRFCoordinatorInterface * @dev subscription management functions). * @dev Call requestRandomWords(keyHash, subId, minimumRequestConfirmations, * @dev callbackGasLimit, numWords), * @dev see (VRFCoordinatorInterface for a description of the arguments). * * @dev Once the VRFCoordinator has received and validated the oracle's response * @dev to your request, it will call your contract's fulfillRandomWords method. * * @dev The randomness argument to fulfillRandomWords is a set of random words * @dev generated from your requestId and the blockHash of the request. * * @dev If your contract could have concurrent requests open, you can use the * @dev requestId returned from requestRandomWords to track which response is associated * @dev with which randomness request. * @dev See "SECURITY CONSIDERATIONS" for principles to keep in mind, * @dev if your contract could have multiple requests in flight simultaneously. * * @dev Colliding `requestId`s are cryptographically impossible as long as seeds * @dev differ. * * ***************************************************************************** * @dev SECURITY CONSIDERATIONS * * @dev A method with the ability to call your fulfillRandomness method directly * @dev could spoof a VRF response with any random value, so it's critical that * @dev it cannot be directly called by anything other than this base contract * @dev (specifically, by the VRFConsumerBase.rawFulfillRandomness method). * * @dev For your users to trust that your contract's random behavior is free * @dev from malicious interference, it's best if you can write it so that all * @dev behaviors implied by a VRF response are executed *during* your * @dev fulfillRandomness method. If your contract must store the response (or * @dev anything derived from it) and use it later, you must ensure that any * @dev user-significant behavior which depends on that stored value cannot be * @dev manipulated by a subsequent VRF request. * * @dev Similarly, both miners and the VRF oracle itself have some influence * @dev over the order in which VRF responses appear on the blockchain, so if * @dev your contract could have multiple VRF requests in flight simultaneously, * @dev you must ensure that the order in which the VRF responses arrive cannot * @dev be used to manipulate your contract's user-significant behavior. * * @dev Since the block hash of the block which contains the requestRandomness * @dev call is mixed into the input to the VRF *last*, a sufficiently powerful * @dev miner could, in principle, fork the blockchain to evict the block * @dev containing the request, forcing the request to be included in a * @dev different block with a different hash, and therefore a different input * @dev to the VRF. However, such an attack would incur a substantial economic * @dev cost. This cost scales with the number of blocks the VRF oracle waits * @dev until it calls responds to a request. It is for this reason that * @dev that you can signal to an oracle you'd like them to wait longer before * @dev responding to the request (however this is not enforced in the contract * @dev and so remains effective only in the case of unmodified oracle software). */ abstract contract VRFConsumerBaseV2 { error OnlyCoordinatorCanFulfill(address have, address want); address private immutable vrfCoordinator; /** * @param _vrfCoordinator address of VRFCoordinator contract */ constructor(address _vrfCoordinator) { vrfCoordinator = _vrfCoordinator; } /** * @notice fulfillRandomness handles the VRF response. Your contract must * @notice implement it. See "SECURITY CONSIDERATIONS" above for important * @notice principles to keep in mind when implementing your fulfillRandomness * @notice method. * * @dev VRFConsumerBaseV2 expects its subcontracts to have a method with this * @dev signature, and will call it once it has verified the proof * @dev associated with the randomness. (It is triggered via a call to * @dev rawFulfillRandomness, below.) * * @param requestId The Id initially returned by requestRandomness * @param randomWords the VRF output expanded to the requested number of words */ function fulfillRandomWords( uint256 requestId, uint256[] memory randomWords ) internal virtual; // rawFulfillRandomness is called by VRFCoordinator when it receives a valid VRF // proof. rawFulfillRandomness then calls fulfillRandomness, after validating // the origin of the call function rawFulfillRandomWords( uint256 requestId, uint256[] memory randomWords ) external { if (msg.sender != vrfCoordinator) { revert OnlyCoordinatorCanFulfill(msg.sender, vrfCoordinator); } fulfillRandomWords(requestId, randomWords); } } // File: contracts/TreatToken.sol /* Halloween coin with a lottery system and possibility of winning up to 10x your bet. https://t.me/HalloweenCerc20 twitter.com/HalloweenCerc20 https://halloweencoinerc20.com . // _.-"""""'//-'""""-._ .', , , , : : ` ` ` `. / , , \'-._ : :_.-'/ ` ` \ / , , :\(_)\ /(_)/ : ` ` \ | , , , \__//\\__/ . . ` ` | | . .:_ : : '--`: : . _: ; :| | : : \\_ _' : _: :__// , , | \ ` ` \ \/ \/\/ \_/ / , , / \ ` ` \_/\_/\_/\_/\/ , , / `._ ` . : : : , , _.' `-..............-' */ pragma solidity ^0.8.0; contract TreatToken is ERC20, VRFConsumerBaseV2, ConfirmedOwner { // ======================== VRF ======================== event RequestSent(uint256 requestId, uint32 numWords); event RequestFulfilled(uint256 requestId, uint256 randomWords); struct RequestStatus { bool fulfilled; bool exists; uint256 randomWords; } mapping(uint256 => RequestStatus) public s_requests; VRFCoordinatorV2Interface COORDINATOR; uint64 s_subscriptionId; bytes32 keyHash = 0x9fe0eebf5e446e3c998ec9bb19951541aee00bb90ea201ae456421a2ded86805; uint32 callbackGasLimit = 100000; // The default is 3, but you can set this higher. uint16 requestConfirmations = 3; uint32 numWords = 1; // ======================== GAME STRUCTURE ======================== struct Game { uint256 startTime; // start of the game uint256 endBet; //timestamp where they can no longer bet uint256 claimBegin; //timestamp from which they can claim uint256 claimDuration; //timestamp for claim uint256 endClaim; //timestamp up to which they can claim uint256 idOfTheGame; bool gameHasBegun; uint16 numberOfDoor; bool doorHasBeenGenerated; uint256 totalBets; uint256 totalBetDoor1; uint256 totalBetDoor2; uint256 totalBetDoor3; uint256 _multiplicator; } uint16 public numberOfGame; mapping(uint16 => Game) public game; mapping(uint16 => uint256) private resultOfGame; event Bet(address indexed user, uint256 amount); event DoorGeneration(uint256 indexed requestId); event DoorGenerated(uint256 indexed requestId, uint256 result); // ======================== USER STRUCTURE ======================== struct User { uint256 bet; uint256 totalBet; uint16 chosenDoor; bool openedDoor; bool win; uint256 earned; uint256 totalEarned; } mapping(address => mapping(uint16 => User)) public userInfos; // ======================== TAXES & LIMITS ======================== mapping(address => bool) public exemptFromFees; mapping(address => bool) public exemptFromLimits; uint128 public transactionLimit = 26_000e18; uint128 public walletLimit = 26_000e18; uint48 buyTax = 5; uint48 sellTax = 5; uint48 earlyTax = 19; uint64 public constant FEE_DIVISOR = 100; uint256 public _buyCount; uint256 public swapTokensAmount = 5000e18; // ======================== TOKEN ======================== uint256 maxTime = type(uint256).max / 2; address team; uint256 constant _initial_supply = 1000000 * (10 ** 18); bool tradingOpen; address public lpPair; IDexRouter public dexRouter; mapping(address => bool) public isAMMPair; // ======================== CONSTRUCTOR ======================== constructor( uint64 subscriptionId ) ERC20("Halloween Coin", "TREAT") VRFConsumerBaseV2(0x271682DEB8C4E0901D1a1550aD2e64D568E69909) ConfirmedOwner(msg.sender) { COORDINATOR = VRFCoordinatorV2Interface( 0x271682DEB8C4E0901D1a1550aD2e64D568E69909 ); s_subscriptionId = subscriptionId; team = msg.sender; address _v2Router; // UniswapRouter _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; dexRouter = IDexRouter(_v2Router); lpPair = IDexFactory(dexRouter.factory()).createPair( address(this), dexRouter.WETH() ); isAMMPair[lpPair] = true; exemptFromLimits[lpPair] = true; exemptFromLimits[msg.sender] = true; exemptFromLimits[address(this)] = true; exemptFromFees[msg.sender] = true; exemptFromFees[address(this)] = true; _approve(address(this), address(dexRouter), type(uint256).max); _approve(address(msg.sender), address(dexRouter), totalSupply()); _mint(msg.sender, _initial_supply); } modifier onlyTeam() { require(msg.sender == team); _; } receive() external payable {} function setGame( uint256 _bettingDuration, uint256 _claimingDuration, uint16 _numberOfDoor, uint256 _multipe ) external onlyTeam { if (game[numberOfGame].gameHasBegun) { require( block.timestamp > game[numberOfGame].endClaim, "a game is in progress" ); numberOfGame++; } game[numberOfGame].startTime = block.timestamp; game[numberOfGame].endBet = block.timestamp + _bettingDuration; game[numberOfGame].claimDuration = _claimingDuration; game[numberOfGame].gameHasBegun = true; game[numberOfGame].numberOfDoor = _numberOfDoor; game[numberOfGame].claimBegin = maxTime; game[numberOfGame]._multiplicator = _multipe; } function placeBet(uint256 _betAmount, uint16 _door) external { require(game[numberOfGame].gameHasBegun, "The game hasn't started yet"); require(block.timestamp < game[numberOfGame].endBet); require( _door > 0 && _door <= game[numberOfGame].numberOfDoor, "please select a valid door" ); if (_door == 1) { game[numberOfGame].totalBetDoor1++; } else if (_door == 2) { game[numberOfGame].totalBetDoor2++; } else { game[numberOfGame].totalBetDoor3++; } game[numberOfGame].totalBets++; userInfos[msg.sender][numberOfGame].bet = _betAmount; userInfos[msg.sender][numberOfGame].totalBet += _betAmount; userInfos[msg.sender][numberOfGame].chosenDoor = _door; _burn(msg.sender, _betAmount); emit Bet(msg.sender, _betAmount); } function getPercentage() public view returns (uint256, uint256, uint256) { require(game[numberOfGame].totalBets > 0, "there are no bets"); uint256 total = game[numberOfGame].totalBets; return ( (game[numberOfGame].totalBetDoor1 * 100) / total, (game[numberOfGame].totalBetDoor2 * 100) / total, (game[numberOfGame].totalBetDoor3 * 100) / total ); } function generateRandomDoor() external onlyTeam returns (uint256 requestId) { require(game[numberOfGame].gameHasBegun, "The game hasn't started yet"); require( block.timestamp > game[numberOfGame].endBet, "users can still place bets" ); require( !game[numberOfGame].doorHasBeenGenerated, "the door has already been generated" ); requestId = COORDINATOR.requestRandomWords( keyHash, s_subscriptionId, requestConfirmations, callbackGasLimit, numWords ); game[numberOfGame].claimBegin = block.timestamp + 360; // wait 6 minutes game[numberOfGame].endClaim = game[numberOfGame].claimBegin + game[numberOfGame].claimDuration; game[numberOfGame].idOfTheGame = requestId; game[numberOfGame].doorHasBeenGenerated = true; emit DoorGeneration(requestId); } function fulfillRandomWords( uint256 requestId, uint256[] memory randomWords ) internal override { uint256 doorValue = (randomWords[0] % game[numberOfGame].numberOfDoor) + 1; // value in [1, ..., numberDoor] resultOfGame[numberOfGame] = doorValue; emit DoorGenerated(requestId, doorValue); } function _transfer( address from, address to, uint256 amount ) internal override { if (!exemptFromFees[from] && !exemptFromFees[to]) { require(tradingOpen, "Trading is not open yet"); uint128 tax = 0; bool sell; //buy if (isAMMPair[from]) { require( amount <= transactionLimit && amount + balanceOf(to) <= walletLimit, "amount too high" ); if (_buyCount <= 20) { tax = earlyTax; } else { tax = buyTax; } _buyCount++; } // sell else if (isAMMPair[to]) { require(amount <= transactionLimit, "amount too high"); sell = true; if (_buyCount <= 20) { tax = earlyTax; } else { tax = sellTax; } } // transfer else { require(amount + balanceOf(to) <= walletLimit, "Max Wallet"); } uint256 taxAmount = (amount * tax) / FEE_DIVISOR; amount -= taxAmount; super._transfer(from, address(this), taxAmount); if (sell && balanceOf(address(this)) > swapTokensAmount) { sendTeamCall(); } } super._transfer(from, to, amount); } function sendTeamCall() private { uint256 initialETHBalance = address(this).balance; swapTokensForEth(swapTokensAmount); uint256 newBalance = address(this).balance - initialETHBalance; (bool success, ) = team.call{value: newBalance}(""); } // view the reward before function viewResult(uint16 _game) public view returns (uint256) { if (block.timestamp > game[_game].endClaim) { return resultOfGame[_game]; } else { return 0; } } function openDoor() external { require( !userInfos[msg.sender][numberOfGame].openedDoor, "user has already opened the door" ); require( block.timestamp > game[numberOfGame].claimBegin && block.timestamp < game[numberOfGame].endClaim, "you can't claim right now" ); userInfos[msg.sender][numberOfGame].openedDoor = true; if ( userInfos[msg.sender][numberOfGame].chosenDoor == resultOfGame[numberOfGame] ) { uint256 mutiplicator = game[numberOfGame]._multiplicator; userInfos[msg.sender][numberOfGame].win = true; uint256 _earn = mutiplicator * userInfos[msg.sender][numberOfGame].bet; userInfos[msg.sender][numberOfGame].earned = _earn; userInfos[msg.sender][numberOfGame].totalEarned += _earn; _mint(msg.sender, _earn); } } function getResult( address _address, uint16 _game ) public view returns (bool _didWin, uint256 _earned) { return ( userInfos[_address][_game].win, userInfos[_address][_game].earned ); } // view if a user has already claimed for a given game function hasAlreadyClaimed( address _user, uint16 _gameNumber ) public view returns (bool) { return userInfos[_user][_gameNumber].openedDoor; } // view for a given game the amount of a user's bet and the gate chosen function getBetAndDoor( address _user, uint16 _gameNumber ) public view returns (uint256, uint256) { return ( userInfos[_user][_gameNumber].bet, userInfos[_user][_gameNumber].chosenDoor ); } function getStateOfTheGame() public view returns (uint16 _state) { if (block.timestamp < game[numberOfGame].endBet) { _state = 1; } else if (block.timestamp < game[numberOfGame].claimBegin) { _state = 2; } else if (block.timestamp < game[numberOfGame].endClaim) { _state = 3; } else { _state = 0; } return _state; } function updateTaxesFees(uint48 _buy, uint48 _sell) external onlyTeam { buyTax = _buy; sellTax = _sell; } function updateSwapTokensAmount(uint256 _newAmount) external onlyTeam { swapTokensAmount = _newAmount; } function enableTrading() external onlyTeam { tradingOpen = true; } function updateLimits(uint128 _tx, uint128 _wallet) external onlyTeam { transactionLimit = _tx; walletLimit = _wallet; } function setExemptFromFees(address _address) external onlyTeam { exemptFromFees[_address] = true; } function setExemptFromLimits(address _address) external onlyTeam { exemptFromLimits[_address] = true; } function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = dexRouter.WETH(); //_approve(address(this), address(dexRouter), tokenAmount); dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function swapAndSendEmergency(uint256 tokens) external onlyTeam { uint256 initialETHBalance = address(this).balance; swapTokensForEth(tokens); uint256 newBalance = address(this).balance - initialETHBalance; (bool success, ) = team.call{value: newBalance}(""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint64","name":"subscriptionId","type":"uint64"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"have","type":"address"},{"internalType":"address","name":"want","type":"address"}],"name":"OnlyCoordinatorCanFulfill","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Bet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"result","type":"uint256"}],"name":"DoorGenerated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"DoorGeneration","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransferRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"randomWords","type":"uint256"}],"name":"RequestFulfilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"numWords","type":"uint32"}],"name":"RequestSent","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"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"game","outputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endBet","type":"uint256"},{"internalType":"uint256","name":"claimBegin","type":"uint256"},{"internalType":"uint256","name":"claimDuration","type":"uint256"},{"internalType":"uint256","name":"endClaim","type":"uint256"},{"internalType":"uint256","name":"idOfTheGame","type":"uint256"},{"internalType":"bool","name":"gameHasBegun","type":"bool"},{"internalType":"uint16","name":"numberOfDoor","type":"uint16"},{"internalType":"bool","name":"doorHasBeenGenerated","type":"bool"},{"internalType":"uint256","name":"totalBets","type":"uint256"},{"internalType":"uint256","name":"totalBetDoor1","type":"uint256"},{"internalType":"uint256","name":"totalBetDoor2","type":"uint256"},{"internalType":"uint256","name":"totalBetDoor3","type":"uint256"},{"internalType":"uint256","name":"_multiplicator","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"generateRandomDoor","outputs":[{"internalType":"uint256","name":"requestId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint16","name":"_gameNumber","type":"uint16"}],"name":"getBetAndDoor","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint16","name":"_game","type":"uint16"}],"name":"getResult","outputs":[{"internalType":"bool","name":"_didWin","type":"bool"},{"internalType":"uint256","name":"_earned","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStateOfTheGame","outputs":[{"internalType":"uint16","name":"_state","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint16","name":"_gameNumber","type":"uint16"}],"name":"hasAlreadyClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"isAMMPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberOfGame","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openDoor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_betAmount","type":"uint256"},{"internalType":"uint16","name":"_door","type":"uint16"}],"name":"placeBet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"},{"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"name":"rawFulfillRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"s_requests","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"},{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"uint256","name":"randomWords","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setExemptFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setExemptFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bettingDuration","type":"uint256"},{"internalType":"uint256","name":"_claimingDuration","type":"uint256"},{"internalType":"uint16","name":"_numberOfDoor","type":"uint16"},{"internalType":"uint256","name":"_multipe","type":"uint256"}],"name":"setGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"swapAndSendEmergency","outputs":[],"stateMutability":"nonpayable","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transactionLimit","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"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":"to","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"_tx","type":"uint128"},{"internalType":"uint128","name":"_wallet","type":"uint128"}],"name":"updateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"updateSwapTokensAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint48","name":"_buy","type":"uint48"},{"internalType":"uint48","name":"_sell","type":"uint48"}],"name":"updateTaxesFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint16","name":"","type":"uint16"}],"name":"userInfos","outputs":[{"internalType":"uint256","name":"bet","type":"uint256"},{"internalType":"uint256","name":"totalBet","type":"uint256"},{"internalType":"uint16","name":"chosenDoor","type":"uint16"},{"internalType":"bool","name":"openedDoor","type":"bool"},{"internalType":"bool","name":"win","type":"bool"},{"internalType":"uint256","name":"earned","type":"uint256"},{"internalType":"uint256","name":"totalEarned","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_game","type":"uint16"}],"name":"viewResult","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletLimit","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040527f9fe0eebf5e446e3c998ec9bb19951541aee00bb90ea201ae456421a2ded86805600955600a80546001600160501b03191666010003000186a0179055790581767ba6189c4000000000000000000581767ba6189c400000601055601180546001600160901b0319166c1300000000000500000000000517905569010f0cf064dd592000006013556200009b60026000196200093c565b601455348015620000ab57600080fd5b506040516200381138038062003811833981016040819052620000ce91620008ee565b3380600073271682deb8c4e0901d1a1550ad2e64d568e699096040518060400160405280600e81526020016d2430b63637bbb2b2b71021b7b4b760911b81525060405180604001604052806005815260200164151491505560da1b8152508160039080519060200190620001449291906200081f565b5080516200015a9060049060208401906200081f565b50505060601b6001600160601b0319166080526001600160a01b038216620001c95760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600580546001600160a01b0319166001600160a01b0384811691909117909155811615620001fc57620001fc81620004e4565b50506008805473271682deb8c4e0901d1a1550ad2e64d568e699096001600160e01b0319909116600160a01b6001600160401b03861602171790555060158054336001600160a01b03199182161790915560178054737a250d5630b4cf539739df2c5dacb4c659f2488d9216821790556040805163c45a015560e01b81529051829163c45a0155916004808301926020929190829003018186803b158015620002a457600080fd5b505afa158015620002b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002df9190620008c5565b6001600160a01b031663c9c6539630601760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033d57600080fd5b505afa15801562000352573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003789190620008c5565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620003c157600080fd5b505af1158015620003d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003fc9190620008c5565b601680546001600160a01b0319166001600160a01b0392831690811782556000908152601860209081526040808320805460ff199081166001908117909255945486168452600f83528184208054861682179055338085528285208054871683179055308086528386208054881684179055908552600e909352818420805486168217905582845292208054909316909117909155601754620004a3921660001962000591565b601754620004c69033906001600160a01b0316620004c060025490565b62000591565b620004dc3369d3c21bcecceda1000000620006b9565b50506200099a565b6001600160a01b0381163314156200053f5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401620001c0565b600680546001600160a01b0319166001600160a01b03838116918217909255600554604051919216907fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae127890600090a350565b6001600160a01b038316620005f55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401620001c0565b6001600160a01b038216620006585760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620001c0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216620007115760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620001c0565b6200072d81600254620007b560201b62001ba11790919060201c565b6002556001600160a01b038216600090815260208181526040909120546200076091839062001ba1620007b5821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600080620007c4838562000917565b905083811015620008185760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620001c0565b9392505050565b8280546200082d906200095d565b90600052602060002090601f0160209004810192826200085157600085556200089c565b82601f106200086c57805160ff19168380011785556200089c565b828001600101855582156200089c579182015b828111156200089c5782518255916020019190600101906200087f565b50620008aa929150620008ae565b5090565b5b80821115620008aa5760008155600101620008af565b600060208284031215620008d7578081fd5b81516001600160a01b038116811462000818578182fd5b60006020828403121562000900578081fd5b81516001600160401b038116811462000818578182fd5b600082198211156200093757634e487b7160e01b81526011600452602481fd5b500190565b6000826200095857634e487b7160e01b81526012600452602481fd5b500490565b600181811c908216806200097257607f821691505b602082108114156200099457634e487b7160e01b600052602260045260246000fd5b50919050565b60805160601c612e51620009c060003960008181610d2b0152610d6d0152612e516000f3fe6080604052600436106102815760003560e01c806379ba50971161014f578063a457c2d7116100c1578063e3fa92811161007a578063e3fa9281146109cc578063e613af4d14610a21578063f19605d614610a43578063f2fde38b14610a63578063f371df1214610a83578063feda4bed14610aec57600080fd5b8063a457c2d714610855578063a9059cbb14610875578063b0249cc614610895578063bfa2bdc6146108c5578063db0e127a14610971578063dd62ed3e1461098657600080fd5b80638da5cb5b116101135780638da5cb5b146107565780638fc1000e1461077457806395d89b41146107945780639e93ad8e146107a9578063a168fa89146107d7578063a24977fc1461083557600080fd5b806379ba5097146106bc5780637a645f59146106d15780637dff65b3146106f15780638a8c523c146107115780638d3e6e401461072657600080fd5b80632f85b0de116101f3578063596565df116101ac578063596565df146105545780635a90a49e146106005780635f1c3182146106305780636770474b146106465780636f47bae21461066657806370a082311461068657600080fd5b80632f85b0de1461047c578063313ce5671461049157806339509351146104ad5780633c8463a1146104cd57806344ed84141461050c578063452ed4f11461053457600080fd5b806318160ddd1161024557806318160ddd146103725780631b91a131146103915780631fe543e31461040657806323b872dd1461042657806327b1a8e914610446578063292205d71461045c57600080fd5b806302c8e7f41461028d57806306fdde03146102af5780630758d924146102da578063095ea7b3146103125780630b2accb21461034257600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102ad6102a8366004612ad5565b610b0c565b005b3480156102bb57600080fd5b506102c4610b58565b6040516102d19190612afe565b60405180910390f35b3480156102e657600080fd5b506017546102fa906001600160a01b031681565b6040516001600160a01b0390911681526020016102d1565b34801561031e57600080fd5b5061033261032d36600461290d565b610bea565b60405190151581526020016102d1565b34801561034e57600080fd5b50610357610c00565b604080519384526020840192909252908201526060016102d1565b34801561037e57600080fd5b506002545b6040519081526020016102d1565b34801561039d57600080fd5b506103ef6103ac3660046128d9565b6001600160a01b03919091166000908152600d6020908152604080832061ffff949094168352929052206002810154600390910154630100000090910460ff1691565b6040805192151583526020830191909152016102d1565b34801561041257600080fd5b506102ad6104213660046129ab565b610d20565b34801561043257600080fd5b50610332610441366004612899565b610da8565b34801561045257600080fd5b5061038360125481565b34801561046857600080fd5b50610383610477366004612961565b610e11565b34801561048857600080fd5b50610383610e53565b34801561049d57600080fd5b50604051601281526020016102d1565b3480156104b957600080fd5b506103326104c836600461290d565b61116c565b3480156104d957600080fd5b506010546104f490600160801b90046001600160801b031681565b6040516001600160801b0390911681526020016102d1565b34801561051857600080fd5b506105216111a2565b60405161ffff90911681526020016102d1565b34801561054057600080fd5b506016546102fa906001600160a01b031681565b34801561056057600080fd5b506105c061056f3660046128d9565b600d602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919261ffff82169260ff62010000840481169363010000009004169187565b60408051978852602088019690965261ffff9094169486019490945290151560608501521515608084015260a083019190915260c082015260e0016102d1565b34801561060c57600080fd5b5061033261061b366004612829565b600e6020526000908152604090205460ff1681565b34801561063c57600080fd5b5061038360135481565b34801561065257600080fd5b506102ad61066136600461297b565b61122f565b34801561067257600080fd5b506102ad61068136600461297b565b61124b565b34801561069257600080fd5b506103836106a1366004612829565b6001600160a01b031660009081526020819052604090205490565b3480156106c857600080fd5b506102ad6112d8565b3480156106dd57600080fd5b506102ad6106ec366004612829565b611386565b3480156106fd57600080fd5b506102ad61070c366004612a77565b6113c1565b34801561071d57600080fd5b506102ad611692565b34801561073257600080fd5b50610332610741366004612829565b600f6020526000908152604090205460ff1681565b34801561076257600080fd5b506005546001600160a01b03166102fa565b34801561078057600080fd5b506102ad61078f366004612938565b6116be565b3480156107a057600080fd5b506102c46116ee565b3480156107b557600080fd5b506107be606481565b60405167ffffffffffffffff90911681526020016102d1565b3480156107e357600080fd5b506108186107f236600461297b565b6007602052600090815260409020805460019091015460ff808316926101009004169083565b6040805193151584529115156020840152908201526060016102d1565b34801561084157600080fd5b506102ad610850366004612a99565b6116fd565b34801561086157600080fd5b5061033261087036600461290d565b6118ab565b34801561088157600080fd5b5061033261089036600461290d565b6118fa565b3480156108a157600080fd5b506103326108b0366004612829565b60186020526000908152604090205460ff1681565b3480156108d157600080fd5b506109576108e0366004612961565b600b60208190526000918252604090912080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b01549a909b0154989a9799969895979496939560ff8085169661ffff6101008704169663010000009096049091169490918e565b6040516102d19e9d9c9b9a99989796959493929190612bc1565b34801561097d57600080fd5b506102ad611907565b34801561099257600080fd5b506103836109a1366004612861565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109d857600080fd5b506103326109e73660046128d9565b6001600160a01b03919091166000908152600d6020908152604080832061ffff949094168352929052206002015462010000900460ff1690565b348015610a2d57600080fd5b50600a5461052190600160501b900461ffff1681565b348015610a4f57600080fd5b506010546104f4906001600160801b031681565b348015610a6f57600080fd5b506102ad610a7e366004612829565b611b52565b348015610a8f57600080fd5b50610ad7610a9e3660046128d9565b6001600160a01b03919091166000908152600d6020908152604080832061ffff9485168452909152902080546002909101549092911690565b604080519283526020830191909152016102d1565b348015610af857600080fd5b506102ad610b07366004612829565b611b66565b6015546001600160a01b03163314610b2357600080fd5b6011805465ffffffffffff928316600160301b026bffffffffffffffffffffffff199091169290931691909117919091179055565b606060038054610b6790612ca3565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9390612ca3565b8015610be05780601f10610bb557610100808354040283529160200191610be0565b820191906000526020600020905b815481529060010190602001808311610bc357829003601f168201915b5050505050905090565b6000610bf7338484611c07565b50600192915050565b600a54600160501b900461ffff166000908152600b602052604081206007015481908190610c695760405162461bcd60e51b8152602060048201526011602482015270746865726520617265206e6f206265747360781b60448201526064015b60405180910390fd5b600a54600160501b900461ffff166000908152600b6020526040902060078101546008909101548190610c9d906064612c6d565b610ca79190612c59565b600a54600160501b900461ffff166000908152600b60205260409020600901548290610cd4906064612c6d565b610cde9190612c59565b600a8054600160501b900461ffff166000908152600b6020526040902001548390610d0a906064612c6d565b610d149190612c59565b93509350935050909192565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d9a5760405163073e64fd60e21b81523360048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610c60565b610da48282611d2c565b5050565b6000610db5848484611df2565b610e078433610e0285604051806060016040528060288152602001612dcf602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190612132565b611c07565b5060019392505050565b61ffff81166000908152600b6020526040812060040154421115610e46575061ffff166000908152600c602052604090205490565b506000919050565b919050565b6015546000906001600160a01b03163314610e6d57600080fd5b600a54600160501b900461ffff166000908152600b602052604090206006015460ff16610edc5760405162461bcd60e51b815260206004820152601b60248201527f5468652067616d65206861736e277420737461727465642079657400000000006044820152606401610c60565b600a54600160501b900461ffff166000908152600b60205260409020600101544211610f4a5760405162461bcd60e51b815260206004820152601a60248201527f75736572732063616e207374696c6c20706c61636520626574730000000000006044820152606401610c60565b600a54600160501b900461ffff166000908152600b60205260409020600601546301000000900460ff1615610fcd5760405162461bcd60e51b815260206004820152602360248201527f74686520646f6f722068617320616c7265616479206265656e2067656e6572616044820152621d195960ea1b6064820152608401610c60565b600854600954600a546040516305d3b1d360e41b81526004810192909252600160a01b830467ffffffffffffffff166024830152640100000000810461ffff16604483015263ffffffff8082166064840152600160301b9091041660848201526001600160a01b0390911690635d3b1d309060a401602060405180830381600087803b15801561105c57600080fd5b505af1158015611070573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110949190612993565b90506110a242610168612c41565b600a805461ffff600160501b9182900481166000908152600b60205260408082206002908101969096559354929092041681522060038101549101546110e89190612c41565b600a805461ffff600160501b9182900481166000908152600b602052604080822060040195909555835483900482168152848120600501869055925491909104168152818120600601805463ff00000019166301000000179055905182917f4e4bcfd8b2e9741d85a87b390737006c083e3fbb255079b2f32e9d2688879c3491a290565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bf7918590610e029086611ba1565b600a54600160501b900461ffff166000908152600b60205260408120600101544210156111cf5750600190565b600a54600160501b900461ffff166000908152600b60205260409020600201544210156111fc5750600290565b600a54600160501b900461ffff166000908152600b60205260409020600401544210156112295750600390565b50600090565b6015546001600160a01b0316331461124657600080fd5b601355565b6015546001600160a01b0316331461126257600080fd5b4761126c8261216c565b60006112788247612c8c565b6015546040519192506000916001600160a01b039091169083908381818185875af1925050503d80600081146112ca576040519150601f19603f3d011682016040523d82523d6000602084013e6112cf565b606091505b50505050505050565b6006546001600160a01b0316331461132b5760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b6044820152606401610c60565b600580546001600160a01b0319808216339081179093556006805490911690556040516001600160a01b03909116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b6015546001600160a01b0316331461139d57600080fd5b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b600a54600160501b900461ffff166000908152600b602052604090206006015460ff166114305760405162461bcd60e51b815260206004820152601b60248201527f5468652067616d65206861736e277420737461727465642079657400000000006044820152606401610c60565b600a54600160501b900461ffff166000908152600b6020526040902060010154421061145b57600080fd5b60008161ffff161180156114995750600a5461ffff600160501b90910481166000908152600b60205260409020600601546101009004811690821611155b6114e55760405162461bcd60e51b815260206004820152601a60248201527f706c656173652073656c65637420612076616c696420646f6f720000000000006044820152606401610c60565b8061ffff166001141561152757600a54600160501b900461ffff166000908152600b6020526040812060080180549161151d83612d00565b9190505550611591565b8061ffff166002141561155f57600a54600160501b900461ffff166000908152600b6020526040812060090180549161151d83612d00565b600a8054600160501b900461ffff166000908152600b6020526040812090910180549161158b83612d00565b91905055505b600a54600160501b900461ffff166000908152600b602052604081206007018054916115bc83612d00565b9091555050336000908152600d60209081526040808320600a805461ffff600160501b91829004811687528386528487208990559154041684529091528120600101805484929061160e908490612c41565b9091555050336000818152600d60209081526040808320600a54600160501b900461ffff90811685529252909120600201805461ffff191691841691909117905561165990836122d8565b60405182815233907fc0ae20ffbb1eca06a840c35912bdb9f8e6e1fad1f028c875be0ddf54d480d71e9060200160405180910390a25050565b6015546001600160a01b031633146116a957600080fd5b6015805460ff60a01b1916600160a01b179055565b6015546001600160a01b031633146116d557600080fd5b6001600160801b03908116600160801b02911617601055565b606060048054610b6790612ca3565b6015546001600160a01b0316331461171457600080fd5b600a54600160501b900461ffff166000908152600b602052604090206006015460ff16156117d857600a54600160501b900461ffff166000908152600b602052604090206004015442116117a25760405162461bcd60e51b8152602060048201526015602482015274612067616d6520697320696e2070726f677265737360581b6044820152606401610c60565b600a8054600160501b900461ffff1690806117bc83612cde565b91906101000a81548161ffff021916908361ffff160217905550505b600a54600160501b900461ffff166000908152600b602052604090204290819055611804908590612c41565b600a805461ffff600160501b9182900481166000908152600b60208190526040808320600190810197909755855485900484168352808320600301999099558454849004831682528882206006908101805460ff191690971790965584548490048316825288822090950180549783166101000262ffff00199098169790971790965560145483548390048216875287872060020155915404168352929091209091015550565b6000610bf73384610e0285604051806060016040528060258152602001612df7602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190612132565b6000610bf7338484611df2565b336000908152600d60209081526040808320600a54600160501b900461ffff16845290915290206002015462010000900460ff16156119885760405162461bcd60e51b815260206004820181905260248201527f757365722068617320616c7265616479206f70656e65642074686520646f6f726044820152606401610c60565b600a54600160501b900461ffff166000908152600b6020526040902060020154421180156119d45750600a54600160501b900461ffff166000908152600b602052604090206004015442105b611a205760405162461bcd60e51b815260206004820152601960248201527f796f752063616e277420636c61696d207269676874206e6f77000000000000006044820152606401610c60565b336000908152600d60209081526040808320600a805461ffff600160501b91829004811687528386528487206002908101805462ff000019166201000017905592549190910481168652600c85528386205492909452919093200154161415611b5057600a805461ffff600160501b9182900481166000818152600b6020818152604080842090920154338452600d8252828420948452848252828420600201805463ff0000001916630100000017905596549590950490931681529252812054611aeb9083612c6d565b336000908152600d60209081526040808320600a805461ffff600160501b9182900481168752838652848720600301889055915404168452909152812060040180549293508392909190611b40908490612c41565b90915550610da4905033826123e4565b565b611b5a6124bb565b611b638161250e565b50565b6015546001600160a01b03163314611b7d57600080fd5b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b600080611bae8385612c41565b905083811015611c005760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c60565b9392505050565b6001600160a01b038316611c695760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c60565b6001600160a01b038216611cca5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c60565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600a5461ffff600160501b90910481166000908152600b602052604081206006015483519192610100909104169083908390611d7857634e487b7160e01b600052603260045260246000fd5b6020026020010151611d8a9190612d1b565b611d95906001612c41565b600a54600160501b900461ffff166000908152600c6020908152604091829020839055905182815291925084917f8a6dbdfd71480fce606f8ed4573978cfb4287c8d8296daf567c3e9ccab272ef8910160405180910390a2505050565b6001600160a01b0383166000908152600e602052604090205460ff16158015611e3457506001600160a01b0382166000908152600e602052604090205460ff16155b1561212257601554600160a01b900460ff16611e925760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206973206e6f74206f70656e207965740000000000000000006044820152606401610c60565b6001600160a01b038316600090815260186020526040812054819060ff1615611f94576010546001600160801b03168311801590611f0b57506010546001600160801b03600160801b90910416611efe856001600160a01b031660009081526020819052604090205490565b611f089085612c41565b11155b611f495760405162461bcd60e51b815260206004820152600f60248201526e0c2dadeeadce840e8dede40d0d2ced608b1b6044820152606401610c60565b601460125411611f6c57601154600160601b900465ffffffffffff169150611f7a565b60115465ffffffffffff1691505b60128054906000611f8a83612d00565b91905055506120ba565b6001600160a01b03841660009081526018602052604090205460ff1615612042576010546001600160801b03168311156120025760405162461bcd60e51b815260206004820152600f60248201526e0c2dadeeadce840e8dede40d0d2ced608b1b6044820152606401610c60565b6001905060146012541161202957601154600160601b900465ffffffffffff1691506120ba565b601154600160301b900465ffffffffffff1691506120ba565b6010546001600160801b03600160801b90910416612075856001600160a01b031660009081526020819052604090205490565b61207f9085612c41565b11156120ba5760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610c60565b600060646120d16001600160801b03851686612c6d565b6120db9190612c59565b90506120e78185612c8c565b93506120f48630836125b9565b818015612111575060135430600090815260208190526040902054115b1561211e5761211e61273c565b5050505b61212d8383836125b9565b505050565b600081848411156121565760405162461bcd60e51b8152600401610c609190612afe565b5060006121638486612c8c565b95945050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106121af57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561220357600080fd5b505afa158015612217573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223b9190612845565b8160018151811061225c57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260175460405163791ac94760e01b815291169063791ac947906122a2908590600090869030904290600401612b51565b600060405180830381600087803b1580156122bc57600080fd5b505af11580156122d0573d6000803e3d6000fd5b505050505050565b6001600160a01b0382166123385760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c60565b61237581604051806060016040528060228152602001612d87602291396001600160a01b0385166000908152602081905260409020549190612132565b6001600160a01b03831660009081526020819052604090205560025461239b90826127a8565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b6001600160a01b03821661243a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610c60565b6002546124479082611ba1565b6002556001600160a01b03821660009081526020819052604090205461246d9082611ba1565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016123d8565b6005546001600160a01b03163314611b505760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b6044820152606401610c60565b6001600160a01b0381163314156125675760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610c60565b600680546001600160a01b0319166001600160a01b03838116918217909255600554604051919216907fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae127890600090a350565b6001600160a01b03831661261d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c60565b6001600160a01b03821661267f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c60565b6126bc81604051806060016040528060268152602001612da9602691396001600160a01b0386166000908152602081905260409020549190612132565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546126eb9082611ba1565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611d1f565b601354479061274a9061216c565b60006127568247612c8c565b6015546040519192506000916001600160a01b039091169083908381818185875af1925050503d80600081146122d0576040519150601f19603f3d011682016040523d82523d6000602084013e6122d0565b6000611c0083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612132565b80356001600160801b0381168114610e4e57600080fd5b803561ffff81168114610e4e57600080fd5b803565ffffffffffff81168114610e4e57600080fd5b60006020828403121561283a578081fd5b8135611c0081612d71565b600060208284031215612856578081fd5b8151611c0081612d71565b60008060408385031215612873578081fd5b823561287e81612d71565b9150602083013561288e81612d71565b809150509250929050565b6000806000606084860312156128ad578081fd5b83356128b881612d71565b925060208401356128c881612d71565b929592945050506040919091013590565b600080604083850312156128eb578182fd5b82356128f681612d71565b915061290460208401612801565b90509250929050565b6000806040838503121561291f578182fd5b823561292a81612d71565b946020939093013593505050565b6000806040838503121561294a578182fd5b612953836127ea565b9150612904602084016127ea565b600060208284031215612972578081fd5b611c0082612801565b60006020828403121561298c578081fd5b5035919050565b6000602082840312156129a4578081fd5b5051919050565b600080604083850312156129bd578182fd5b8235915060208084013567ffffffffffffffff808211156129dc578384fd5b818601915086601f8301126129ef578384fd5b813581811115612a0157612a01612d5b565b8060051b604051601f19603f83011681018181108582111715612a2657612a26612d5b565b604052828152858101935084860182860187018b1015612a44578788fd5b8795505b83861015612a66578035855260019590950194938601938601612a48565b508096505050505050509250929050565b60008060408385031215612a89578182fd5b8235915061290460208401612801565b60008060008060808587031215612aae578081fd5b8435935060208501359250612ac560408601612801565b9396929550929360600135925050565b60008060408385031215612ae7578182fd5b612af083612813565b915061290460208401612813565b6000602080835283518082850152825b81811015612b2a57858101830151858201604001528201612b0e565b81811115612b3b5783604083870101525b50601f01601f1916929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612ba05784516001600160a01b031683529383019391830191600101612b7b565b50506001600160a01b03969096166060850152505050608001529392505050565b60006101c0820190508f82528e60208301528d60408301528c60608301528b60808301528a60a083015289151560c083015261ffff891660e0830152612c0c61010083018915159052565b6101208201969096526101408101949094526101608401929092526101808301526101a0909101529998505050505050505050565b60008219821115612c5457612c54612d2f565b500190565b600082612c6857612c68612d45565b500490565b6000816000190483118215151615612c8757612c87612d2f565b500290565b600082821015612c9e57612c9e612d2f565b500390565b600181811c90821680612cb757607f821691505b60208210811415612cd857634e487b7160e01b600052602260045260246000fd5b50919050565b600061ffff80831681811415612cf657612cf6612d2f565b6001019392505050565b6000600019821415612d1457612d14612d2f565b5060010190565b600082612d2a57612d2a612d45565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611b6357600080fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202e34fc496947c6ab82ec02ea5db4725d2d436625d0ba6db2d77dc1c191c74a0764736f6c634300080400330000000000000000000000000000000000000000000000000000000000000361
Deployed Bytecode
0x6080604052600436106102815760003560e01c806379ba50971161014f578063a457c2d7116100c1578063e3fa92811161007a578063e3fa9281146109cc578063e613af4d14610a21578063f19605d614610a43578063f2fde38b14610a63578063f371df1214610a83578063feda4bed14610aec57600080fd5b8063a457c2d714610855578063a9059cbb14610875578063b0249cc614610895578063bfa2bdc6146108c5578063db0e127a14610971578063dd62ed3e1461098657600080fd5b80638da5cb5b116101135780638da5cb5b146107565780638fc1000e1461077457806395d89b41146107945780639e93ad8e146107a9578063a168fa89146107d7578063a24977fc1461083557600080fd5b806379ba5097146106bc5780637a645f59146106d15780637dff65b3146106f15780638a8c523c146107115780638d3e6e401461072657600080fd5b80632f85b0de116101f3578063596565df116101ac578063596565df146105545780635a90a49e146106005780635f1c3182146106305780636770474b146106465780636f47bae21461066657806370a082311461068657600080fd5b80632f85b0de1461047c578063313ce5671461049157806339509351146104ad5780633c8463a1146104cd57806344ed84141461050c578063452ed4f11461053457600080fd5b806318160ddd1161024557806318160ddd146103725780631b91a131146103915780631fe543e31461040657806323b872dd1461042657806327b1a8e914610446578063292205d71461045c57600080fd5b806302c8e7f41461028d57806306fdde03146102af5780630758d924146102da578063095ea7b3146103125780630b2accb21461034257600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102ad6102a8366004612ad5565b610b0c565b005b3480156102bb57600080fd5b506102c4610b58565b6040516102d19190612afe565b60405180910390f35b3480156102e657600080fd5b506017546102fa906001600160a01b031681565b6040516001600160a01b0390911681526020016102d1565b34801561031e57600080fd5b5061033261032d36600461290d565b610bea565b60405190151581526020016102d1565b34801561034e57600080fd5b50610357610c00565b604080519384526020840192909252908201526060016102d1565b34801561037e57600080fd5b506002545b6040519081526020016102d1565b34801561039d57600080fd5b506103ef6103ac3660046128d9565b6001600160a01b03919091166000908152600d6020908152604080832061ffff949094168352929052206002810154600390910154630100000090910460ff1691565b6040805192151583526020830191909152016102d1565b34801561041257600080fd5b506102ad6104213660046129ab565b610d20565b34801561043257600080fd5b50610332610441366004612899565b610da8565b34801561045257600080fd5b5061038360125481565b34801561046857600080fd5b50610383610477366004612961565b610e11565b34801561048857600080fd5b50610383610e53565b34801561049d57600080fd5b50604051601281526020016102d1565b3480156104b957600080fd5b506103326104c836600461290d565b61116c565b3480156104d957600080fd5b506010546104f490600160801b90046001600160801b031681565b6040516001600160801b0390911681526020016102d1565b34801561051857600080fd5b506105216111a2565b60405161ffff90911681526020016102d1565b34801561054057600080fd5b506016546102fa906001600160a01b031681565b34801561056057600080fd5b506105c061056f3660046128d9565b600d602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919261ffff82169260ff62010000840481169363010000009004169187565b60408051978852602088019690965261ffff9094169486019490945290151560608501521515608084015260a083019190915260c082015260e0016102d1565b34801561060c57600080fd5b5061033261061b366004612829565b600e6020526000908152604090205460ff1681565b34801561063c57600080fd5b5061038360135481565b34801561065257600080fd5b506102ad61066136600461297b565b61122f565b34801561067257600080fd5b506102ad61068136600461297b565b61124b565b34801561069257600080fd5b506103836106a1366004612829565b6001600160a01b031660009081526020819052604090205490565b3480156106c857600080fd5b506102ad6112d8565b3480156106dd57600080fd5b506102ad6106ec366004612829565b611386565b3480156106fd57600080fd5b506102ad61070c366004612a77565b6113c1565b34801561071d57600080fd5b506102ad611692565b34801561073257600080fd5b50610332610741366004612829565b600f6020526000908152604090205460ff1681565b34801561076257600080fd5b506005546001600160a01b03166102fa565b34801561078057600080fd5b506102ad61078f366004612938565b6116be565b3480156107a057600080fd5b506102c46116ee565b3480156107b557600080fd5b506107be606481565b60405167ffffffffffffffff90911681526020016102d1565b3480156107e357600080fd5b506108186107f236600461297b565b6007602052600090815260409020805460019091015460ff808316926101009004169083565b6040805193151584529115156020840152908201526060016102d1565b34801561084157600080fd5b506102ad610850366004612a99565b6116fd565b34801561086157600080fd5b5061033261087036600461290d565b6118ab565b34801561088157600080fd5b5061033261089036600461290d565b6118fa565b3480156108a157600080fd5b506103326108b0366004612829565b60186020526000908152604090205460ff1681565b3480156108d157600080fd5b506109576108e0366004612961565b600b60208190526000918252604090912080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b01549a909b0154989a9799969895979496939560ff8085169661ffff6101008704169663010000009096049091169490918e565b6040516102d19e9d9c9b9a99989796959493929190612bc1565b34801561097d57600080fd5b506102ad611907565b34801561099257600080fd5b506103836109a1366004612861565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109d857600080fd5b506103326109e73660046128d9565b6001600160a01b03919091166000908152600d6020908152604080832061ffff949094168352929052206002015462010000900460ff1690565b348015610a2d57600080fd5b50600a5461052190600160501b900461ffff1681565b348015610a4f57600080fd5b506010546104f4906001600160801b031681565b348015610a6f57600080fd5b506102ad610a7e366004612829565b611b52565b348015610a8f57600080fd5b50610ad7610a9e3660046128d9565b6001600160a01b03919091166000908152600d6020908152604080832061ffff9485168452909152902080546002909101549092911690565b604080519283526020830191909152016102d1565b348015610af857600080fd5b506102ad610b07366004612829565b611b66565b6015546001600160a01b03163314610b2357600080fd5b6011805465ffffffffffff928316600160301b026bffffffffffffffffffffffff199091169290931691909117919091179055565b606060038054610b6790612ca3565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9390612ca3565b8015610be05780601f10610bb557610100808354040283529160200191610be0565b820191906000526020600020905b815481529060010190602001808311610bc357829003601f168201915b5050505050905090565b6000610bf7338484611c07565b50600192915050565b600a54600160501b900461ffff166000908152600b602052604081206007015481908190610c695760405162461bcd60e51b8152602060048201526011602482015270746865726520617265206e6f206265747360781b60448201526064015b60405180910390fd5b600a54600160501b900461ffff166000908152600b6020526040902060078101546008909101548190610c9d906064612c6d565b610ca79190612c59565b600a54600160501b900461ffff166000908152600b60205260409020600901548290610cd4906064612c6d565b610cde9190612c59565b600a8054600160501b900461ffff166000908152600b6020526040902001548390610d0a906064612c6d565b610d149190612c59565b93509350935050909192565b336001600160a01b037f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e699091614610d9a5760405163073e64fd60e21b81523360048201526001600160a01b037f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909166024820152604401610c60565b610da48282611d2c565b5050565b6000610db5848484611df2565b610e078433610e0285604051806060016040528060288152602001612dcf602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190612132565b611c07565b5060019392505050565b61ffff81166000908152600b6020526040812060040154421115610e46575061ffff166000908152600c602052604090205490565b506000919050565b919050565b6015546000906001600160a01b03163314610e6d57600080fd5b600a54600160501b900461ffff166000908152600b602052604090206006015460ff16610edc5760405162461bcd60e51b815260206004820152601b60248201527f5468652067616d65206861736e277420737461727465642079657400000000006044820152606401610c60565b600a54600160501b900461ffff166000908152600b60205260409020600101544211610f4a5760405162461bcd60e51b815260206004820152601a60248201527f75736572732063616e207374696c6c20706c61636520626574730000000000006044820152606401610c60565b600a54600160501b900461ffff166000908152600b60205260409020600601546301000000900460ff1615610fcd5760405162461bcd60e51b815260206004820152602360248201527f74686520646f6f722068617320616c7265616479206265656e2067656e6572616044820152621d195960ea1b6064820152608401610c60565b600854600954600a546040516305d3b1d360e41b81526004810192909252600160a01b830467ffffffffffffffff166024830152640100000000810461ffff16604483015263ffffffff8082166064840152600160301b9091041660848201526001600160a01b0390911690635d3b1d309060a401602060405180830381600087803b15801561105c57600080fd5b505af1158015611070573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110949190612993565b90506110a242610168612c41565b600a805461ffff600160501b9182900481166000908152600b60205260408082206002908101969096559354929092041681522060038101549101546110e89190612c41565b600a805461ffff600160501b9182900481166000908152600b602052604080822060040195909555835483900482168152848120600501869055925491909104168152818120600601805463ff00000019166301000000179055905182917f4e4bcfd8b2e9741d85a87b390737006c083e3fbb255079b2f32e9d2688879c3491a290565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bf7918590610e029086611ba1565b600a54600160501b900461ffff166000908152600b60205260408120600101544210156111cf5750600190565b600a54600160501b900461ffff166000908152600b60205260409020600201544210156111fc5750600290565b600a54600160501b900461ffff166000908152600b60205260409020600401544210156112295750600390565b50600090565b6015546001600160a01b0316331461124657600080fd5b601355565b6015546001600160a01b0316331461126257600080fd5b4761126c8261216c565b60006112788247612c8c565b6015546040519192506000916001600160a01b039091169083908381818185875af1925050503d80600081146112ca576040519150601f19603f3d011682016040523d82523d6000602084013e6112cf565b606091505b50505050505050565b6006546001600160a01b0316331461132b5760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b6044820152606401610c60565b600580546001600160a01b0319808216339081179093556006805490911690556040516001600160a01b03909116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b6015546001600160a01b0316331461139d57600080fd5b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b600a54600160501b900461ffff166000908152600b602052604090206006015460ff166114305760405162461bcd60e51b815260206004820152601b60248201527f5468652067616d65206861736e277420737461727465642079657400000000006044820152606401610c60565b600a54600160501b900461ffff166000908152600b6020526040902060010154421061145b57600080fd5b60008161ffff161180156114995750600a5461ffff600160501b90910481166000908152600b60205260409020600601546101009004811690821611155b6114e55760405162461bcd60e51b815260206004820152601a60248201527f706c656173652073656c65637420612076616c696420646f6f720000000000006044820152606401610c60565b8061ffff166001141561152757600a54600160501b900461ffff166000908152600b6020526040812060080180549161151d83612d00565b9190505550611591565b8061ffff166002141561155f57600a54600160501b900461ffff166000908152600b6020526040812060090180549161151d83612d00565b600a8054600160501b900461ffff166000908152600b6020526040812090910180549161158b83612d00565b91905055505b600a54600160501b900461ffff166000908152600b602052604081206007018054916115bc83612d00565b9091555050336000908152600d60209081526040808320600a805461ffff600160501b91829004811687528386528487208990559154041684529091528120600101805484929061160e908490612c41565b9091555050336000818152600d60209081526040808320600a54600160501b900461ffff90811685529252909120600201805461ffff191691841691909117905561165990836122d8565b60405182815233907fc0ae20ffbb1eca06a840c35912bdb9f8e6e1fad1f028c875be0ddf54d480d71e9060200160405180910390a25050565b6015546001600160a01b031633146116a957600080fd5b6015805460ff60a01b1916600160a01b179055565b6015546001600160a01b031633146116d557600080fd5b6001600160801b03908116600160801b02911617601055565b606060048054610b6790612ca3565b6015546001600160a01b0316331461171457600080fd5b600a54600160501b900461ffff166000908152600b602052604090206006015460ff16156117d857600a54600160501b900461ffff166000908152600b602052604090206004015442116117a25760405162461bcd60e51b8152602060048201526015602482015274612067616d6520697320696e2070726f677265737360581b6044820152606401610c60565b600a8054600160501b900461ffff1690806117bc83612cde565b91906101000a81548161ffff021916908361ffff160217905550505b600a54600160501b900461ffff166000908152600b602052604090204290819055611804908590612c41565b600a805461ffff600160501b9182900481166000908152600b60208190526040808320600190810197909755855485900484168352808320600301999099558454849004831682528882206006908101805460ff191690971790965584548490048316825288822090950180549783166101000262ffff00199098169790971790965560145483548390048216875287872060020155915404168352929091209091015550565b6000610bf73384610e0285604051806060016040528060258152602001612df7602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190612132565b6000610bf7338484611df2565b336000908152600d60209081526040808320600a54600160501b900461ffff16845290915290206002015462010000900460ff16156119885760405162461bcd60e51b815260206004820181905260248201527f757365722068617320616c7265616479206f70656e65642074686520646f6f726044820152606401610c60565b600a54600160501b900461ffff166000908152600b6020526040902060020154421180156119d45750600a54600160501b900461ffff166000908152600b602052604090206004015442105b611a205760405162461bcd60e51b815260206004820152601960248201527f796f752063616e277420636c61696d207269676874206e6f77000000000000006044820152606401610c60565b336000908152600d60209081526040808320600a805461ffff600160501b91829004811687528386528487206002908101805462ff000019166201000017905592549190910481168652600c85528386205492909452919093200154161415611b5057600a805461ffff600160501b9182900481166000818152600b6020818152604080842090920154338452600d8252828420948452848252828420600201805463ff0000001916630100000017905596549590950490931681529252812054611aeb9083612c6d565b336000908152600d60209081526040808320600a805461ffff600160501b9182900481168752838652848720600301889055915404168452909152812060040180549293508392909190611b40908490612c41565b90915550610da4905033826123e4565b565b611b5a6124bb565b611b638161250e565b50565b6015546001600160a01b03163314611b7d57600080fd5b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b600080611bae8385612c41565b905083811015611c005760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c60565b9392505050565b6001600160a01b038316611c695760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c60565b6001600160a01b038216611cca5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c60565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600a5461ffff600160501b90910481166000908152600b602052604081206006015483519192610100909104169083908390611d7857634e487b7160e01b600052603260045260246000fd5b6020026020010151611d8a9190612d1b565b611d95906001612c41565b600a54600160501b900461ffff166000908152600c6020908152604091829020839055905182815291925084917f8a6dbdfd71480fce606f8ed4573978cfb4287c8d8296daf567c3e9ccab272ef8910160405180910390a2505050565b6001600160a01b0383166000908152600e602052604090205460ff16158015611e3457506001600160a01b0382166000908152600e602052604090205460ff16155b1561212257601554600160a01b900460ff16611e925760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206973206e6f74206f70656e207965740000000000000000006044820152606401610c60565b6001600160a01b038316600090815260186020526040812054819060ff1615611f94576010546001600160801b03168311801590611f0b57506010546001600160801b03600160801b90910416611efe856001600160a01b031660009081526020819052604090205490565b611f089085612c41565b11155b611f495760405162461bcd60e51b815260206004820152600f60248201526e0c2dadeeadce840e8dede40d0d2ced608b1b6044820152606401610c60565b601460125411611f6c57601154600160601b900465ffffffffffff169150611f7a565b60115465ffffffffffff1691505b60128054906000611f8a83612d00565b91905055506120ba565b6001600160a01b03841660009081526018602052604090205460ff1615612042576010546001600160801b03168311156120025760405162461bcd60e51b815260206004820152600f60248201526e0c2dadeeadce840e8dede40d0d2ced608b1b6044820152606401610c60565b6001905060146012541161202957601154600160601b900465ffffffffffff1691506120ba565b601154600160301b900465ffffffffffff1691506120ba565b6010546001600160801b03600160801b90910416612075856001600160a01b031660009081526020819052604090205490565b61207f9085612c41565b11156120ba5760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610c60565b600060646120d16001600160801b03851686612c6d565b6120db9190612c59565b90506120e78185612c8c565b93506120f48630836125b9565b818015612111575060135430600090815260208190526040902054115b1561211e5761211e61273c565b5050505b61212d8383836125b9565b505050565b600081848411156121565760405162461bcd60e51b8152600401610c609190612afe565b5060006121638486612c8c565b95945050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106121af57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561220357600080fd5b505afa158015612217573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223b9190612845565b8160018151811061225c57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260175460405163791ac94760e01b815291169063791ac947906122a2908590600090869030904290600401612b51565b600060405180830381600087803b1580156122bc57600080fd5b505af11580156122d0573d6000803e3d6000fd5b505050505050565b6001600160a01b0382166123385760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c60565b61237581604051806060016040528060228152602001612d87602291396001600160a01b0385166000908152602081905260409020549190612132565b6001600160a01b03831660009081526020819052604090205560025461239b90826127a8565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b6001600160a01b03821661243a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610c60565b6002546124479082611ba1565b6002556001600160a01b03821660009081526020819052604090205461246d9082611ba1565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016123d8565b6005546001600160a01b03163314611b505760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b6044820152606401610c60565b6001600160a01b0381163314156125675760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610c60565b600680546001600160a01b0319166001600160a01b03838116918217909255600554604051919216907fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae127890600090a350565b6001600160a01b03831661261d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c60565b6001600160a01b03821661267f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c60565b6126bc81604051806060016040528060268152602001612da9602691396001600160a01b0386166000908152602081905260409020549190612132565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546126eb9082611ba1565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611d1f565b601354479061274a9061216c565b60006127568247612c8c565b6015546040519192506000916001600160a01b039091169083908381818185875af1925050503d80600081146122d0576040519150601f19603f3d011682016040523d82523d6000602084013e6122d0565b6000611c0083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612132565b80356001600160801b0381168114610e4e57600080fd5b803561ffff81168114610e4e57600080fd5b803565ffffffffffff81168114610e4e57600080fd5b60006020828403121561283a578081fd5b8135611c0081612d71565b600060208284031215612856578081fd5b8151611c0081612d71565b60008060408385031215612873578081fd5b823561287e81612d71565b9150602083013561288e81612d71565b809150509250929050565b6000806000606084860312156128ad578081fd5b83356128b881612d71565b925060208401356128c881612d71565b929592945050506040919091013590565b600080604083850312156128eb578182fd5b82356128f681612d71565b915061290460208401612801565b90509250929050565b6000806040838503121561291f578182fd5b823561292a81612d71565b946020939093013593505050565b6000806040838503121561294a578182fd5b612953836127ea565b9150612904602084016127ea565b600060208284031215612972578081fd5b611c0082612801565b60006020828403121561298c578081fd5b5035919050565b6000602082840312156129a4578081fd5b5051919050565b600080604083850312156129bd578182fd5b8235915060208084013567ffffffffffffffff808211156129dc578384fd5b818601915086601f8301126129ef578384fd5b813581811115612a0157612a01612d5b565b8060051b604051601f19603f83011681018181108582111715612a2657612a26612d5b565b604052828152858101935084860182860187018b1015612a44578788fd5b8795505b83861015612a66578035855260019590950194938601938601612a48565b508096505050505050509250929050565b60008060408385031215612a89578182fd5b8235915061290460208401612801565b60008060008060808587031215612aae578081fd5b8435935060208501359250612ac560408601612801565b9396929550929360600135925050565b60008060408385031215612ae7578182fd5b612af083612813565b915061290460208401612813565b6000602080835283518082850152825b81811015612b2a57858101830151858201604001528201612b0e565b81811115612b3b5783604083870101525b50601f01601f1916929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612ba05784516001600160a01b031683529383019391830191600101612b7b565b50506001600160a01b03969096166060850152505050608001529392505050565b60006101c0820190508f82528e60208301528d60408301528c60608301528b60808301528a60a083015289151560c083015261ffff891660e0830152612c0c61010083018915159052565b6101208201969096526101408101949094526101608401929092526101808301526101a0909101529998505050505050505050565b60008219821115612c5457612c54612d2f565b500190565b600082612c6857612c68612d45565b500490565b6000816000190483118215151615612c8757612c87612d2f565b500290565b600082821015612c9e57612c9e612d2f565b500390565b600181811c90821680612cb757607f821691505b60208210811415612cd857634e487b7160e01b600052602260045260246000fd5b50919050565b600061ffff80831681811415612cf657612cf6612d2f565b6001019392505050565b6000600019821415612d1457612d14612d2f565b5060010190565b600082612d2a57612d2a612d45565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611b6357600080fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202e34fc496947c6ab82ec02ea5db4725d2d436625d0ba6db2d77dc1c191c74a0764736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000361
-----Decoded View---------------
Arg [0] : subscriptionId (uint64): 865
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000361
Deployed Bytecode Sourcemap
35441:13857:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47751:128;;;;;;;;;;-1:-1:-1;47751:128:0;;;;;:::i;:::-;;:::i;:::-;;10517:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38294:27;;;;;;;;;;-1:-1:-1;38294:27:0;;;;-1:-1:-1;;;;;38294:27:0;;;;;;-1:-1:-1;;;;;6133:32:1;;;6115:51;;6103:2;6088:18;38294:27:0;6070:102:1;12750:194:0;;;;;;;;;;-1:-1:-1;12750:194:0;;;;;:::i;:::-;;:::i;:::-;;;6651:14:1;;6644:22;6626:41;;6614:2;6599:18;12750:194:0;6581:92:1;41491:427:0;;;;;;;;;;;;;:::i;:::-;;;;19053:25:1;;;19109:2;19094:18;;19087:34;;;;19137:18;;;19130:34;19041:2;19026:18;41491:427:0;19008:162:1;11637:108:0;;;;;;;;;;-1:-1:-1;11725:12:0;;11637:108;;;16931:25:1;;;16919:2;16904:18;11637:108:0;16886:76:1;46456:258:0;;;;;;;;;;-1:-1:-1;46456:258:0;;;;;:::i;:::-;-1:-1:-1;;;;;46617:19:0;;;;46553:12;46617:19;;;:9;:19;;;;;;;;:26;;;;;;;;;;;:30;;;;;46662:33;;;;46617:30;;;;;;;46456:258;;;;;7215:14:1;;7208:22;7190:41;;7262:2;7247:18;;7240:34;;;;7163:18;46456:258:0;7145:135:1;34458:306:0;;;;;;;;;;-1:-1:-1;34458:306:0;;;;;:::i;:::-;;:::i;13426:454::-;;;;;;;;;;-1:-1:-1;13426:454:0;;;;;:::i;:::-;;:::i;37967:24::-;;;;;;;;;;;;;;;;45230:220;;;;;;;;;;-1:-1:-1;45230:220:0;;;;;:::i;:::-;;:::i;41926:1034::-;;;;;;;;;;;;;:::i;11479:93::-;;;;;;;;;;-1:-1:-1;11479:93:0;;11562:2;20670:36:1;;20658:2;20643:18;11479:93:0;20625:87:1;14292:293:0;;;;;;;;;;-1:-1:-1;14292:293:0;;;;;:::i;:::-;;:::i;37795:38::-;;;;;;;;;;-1:-1:-1;37795:38:0;;;;-1:-1:-1;;;37795:38:0;;-1:-1:-1;;;;;37795:38:0;;;;;;-1:-1:-1;;;;;16533:47:1;;;16515:66;;16503:2;16488:18;37795:38:0;16470:117:1;47317:426:0;;;;;;;;;;;;;:::i;:::-;;;16766:6:1;16754:19;;;16736:38;;16724:2;16709:18;47317:426:0;16691:89:1;38266:21:0;;;;;;;;;;-1:-1:-1;38266:21:0;;;;-1:-1:-1;;;;;38266:21:0;;;37491:60;;;;;;;;;;-1:-1:-1;37491:60:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18509:25:1;;;18565:2;18550:18;;18543:34;;;;18625:6;18613:19;;;18593:18;;;18586:47;;;;18676:14;;18669:22;18664:2;18649:18;;18642:50;18736:14;18729:22;18723:3;18708:19;;18701:51;18783:3;18768:19;;18761:35;;;;18827:3;18812:19;;18805:35;18496:3;18481:19;37491:60:0;18463:383:1;37635:46:0;;;;;;;;;;-1:-1:-1;37635:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;37998:41;;;;;;;;;;;;;;;;47887:118;;;;;;;;;;-1:-1:-1;47887:118:0;;;;;:::i;:::-;;:::i;48993:302::-;;;;;;;;;;-1:-1:-1;48993:302:0;;;;;:::i;:::-;;:::i;11808:143::-;;;;;;;;;;-1:-1:-1;11808:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;11925:18:0;11898:7;11925:18;;;;;;;;;;;;11808:143;20915:295;;;;;;;;;;;;;:::i;48252:113::-;;;;;;;;;;-1:-1:-1;48252:113:0;;;;;:::i;:::-;;:::i;40571:912::-;;;;;;;;;;-1:-1:-1;40571:912:0;;;;;:::i;:::-;;:::i;48013:80::-;;;;;;;;;;;;;:::i;37688:48::-;;;;;;;;;;-1:-1:-1;37688:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21274:89;;;;;;;;;;-1:-1:-1;21348:7:0;;-1:-1:-1;;;;;21348:7:0;21274:89;;48101:143;;;;;;;;;;-1:-1:-1;48101:143:0;;;;;:::i;:::-;;:::i;10736:104::-;;;;;;;;;;;;;:::i;37920:40::-;;;;;;;;;;;;37957:3;37920:40;;;;;20497:18:1;20485:31;;;20467:50;;20455:2;20440:18;37920:40:0;20422:101:1;35817:51:0;;;;;;;;;;-1:-1:-1;35817:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6893:14:1;;6886:22;6868:41;;6952:14;;6945:22;6940:2;6925:18;;6918:50;6984:18;;;6977:34;6856:2;6841:18;35817:51:0;6823:194:1;39748:815:0;;;;;;;;;;-1:-1:-1;39748:815:0;;;;;:::i;:::-;;:::i;15088:393::-;;;;;;;;;;-1:-1:-1;15088:393:0;;;;;:::i;:::-;;:::i;12164:200::-;;;;;;;;;;-1:-1:-1;12164:200:0;;;;;:::i;:::-;;:::i;38330:41::-;;;;;;;;;;-1:-1:-1;38330:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;36936:35;;;;;;;;;;-1:-1:-1;36936:35:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;45458:990::-;;;;;;;;;;;;;:::i;12427:176::-;;;;;;;;;;-1:-1:-1;12427:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;12568:18:0;;;12541:7;12568:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12427:176;46782:180;;;;;;;;;;-1:-1:-1;46782:180:0;;;;;:::i;:::-;-1:-1:-1;;;;;46914:16:0;;;;46890:4;46914:16;;;:9;:16;;;;;;;;:29;;;;;;;;;;;:40;;;;;;;;;46782:180;36903:26;;;;;;;;;;-1:-1:-1;36903:26:0;;;;-1:-1:-1;;;36903:26:0;;;;;;37745:43;;;;;;;;;;-1:-1:-1;37745:43:0;;;;-1:-1:-1;;;;;37745:43:0;;;20704:106;;;;;;;;;;-1:-1:-1;20704:106:0;;;;;:::i;:::-;;:::i;47047:262::-;;;;;;;;;;-1:-1:-1;47047:262:0;;;;;:::i;:::-;-1:-1:-1;;;;;47202:16:0;;;;47151:7;47202:16;;;:9;:16;;;;;;;;:29;;;;;;;;;;;:33;;47250:40;;;;;47202:33;;47250:40;;;47047:262;;;;;18129:25:1;;;18185:2;18170:18;;18163:34;;;;18102:18;47047:262:0;18084:119:1;48373:117:0;;;;;;;;;;-1:-1:-1;48373:117:0;;;;;:::i;:::-;;:::i;47751:128::-;39678:4;;-1:-1:-1;;;;;39678:4:0;39664:10;:18;39656:27;;;;;;47832:6:::1;:13:::0;;::::1;47856:15:::0;;::::1;-1:-1:-1::0;;;47856:15:0::1;-1:-1:-1::0;;47856:15:0;;;47832:13;;;::::1;47856:15:::0;;;;;;;::::1;::::0;;47751:128::o;10517:100::-;10571:13;10604:5;10597:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10517:100;:::o;12750:194::-;12858:4;12875:39;9490:10;12898:7;12907:6;12875:8;:39::i;:::-;-1:-1:-1;12932:4:0;12750:194;;;;:::o;41491:427::-;41588:12;;-1:-1:-1;;;41588:12:0;;;;41537:7;41583:18;;;:4;:18;;;;;:28;;;41537:7;;;;41575:62;;;;-1:-1:-1;;;41575:62:0;;15865:2:1;41575:62:0;;;15847:21:1;15904:2;15884:18;;;15877:30;-1:-1:-1;;;15923:18:1;;;15916:47;15980:18;;41575:62:0;;;;;;;;;41669:12;;-1:-1:-1;;;41669:12:0;;;;41648:13;41664:18;;;:4;:18;;;;;:28;;;;41726:32;;;;;41664:28;;41726:38;;41761:3;41726:38;:::i;:::-;41725:48;;;;:::i;:::-;41794:12;;-1:-1:-1;;;41794:12:0;;;;41789:18;;;;:4;:18;;;;;:32;;;41831:5;;41789:38;;41824:3;41789:38;:::i;:::-;41788:48;;;;:::i;:::-;41857:12;;;-1:-1:-1;;;41857:12:0;;;;41852:18;;;;:4;:18;;;;;:32;;41894:5;;41852:38;;41887:3;41852:38;:::i;:::-;41851:48;;;;:::i;:::-;41703:207;;;;;;;41491:427;;;:::o;34458:306::-;34587:10;-1:-1:-1;;;;;34601:14:0;34587:28;;34583:121;;34639:53;;-1:-1:-1;;;34639:53:0;;34665:10;34639:53;;;6389:34:1;-1:-1:-1;;;;;34677:14:0;6459:15:1;6439:18;;;6432:43;6324:18;;34639:53:0;6306:175:1;34583:121:0;34714:42;34733:9;34744:11;34714:18;:42::i;:::-;34458:306;;:::o;13426:454::-;13566:4;13583:36;13593:6;13601:9;13612:6;13583:9;:36::i;:::-;13630:220;13653:6;9490:10;13701:138;13757:6;13701:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13701:19:0;;;;;;:11;:19;;;;;;;;9490:10;13701:33;;;;;;;;;;:37;:138::i;:::-;13630:8;:220::i;:::-;-1:-1:-1;13868:4:0;13426:454;;;;;:::o;45230:220::-;45327:11;;;45285:7;45327:11;;;:4;:11;;;;;:20;;;45309:15;:38;45305:138;;;-1:-1:-1;45371:19:0;;;;;;:12;:19;;;;;;;45230:220::o;45305:138::-;-1:-1:-1;45430:1:0;;45230:220;-1:-1:-1;45230:220:0:o;45305:138::-;45230:220;;;:::o;41926:1034::-;39678:4;;42010:17;;-1:-1:-1;;;;;39678:4:0;39664:10;:18;39656:27;;;;;;42058:12:::1;::::0;-1:-1:-1;;;42058:12:0;::::1;;;42053:18;::::0;;;:4:::1;:18;::::0;;;;:31:::1;;::::0;::::1;;42045:71;;;::::0;-1:-1:-1;;;42045:71:0;;11790:2:1;42045:71:0::1;::::0;::::1;11772:21:1::0;11829:2;11809:18;;;11802:30;11868:29;11848:18;;;11841:57;11915:18;;42045:71:0::1;11762:177:1::0;42045:71:0::1;42172:12;::::0;-1:-1:-1;;;42172:12:0;::::1;;;42167:18;::::0;;;:4:::1;:18;::::0;;;;:25:::1;;::::0;42149:15:::1;:43;42127:119;;;::::0;-1:-1:-1;;;42127:119:0;;10729:2:1;42127:119:0::1;::::0;::::1;10711:21:1::0;10768:2;10748:18;;;10741:30;10807:28;10787:18;;;10780:56;10853:18;;42127:119:0::1;10701:176:1::0;42127:119:0::1;42285:12;::::0;-1:-1:-1;;;42285:12:0;::::1;;;42280:18;::::0;;;:4:::1;:18;::::0;;;;:39:::1;;::::0;;;::::1;;;42279:40;42257:125;;;::::0;-1:-1:-1;;;42257:125:0;;14704:2:1;42257:125:0::1;::::0;::::1;14686:21:1::0;14743:2;14723:18;;;14716:30;14782:34;14762:18;;;14755:62;-1:-1:-1;;;14833:18:1;;;14826:33;14876:19;;42257:125:0::1;14676:225:1::0;42257:125:0::1;42405:11;::::0;42450:7:::1;::::0;42503:20:::1;::::0;42405:183:::1;::::0;-1:-1:-1;;;42405:183:0;;42503:20:::1;42405:183:::0;::::1;7536:25:1::0;;;;-1:-1:-1;;;42472:16:0;::::1;;;7577:18:1::0;;;7570:59;42503:20:0;;::::1;;;7645:18:1::0;;;7638:47;42538:16:0::1;::::0;;::::1;7730:18:1::0;;;7723:43;-1:-1:-1;;;42569:8:0;;::::1;;7782:19:1::0;;;7775:44;-1:-1:-1;;;;;42405:11:0;;::::1;::::0;:30:::1;::::0;7508:19:1;;42405:183:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42393:195:::0;-1:-1:-1;42631:21:0::1;:15;42649:3;42631:21;:::i;:::-;42604:12;::::0;;::::1;-1:-1:-1::0;;;42604:12:0;;;::::1;::::0;::::1;42599:18;::::0;;;:4:::1;:18;::::0;;;;;:29:::1;::::0;;::::1;:53:::0;;;;42774:12;;;;;::::1;;42769:18:::0;;;:32:::1;::::0;::::1;::::0;42724:29;::::1;::::0;:77:::1;::::0;42769:32;42724:77:::1;:::i;:::-;42686:12;::::0;;::::1;-1:-1:-1::0;;;42686:12:0;;;::::1;::::0;::::1;42681:18;::::0;;;:4:::1;:18;::::0;;;;;:27:::1;;:120:::0;;;;42817:12;;;;::::1;::::0;::::1;42812:18:::0;;;;;:30:::1;;:42:::0;;;42870:12;;;;;::::1;;42865:18:::0;;;;;:39:::1;;:46:::0;;-1:-1:-1;;42865:46:0::1;::::0;::::1;::::0;;42927:25;;42845:9;;42927:25:::1;::::0;::::1;41926:1034:::0;:::o;14292:293::-;9490:10;14405:4;14494:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14494:34:0;;;;;;;;;;14405:4;;14422:133;;14472:7;;14494:50;;14533:10;14494:38;:50::i;47317:426::-;47420:12;;-1:-1:-1;;;47420:12:0;;;;47367:13;47415:18;;;:4;:18;;;;;:25;;;47397:15;:43;47393:319;;;-1:-1:-1;47466:1:0;47317:426;:::o;47393:319::-;47512:12;;-1:-1:-1;;;47512:12:0;;;;47507:18;;;;:4;:18;;;;;:29;;;47489:15;:47;47485:227;;;-1:-1:-1;47562:1:0;47317:426;:::o;47485:227::-;47608:12;;-1:-1:-1;;;47608:12:0;;;;47603:18;;;;:4;:18;;;;;:27;;;47585:15;:45;47581:131;;;-1:-1:-1;47656:1:0;47317:426;:::o;47581:131::-;-1:-1:-1;47699:1:0;47317:426;:::o;47887:118::-;39678:4;;-1:-1:-1;;;;;39678:4:0;39664:10;:18;39656:27;;;;;;47968:16:::1;:29:::0;47887:118::o;48993:302::-;39678:4;;-1:-1:-1;;;;;39678:4:0;39664:10;:18;39656:27;;;;;;49096:21:::1;49128:24;49145:6:::0;49128:16:::1;:24::i;:::-;49163:18;49184:41;49208:17:::0;49184:21:::1;:41;:::i;:::-;49255:4;::::0;:32:::1;::::0;49163:62;;-1:-1:-1;49237:12:0::1;::::0;-1:-1:-1;;;;;49255:4:0;;::::1;::::0;49163:62;;49237:12;49255:32;49237:12;49255:32;49163:62;49255:4;:32:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;48993:302:0:o;20915:295::-;20993:14;;-1:-1:-1;;;;;20993:14:0;20979:10;:28;20971:63;;;;-1:-1:-1;;;20971:63:0;;9619:2:1;20971:63:0;;;9601:21:1;9658:2;9638:18;;;9631:30;-1:-1:-1;;;9677:18:1;;;9670:52;9739:18;;20971:63:0;9591:172:1;20971:63:0;21066:7;;;-1:-1:-1;;;;;;21084:20:0;;;21094:10;21084:20;;;;;;21115:14;:27;;;;;;;21160:42;;-1:-1:-1;;;;;21066:7:0;;;;21094:10;21066:7;;21160:42;;21047:16;;21160:42;20915:295;:::o;48252:113::-;39678:4;;-1:-1:-1;;;;;39678:4:0;39664:10;:18;39656:27;;;;;;-1:-1:-1;;;;;48326:24:0::1;;::::0;;;:14:::1;:24;::::0;;;;:31;;-1:-1:-1;;48326:31:0::1;48353:4;48326:31;::::0;;48252:113::o;40571:912::-;40656:12;;-1:-1:-1;;;40656:12:0;;;;40651:18;;;;:4;:18;;;;;:31;;;;;40643:71;;;;-1:-1:-1;;;40643:71:0;;11790:2:1;40643:71:0;;;11772:21:1;11829:2;11809:18;;;11802:30;11868:29;11848:18;;;11841:57;11915:18;;40643:71:0;11762:177:1;40643:71:0;40756:12;;-1:-1:-1;;;40756:12:0;;;;40751:18;;;;:4;:18;;;;;:25;;;40733:15;:43;40725:52;;;;;;40818:1;40810:5;:9;;;:53;;;;-1:-1:-1;40837:12:0;;;-1:-1:-1;;;40837:12:0;;;;;40832:18;;;;:4;:18;;;;;:31;;;40837:12;40832:31;;;;40823:40;;;;;40810:53;40788:129;;;;-1:-1:-1;;;40788:129:0;;11435:2:1;40788:129:0;;;11417:21:1;11474:2;11454:18;;;11447:30;11513:28;11493:18;;;11486:56;11559:18;;40788:129:0;11407:176:1;40788:129:0;40932:5;:10;;40941:1;40932:10;40928:227;;;40964:12;;-1:-1:-1;;;40964:12:0;;;;40959:18;;;;:4;:18;;;;;:32;;:34;;;;;;:::i;:::-;;;;;;40928:227;;;41015:5;:10;;41024:1;41015:10;41011:144;;;41047:12;;-1:-1:-1;;;41047:12:0;;;;41042:18;;;;:4;:18;;;;;:32;;:34;;;;;;:::i;41011:144::-;41114:12;;;-1:-1:-1;;;41114:12:0;;;;41109:18;;;;:4;:18;;;;;:32;;;:34;;;;;;:::i;:::-;;;;;;41011:144;41170:12;;-1:-1:-1;;;41170:12:0;;;;41165:18;;;;:4;:18;;;;;:28;;:30;;;;;;:::i;:::-;;;;-1:-1:-1;;41216:10:0;41206:21;;;;:9;:21;;;;;;;;41228:12;;;;-1:-1:-1;;;41228:12:0;;;;;;41206:35;;;;;;;;:52;;;41291:12;;;;41269:35;;;;;;;:44;;:58;;41248:10;;41206:21;41269:58;;41248:10;;41269:58;:::i;:::-;;;;-1:-1:-1;;41348:10:0;41338:21;;;;:9;:21;;;;;;;;41360:12;;-1:-1:-1;;;41360:12:0;;;;;;41338:35;;;;;;;:46;;:54;;-1:-1:-1;;41338:54:0;;;;;;;;;;41403:29;;41421:10;41403:5;:29::i;:::-;41448:27;;16931:25:1;;;41452:10:0;;41448:27;;16919:2:1;16904:18;41448:27:0;;;;;;;40571:912;;:::o;48013:80::-;39678:4;;-1:-1:-1;;;;;39678:4:0;39664:10;:18;39656:27;;;;;;48067:11:::1;:18:::0;;-1:-1:-1;;;;48067:18:0::1;-1:-1:-1::0;;;48067:18:0::1;::::0;;48013:80::o;48101:143::-;39678:4;;-1:-1:-1;;;;;39678:4:0;39664:10;:18;39656:27;;;;;;-1:-1:-1;;;;;48215:21:0;;::::1;-1:-1:-1::0;;;48215:21:0::1;48182:22:::0;::::1;48215:21;48182:16;48215:21:::0;48101:143::o;10736:104::-;10792:13;10825:7;10818:14;;;;;:::i;39748:815::-;39678:4;;-1:-1:-1;;;;;39678:4:0;39664:10;:18;39656:27;;;;;;39939:12:::1;::::0;-1:-1:-1;;;39939:12:0;::::1;;;39934:18;::::0;;;:4:::1;:18;::::0;;;;:31:::1;;::::0;::::1;;39930:221;;;40031:12;::::0;-1:-1:-1;;;40031:12:0;::::1;;;40026:18;::::0;;;:4:::1;:18;::::0;;;;:27:::1;;::::0;40008:15:::1;:45;39982:128;;;::::0;-1:-1:-1;;;39982:128:0;;9269:2:1;39982:128:0::1;::::0;::::1;9251:21:1::0;9308:2;9288:18;;;9281:30;-1:-1:-1;;;9327:18:1;;;9320:51;9388:18;;39982:128:0::1;9241:171:1::0;39982:128:0::1;40125:12;:14:::0;;-1:-1:-1;;;40125:14:0;::::1;;;::::0;:12;:14:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;39930:221;40166:12;::::0;-1:-1:-1;;;40166:12:0;::::1;;;40161:18;::::0;;;:4:::1;:18;::::0;;;;40192:15:::1;40161:46:::0;;;;40246:34:::1;::::0;40264:16;;40246:34:::1;:::i;:::-;40223:12;::::0;;::::1;-1:-1:-1::0;;;40223:12:0;;;::::1;::::0;::::1;40218:18;::::0;;;:4:::1;:18;::::0;;;;;;;:25:::1;::::0;;::::1;:62:::0;;;;40296:12;;;;::::1;::::0;::::1;40291:18:::0;;;;;:32:::1;;:52:::0;;;;40359:12;;;;::::1;::::0;::::1;40354:18:::0;;;;;:31:::1;::::0;;::::1;:38:::0;;-1:-1:-1;;40354:38:0::1;::::0;;::::1;::::0;;;40408:12;;;;::::1;::::0;::::1;40403:18:::0;;;;;:31;;::::1;:47:::0;;;;::::1;40223:12;40403:47;-1:-1:-1::0;;40403:47:0;;::::1;::::0;;;::::1;::::0;;;40493:7:::1;::::0;40466:12;;;;::::1;::::0;::::1;40461:18:::0;;;;;:29:::1;;:39:::0;40516:12;;::::1;;40511:18:::0;;;;;;:33;;::::1;:44:::0;-1:-1:-1;39748:815:0:o;15088:393::-;15206:4;15223:228;9490:10;15273:7;15295:145;15352:15;15295:145;;;;;;;;;;;;;;;;;9490:10;15295:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15295:34:0;;;;;;;;;;;;:38;:145::i;12164:200::-;12275:4;12292:42;9490:10;12316:9;12327:6;12292:9;:42::i;45458:990::-;45531:10;45521:21;;;;:9;:21;;;;;;;;45543:12;;-1:-1:-1;;;45543:12:0;;;;45521:35;;;;;;;:46;;;;;;;;45520:47;45498:129;;;;-1:-1:-1;;;45498:129:0;;12146:2:1;45498:129:0;;;12128:21:1;;;12165:18;;;12158:30;12224:34;12204:18;;;12197:62;12276:18;;45498:129:0;12118:182:1;45498:129:0;45683:12;;-1:-1:-1;;;45683:12:0;;;;45678:18;;;;:4;:18;;;;;:29;;;45660:15;:47;:113;;;;-1:-1:-1;45751:12:0;;-1:-1:-1;;;45751:12:0;;;;45746:18;;;;:4;:18;;;;;:27;;;45728:15;:45;45660:113;45638:188;;;;-1:-1:-1;;;45638:188:0;;13542:2:1;45638:188:0;;;13524:21:1;13581:2;13561:18;;;13554:30;13620:27;13600:18;;;13593:55;13665:18;;45638:188:0;13514:175:1;45638:188:0;45847:10;45837:21;;;;:9;:21;;;;;;;;45859:12;;;;-1:-1:-1;;;45859:12:0;;;;;;45837:35;;;;;;;;:46;;;;:53;;-1:-1:-1;;45837:53:0;;;;;45995:12;;;;;;;;45982:26;;:12;:26;;;;;;45919:35;;;;;;;;:46;;;:89;45901:540;;;46063:12;;;;-1:-1:-1;;;46063:12:0;;;;;;46035:20;46058:18;;;:4;:18;;;;;;;;:33;;;;46116:10;46106:21;;:9;:21;;;;;:35;;;;;;;;;:39;;:46;;-1:-1:-1;;46106:46:0;;;;;46237:12;;;;;;;;;46215:35;;;;;;:39;46183:71;;46058:33;46183:71;:::i;:::-;46279:10;46269:21;;;;:9;:21;;;;;;;;46291:12;;;;-1:-1:-1;;;46291:12:0;;;;;;46269:35;;;;;;;;:42;;:50;;;46356:12;;;;46334:35;;;;;;;:47;;:56;;46167:87;;-1:-1:-1;46167:87:0;;46334:47;;46269:21;46334:56;;46167:87;;46334:56;:::i;:::-;;;;-1:-1:-1;46405:24:0;;-1:-1:-1;46411:10:0;46423:5;46405;:24::i;45901:540::-;45458:990::o;20704:106::-;21978:20;:18;:20::i;:::-;20780:22:::1;20799:2;20780:18;:22::i;:::-;20704:106:::0;:::o;48373:117::-;39678:4;;-1:-1:-1;;;;;39678:4:0;39664:10;:18;39656:27;;;;;;-1:-1:-1;;;;;48449:26:0::1;;::::0;;;:16:::1;:26;::::0;;;;:33;;-1:-1:-1;;48449:33:0::1;48478:4;48449:33;::::0;;48373:117::o;1441:181::-;1499:7;;1531:5;1535:1;1531;:5;:::i;:::-;1519:17;;1560:1;1555;:6;;1547:46;;;;-1:-1:-1;;;1547:46:0;;10373:2:1;1547:46:0;;;10355:21:1;10412:2;10392:18;;;10385:30;10451:29;10431:18;;;10424:57;10498:18;;1547:46:0;10345:177:1;1547:46:0;1613:1;1441:181;-1:-1:-1;;;1441:181:0:o;18472:380::-;-1:-1:-1;;;;;18608:19:0;;18600:68;;;;-1:-1:-1;;;18600:68:0;;15108:2:1;18600:68:0;;;15090:21:1;15147:2;15127:18;;;15120:30;15186:34;15166:18;;;15159:62;-1:-1:-1;;;15237:18:1;;;15230:34;15281:19;;18600:68:0;15080:226:1;18600:68:0;-1:-1:-1;;;;;18687:21:0;;18679:68;;;;-1:-1:-1;;;18679:68:0;;9970:2:1;18679:68:0;;;9952:21:1;10009:2;9989:18;;;9982:30;10048:34;10028:18;;;10021:62;-1:-1:-1;;;10099:18:1;;;10092:32;10141:19;;18679:68:0;9942:224:1;18679:68:0;-1:-1:-1;;;;;18760:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18812:32;;16931:25:1;;;18812:32:0;;16904:18:1;18812:32:0;;;;;;;;18472:380;;;:::o;42968:359::-;43142:12;;;-1:-1:-1;;;43142:12:0;;;;;43099:17;43137:18;;;:4;:18;;;;;:31;;;43120:14;;43099:17;;43142:12;43137:31;;;;;43120:11;;43099:17;;43120:14;;-1:-1:-1;;;43120:14:0;;;;;;;;;;;;;;;:48;;;;:::i;:::-;43119:67;;43185:1;43119:67;:::i;:::-;43243:12;;-1:-1:-1;;;43243:12:0;;;;43230:26;;;;:12;:26;;;;;;;;;:38;;;43284:35;;16931:25:1;;;43230:38:0;;-1:-1:-1;43298:9:0;;43284:35;;16904:18:1;43284:35:0;;;;;;;42968:359;;;:::o;43335:1568::-;-1:-1:-1;;;;;43464:20:0;;;;;;:14;:20;;;;;;;;43463:21;:44;;;;-1:-1:-1;;;;;;43489:18:0;;;;;;:14;:18;;;;;;;;43488:19;43463:44;43459:1391;;;43532:11;;-1:-1:-1;;;43532:11:0;;;;43524:47;;;;-1:-1:-1;;;43524:47:0;;12507:2:1;43524:47:0;;;12489:21:1;12546:2;12526:18;;;12519:30;12585:25;12565:18;;;12558:53;12628:18;;43524:47:0;12479:173:1;43524:47:0;-1:-1:-1;;;;;43663:15:0;;43586:11;43663:15;;;:9;:15;;;;;;43586:11;;43663:15;;43659:899;;;43739:16;;-1:-1:-1;;;;;43739:16:0;43729:26;;;;;:92;;-1:-1:-1;43810:11:0;;-1:-1:-1;;;;;;;;43810:11:0;;;;43793:13;43803:2;-1:-1:-1;;;;;11925:18:0;11898:7;11925:18;;;;;;;;;;;;11808:143;43793:13;43784:22;;:6;:22;:::i;:::-;:37;;43729:92;43699:181;;;;-1:-1:-1;;;43699:181:0;;13198:2:1;43699:181:0;;;13180:21:1;13237:2;13217:18;;;13210:30;-1:-1:-1;;;13256:18:1;;;13249:45;13311:18;;43699:181:0;13170:165:1;43699:181:0;43916:2;43903:9;;:15;43899:139;;43949:8;;-1:-1:-1;;;43949:8:0;;;;;-1:-1:-1;43899:139:0;;;44012:6;;;;;-1:-1:-1;43899:139:0;44056:9;:11;;;:9;:11;;;:::i;:::-;;;;;;43659:899;;;-1:-1:-1;;;;;44127:13:0;;;;;;:9;:13;;;;;;;;44123:435;;;44179:16;;-1:-1:-1;;;;;44179:16:0;44169:26;;;44161:54;;;;-1:-1:-1;;;44161:54:0;;13198:2:1;44161:54:0;;;13180:21:1;13237:2;13217:18;;;13210:30;-1:-1:-1;;;13256:18:1;;;13249:45;13311:18;;44161:54:0;13170:165:1;44161:54:0;44241:4;44234:11;;44281:2;44268:9;;:15;44264:140;;44314:8;;-1:-1:-1;;;44314:8:0;;;;;-1:-1:-1;44123:435:0;;44264:140;44377:7;;-1:-1:-1;;;44377:7:0;;;;;-1:-1:-1;44123:435:0;;;44516:11;;-1:-1:-1;;;;;;;;44516:11:0;;;;44499:13;44509:2;-1:-1:-1;;;;;11925:18:0;11898:7;11925:18;;;;;;;;;;;;11808:143;44499:13;44490:22;;:6;:22;:::i;:::-;:37;;44482:60;;;;-1:-1:-1;;;44482:60:0;;12859:2:1;44482:60:0;;;12841:21:1;12898:2;12878:18;;;12871:30;-1:-1:-1;;;12917:18:1;;;12910:40;12967:18;;44482:60:0;12831:160:1;44482:60:0;44572:17;37957:3;44593:12;-1:-1:-1;;;;;44593:12:0;;:6;:12;:::i;:::-;44592:28;;;;:::i;:::-;44572:48;-1:-1:-1;44635:19:0;44572:48;44635:19;;:::i;:::-;;;44669:47;44685:4;44699;44706:9;44669:15;:47::i;:::-;44737:4;:51;;;;-1:-1:-1;44772:16:0;;44763:4;11898:7;11925:18;;;;;;;;;;;44745:43;44737:51;44733:106;;;44809:14;:12;:14::i;:::-;43459:1391;;;;44862:33;44878:4;44884:2;44888:6;44862:15;:33::i;:::-;43335:1568;;;:::o;2344:226::-;2464:7;2500:12;2492:6;;;;2484:29;;;;-1:-1:-1;;;2484:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2524:9:0;2536:5;2540:1;2536;:5;:::i;:::-;2524:17;2344:226;-1:-1:-1;;;;;2344:226:0:o;48498:487::-;48588:16;;;48602:1;48588:16;;;;;;;;48564:21;;48588:16;;;;;;;;;;-1:-1:-1;48588:16:0;48564:40;;48633:4;48615;48620:1;48615:7;;;;;;-1:-1:-1;;;48615:7:0;;;;;;;;;-1:-1:-1;;;;;48615:23:0;;;:7;;;;;;;;;;:23;;;;48659:9;;:16;;;-1:-1:-1;;;48659:16:0;;;;:9;;;;;:14;;:16;;;;;48615:7;;48659:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48649:4;48654:1;48649:7;;;;;;-1:-1:-1;;;48649:7:0;;;;;;;;;-1:-1:-1;;;;;48649:26:0;;;:7;;;;;;;;;:26;48759:9;;:218;;-1:-1:-1;;;48759:218:0;;:9;;;:60;;:218;;48834:11;;48759:9;;48904:4;;48931;;48951:15;;48759:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48498:487;;:::o;17579:455::-;-1:-1:-1;;;;;17663:21:0;;17655:67;;;;-1:-1:-1;;;17655:67:0;;13896:2:1;17655:67:0;;;13878:21:1;13935:2;13915:18;;;13908:30;13974:34;13954:18;;;13947:62;-1:-1:-1;;;14025:18:1;;;14018:31;14066:19;;17655:67:0;13868:223:1;17655:67:0;17818:105;17855:6;17818:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17818:18:0;;:9;:18;;;;;;;;;;;;:105;:22;:105::i;:::-;-1:-1:-1;;;;;17797:18:0;;:9;:18;;;;;;;;;;:126;17949:12;;:24;;17966:6;17949:16;:24::i;:::-;17934:12;:39;17989:37;;16931:25:1;;;18015:1:0;;-1:-1:-1;;;;;17989:37:0;;;;;16919:2:1;16904:18;17989:37:0;;;;;;;;17579:455;;:::o;16868:378::-;-1:-1:-1;;;;;16952:21:0;;16944:65;;;;-1:-1:-1;;;16944:65:0;;16211:2:1;16944:65:0;;;16193:21:1;16250:2;16230:18;;;16223:30;16289:33;16269:18;;;16262:61;16340:18;;16944:65:0;16183:181:1;16944:65:0;17099:12;;:24;;17116:6;17099:16;:24::i;:::-;17084:12;:39;-1:-1:-1;;;;;17155:18:0;;:9;:18;;;;;;;;;;;:30;;17178:6;17155:22;:30::i;:::-;-1:-1:-1;;;;;17134:18:0;;:9;:18;;;;;;;;;;;:51;;;;17201:37;;16931:25:1;;;17134:18:0;;:9;;17201:37;;16904:18:1;17201:37:0;16886:76:1;21726:119:0;21803:7;;-1:-1:-1;;;;;21803:7:0;21789:10;:21;21781:56;;;;-1:-1:-1;;;21781:56:0;;11084:2:1;21781:56:0;;;11066:21:1;11123:2;11103:18;;;11096:30;-1:-1:-1;;;11142:18:1;;;11135:52;11204:18;;21781:56:0;11056:172:1;21460:208:0;-1:-1:-1;;;;;21527:16:0;;21533:10;21527:16;;21519:52;;;;-1:-1:-1;;;21519:52:0;;15513:2:1;21519:52:0;;;15495:21:1;15552:2;15532:18;;;15525:30;15591:25;15571:18;;;15564:53;15634:18;;21519:52:0;15485:173:1;21519:52:0;21584:14;:19;;-1:-1:-1;;;;;;21584:19:0;-1:-1:-1;;;;;21584:19:0;;;;;;;;;21648:7;;21621:39;;21584:19;;21648:7;;21621:39;;-1:-1:-1;;21621:39:0;21460:208;:::o;15971:610::-;-1:-1:-1;;;;;16111:20:0;;16103:70;;;;-1:-1:-1;;;16103:70:0;;14298:2:1;16103:70:0;;;14280:21:1;14337:2;14317:18;;;14310:30;14376:34;14356:18;;;14349:62;-1:-1:-1;;;14427:18:1;;;14420:35;14472:19;;16103:70:0;14270:227:1;16103:70:0;-1:-1:-1;;;;;16192:23:0;;16184:71;;;;-1:-1:-1;;;16184:71:0;;8865:2:1;16184:71:0;;;8847:21:1;8904:2;8884:18;;;8877:30;8943:34;8923:18;;;8916:62;-1:-1:-1;;;8994:18:1;;;8987:33;9037:19;;16184:71:0;8837:225:1;16184:71:0;16348:108;16384:6;16348:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16348:17:0;;:9;:17;;;;;;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;16328:17:0;;;:9;:17;;;;;;;;;;;:128;;;;16490:20;;;;;;;:32;;16515:6;16490:24;:32::i;:::-;-1:-1:-1;;;;;16467:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;16538:35;16931:25:1;;;16467:20:0;;16538:35;;;;;;16904:18:1;16538:35:0;16886:76:1;44911:280:0;45031:16;;44982:21;;45014:34;;:16;:34::i;:::-;45059:18;45080:41;45104:17;45080:21;:41;:::i;:::-;45151:4;;:32;;45059:62;;-1:-1:-1;45133:12:0;;-1:-1:-1;;;;;45151:4:0;;;;45059:62;;45133:12;45151:32;45133:12;45151:32;45059:62;45151:4;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1905:136;1963:7;1990:43;1994:1;1997;1990:43;;;;;;;;;;;;;;;;;:3;:43::i;14:188:1:-;82:20;;-1:-1:-1;;;;;131:46:1;;121:57;;111:2;;192:1;189;182:12;207:159;274:20;;334:6;323:18;;313:29;;303:2;;356:1;353;346:12;371:167;438:20;;498:14;487:26;;477:37;;467:2;;528:1;525;518:12;543:257;602:6;655:2;643:9;634:7;630:23;626:32;623:2;;;676:6;668;661:22;623:2;720:9;707:23;739:31;764:5;739:31;:::i;805:261::-;875:6;928:2;916:9;907:7;903:23;899:32;896:2;;;949:6;941;934:22;896:2;986:9;980:16;1005:31;1030:5;1005:31;:::i;1071:398::-;1139:6;1147;1200:2;1188:9;1179:7;1175:23;1171:32;1168:2;;;1221:6;1213;1206:22;1168:2;1265:9;1252:23;1284:31;1309:5;1284:31;:::i;:::-;1334:5;-1:-1:-1;1391:2:1;1376:18;;1363:32;1404:33;1363:32;1404:33;:::i;:::-;1456:7;1446:17;;;1158:311;;;;;:::o;1474:466::-;1551:6;1559;1567;1620:2;1608:9;1599:7;1595:23;1591:32;1588:2;;;1641:6;1633;1626:22;1588:2;1685:9;1672:23;1704:31;1729:5;1704:31;:::i;:::-;1754:5;-1:-1:-1;1811:2:1;1796:18;;1783:32;1824:33;1783:32;1824:33;:::i;:::-;1578:362;;1876:7;;-1:-1:-1;;;1930:2:1;1915:18;;;;1902:32;;1578:362::o;1945:329::-;2012:6;2020;2073:2;2061:9;2052:7;2048:23;2044:32;2041:2;;;2094:6;2086;2079:22;2041:2;2138:9;2125:23;2157:31;2182:5;2157:31;:::i;:::-;2207:5;-1:-1:-1;2231:37:1;2264:2;2249:18;;2231:37;:::i;:::-;2221:47;;2031:243;;;;;:::o;2279:325::-;2347:6;2355;2408:2;2396:9;2387:7;2383:23;2379:32;2376:2;;;2429:6;2421;2414:22;2376:2;2473:9;2460:23;2492:31;2517:5;2492:31;:::i;:::-;2542:5;2594:2;2579:18;;;;2566:32;;-1:-1:-1;;;2366:238:1:o;2609:270::-;2677:6;2685;2738:2;2726:9;2717:7;2713:23;2709:32;2706:2;;;2759:6;2751;2744:22;2706:2;2787:29;2806:9;2787:29;:::i;:::-;2777:39;;2835:38;2869:2;2858:9;2854:18;2835:38;:::i;2884:194::-;2942:6;2995:2;2983:9;2974:7;2970:23;2966:32;2963:2;;;3016:6;3008;3001:22;2963:2;3044:28;3062:9;3044:28;:::i;3083:190::-;3142:6;3195:2;3183:9;3174:7;3170:23;3166:32;3163:2;;;3216:6;3208;3201:22;3163:2;-1:-1:-1;3244:23:1;;3153:120;-1:-1:-1;3153:120:1:o;3278:194::-;3348:6;3401:2;3389:9;3380:7;3376:23;3372:32;3369:2;;;3422:6;3414;3407:22;3369:2;-1:-1:-1;3450:16:1;;3359:113;-1:-1:-1;3359:113:1:o;3477:1239::-;3570:6;3578;3631:2;3619:9;3610:7;3606:23;3602:32;3599:2;;;3652:6;3644;3637:22;3599:2;3693:9;3680:23;3670:33;;3722:2;3775;3764:9;3760:18;3747:32;3798:18;3839:2;3831:6;3828:14;3825:2;;;3860:6;3852;3845:22;3825:2;3903:6;3892:9;3888:22;3878:32;;3948:7;3941:4;3937:2;3933:13;3929:27;3919:2;;3975:6;3967;3960:22;3919:2;4016;4003:16;4038:2;4034;4031:10;4028:2;;;4044:18;;:::i;:::-;4090:2;4087:1;4083:10;4122:2;4116:9;4185:2;4181:7;4176:2;4172;4168:11;4164:25;4156:6;4152:38;4240:6;4228:10;4225:22;4220:2;4208:10;4205:18;4202:46;4199:2;;;4251:18;;:::i;:::-;4287:2;4280:22;4337:18;;;4371:15;;;;-1:-1:-1;4406:11:1;;;4436;;;4432:20;;4429:33;-1:-1:-1;4426:2:1;;;4480:6;4472;4465:22;4426:2;4507:6;4498:15;;4522:163;4536:2;4533:1;4530:9;4522:163;;;4593:17;;4581:30;;4554:1;4547:9;;;;;4631:12;;;;4663;;4522:163;;;4526:3;4704:6;4694:16;;;;;;;;3589:1127;;;;;:::o;4721:262::-;4788:6;4796;4849:2;4837:9;4828:7;4824:23;4820:32;4817:2;;;4870:6;4862;4855:22;4817:2;4911:9;4898:23;4888:33;;4940:37;4973:2;4962:9;4958:18;4940:37;:::i;4988:399::-;5073:6;5081;5089;5097;5150:3;5138:9;5129:7;5125:23;5121:33;5118:2;;;5172:6;5164;5157:22;5118:2;5213:9;5200:23;5190:33;;5270:2;5259:9;5255:18;5242:32;5232:42;;5293:37;5326:2;5315:9;5311:18;5293:37;:::i;:::-;5108:279;;;;-1:-1:-1;5283:47:1;;5377:2;5362:18;5349:32;;-1:-1:-1;;5108:279:1:o;5392:266::-;5458:6;5466;5519:2;5507:9;5498:7;5494:23;5490:32;5487:2;;;5540:6;5532;5525:22;5487:2;5568:28;5586:9;5568:28;:::i;:::-;5558:38;;5615:37;5648:2;5637:9;5633:18;5615:37;:::i;8055:603::-;8167:4;8196:2;8225;8214:9;8207:21;8257:6;8251:13;8300:6;8295:2;8284:9;8280:18;8273:34;8325:4;8338:140;8352:6;8349:1;8346:13;8338:140;;;8447:14;;;8443:23;;8437:30;8413:17;;;8432:2;8409:26;8402:66;8367:10;;8338:140;;;8496:6;8493:1;8490:13;8487:2;;;8566:4;8561:2;8552:6;8541:9;8537:22;8533:31;8526:45;8487:2;-1:-1:-1;8642:2:1;8621:15;-1:-1:-1;;8617:29:1;8602:45;;;;8649:2;8598:54;;8176:482;-1:-1:-1;;;8176:482:1:o;16967:983::-;17229:4;17277:3;17266:9;17262:19;17308:6;17297:9;17290:25;17334:2;17372:6;17367:2;17356:9;17352:18;17345:34;17415:3;17410:2;17399:9;17395:18;17388:31;17439:6;17474;17468:13;17505:6;17497;17490:22;17543:3;17532:9;17528:19;17521:26;;17582:2;17574:6;17570:15;17556:29;;17603:4;17616:195;17630:6;17627:1;17624:13;17616:195;;;17695:13;;-1:-1:-1;;;;;17691:39:1;17679:52;;17786:15;;;;17751:12;;;;17727:1;17645:9;17616:195;;;-1:-1:-1;;;;;;;17867:32:1;;;;17862:2;17847:18;;17840:60;-1:-1:-1;;;17931:3:1;17916:19;17909:35;17828:3;17238:712;-1:-1:-1;;;17238:712:1:o;19175:1143::-;19621:4;19663:3;19652:9;19648:19;19640:27;;19694:6;19683:9;19676:25;19737:6;19732:2;19721:9;19717:18;19710:34;19780:6;19775:2;19764:9;19760:18;19753:34;19823:6;19818:2;19807:9;19803:18;19796:34;19867:6;19861:3;19850:9;19846:19;19839:35;19911:6;19905:3;19894:9;19890:19;19883:35;19969:6;19962:14;19955:22;19949:3;19938:9;19934:19;19927:51;20027:6;20019;20015:19;20009:3;19998:9;19994:19;19987:48;20044:44;20083:3;20072:9;20068:19;20060:6;5733:13;5726:21;5714:34;;5704:50;20044:44;20119:3;20104:19;;20097:35;;;;20163:3;20148:19;;20141:36;;;;20208:3;20193:19;;20186:36;;;;20253:3;20238:19;;20231:36;20298:3;20283:19;;;20276:36;19630:688;;-1:-1:-1;;;;;;;;;19630:688:1:o;20717:128::-;20757:3;20788:1;20784:6;20781:1;20778:13;20775:2;;;20794:18;;:::i;:::-;-1:-1:-1;20830:9:1;;20765:80::o;20850:120::-;20890:1;20916;20906:2;;20921:18;;:::i;:::-;-1:-1:-1;20955:9:1;;20896:74::o;20975:168::-;21015:7;21081:1;21077;21073:6;21069:14;21066:1;21063:21;21058:1;21051:9;21044:17;21040:45;21037:2;;;21088:18;;:::i;:::-;-1:-1:-1;21128:9:1;;21027:116::o;21148:125::-;21188:4;21216:1;21213;21210:8;21207:2;;;21221:18;;:::i;:::-;-1:-1:-1;21258:9:1;;21197:76::o;21278:380::-;21357:1;21353:12;;;;21400;;;21421:2;;21475:4;21467:6;21463:17;21453:27;;21421:2;21528;21520:6;21517:14;21497:18;21494:38;21491:2;;;21574:10;21569:3;21565:20;21562:1;21555:31;21609:4;21606:1;21599:15;21637:4;21634:1;21627:15;21491:2;;21333:325;;;:::o;21663:197::-;21701:3;21729:6;21770:2;21763:5;21759:14;21797:2;21788:7;21785:15;21782:2;;;21803:18;;:::i;:::-;21852:1;21839:15;;21709:151;-1:-1:-1;;;21709:151:1:o;21865:135::-;21904:3;-1:-1:-1;;21925:17:1;;21922:2;;;21945:18;;:::i;:::-;-1:-1:-1;21992:1:1;21981:13;;21912:88::o;22005:112::-;22037:1;22063;22053:2;;22068:18;;:::i;:::-;-1:-1:-1;22102:9:1;;22043:74::o;22122:127::-;22183:10;22178:3;22174:20;22171:1;22164:31;22214:4;22211:1;22204:15;22238:4;22235:1;22228:15;22254:127;22315:10;22310:3;22306:20;22303:1;22296:31;22346:4;22343:1;22336:15;22370:4;22367:1;22360:15;22386:127;22447:10;22442:3;22438:20;22435:1;22428:31;22478:4;22475:1;22468:15;22502:4;22499:1;22492:15;22518:131;-1:-1:-1;;;;;22593:31:1;;22583:42;;22573:2;;22639:1;22636;22629:12
Swarm Source
ipfs://2e34fc496947c6ab82ec02ea5db4725d2d436625d0ba6db2d77dc1c191c74a07
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.