ERC-20
Overview
Max Total Supply
500,000,000,000 HOOTY
Holders
2,655
Total Transfers
-
Market
Price
$0.00 @ 0.000000 ETH
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
HOOTY
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at basescan.org on 2024-08-25 */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; /** * @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. * * The initial owner is set to the address provided by the deployer. 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; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @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 { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @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 { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @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 value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` 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 value) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.20; /** * @dev Interface for the optional metadata functions from the ERC20 standard. */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/interfaces/draft-IERC6093.sol // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol) pragma solidity ^0.8.20; /** * @dev Standard ERC20 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens. */ interface IERC20Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC20InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC20InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers. * @param spender Address that may be allowed to operate on tokens without being their owner. * @param allowance Amount of tokens a `spender` is allowed to operate with. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC20InvalidApprover(address approver); /** * @dev Indicates a failure with the `spender` to be approved. Used in approvals. * @param spender Address that may be allowed to operate on tokens without being their owner. */ error ERC20InvalidSpender(address spender); } /** * @dev Standard ERC721 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens. */ interface IERC721Errors { /** * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20. * Used in balance queries. * @param owner Address of the current owner of a token. */ error ERC721InvalidOwner(address owner); /** * @dev Indicates a `tokenId` whose `owner` is the zero address. * @param tokenId Identifier number of a token. */ error ERC721NonexistentToken(uint256 tokenId); /** * @dev Indicates an error related to the ownership over a particular token. Used in transfers. * @param sender Address whose tokens are being transferred. * @param tokenId Identifier number of a token. * @param owner Address of the current owner of a token. */ error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC721InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC721InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param tokenId Identifier number of a token. */ error ERC721InsufficientApproval(address operator, uint256 tokenId); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC721InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC721InvalidOperator(address operator); } /** * @dev Standard ERC1155 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens. */ interface IERC1155Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. * @param tokenId Identifier number of a token. */ error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC1155InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC1155InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param owner Address of the current owner of a token. */ error ERC1155MissingApprovalForAll(address operator, address owner); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC1155InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC1155InvalidOperator(address operator); /** * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. * Used in batch transfers. * @param idsLength Length of the array of token identifiers * @param valuesLength Length of the array of token amounts */ error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.20; /** * @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}. * * 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. */ abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors { mapping(address account => uint256) private _balances; mapping(address account => mapping(address spender => 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 returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual 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 returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual 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 `value`. */ function transfer(address to, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _transfer(owner, to, value); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `value` 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 value) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, value); 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 `value`. * - the caller must have allowance for ``from``'s tokens of at least * `value`. */ function transferFrom(address from, address to, uint256 value) public virtual returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, value); _transfer(from, to, value); return true; } /** * @dev Moves a `value` 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. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _transfer(address from, address to, uint256 value) internal { if (from == address(0)) { revert ERC20InvalidSender(address(0)); } if (to == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(from, to, value); } /** * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from` * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding * this function. * * Emits a {Transfer} event. */ function _update(address from, address to, uint256 value) internal virtual { if (from == address(0)) { // Overflow check required: The rest of the code assumes that totalSupply never overflows _totalSupply += value; } else { uint256 fromBalance = _balances[from]; if (fromBalance < value) { revert ERC20InsufficientBalance(from, fromBalance, value); } unchecked { // Overflow not possible: value <= fromBalance <= totalSupply. _balances[from] = fromBalance - value; } } if (to == address(0)) { unchecked { // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply. _totalSupply -= value; } } else { unchecked { // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256. _balances[to] += value; } } emit Transfer(from, to, value); } /** * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0). * Relies on the `_update` mechanism * * Emits a {Transfer} event with `from` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _mint(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(address(0), account, value); } /** * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply. * Relies on the `_update` mechanism. * * Emits a {Transfer} event with `to` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead */ function _burn(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidSender(address(0)); } _update(account, address(0), value); } /** * @dev Sets `value` 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. * * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument. */ function _approve(address owner, address spender, uint256 value) internal { _approve(owner, spender, value, true); } /** * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event. * * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any * `Approval` event during `transferFrom` operations. * * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to * true using the following override: * ``` * function _approve(address owner, address spender, uint256 value, bool) internal virtual override { * super._approve(owner, spender, value, true); * } * ``` * * Requirements are the same as {_approve}. */ function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual { if (owner == address(0)) { revert ERC20InvalidApprover(address(0)); } if (spender == address(0)) { revert ERC20InvalidSpender(address(0)); } _allowances[owner][spender] = value; if (emitEvent) { emit Approval(owner, spender, value); } } /** * @dev Updates `owner` s allowance for `spender` based on spent `value`. * * Does not update the allowance value in case of infinite allowance. * Revert if not enough allowance is available. * * Does not emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 value) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { if (currentAllowance < value) { revert ERC20InsufficientAllowance(spender, currentAllowance, value); } unchecked { _approve(owner, spender, currentAllowance - value, false); } } } } // File: libraries/ERC20Base.sol pragma solidity ^0.8.20; abstract contract ERC20Base is ERC20 { uint8 private immutable _decimals; constructor(string memory name_, string memory symbol_, uint8 decimals_) ERC20(name_, symbol_) { _decimals = decimals_; } /** * @dev Returns the number of decimals of the token */ function decimals() public view override returns (uint8) { return _decimals; } } // File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol 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; } // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol 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); } // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol 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; } // File: libraries/TaxDistributor.sol pragma solidity ^0.8.20; abstract contract TaxDistributor is ERC20Base { address public _devWallet; constructor(address devWallet) { _devWallet = devWallet; } function _changeDevWallet(address account) internal { _devWallet = account; } function _distributeFees(uint256 amount) internal returns (bool) { if (amount == 0) return false; //payable(_devWallet).transfer(amount); (bool success, ) = payable(_devWallet).call{value: amount}(""); require(success, "Transfer to dev wallet failed"); return true; } function changeDevWallet(address account) external virtual; function distributeFees(uint256 amount) external virtual; } // File: libraries/TaxableToken.sol pragma solidity ^0.8.20; /* * TaxableToken: Add a tax on buy, sell or transfer */ abstract contract TaxableToken is ERC20Base, TaxDistributor { address public constant BURN_ADDRESS = address(0x000000000000000000000000000000000000dEaD); uint16 public constant MAX_FEE = 25; // max 25% fees uint16 public constant FEE_PRECISION = 100; //tax fees uint16 public buyFees; // fees applied during buys, from 0 to 2000 (ie, 100 = 1%) uint16 public sellFees; // fees applied during sells, from 0 to 2000 (ie, 100 = 1%) // swap config IUniswapV2Router02 public swapRouter; address public swapPair; address public liquidityOwner; // fees bool private _processingFees; bool public autoProcessFees; uint256 public numTokensToSwap; // amount of tokens to collect before processing fees (default to 0.05% of supply) mapping(address => bool) private _excludedFromFees; mapping(address => bool) private _lpPools; event SwapRouterUpdated(address indexed router, address indexed pair); event ExcludedFromFees(address indexed account, bool excluded); event SetLpPool(address indexed pairAddress, bool isLp); modifier lockTheSwap() { _processingFees = true; _; _processingFees = false; } constructor( bool autoProcessFees_, uint256 numTokensToSwap_, address swapRouter_, uint16 buyFees_, uint16 sellFees_ ) { numTokensToSwap = numTokensToSwap_; autoProcessFees = autoProcessFees_; liquidityOwner = _msgSender(); // Create a uniswap pair for this new token swapRouter = IUniswapV2Router02(swapRouter_); swapPair = _pairFor(swapRouter.factory(), address(this), swapRouter.WETH()); _lpPools[swapPair] = true; // configure addresses excluded from fee _setIsExcludedFromFees(address(0), true); _setIsExcludedFromFees(BURN_ADDRESS, true); _setIsExcludedFromFees(address(this), true); _setIsExcludedFromFees(_msgSender(), true); _setIsExcludedFromFees(_devWallet, true); // configure fees buyFees = buyFees_; sellFees = sellFees_; } // receive ETH when swaping receive() external payable {} function isExcludedFromFees(address account) public view returns (bool) { return _excludedFromFees[account]; } function _setIsExcludedFromFees(address account, bool excluded) internal { require(_excludedFromFees[account] != excluded, "Already set"); _excludedFromFees[account] = excluded; emit ExcludedFromFees(account, excluded); } function _setIsLpPool(address pairAddress, bool isLp) internal { require(_lpPools[pairAddress] != isLp, "Already set"); _lpPools[pairAddress] = isLp; emit SetLpPool(pairAddress, isLp); } function isLpPool(address pairAddress) public view returns (bool) { return _lpPools[pairAddress]; } function _setSwapRouter(address _newRouter) internal { require(_newRouter != address(0), "Invalid router"); swapRouter = IUniswapV2Router02(_newRouter); IUniswapV2Factory factory = IUniswapV2Factory(swapRouter.factory()); require(address(factory) != address(0), "Invalid factory"); address weth = swapRouter.WETH(); swapPair = factory.getPair(address(this), weth); if (swapPair == address(0)) { swapPair = factory.createPair(address(this), weth); } require(swapPair != address(0), "Invalid pair address."); emit SwapRouterUpdated(address(swapRouter), swapPair); } function _setBuyFees(uint16 buyFees_) internal { require(buyFees_ <= MAX_FEE, "Invalid buy fee! It must be lower than MAX FEE!"); buyFees = buyFees_; } function _setSellFees(uint16 sellFees_) internal { require(sellFees_ <= MAX_FEE, "Invalid sell fee! It must be lower than MAX FEE!"); sellFees = sellFees_; } function _processFees(uint256 tokenAmount, uint256 minAmountOut) internal lockTheSwap { uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance >= tokenAmount) { uint256 collectorsAmount = tokenAmount; uint256 ethBeforeSwap = address(this).balance; // swap tokens if (collectorsAmount > 0) { if (balanceOf(swapPair) == 0) { // do not swap before the pair has liquidity return; } _swapTokensForEth(collectorsAmount, minAmountOut); } uint256 sendEthAmount = address(this).balance - ethBeforeSwap; // send ETH to fee collectors if(sendEthAmount > 0){ _distributeFees(sendEthAmount); } } } /// @dev Swap tokens for eth function _swapTokensForEth(uint256 tokenAmount, uint256 minAmountOut) private { // generate the swap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = swapRouter.WETH(); _approve(address(this), address(swapRouter), tokenAmount); // make the swap swapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, minAmountOut, path, address(this), block.timestamp ); } // calculates the CREATE2 address for a pair without making any external calls function _pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) { (address token0, address token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); pair = address( uint160( uint( keccak256( abi.encodePacked( hex"ff", factory, keccak256(abi.encodePacked(token0, token1)), hex"96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f" // init code hash ) ) ) ) ); } function _update(address from, address to, uint256 amount) internal virtual override { require(amount > 0, "Transfer <= 0"); uint256 taxFee = 0; bool processFee = !_processingFees && autoProcessFees; bool fromLP = isLpPool(from); bool toLP = isLpPool(to); if (!_processingFees) { bool fromExcluded = isExcludedFromFees(from); bool toExcluded = isExcludedFromFees(to); if (fromLP && !toLP && !toExcluded && to != address(swapRouter)) { // buy fee taxFee = buyFees; } else if (toLP && !fromExcluded && !toExcluded) { // sell fee taxFee = sellFees; } } // process fees if (processFee && taxFee > 0 && toLP) { uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance >= numTokensToSwap) { _processFees(contractTokenBalance, 0); } } if (taxFee > 0) { uint256 taxAmount = (amount * taxFee) / FEE_PRECISION; uint256 sendAmount = amount - taxAmount; if (taxAmount > 0) { super._update(from, address(this), taxAmount); } if (sendAmount > 0) { super._update(from, to, sendAmount); } } else { super._update(from, to, amount); } } function setAutoprocessFees(bool autoProcess) external virtual; function setIsLpPool(address pairAddress, bool isLp) external virtual; function setIsExcludedFromFees(address account, bool excluded) external virtual; function processFees(uint256 amount, uint256 minAmountOut) external virtual; function setBuyFees(uint16 buyFees) external virtual; function setSellFees(uint16 sellFees) external virtual; function setLiquidityOwner(address newOwner) external virtual; function setNumTokensToSwap(uint256 amount) external virtual; function setSwapRouter(address newRouter) external virtual; } // File: TaxToken.sol pragma solidity ^0.8.20; /** * @dev ERC20Token implementation with Tax capabilities */ contract HOOTY is ERC20Base, Ownable, TaxableToken { constructor( uint256 initialSupply_, address devWallet_, address swapRouter_, uint16 buyFees_, uint16 sellFees_ ) payable ERC20Base("Based Hooty", "HOOTY", 18) Ownable(_msgSender()) TaxDistributor(devWallet_) TaxableToken(true, (initialSupply_ * 10 ** decimals() * 5) / 10000, swapRouter_, buyFees_, sellFees_) { require(initialSupply_ > 0, "Initial supply cannot be zero"); //payable(devWallet_).transfer(msg.value); (bool success, ) = payable(_devWallet).call{value: msg.value}(""); require(success, "FAILED!"); _mint(_msgSender(), initialSupply_ * 10 ** decimals()); } function _update(address from, address to, uint256 amount) internal virtual override(ERC20, TaxableToken) { super._update(from, to, amount); } /** * @dev Enable/Disable autoProcessFees on transfer * only callable by `owner()` */ function setAutoprocessFees(bool autoProcess) external override onlyOwner { require(autoProcessFees != autoProcess, "Already set"); autoProcessFees = autoProcess; } /** * @dev add/remove a LP * only callable by `owner()` */ function setIsLpPool(address pairAddress, bool isLp) external override onlyOwner { _setIsLpPool(pairAddress, isLp); } /** * @dev add/remove an address to the tax exclusion list * only callable by `owner()` */ function setIsExcludedFromFees(address account, bool excluded) external override onlyOwner { _setIsExcludedFromFees(account, excluded); } /** * @dev manually distribute fees to collectors * only callable by `owner()` */ function distributeFees(uint256 amount) external override onlyOwner { require(address(this).balance >= amount, "Not enough balance"); _distributeFees(amount); } /** * @dev change dev wallet * only callable by `owner()` */ function changeDevWallet(address account) external override onlyOwner { _changeDevWallet(account); } /** * @dev process fees * only callable by `owner()` */ function processFees(uint256 amount, uint256 minAmountOut) external override onlyOwner { require(amount <= balanceOf(address(this)), "Amount too high"); _processFees(amount, minAmountOut); } /** * @dev set the liquidity owner * only callable by `owner()` */ function setLiquidityOwner(address newOwner) external override onlyOwner { liquidityOwner = newOwner; } /** * @dev set the number of tokens to swap * only callable by `owner()` */ function setNumTokensToSwap(uint256 amount) external override onlyOwner { numTokensToSwap = amount; } /** * @dev update the buy fees * only callable by `owner()` */ function setBuyFees(uint16 buyFees) external override onlyOwner { _setBuyFees(buyFees); } /** * @dev update the sell fees * only callable by `owner()` */ function setSellFees(uint16 sellFees) external override onlyOwner { _setSellFees(sellFees); } function sendTaxToMultisig(uint256 amount) external onlyOwner { require(balanceOf(address(this)) >= amount, "Insufficient balance"); _transfer(address(this), 0xe130e281b6996ee74F08650615846E71EEEB209F, amount); } /** * @dev update the swap router * only callable by `owner()` */ function setSwapRouter(address newRouter) external override onlyOwner { _setSwapRouter(newRouter); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"initialSupply_","type":"uint256"},{"internalType":"address","name":"devWallet_","type":"address"},{"internalType":"address","name":"swapRouter_","type":"address"},{"internalType":"uint16","name":"buyFees_","type":"uint16"},{"internalType":"uint16","name":"sellFees_","type":"uint16"}],"stateMutability":"payable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"ExcludedFromFees","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":"pairAddress","type":"address"},{"indexed":false,"internalType":"bool","name":"isLp","type":"bool"}],"name":"SetLpPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"router","type":"address"},{"indexed":true,"internalType":"address","name":"pair","type":"address"}],"name":"SwapRouterUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BURN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEE_PRECISION","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_FEE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoProcessFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFees","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"changeDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"distributeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pairAddress","type":"address"}],"name":"isLpPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"processFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTaxToMultisig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"autoProcess","type":"bool"}],"name":"setAutoprocessFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFees","type":"uint16"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setIsExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pairAddress","type":"address"},{"internalType":"bool","name":"isLp","type":"bool"}],"name":"setIsLpPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setLiquidityOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setNumTokensToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"sellFees","type":"uint16"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setSwapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526040516200594c3803806200594c833981810160405281019062000029919062001731565b6001612710600562000040620006e060201b60201c565b600a6200004e919062001949565b886200005b91906200199a565b6200006791906200199a565b62000073919062001a14565b8484848862000087620006ea60201b60201c565b6040518060400160405280600b81526020017f426173656420486f6f74790000000000000000000000000000000000000000008152506040518060400160405280600581526020017f484f4f545900000000000000000000000000000000000000000000000000000081525060128282816003908162000108919062001cbc565b5080600490816200011a919062001cbc565b5050508060ff1660808160ff1681525050505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620001a35760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200019a919062001db4565b60405180910390fd5b620001b481620006f260201b60201c565b5080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505083600a8190555084600960156101000a81548160ff02191690831515021790555062000228620006ea60201b60201c565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003e2600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200031b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000341919062001dd1565b30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d6919062001dd1565b620007b860201b60201c565b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620004b0600060016200086360201b60201c565b620004c561dead60016200086360201b60201c565b620004d83060016200086360201b60201c565b620004fa620004ec620006ea60201b60201c565b60016200086360201b60201c565b6200052f600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200086360201b60201c565b81600660146101000a81548161ffff021916908361ffff16021790555080600660166101000a81548161ffff021916908361ffff160217905550505050505060008511620005b4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005ab9062001e64565b60405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051620005fe9062001ebb565b60006040518083038185875af1925050503d80600081146200063d576040519150601f19603f3d011682016040523d82523d6000602084013e62000642565b606091505b505090508062000689576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006809062001f22565b60405180910390fd5b620006d46200069d620006ea60201b60201c565b620006ad620006e060201b60201c565b600a620006bb919062001949565b88620006c891906200199a565b620009a360201b60201c565b505050505050620024ba565b6000608051905090565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060008373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1610620007f9578385620007fc565b84845b915091508582826040516020016200081692919062001f94565b604051602081830303815290604052805190602001206040516020016200083f9291906200209e565b6040516020818303038152906040528051906020012060001c925050509392505050565b801515600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503620008f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ef9062002138565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb8260405162000997919062002177565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a185760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040162000a0f919062001db4565b60405180910390fd5b62000a2c6000838362000a3060201b60201c565b5050565b62000a4383838362000a4860201b60201c565b505050565b6000811162000a8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a8590620021e4565b60405180910390fd5b600080600960149054906101000a900460ff1615801562000abb5750600960159054906101000a900460ff165b9050600062000ad08662000ce860201b60201c565b9050600062000ae58662000ce860201b60201c565b9050600960149054906101000a900460ff1662000bf457600062000b0f8862000d3e60201b60201c565b9050600062000b248862000d3e60201b60201c565b905083801562000b32575082155b801562000b3d575080155b801562000b985750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b1562000bbb57600660149054906101000a900461ffff1661ffff16955062000bf1565b82801562000bc7575081155b801562000bd2575080155b1562000bf057600660169054906101000a900461ffff1661ffff1695505b5b50505b82801562000c025750600084115b801562000c0c5750805b1562000c4757600062000c253062000d9460201b60201c565b9050600a54811062000c455762000c4481600062000ddc60201b60201c565b5b505b600084111562000ccb576000606461ffff16858762000c6791906200199a565b62000c73919062001a14565b90506000818762000c85919062002206565b9050600082111562000ca55762000ca489308462000ed360201b60201c565b5b600081111562000cc35762000cc289898362000ed360201b60201c565b5b505062000cdf565b62000cde87878762000ed360201b60201c565b5b50505050505050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6001600960146101000a81548160ff021916908315150217905550600062000e0a3062000d9460201b60201c565b905082811062000eb25760008390506000479050600082111562000e7f57600062000e5d600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000d9460201b60201c565b0362000e6c5750505062000eb4565b62000e7e82856200110360201b60201c565b5b6000814762000e8f919062002206565b9050600081111562000eae5762000eac816200135f60201b60201c565b505b5050505b505b6000600960146101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000f2957806002600082825462000f1c919062002241565b9250508190555062000fff565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101562000fb8578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040162000faf939291906200228d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200104a578060026000828254039250508190555062001097565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620010f69190620022ca565b60405180910390a3505050565b6000600267ffffffffffffffff81111562001123576200112262001a57565b5b604051908082528060200260200182016040528015620011525781602001602082028036833780820191505090505b50905030816000815181106200116d576200116c620022e7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001215573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200123b919062001dd1565b81600181518110620012525762001251620022e7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050620012c130600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856200145360201b60201c565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac94784848430426040518663ffffffff1660e01b815260040162001326959493929190620023e4565b600060405180830381600087803b1580156200134157600080fd5b505af115801562001356573d6000803e3d6000fd5b50505050505050565b60008082036200137357600090506200144e565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051620013bd9062001ebb565b60006040518083038185875af1925050503d8060008114620013fc576040519150601f19603f3d011682016040523d82523d6000602084013e62001401565b606091505b505090508062001448576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200143f9062002498565b60405180910390fd5b60019150505b919050565b6200146883838360016200146d60201b60201c565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603620014e25760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401620014d9919062001db4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620015575760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016200154e919062001db4565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801562001647578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516200163e9190620022ca565b60405180910390a35b50505050565b600080fd5b6000819050919050565b620016678162001652565b81146200167357600080fd5b50565b60008151905062001687816200165c565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620016ba826200168d565b9050919050565b620016cc81620016ad565b8114620016d857600080fd5b50565b600081519050620016ec81620016c1565b92915050565b600061ffff82169050919050565b6200170b81620016f2565b81146200171757600080fd5b50565b6000815190506200172b8162001700565b92915050565b600080600080600060a0868803121562001750576200174f6200164d565b5b6000620017608882890162001676565b95505060206200177388828901620016db565b94505060406200178688828901620016db565b935050606062001799888289016200171a565b9250506080620017ac888289016200171a565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562001847578086048111156200181f576200181e620017b9565b5b60018516156200182f5780820291505b80810290506200183f85620017e8565b9450620017ff565b94509492505050565b60008262001862576001905062001935565b8162001872576000905062001935565b81600181146200188b57600281146200189657620018cc565b600191505062001935565b60ff841115620018ab57620018aa620017b9565b5b8360020a915084821115620018c557620018c4620017b9565b5b5062001935565b5060208310610133831016604e8410600b8410161715620019065782820a9050838111156200190057620018ff620017b9565b5b62001935565b620019158484846001620017f5565b925090508184048111156200192f576200192e620017b9565b5b81810290505b9392505050565b600060ff82169050919050565b6000620019568262001652565b915062001963836200193c565b9250620019927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001850565b905092915050565b6000620019a78262001652565b9150620019b48362001652565b9250828202620019c48162001652565b91508282048414831517620019de57620019dd620017b9565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062001a218262001652565b915062001a2e8362001652565b92508262001a415762001a40620019e5565b5b828204905092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062001ace57607f821691505b60208210810362001ae45762001ae362001a86565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262001b4e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262001b0f565b62001b5a868362001b0f565b95508019841693508086168417925050509392505050565b6000819050919050565b600062001b9d62001b9762001b918462001652565b62001b72565b62001652565b9050919050565b6000819050919050565b62001bb98362001b7c565b62001bd162001bc88262001ba4565b84845462001b1c565b825550505050565b600090565b62001be862001bd9565b62001bf581848462001bae565b505050565b5b8181101562001c1d5762001c1160008262001bde565b60018101905062001bfb565b5050565b601f82111562001c6c5762001c368162001aea565b62001c418462001aff565b8101602085101562001c51578190505b62001c6962001c608562001aff565b83018262001bfa565b50505b505050565b600082821c905092915050565b600062001c916000198460080262001c71565b1980831691505092915050565b600062001cac838362001c7e565b9150826002028217905092915050565b62001cc78262001a4c565b67ffffffffffffffff81111562001ce35762001ce262001a57565b5b62001cef825462001ab5565b62001cfc82828562001c21565b600060209050601f83116001811462001d34576000841562001d1f578287015190505b62001d2b858262001c9e565b86555062001d9b565b601f19841662001d448662001aea565b60005b8281101562001d6e5784890151825560018201915060208501945060208101905062001d47565b8683101562001d8e578489015162001d8a601f89168262001c7e565b8355505b6001600288020188555050505b505050505050565b62001dae81620016ad565b82525050565b600060208201905062001dcb600083018462001da3565b92915050565b60006020828403121562001dea5762001de96200164d565b5b600062001dfa84828501620016db565b91505092915050565b600082825260208201905092915050565b7f496e697469616c20737570706c792063616e6e6f74206265207a65726f000000600082015250565b600062001e4c601d8362001e03565b915062001e598262001e14565b602082019050919050565b6000602082019050818103600083015262001e7f8162001e3d565b9050919050565b600081905092915050565b50565b600062001ea360008362001e86565b915062001eb08262001e91565b600082019050919050565b600062001ec88262001e94565b9150819050919050565b7f4641494c45442100000000000000000000000000000000000000000000000000600082015250565b600062001f0a60078362001e03565b915062001f178262001ed2565b602082019050919050565b6000602082019050818103600083015262001f3d8162001efb565b9050919050565b60008160601b9050919050565b600062001f5e8262001f44565b9050919050565b600062001f728262001f51565b9050919050565b62001f8e62001f8882620016ad565b62001f65565b82525050565b600062001fa2828562001f79565b60148201915062001fb4828462001f79565b6014820191508190509392505050565b600081905092915050565b7fff00000000000000000000000000000000000000000000000000000000000000600082015250565b60006200200760018362001fc4565b9150620020148262001fcf565b600182019050919050565b6000819050919050565b6000819050919050565b6200204862002042826200201f565b62002029565b82525050565b7f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f600082015250565b60006200208660208362001fc4565b915062002093826200204e565b602082019050919050565b6000620020ab8262001ff8565b9150620020b9828562001f79565b601482019150620020cb828462002033565b602082019150620020dc8262002077565b91508190509392505050565b7f416c726561647920736574000000000000000000000000000000000000000000600082015250565b600062002120600b8362001e03565b91506200212d82620020e8565b602082019050919050565b60006020820190508181036000830152620021538162002111565b9050919050565b60008115159050919050565b62002171816200215a565b82525050565b60006020820190506200218e600083018462002166565b92915050565b7f5472616e73666572203c3d203000000000000000000000000000000000000000600082015250565b6000620021cc600d8362001e03565b9150620021d98262002194565b602082019050919050565b60006020820190508181036000830152620021ff81620021bd565b9050919050565b6000620022138262001652565b9150620022208362001652565b92508282039050818111156200223b576200223a620017b9565b5b92915050565b60006200224e8262001652565b91506200225b8362001652565b9250828201905080821115620022765762002275620017b9565b5b92915050565b620022878162001652565b82525050565b6000606082019050620022a4600083018662001da3565b620022b360208301856200227c565b620022c260408301846200227c565b949350505050565b6000602082019050620022e160008301846200227c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6200234d81620016ad565b82525050565b600062002361838362002342565b60208301905092915050565b6000602082019050919050565b6000620023878262002316565b62002393818562002321565b9350620023a08362002332565b8060005b83811015620023d7578151620023bb888262002353565b9750620023c8836200236d565b925050600181019050620023a4565b5085935050505092915050565b600060a082019050620023fb60008301886200227c565b6200240a60208301876200227c565b81810360408301526200241e81866200237a565b90506200242f606083018562001da3565b6200243e60808301846200227c565b9695505050505050565b7f5472616e7366657220746f206465762077616c6c6574206661696c6564000000600082015250565b600062002480601d8362001e03565b91506200248d8262002448565b602082019050919050565b60006020820190508181036000830152620024b38162002471565b9050919050565b608051613476620024d66000396000610a6801526134766000f3fe60806040526004361061021e5760003560e01c8063715018a611610123578063bc063e1a116100ab578063e4748b9e1161006f578063e4748b9e146107de578063e55096b014610809578063e63a391f14610832578063f2fde38b1461085d578063fccc28131461088657610225565b8063bc063e1a146106f7578063bd8d821114610722578063c31c9c071461074b578063dd62ed3e14610776578063e0f3ccf5146107b357610225565b806395d89b41116100f257806395d89b41146106125780639b61f1d01461063d578063a9059cbb14610668578063ad73fc3e146106a5578063adf18693146106ce57610225565b8063715018a61461057e57806372bc5583146105955780637f5bbb2c146105be5780638da5cb5b146105e757610225565b8063313ce567116101a657806343c348a51161017557806343c348a5146104755780634fbee1931461049e5780636029bf9f146104db5780636f741f2a1461050457806370a082311461054157610225565b8063313ce567146103cd5780633935ebf9146103f85780633b8cea5d14610423578063412736571461044c57610225565b80630f569dad116101ed5780630f569dad146102e657806311a63e171461030f57806318160ddd1461033a57806323b872dd1461036557806326991cc8146103a257610225565b806301a6c43b1461022a57806306fdde0314610255578063095ea7b3146102805780630a4e42ef146102bd57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f6108b1565b60405161024c9190612655565b60405180910390f35b34801561026157600080fd5b5061026a6108b7565b6040516102779190612700565b60405180910390f35b34801561028c57600080fd5b506102a760048036038101906102a291906127b1565b610949565b6040516102b4919061280c565b60405180910390f35b3480156102c957600080fd5b506102e460048036038101906102df9190612827565b61096c565b005b3480156102f257600080fd5b5061030d60048036038101906103089190612867565b6109cd565b005b34801561031b57600080fd5b506103246109df565b60405161033191906128a3565b60405180910390f35b34801561034657600080fd5b5061034f610a05565b60405161035c9190612655565b60405180910390f35b34801561037157600080fd5b5061038c600480360381019061038791906128be565b610a0f565b604051610399919061280c565b60405180910390f35b3480156103ae57600080fd5b506103b7610a3e565b6040516103c491906128a3565b60405180910390f35b3480156103d957600080fd5b506103e2610a64565b6040516103ef919061292d565b60405180910390f35b34801561040457600080fd5b5061040d610a8c565b60405161041a91906128a3565b60405180910390f35b34801561042f57600080fd5b5061044a60048036038101906104459190612867565b610ab2565b005b34801561045857600080fd5b50610473600480360381019061046e9190612948565b610b27565b005b34801561048157600080fd5b5061049c600480360381019061049791906129af565b610b3b565b005b3480156104aa57600080fd5b506104c560048036038101906104c09190612948565b610b4f565b6040516104d2919061280c565b60405180910390f35b3480156104e757600080fd5b5061050260048036038101906104fd9190612867565b610ba5565b005b34801561051057600080fd5b5061052b60048036038101906105269190612948565b610bfd565b604051610538919061280c565b60405180910390f35b34801561054d57600080fd5b5061056860048036038101906105639190612948565b610c53565b6040516105759190612655565b60405180910390f35b34801561058a57600080fd5b50610593610c9b565b005b3480156105a157600080fd5b506105bc60048036038101906105b79190612948565b610caf565b005b3480156105ca57600080fd5b506105e560048036038101906105e09190612a08565b610cfb565b005b3480156105f357600080fd5b506105fc610d75565b60405161060991906128a3565b60405180910390f35b34801561061e57600080fd5b50610627610d9f565b6040516106349190612700565b60405180910390f35b34801561064957600080fd5b50610652610e31565b60405161065f919061280c565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a91906127b1565b610e44565b60405161069c919061280c565b60405180910390f35b3480156106b157600080fd5b506106cc60048036038101906106c791906129af565b610e67565b005b3480156106da57600080fd5b506106f560048036038101906106f09190612a35565b610e7b565b005b34801561070357600080fd5b5061070c610e91565b6040516107199190612a84565b60405180910390f35b34801561072e57600080fd5b5061074960048036038101906107449190612948565b610e96565b005b34801561075757600080fd5b50610760610eaa565b60405161076d9190612afe565b60405180910390f35b34801561078257600080fd5b5061079d60048036038101906107989190612b19565b610ed0565b6040516107aa9190612655565b60405180910390f35b3480156107bf57600080fd5b506107c8610f57565b6040516107d59190612a84565b60405180910390f35b3480156107ea57600080fd5b506107f3610f6b565b6040516108009190612a84565b60405180910390f35b34801561081557600080fd5b50610830600480360381019061082b9190612a35565b610f7f565b005b34801561083e57600080fd5b50610847610f95565b6040516108549190612a84565b60405180910390f35b34801561086957600080fd5b50610884600480360381019061087f9190612948565b610f9a565b005b34801561089257600080fd5b5061089b611020565b6040516108a891906128a3565b60405180910390f35b600a5481565b6060600380546108c690612b88565b80601f01602080910402602001604051908101604052809291908181526020018280546108f290612b88565b801561093f5780601f106109145761010080835404028352916020019161093f565b820191906000526020600020905b81548152906001019060200180831161092257829003601f168201915b5050505050905090565b600080610954611026565b905061096181858561102e565b600191505092915050565b610974611040565b61097d30610c53565b8211156109bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b690612c05565b60405180910390fd5b6109c982826110c7565b5050565b6109d5611040565b80600a8190555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600080610a1a611026565b9050610a27858285611197565b610a3285858561122b565b60019150509392505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610aba611040565b80610ac430610c53565b1015610b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afc90612c71565b60405180910390fd5b610b243073e130e281b6996ee74f08650615846e71eeeb209f8361122b565b50565b610b2f611040565b610b388161131f565b50565b610b43611040565b610b4c8161186d565b50565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610bad611040565b80471015610bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be790612cdd565b60405180910390fd5b610bf9816118d9565b5050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ca3611040565b610cad60006119c4565b565b610cb7611040565b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610d03611040565b801515600960159054906101000a900460ff16151503610d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4f90612d49565b60405180910390fd5b80600960156101000a81548160ff02191690831515021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610dae90612b88565b80601f0160208091040260200160405190810160405280929190818152602001828054610dda90612b88565b8015610e275780601f10610dfc57610100808354040283529160200191610e27565b820191906000526020600020905b815481529060010190602001808311610e0a57829003601f168201915b5050505050905090565b600960159054906101000a900460ff1681565b600080610e4f611026565b9050610e5c81858561122b565b600191505092915050565b610e6f611040565b610e7881611a8a565b50565b610e83611040565b610e8d8282611af6565b5050565b601981565b610e9e611040565b610ea781611c31565b50565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600660169054906101000a900461ffff1681565b600660149054906101000a900461ffff1681565b610f87611040565b610f918282611c75565b5050565b606481565b610fa2611040565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110145760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161100b91906128a3565b60405180910390fd5b61101d816119c4565b50565b61dead81565b600033905090565b61103b8383836001611db0565b505050565b611048611026565b73ffffffffffffffffffffffffffffffffffffffff16611066610d75565b73ffffffffffffffffffffffffffffffffffffffff16146110c557611089611026565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016110bc91906128a3565b60405180910390fd5b565b6001600960146101000a81548160ff02191690831515021790555060006110ed30610c53565b90508281106111765760008390506000479050600082111561114e576000611136600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610c53565b0361114357505050611178565b61114d8285611f87565b5b6000814761115c9190612d98565b9050600081111561117257611170816118d9565b505b5050505b505b6000600960146101000a81548160ff0219169083151502179055505050565b60006111a38484610ed0565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112255781811015611215578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161120c93929190612dcc565b60405180910390fd5b61122484848484036000611db0565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361129d5760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161129491906128a3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361130f5760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161130691906128a3565b60405180910390fd5b61131a8383836121ca565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361138e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138590612e4f565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561143e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114629190612e84565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ca90612efd565b60405180910390fd5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611542573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115669190612e84565b90508173ffffffffffffffffffffffffffffffffffffffff1663e6a4390530836040518363ffffffff1660e01b81526004016115a3929190612f1d565b602060405180830381865afa1580156115c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e49190612e84565b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611739578173ffffffffffffffffffffffffffffffffffffffff1663c9c6539630836040518363ffffffff1660e01b81526004016116b5929190612f1d565b6020604051808303816000875af11580156116d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f89190612e84565b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036117ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c190612f92565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fca394f95d8dbf1e8b2e76b9a8da90cacce1da85181a65508dab13212dc1df53b60405160405180910390a3505050565b601961ffff168161ffff1611156118b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b090613024565b60405180910390fd5b80600660146101000a81548161ffff021916908361ffff16021790555050565b60008082036118eb57600090506119bf565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161193390613075565b60006040518083038185875af1925050503d8060008114611970576040519150601f19603f3d011682016040523d82523d6000602084013e611975565b606091505b50509050806119b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b0906130d6565b60405180910390fd5b60019150505b919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b601961ffff168161ffff161115611ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acd90613168565b60405180910390fd5b80600660166101000a81548161ffff021916908361ffff16021790555050565b801515600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7f90612d49565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb82604051611c25919061280c565b60405180910390a25050565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b801515600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfe90612d49565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f902b2ea0acdec5a260e398590d055fe29bd61ef5dd41e45db54a4cd98d5569e082604051611da4919061280c565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611e225760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611e1991906128a3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e945760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611e8b91906128a3565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015611f81578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611f789190612655565b60405180910390a35b50505050565b6000600267ffffffffffffffff811115611fa457611fa3613188565b5b604051908082528060200260200182016040528015611fd25781602001602082028036833780820191505090505b5090503081600081518110611fea57611fe96131b7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b59190612e84565b816001815181106120c9576120c86131b7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061213030600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168561102e565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac94784848430426040518663ffffffff1660e01b81526004016121939594939291906132a4565b600060405180830381600087803b1580156121ad57600080fd5b505af11580156121c1573d6000803e3d6000fd5b50505050505050565b6121d58383836121da565b505050565b6000811161221d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122149061334a565b60405180910390fd5b600080600960149054906101000a900460ff161580156122495750600960159054906101000a900460ff165b9050600061225686610bfd565b9050600061226386610bfd565b9050600960149054906101000a900460ff1661235957600061228488610b4f565b9050600061229188610b4f565b905083801561229e575082155b80156122a8575080155b80156123025750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b1561232357600660149054906101000a900461ffff1661ffff169550612356565b82801561232e575081155b8015612338575080155b1561235557600660169054906101000a900461ffff1661ffff1695505b5b50505b8280156123665750600084115b801561236f5750805b1561239857600061237f30610c53565b9050600a548110612396576123958160006110c7565b5b505b6000841115612402576000606461ffff1685876123b5919061336a565b6123bf91906133db565b9050600081876123cf9190612d98565b905060008211156123e6576123e5893084612417565b5b60008111156123fb576123fa898983612417565b5b505061240e565b61240d878787612417565b5b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361246957806002600082825461245d919061340c565b9250508190555061253c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156124f5578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016124ec93929190612dcc565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361258557806002600082825403925050819055506125d2565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161262f9190612655565b60405180910390a3505050565b6000819050919050565b61264f8161263c565b82525050565b600060208201905061266a6000830184612646565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156126aa57808201518184015260208101905061268f565b60008484015250505050565b6000601f19601f8301169050919050565b60006126d282612670565b6126dc818561267b565b93506126ec81856020860161268c565b6126f5816126b6565b840191505092915050565b6000602082019050818103600083015261271a81846126c7565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061275282612727565b9050919050565b61276281612747565b811461276d57600080fd5b50565b60008135905061277f81612759565b92915050565b61278e8161263c565b811461279957600080fd5b50565b6000813590506127ab81612785565b92915050565b600080604083850312156127c8576127c7612722565b5b60006127d685828601612770565b92505060206127e78582860161279c565b9150509250929050565b60008115159050919050565b612806816127f1565b82525050565b600060208201905061282160008301846127fd565b92915050565b6000806040838503121561283e5761283d612722565b5b600061284c8582860161279c565b925050602061285d8582860161279c565b9150509250929050565b60006020828403121561287d5761287c612722565b5b600061288b8482850161279c565b91505092915050565b61289d81612747565b82525050565b60006020820190506128b86000830184612894565b92915050565b6000806000606084860312156128d7576128d6612722565b5b60006128e586828701612770565b93505060206128f686828701612770565b92505060406129078682870161279c565b9150509250925092565b600060ff82169050919050565b61292781612911565b82525050565b6000602082019050612942600083018461291e565b92915050565b60006020828403121561295e5761295d612722565b5b600061296c84828501612770565b91505092915050565b600061ffff82169050919050565b61298c81612975565b811461299757600080fd5b50565b6000813590506129a981612983565b92915050565b6000602082840312156129c5576129c4612722565b5b60006129d38482850161299a565b91505092915050565b6129e5816127f1565b81146129f057600080fd5b50565b600081359050612a02816129dc565b92915050565b600060208284031215612a1e57612a1d612722565b5b6000612a2c848285016129f3565b91505092915050565b60008060408385031215612a4c57612a4b612722565b5b6000612a5a85828601612770565b9250506020612a6b858286016129f3565b9150509250929050565b612a7e81612975565b82525050565b6000602082019050612a996000830184612a75565b92915050565b6000819050919050565b6000612ac4612abf612aba84612727565b612a9f565b612727565b9050919050565b6000612ad682612aa9565b9050919050565b6000612ae882612acb565b9050919050565b612af881612add565b82525050565b6000602082019050612b136000830184612aef565b92915050565b60008060408385031215612b3057612b2f612722565b5b6000612b3e85828601612770565b9250506020612b4f85828601612770565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ba057607f821691505b602082108103612bb357612bb2612b59565b5b50919050565b7f416d6f756e7420746f6f20686967680000000000000000000000000000000000600082015250565b6000612bef600f8361267b565b9150612bfa82612bb9565b602082019050919050565b60006020820190508181036000830152612c1e81612be2565b9050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000612c5b60148361267b565b9150612c6682612c25565b602082019050919050565b60006020820190508181036000830152612c8a81612c4e565b9050919050565b7f4e6f7420656e6f7567682062616c616e63650000000000000000000000000000600082015250565b6000612cc760128361267b565b9150612cd282612c91565b602082019050919050565b60006020820190508181036000830152612cf681612cba565b9050919050565b7f416c726561647920736574000000000000000000000000000000000000000000600082015250565b6000612d33600b8361267b565b9150612d3e82612cfd565b602082019050919050565b60006020820190508181036000830152612d6281612d26565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612da38261263c565b9150612dae8361263c565b9250828203905081811115612dc657612dc5612d69565b5b92915050565b6000606082019050612de16000830186612894565b612dee6020830185612646565b612dfb6040830184612646565b949350505050565b7f496e76616c696420726f75746572000000000000000000000000000000000000600082015250565b6000612e39600e8361267b565b9150612e4482612e03565b602082019050919050565b60006020820190508181036000830152612e6881612e2c565b9050919050565b600081519050612e7e81612759565b92915050565b600060208284031215612e9a57612e99612722565b5b6000612ea884828501612e6f565b91505092915050565b7f496e76616c696420666163746f72790000000000000000000000000000000000600082015250565b6000612ee7600f8361267b565b9150612ef282612eb1565b602082019050919050565b60006020820190508181036000830152612f1681612eda565b9050919050565b6000604082019050612f326000830185612894565b612f3f6020830184612894565b9392505050565b7f496e76616c6964207061697220616464726573732e0000000000000000000000600082015250565b6000612f7c60158361267b565b9150612f8782612f46565b602082019050919050565b60006020820190508181036000830152612fab81612f6f565b9050919050565b7f496e76616c6964206275792066656521204974206d757374206265206c6f776560008201527f72207468616e204d415820464545210000000000000000000000000000000000602082015250565b600061300e602f8361267b565b915061301982612fb2565b604082019050919050565b6000602082019050818103600083015261303d81613001565b9050919050565b600081905092915050565b50565b600061305f600083613044565b915061306a8261304f565b600082019050919050565b600061308082613052565b9150819050919050565b7f5472616e7366657220746f206465762077616c6c6574206661696c6564000000600082015250565b60006130c0601d8361267b565b91506130cb8261308a565b602082019050919050565b600060208201905081810360008301526130ef816130b3565b9050919050565b7f496e76616c69642073656c6c2066656521204974206d757374206265206c6f7760008201527f6572207468616e204d4158204645452100000000000000000000000000000000602082015250565b600061315260308361267b565b915061315d826130f6565b604082019050919050565b6000602082019050818103600083015261318181613145565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61321b81612747565b82525050565b600061322d8383613212565b60208301905092915050565b6000602082019050919050565b6000613251826131e6565b61325b81856131f1565b935061326683613202565b8060005b8381101561329757815161327e8882613221565b975061328983613239565b92505060018101905061326a565b5085935050505092915050565b600060a0820190506132b96000830188612646565b6132c66020830187612646565b81810360408301526132d88186613246565b90506132e76060830185612894565b6132f46080830184612646565b9695505050505050565b7f5472616e73666572203c3d203000000000000000000000000000000000000000600082015250565b6000613334600d8361267b565b915061333f826132fe565b602082019050919050565b6000602082019050818103600083015261336381613327565b9050919050565b60006133758261263c565b91506133808361263c565b925082820261338e8161263c565b915082820484148315176133a5576133a4612d69565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006133e68261263c565b91506133f18361263c565b925082613401576134006133ac565b5b828204905092915050565b60006134178261263c565b91506134228361263c565b925082820190508082111561343a57613439612d69565b5b9291505056fea2646970667358221220dd80bce3916a1afb1757ff0c7994bad8d7748a9870a49f43b95d2cfbc1a1774364736f6c63430008140033000000000000000000000000000000000000000000000000000000746a528800000000000000000000000000e130e281b6996ee74f08650615846e71eeeb209f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad2400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000019
Deployed Bytecode
0x60806040526004361061021e5760003560e01c8063715018a611610123578063bc063e1a116100ab578063e4748b9e1161006f578063e4748b9e146107de578063e55096b014610809578063e63a391f14610832578063f2fde38b1461085d578063fccc28131461088657610225565b8063bc063e1a146106f7578063bd8d821114610722578063c31c9c071461074b578063dd62ed3e14610776578063e0f3ccf5146107b357610225565b806395d89b41116100f257806395d89b41146106125780639b61f1d01461063d578063a9059cbb14610668578063ad73fc3e146106a5578063adf18693146106ce57610225565b8063715018a61461057e57806372bc5583146105955780637f5bbb2c146105be5780638da5cb5b146105e757610225565b8063313ce567116101a657806343c348a51161017557806343c348a5146104755780634fbee1931461049e5780636029bf9f146104db5780636f741f2a1461050457806370a082311461054157610225565b8063313ce567146103cd5780633935ebf9146103f85780633b8cea5d14610423578063412736571461044c57610225565b80630f569dad116101ed5780630f569dad146102e657806311a63e171461030f57806318160ddd1461033a57806323b872dd1461036557806326991cc8146103a257610225565b806301a6c43b1461022a57806306fdde0314610255578063095ea7b3146102805780630a4e42ef146102bd57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f6108b1565b60405161024c9190612655565b60405180910390f35b34801561026157600080fd5b5061026a6108b7565b6040516102779190612700565b60405180910390f35b34801561028c57600080fd5b506102a760048036038101906102a291906127b1565b610949565b6040516102b4919061280c565b60405180910390f35b3480156102c957600080fd5b506102e460048036038101906102df9190612827565b61096c565b005b3480156102f257600080fd5b5061030d60048036038101906103089190612867565b6109cd565b005b34801561031b57600080fd5b506103246109df565b60405161033191906128a3565b60405180910390f35b34801561034657600080fd5b5061034f610a05565b60405161035c9190612655565b60405180910390f35b34801561037157600080fd5b5061038c600480360381019061038791906128be565b610a0f565b604051610399919061280c565b60405180910390f35b3480156103ae57600080fd5b506103b7610a3e565b6040516103c491906128a3565b60405180910390f35b3480156103d957600080fd5b506103e2610a64565b6040516103ef919061292d565b60405180910390f35b34801561040457600080fd5b5061040d610a8c565b60405161041a91906128a3565b60405180910390f35b34801561042f57600080fd5b5061044a60048036038101906104459190612867565b610ab2565b005b34801561045857600080fd5b50610473600480360381019061046e9190612948565b610b27565b005b34801561048157600080fd5b5061049c600480360381019061049791906129af565b610b3b565b005b3480156104aa57600080fd5b506104c560048036038101906104c09190612948565b610b4f565b6040516104d2919061280c565b60405180910390f35b3480156104e757600080fd5b5061050260048036038101906104fd9190612867565b610ba5565b005b34801561051057600080fd5b5061052b60048036038101906105269190612948565b610bfd565b604051610538919061280c565b60405180910390f35b34801561054d57600080fd5b5061056860048036038101906105639190612948565b610c53565b6040516105759190612655565b60405180910390f35b34801561058a57600080fd5b50610593610c9b565b005b3480156105a157600080fd5b506105bc60048036038101906105b79190612948565b610caf565b005b3480156105ca57600080fd5b506105e560048036038101906105e09190612a08565b610cfb565b005b3480156105f357600080fd5b506105fc610d75565b60405161060991906128a3565b60405180910390f35b34801561061e57600080fd5b50610627610d9f565b6040516106349190612700565b60405180910390f35b34801561064957600080fd5b50610652610e31565b60405161065f919061280c565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a91906127b1565b610e44565b60405161069c919061280c565b60405180910390f35b3480156106b157600080fd5b506106cc60048036038101906106c791906129af565b610e67565b005b3480156106da57600080fd5b506106f560048036038101906106f09190612a35565b610e7b565b005b34801561070357600080fd5b5061070c610e91565b6040516107199190612a84565b60405180910390f35b34801561072e57600080fd5b5061074960048036038101906107449190612948565b610e96565b005b34801561075757600080fd5b50610760610eaa565b60405161076d9190612afe565b60405180910390f35b34801561078257600080fd5b5061079d60048036038101906107989190612b19565b610ed0565b6040516107aa9190612655565b60405180910390f35b3480156107bf57600080fd5b506107c8610f57565b6040516107d59190612a84565b60405180910390f35b3480156107ea57600080fd5b506107f3610f6b565b6040516108009190612a84565b60405180910390f35b34801561081557600080fd5b50610830600480360381019061082b9190612a35565b610f7f565b005b34801561083e57600080fd5b50610847610f95565b6040516108549190612a84565b60405180910390f35b34801561086957600080fd5b50610884600480360381019061087f9190612948565b610f9a565b005b34801561089257600080fd5b5061089b611020565b6040516108a891906128a3565b60405180910390f35b600a5481565b6060600380546108c690612b88565b80601f01602080910402602001604051908101604052809291908181526020018280546108f290612b88565b801561093f5780601f106109145761010080835404028352916020019161093f565b820191906000526020600020905b81548152906001019060200180831161092257829003601f168201915b5050505050905090565b600080610954611026565b905061096181858561102e565b600191505092915050565b610974611040565b61097d30610c53565b8211156109bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b690612c05565b60405180910390fd5b6109c982826110c7565b5050565b6109d5611040565b80600a8190555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600080610a1a611026565b9050610a27858285611197565b610a3285858561122b565b60019150509392505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f0000000000000000000000000000000000000000000000000000000000000012905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610aba611040565b80610ac430610c53565b1015610b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afc90612c71565b60405180910390fd5b610b243073e130e281b6996ee74f08650615846e71eeeb209f8361122b565b50565b610b2f611040565b610b388161131f565b50565b610b43611040565b610b4c8161186d565b50565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610bad611040565b80471015610bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be790612cdd565b60405180910390fd5b610bf9816118d9565b5050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ca3611040565b610cad60006119c4565b565b610cb7611040565b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610d03611040565b801515600960159054906101000a900460ff16151503610d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4f90612d49565b60405180910390fd5b80600960156101000a81548160ff02191690831515021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610dae90612b88565b80601f0160208091040260200160405190810160405280929190818152602001828054610dda90612b88565b8015610e275780601f10610dfc57610100808354040283529160200191610e27565b820191906000526020600020905b815481529060010190602001808311610e0a57829003601f168201915b5050505050905090565b600960159054906101000a900460ff1681565b600080610e4f611026565b9050610e5c81858561122b565b600191505092915050565b610e6f611040565b610e7881611a8a565b50565b610e83611040565b610e8d8282611af6565b5050565b601981565b610e9e611040565b610ea781611c31565b50565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600660169054906101000a900461ffff1681565b600660149054906101000a900461ffff1681565b610f87611040565b610f918282611c75565b5050565b606481565b610fa2611040565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110145760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161100b91906128a3565b60405180910390fd5b61101d816119c4565b50565b61dead81565b600033905090565b61103b8383836001611db0565b505050565b611048611026565b73ffffffffffffffffffffffffffffffffffffffff16611066610d75565b73ffffffffffffffffffffffffffffffffffffffff16146110c557611089611026565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016110bc91906128a3565b60405180910390fd5b565b6001600960146101000a81548160ff02191690831515021790555060006110ed30610c53565b90508281106111765760008390506000479050600082111561114e576000611136600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610c53565b0361114357505050611178565b61114d8285611f87565b5b6000814761115c9190612d98565b9050600081111561117257611170816118d9565b505b5050505b505b6000600960146101000a81548160ff0219169083151502179055505050565b60006111a38484610ed0565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112255781811015611215578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161120c93929190612dcc565b60405180910390fd5b61122484848484036000611db0565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361129d5760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161129491906128a3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361130f5760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161130691906128a3565b60405180910390fd5b61131a8383836121ca565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361138e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138590612e4f565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561143e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114629190612e84565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ca90612efd565b60405180910390fd5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611542573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115669190612e84565b90508173ffffffffffffffffffffffffffffffffffffffff1663e6a4390530836040518363ffffffff1660e01b81526004016115a3929190612f1d565b602060405180830381865afa1580156115c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e49190612e84565b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611739578173ffffffffffffffffffffffffffffffffffffffff1663c9c6539630836040518363ffffffff1660e01b81526004016116b5929190612f1d565b6020604051808303816000875af11580156116d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f89190612e84565b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036117ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c190612f92565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fca394f95d8dbf1e8b2e76b9a8da90cacce1da85181a65508dab13212dc1df53b60405160405180910390a3505050565b601961ffff168161ffff1611156118b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b090613024565b60405180910390fd5b80600660146101000a81548161ffff021916908361ffff16021790555050565b60008082036118eb57600090506119bf565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161193390613075565b60006040518083038185875af1925050503d8060008114611970576040519150601f19603f3d011682016040523d82523d6000602084013e611975565b606091505b50509050806119b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b0906130d6565b60405180910390fd5b60019150505b919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b601961ffff168161ffff161115611ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acd90613168565b60405180910390fd5b80600660166101000a81548161ffff021916908361ffff16021790555050565b801515600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7f90612d49565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb82604051611c25919061280c565b60405180910390a25050565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b801515600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfe90612d49565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f902b2ea0acdec5a260e398590d055fe29bd61ef5dd41e45db54a4cd98d5569e082604051611da4919061280c565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611e225760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611e1991906128a3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e945760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611e8b91906128a3565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015611f81578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611f789190612655565b60405180910390a35b50505050565b6000600267ffffffffffffffff811115611fa457611fa3613188565b5b604051908082528060200260200182016040528015611fd25781602001602082028036833780820191505090505b5090503081600081518110611fea57611fe96131b7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b59190612e84565b816001815181106120c9576120c86131b7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061213030600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168561102e565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac94784848430426040518663ffffffff1660e01b81526004016121939594939291906132a4565b600060405180830381600087803b1580156121ad57600080fd5b505af11580156121c1573d6000803e3d6000fd5b50505050505050565b6121d58383836121da565b505050565b6000811161221d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122149061334a565b60405180910390fd5b600080600960149054906101000a900460ff161580156122495750600960159054906101000a900460ff165b9050600061225686610bfd565b9050600061226386610bfd565b9050600960149054906101000a900460ff1661235957600061228488610b4f565b9050600061229188610b4f565b905083801561229e575082155b80156122a8575080155b80156123025750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b1561232357600660149054906101000a900461ffff1661ffff169550612356565b82801561232e575081155b8015612338575080155b1561235557600660169054906101000a900461ffff1661ffff1695505b5b50505b8280156123665750600084115b801561236f5750805b1561239857600061237f30610c53565b9050600a548110612396576123958160006110c7565b5b505b6000841115612402576000606461ffff1685876123b5919061336a565b6123bf91906133db565b9050600081876123cf9190612d98565b905060008211156123e6576123e5893084612417565b5b60008111156123fb576123fa898983612417565b5b505061240e565b61240d878787612417565b5b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361246957806002600082825461245d919061340c565b9250508190555061253c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156124f5578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016124ec93929190612dcc565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361258557806002600082825403925050819055506125d2565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161262f9190612655565b60405180910390a3505050565b6000819050919050565b61264f8161263c565b82525050565b600060208201905061266a6000830184612646565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156126aa57808201518184015260208101905061268f565b60008484015250505050565b6000601f19601f8301169050919050565b60006126d282612670565b6126dc818561267b565b93506126ec81856020860161268c565b6126f5816126b6565b840191505092915050565b6000602082019050818103600083015261271a81846126c7565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061275282612727565b9050919050565b61276281612747565b811461276d57600080fd5b50565b60008135905061277f81612759565b92915050565b61278e8161263c565b811461279957600080fd5b50565b6000813590506127ab81612785565b92915050565b600080604083850312156127c8576127c7612722565b5b60006127d685828601612770565b92505060206127e78582860161279c565b9150509250929050565b60008115159050919050565b612806816127f1565b82525050565b600060208201905061282160008301846127fd565b92915050565b6000806040838503121561283e5761283d612722565b5b600061284c8582860161279c565b925050602061285d8582860161279c565b9150509250929050565b60006020828403121561287d5761287c612722565b5b600061288b8482850161279c565b91505092915050565b61289d81612747565b82525050565b60006020820190506128b86000830184612894565b92915050565b6000806000606084860312156128d7576128d6612722565b5b60006128e586828701612770565b93505060206128f686828701612770565b92505060406129078682870161279c565b9150509250925092565b600060ff82169050919050565b61292781612911565b82525050565b6000602082019050612942600083018461291e565b92915050565b60006020828403121561295e5761295d612722565b5b600061296c84828501612770565b91505092915050565b600061ffff82169050919050565b61298c81612975565b811461299757600080fd5b50565b6000813590506129a981612983565b92915050565b6000602082840312156129c5576129c4612722565b5b60006129d38482850161299a565b91505092915050565b6129e5816127f1565b81146129f057600080fd5b50565b600081359050612a02816129dc565b92915050565b600060208284031215612a1e57612a1d612722565b5b6000612a2c848285016129f3565b91505092915050565b60008060408385031215612a4c57612a4b612722565b5b6000612a5a85828601612770565b9250506020612a6b858286016129f3565b9150509250929050565b612a7e81612975565b82525050565b6000602082019050612a996000830184612a75565b92915050565b6000819050919050565b6000612ac4612abf612aba84612727565b612a9f565b612727565b9050919050565b6000612ad682612aa9565b9050919050565b6000612ae882612acb565b9050919050565b612af881612add565b82525050565b6000602082019050612b136000830184612aef565b92915050565b60008060408385031215612b3057612b2f612722565b5b6000612b3e85828601612770565b9250506020612b4f85828601612770565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ba057607f821691505b602082108103612bb357612bb2612b59565b5b50919050565b7f416d6f756e7420746f6f20686967680000000000000000000000000000000000600082015250565b6000612bef600f8361267b565b9150612bfa82612bb9565b602082019050919050565b60006020820190508181036000830152612c1e81612be2565b9050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000612c5b60148361267b565b9150612c6682612c25565b602082019050919050565b60006020820190508181036000830152612c8a81612c4e565b9050919050565b7f4e6f7420656e6f7567682062616c616e63650000000000000000000000000000600082015250565b6000612cc760128361267b565b9150612cd282612c91565b602082019050919050565b60006020820190508181036000830152612cf681612cba565b9050919050565b7f416c726561647920736574000000000000000000000000000000000000000000600082015250565b6000612d33600b8361267b565b9150612d3e82612cfd565b602082019050919050565b60006020820190508181036000830152612d6281612d26565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612da38261263c565b9150612dae8361263c565b9250828203905081811115612dc657612dc5612d69565b5b92915050565b6000606082019050612de16000830186612894565b612dee6020830185612646565b612dfb6040830184612646565b949350505050565b7f496e76616c696420726f75746572000000000000000000000000000000000000600082015250565b6000612e39600e8361267b565b9150612e4482612e03565b602082019050919050565b60006020820190508181036000830152612e6881612e2c565b9050919050565b600081519050612e7e81612759565b92915050565b600060208284031215612e9a57612e99612722565b5b6000612ea884828501612e6f565b91505092915050565b7f496e76616c696420666163746f72790000000000000000000000000000000000600082015250565b6000612ee7600f8361267b565b9150612ef282612eb1565b602082019050919050565b60006020820190508181036000830152612f1681612eda565b9050919050565b6000604082019050612f326000830185612894565b612f3f6020830184612894565b9392505050565b7f496e76616c6964207061697220616464726573732e0000000000000000000000600082015250565b6000612f7c60158361267b565b9150612f8782612f46565b602082019050919050565b60006020820190508181036000830152612fab81612f6f565b9050919050565b7f496e76616c6964206275792066656521204974206d757374206265206c6f776560008201527f72207468616e204d415820464545210000000000000000000000000000000000602082015250565b600061300e602f8361267b565b915061301982612fb2565b604082019050919050565b6000602082019050818103600083015261303d81613001565b9050919050565b600081905092915050565b50565b600061305f600083613044565b915061306a8261304f565b600082019050919050565b600061308082613052565b9150819050919050565b7f5472616e7366657220746f206465762077616c6c6574206661696c6564000000600082015250565b60006130c0601d8361267b565b91506130cb8261308a565b602082019050919050565b600060208201905081810360008301526130ef816130b3565b9050919050565b7f496e76616c69642073656c6c2066656521204974206d757374206265206c6f7760008201527f6572207468616e204d4158204645452100000000000000000000000000000000602082015250565b600061315260308361267b565b915061315d826130f6565b604082019050919050565b6000602082019050818103600083015261318181613145565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61321b81612747565b82525050565b600061322d8383613212565b60208301905092915050565b6000602082019050919050565b6000613251826131e6565b61325b81856131f1565b935061326683613202565b8060005b8381101561329757815161327e8882613221565b975061328983613239565b92505060018101905061326a565b5085935050505092915050565b600060a0820190506132b96000830188612646565b6132c66020830187612646565b81810360408301526132d88186613246565b90506132e76060830185612894565b6132f46080830184612646565b9695505050505050565b7f5472616e73666572203c3d203000000000000000000000000000000000000000600082015250565b6000613334600d8361267b565b915061333f826132fe565b602082019050919050565b6000602082019050818103600083015261336381613327565b9050919050565b60006133758261263c565b91506133808361263c565b925082820261338e8161263c565b915082820484148315176133a5576133a4612d69565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006133e68261263c565b91506133f18361263c565b925082613401576134006133ac565b5b828204905092915050565b60006134178261263c565b91506134228361263c565b925082820190508082111561343a57613439612d69565b5b9291505056fea2646970667358221220dd80bce3916a1afb1757ff0c7994bad8d7748a9870a49f43b95d2cfbc1a1774364736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000746a528800000000000000000000000000e130e281b6996ee74f08650615846e71eeeb209f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad2400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000019
-----Decoded View---------------
Arg [0] : initialSupply_ (uint256): 500000000000
Arg [1] : devWallet_ (address): 0xe130e281b6996ee74F08650615846E71EEEB209F
Arg [2] : swapRouter_ (address): 0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24
Arg [3] : buyFees_ (uint16): 2
Arg [4] : sellFees_ (uint16): 25
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000746a528800
Arg [1] : 000000000000000000000000e130e281b6996ee74f08650615846e71eeeb209f
Arg [2] : 0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad24
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000019
Deployed Bytecode Sourcemap
41685:3840:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33703:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16457:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18750:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44025:213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44560:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32211:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17559:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19518:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33553:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26159:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33583:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45082:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45408:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44769:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35281:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43547:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35900:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17721:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3340:103;;;;;;;;;;;;;:::i;:::-;;44336:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42753:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2665:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16667:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33669:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18044:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44967:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43283:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33187:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43824:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33510:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18289:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33399:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33312:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43030:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33245:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3598:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33090:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33703:30;;;;:::o;16457:91::-;16502:13;16535:5;16528:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16457:91;:::o;18750:190::-;18823:4;18840:13;18856:12;:10;:12::i;:::-;18840:28;;18879:31;18888:5;18895:7;18904:5;18879:8;:31::i;:::-;18928:4;18921:11;;;18750:190;;;;:::o;44025:213::-;2551:13;:11;:13::i;:::-;44141:24:::1;44159:4;44141:9;:24::i;:::-;44131:6;:34;;44123:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;44196:34;44209:6;44217:12;44196;:34::i;:::-;44025:213:::0;;:::o;44560:115::-;2551:13;:11;:13::i;:::-;44661:6:::1;44643:15;:24;;;;44560:115:::0;:::o;32211:25::-;;;;;;;;;;;;;:::o;17559:99::-;17611:7;17638:12;;17631:19;;17559:99;:::o;19518:249::-;19605:4;19622:15;19640:12;:10;:12::i;:::-;19622:30;;19663:37;19679:4;19685:7;19694:5;19663:15;:37::i;:::-;19711:26;19721:4;19727:2;19731:5;19711:9;:26::i;:::-;19755:4;19748:11;;;19518:249;;;;;:::o;33553:23::-;;;;;;;;;;;;;:::o;26159:92::-;26209:5;26234:9;26227:16;;26159:92;:::o;33583:29::-;;;;;;;;;;;;;:::o;45082:227::-;2551:13;:11;:13::i;:::-;45187:6:::1;45159:24;45177:4;45159:9;:24::i;:::-;:34;;45151:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45225:76;45243:4;45250:42;45294:6;45225:9;:76::i;:::-;45082:227:::0;:::o;45408:114::-;2551:13;:11;:13::i;:::-;45489:25:::1;45504:9;45489:14;:25::i;:::-;45408:114:::0;:::o;44769:103::-;2551:13;:11;:13::i;:::-;44844:20:::1;44856:7;44844:11;:20::i;:::-;44769:103:::0;:::o;35281:124::-;35347:4;35371:17;:26;35389:7;35371:26;;;;;;;;;;;;;;;;;;;;;;;;;35364:33;;35281:124;;;:::o;43547:185::-;2551:13;:11;:13::i;:::-;43659:6:::1;43634:21;:31;;43626:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;43701:23;43717:6;43701:15;:23::i;:::-;;43547:185:::0;:::o;35900:113::-;35960:4;35984:8;:21;35993:11;35984:21;;;;;;;;;;;;;;;;;;;;;;;;;35977:28;;35900:113;;;:::o;17721:118::-;17786:7;17813:9;:18;17823:7;17813:18;;;;;;;;;;;;;;;;17806:25;;17721:118;;;:::o;3340:103::-;2551:13;:11;:13::i;:::-;3405:30:::1;3432:1;3405:18;:30::i;:::-;3340:103::o:0;44336:117::-;2551:13;:11;:13::i;:::-;44437:8:::1;44420:14;;:25;;;;;;;;;;;;;;;;;;44336:117:::0;:::o;42753:187::-;2551:13;:11;:13::i;:::-;42865:11:::1;42846:30;;:15;;;;;;;;;;;:30;;::::0;42838:54:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;42921:11;42903:15;;:29;;;;;;;;;;;;;;;;;;42753:187:::0;:::o;2665:87::-;2711:7;2738:6;;;;;;;;;;;2731:13;;2665:87;:::o;16667:95::-;16714:13;16747:7;16740:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16667:95;:::o;33669:27::-;;;;;;;;;;;;;:::o;18044:182::-;18113:4;18130:13;18146:12;:10;:12::i;:::-;18130:28;;18169:27;18179:5;18186:2;18190:5;18169:9;:27::i;:::-;18214:4;18207:11;;;18044:182;;;;:::o;44967:107::-;2551:13;:11;:13::i;:::-;45044:22:::1;45057:8;45044:12;:22::i;:::-;44967:107:::0;:::o;43283:151::-;2551:13;:11;:13::i;:::-;43385:41:::1;43408:7;43417:8;43385:22;:41::i;:::-;43283:151:::0;;:::o;33187:35::-;33220:2;33187:35;:::o;43824:114::-;2551:13;:11;:13::i;:::-;43905:25:::1;43922:7;43905:16;:25::i;:::-;43824:114:::0;:::o;33510:36::-;;;;;;;;;;;;;:::o;18289:142::-;18369:7;18396:11;:18;18408:5;18396:18;;;;;;;;;;;;;;;:27;18415:7;18396:27;;;;;;;;;;;;;;;;18389:34;;18289:142;;;;:::o;33399:22::-;;;;;;;;;;;;;:::o;33312:21::-;;;;;;;;;;;;;:::o;43030:131::-;2551:13;:11;:13::i;:::-;43122:31:::1;43135:11;43148:4;43122:12;:31::i;:::-;43030:131:::0;;:::o;33245:42::-;33284:3;33245:42;:::o;3598:220::-;2551:13;:11;:13::i;:::-;3703:1:::1;3683:22;;:8;:22;;::::0;3679:93:::1;;3757:1;3729:31;;;;;;;;;;;:::i;:::-;;;;;;;;3679:93;3782:28;3801:8;3782:18;:28::i;:::-;3598:220:::0;:::o;33090:90::-;33137:42;33090:90;:::o;674:98::-;727:7;754:10;747:17;;674:98;:::o;23577:130::-;23662:37;23671:5;23678:7;23687:5;23694:4;23662:8;:37::i;:::-;23577:130;;;:::o;2830:166::-;2901:12;:10;:12::i;:::-;2890:23;;:7;:5;:7::i;:::-;:23;;;2886:103;;2964:12;:10;:12::i;:::-;2937:40;;;;;;;;;;;:::i;:::-;;;;;;;;2886:103;2830:166::o;37080:884::-;34193:4;34175:15;;:22;;;;;;;;;;;;;;;;;;37177:28:::1;37208:24;37226:4;37208:9;:24::i;:::-;37177:55;;37271:11;37247:20;:35;37243:714;;37301:24;37328:11;37301:38;;37356:21;37380;37356:45;;37469:1;37450:16;:20;37446:275;;;37518:1;37495:19;37505:8;;;;;;;;;;;37495:9;:19::i;:::-;:24:::0;37491:145:::1;;37610:7;;;;;37491:145;37656:49;37674:16;37692:12;37656:17;:49::i;:::-;37446:275;37737:21;37785:13;37761:21;:37;;;;:::i;:::-;37737:61;;37877:1;37861:13;:17;37858:86;;;37898:30;37914:13;37898:15;:30::i;:::-;;37858:86;37284:673;;;37243:714;37166:798;34208:1;34238:5:::0;34220:15;;:23;;;;;;;;;;;;;;;;;;37080:884;;:::o;25293:487::-;25393:24;25420:25;25430:5;25437:7;25420:9;:25::i;:::-;25393:52;;25480:17;25460:16;:37;25456:317;;25537:5;25518:16;:24;25514:132;;;25597:7;25606:16;25624:5;25570:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;25514:132;25689:57;25698:5;25705:7;25733:5;25714:16;:24;25740:5;25689:8;:57::i;:::-;25456:317;25382:398;25293:487;;;:::o;20152:308::-;20252:1;20236:18;;:4;:18;;;20232:88;;20305:1;20278:30;;;;;;;;;;;:::i;:::-;;;;;;;;20232:88;20348:1;20334:16;;:2;:16;;;20330:88;;20403:1;20374:32;;;;;;;;;;;:::i;:::-;;;;;;;;20330:88;20428:24;20436:4;20442:2;20446:5;20428:7;:24::i;:::-;20152:308;;;:::o;36021:677::-;36115:1;36093:24;;:10;:24;;;36085:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;36181:10;36149;;:43;;;;;;;;;;;;;;;;;;36203:25;36249:10;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36203:67;;36317:1;36289:30;;36297:7;36289:30;;;36281:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36352:12;36367:10;;;;;;;;;;;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36352:32;;36406:7;:15;;;36430:4;36437;36406:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36395:8;;:47;;;;;;;;;;;;;;;;;;36477:1;36457:22;;:8;;;;;;;;;;;:22;;;36453:105;;36507:7;:18;;;36534:4;36541;36507:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36496:8;;:50;;;;;;;;;;;;;;;;;;36453:105;36598:1;36578:22;;:8;;;;;;;;;;;:22;;;36570:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;36681:8;;;;;;;;;;;36642:48;;36668:10;;;;;;;;;;;36642:48;;;;;;;;;;;;36074:624;;36021:677;:::o;36706:176::-;33220:2;36772:19;;:8;:19;;;;36764:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;36866:8;36856:7;;:18;;;;;;;;;;;;;;;;;;36706:176;:::o;32426:321::-;32485:4;32516:1;32506:6;:11;32502:29;;32526:5;32519:12;;;;32502:29;32594:12;32620:10;;;;;;;;;;;32612:24;;32644:6;32612:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32593:62;;;32674:7;32666:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;32735:4;32728:11;;;32426:321;;;;:::o;3978:191::-;4052:16;4071:6;;;;;;;;;;;4052:25;;4097:8;4088:6;;:17;;;;;;;;;;;;;;;;;;4152:8;4121:40;;4142:8;4121:40;;;;;;;;;;;;4041:128;3978:191;:::o;36890:182::-;33220:2;36958:20;;:9;:20;;;;36950:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;37055:9;37044:8;;:20;;;;;;;;;;;;;;;;;;36890:182;:::o;35413:253::-;35535:8;35505:38;;:17;:26;35523:7;35505:26;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;35497:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;35599:8;35570:17;:26;35588:7;35570:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;35640:7;35623:35;;;35649:8;35623:35;;;;;;:::i;:::-;;;;;;;;35413:253;;:::o;32325:93::-;32401:7;32388:10;;:20;;;;;;;;;;;;;;;;;;32325:93;:::o;35674:218::-;35781:4;35756:29;;:8;:21;35765:11;35756:21;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;35748:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;35836:4;35812:8;:21;35821:11;35812:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;35866:11;35856:28;;;35879:4;35856:28;;;;;;:::i;:::-;;;;;;;;35674:218;;:::o;24558:443::-;24688:1;24671:19;;:5;:19;;;24667:91;;24743:1;24714:32;;;;;;;;;;;:::i;:::-;;;;;;;;24667:91;24791:1;24772:21;;:7;:21;;;24768:92;;24845:1;24817:31;;;;;;;;;;;:::i;:::-;;;;;;;;24768:92;24900:5;24870:11;:18;24882:5;24870:18;;;;;;;;;;;;;;;:27;24889:7;24870:27;;;;;;;;;;;;;;;:35;;;;24920:9;24916:78;;;24967:7;24951:31;;24960:5;24951:31;;;24976:5;24951:31;;;;;;:::i;:::-;;;;;;;;24916:78;24558:443;;;;:::o;38006:577::-;38152:21;38190:1;38176:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38152:40;;38221:4;38203;38208:1;38203:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;38247:10;;;;;;;;;;;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38237:4;38242:1;38237:7;;;;;;;;:::i;:::-;;;;;;;:27;;;;;;;;;;;38277:57;38294:4;38309:10;;;;;;;;;;;38322:11;38277:8;:57::i;:::-;38373:10;;;;;;;;;;;:61;;;38449:11;38475:12;38502:4;38529;38549:15;38373:202;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38084:499;38006:577;;:::o;42480:156::-;42597:31;42611:4;42617:2;42621:6;42597:13;:31::i;:::-;42480:156;;;:::o;39402:1495::-;39515:1;39506:6;:10;39498:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;39547:14;39576:15;39595;;;;;;;;;;;39594:16;:35;;;;;39614:15;;;;;;;;;;;39594:35;39576:53;;39642:11;39656:14;39665:4;39656:8;:14::i;:::-;39642:28;;39681:9;39693:12;39702:2;39693:8;:12::i;:::-;39681:24;;39723:15;;;;;;;;;;;39718:437;;39755:17;39775:24;39794:4;39775:18;:24::i;:::-;39755:44;;39814:15;39832:22;39851:2;39832:18;:22::i;:::-;39814:40;;39875:6;:15;;;;;39886:4;39885:5;39875:15;:30;;;;;39895:10;39894:11;39875:30;:59;;;;;39923:10;;;;;;;;;;;39909:25;;:2;:25;;;;39875:59;39871:273;;;39992:7;;;;;;;;;;;39983:16;;;;39871:273;;;40025:4;:21;;;;;40034:12;40033:13;40025:21;:36;;;;;40051:10;40050:11;40025:36;40021:123;;;40120:8;;;;;;;;;;;40111:17;;;;40021:123;39871:273;39740:415;;39718:437;40196:10;:24;;;;;40219:1;40210:6;:10;40196:24;:32;;;;;40224:4;40196:32;40192:251;;;40245:28;40276:24;40294:4;40276:9;:24::i;:::-;40245:55;;40343:15;;40319:20;:39;40315:117;;40379:37;40392:20;40414:1;40379:12;:37::i;:::-;40315:117;40230:213;40192:251;40468:1;40459:6;:10;40455:435;;;40486:17;33284:3;40506:33;;40516:6;40507;:15;;;;:::i;:::-;40506:33;;;;:::i;:::-;40486:53;;40554:18;40584:9;40575:6;:18;;;;:::i;:::-;40554:39;;40626:1;40614:9;:13;40610:99;;;40648:45;40662:4;40676;40683:9;40648:13;:45::i;:::-;40610:99;40742:1;40729:10;:14;40725:90;;;40764:35;40778:4;40784:2;40788:10;40764:13;:35::i;:::-;40725:90;40471:355;;40455:435;;;40847:31;40861:4;40867:2;40871:6;40847:13;:31::i;:::-;40455:435;39487:1410;;;;39402:1495;;;:::o;20784:1135::-;20890:1;20874:18;;:4;:18;;;20870:552;;21028:5;21012:12;;:21;;;;;;;:::i;:::-;;;;;;;;20870:552;;;21066:19;21088:9;:15;21098:4;21088:15;;;;;;;;;;;;;;;;21066:37;;21136:5;21122:11;:19;21118:117;;;21194:4;21200:11;21213:5;21169:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;21118:117;21390:5;21376:11;:19;21358:9;:15;21368:4;21358:15;;;;;;;;;;;;;;;:37;;;;21051:371;20870:552;21452:1;21438:16;;:2;:16;;;21434:435;;21620:5;21604:12;;:21;;;;;;;;;;;21434:435;;;21837:5;21820:9;:13;21830:2;21820:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;21434:435;21901:2;21886:25;;21895:4;21886:25;;;21905:5;21886:25;;;;;;:::i;:::-;;;;;;;;20784:1135;;;:::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;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:474::-;3866:6;3874;3923:2;3911:9;3902:7;3898:23;3894:32;3891:119;;;3929:79;;:::i;:::-;3891:119;4049:1;4074:53;4119:7;4110:6;4099:9;4095:22;4074:53;:::i;:::-;4064:63;;4020:117;4176:2;4202:53;4247:7;4238:6;4227:9;4223:22;4202:53;:::i;:::-;4192:63;;4147:118;3798:474;;;;;:::o;4278:329::-;4337:6;4386:2;4374:9;4365:7;4361:23;4357:32;4354:119;;;4392:79;;:::i;:::-;4354:119;4512:1;4537:53;4582:7;4573:6;4562:9;4558:22;4537:53;:::i;:::-;4527:63;;4483:117;4278:329;;;;:::o;4613:118::-;4700:24;4718:5;4700:24;:::i;:::-;4695:3;4688:37;4613:118;;:::o;4737:222::-;4830:4;4868:2;4857:9;4853:18;4845:26;;4881:71;4949:1;4938:9;4934:17;4925:6;4881:71;:::i;:::-;4737:222;;;;:::o;4965:619::-;5042:6;5050;5058;5107:2;5095:9;5086:7;5082:23;5078:32;5075:119;;;5113:79;;:::i;:::-;5075:119;5233:1;5258:53;5303:7;5294:6;5283:9;5279:22;5258:53;:::i;:::-;5248:63;;5204:117;5360:2;5386:53;5431:7;5422:6;5411:9;5407:22;5386:53;:::i;:::-;5376:63;;5331:118;5488:2;5514:53;5559:7;5550:6;5539:9;5535:22;5514:53;:::i;:::-;5504:63;;5459:118;4965:619;;;;;:::o;5590:86::-;5625:7;5665:4;5658:5;5654:16;5643:27;;5590:86;;;:::o;5682:112::-;5765:22;5781:5;5765:22;:::i;:::-;5760:3;5753:35;5682:112;;:::o;5800:214::-;5889:4;5927:2;5916:9;5912:18;5904:26;;5940:67;6004:1;5993:9;5989:17;5980:6;5940:67;:::i;:::-;5800:214;;;;:::o;6020:329::-;6079:6;6128:2;6116:9;6107:7;6103:23;6099:32;6096:119;;;6134:79;;:::i;:::-;6096:119;6254:1;6279:53;6324:7;6315:6;6304:9;6300:22;6279:53;:::i;:::-;6269:63;;6225:117;6020:329;;;;:::o;6355:89::-;6391:7;6431:6;6424:5;6420:18;6409:29;;6355:89;;;:::o;6450:120::-;6522:23;6539:5;6522:23;:::i;:::-;6515:5;6512:34;6502:62;;6560:1;6557;6550:12;6502:62;6450:120;:::o;6576:137::-;6621:5;6659:6;6646:20;6637:29;;6675:32;6701:5;6675:32;:::i;:::-;6576:137;;;;:::o;6719:327::-;6777:6;6826:2;6814:9;6805:7;6801:23;6797:32;6794:119;;;6832:79;;:::i;:::-;6794:119;6952:1;6977:52;7021:7;7012:6;7001:9;6997:22;6977:52;:::i;:::-;6967:62;;6923:116;6719:327;;;;:::o;7052:116::-;7122:21;7137:5;7122:21;:::i;:::-;7115:5;7112:32;7102:60;;7158:1;7155;7148:12;7102:60;7052:116;:::o;7174:133::-;7217:5;7255:6;7242:20;7233:29;;7271:30;7295:5;7271:30;:::i;:::-;7174:133;;;;:::o;7313:323::-;7369:6;7418:2;7406:9;7397:7;7393:23;7389:32;7386:119;;;7424:79;;:::i;:::-;7386:119;7544:1;7569:50;7611:7;7602:6;7591:9;7587:22;7569:50;:::i;:::-;7559:60;;7515:114;7313:323;;;;:::o;7642:468::-;7707:6;7715;7764:2;7752:9;7743:7;7739:23;7735:32;7732:119;;;7770:79;;:::i;:::-;7732:119;7890:1;7915:53;7960:7;7951:6;7940:9;7936:22;7915:53;:::i;:::-;7905:63;;7861:117;8017:2;8043:50;8085:7;8076:6;8065:9;8061:22;8043:50;:::i;:::-;8033:60;;7988:115;7642:468;;;;;:::o;8116:115::-;8201:23;8218:5;8201:23;:::i;:::-;8196:3;8189:36;8116:115;;:::o;8237:218::-;8328:4;8366:2;8355:9;8351:18;8343:26;;8379:69;8445:1;8434:9;8430:17;8421:6;8379:69;:::i;:::-;8237:218;;;;:::o;8461:60::-;8489:3;8510:5;8503:12;;8461:60;;;:::o;8527:142::-;8577:9;8610:53;8628:34;8637:24;8655:5;8637:24;:::i;:::-;8628:34;:::i;:::-;8610:53;:::i;:::-;8597:66;;8527:142;;;:::o;8675:126::-;8725:9;8758:37;8789:5;8758:37;:::i;:::-;8745:50;;8675:126;;;:::o;8807:153::-;8884:9;8917:37;8948:5;8917:37;:::i;:::-;8904:50;;8807:153;;;:::o;8966:185::-;9080:64;9138:5;9080:64;:::i;:::-;9075:3;9068:77;8966:185;;:::o;9157:276::-;9277:4;9315:2;9304:9;9300:18;9292:26;;9328:98;9423:1;9412:9;9408:17;9399:6;9328:98;:::i;:::-;9157:276;;;;:::o;9439:474::-;9507:6;9515;9564:2;9552:9;9543:7;9539:23;9535:32;9532:119;;;9570:79;;:::i;:::-;9532:119;9690:1;9715:53;9760:7;9751:6;9740:9;9736:22;9715:53;:::i;:::-;9705:63;;9661:117;9817:2;9843:53;9888:7;9879:6;9868:9;9864:22;9843:53;:::i;:::-;9833:63;;9788:118;9439:474;;;;;:::o;9919:180::-;9967:77;9964:1;9957:88;10064:4;10061:1;10054:15;10088:4;10085:1;10078:15;10105:320;10149:6;10186:1;10180:4;10176:12;10166:22;;10233:1;10227:4;10223:12;10254:18;10244:81;;10310:4;10302:6;10298:17;10288:27;;10244:81;10372:2;10364:6;10361:14;10341:18;10338:38;10335:84;;10391:18;;:::i;:::-;10335:84;10156:269;10105:320;;;:::o;10431:165::-;10571:17;10567:1;10559:6;10555:14;10548:41;10431:165;:::o;10602:366::-;10744:3;10765:67;10829:2;10824:3;10765:67;:::i;:::-;10758:74;;10841:93;10930:3;10841:93;:::i;:::-;10959:2;10954:3;10950:12;10943:19;;10602:366;;;:::o;10974:419::-;11140:4;11178:2;11167:9;11163:18;11155:26;;11227:9;11221:4;11217:20;11213:1;11202:9;11198:17;11191:47;11255:131;11381:4;11255:131;:::i;:::-;11247:139;;10974:419;;;:::o;11399:170::-;11539:22;11535:1;11527:6;11523:14;11516:46;11399:170;:::o;11575:366::-;11717:3;11738:67;11802:2;11797:3;11738:67;:::i;:::-;11731:74;;11814:93;11903:3;11814:93;:::i;:::-;11932:2;11927:3;11923:12;11916:19;;11575:366;;;:::o;11947:419::-;12113:4;12151:2;12140:9;12136:18;12128:26;;12200:9;12194:4;12190:20;12186:1;12175:9;12171:17;12164:47;12228:131;12354:4;12228:131;:::i;:::-;12220:139;;11947:419;;;:::o;12372:168::-;12512:20;12508:1;12500:6;12496:14;12489:44;12372:168;:::o;12546:366::-;12688:3;12709:67;12773:2;12768:3;12709:67;:::i;:::-;12702:74;;12785:93;12874:3;12785:93;:::i;:::-;12903:2;12898:3;12894:12;12887:19;;12546:366;;;:::o;12918:419::-;13084:4;13122:2;13111:9;13107:18;13099:26;;13171:9;13165:4;13161:20;13157:1;13146:9;13142:17;13135:47;13199:131;13325:4;13199:131;:::i;:::-;13191:139;;12918:419;;;:::o;13343:161::-;13483:13;13479:1;13471:6;13467:14;13460:37;13343:161;:::o;13510:366::-;13652:3;13673:67;13737:2;13732:3;13673:67;:::i;:::-;13666:74;;13749:93;13838:3;13749:93;:::i;:::-;13867:2;13862:3;13858:12;13851:19;;13510:366;;;:::o;13882:419::-;14048:4;14086:2;14075:9;14071:18;14063:26;;14135:9;14129:4;14125:20;14121:1;14110:9;14106:17;14099:47;14163:131;14289:4;14163:131;:::i;:::-;14155:139;;13882:419;;;:::o;14307:180::-;14355:77;14352:1;14345:88;14452:4;14449:1;14442:15;14476:4;14473:1;14466:15;14493:194;14533:4;14553:20;14571:1;14553:20;:::i;:::-;14548:25;;14587:20;14605:1;14587:20;:::i;:::-;14582:25;;14631:1;14628;14624:9;14616:17;;14655:1;14649:4;14646:11;14643:37;;;14660:18;;:::i;:::-;14643:37;14493:194;;;;:::o;14693:442::-;14842:4;14880:2;14869:9;14865:18;14857:26;;14893:71;14961:1;14950:9;14946:17;14937:6;14893:71;:::i;:::-;14974:72;15042:2;15031:9;15027:18;15018:6;14974:72;:::i;:::-;15056;15124:2;15113:9;15109:18;15100:6;15056:72;:::i;:::-;14693:442;;;;;;:::o;15141:164::-;15281:16;15277:1;15269:6;15265:14;15258:40;15141:164;:::o;15311:366::-;15453:3;15474:67;15538:2;15533:3;15474:67;:::i;:::-;15467:74;;15550:93;15639:3;15550:93;:::i;:::-;15668:2;15663:3;15659:12;15652:19;;15311:366;;;:::o;15683:419::-;15849:4;15887:2;15876:9;15872:18;15864:26;;15936:9;15930:4;15926:20;15922:1;15911:9;15907:17;15900:47;15964:131;16090:4;15964:131;:::i;:::-;15956:139;;15683:419;;;:::o;16108:143::-;16165:5;16196:6;16190:13;16181:22;;16212:33;16239:5;16212:33;:::i;:::-;16108:143;;;;:::o;16257:351::-;16327:6;16376:2;16364:9;16355:7;16351:23;16347:32;16344:119;;;16382:79;;:::i;:::-;16344:119;16502:1;16527:64;16583:7;16574:6;16563:9;16559:22;16527:64;:::i;:::-;16517:74;;16473:128;16257:351;;;;:::o;16614:165::-;16754:17;16750:1;16742:6;16738:14;16731:41;16614:165;:::o;16785:366::-;16927:3;16948:67;17012:2;17007:3;16948:67;:::i;:::-;16941:74;;17024:93;17113:3;17024:93;:::i;:::-;17142:2;17137:3;17133:12;17126:19;;16785:366;;;:::o;17157:419::-;17323:4;17361:2;17350:9;17346:18;17338:26;;17410:9;17404:4;17400:20;17396:1;17385:9;17381:17;17374:47;17438:131;17564:4;17438:131;:::i;:::-;17430:139;;17157:419;;;:::o;17582:332::-;17703:4;17741:2;17730:9;17726:18;17718:26;;17754:71;17822:1;17811:9;17807:17;17798:6;17754:71;:::i;:::-;17835:72;17903:2;17892:9;17888:18;17879:6;17835:72;:::i;:::-;17582:332;;;;;:::o;17920:171::-;18060:23;18056:1;18048:6;18044:14;18037:47;17920:171;:::o;18097:366::-;18239:3;18260:67;18324:2;18319:3;18260:67;:::i;:::-;18253:74;;18336:93;18425:3;18336:93;:::i;:::-;18454:2;18449:3;18445:12;18438:19;;18097:366;;;:::o;18469:419::-;18635:4;18673:2;18662:9;18658:18;18650:26;;18722:9;18716:4;18712:20;18708:1;18697:9;18693:17;18686:47;18750:131;18876:4;18750:131;:::i;:::-;18742:139;;18469:419;;;:::o;18894:234::-;19034:34;19030:1;19022:6;19018:14;19011:58;19103:17;19098:2;19090:6;19086:15;19079:42;18894:234;:::o;19134:366::-;19276:3;19297:67;19361:2;19356:3;19297:67;:::i;:::-;19290:74;;19373:93;19462:3;19373:93;:::i;:::-;19491:2;19486:3;19482:12;19475:19;;19134:366;;;:::o;19506:419::-;19672:4;19710:2;19699:9;19695:18;19687:26;;19759:9;19753:4;19749:20;19745:1;19734:9;19730:17;19723:47;19787:131;19913:4;19787:131;:::i;:::-;19779:139;;19506:419;;;:::o;19931:147::-;20032:11;20069:3;20054:18;;19931:147;;;;:::o;20084:114::-;;:::o;20204:398::-;20363:3;20384:83;20465:1;20460:3;20384:83;:::i;:::-;20377:90;;20476:93;20565:3;20476:93;:::i;:::-;20594:1;20589:3;20585:11;20578:18;;20204:398;;;:::o;20608:379::-;20792:3;20814:147;20957:3;20814:147;:::i;:::-;20807:154;;20978:3;20971:10;;20608:379;;;:::o;20993:179::-;21133:31;21129:1;21121:6;21117:14;21110:55;20993:179;:::o;21178:366::-;21320:3;21341:67;21405:2;21400:3;21341:67;:::i;:::-;21334:74;;21417:93;21506:3;21417:93;:::i;:::-;21535:2;21530:3;21526:12;21519:19;;21178:366;;;:::o;21550:419::-;21716:4;21754:2;21743:9;21739:18;21731:26;;21803:9;21797:4;21793:20;21789:1;21778:9;21774:17;21767:47;21831:131;21957:4;21831:131;:::i;:::-;21823:139;;21550:419;;;:::o;21975:235::-;22115:34;22111:1;22103:6;22099:14;22092:58;22184:18;22179:2;22171:6;22167:15;22160:43;21975:235;:::o;22216:366::-;22358:3;22379:67;22443:2;22438:3;22379:67;:::i;:::-;22372:74;;22455:93;22544:3;22455:93;:::i;:::-;22573:2;22568:3;22564:12;22557:19;;22216:366;;;:::o;22588:419::-;22754:4;22792:2;22781:9;22777:18;22769:26;;22841:9;22835:4;22831:20;22827:1;22816:9;22812:17;22805:47;22869:131;22995:4;22869:131;:::i;:::-;22861:139;;22588:419;;;:::o;23013:180::-;23061:77;23058:1;23051:88;23158:4;23155:1;23148:15;23182:4;23179:1;23172:15;23199:180;23247:77;23244:1;23237:88;23344:4;23341:1;23334:15;23368:4;23365:1;23358:15;23385:114;23452:6;23486:5;23480:12;23470:22;;23385:114;;;:::o;23505:184::-;23604:11;23638:6;23633:3;23626:19;23678:4;23673:3;23669:14;23654:29;;23505:184;;;;:::o;23695:132::-;23762:4;23785:3;23777:11;;23815:4;23810:3;23806:14;23798:22;;23695:132;;;:::o;23833:108::-;23910:24;23928:5;23910:24;:::i;:::-;23905:3;23898:37;23833:108;;:::o;23947:179::-;24016:10;24037:46;24079:3;24071:6;24037:46;:::i;:::-;24115:4;24110:3;24106:14;24092:28;;23947:179;;;;:::o;24132:113::-;24202:4;24234;24229:3;24225:14;24217:22;;24132:113;;;:::o;24281:732::-;24400:3;24429:54;24477:5;24429:54;:::i;:::-;24499:86;24578:6;24573:3;24499:86;:::i;:::-;24492:93;;24609:56;24659:5;24609:56;:::i;:::-;24688:7;24719:1;24704:284;24729:6;24726:1;24723:13;24704:284;;;24805:6;24799:13;24832:63;24891:3;24876:13;24832:63;:::i;:::-;24825:70;;24918:60;24971:6;24918:60;:::i;:::-;24908:70;;24764:224;24751:1;24748;24744:9;24739:14;;24704:284;;;24708:14;25004:3;24997:10;;24405:608;;;24281:732;;;;:::o;25019:815::-;25274:4;25312:3;25301:9;25297:19;25289:27;;25326:71;25394:1;25383:9;25379:17;25370:6;25326:71;:::i;:::-;25407:72;25475:2;25464:9;25460:18;25451:6;25407:72;:::i;:::-;25526:9;25520:4;25516:20;25511:2;25500:9;25496:18;25489:48;25554:108;25657:4;25648:6;25554:108;:::i;:::-;25546:116;;25672:72;25740:2;25729:9;25725:18;25716:6;25672:72;:::i;:::-;25754:73;25822:3;25811:9;25807:19;25798:6;25754:73;:::i;:::-;25019:815;;;;;;;;:::o;25840:163::-;25980:15;25976:1;25968:6;25964:14;25957:39;25840:163;:::o;26009:366::-;26151:3;26172:67;26236:2;26231:3;26172:67;:::i;:::-;26165:74;;26248:93;26337:3;26248:93;:::i;:::-;26366:2;26361:3;26357:12;26350:19;;26009:366;;;:::o;26381:419::-;26547:4;26585:2;26574:9;26570:18;26562:26;;26634:9;26628:4;26624:20;26620:1;26609:9;26605:17;26598:47;26662:131;26788:4;26662:131;:::i;:::-;26654:139;;26381:419;;;:::o;26806:410::-;26846:7;26869:20;26887:1;26869:20;:::i;:::-;26864:25;;26903:20;26921:1;26903:20;:::i;:::-;26898:25;;26958:1;26955;26951:9;26980:30;26998:11;26980:30;:::i;:::-;26969:41;;27159:1;27150:7;27146:15;27143:1;27140:22;27120:1;27113:9;27093:83;27070:139;;27189:18;;:::i;:::-;27070:139;26854:362;26806:410;;;;:::o;27222:180::-;27270:77;27267:1;27260:88;27367:4;27364:1;27357:15;27391:4;27388:1;27381:15;27408:185;27448:1;27465:20;27483:1;27465:20;:::i;:::-;27460:25;;27499:20;27517:1;27499:20;:::i;:::-;27494:25;;27538:1;27528:35;;27543:18;;:::i;:::-;27528:35;27585:1;27582;27578:9;27573:14;;27408:185;;;;:::o;27599:191::-;27639:3;27658:20;27676:1;27658:20;:::i;:::-;27653:25;;27692:20;27710:1;27692:20;:::i;:::-;27687:25;;27735:1;27732;27728:9;27721:16;;27756:3;27753:1;27750:10;27747:36;;;27763:18;;:::i;:::-;27747:36;27599:191;;;;:::o
Swarm Source
ipfs://dd80bce3916a1afb1757ff0c7994bad8d7748a9870a49f43b95d2cfbc1a17743
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.