More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 46 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Deposit | 934113 | 103 days ago | IN | 0 APE | 0.0031306 | ||||
Update Emission ... | 933960 | 103 days ago | IN | 0 APE | 0.00369627 | ||||
Withdraw | 928925 | 103 days ago | IN | 0 APE | 0.00264118 | ||||
Deposit | 928672 | 103 days ago | IN | 0 APE | 0.00214698 | ||||
Update Emission ... | 928649 | 103 days ago | IN | 0 APE | 0.00344424 | ||||
Update Emission ... | 928453 | 103 days ago | IN | 0 APE | 0.0040034 | ||||
Deposit | 928306 | 103 days ago | IN | 0 APE | 0.00258004 | ||||
Set | 927101 | 103 days ago | IN | 0 APE | 0.00353484 | ||||
Set | 927081 | 103 days ago | IN | 0 APE | 0.00117125 | ||||
Set | 927062 | 103 days ago | IN | 0 APE | 0.0044674 | ||||
Add | 927017 | 103 days ago | IN | 0 APE | 0.00602762 | ||||
Withdraw | 925432 | 103 days ago | IN | 0 APE | 0.00292195 | ||||
Withdraw | 925414 | 103 days ago | IN | 0 APE | 0.00263124 | ||||
Withdraw | 925387 | 103 days ago | IN | 0 APE | 0.00344511 | ||||
Withdraw | 873161 | 103 days ago | IN | 0 APE | 0.00318851 | ||||
Withdraw | 868086 | 103 days ago | IN | 0 APE | 0.00347877 | ||||
Deposit | 839296 | 103 days ago | IN | 0 APE | 0.00414336 | ||||
Deposit | 836184 | 103 days ago | IN | 0 APE | 0.00374172 | ||||
Withdraw | 834353 | 103 days ago | IN | 0 APE | 0.00370021 | ||||
Deposit | 834308 | 103 days ago | IN | 0 APE | 0.00300442 | ||||
Deposit | 834268 | 103 days ago | IN | 0 APE | 0.00275595 | ||||
Deposit | 833140 | 103 days ago | IN | 0 APE | 0.00414336 | ||||
Deposit | 826934 | 103 days ago | IN | 0 APE | 0.0041216 | ||||
Deposit | 826378 | 103 days ago | IN | 0 APE | 0.00501275 | ||||
Deposit | 825234 | 103 days ago | IN | 0 APE | 0.00368122 |
Loading...
Loading
Contract Name:
MasterChef
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at apescan.io on 2024-10-22 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev 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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount) external returns (bool); } pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { 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}. * * 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 default value returned by this function, unless * it's 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: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, 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}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, 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}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); 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) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + 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) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This 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: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer(address from, address to, uint256 amount) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, 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 += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(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); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(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 Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 amount) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - 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 transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {} } pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity =0.8.19; contract BAYCToken is ERC20, Ownable { address constant DEAD_ADDRESS = 0x000000000000000000000000000000000000dEaD; address payable constant MARKETING_ADDRESS = payable(0x89a1cB13a789183ad8e4C16055648D9d9794550e); address constant ROUTER_ADDRESS = 0x252999A4ec069352A9be309368e4acF2FFd06287; IUniswapV2Router02 constant ROUTER = IUniswapV2Router02(ROUTER_ADDRESS); address constant WETH_ADDRESS = 0x48b62137EdfA95a428D35C09E44256a739F6B557; address immutable CONTRACT_ADDRESS; address public immutable PAIR_ADDRESS; constructor() payable ERC20("BAYC", "BAYC") { _mint(msg.sender, 1_000_000 * 1e18); CONTRACT_ADDRESS = address(this); PAIR_ADDRESS = IUniswapV2Factory(ROUTER.factory()).createPair(CONTRACT_ADDRESS, WETH_ADDRESS); isExcludedFromTaxes[msg.sender] = true; isExcludedFromTaxes[CONTRACT_ADDRESS] = true; isExcludedFromTaxes[MARKETING_ADDRESS] = true; } mapping(address => bool) isExcludedFromTaxes; uint256 public tax = 5; uint256 public marketingBalance; error Blocked(); receive() external payable {} function _transfer(address from, address to, uint256 amount) internal override { bool isBuy = from == PAIR_ADDRESS; bool isSell = to == PAIR_ADDRESS; bool isTransfer = !isBuy && !isSell; bool isExcluded = isExcludedFromTaxes[from] || isExcludedFromTaxes[to]; bool isTaxFree = isExcluded || isTransfer; if (!isTaxFree) { uint256 taxedTokensAmount = (amount * tax) / 100; if (taxedTokensAmount != 0) { amount -= taxedTokensAmount; marketingBalance += taxedTokensAmount; super._transfer(from, CONTRACT_ADDRESS, taxedTokensAmount); } if (isSell) { if (marketingBalance > 0) { uint256 balance = marketingBalance; marketingBalance = 0; swapTokensForETH(MARKETING_ADDRESS, balance); } } } super._transfer(from, to, amount); } function swapTokensForETH(address to, uint256 tokenAmount) internal { address[] memory path = new address[](2); path[0] = CONTRACT_ADDRESS; path[1] = WETH_ADDRESS; _approve(CONTRACT_ADDRESS, ROUTER_ADDRESS, tokenAmount); uint256[] memory amounts = ROUTER.getAmountsOut(tokenAmount, path); uint256 expectedEthAmount = ROUTER.quote(tokenAmount, amounts[0], amounts[1]); uint256 ethMin = expectedEthAmount - (expectedEthAmount * 5) / 100; ROUTER.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount, ethMin, path, to, block.timestamp); } function dropTokens(address[] calldata addresses, uint256[] calldata amounts) external onlyOwner { uint256 length = addresses.length; if (length != amounts.length) { revert Blocked(); } for (uint256 i = 0; i < length; i++) { super.transfer(addresses[i], amounts[i]); } } function mint(address _to, uint256 _amount) public onlyOwner { _mint(_to, _amount); } function setTax(uint256 newTax) external onlyOwner { if (newTax > 20) { revert Blocked(); } tax = newTax; } function pullTokens(uint256 amount) public { _transfer(CONTRACT_ADDRESS, MARKETING_ADDRESS, amount); } } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // MasterChef is the master of BAYCToken. He can make BAYCToken and he is a fair guy. // // Note that it's ownable and the owner wields tremendous power. The ownership // will be transferred to a governance smart contract once BAYC is sufficiently // distributed and the community can show to govern itself. // contract MasterChef is Ownable, ReentrancyGuard { using SafeMath for uint256; using SafeERC20 for IERC20; // Info of each user. struct UserInfo { uint256 amount; // How many LP tokens the user has provided. uint256 rewardDebt; // Reward debt. See explanation below. // // We do some fancy math here. Basically, any point in time, the amount of BAYCs // entitled to a user but is pending to be distributed is: // // pending reward = (user.amount * pool.accBAYCPerShare) - user.rewardDebt // // Whenever a user deposits or withdraws LP tokens to a pool. Here's what happens: // 1. The pool's `accBAYCPerShare` (and `lastRewardBlock`) gets updated. // 2. User receives the pending reward sent to his/her address. // 3. User's `amount` gets updated. // 4. User's `rewardDebt` gets updated. } // Info of each pool. struct PoolInfo { IERC20 lpToken; // Address of LP token contract. uint256 allocPoint; // How many allocation points assigned to this pool. BAYCs to distribute per block. uint256 lastRewardBlock; // Last block number that BAYCs distribution occurs. uint256 accBAYCPerShare; // Accumulated BAYCs per share, times 1e12. See below. uint16 depositFeeBP; // Deposit fee in basis points } // The BAYC TOKEN! BAYCToken public BAYC; // Dev address. address public devaddr; // BAYC tokens created per block. uint256 public BAYCPerBlock; // Bonus muliplier for early BAYC makers. uint256 public constant BONUS_MULTIPLIER = 1; // Deposit Fee address address public feeAddress; // Info of each pool. PoolInfo[] public poolInfo; // Info of each user that stakes LP tokens. mapping (uint256 => mapping (address => UserInfo)) public userInfo; // Total allocation points. Must be the sum of all allocation points in all pools. uint256 public totalAllocPoint = 0; // The block number when BAYC mining starts. uint256 public startBlock; event Deposit(address indexed user, uint256 indexed pid, uint256 amount); event Withdraw(address indexed user, uint256 indexed pid, uint256 amount); event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount); constructor( BAYCToken _BAYC, address _devaddr, address _feeAddress1, uint256 _BAYCPerBlock, uint256 _startBlock ) { BAYC = _BAYC; devaddr = _devaddr; feeAddress = _feeAddress1; BAYCPerBlock = _BAYCPerBlock; startBlock = _startBlock; } function poolLength() external view returns (uint256) { return poolInfo.length; } // Add a new lp to the pool. Can only be called by the owner. // XXX DO NOT add the same LP token more than once. Rewards will be messed up if you do. function add(uint256 _allocPoint, IERC20 _lpToken, uint16 _depositFeeBP, bool _withUpdate) public onlyOwner { require(_depositFeeBP <= 10000, "add: invalid deposit fee basis points"); if (_withUpdate) { massUpdatePools(); } uint256 lastRewardBlock = block.number > startBlock ? block.number : startBlock; totalAllocPoint = totalAllocPoint.add(_allocPoint); poolInfo.push(PoolInfo({ lpToken: _lpToken, allocPoint: _allocPoint, lastRewardBlock: lastRewardBlock, accBAYCPerShare: 0, depositFeeBP: _depositFeeBP })); } // Update the given pool's BAYC allocation point and deposit fee. Can only be called by the owner. function set(uint256 _pid, uint256 _allocPoint, uint16 _depositFeeBP, bool _withUpdate) public onlyOwner { require(_depositFeeBP <= 10000, "set: invalid deposit fee basis points"); if (_withUpdate) { massUpdatePools(); } totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint); poolInfo[_pid].allocPoint = _allocPoint; poolInfo[_pid].depositFeeBP = _depositFeeBP; } // Return reward multiplier over the given _from to _to block. function getMultiplier(uint256 _from, uint256 _to) public pure returns (uint256) { return _to.sub(_from).mul(BONUS_MULTIPLIER); } // View function to see pending BAYCs on frontend. function pendingBAYC(uint256 _pid, address _user) external view returns (uint256) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_user]; uint256 accBAYCPerShare = pool.accBAYCPerShare; uint256 lpSupply = pool.lpToken.balanceOf(address(this)); if (block.number > pool.lastRewardBlock && lpSupply != 0) { uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number); uint256 BAYCReward = multiplier.mul(BAYCPerBlock).mul(pool.allocPoint).div(totalAllocPoint); accBAYCPerShare = accBAYCPerShare.add(BAYCReward.mul(1e12).div(lpSupply)); } return user.amount.mul(accBAYCPerShare).div(1e12).sub(user.rewardDebt); } // Update reward variables for all pools. Be careful of gas spending! function massUpdatePools() public { uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { updatePool(pid); } } // Update reward variables of the given pool to be up-to-date. function updatePool(uint256 _pid) public { PoolInfo storage pool = poolInfo[_pid]; if (block.number <= pool.lastRewardBlock) { return; } uint256 lpSupply = pool.lpToken.balanceOf(address(this)); if (lpSupply == 0 || pool.allocPoint == 0) { pool.lastRewardBlock = block.number; return; } uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number); uint256 BAYCReward = multiplier.mul(BAYCPerBlock).mul(pool.allocPoint).div(totalAllocPoint); BAYC.mint(devaddr, BAYCReward.div(10)); BAYC.mint(address(this), BAYCReward); pool.accBAYCPerShare = pool.accBAYCPerShare.add(BAYCReward.mul(1e12).div(lpSupply)); pool.lastRewardBlock = block.number; } // Deposit LP tokens to MasterChef for BAYC allocation. function deposit(uint256 _pid, uint256 _amount) public nonReentrant { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; updatePool(_pid); if (user.amount > 0) { uint256 pending = user.amount.mul(pool.accBAYCPerShare).div(1e12).sub(user.rewardDebt); if(pending > 0) { safeBAYCTransfer(msg.sender, pending); } } if(_amount > 0) { pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount); if(pool.depositFeeBP > 0){ uint256 depositFee = _amount.mul(pool.depositFeeBP).div(10000); pool.lpToken.safeTransfer(feeAddress, depositFee); user.amount = user.amount.add(_amount).sub(depositFee); }else{ user.amount = user.amount.add(_amount); } } user.rewardDebt = user.amount.mul(pool.accBAYCPerShare).div(1e12); emit Deposit(msg.sender, _pid, _amount); } // Deposit LP tokens to MasterChef for BAYC allocation. function depositReferral(uint256 _pid, uint256 _amount, address referral) public nonReentrant { require(msg.sender != referral, "dev: dont reffer yourself"); PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; updatePool(_pid); if (user.amount > 0) { uint256 pending = user.amount.mul(pool.accBAYCPerShare).div(1e12).sub(user.rewardDebt); if(pending > 0) { safeBAYCTransfer(msg.sender, pending); } } if(_amount > 0) { pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount); if(pool.depositFeeBP > 0){ uint256 depositFee = _amount.mul(pool.depositFeeBP).div(10000); uint256 feeAddress1Share = depositFee.mul(75).div(100); uint256 feeAddress2Share = depositFee.sub(feeAddress1Share); pool.lpToken.safeTransfer(feeAddress, feeAddress1Share); pool.lpToken.safeTransfer(referral, feeAddress2Share); user.amount = user.amount.add(_amount).sub(depositFee); }else{ user.amount = user.amount.add(_amount); } } user.rewardDebt = user.amount.mul(pool.accBAYCPerShare).div(1e12); emit Deposit(msg.sender, _pid, _amount); } // Withdraw LP tokens from MasterChef. function withdraw(uint256 _pid, uint256 _amount) public nonReentrant { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; require(user.amount >= _amount, "withdraw: not good"); updatePool(_pid); uint256 pending = user.amount.mul(pool.accBAYCPerShare).div(1e12).sub(user.rewardDebt); if(pending > 0) { safeBAYCTransfer(msg.sender, pending); } if(_amount > 0) { user.amount = user.amount.sub(_amount); pool.lpToken.safeTransfer(address(msg.sender), _amount); } user.rewardDebt = user.amount.mul(pool.accBAYCPerShare).div(1e12); emit Withdraw(msg.sender, _pid, _amount); } // Withdraw without caring about rewards. EMERGENCY ONLY. function emergencyWithdraw(uint256 _pid) public nonReentrant { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; uint256 amount = user.amount; user.amount = 0; user.rewardDebt = 0; pool.lpToken.safeTransfer(address(msg.sender), amount); emit EmergencyWithdraw(msg.sender, _pid, amount); } // Safe BAYC transfer function, just in case if rounding error causes pool to not have enough BAYCs. function safeBAYCTransfer(address _to, uint256 _amount) internal { uint256 BAYCBal = BAYC.balanceOf(address(this)); if (_amount > BAYCBal) { BAYC.transfer(_to, BAYCBal); } else { BAYC.transfer(_to, _amount); } } // Update dev address by the previous dev. function dev(address _devaddr) public { require(msg.sender == devaddr, "dev: wut?"); devaddr = _devaddr; } function setFeeAddress1(address _feeAddress1) public{ require(msg.sender == feeAddress, "setFeeAddress1: FORBIDDEN"); feeAddress = _feeAddress1; } function updateEmissionRate(uint256 _BAYCPerBlock) public onlyOwner { massUpdatePools(); BAYCPerBlock = _BAYCPerBlock; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract BAYCToken","name":"_BAYC","type":"address"},{"internalType":"address","name":"_devaddr","type":"address"},{"internalType":"address","name":"_feeAddress1","type":"address"},{"internalType":"uint256","name":"_BAYCPerBlock","type":"uint256"},{"internalType":"uint256","name":"_startBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"BAYC","outputs":[{"internalType":"contract BAYCToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BAYCPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BONUS_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"},{"internalType":"uint16","name":"_depositFeeBP","type":"uint16"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"referral","type":"address"}],"name":"depositReferral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devaddr","type":"address"}],"name":"dev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devaddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingBAYC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"accBAYCPerShare","type":"uint256"},{"internalType":"uint16","name":"depositFeeBP","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"uint16","name":"_depositFeeBP","type":"uint16"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeAddress1","type":"address"}],"name":"setFeeAddress1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_BAYCPerBlock","type":"uint256"}],"name":"updateEmissionRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260006008553480156200001657600080fd5b50604051620037bb380380620037bb83398181016040528101906200003c919062000309565b6200005c620000506200013f60201b60201c565b6200014760201b60201c565b6001808190555084600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160048190555080600981905550505050505062000391565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200023d8262000210565b9050919050565b6000620002518262000230565b9050919050565b620002638162000244565b81146200026f57600080fd5b50565b600081519050620002838162000258565b92915050565b6000620002968262000210565b9050919050565b620002a88162000289565b8114620002b457600080fd5b50565b600081519050620002c8816200029d565b92915050565b6000819050919050565b620002e381620002ce565b8114620002ef57600080fd5b50565b6000815190506200030381620002d8565b92915050565b600080600080600060a086880312156200032857620003276200020b565b5b6000620003388882890162000272565b95505060206200034b88828901620002b7565b94505060406200035e88828901620002b7565b93505060606200037188828901620002f2565b92505060806200038488828901620002f2565b9150509295509295909350565b61341a80620003a16000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806384e82a33116100de57806393f1a40b11610097578063d49e77cd11610071578063d49e77cd1461043c578063d96384221461045a578063e2bbb15814610476578063f2fde38b146104925761018e565b806393f1a40b146103bd5780639582b6e5146103ee578063965a799c1461040c5761018e565b806384e82a33146102fd5780638aa28550146103195780638d88a90e146103375780638da5cb5b146103535780638dbb1e3a146103715780638fb23f5e146103a15761018e565b8063441a3e701161014b5780635312ea8e116101255780635312ea8e146102af578063630b5ba1146102cb578063632c3fdf146102d5578063715018a6146102f35761018e565b8063441a3e701461025957806348cd4cb11461027557806351eb05a6146102935761018e565b8063081e3eda146101935780630ba84cd2146101b15780631526fe27146101cd57806317caf6f1146102015780631f4b5c261461021f578063412753581461023b575b600080fd5b61019b6104ae565b6040516101a891906124bd565b60405180910390f35b6101cb60048036038101906101c69190612509565b6104bb565b005b6101e760048036038101906101e29190612509565b6104d5565b6040516101f89594939291906125d2565b60405180910390f35b610209610549565b60405161021691906124bd565b60405180910390f35b61023960048036038101906102349190612663565b61054f565b005b610243610965565b60405161025091906126c5565b60405180910390f35b610273600480360381019061026e91906126e0565b61098b565b005b61027d610bcd565b60405161028a91906124bd565b60405180910390f35b6102ad60048036038101906102a89190612509565b610bd3565b005b6102c960048036038101906102c49190612509565b610ed5565b005b6102d3611020565b005b6102dd611053565b6040516102ea91906124bd565b60405180910390f35b6102fb611059565b005b610317600480360381019061031291906127c2565b61106d565b005b6103216111fd565b60405161032e91906124bd565b60405180910390f35b610351600480360381019061034c9190612829565b611202565b005b61035b6112d6565b60405161036891906126c5565b60405180910390f35b61038b600480360381019061038691906126e0565b6112ff565b60405161039891906124bd565b60405180910390f35b6103bb60048036038101906103b69190612829565b61132f565b005b6103d760048036038101906103d29190612856565b611403565b6040516103e5929190612896565b60405180910390f35b6103f6611434565b60405161040391906128f2565b60405180910390f35b61042660048036038101906104219190612856565b61145a565b60405161043391906124bd565b60405180910390f35b61044461167f565b60405161045191906126c5565b60405180910390f35b610474600480360381019061046f919061290d565b6116a5565b005b610490600480360381019061048b91906126e0565b6117c7565b005b6104ac60048036038101906104a79190612829565b611adb565b005b6000600680549050905090565b6104c3611b5e565b6104cb611020565b8060048190555050565b600681815481106104e557600080fd5b90600052602060002090600502016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040160009054906101000a900461ffff16905085565b60085481565b610557611bdc565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036105c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105bc906129d1565b60405180910390fd5b6000600684815481106105db576105da6129f1565b5b9060005260206000209060050201905060006007600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061064885610bd3565b6000816000015411156106b757600061069f826001015461069164e8d4a5100061068387600301548760000154611c2b90919063ffffffff16565b611ca590919063ffffffff16565b611cef90919063ffffffff16565b905060008111156106b5576106b43382611d39565b5b505b60008411156108cd576107113330868560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611f2e909392919063ffffffff16565b60008260040160009054906101000a900461ffff1661ffff1611156108ac57600061076f6127106107618560040160009054906101000a900461ffff1661ffff1688611c2b90919063ffffffff16565b611ca590919063ffffffff16565b9050600061079a606461078c604b85611c2b90919063ffffffff16565b611ca590919063ffffffff16565b905060006107b18284611cef90919063ffffffff16565b9050610824600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838760000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611fb79092919063ffffffff16565b61087386828760000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611fb79092919063ffffffff16565b61089c8361088e89876000015461203d90919063ffffffff16565b611cef90919063ffffffff16565b84600001819055505050506108cc565b6108c384826000015461203d90919063ffffffff16565b81600001819055505b5b6108ff64e8d4a510006108f184600301548460000154611c2b90919063ffffffff16565b611ca590919063ffffffff16565b8160010181905550843373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a158660405161094e91906124bd565b60405180910390a3505061096061209b565b505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610993611bdc565b6000600683815481106109a9576109a86129f1565b5b9060005260206000209060050201905060006007600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508281600001541015610a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4b90612a6c565b60405180910390fd5b610a5d84610bd3565b6000610aa78260010154610a9964e8d4a51000610a8b87600301548760000154611c2b90919063ffffffff16565b611ca590919063ffffffff16565b611cef90919063ffffffff16565b90506000811115610abd57610abc3382611d39565b5b6000841115610b3557610add848360000154611cef90919063ffffffff16565b8260000181905550610b3433858560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611fb79092919063ffffffff16565b5b610b6764e8d4a51000610b5985600301548560000154611c2b90919063ffffffff16565b611ca590919063ffffffff16565b8260010181905550843373ffffffffffffffffffffffffffffffffffffffff167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b56886604051610bb691906124bd565b60405180910390a3505050610bc961209b565b5050565b60095481565b600060068281548110610be957610be86129f1565b5b9060005260206000209060050201905080600201544311610c0a5750610ed2565b60008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c6991906126c5565b602060405180830381865afa158015610c86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610caa9190612aa1565b90506000811480610cbf575060008260010154145b15610cd4574382600201819055505050610ed2565b6000610ce48360020154436112ff565b90506000610d27600854610d198660010154610d0b60045487611c2b90919063ffffffff16565b611c2b90919063ffffffff16565b611ca590919063ffffffff16565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d9e600a85611ca590919063ffffffff16565b6040518363ffffffff1660e01b8152600401610dbb929190612ace565b600060405180830381600087803b158015610dd557600080fd5b505af1158015610de9573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930836040518363ffffffff1660e01b8152600401610e4a929190612ace565b600060405180830381600087803b158015610e6457600080fd5b505af1158015610e78573d6000803e3d6000fd5b50505050610ebc610ea984610e9b64e8d4a5100085611c2b90919063ffffffff16565b611ca590919063ffffffff16565b856003015461203d90919063ffffffff16565b8460030181905550438460020181905550505050505b50565b610edd611bdc565b600060068281548110610ef357610ef26129f1565b5b9060005260206000209060050201905060006007600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015490506000826000018190555060008260010181905550610fc333828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611fb79092919063ffffffff16565b833373ffffffffffffffffffffffffffffffffffffffff167fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05958360405161100a91906124bd565b60405180910390a350505061101d61209b565b50565b6000600680549050905060005b8181101561104f5761103e81610bd3565b8061104890612b26565b905061102d565b5050565b60045481565b611061611b5e565b61106b60006120a4565b565b611075611b5e565b6127108261ffff1611156110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b590612be0565b60405180910390fd5b80156110cd576110cc611020565b5b600060095443116110e0576009546110e2565b435b90506110f98560085461203d90919063ffffffff16565b60088190555060066040518060a001604052808673ffffffffffffffffffffffffffffffffffffffff168152602001878152602001838152602001600081526020018561ffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548161ffff021916908361ffff16021790555050505050505050565b600181565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611292576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128990612c4c565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061132760016113198585611cef90919063ffffffff16565b611c2b90919063ffffffff16565b905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b690612cb8565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6007602052816000526040600020602052806000526040600020600091509150508060000154908060010154905082565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060068481548110611471576114706129f1565b5b9060005260206000209060050201905060006007600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260030154905060008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161153d91906126c5565b602060405180830381865afa15801561155a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157e9190612aa1565b9050836002015443118015611594575060008114155b1561162f5760006115a98560020154436112ff565b905060006115ec6008546115de88600101546115d060045487611c2b90919063ffffffff16565b611c2b90919063ffffffff16565b611ca590919063ffffffff16565b905061162a61161b8461160d64e8d4a5100085611c2b90919063ffffffff16565b611ca590919063ffffffff16565b8561203d90919063ffffffff16565b935050505b611673836001015461166564e8d4a51000611657868860000154611c2b90919063ffffffff16565b611ca590919063ffffffff16565b611cef90919063ffffffff16565b94505050505092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116ad611b5e565b6127108261ffff1611156116f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ed90612d4a565b60405180910390fd5b801561170557611704611020565b5b61175183611743600687815481106117205761171f6129f1565b5b906000526020600020906005020160010154600854611cef90919063ffffffff16565b61203d90919063ffffffff16565b600881905550826006858154811061176c5761176b6129f1565b5b9060005260206000209060050201600101819055508160068581548110611796576117956129f1565b5b906000526020600020906005020160040160006101000a81548161ffff021916908361ffff16021790555050505050565b6117cf611bdc565b6000600683815481106117e5576117e46129f1565b5b9060005260206000209060050201905060006007600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061185284610bd3565b6000816000015411156118c15760006118a9826001015461189b64e8d4a5100061188d87600301548760000154611c2b90919063ffffffff16565b611ca590919063ffffffff16565b611cef90919063ffffffff16565b905060008111156118bf576118be3382611d39565b5b505b6000831115611a445761191b3330858560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611f2e909392919063ffffffff16565b60008260040160009054906101000a900461ffff1661ffff161115611a2357600061197961271061196b8560040160009054906101000a900461ffff1661ffff1687611c2b90919063ffffffff16565b611ca590919063ffffffff16565b90506119ec600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611fb79092919063ffffffff16565b611a1581611a0786856000015461203d90919063ffffffff16565b611cef90919063ffffffff16565b826000018190555050611a43565b611a3a83826000015461203d90919063ffffffff16565b81600001819055505b5b611a7664e8d4a51000611a6884600301548460000154611c2b90919063ffffffff16565b611ca590919063ffffffff16565b8160010181905550833373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1585604051611ac591906124bd565b60405180910390a35050611ad761209b565b5050565b611ae3611b5e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4990612ddc565b60405180910390fd5b611b5b816120a4565b50565b611b66612168565b73ffffffffffffffffffffffffffffffffffffffff16611b846112d6565b73ffffffffffffffffffffffffffffffffffffffff1614611bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd190612e48565b60405180910390fd5b565b600260015403611c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1890612eb4565b60405180910390fd5b6002600181905550565b6000808303611c3d5760009050611c9f565b60008284611c4b9190612ed4565b9050828482611c5a9190612f45565b14611c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9190612fe8565b60405180910390fd5b809150505b92915050565b6000611ce783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612170565b905092915050565b6000611d3183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121d3565b905092915050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d9691906126c5565b602060405180830381865afa158015611db3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd79190612aa1565b905080821115611e8757600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611e3e929190612ace565b6020604051808303816000875af1158015611e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e81919061301d565b50611f29565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401611ee4929190612ace565b6020604051808303816000875af1158015611f03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f27919061301d565b505b505050565b611fb1846323b872dd60e01b858585604051602401611f4f9392919061304a565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612237565b50505050565b6120388363a9059cbb60e01b8484604051602401611fd6929190612ace565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612237565b505050565b600080828461204c9190613081565b905083811015612091576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208890613101565b60405180910390fd5b8091505092915050565b60018081905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b600080831182906121b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ae91906131a0565b60405180910390fd5b50600083856121c69190612f45565b9050809150509392505050565b600083831115829061221b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221291906131a0565b60405180910390fd5b506000838561222a91906131c2565b9050809150509392505050565b6000612299826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166122fe9092919063ffffffff16565b90506000815111156122f957808060200190518101906122b9919061301d565b6122f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ef90613268565b60405180910390fd5b5b505050565b606061230d8484600085612316565b90509392505050565b60608247101561235b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612352906132fa565b60405180910390fd5b6123648561242a565b6123a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239a90613366565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516123cc91906133cd565b60006040518083038185875af1925050503d8060008114612409576040519150601f19603f3d011682016040523d82523d6000602084013e61240e565b606091505b509150915061241e82828661243d565b92505050949350505050565b600080823b905060008111915050919050565b6060831561244d5782905061249d565b6000835111156124605782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249491906131a0565b60405180910390fd5b9392505050565b6000819050919050565b6124b7816124a4565b82525050565b60006020820190506124d260008301846124ae565b92915050565b600080fd5b6124e6816124a4565b81146124f157600080fd5b50565b600081359050612503816124dd565b92915050565b60006020828403121561251f5761251e6124d8565b5b600061252d848285016124f4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061257b61257661257184612536565b612556565b612536565b9050919050565b600061258d82612560565b9050919050565b600061259f82612582565b9050919050565b6125af81612594565b82525050565b600061ffff82169050919050565b6125cc816125b5565b82525050565b600060a0820190506125e760008301886125a6565b6125f460208301876124ae565b61260160408301866124ae565b61260e60608301856124ae565b61261b60808301846125c3565b9695505050505050565b600061263082612536565b9050919050565b61264081612625565b811461264b57600080fd5b50565b60008135905061265d81612637565b92915050565b60008060006060848603121561267c5761267b6124d8565b5b600061268a868287016124f4565b935050602061269b868287016124f4565b92505060406126ac8682870161264e565b9150509250925092565b6126bf81612625565b82525050565b60006020820190506126da60008301846126b6565b92915050565b600080604083850312156126f7576126f66124d8565b5b6000612705858286016124f4565b9250506020612716858286016124f4565b9150509250929050565b600061272b82612625565b9050919050565b61273b81612720565b811461274657600080fd5b50565b60008135905061275881612732565b92915050565b612767816125b5565b811461277257600080fd5b50565b6000813590506127848161275e565b92915050565b60008115159050919050565b61279f8161278a565b81146127aa57600080fd5b50565b6000813590506127bc81612796565b92915050565b600080600080608085870312156127dc576127db6124d8565b5b60006127ea878288016124f4565b94505060206127fb87828801612749565b935050604061280c87828801612775565b925050606061281d878288016127ad565b91505092959194509250565b60006020828403121561283f5761283e6124d8565b5b600061284d8482850161264e565b91505092915050565b6000806040838503121561286d5761286c6124d8565b5b600061287b858286016124f4565b925050602061288c8582860161264e565b9150509250929050565b60006040820190506128ab60008301856124ae565b6128b860208301846124ae565b9392505050565b60006128ca82612560565b9050919050565b60006128dc826128bf565b9050919050565b6128ec816128d1565b82525050565b600060208201905061290760008301846128e3565b92915050565b60008060008060808587031215612927576129266124d8565b5b6000612935878288016124f4565b9450506020612946878288016124f4565b935050604061295787828801612775565b9250506060612968878288016127ad565b91505092959194509250565b600082825260208201905092915050565b7f6465763a20646f6e742072656666657220796f757273656c6600000000000000600082015250565b60006129bb601983612974565b91506129c682612985565b602082019050919050565b600060208201905081810360008301526129ea816129ae565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f77697468647261773a206e6f7420676f6f640000000000000000000000000000600082015250565b6000612a56601283612974565b9150612a6182612a20565b602082019050919050565b60006020820190508181036000830152612a8581612a49565b9050919050565b600081519050612a9b816124dd565b92915050565b600060208284031215612ab757612ab66124d8565b5b6000612ac584828501612a8c565b91505092915050565b6000604082019050612ae360008301856126b6565b612af060208301846124ae565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b31826124a4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b6357612b62612af7565b5b600182019050919050565b7f6164643a20696e76616c6964206465706f73697420666565206261736973207060008201527f6f696e7473000000000000000000000000000000000000000000000000000000602082015250565b6000612bca602583612974565b9150612bd582612b6e565b604082019050919050565b60006020820190508181036000830152612bf981612bbd565b9050919050565b7f6465763a207775743f0000000000000000000000000000000000000000000000600082015250565b6000612c36600983612974565b9150612c4182612c00565b602082019050919050565b60006020820190508181036000830152612c6581612c29565b9050919050565b7f73657446656541646472657373313a20464f5242494444454e00000000000000600082015250565b6000612ca2601983612974565b9150612cad82612c6c565b602082019050919050565b60006020820190508181036000830152612cd181612c95565b9050919050565b7f7365743a20696e76616c6964206465706f73697420666565206261736973207060008201527f6f696e7473000000000000000000000000000000000000000000000000000000602082015250565b6000612d34602583612974565b9150612d3f82612cd8565b604082019050919050565b60006020820190508181036000830152612d6381612d27565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612dc6602683612974565b9150612dd182612d6a565b604082019050919050565b60006020820190508181036000830152612df581612db9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e32602083612974565b9150612e3d82612dfc565b602082019050919050565b60006020820190508181036000830152612e6181612e25565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000612e9e601f83612974565b9150612ea982612e68565b602082019050919050565b60006020820190508181036000830152612ecd81612e91565b9050919050565b6000612edf826124a4565b9150612eea836124a4565b9250828202612ef8816124a4565b91508282048414831517612f0f57612f0e612af7565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612f50826124a4565b9150612f5b836124a4565b925082612f6b57612f6a612f16565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000612fd2602183612974565b9150612fdd82612f76565b604082019050919050565b6000602082019050818103600083015261300181612fc5565b9050919050565b60008151905061301781612796565b92915050565b600060208284031215613033576130326124d8565b5b600061304184828501613008565b91505092915050565b600060608201905061305f60008301866126b6565b61306c60208301856126b6565b61307960408301846124ae565b949350505050565b600061308c826124a4565b9150613097836124a4565b92508282019050808211156130af576130ae612af7565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006130eb601b83612974565b91506130f6826130b5565b602082019050919050565b6000602082019050818103600083015261311a816130de565b9050919050565b600081519050919050565b60005b8381101561314a57808201518184015260208101905061312f565b60008484015250505050565b6000601f19601f8301169050919050565b600061317282613121565b61317c8185612974565b935061318c81856020860161312c565b61319581613156565b840191505092915050565b600060208201905081810360008301526131ba8184613167565b905092915050565b60006131cd826124a4565b91506131d8836124a4565b92508282039050818111156131f0576131ef612af7565b5b92915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000613252602a83612974565b915061325d826131f6565b604082019050919050565b6000602082019050818103600083015261328181613245565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b60006132e4602683612974565b91506132ef82613288565b604082019050919050565b60006020820190508181036000830152613313816132d7565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613350601d83612974565b915061335b8261331a565b602082019050919050565b6000602082019050818103600083015261337f81613343565b9050919050565b600081519050919050565b600081905092915050565b60006133a782613386565b6133b18185613391565b93506133c181856020860161312c565b80840191505092915050565b60006133d9828461339c565b91508190509291505056fea2646970667358221220eeed59c0074c3f9810136f3790cb528452cb00525710d4d0f8e4c8f6327e0f4764736f6c634300081300330000000000000000000000003ee9074e93c364c7040d8d1498bb1c36207edb2b00000000000000000000000089a1cb13a789183ad8e4c16055648d9d9794550e00000000000000000000000089a1cb13a789183ad8e4c16055648d9d9794550e0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000c6959
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018e5760003560e01c806384e82a33116100de57806393f1a40b11610097578063d49e77cd11610071578063d49e77cd1461043c578063d96384221461045a578063e2bbb15814610476578063f2fde38b146104925761018e565b806393f1a40b146103bd5780639582b6e5146103ee578063965a799c1461040c5761018e565b806384e82a33146102fd5780638aa28550146103195780638d88a90e146103375780638da5cb5b146103535780638dbb1e3a146103715780638fb23f5e146103a15761018e565b8063441a3e701161014b5780635312ea8e116101255780635312ea8e146102af578063630b5ba1146102cb578063632c3fdf146102d5578063715018a6146102f35761018e565b8063441a3e701461025957806348cd4cb11461027557806351eb05a6146102935761018e565b8063081e3eda146101935780630ba84cd2146101b15780631526fe27146101cd57806317caf6f1146102015780631f4b5c261461021f578063412753581461023b575b600080fd5b61019b6104ae565b6040516101a891906124bd565b60405180910390f35b6101cb60048036038101906101c69190612509565b6104bb565b005b6101e760048036038101906101e29190612509565b6104d5565b6040516101f89594939291906125d2565b60405180910390f35b610209610549565b60405161021691906124bd565b60405180910390f35b61023960048036038101906102349190612663565b61054f565b005b610243610965565b60405161025091906126c5565b60405180910390f35b610273600480360381019061026e91906126e0565b61098b565b005b61027d610bcd565b60405161028a91906124bd565b60405180910390f35b6102ad60048036038101906102a89190612509565b610bd3565b005b6102c960048036038101906102c49190612509565b610ed5565b005b6102d3611020565b005b6102dd611053565b6040516102ea91906124bd565b60405180910390f35b6102fb611059565b005b610317600480360381019061031291906127c2565b61106d565b005b6103216111fd565b60405161032e91906124bd565b60405180910390f35b610351600480360381019061034c9190612829565b611202565b005b61035b6112d6565b60405161036891906126c5565b60405180910390f35b61038b600480360381019061038691906126e0565b6112ff565b60405161039891906124bd565b60405180910390f35b6103bb60048036038101906103b69190612829565b61132f565b005b6103d760048036038101906103d29190612856565b611403565b6040516103e5929190612896565b60405180910390f35b6103f6611434565b60405161040391906128f2565b60405180910390f35b61042660048036038101906104219190612856565b61145a565b60405161043391906124bd565b60405180910390f35b61044461167f565b60405161045191906126c5565b60405180910390f35b610474600480360381019061046f919061290d565b6116a5565b005b610490600480360381019061048b91906126e0565b6117c7565b005b6104ac60048036038101906104a79190612829565b611adb565b005b6000600680549050905090565b6104c3611b5e565b6104cb611020565b8060048190555050565b600681815481106104e557600080fd5b90600052602060002090600502016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040160009054906101000a900461ffff16905085565b60085481565b610557611bdc565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036105c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105bc906129d1565b60405180910390fd5b6000600684815481106105db576105da6129f1565b5b9060005260206000209060050201905060006007600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061064885610bd3565b6000816000015411156106b757600061069f826001015461069164e8d4a5100061068387600301548760000154611c2b90919063ffffffff16565b611ca590919063ffffffff16565b611cef90919063ffffffff16565b905060008111156106b5576106b43382611d39565b5b505b60008411156108cd576107113330868560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611f2e909392919063ffffffff16565b60008260040160009054906101000a900461ffff1661ffff1611156108ac57600061076f6127106107618560040160009054906101000a900461ffff1661ffff1688611c2b90919063ffffffff16565b611ca590919063ffffffff16565b9050600061079a606461078c604b85611c2b90919063ffffffff16565b611ca590919063ffffffff16565b905060006107b18284611cef90919063ffffffff16565b9050610824600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838760000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611fb79092919063ffffffff16565b61087386828760000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611fb79092919063ffffffff16565b61089c8361088e89876000015461203d90919063ffffffff16565b611cef90919063ffffffff16565b84600001819055505050506108cc565b6108c384826000015461203d90919063ffffffff16565b81600001819055505b5b6108ff64e8d4a510006108f184600301548460000154611c2b90919063ffffffff16565b611ca590919063ffffffff16565b8160010181905550843373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a158660405161094e91906124bd565b60405180910390a3505061096061209b565b505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610993611bdc565b6000600683815481106109a9576109a86129f1565b5b9060005260206000209060050201905060006007600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508281600001541015610a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4b90612a6c565b60405180910390fd5b610a5d84610bd3565b6000610aa78260010154610a9964e8d4a51000610a8b87600301548760000154611c2b90919063ffffffff16565b611ca590919063ffffffff16565b611cef90919063ffffffff16565b90506000811115610abd57610abc3382611d39565b5b6000841115610b3557610add848360000154611cef90919063ffffffff16565b8260000181905550610b3433858560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611fb79092919063ffffffff16565b5b610b6764e8d4a51000610b5985600301548560000154611c2b90919063ffffffff16565b611ca590919063ffffffff16565b8260010181905550843373ffffffffffffffffffffffffffffffffffffffff167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b56886604051610bb691906124bd565b60405180910390a3505050610bc961209b565b5050565b60095481565b600060068281548110610be957610be86129f1565b5b9060005260206000209060050201905080600201544311610c0a5750610ed2565b60008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c6991906126c5565b602060405180830381865afa158015610c86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610caa9190612aa1565b90506000811480610cbf575060008260010154145b15610cd4574382600201819055505050610ed2565b6000610ce48360020154436112ff565b90506000610d27600854610d198660010154610d0b60045487611c2b90919063ffffffff16565b611c2b90919063ffffffff16565b611ca590919063ffffffff16565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d9e600a85611ca590919063ffffffff16565b6040518363ffffffff1660e01b8152600401610dbb929190612ace565b600060405180830381600087803b158015610dd557600080fd5b505af1158015610de9573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930836040518363ffffffff1660e01b8152600401610e4a929190612ace565b600060405180830381600087803b158015610e6457600080fd5b505af1158015610e78573d6000803e3d6000fd5b50505050610ebc610ea984610e9b64e8d4a5100085611c2b90919063ffffffff16565b611ca590919063ffffffff16565b856003015461203d90919063ffffffff16565b8460030181905550438460020181905550505050505b50565b610edd611bdc565b600060068281548110610ef357610ef26129f1565b5b9060005260206000209060050201905060006007600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015490506000826000018190555060008260010181905550610fc333828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611fb79092919063ffffffff16565b833373ffffffffffffffffffffffffffffffffffffffff167fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05958360405161100a91906124bd565b60405180910390a350505061101d61209b565b50565b6000600680549050905060005b8181101561104f5761103e81610bd3565b8061104890612b26565b905061102d565b5050565b60045481565b611061611b5e565b61106b60006120a4565b565b611075611b5e565b6127108261ffff1611156110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b590612be0565b60405180910390fd5b80156110cd576110cc611020565b5b600060095443116110e0576009546110e2565b435b90506110f98560085461203d90919063ffffffff16565b60088190555060066040518060a001604052808673ffffffffffffffffffffffffffffffffffffffff168152602001878152602001838152602001600081526020018561ffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548161ffff021916908361ffff16021790555050505050505050565b600181565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611292576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128990612c4c565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061132760016113198585611cef90919063ffffffff16565b611c2b90919063ffffffff16565b905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b690612cb8565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6007602052816000526040600020602052806000526040600020600091509150508060000154908060010154905082565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060068481548110611471576114706129f1565b5b9060005260206000209060050201905060006007600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260030154905060008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161153d91906126c5565b602060405180830381865afa15801561155a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157e9190612aa1565b9050836002015443118015611594575060008114155b1561162f5760006115a98560020154436112ff565b905060006115ec6008546115de88600101546115d060045487611c2b90919063ffffffff16565b611c2b90919063ffffffff16565b611ca590919063ffffffff16565b905061162a61161b8461160d64e8d4a5100085611c2b90919063ffffffff16565b611ca590919063ffffffff16565b8561203d90919063ffffffff16565b935050505b611673836001015461166564e8d4a51000611657868860000154611c2b90919063ffffffff16565b611ca590919063ffffffff16565b611cef90919063ffffffff16565b94505050505092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116ad611b5e565b6127108261ffff1611156116f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ed90612d4a565b60405180910390fd5b801561170557611704611020565b5b61175183611743600687815481106117205761171f6129f1565b5b906000526020600020906005020160010154600854611cef90919063ffffffff16565b61203d90919063ffffffff16565b600881905550826006858154811061176c5761176b6129f1565b5b9060005260206000209060050201600101819055508160068581548110611796576117956129f1565b5b906000526020600020906005020160040160006101000a81548161ffff021916908361ffff16021790555050505050565b6117cf611bdc565b6000600683815481106117e5576117e46129f1565b5b9060005260206000209060050201905060006007600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061185284610bd3565b6000816000015411156118c15760006118a9826001015461189b64e8d4a5100061188d87600301548760000154611c2b90919063ffffffff16565b611ca590919063ffffffff16565b611cef90919063ffffffff16565b905060008111156118bf576118be3382611d39565b5b505b6000831115611a445761191b3330858560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611f2e909392919063ffffffff16565b60008260040160009054906101000a900461ffff1661ffff161115611a2357600061197961271061196b8560040160009054906101000a900461ffff1661ffff1687611c2b90919063ffffffff16565b611ca590919063ffffffff16565b90506119ec600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611fb79092919063ffffffff16565b611a1581611a0786856000015461203d90919063ffffffff16565b611cef90919063ffffffff16565b826000018190555050611a43565b611a3a83826000015461203d90919063ffffffff16565b81600001819055505b5b611a7664e8d4a51000611a6884600301548460000154611c2b90919063ffffffff16565b611ca590919063ffffffff16565b8160010181905550833373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1585604051611ac591906124bd565b60405180910390a35050611ad761209b565b5050565b611ae3611b5e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4990612ddc565b60405180910390fd5b611b5b816120a4565b50565b611b66612168565b73ffffffffffffffffffffffffffffffffffffffff16611b846112d6565b73ffffffffffffffffffffffffffffffffffffffff1614611bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd190612e48565b60405180910390fd5b565b600260015403611c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1890612eb4565b60405180910390fd5b6002600181905550565b6000808303611c3d5760009050611c9f565b60008284611c4b9190612ed4565b9050828482611c5a9190612f45565b14611c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9190612fe8565b60405180910390fd5b809150505b92915050565b6000611ce783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612170565b905092915050565b6000611d3183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121d3565b905092915050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d9691906126c5565b602060405180830381865afa158015611db3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd79190612aa1565b905080821115611e8757600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611e3e929190612ace565b6020604051808303816000875af1158015611e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e81919061301d565b50611f29565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401611ee4929190612ace565b6020604051808303816000875af1158015611f03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f27919061301d565b505b505050565b611fb1846323b872dd60e01b858585604051602401611f4f9392919061304a565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612237565b50505050565b6120388363a9059cbb60e01b8484604051602401611fd6929190612ace565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612237565b505050565b600080828461204c9190613081565b905083811015612091576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208890613101565b60405180910390fd5b8091505092915050565b60018081905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b600080831182906121b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ae91906131a0565b60405180910390fd5b50600083856121c69190612f45565b9050809150509392505050565b600083831115829061221b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221291906131a0565b60405180910390fd5b506000838561222a91906131c2565b9050809150509392505050565b6000612299826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166122fe9092919063ffffffff16565b90506000815111156122f957808060200190518101906122b9919061301d565b6122f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ef90613268565b60405180910390fd5b5b505050565b606061230d8484600085612316565b90509392505050565b60608247101561235b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612352906132fa565b60405180910390fd5b6123648561242a565b6123a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239a90613366565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516123cc91906133cd565b60006040518083038185875af1925050503d8060008114612409576040519150601f19603f3d011682016040523d82523d6000602084013e61240e565b606091505b509150915061241e82828661243d565b92505050949350505050565b600080823b905060008111915050919050565b6060831561244d5782905061249d565b6000835111156124605782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249491906131a0565b60405180910390fd5b9392505050565b6000819050919050565b6124b7816124a4565b82525050565b60006020820190506124d260008301846124ae565b92915050565b600080fd5b6124e6816124a4565b81146124f157600080fd5b50565b600081359050612503816124dd565b92915050565b60006020828403121561251f5761251e6124d8565b5b600061252d848285016124f4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061257b61257661257184612536565b612556565b612536565b9050919050565b600061258d82612560565b9050919050565b600061259f82612582565b9050919050565b6125af81612594565b82525050565b600061ffff82169050919050565b6125cc816125b5565b82525050565b600060a0820190506125e760008301886125a6565b6125f460208301876124ae565b61260160408301866124ae565b61260e60608301856124ae565b61261b60808301846125c3565b9695505050505050565b600061263082612536565b9050919050565b61264081612625565b811461264b57600080fd5b50565b60008135905061265d81612637565b92915050565b60008060006060848603121561267c5761267b6124d8565b5b600061268a868287016124f4565b935050602061269b868287016124f4565b92505060406126ac8682870161264e565b9150509250925092565b6126bf81612625565b82525050565b60006020820190506126da60008301846126b6565b92915050565b600080604083850312156126f7576126f66124d8565b5b6000612705858286016124f4565b9250506020612716858286016124f4565b9150509250929050565b600061272b82612625565b9050919050565b61273b81612720565b811461274657600080fd5b50565b60008135905061275881612732565b92915050565b612767816125b5565b811461277257600080fd5b50565b6000813590506127848161275e565b92915050565b60008115159050919050565b61279f8161278a565b81146127aa57600080fd5b50565b6000813590506127bc81612796565b92915050565b600080600080608085870312156127dc576127db6124d8565b5b60006127ea878288016124f4565b94505060206127fb87828801612749565b935050604061280c87828801612775565b925050606061281d878288016127ad565b91505092959194509250565b60006020828403121561283f5761283e6124d8565b5b600061284d8482850161264e565b91505092915050565b6000806040838503121561286d5761286c6124d8565b5b600061287b858286016124f4565b925050602061288c8582860161264e565b9150509250929050565b60006040820190506128ab60008301856124ae565b6128b860208301846124ae565b9392505050565b60006128ca82612560565b9050919050565b60006128dc826128bf565b9050919050565b6128ec816128d1565b82525050565b600060208201905061290760008301846128e3565b92915050565b60008060008060808587031215612927576129266124d8565b5b6000612935878288016124f4565b9450506020612946878288016124f4565b935050604061295787828801612775565b9250506060612968878288016127ad565b91505092959194509250565b600082825260208201905092915050565b7f6465763a20646f6e742072656666657220796f757273656c6600000000000000600082015250565b60006129bb601983612974565b91506129c682612985565b602082019050919050565b600060208201905081810360008301526129ea816129ae565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f77697468647261773a206e6f7420676f6f640000000000000000000000000000600082015250565b6000612a56601283612974565b9150612a6182612a20565b602082019050919050565b60006020820190508181036000830152612a8581612a49565b9050919050565b600081519050612a9b816124dd565b92915050565b600060208284031215612ab757612ab66124d8565b5b6000612ac584828501612a8c565b91505092915050565b6000604082019050612ae360008301856126b6565b612af060208301846124ae565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b31826124a4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b6357612b62612af7565b5b600182019050919050565b7f6164643a20696e76616c6964206465706f73697420666565206261736973207060008201527f6f696e7473000000000000000000000000000000000000000000000000000000602082015250565b6000612bca602583612974565b9150612bd582612b6e565b604082019050919050565b60006020820190508181036000830152612bf981612bbd565b9050919050565b7f6465763a207775743f0000000000000000000000000000000000000000000000600082015250565b6000612c36600983612974565b9150612c4182612c00565b602082019050919050565b60006020820190508181036000830152612c6581612c29565b9050919050565b7f73657446656541646472657373313a20464f5242494444454e00000000000000600082015250565b6000612ca2601983612974565b9150612cad82612c6c565b602082019050919050565b60006020820190508181036000830152612cd181612c95565b9050919050565b7f7365743a20696e76616c6964206465706f73697420666565206261736973207060008201527f6f696e7473000000000000000000000000000000000000000000000000000000602082015250565b6000612d34602583612974565b9150612d3f82612cd8565b604082019050919050565b60006020820190508181036000830152612d6381612d27565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612dc6602683612974565b9150612dd182612d6a565b604082019050919050565b60006020820190508181036000830152612df581612db9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e32602083612974565b9150612e3d82612dfc565b602082019050919050565b60006020820190508181036000830152612e6181612e25565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000612e9e601f83612974565b9150612ea982612e68565b602082019050919050565b60006020820190508181036000830152612ecd81612e91565b9050919050565b6000612edf826124a4565b9150612eea836124a4565b9250828202612ef8816124a4565b91508282048414831517612f0f57612f0e612af7565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612f50826124a4565b9150612f5b836124a4565b925082612f6b57612f6a612f16565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000612fd2602183612974565b9150612fdd82612f76565b604082019050919050565b6000602082019050818103600083015261300181612fc5565b9050919050565b60008151905061301781612796565b92915050565b600060208284031215613033576130326124d8565b5b600061304184828501613008565b91505092915050565b600060608201905061305f60008301866126b6565b61306c60208301856126b6565b61307960408301846124ae565b949350505050565b600061308c826124a4565b9150613097836124a4565b92508282019050808211156130af576130ae612af7565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006130eb601b83612974565b91506130f6826130b5565b602082019050919050565b6000602082019050818103600083015261311a816130de565b9050919050565b600081519050919050565b60005b8381101561314a57808201518184015260208101905061312f565b60008484015250505050565b6000601f19601f8301169050919050565b600061317282613121565b61317c8185612974565b935061318c81856020860161312c565b61319581613156565b840191505092915050565b600060208201905081810360008301526131ba8184613167565b905092915050565b60006131cd826124a4565b91506131d8836124a4565b92508282039050818111156131f0576131ef612af7565b5b92915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000613252602a83612974565b915061325d826131f6565b604082019050919050565b6000602082019050818103600083015261328181613245565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b60006132e4602683612974565b91506132ef82613288565b604082019050919050565b60006020820190508181036000830152613313816132d7565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613350601d83612974565b915061335b8261331a565b602082019050919050565b6000602082019050818103600083015261337f81613343565b9050919050565b600081519050919050565b600081905092915050565b60006133a782613386565b6133b18185613391565b93506133c181856020860161312c565b80840191505092915050565b60006133d9828461339c565b91508190509291505056fea2646970667358221220eeed59c0074c3f9810136f3790cb528452cb00525710d4d0f8e4c8f6327e0f4764736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000003ee9074e93c364c7040d8d1498bb1c36207edb2b00000000000000000000000089a1cb13a789183ad8e4c16055648d9d9794550e00000000000000000000000089a1cb13a789183ad8e4c16055648d9d9794550e0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000c6959
-----Decoded View---------------
Arg [0] : _BAYC (address): 0x3Ee9074E93c364c7040d8D1498Bb1c36207Edb2B
Arg [1] : _devaddr (address): 0x89a1cB13a789183ad8e4C16055648D9d9794550e
Arg [2] : _feeAddress1 (address): 0x89a1cB13a789183ad8e4C16055648D9d9794550e
Arg [3] : _BAYCPerBlock (uint256): 1000000000000000000
Arg [4] : _startBlock (uint256): 813401
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000003ee9074e93c364c7040d8d1498bb1c36207edb2b
Arg [1] : 00000000000000000000000089a1cb13a789183ad8e4c16055648d9d9794550e
Arg [2] : 00000000000000000000000089a1cb13a789183ad8e4c16055648d9d9794550e
Arg [3] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [4] : 00000000000000000000000000000000000000000000000000000000000c6959
Deployed Bytecode Sourcemap
48136:11226:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50911:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59216:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49950:26;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;50193:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55784:1396;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49889:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57232:753;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50284:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53771:805;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58056:398;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53515:180;;;:::i;:::-;;49729:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34474:103;;;:::i;:::-;;51175:640;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49810:44;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58902:129;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33833:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52466:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59039:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50032:66;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;49612:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52673:759;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49661:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51927:463;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54645:1070;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34732:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50911:95;50956:7;50983:8;:15;;;;50976:22;;50911:95;:::o;59216:143::-;33719:13;:11;:13::i;:::-;59295:17:::1;:15;:17::i;:::-;59338:13;59323:12;:28;;;;59216:143:::0;:::o;49950:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50193:34::-;;;;:::o;55784:1396::-;9169:21;:19;:21::i;:::-;55911:8:::1;55897:22;;:10;:22;;::::0;55889:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;55960:21;55984:8;55993:4;55984:14;;;;;;;;:::i;:::-;;;;;;;;;;;;55960:38;;56009:21;56033:8;:14;56042:4;56033:14;;;;;;;;;;;:26;56048:10;56033:26;;;;;;;;;;;;;;;56009:50;;56070:16;56081:4;56070:10;:16::i;:::-;56115:1;56101:4;:11;;;:15;56097:236;;;56133:15;56151:68;56203:4;:15;;;56151:47;56193:4;56151:37;56167:4;:20;;;56151:4;:11;;;:15;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;:51;;:68;;;;:::i;:::-;56133:86;;56247:1;56237:7;:11;56234:88;;;56269:37;56286:10;56298:7;56269:16;:37::i;:::-;56234:88;56118:215;56097:236;56356:1;56346:7;:11;56343:704;;;56374:74;56412:10;56433:4;56440:7;56374:4;:12;;;;;;;;;;;;:29;;;;:74;;;;;;:::i;:::-;56486:1;56466:4;:17;;;;;;;;;;;;:21;;;56463:573;;;56507:18;56528:41;56563:5;56528:30;56540:4;:17;;;;;;;;;;;;56528:30;;:7;:11;;:30;;;;:::i;:::-;:34;;:41;;;;:::i;:::-;56507:62;;56588:24;56615:27;56638:3;56615:18;56630:2;56615:10;:14;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;56588:54;;56661:24;56688:32;56703:16;56688:10;:14;;:32;;;;:::i;:::-;56661:59;;56741:55;56767:10;;;;;;;;;;;56779:16;56741:4;:12;;;;;;;;;;;;:25;;;;:55;;;;;:::i;:::-;56815:53;56841:8;56851:16;56815:4;:12;;;;;;;;;;;;:25;;;;:53;;;;;:::i;:::-;56903:40;56932:10;56903:24;56919:7;56903:4;:11;;;:15;;:24;;;;:::i;:::-;:28;;:40;;;;:::i;:::-;56889:4;:11;;:54;;;;56488:471;;;56463:573;;;56996:24;57012:7;56996:4;:11;;;:15;;:24;;;;:::i;:::-;56982:4;:11;;:38;;;;56463:573;56343:704;57075:47;57117:4;57075:37;57091:4;:20;;;57075:4;:11;;;:15;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;57057:4;:15;;:65;;;;57158:4;57146:10;57138:34;;;57164:7;57138:34;;;;;;:::i;:::-;;;;;;;;55878:1302;;9213:20:::0;:18;:20::i;:::-;55784:1396;;;:::o;49889:25::-;;;;;;;;;;;;;:::o;57232:753::-;9169:21;:19;:21::i;:::-;57312::::1;57336:8;57345:4;57336:14;;;;;;;;:::i;:::-;;;;;;;;;;;;57312:38;;57361:21;57385:8;:14;57394:4;57385:14;;;;;;;;;;;:26;57400:10;57385:26;;;;;;;;;;;;;;;57361:50;;57445:7;57430:4;:11;;;:22;;57422:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;57486:16;57497:4;57486:10;:16::i;:::-;57513:15;57531:68;57583:4;:15;;;57531:47;57573:4;57531:37;57547:4;:20;;;57531:4;:11;;;:15;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;:51;;:68;;;;:::i;:::-;57513:86;;57623:1;57613:7;:11;57610:80;;;57641:37;57658:10;57670:7;57641:16;:37::i;:::-;57610:80;57713:1;57703:7;:11;57700:151;;;57745:24;57761:7;57745:4;:11;;;:15;;:24;;;;:::i;:::-;57731:4;:11;;:38;;;;57784:55;57818:10;57831:7;57784:4;:12;;;;;;;;;;;;:25;;;;:55;;;;;:::i;:::-;57700:151;57879:47;57921:4;57879:37;57895:4;:20;;;57879:4;:11;;;:15;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;57861:4;:15;;:65;;;;57963:4;57951:10;57942:35;;;57969:7;57942:35;;;;;;:::i;:::-;;;;;;;;57301:684;;;9213:20:::0;:18;:20::i;:::-;57232:753;;:::o;50284:25::-;;;;:::o;53771:805::-;53823:21;53847:8;53856:4;53847:14;;;;;;;;:::i;:::-;;;;;;;;;;;;53823:38;;53892:4;:20;;;53876:12;:36;53872:75;;53929:7;;;53872:75;53957:16;53976:4;:12;;;;;;;;;;;;:22;;;54007:4;53976:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53957:56;;54040:1;54028:8;:13;:37;;;;54064:1;54045:4;:15;;;:20;54028:37;54024:126;;;54105:12;54082:4;:20;;:35;;;;54132:7;;;;54024:126;54160:18;54181:49;54195:4;:20;;;54217:12;54181:13;:49::i;:::-;54160:70;;54241:18;54262:70;54316:15;;54262:49;54295:4;:15;;;54262:28;54277:12;;54262:10;:14;;:28;;;;:::i;:::-;:32;;:49;;;;:::i;:::-;:53;;:70;;;;:::i;:::-;54241:91;;54343:4;;;;;;;;;;;:9;;;54353:7;;;;;;;;;;;54362:18;54377:2;54362:10;:14;;:18;;;;:::i;:::-;54343:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54392:4;;;;;;;;;;;:9;;;54410:4;54417:10;54392:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54462:60;54487:34;54512:8;54487:20;54502:4;54487:10;:14;;:20;;;;:::i;:::-;:24;;:34;;;;:::i;:::-;54462:4;:20;;;:24;;:60;;;;:::i;:::-;54439:4;:20;;:83;;;;54556:12;54533:4;:20;;:35;;;;53812:764;;;;53771:805;;:::o;58056:398::-;9169:21;:19;:21::i;:::-;58128::::1;58152:8;58161:4;58152:14;;;;;;;;:::i;:::-;;;;;;;;;;;;58128:38;;58177:21;58201:8;:14;58210:4;58201:14;;;;;;;;;;;:26;58216:10;58201:26;;;;;;;;;;;;;;;58177:50;;58238:14;58255:4;:11;;;58238:28;;58291:1;58277:4;:11;;:15;;;;58321:1;58303:4;:15;;:19;;;;58333:54;58367:10;58380:6;58333:4;:12;;;;;;;;;;;;:25;;;;:54;;;;;:::i;:::-;58433:4;58421:10;58403:43;;;58439:6;58403:43;;;;;;:::i;:::-;;;;;;;;58117:337;;;9213:20:::0;:18;:20::i;:::-;58056:398;:::o;53515:180::-;53560:14;53577:8;:15;;;;53560:32;;53608:11;53603:85;53631:6;53625:3;:12;53603:85;;;53661:15;53672:3;53661:10;:15::i;:::-;53639:5;;;;:::i;:::-;;;53603:85;;;;53549:146;53515:180::o;49729:27::-;;;;:::o;34474:103::-;33719:13;:11;:13::i;:::-;34539:30:::1;34566:1;34539:18;:30::i;:::-;34474:103::o:0;51175:640::-;33719:13;:11;:13::i;:::-;51319:5:::1;51302:13;:22;;;;51294:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;51381:11;51377:61;;;51409:17;:15;:17::i;:::-;51377:61;51448:23;51489:10;;51474:12;:25;:53;;51517:10;;51474:53;;;51502:12;51474:53;51448:79;;51556:32;51576:11;51556:15;;:19;;:32;;;;:::i;:::-;51538:15;:50;;;;51599:8;51613:193;;;;;;;;51642:8;51613:193;;;;;;51673:11;51613:193;;;;51712:15;51613:193;;;;51755:1;51613:193;;;;51781:13;51613:193;;;;::::0;51599:208:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51283:532;51175:640:::0;;;;:::o;49810:44::-;49853:1;49810:44;:::o;58902:129::-;58973:7;;;;;;;;;;;58959:21;;:10;:21;;;58951:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;59015:8;59005:7;;:18;;;;;;;;;;;;;;;;;;58902:129;:::o;33833:87::-;33879:7;33906:6;;;;;;;;;;;33899:13;;33833:87;:::o;52466:143::-;52538:7;52565:36;49853:1;52565:14;52573:5;52565:3;:7;;:14;;;;:::i;:::-;:18;;:36;;;;:::i;:::-;52558:43;;52466:143;;;;:::o;59039:169::-;59124:10;;;;;;;;;;;59110:24;;:10;:24;;;59102:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;59188:12;59175:10;;:25;;;;;;;;;;;;;;;;;;59039:169;:::o;50032:66::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49612:21::-;;;;;;;;;;;;;:::o;52673:759::-;52746:7;52766:21;52790:8;52799:4;52790:14;;;;;;;;:::i;:::-;;;;;;;;;;;;52766:38;;52815:21;52839:8;:14;52848:4;52839:14;;;;;;;;;;;:21;52854:5;52839:21;;;;;;;;;;;;;;;52815:45;;52871:23;52897:4;:20;;;52871:46;;52928:16;52947:4;:12;;;;;;;;;;;;:22;;;52978:4;52947:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52928:56;;53014:4;:20;;;52999:12;:35;:52;;;;;53050:1;53038:8;:13;;52999:52;52995:349;;;53068:18;53089:49;53103:4;:20;;;53125:12;53089:13;:49::i;:::-;53068:70;;53153:18;53174:70;53228:15;;53174:49;53207:4;:15;;;53174:28;53189:12;;53174:10;:14;;:28;;;;:::i;:::-;:32;;:49;;;;:::i;:::-;:53;;:70;;;;:::i;:::-;53153:91;;53277:55;53297:34;53322:8;53297:20;53312:4;53297:10;:14;;:20;;;;:::i;:::-;:24;;:34;;;;:::i;:::-;53277:15;:19;;:55;;;;:::i;:::-;53259:73;;53053:291;;52995:349;53361:63;53408:4;:15;;;53361:42;53398:4;53361:32;53377:15;53361:4;:11;;;:15;;:32;;;;:::i;:::-;:36;;:42;;;;:::i;:::-;:46;;:63;;;;:::i;:::-;53354:70;;;;;;52673:759;;;;:::o;49661:22::-;;;;;;;;;;;;;:::o;51927:463::-;33719:13;:11;:13::i;:::-;52068:5:::1;52051:13;:22;;;;52043:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;52130:11;52126:61;;;52158:17;:15;:17::i;:::-;52126:61;52215:63;52266:11;52215:46;52235:8;52244:4;52235:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:25;;;52215:15;;:19;;:46;;;;:::i;:::-;:50;;:63;;;;:::i;:::-;52197:15;:81;;;;52317:11;52289:8;52298:4;52289:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:25;;:39;;;;52369:13;52339:8;52348:4;52339:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:27;;;:43;;;;;;;;;;;;;;;;;;51927:463:::0;;;;:::o;54645:1070::-;9169:21;:19;:21::i;:::-;54724::::1;54748:8;54757:4;54748:14;;;;;;;;:::i;:::-;;;;;;;;;;;;54724:38;;54773:21;54797:8;:14;54806:4;54797:14;;;;;;;;;;;:26;54812:10;54797:26;;;;;;;;;;;;;;;54773:50;;54834:16;54845:4;54834:10;:16::i;:::-;54879:1;54865:4;:11;;;:15;54861:236;;;54897:15;54915:68;54967:4;:15;;;54915:47;54957:4;54915:37;54931:4;:20;;;54915:4;:11;;;:15;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;:51;;:68;;;;:::i;:::-;54897:86;;55011:1;55001:7;:11;54998:88;;;55033:37;55050:10;55062:7;55033:16;:37::i;:::-;54998:88;54882:215;54861:236;55120:1;55110:7;:11;55107:475;;;55138:74;55176:10;55197:4;55204:7;55138:4;:12;;;;;;;;;;;;:29;;;;:74;;;;;;:::i;:::-;55250:1;55230:4;:17;;;;;;;;;;;;:21;;;55227:344;;;55271:18;55292:41;55327:5;55292:30;55304:4;:17;;;;;;;;;;;;55292:30;;:7;:11;;:30;;;;:::i;:::-;:34;;:41;;;;:::i;:::-;55271:62;;55354:49;55380:10;;;;;;;;;;;55392;55354:4;:12;;;;;;;;;;;;:25;;;;:49;;;;;:::i;:::-;55438:40;55467:10;55438:24;55454:7;55438:4;:11;;;:15;;:24;;;;:::i;:::-;:28;;:40;;;;:::i;:::-;55424:4;:11;;:54;;;;55252:242;55227:344;;;55531:24;55547:7;55531:4;:11;;;:15;;:24;;;;:::i;:::-;55517:4;:11;;:38;;;;55227:344;55107:475;55610:47;55652:4;55610:37;55626:4;:20;;;55610:4;:11;;;:15;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;55592:4;:15;;:65;;;;55693:4;55681:10;55673:34;;;55699:7;55673:34;;;;;;:::i;:::-;;;;;;;;54713:1002;;9213:20:::0;:18;:20::i;:::-;54645:1070;;:::o;34732:201::-;33719:13;:11;:13::i;:::-;34841:1:::1;34821:22;;:8;:22;;::::0;34813:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34897:28;34916:8;34897:18;:28::i;:::-;34732:201:::0;:::o;33998:132::-;34073:12;:10;:12::i;:::-;34062:23;;:7;:5;:7::i;:::-;:23;;;34054:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33998:132::o;9249:293::-;8651:1;9383:7;;:19;9375:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;8651:1;9516:7;:18;;;;9249:293::o;41069:471::-;41127:7;41377:1;41372;:6;41368:47;;41402:1;41395:8;;;;41368:47;41427:9;41443:1;41439;:5;;;;:::i;:::-;41427:17;;41472:1;41467;41463;:5;;;;:::i;:::-;:10;41455:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;41531:1;41524:8;;;41069:471;;;;;:::o;42016:132::-;42074:7;42101:39;42105:1;42108;42101:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;42094:46;;42016:132;;;;:::o;40179:136::-;40237:7;40264:43;40268:1;40271;40264:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;40257:50;;40179:136;;;;:::o;58568:278::-;58644:15;58662:4;;;;;;;;;;;:14;;;58685:4;58662:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58644:47;;58716:7;58706;:17;58702:137;;;58740:4;;;;;;;;;;;:13;;;58754:3;58759:7;58740:27;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;58702:137;;;58800:4;;;;;;;;;;;:13;;;58814:3;58819:7;58800:27;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;58702:137;58633:213;58568:278;;:::o;44921:205::-;45022:96;45042:5;45072:27;;;45101:4;45107:2;45111:5;45049:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45022:19;:96::i;:::-;44921:205;;;;:::o;44736:177::-;44819:86;44839:5;44869:23;;;44894:2;44898:5;44846:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44819:19;:86::i;:::-;44736:177;;;:::o;39715:181::-;39773:7;39793:9;39809:1;39805;:5;;;;:::i;:::-;39793:17;;39834:1;39829;:6;;39821:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;39887:1;39880:8;;;39715:181;;;;:::o;9550:213::-;8607:1;9733:7;:22;;;;9550:213::o;35093:191::-;35167:16;35186:6;;;;;;;;;;;35167:25;;35212:8;35203:6;;:17;;;;;;;;;;;;;;;;;;35267:8;35236:40;;35257:8;35236:40;;;;;;;;;;;;35156:128;35093:191;:::o;13914:98::-;13967:7;13994:10;13987:17;;13914:98;:::o;42644:278::-;42730:7;42762:1;42758;:5;42765:12;42750:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;42789:9;42805:1;42801;:5;;;;:::i;:::-;42789:17;;42913:1;42906:8;;;42644:278;;;;;:::o;40618:192::-;40704:7;40737:1;40732;:6;;40740:12;40724:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;40764:9;40780:1;40776;:5;;;;:::i;:::-;40764:17;;40801:1;40794:8;;;40618:192;;;;;:::o;47041:761::-;47465:23;47491:69;47519:4;47491:69;;;;;;;;;;;;;;;;;47499:5;47491:27;;;;:69;;;;;:::i;:::-;47465:95;;47595:1;47575:10;:17;:21;47571:224;;;47717:10;47706:30;;;;;;;;;;;;:::i;:::-;47698:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;47571:224;47111:691;47041:761;;:::o;3663:195::-;3766:12;3798:52;3820:6;3828:4;3834:1;3837:12;3798:21;:52::i;:::-;3791:59;;3663:195;;;;;:::o;4715:530::-;4842:12;4900:5;4875:21;:30;;4867:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;4967:18;4978:6;4967:10;:18::i;:::-;4959:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;5093:12;5107:23;5134:6;:11;;5154:5;5162:4;5134:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5092:75;;;;5185:52;5203:7;5212:10;5224:12;5185:17;:52::i;:::-;5178:59;;;;4715:530;;;;;;:::o;743:422::-;803:4;1011:12;1122:7;1110:20;1102:28;;1156:1;1149:4;:8;1142:15;;;743:422;;;:::o;6251:742::-;6366:12;6395:7;6391:595;;;6426:10;6419:17;;;;6391:595;6560:1;6540:10;:17;:21;6536:439;;;6803:10;6797:17;6864:15;6851:10;6847:2;6843:19;6836:44;6536:439;6946:12;6939:20;;;;;;;;;;;:::i;:::-;;;;;;;;6251:742;;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:122;842:24;860:5;842:24;:::i;:::-;835:5;832:35;822:63;;881:1;878;871:12;822:63;769:122;:::o;897:139::-;943:5;981:6;968:20;959:29;;997:33;1024:5;997:33;:::i;:::-;897:139;;;;:::o;1042:329::-;1101:6;1150:2;1138:9;1129:7;1125:23;1121:32;1118:119;;;1156:79;;:::i;:::-;1118:119;1276:1;1301:53;1346:7;1337:6;1326:9;1322:22;1301:53;:::i;:::-;1291:63;;1247:117;1042:329;;;;:::o;1377:126::-;1414:7;1454:42;1447:5;1443:54;1432:65;;1377:126;;;:::o;1509:60::-;1537:3;1558:5;1551:12;;1509:60;;;:::o;1575:142::-;1625:9;1658:53;1676:34;1685:24;1703:5;1685:24;:::i;:::-;1676:34;:::i;:::-;1658:53;:::i;:::-;1645:66;;1575:142;;;:::o;1723:126::-;1773:9;1806:37;1837:5;1806:37;:::i;:::-;1793:50;;1723:126;;;:::o;1855:140::-;1919:9;1952:37;1983:5;1952:37;:::i;:::-;1939:50;;1855:140;;;:::o;2001:159::-;2102:51;2147:5;2102:51;:::i;:::-;2097:3;2090:64;2001:159;;:::o;2166:89::-;2202:7;2242:6;2235:5;2231:18;2220:29;;2166:89;;;:::o;2261:115::-;2346:23;2363:5;2346:23;:::i;:::-;2341:3;2334:36;2261:115;;:::o;2382:688::-;2599:4;2637:3;2626:9;2622:19;2614:27;;2651:85;2733:1;2722:9;2718:17;2709:6;2651:85;:::i;:::-;2746:72;2814:2;2803:9;2799:18;2790:6;2746:72;:::i;:::-;2828;2896:2;2885:9;2881:18;2872:6;2828:72;:::i;:::-;2910;2978:2;2967:9;2963:18;2954:6;2910:72;:::i;:::-;2992:71;3058:3;3047:9;3043:19;3034:6;2992:71;:::i;:::-;2382:688;;;;;;;;:::o;3076:96::-;3113:7;3142:24;3160:5;3142:24;:::i;:::-;3131:35;;3076:96;;;:::o;3178:122::-;3251:24;3269:5;3251:24;:::i;:::-;3244:5;3241:35;3231:63;;3290:1;3287;3280:12;3231:63;3178:122;:::o;3306:139::-;3352:5;3390:6;3377:20;3368:29;;3406:33;3433:5;3406:33;:::i;:::-;3306:139;;;;:::o;3451:619::-;3528:6;3536;3544;3593:2;3581:9;3572:7;3568:23;3564:32;3561:119;;;3599:79;;:::i;:::-;3561:119;3719:1;3744:53;3789:7;3780:6;3769:9;3765:22;3744:53;:::i;:::-;3734:63;;3690:117;3846:2;3872:53;3917:7;3908:6;3897:9;3893:22;3872:53;:::i;:::-;3862:63;;3817:118;3974:2;4000:53;4045:7;4036:6;4025:9;4021:22;4000:53;:::i;:::-;3990:63;;3945:118;3451:619;;;;;:::o;4076:118::-;4163:24;4181:5;4163:24;:::i;:::-;4158:3;4151:37;4076:118;;:::o;4200:222::-;4293:4;4331:2;4320:9;4316:18;4308:26;;4344:71;4412:1;4401:9;4397:17;4388:6;4344:71;:::i;:::-;4200:222;;;;:::o;4428:474::-;4496:6;4504;4553:2;4541:9;4532:7;4528:23;4524:32;4521:119;;;4559:79;;:::i;:::-;4521:119;4679:1;4704:53;4749:7;4740:6;4729:9;4725:22;4704:53;:::i;:::-;4694:63;;4650:117;4806:2;4832:53;4877:7;4868:6;4857:9;4853:22;4832:53;:::i;:::-;4822:63;;4777:118;4428:474;;;;;:::o;4908:110::-;4959:7;4988:24;5006:5;4988:24;:::i;:::-;4977:35;;4908:110;;;:::o;5024:150::-;5111:38;5143:5;5111:38;:::i;:::-;5104:5;5101:49;5091:77;;5164:1;5161;5154:12;5091:77;5024:150;:::o;5180:167::-;5240:5;5278:6;5265:20;5256:29;;5294:47;5335:5;5294:47;:::i;:::-;5180:167;;;;:::o;5353:120::-;5425:23;5442:5;5425:23;:::i;:::-;5418:5;5415:34;5405:62;;5463:1;5460;5453:12;5405:62;5353:120;:::o;5479:137::-;5524:5;5562:6;5549:20;5540:29;;5578:32;5604:5;5578:32;:::i;:::-;5479:137;;;;:::o;5622:90::-;5656:7;5699:5;5692:13;5685:21;5674:32;;5622:90;;;:::o;5718:116::-;5788:21;5803:5;5788:21;:::i;:::-;5781:5;5778:32;5768:60;;5824:1;5821;5814:12;5768:60;5718:116;:::o;5840:133::-;5883:5;5921:6;5908:20;5899:29;;5937:30;5961:5;5937:30;:::i;:::-;5840:133;;;;:::o;5979:785::-;6075:6;6083;6091;6099;6148:3;6136:9;6127:7;6123:23;6119:33;6116:120;;;6155:79;;:::i;:::-;6116:120;6275:1;6300:53;6345:7;6336:6;6325:9;6321:22;6300:53;:::i;:::-;6290:63;;6246:117;6402:2;6428:67;6487:7;6478:6;6467:9;6463:22;6428:67;:::i;:::-;6418:77;;6373:132;6544:2;6570:52;6614:7;6605:6;6594:9;6590:22;6570:52;:::i;:::-;6560:62;;6515:117;6671:2;6697:50;6739:7;6730:6;6719:9;6715:22;6697:50;:::i;:::-;6687:60;;6642:115;5979:785;;;;;;;:::o;6770:329::-;6829:6;6878:2;6866:9;6857:7;6853:23;6849:32;6846:119;;;6884:79;;:::i;:::-;6846:119;7004:1;7029:53;7074:7;7065:6;7054:9;7050:22;7029:53;:::i;:::-;7019:63;;6975:117;6770:329;;;;:::o;7105:474::-;7173:6;7181;7230:2;7218:9;7209:7;7205:23;7201:32;7198:119;;;7236:79;;:::i;:::-;7198:119;7356:1;7381:53;7426:7;7417:6;7406:9;7402:22;7381:53;:::i;:::-;7371:63;;7327:117;7483:2;7509:53;7554:7;7545:6;7534:9;7530:22;7509:53;:::i;:::-;7499:63;;7454:118;7105:474;;;;;:::o;7585:332::-;7706:4;7744:2;7733:9;7729:18;7721:26;;7757:71;7825:1;7814:9;7810:17;7801:6;7757:71;:::i;:::-;7838:72;7906:2;7895:9;7891:18;7882:6;7838:72;:::i;:::-;7585:332;;;;;:::o;7923:134::-;7981:9;8014:37;8045:5;8014:37;:::i;:::-;8001:50;;7923:134;;;:::o;8063:160::-;8139:9;8172:45;8211:5;8172:45;:::i;:::-;8159:58;;8063:160;;;:::o;8229:183::-;8342:63;8399:5;8342:63;:::i;:::-;8337:3;8330:76;8229:183;;:::o;8418:274::-;8537:4;8575:2;8564:9;8560:18;8552:26;;8588:97;8682:1;8671:9;8667:17;8658:6;8588:97;:::i;:::-;8418:274;;;;:::o;8698:757::-;8780:6;8788;8796;8804;8853:3;8841:9;8832:7;8828:23;8824:33;8821:120;;;8860:79;;:::i;:::-;8821:120;8980:1;9005:53;9050:7;9041:6;9030:9;9026:22;9005:53;:::i;:::-;8995:63;;8951:117;9107:2;9133:53;9178:7;9169:6;9158:9;9154:22;9133:53;:::i;:::-;9123:63;;9078:118;9235:2;9261:52;9305:7;9296:6;9285:9;9281:22;9261:52;:::i;:::-;9251:62;;9206:117;9362:2;9388:50;9430:7;9421:6;9410:9;9406:22;9388:50;:::i;:::-;9378:60;;9333:115;8698:757;;;;;;;:::o;9461:169::-;9545:11;9579:6;9574:3;9567:19;9619:4;9614:3;9610:14;9595:29;;9461:169;;;;:::o;9636:175::-;9776:27;9772:1;9764:6;9760:14;9753:51;9636:175;:::o;9817:366::-;9959:3;9980:67;10044:2;10039:3;9980:67;:::i;:::-;9973:74;;10056:93;10145:3;10056:93;:::i;:::-;10174:2;10169:3;10165:12;10158:19;;9817:366;;;:::o;10189:419::-;10355:4;10393:2;10382:9;10378:18;10370:26;;10442:9;10436:4;10432:20;10428:1;10417:9;10413:17;10406:47;10470:131;10596:4;10470:131;:::i;:::-;10462:139;;10189:419;;;:::o;10614:180::-;10662:77;10659:1;10652:88;10759:4;10756:1;10749:15;10783:4;10780:1;10773:15;10800:168;10940:20;10936:1;10928:6;10924:14;10917:44;10800:168;:::o;10974:366::-;11116:3;11137:67;11201:2;11196:3;11137:67;:::i;:::-;11130:74;;11213:93;11302:3;11213:93;:::i;:::-;11331:2;11326:3;11322:12;11315:19;;10974:366;;;:::o;11346:419::-;11512:4;11550:2;11539:9;11535:18;11527:26;;11599:9;11593:4;11589:20;11585:1;11574:9;11570:17;11563:47;11627:131;11753:4;11627:131;:::i;:::-;11619:139;;11346:419;;;:::o;11771:143::-;11828:5;11859:6;11853:13;11844:22;;11875:33;11902:5;11875:33;:::i;:::-;11771:143;;;;:::o;11920:351::-;11990:6;12039:2;12027:9;12018:7;12014:23;12010:32;12007:119;;;12045:79;;:::i;:::-;12007:119;12165:1;12190:64;12246:7;12237:6;12226:9;12222:22;12190:64;:::i;:::-;12180:74;;12136:128;11920:351;;;;:::o;12277:332::-;12398:4;12436:2;12425:9;12421:18;12413:26;;12449:71;12517:1;12506:9;12502:17;12493:6;12449:71;:::i;:::-;12530:72;12598:2;12587:9;12583:18;12574:6;12530:72;:::i;:::-;12277:332;;;;;:::o;12615:180::-;12663:77;12660:1;12653:88;12760:4;12757:1;12750:15;12784:4;12781:1;12774:15;12801:233;12840:3;12863:24;12881:5;12863:24;:::i;:::-;12854:33;;12909:66;12902:5;12899:77;12896:103;;12979:18;;:::i;:::-;12896:103;13026:1;13019:5;13015:13;13008:20;;12801:233;;;:::o;13040:224::-;13180:34;13176:1;13168:6;13164:14;13157:58;13249:7;13244:2;13236:6;13232:15;13225:32;13040:224;:::o;13270:366::-;13412:3;13433:67;13497:2;13492:3;13433:67;:::i;:::-;13426:74;;13509:93;13598:3;13509:93;:::i;:::-;13627:2;13622:3;13618:12;13611:19;;13270:366;;;:::o;13642:419::-;13808:4;13846:2;13835:9;13831:18;13823:26;;13895:9;13889:4;13885:20;13881:1;13870:9;13866:17;13859:47;13923:131;14049:4;13923:131;:::i;:::-;13915:139;;13642:419;;;:::o;14067:159::-;14207:11;14203:1;14195:6;14191:14;14184:35;14067:159;:::o;14232:365::-;14374:3;14395:66;14459:1;14454:3;14395:66;:::i;:::-;14388:73;;14470:93;14559:3;14470:93;:::i;:::-;14588:2;14583:3;14579:12;14572:19;;14232:365;;;:::o;14603:419::-;14769:4;14807:2;14796:9;14792:18;14784:26;;14856:9;14850:4;14846:20;14842:1;14831:9;14827:17;14820:47;14884:131;15010:4;14884:131;:::i;:::-;14876:139;;14603:419;;;:::o;15028:175::-;15168:27;15164:1;15156:6;15152:14;15145:51;15028:175;:::o;15209:366::-;15351:3;15372:67;15436:2;15431:3;15372:67;:::i;:::-;15365:74;;15448:93;15537:3;15448:93;:::i;:::-;15566:2;15561:3;15557:12;15550:19;;15209:366;;;:::o;15581:419::-;15747:4;15785:2;15774:9;15770:18;15762:26;;15834:9;15828:4;15824:20;15820:1;15809:9;15805:17;15798:47;15862:131;15988:4;15862:131;:::i;:::-;15854:139;;15581:419;;;:::o;16006:224::-;16146:34;16142:1;16134:6;16130:14;16123:58;16215:7;16210:2;16202:6;16198:15;16191:32;16006:224;:::o;16236:366::-;16378:3;16399:67;16463:2;16458:3;16399:67;:::i;:::-;16392:74;;16475:93;16564:3;16475:93;:::i;:::-;16593:2;16588:3;16584:12;16577:19;;16236:366;;;:::o;16608:419::-;16774:4;16812:2;16801:9;16797:18;16789:26;;16861:9;16855:4;16851:20;16847:1;16836:9;16832:17;16825:47;16889:131;17015:4;16889:131;:::i;:::-;16881:139;;16608:419;;;:::o;17033:225::-;17173:34;17169:1;17161:6;17157:14;17150:58;17242:8;17237:2;17229:6;17225:15;17218:33;17033:225;:::o;17264:366::-;17406:3;17427:67;17491:2;17486:3;17427:67;:::i;:::-;17420:74;;17503:93;17592:3;17503:93;:::i;:::-;17621:2;17616:3;17612:12;17605:19;;17264:366;;;:::o;17636:419::-;17802:4;17840:2;17829:9;17825:18;17817:26;;17889:9;17883:4;17879:20;17875:1;17864:9;17860:17;17853:47;17917:131;18043:4;17917:131;:::i;:::-;17909:139;;17636:419;;;:::o;18061:182::-;18201:34;18197:1;18189:6;18185:14;18178:58;18061:182;:::o;18249:366::-;18391:3;18412:67;18476:2;18471:3;18412:67;:::i;:::-;18405:74;;18488:93;18577:3;18488:93;:::i;:::-;18606:2;18601:3;18597:12;18590:19;;18249:366;;;:::o;18621:419::-;18787:4;18825:2;18814:9;18810:18;18802:26;;18874:9;18868:4;18864:20;18860:1;18849:9;18845:17;18838:47;18902:131;19028:4;18902:131;:::i;:::-;18894:139;;18621:419;;;:::o;19046:181::-;19186:33;19182:1;19174:6;19170:14;19163:57;19046:181;:::o;19233:366::-;19375:3;19396:67;19460:2;19455:3;19396:67;:::i;:::-;19389:74;;19472:93;19561:3;19472:93;:::i;:::-;19590:2;19585:3;19581:12;19574:19;;19233:366;;;:::o;19605:419::-;19771:4;19809:2;19798:9;19794:18;19786:26;;19858:9;19852:4;19848:20;19844:1;19833:9;19829:17;19822:47;19886:131;20012:4;19886:131;:::i;:::-;19878:139;;19605:419;;;:::o;20030:410::-;20070:7;20093:20;20111:1;20093:20;:::i;:::-;20088:25;;20127:20;20145:1;20127:20;:::i;:::-;20122:25;;20182:1;20179;20175:9;20204:30;20222:11;20204:30;:::i;:::-;20193:41;;20383:1;20374:7;20370:15;20367:1;20364:22;20344:1;20337:9;20317:83;20294:139;;20413:18;;:::i;:::-;20294:139;20078:362;20030:410;;;;:::o;20446:180::-;20494:77;20491:1;20484:88;20591:4;20588:1;20581:15;20615:4;20612:1;20605:15;20632:185;20672:1;20689:20;20707:1;20689:20;:::i;:::-;20684:25;;20723:20;20741:1;20723:20;:::i;:::-;20718:25;;20762:1;20752:35;;20767:18;;:::i;:::-;20752:35;20809:1;20806;20802:9;20797:14;;20632:185;;;;:::o;20823:220::-;20963:34;20959:1;20951:6;20947:14;20940:58;21032:3;21027:2;21019:6;21015:15;21008:28;20823:220;:::o;21049:366::-;21191:3;21212:67;21276:2;21271:3;21212:67;:::i;:::-;21205:74;;21288:93;21377:3;21288:93;:::i;:::-;21406:2;21401:3;21397:12;21390:19;;21049:366;;;:::o;21421:419::-;21587:4;21625:2;21614:9;21610:18;21602:26;;21674:9;21668:4;21664:20;21660:1;21649:9;21645:17;21638:47;21702:131;21828:4;21702:131;:::i;:::-;21694:139;;21421:419;;;:::o;21846:137::-;21900:5;21931:6;21925:13;21916:22;;21947:30;21971:5;21947:30;:::i;:::-;21846:137;;;;:::o;21989:345::-;22056:6;22105:2;22093:9;22084:7;22080:23;22076:32;22073:119;;;22111:79;;:::i;:::-;22073:119;22231:1;22256:61;22309:7;22300:6;22289:9;22285:22;22256:61;:::i;:::-;22246:71;;22202:125;21989:345;;;;:::o;22340:442::-;22489:4;22527:2;22516:9;22512:18;22504:26;;22540:71;22608:1;22597:9;22593:17;22584:6;22540:71;:::i;:::-;22621:72;22689:2;22678:9;22674:18;22665:6;22621:72;:::i;:::-;22703;22771:2;22760:9;22756:18;22747:6;22703:72;:::i;:::-;22340:442;;;;;;:::o;22788:191::-;22828:3;22847:20;22865:1;22847:20;:::i;:::-;22842:25;;22881:20;22899:1;22881:20;:::i;:::-;22876:25;;22924:1;22921;22917:9;22910:16;;22945:3;22942:1;22939:10;22936:36;;;22952:18;;:::i;:::-;22936:36;22788:191;;;;:::o;22985:177::-;23125:29;23121:1;23113:6;23109:14;23102:53;22985:177;:::o;23168:366::-;23310:3;23331:67;23395:2;23390:3;23331:67;:::i;:::-;23324:74;;23407:93;23496:3;23407:93;:::i;:::-;23525:2;23520:3;23516:12;23509:19;;23168:366;;;:::o;23540:419::-;23706:4;23744:2;23733:9;23729:18;23721:26;;23793:9;23787:4;23783:20;23779:1;23768:9;23764:17;23757:47;23821:131;23947:4;23821:131;:::i;:::-;23813:139;;23540:419;;;:::o;23965:99::-;24017:6;24051:5;24045:12;24035:22;;23965:99;;;:::o;24070:246::-;24151:1;24161:113;24175:6;24172:1;24169:13;24161:113;;;24260:1;24255:3;24251:11;24245:18;24241:1;24236:3;24232:11;24225:39;24197:2;24194:1;24190:10;24185:15;;24161:113;;;24308:1;24299:6;24294:3;24290:16;24283:27;24132:184;24070:246;;;:::o;24322:102::-;24363:6;24414:2;24410:7;24405:2;24398:5;24394:14;24390:28;24380:38;;24322:102;;;:::o;24430:377::-;24518:3;24546:39;24579:5;24546:39;:::i;:::-;24601:71;24665:6;24660:3;24601:71;:::i;:::-;24594:78;;24681:65;24739:6;24734:3;24727:4;24720:5;24716:16;24681:65;:::i;:::-;24771:29;24793:6;24771:29;:::i;:::-;24766:3;24762:39;24755:46;;24522:285;24430:377;;;;:::o;24813:313::-;24926:4;24964:2;24953:9;24949:18;24941:26;;25013:9;25007:4;25003:20;24999:1;24988:9;24984:17;24977:47;25041:78;25114:4;25105:6;25041:78;:::i;:::-;25033:86;;24813:313;;;;:::o;25132:194::-;25172:4;25192:20;25210:1;25192:20;:::i;:::-;25187:25;;25226:20;25244:1;25226:20;:::i;:::-;25221:25;;25270:1;25267;25263:9;25255:17;;25294:1;25288:4;25285:11;25282:37;;;25299:18;;:::i;:::-;25282:37;25132:194;;;;:::o;25332:229::-;25472:34;25468:1;25460:6;25456:14;25449:58;25541:12;25536:2;25528:6;25524:15;25517:37;25332:229;:::o;25567:366::-;25709:3;25730:67;25794:2;25789:3;25730:67;:::i;:::-;25723:74;;25806:93;25895:3;25806:93;:::i;:::-;25924:2;25919:3;25915:12;25908:19;;25567:366;;;:::o;25939:419::-;26105:4;26143:2;26132:9;26128:18;26120:26;;26192:9;26186:4;26182:20;26178:1;26167:9;26163:17;26156:47;26220:131;26346:4;26220:131;:::i;:::-;26212:139;;25939:419;;;:::o;26364:225::-;26504:34;26500:1;26492:6;26488:14;26481:58;26573:8;26568:2;26560:6;26556:15;26549:33;26364:225;:::o;26595:366::-;26737:3;26758:67;26822:2;26817:3;26758:67;:::i;:::-;26751:74;;26834:93;26923:3;26834:93;:::i;:::-;26952:2;26947:3;26943:12;26936:19;;26595:366;;;:::o;26967:419::-;27133:4;27171:2;27160:9;27156:18;27148:26;;27220:9;27214:4;27210:20;27206:1;27195:9;27191:17;27184:47;27248:131;27374:4;27248:131;:::i;:::-;27240:139;;26967:419;;;:::o;27392:179::-;27532:31;27528:1;27520:6;27516:14;27509:55;27392:179;:::o;27577:366::-;27719:3;27740:67;27804:2;27799:3;27740:67;:::i;:::-;27733:74;;27816:93;27905:3;27816:93;:::i;:::-;27934:2;27929:3;27925:12;27918:19;;27577:366;;;:::o;27949:419::-;28115:4;28153:2;28142:9;28138:18;28130:26;;28202:9;28196:4;28192:20;28188:1;28177:9;28173:17;28166:47;28230:131;28356:4;28230:131;:::i;:::-;28222:139;;27949:419;;;:::o;28374:98::-;28425:6;28459:5;28453:12;28443:22;;28374:98;;;:::o;28478:147::-;28579:11;28616:3;28601:18;;28478:147;;;;:::o;28631:386::-;28735:3;28763:38;28795:5;28763:38;:::i;:::-;28817:88;28898:6;28893:3;28817:88;:::i;:::-;28810:95;;28914:65;28972:6;28967:3;28960:4;28953:5;28949:16;28914:65;:::i;:::-;29004:6;28999:3;28995:16;28988:23;;28739:278;28631:386;;;;:::o;29023:271::-;29153:3;29175:93;29264:3;29255:6;29175:93;:::i;:::-;29168:100;;29285:3;29278:10;;29023:271;;;;:::o
Swarm Source
ipfs://eeed59c0074c3f9810136f3790cb528452cb00525710d4d0f8e4c8f6327e0f47
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.