ERC-20
Overview
Max Total Supply
420,690,000,000,000 FPEPE
Holders
211
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
86,629,822,000.038545806858723166 FPEPEValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
FuriesPepe
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-07-13 */ // SPDX-License-Identifier: MIT /** * @title Furie's Pepe * @notice All tax from the buys and sells go directly towards Matt Furie, we are doing what Pepe couldn’t do. * Twitter : https://twitter.com/furies_pepe */ // 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: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // 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: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { _spendAllowance(account, _msgSender(), amount); _burn(account, amount); } } // File: contracts/Furie.sol /** * @title Furie's Pepe * @notice All tax from the buys and sells go directly towards Matt furie, we are doing what Pepe couldn’t do. * Twitter: */ pragma solidity ^0.8.17; contract FuriesPepe is ERC20, ERC20Burnable, Ownable { uint256 public purchaseTax = 1; uint256 public sellTax = 1; address public _uniswapV2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; uint256 MAX_WALLET_PERCENTAGE = 2; uint256 MAX_TX_PERCENTAGE = 2; uint256 SWAP_TOKENS_AT_AMOUNT_PERCENTAGE = 1; address payable public marketingWallet = payable(0x826ffcd1514588947ec0ba19d94bF2ec353af398); IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; mapping(address => bool) private _isExcludedFromFee; bool public tradingOpen = true; bool public inSwap = false; bool public swapEnabled = true; modifier lockTheSwap { inSwap = true; _; inSwap = false; } constructor() ERC20("Furie's Pepe", "FPEPE") { _mint(msg.sender, 420690000000000 * 10 ** decimals()); uniswapV2Router = IUniswapV2Router02(_uniswapV2Router); uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH()); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[marketingWallet] = true; _isExcludedFromFee[address(0xdead)] = true; } function transfer(address recipient, uint256 amount) public override returns (bool) { amount = transferTaxes(_msgSender(), recipient, amount); _transfer(_msgSender(), recipient, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { amount = transferTaxes(sender, recipient, amount); _transfer(sender, recipient, amount); _approve(sender, _msgSender(), allowance(sender, _msgSender()) - amount); return true; } function transferTaxes(address sender, address recipient, uint256 amount) private returns (uint256) { if (sender != owner() && recipient != owner()) { //Trade start check if (!tradingOpen) { require(sender == owner(), "TOKEN: This account cannot send tokens until trading is enabled"); } if(recipient != uniswapV2Pair && recipient != address(this) && recipient != address(uniswapV2Router)) { require(amount <= getMaxTxAmount(), "TOKEN: Max Transaction Limit"); } if(recipient != uniswapV2Pair && recipient != address(this) && recipient != address(uniswapV2Router)) { require(balanceOf(recipient) + amount < getMaxWalletAmount(), "TOKEN: Balance exceeds wallet size!"); } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= getSwapTokensAtAmount(); if(contractTokenBalance >= getMaxTxAmount()) { contractTokenBalance = getMaxTxAmount(); } if (canSwap && !inSwap && sender != uniswapV2Pair && swapEnabled && !_isExcludedFromFee[sender] && !_isExcludedFromFee[recipient]) { swapTokensForEth(contractTokenBalance); uint256 contractETHBalance = address(this).balance; if (contractETHBalance > 0) { sendETHToFee(contractETHBalance); } } uint256 taxAmount = 0; if ((_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) || (sender != uniswapV2Pair && recipient != uniswapV2Pair)) { } else { if(sender == uniswapV2Pair && recipient != address(uniswapV2Router)) { taxAmount = amount * purchaseTax / 100; } else if (recipient == uniswapV2Pair && sender != address(uniswapV2Router)) { taxAmount = amount * sellTax / 100; } if (taxAmount > 0) { _transfer(sender, address(this), taxAmount); amount = amount - taxAmount; } } } return amount; } function setMarketingWallet(address newWallet) external onlyOwner { marketingWallet = payable(newWallet); } function enableTrading() external onlyOwner { tradingOpen = true; } function swapTokensForEth(uint256 tokenAmount) private lockTheSwap { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function sendETHToFee(uint256 amount) private { marketingWallet.transfer(amount); } function manualSwap() external { require(_msgSender() == marketingWallet); uint256 contractTokenBalance = balanceOf(address(this)); swapTokensForEth(contractTokenBalance); } function manualSend() external { require(_msgSender() == marketingWallet); uint256 contractETHBalance = address(this).balance; sendETHToFee(contractETHBalance); } function toggleSwap (bool _swapEnabled) public onlyOwner { swapEnabled = _swapEnabled; } function getMaxWalletAmount() public view returns (uint256) { uint256 maxBalance = totalSupply() * MAX_WALLET_PERCENTAGE / 100; return maxBalance; } function setMaxWalletAmount(uint maxWalletAmount) external onlyOwner { require(maxWalletAmount <= 5, "Max wallet amount cannot be more than 5% of total supply"); MAX_WALLET_PERCENTAGE = maxWalletAmount; } function getMaxTxAmount() public view returns (uint256) { uint256 maxTxAmount = totalSupply() * MAX_TX_PERCENTAGE / 100; return maxTxAmount; } function setMaxTxAmount(uint maxTxAmount) external onlyOwner { require(maxTxAmount <= 2, "Max TX amount cannot be more than 2% of total supply"); MAX_TX_PERCENTAGE = maxTxAmount; } function getSwapTokensAtAmount() public view returns (uint256) { uint256 swapTokensAtAmount = totalSupply() * SWAP_TOKENS_AT_AMOUNT_PERCENTAGE / 100; return swapTokensAtAmount; } function adjustPurchaseTax(uint256 newPurchaseTax) external onlyOwner { require(newPurchaseTax <= 10, "Purchase tax cannot be more than 10%"); purchaseTax = newPurchaseTax; } function adjustSellTax(uint256 newSellTax) external onlyOwner { require(newSellTax <= 10, "Sell tax cannot be more than 10%"); sellTax = newSellTax; } function setSwapTokensAtAmount(uint swapTokensAtAmount) external onlyOwner { require(swapTokensAtAmount <= 5, "Swap tokens at amount cannot be more than 5% of total supply"); SWAP_TOKENS_AT_AMOUNT_PERCENTAGE = swapTokensAtAmount; } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":"_uniswapV2Router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPurchaseTax","type":"uint256"}],"name":"adjustPurchaseTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSellTax","type":"uint256"}],"name":"adjustSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getMaxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSwapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"purchaseTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapEnabled","type":"bool"}],"name":"toggleSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260016006556001600755737a250d5630b4cf539739df2c5dacb4c659f2488d600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060026009556002600a556001600b5573826ffcd1514588947ec0ba19d94bf2ec353af398600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff0219169083151502179055506001601060026101000a81548160ff0219169083151502179055503480156200012557600080fd5b506040518060400160405280600c81526020017f46757269652773205065706500000000000000000000000000000000000000008152506040518060400160405280600581526020017f46504550450000000000000000000000000000000000000000000000000000008152508160039081620001a3919062000af2565b508060049081620001b5919062000af2565b505050620001d8620001cc6200060060201b60201c565b6200060860201b60201c565b6200021b33620001ed620006ce60201b60201c565b600a620001fb919062000d69565b66017e9d8602b4006200020f919062000dba565b620006d760201b60201c565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000312919062000e6f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200039c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c2919062000e6f565b6040518363ffffffff1660e01b8152600401620003e192919062000eb2565b6020604051808303816000875af115801562000401573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000427919062000e6f565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f60006200047d6200084460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000fcb565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000749576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007409062000f40565b60405180910390fd5b6200075d600083836200086e60201b60201c565b806002600082825462000771919062000f62565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000824919062000fae565b60405180910390a362000840600083836200087360201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008fa57607f821691505b60208210810362000910576200090f620008b2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200097a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200093b565b6200098686836200093b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620009d3620009cd620009c7846200099e565b620009a8565b6200099e565b9050919050565b6000819050919050565b620009ef83620009b2565b62000a07620009fe82620009da565b84845462000948565b825550505050565b600090565b62000a1e62000a0f565b62000a2b818484620009e4565b505050565b5b8181101562000a535762000a4760008262000a14565b60018101905062000a31565b5050565b601f82111562000aa25762000a6c8162000916565b62000a77846200092b565b8101602085101562000a87578190505b62000a9f62000a96856200092b565b83018262000a30565b50505b505050565b600082821c905092915050565b600062000ac76000198460080262000aa7565b1980831691505092915050565b600062000ae2838362000ab4565b9150826002028217905092915050565b62000afd8262000878565b67ffffffffffffffff81111562000b195762000b1862000883565b5b62000b258254620008e1565b62000b3282828562000a57565b600060209050601f83116001811462000b6a576000841562000b55578287015190505b62000b61858262000ad4565b86555062000bd1565b601f19841662000b7a8662000916565b60005b8281101562000ba45784890151825560018201915060208501945060208101905062000b7d565b8683101562000bc4578489015162000bc0601f89168262000ab4565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000c675780860481111562000c3f5762000c3e62000bd9565b5b600185161562000c4f5780820291505b808102905062000c5f8562000c08565b945062000c1f565b94509492505050565b60008262000c82576001905062000d55565b8162000c92576000905062000d55565b816001811462000cab576002811462000cb65762000cec565b600191505062000d55565b60ff84111562000ccb5762000cca62000bd9565b5b8360020a91508482111562000ce55762000ce462000bd9565b5b5062000d55565b5060208310610133831016604e8410600b841016171562000d265782820a90508381111562000d205762000d1f62000bd9565b5b62000d55565b62000d35848484600162000c15565b9250905081840481111562000d4f5762000d4e62000bd9565b5b81810290505b9392505050565b600060ff82169050919050565b600062000d76826200099e565b915062000d838362000d5c565b925062000db27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000c70565b905092915050565b600062000dc7826200099e565b915062000dd4836200099e565b925082820262000de4816200099e565b9150828204841483151762000dfe5762000dfd62000bd9565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e378262000e0a565b9050919050565b62000e498162000e2a565b811462000e5557600080fd5b50565b60008151905062000e698162000e3e565b92915050565b60006020828403121562000e885762000e8762000e05565b5b600062000e988482850162000e58565b91505092915050565b62000eac8162000e2a565b82525050565b600060408201905062000ec9600083018562000ea1565b62000ed8602083018462000ea1565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f28601f8362000edf565b915062000f358262000ef0565b602082019050919050565b6000602082019050818103600083015262000f5b8162000f19565b9050919050565b600062000f6f826200099e565b915062000f7c836200099e565b925082820190508082111562000f975762000f9662000bd9565b5b92915050565b62000fa8816200099e565b82525050565b600060208201905062000fc5600083018462000f9d565b92915050565b6136f18062000fdb6000396000f3fe6080604052600436106102295760003560e01c806370a0823111610123578063a457c2d7116100ab578063dd62ed3e1161006f578063dd62ed3e146107e0578063ec28438a1461081d578063f2fde38b14610846578063f42938901461086f578063ffb54a991461088657610230565b8063a457c2d7146106e7578063a9059cbb14610724578063afa4f3b214610761578063cc1776d31461078a578063d8306786146107b557610230565b80637d508ef2116100f25780637d508ef2146106265780637f3c54a1146106515780638a8c523c1461067a5780638da5cb5b1461069157806395d89b41146106bc57610230565b806370a082311461057e578063715018a6146105bb57806375f0a874146105d257806379cc6790146105fd57610230565b806342966c68116101b15780635d098b38116101755780635d098b38146104ad5780635f684f4b146104d65780636d8aa8f8146104ff5780636d8b0527146105285780636ddd17131461055357610230565b806342966c68146103ec57806349bd5a5e146104155780634abdefd51461044057806351bc3c851461046b578063583e05681461048257610230565b806318160ddd116101f857806318160ddd146102f357806323b872dd1461031e57806327a14fc21461035b578063313ce5671461038457806339509351146103af57610230565b806306fdde0314610235578063095ea7b31461026057806309c95a1b1461029d5780631694505e146102c857610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a6108b1565b6040516102579190612539565b60405180910390f35b34801561026c57600080fd5b50610287600480360381019061028291906125f4565b610943565b604051610294919061264f565b60405180910390f35b3480156102a957600080fd5b506102b2610966565b6040516102bf9190612679565b60405180910390f35b3480156102d457600080fd5b506102dd610993565b6040516102ea91906126f3565b60405180910390f35b3480156102ff57600080fd5b506103086109b9565b6040516103159190612679565b60405180910390f35b34801561032a57600080fd5b506103456004803603810190610340919061270e565b6109c3565b604051610352919061264f565b60405180910390f35b34801561036757600080fd5b50610382600480360381019061037d9190612761565b610a15565b005b34801561039057600080fd5b50610399610a6b565b6040516103a691906127aa565b60405180910390f35b3480156103bb57600080fd5b506103d660048036038101906103d191906125f4565b610a74565b6040516103e3919061264f565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e9190612761565b610aab565b005b34801561042157600080fd5b5061042a610abf565b60405161043791906127d4565b60405180910390f35b34801561044c57600080fd5b50610455610ae5565b6040516104629190612679565b60405180910390f35b34801561047757600080fd5b50610480610aeb565b005b34801561048e57600080fd5b50610497610b65565b6040516104a491906127d4565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf91906127ef565b610b8b565b005b3480156104e257600080fd5b506104fd60048036038101906104f89190612761565b610bd7565b005b34801561050b57600080fd5b5061052660048036038101906105219190612848565b610c2d565b005b34801561053457600080fd5b5061053d610c52565b60405161054a9190612679565b60405180910390f35b34801561055f57600080fd5b50610568610c7f565b604051610575919061264f565b60405180910390f35b34801561058a57600080fd5b506105a560048036038101906105a091906127ef565b610c92565b6040516105b29190612679565b60405180910390f35b3480156105c757600080fd5b506105d0610cda565b005b3480156105de57600080fd5b506105e7610cee565b6040516105f49190612896565b60405180910390f35b34801561060957600080fd5b50610624600480360381019061061f91906125f4565b610d14565b005b34801561063257600080fd5b5061063b610d34565b6040516106489190612679565b60405180910390f35b34801561065d57600080fd5b5061067860048036038101906106739190612761565b610d61565b005b34801561068657600080fd5b5061068f610db7565b005b34801561069d57600080fd5b506106a6610ddc565b6040516106b391906127d4565b60405180910390f35b3480156106c857600080fd5b506106d1610e06565b6040516106de9190612539565b60405180910390f35b3480156106f357600080fd5b5061070e600480360381019061070991906125f4565b610e98565b60405161071b919061264f565b60405180910390f35b34801561073057600080fd5b5061074b600480360381019061074691906125f4565b610f0f565b604051610758919061264f565b60405180910390f35b34801561076d57600080fd5b5061078860048036038101906107839190612761565b610f41565b005b34801561079657600080fd5b5061079f610f97565b6040516107ac9190612679565b60405180910390f35b3480156107c157600080fd5b506107ca610f9d565b6040516107d7919061264f565b60405180910390f35b3480156107ec57600080fd5b50610807600480360381019061080291906128b1565b610fb0565b6040516108149190612679565b60405180910390f35b34801561082957600080fd5b50610844600480360381019061083f9190612761565b611037565b005b34801561085257600080fd5b5061086d600480360381019061086891906127ef565b61108d565b005b34801561087b57600080fd5b50610884611110565b005b34801561089257600080fd5b5061089b611182565b6040516108a8919061264f565b60405180910390f35b6060600380546108c090612920565b80601f01602080910402602001604051908101604052809291908181526020018280546108ec90612920565b80156109395780601f1061090e57610100808354040283529160200191610939565b820191906000526020600020905b81548152906001019060200180831161091c57829003601f168201915b5050505050905090565b60008061094e611195565b905061095b81858561119d565b600191505092915050565b60008060646009546109766109b9565b6109809190612980565b61098a91906129f1565b90508091505090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60006109d0848484611366565b91506109dd848484611ba7565b610a0a846109e9611195565b846109fb886109f6611195565b610fb0565b610a059190612a22565b61119d565b600190509392505050565b610a1d611e1d565b6005811115610a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5890612ac8565b60405180910390fd5b8060098190555050565b60006012905090565b600080610a7f611195565b9050610aa0818585610a918589610fb0565b610a9b9190612ae8565b61119d565b600191505092915050565b610abc610ab6611195565b82611e9b565b50565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610b2c611195565b73ffffffffffffffffffffffffffffffffffffffff1614610b4c57600080fd5b6000610b5730610c92565b9050610b6281612068565b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b93611e1d565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610bdf611e1d565b600a811115610c23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1a90612b8e565b60405180910390fd5b8060068190555050565b610c35611e1d565b80601060026101000a81548160ff02191690831515021790555050565b6000806064600a54610c626109b9565b610c6c9190612980565b610c7691906129f1565b90508091505090565b601060029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ce2611e1d565b610cec60006122e1565b565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d2682610d20611195565b836123a7565b610d308282611e9b565b5050565b6000806064600b54610d446109b9565b610d4e9190612980565b610d5891906129f1565b90508091505090565b610d69611e1d565b600a811115610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da490612bfa565b60405180910390fd5b8060078190555050565b610dbf611e1d565b6001601060006101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e1590612920565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4190612920565b8015610e8e5780601f10610e6357610100808354040283529160200191610e8e565b820191906000526020600020905b815481529060010190602001808311610e7157829003601f168201915b5050505050905090565b600080610ea3611195565b90506000610eb18286610fb0565b905083811015610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed90612c8c565b60405180910390fd5b610f03828686840361119d565b60019250505092915050565b6000610f23610f1c611195565b8484611366565b9150610f37610f30611195565b8484611ba7565b6001905092915050565b610f49611e1d565b6005811115610f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8490612d1e565b60405180910390fd5b80600b8190555050565b60075481565b601060019054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61103f611e1d565b6002811115611083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107a90612db0565b60405180910390fd5b80600a8190555050565b611095611e1d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb90612e42565b60405180910390fd5b61110d816122e1565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611151611195565b73ffffffffffffffffffffffffffffffffffffffff161461117157600080fd5b600047905061117f81612433565b50565b601060009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361120c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120390612ed4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361127b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127290612f66565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516113599190612679565b60405180910390a3505050565b6000611370610ddc565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156113de57506113ae610ddc565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611b9d57601060009054906101000a900460ff1661146d576113ff610ddc565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461146c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146390612ff8565b60405180910390fd5b5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156114f757503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156115515750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156115a15761155e610c52565b8211156115a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159790613064565b60405180910390fd5b5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561162b57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156116855750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156116e757611692610966565b8261169c85610c92565b6116a69190612ae8565b106116e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dd906130f6565b60405180910390fd5b5b60006116f230610c92565b905060006116fe610d34565b821015905061170b610c52565b821061171c57611719610c52565b91505b8080156117365750601060019054906101000a900460ff16155b80156117905750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b80156117a85750601060029054906101000a900460ff165b80156117fe5750600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156118545750600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561187c5761186282612068565b6000479050600081111561187a5761187981612433565b5b505b6000600f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061191f5750600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806119d25750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141580156119d15750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b5b611b9957600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16148015611a815750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b15611aa757606460065486611a969190612980565b611aa091906129f1565b9050611b75565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148015611b525750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b15611b7457606460075486611b679190612980565b611b7191906129f1565b90505b5b6000811115611b9857611b89873083611ba7565b8085611b959190612a22565b94505b5b5050505b8190509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0d90613188565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7c9061321a565b60405180910390fd5b611c9083838361249f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0d906132ac565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e049190612679565b60405180910390a3611e178484846124a4565b50505050565b611e25611195565b73ffffffffffffffffffffffffffffffffffffffff16611e43610ddc565b73ffffffffffffffffffffffffffffffffffffffff1614611e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9090613318565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f01906133aa565b60405180910390fd5b611f168260008361249f565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f939061343c565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161204f9190612679565b60405180910390a3612063836000846124a4565b505050565b6001601060016101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156120a05761209f61345c565b5b6040519080825280602002602001820160405280156120ce5781602001602082028036833780820191505090505b50905030816000815181106120e6576120e561348b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561218d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b191906134cf565b816001815181106121c5576121c461348b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061222c30600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461119d565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016122909594939291906135f5565b600060405180830381600087803b1580156122aa57600080fd5b505af11580156122be573d6000803e3d6000fd5b50505050506000601060016101000a81548160ff02191690831515021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006123b38484610fb0565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461242d578181101561241f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124169061369b565b60405180910390fd5b61242c848484840361119d565b5b50505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561249b573d6000803e3d6000fd5b5050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156124e35780820151818401526020810190506124c8565b60008484015250505050565b6000601f19601f8301169050919050565b600061250b826124a9565b61251581856124b4565b93506125258185602086016124c5565b61252e816124ef565b840191505092915050565b600060208201905081810360008301526125538184612500565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061258b82612560565b9050919050565b61259b81612580565b81146125a657600080fd5b50565b6000813590506125b881612592565b92915050565b6000819050919050565b6125d1816125be565b81146125dc57600080fd5b50565b6000813590506125ee816125c8565b92915050565b6000806040838503121561260b5761260a61255b565b5b6000612619858286016125a9565b925050602061262a858286016125df565b9150509250929050565b60008115159050919050565b61264981612634565b82525050565b60006020820190506126646000830184612640565b92915050565b612673816125be565b82525050565b600060208201905061268e600083018461266a565b92915050565b6000819050919050565b60006126b96126b46126af84612560565b612694565b612560565b9050919050565b60006126cb8261269e565b9050919050565b60006126dd826126c0565b9050919050565b6126ed816126d2565b82525050565b600060208201905061270860008301846126e4565b92915050565b6000806000606084860312156127275761272661255b565b5b6000612735868287016125a9565b9350506020612746868287016125a9565b9250506040612757868287016125df565b9150509250925092565b6000602082840312156127775761277661255b565b5b6000612785848285016125df565b91505092915050565b600060ff82169050919050565b6127a48161278e565b82525050565b60006020820190506127bf600083018461279b565b92915050565b6127ce81612580565b82525050565b60006020820190506127e960008301846127c5565b92915050565b6000602082840312156128055761280461255b565b5b6000612813848285016125a9565b91505092915050565b61282581612634565b811461283057600080fd5b50565b6000813590506128428161281c565b92915050565b60006020828403121561285e5761285d61255b565b5b600061286c84828501612833565b91505092915050565b600061288082612560565b9050919050565b61289081612875565b82525050565b60006020820190506128ab6000830184612887565b92915050565b600080604083850312156128c8576128c761255b565b5b60006128d6858286016125a9565b92505060206128e7858286016125a9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061293857607f821691505b60208210810361294b5761294a6128f1565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061298b826125be565b9150612996836125be565b92508282026129a4816125be565b915082820484148315176129bb576129ba612951565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006129fc826125be565b9150612a07836125be565b925082612a1757612a166129c2565b5b828204905092915050565b6000612a2d826125be565b9150612a38836125be565b9250828203905081811115612a5057612a4f612951565b5b92915050565b7f4d61782077616c6c657420616d6f756e742063616e6e6f74206265206d6f726560008201527f207468616e203525206f6620746f74616c20737570706c790000000000000000602082015250565b6000612ab26038836124b4565b9150612abd82612a56565b604082019050919050565b60006020820190508181036000830152612ae181612aa5565b9050919050565b6000612af3826125be565b9150612afe836125be565b9250828201905080821115612b1657612b15612951565b5b92915050565b7f5075726368617365207461782063616e6e6f74206265206d6f7265207468616e60008201527f2031302500000000000000000000000000000000000000000000000000000000602082015250565b6000612b786024836124b4565b9150612b8382612b1c565b604082019050919050565b60006020820190508181036000830152612ba781612b6b565b9050919050565b7f53656c6c207461782063616e6e6f74206265206d6f7265207468616e20313025600082015250565b6000612be46020836124b4565b9150612bef82612bae565b602082019050919050565b60006020820190508181036000830152612c1381612bd7565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612c766025836124b4565b9150612c8182612c1a565b604082019050919050565b60006020820190508181036000830152612ca581612c69565b9050919050565b7f5377617020746f6b656e7320617420616d6f756e742063616e6e6f742062652060008201527f6d6f7265207468616e203525206f6620746f74616c20737570706c7900000000602082015250565b6000612d08603c836124b4565b9150612d1382612cac565b604082019050919050565b60006020820190508181036000830152612d3781612cfb565b9050919050565b7f4d617820545820616d6f756e742063616e6e6f74206265206d6f72652074686160008201527f6e203225206f6620746f74616c20737570706c79000000000000000000000000602082015250565b6000612d9a6034836124b4565b9150612da582612d3e565b604082019050919050565b60006020820190508181036000830152612dc981612d8d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612e2c6026836124b4565b9150612e3782612dd0565b604082019050919050565b60006020820190508181036000830152612e5b81612e1f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612ebe6024836124b4565b9150612ec982612e62565b604082019050919050565b60006020820190508181036000830152612eed81612eb1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f506022836124b4565b9150612f5b82612ef4565b604082019050919050565b60006020820190508181036000830152612f7f81612f43565b9050919050565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b6000612fe2603f836124b4565b9150612fed82612f86565b604082019050919050565b6000602082019050818103600083015261301181612fd5565b9050919050565b7f544f4b454e3a204d6178205472616e73616374696f6e204c696d697400000000600082015250565b600061304e601c836124b4565b915061305982613018565b602082019050919050565b6000602082019050818103600083015261307d81613041565b9050919050565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b60006130e06023836124b4565b91506130eb82613084565b604082019050919050565b6000602082019050818103600083015261310f816130d3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006131726025836124b4565b915061317d82613116565b604082019050919050565b600060208201905081810360008301526131a181613165565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006132046023836124b4565b915061320f826131a8565b604082019050919050565b60006020820190508181036000830152613233816131f7565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006132966026836124b4565b91506132a18261323a565b604082019050919050565b600060208201905081810360008301526132c581613289565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006133026020836124b4565b915061330d826132cc565b602082019050919050565b60006020820190508181036000830152613331816132f5565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006133946021836124b4565b915061339f82613338565b604082019050919050565b600060208201905081810360008301526133c381613387565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006134266022836124b4565b9150613431826133ca565b604082019050919050565b6000602082019050818103600083015261345581613419565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506134c981612592565b92915050565b6000602082840312156134e5576134e461255b565b5b60006134f3848285016134ba565b91505092915050565b6000819050919050565b600061352161351c613517846134fc565b612694565b6125be565b9050919050565b61353181613506565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61356c81612580565b82525050565b600061357e8383613563565b60208301905092915050565b6000602082019050919050565b60006135a282613537565b6135ac8185613542565b93506135b783613553565b8060005b838110156135e85781516135cf8882613572565b97506135da8361358a565b9250506001810190506135bb565b5085935050505092915050565b600060a08201905061360a600083018861266a565b6136176020830187613528565b81810360408301526136298186613597565b905061363860608301856127c5565b613645608083018461266a565b9695505050505050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613685601d836124b4565b91506136908261364f565b602082019050919050565b600060208201905081810360008301526136b481613678565b905091905056fea2646970667358221220d119059af8c9377e207c5ea9a6ef73aadc879af7a44d4cebc560f3613c1d187a64736f6c63430008120033
Deployed Bytecode
0x6080604052600436106102295760003560e01c806370a0823111610123578063a457c2d7116100ab578063dd62ed3e1161006f578063dd62ed3e146107e0578063ec28438a1461081d578063f2fde38b14610846578063f42938901461086f578063ffb54a991461088657610230565b8063a457c2d7146106e7578063a9059cbb14610724578063afa4f3b214610761578063cc1776d31461078a578063d8306786146107b557610230565b80637d508ef2116100f25780637d508ef2146106265780637f3c54a1146106515780638a8c523c1461067a5780638da5cb5b1461069157806395d89b41146106bc57610230565b806370a082311461057e578063715018a6146105bb57806375f0a874146105d257806379cc6790146105fd57610230565b806342966c68116101b15780635d098b38116101755780635d098b38146104ad5780635f684f4b146104d65780636d8aa8f8146104ff5780636d8b0527146105285780636ddd17131461055357610230565b806342966c68146103ec57806349bd5a5e146104155780634abdefd51461044057806351bc3c851461046b578063583e05681461048257610230565b806318160ddd116101f857806318160ddd146102f357806323b872dd1461031e57806327a14fc21461035b578063313ce5671461038457806339509351146103af57610230565b806306fdde0314610235578063095ea7b31461026057806309c95a1b1461029d5780631694505e146102c857610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a6108b1565b6040516102579190612539565b60405180910390f35b34801561026c57600080fd5b50610287600480360381019061028291906125f4565b610943565b604051610294919061264f565b60405180910390f35b3480156102a957600080fd5b506102b2610966565b6040516102bf9190612679565b60405180910390f35b3480156102d457600080fd5b506102dd610993565b6040516102ea91906126f3565b60405180910390f35b3480156102ff57600080fd5b506103086109b9565b6040516103159190612679565b60405180910390f35b34801561032a57600080fd5b506103456004803603810190610340919061270e565b6109c3565b604051610352919061264f565b60405180910390f35b34801561036757600080fd5b50610382600480360381019061037d9190612761565b610a15565b005b34801561039057600080fd5b50610399610a6b565b6040516103a691906127aa565b60405180910390f35b3480156103bb57600080fd5b506103d660048036038101906103d191906125f4565b610a74565b6040516103e3919061264f565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e9190612761565b610aab565b005b34801561042157600080fd5b5061042a610abf565b60405161043791906127d4565b60405180910390f35b34801561044c57600080fd5b50610455610ae5565b6040516104629190612679565b60405180910390f35b34801561047757600080fd5b50610480610aeb565b005b34801561048e57600080fd5b50610497610b65565b6040516104a491906127d4565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf91906127ef565b610b8b565b005b3480156104e257600080fd5b506104fd60048036038101906104f89190612761565b610bd7565b005b34801561050b57600080fd5b5061052660048036038101906105219190612848565b610c2d565b005b34801561053457600080fd5b5061053d610c52565b60405161054a9190612679565b60405180910390f35b34801561055f57600080fd5b50610568610c7f565b604051610575919061264f565b60405180910390f35b34801561058a57600080fd5b506105a560048036038101906105a091906127ef565b610c92565b6040516105b29190612679565b60405180910390f35b3480156105c757600080fd5b506105d0610cda565b005b3480156105de57600080fd5b506105e7610cee565b6040516105f49190612896565b60405180910390f35b34801561060957600080fd5b50610624600480360381019061061f91906125f4565b610d14565b005b34801561063257600080fd5b5061063b610d34565b6040516106489190612679565b60405180910390f35b34801561065d57600080fd5b5061067860048036038101906106739190612761565b610d61565b005b34801561068657600080fd5b5061068f610db7565b005b34801561069d57600080fd5b506106a6610ddc565b6040516106b391906127d4565b60405180910390f35b3480156106c857600080fd5b506106d1610e06565b6040516106de9190612539565b60405180910390f35b3480156106f357600080fd5b5061070e600480360381019061070991906125f4565b610e98565b60405161071b919061264f565b60405180910390f35b34801561073057600080fd5b5061074b600480360381019061074691906125f4565b610f0f565b604051610758919061264f565b60405180910390f35b34801561076d57600080fd5b5061078860048036038101906107839190612761565b610f41565b005b34801561079657600080fd5b5061079f610f97565b6040516107ac9190612679565b60405180910390f35b3480156107c157600080fd5b506107ca610f9d565b6040516107d7919061264f565b60405180910390f35b3480156107ec57600080fd5b50610807600480360381019061080291906128b1565b610fb0565b6040516108149190612679565b60405180910390f35b34801561082957600080fd5b50610844600480360381019061083f9190612761565b611037565b005b34801561085257600080fd5b5061086d600480360381019061086891906127ef565b61108d565b005b34801561087b57600080fd5b50610884611110565b005b34801561089257600080fd5b5061089b611182565b6040516108a8919061264f565b60405180910390f35b6060600380546108c090612920565b80601f01602080910402602001604051908101604052809291908181526020018280546108ec90612920565b80156109395780601f1061090e57610100808354040283529160200191610939565b820191906000526020600020905b81548152906001019060200180831161091c57829003601f168201915b5050505050905090565b60008061094e611195565b905061095b81858561119d565b600191505092915050565b60008060646009546109766109b9565b6109809190612980565b61098a91906129f1565b90508091505090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60006109d0848484611366565b91506109dd848484611ba7565b610a0a846109e9611195565b846109fb886109f6611195565b610fb0565b610a059190612a22565b61119d565b600190509392505050565b610a1d611e1d565b6005811115610a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5890612ac8565b60405180910390fd5b8060098190555050565b60006012905090565b600080610a7f611195565b9050610aa0818585610a918589610fb0565b610a9b9190612ae8565b61119d565b600191505092915050565b610abc610ab6611195565b82611e9b565b50565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610b2c611195565b73ffffffffffffffffffffffffffffffffffffffff1614610b4c57600080fd5b6000610b5730610c92565b9050610b6281612068565b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b93611e1d565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610bdf611e1d565b600a811115610c23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1a90612b8e565b60405180910390fd5b8060068190555050565b610c35611e1d565b80601060026101000a81548160ff02191690831515021790555050565b6000806064600a54610c626109b9565b610c6c9190612980565b610c7691906129f1565b90508091505090565b601060029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ce2611e1d565b610cec60006122e1565b565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d2682610d20611195565b836123a7565b610d308282611e9b565b5050565b6000806064600b54610d446109b9565b610d4e9190612980565b610d5891906129f1565b90508091505090565b610d69611e1d565b600a811115610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da490612bfa565b60405180910390fd5b8060078190555050565b610dbf611e1d565b6001601060006101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e1590612920565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4190612920565b8015610e8e5780601f10610e6357610100808354040283529160200191610e8e565b820191906000526020600020905b815481529060010190602001808311610e7157829003601f168201915b5050505050905090565b600080610ea3611195565b90506000610eb18286610fb0565b905083811015610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed90612c8c565b60405180910390fd5b610f03828686840361119d565b60019250505092915050565b6000610f23610f1c611195565b8484611366565b9150610f37610f30611195565b8484611ba7565b6001905092915050565b610f49611e1d565b6005811115610f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8490612d1e565b60405180910390fd5b80600b8190555050565b60075481565b601060019054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61103f611e1d565b6002811115611083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107a90612db0565b60405180910390fd5b80600a8190555050565b611095611e1d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb90612e42565b60405180910390fd5b61110d816122e1565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611151611195565b73ffffffffffffffffffffffffffffffffffffffff161461117157600080fd5b600047905061117f81612433565b50565b601060009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361120c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120390612ed4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361127b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127290612f66565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516113599190612679565b60405180910390a3505050565b6000611370610ddc565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156113de57506113ae610ddc565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611b9d57601060009054906101000a900460ff1661146d576113ff610ddc565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461146c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146390612ff8565b60405180910390fd5b5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156114f757503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156115515750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156115a15761155e610c52565b8211156115a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159790613064565b60405180910390fd5b5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561162b57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156116855750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156116e757611692610966565b8261169c85610c92565b6116a69190612ae8565b106116e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dd906130f6565b60405180910390fd5b5b60006116f230610c92565b905060006116fe610d34565b821015905061170b610c52565b821061171c57611719610c52565b91505b8080156117365750601060019054906101000a900460ff16155b80156117905750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b80156117a85750601060029054906101000a900460ff165b80156117fe5750600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156118545750600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561187c5761186282612068565b6000479050600081111561187a5761187981612433565b5b505b6000600f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061191f5750600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806119d25750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141580156119d15750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b5b611b9957600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16148015611a815750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b15611aa757606460065486611a969190612980565b611aa091906129f1565b9050611b75565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148015611b525750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b15611b7457606460075486611b679190612980565b611b7191906129f1565b90505b5b6000811115611b9857611b89873083611ba7565b8085611b959190612a22565b94505b5b5050505b8190509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0d90613188565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7c9061321a565b60405180910390fd5b611c9083838361249f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0d906132ac565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e049190612679565b60405180910390a3611e178484846124a4565b50505050565b611e25611195565b73ffffffffffffffffffffffffffffffffffffffff16611e43610ddc565b73ffffffffffffffffffffffffffffffffffffffff1614611e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9090613318565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f01906133aa565b60405180910390fd5b611f168260008361249f565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f939061343c565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161204f9190612679565b60405180910390a3612063836000846124a4565b505050565b6001601060016101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156120a05761209f61345c565b5b6040519080825280602002602001820160405280156120ce5781602001602082028036833780820191505090505b50905030816000815181106120e6576120e561348b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561218d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b191906134cf565b816001815181106121c5576121c461348b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061222c30600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461119d565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016122909594939291906135f5565b600060405180830381600087803b1580156122aa57600080fd5b505af11580156122be573d6000803e3d6000fd5b50505050506000601060016101000a81548160ff02191690831515021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006123b38484610fb0565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461242d578181101561241f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124169061369b565b60405180910390fd5b61242c848484840361119d565b5b50505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561249b573d6000803e3d6000fd5b5050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156124e35780820151818401526020810190506124c8565b60008484015250505050565b6000601f19601f8301169050919050565b600061250b826124a9565b61251581856124b4565b93506125258185602086016124c5565b61252e816124ef565b840191505092915050565b600060208201905081810360008301526125538184612500565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061258b82612560565b9050919050565b61259b81612580565b81146125a657600080fd5b50565b6000813590506125b881612592565b92915050565b6000819050919050565b6125d1816125be565b81146125dc57600080fd5b50565b6000813590506125ee816125c8565b92915050565b6000806040838503121561260b5761260a61255b565b5b6000612619858286016125a9565b925050602061262a858286016125df565b9150509250929050565b60008115159050919050565b61264981612634565b82525050565b60006020820190506126646000830184612640565b92915050565b612673816125be565b82525050565b600060208201905061268e600083018461266a565b92915050565b6000819050919050565b60006126b96126b46126af84612560565b612694565b612560565b9050919050565b60006126cb8261269e565b9050919050565b60006126dd826126c0565b9050919050565b6126ed816126d2565b82525050565b600060208201905061270860008301846126e4565b92915050565b6000806000606084860312156127275761272661255b565b5b6000612735868287016125a9565b9350506020612746868287016125a9565b9250506040612757868287016125df565b9150509250925092565b6000602082840312156127775761277661255b565b5b6000612785848285016125df565b91505092915050565b600060ff82169050919050565b6127a48161278e565b82525050565b60006020820190506127bf600083018461279b565b92915050565b6127ce81612580565b82525050565b60006020820190506127e960008301846127c5565b92915050565b6000602082840312156128055761280461255b565b5b6000612813848285016125a9565b91505092915050565b61282581612634565b811461283057600080fd5b50565b6000813590506128428161281c565b92915050565b60006020828403121561285e5761285d61255b565b5b600061286c84828501612833565b91505092915050565b600061288082612560565b9050919050565b61289081612875565b82525050565b60006020820190506128ab6000830184612887565b92915050565b600080604083850312156128c8576128c761255b565b5b60006128d6858286016125a9565b92505060206128e7858286016125a9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061293857607f821691505b60208210810361294b5761294a6128f1565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061298b826125be565b9150612996836125be565b92508282026129a4816125be565b915082820484148315176129bb576129ba612951565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006129fc826125be565b9150612a07836125be565b925082612a1757612a166129c2565b5b828204905092915050565b6000612a2d826125be565b9150612a38836125be565b9250828203905081811115612a5057612a4f612951565b5b92915050565b7f4d61782077616c6c657420616d6f756e742063616e6e6f74206265206d6f726560008201527f207468616e203525206f6620746f74616c20737570706c790000000000000000602082015250565b6000612ab26038836124b4565b9150612abd82612a56565b604082019050919050565b60006020820190508181036000830152612ae181612aa5565b9050919050565b6000612af3826125be565b9150612afe836125be565b9250828201905080821115612b1657612b15612951565b5b92915050565b7f5075726368617365207461782063616e6e6f74206265206d6f7265207468616e60008201527f2031302500000000000000000000000000000000000000000000000000000000602082015250565b6000612b786024836124b4565b9150612b8382612b1c565b604082019050919050565b60006020820190508181036000830152612ba781612b6b565b9050919050565b7f53656c6c207461782063616e6e6f74206265206d6f7265207468616e20313025600082015250565b6000612be46020836124b4565b9150612bef82612bae565b602082019050919050565b60006020820190508181036000830152612c1381612bd7565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612c766025836124b4565b9150612c8182612c1a565b604082019050919050565b60006020820190508181036000830152612ca581612c69565b9050919050565b7f5377617020746f6b656e7320617420616d6f756e742063616e6e6f742062652060008201527f6d6f7265207468616e203525206f6620746f74616c20737570706c7900000000602082015250565b6000612d08603c836124b4565b9150612d1382612cac565b604082019050919050565b60006020820190508181036000830152612d3781612cfb565b9050919050565b7f4d617820545820616d6f756e742063616e6e6f74206265206d6f72652074686160008201527f6e203225206f6620746f74616c20737570706c79000000000000000000000000602082015250565b6000612d9a6034836124b4565b9150612da582612d3e565b604082019050919050565b60006020820190508181036000830152612dc981612d8d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612e2c6026836124b4565b9150612e3782612dd0565b604082019050919050565b60006020820190508181036000830152612e5b81612e1f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612ebe6024836124b4565b9150612ec982612e62565b604082019050919050565b60006020820190508181036000830152612eed81612eb1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f506022836124b4565b9150612f5b82612ef4565b604082019050919050565b60006020820190508181036000830152612f7f81612f43565b9050919050565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b6000612fe2603f836124b4565b9150612fed82612f86565b604082019050919050565b6000602082019050818103600083015261301181612fd5565b9050919050565b7f544f4b454e3a204d6178205472616e73616374696f6e204c696d697400000000600082015250565b600061304e601c836124b4565b915061305982613018565b602082019050919050565b6000602082019050818103600083015261307d81613041565b9050919050565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b60006130e06023836124b4565b91506130eb82613084565b604082019050919050565b6000602082019050818103600083015261310f816130d3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006131726025836124b4565b915061317d82613116565b604082019050919050565b600060208201905081810360008301526131a181613165565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006132046023836124b4565b915061320f826131a8565b604082019050919050565b60006020820190508181036000830152613233816131f7565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006132966026836124b4565b91506132a18261323a565b604082019050919050565b600060208201905081810360008301526132c581613289565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006133026020836124b4565b915061330d826132cc565b602082019050919050565b60006020820190508181036000830152613331816132f5565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006133946021836124b4565b915061339f82613338565b604082019050919050565b600060208201905081810360008301526133c381613387565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006134266022836124b4565b9150613431826133ca565b604082019050919050565b6000602082019050818103600083015261345581613419565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506134c981612592565b92915050565b6000602082840312156134e5576134e461255b565b5b60006134f3848285016134ba565b91505092915050565b6000819050919050565b600061352161351c613517846134fc565b612694565b6125be565b9050919050565b61353181613506565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61356c81612580565b82525050565b600061357e8383613563565b60208301905092915050565b6000602082019050919050565b60006135a282613537565b6135ac8185613542565b93506135b783613553565b8060005b838110156135e85781516135cf8882613572565b97506135da8361358a565b9250506001810190506135bb565b5085935050505092915050565b600060a08201905061360a600083018861266a565b6136176020830187613528565b81810360408301526136298186613597565b905061363860608301856127c5565b613645608083018461266a565b9695505050505050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613685601d836124b4565b91506136908261364f565b602082019050919050565b600060208201905081810360008301526136b481613678565b905091905056fea2646970667358221220d119059af8c9377e207c5ea9a6ef73aadc879af7a44d4cebc560f3613c1d187a64736f6c63430008120033
Deployed Bytecode Sourcemap
30544:7201:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17954:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20305:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36058:171;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30990:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19074:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32094:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36237:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18916:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21790:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29725:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31038:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30604:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35533:205;;;;;;;;;;;;;:::i;:::-;;30674:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34719:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37065:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35948:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36472:165;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31203:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19245:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11379:103;;;;;;;;;;;;;:::i;:::-;;30891:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30135:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36856:201;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37270:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34848:81;;;;;;;;;;;;;:::i;:::-;;10731:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18173:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22531:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31853:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37451:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30641:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31170;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19834:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36645:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11637:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35746:194;;;;;;;;;;;;;:::i;:::-;;31133:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17954:100;18008:13;18041:5;18034:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17954:100;:::o;20305:201::-;20388:4;20405:13;20421:12;:10;:12::i;:::-;20405:28;;20444:32;20453:5;20460:7;20469:6;20444:8;:32::i;:::-;20494:4;20487:11;;;20305:201;;;;:::o;36058:171::-;36109:7;36129:18;36190:3;36166:21;;36150:13;:11;:13::i;:::-;:37;;;;:::i;:::-;:43;;;;:::i;:::-;36129:64;;36211:10;36204:17;;;36058:171;:::o;30990:41::-;;;;;;;;;;;;;:::o;19074:108::-;19135:7;19162:12;;19155:19;;19074:108;:::o;32094:324::-;32192:4;32218:40;32232:6;32240:9;32251:6;32218:13;:40::i;:::-;32209:49;;32269:36;32279:6;32287:9;32298:6;32269:9;:36::i;:::-;32316:72;32325:6;32333:12;:10;:12::i;:::-;32381:6;32347:31;32357:6;32365:12;:10;:12::i;:::-;32347:9;:31::i;:::-;:40;;;;:::i;:::-;32316:8;:72::i;:::-;32406:4;32399:11;;32094:324;;;;;:::o;36237:227::-;10617:13;:11;:13::i;:::-;36344:1:::1;36325:15;:20;;36317:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;36441:15;36417:21;:39;;;;36237:227:::0;:::o;18916:93::-;18974:5;18999:2;18992:9;;18916:93;:::o;21790:238::-;21878:4;21895:13;21911:12;:10;:12::i;:::-;21895:28;;21934:64;21943:5;21950:7;21987:10;21959:25;21969:5;21976:7;21959:9;:25::i;:::-;:38;;;;:::i;:::-;21934:8;:64::i;:::-;22016:4;22009:11;;;21790:238;;;;:::o;29725:91::-;29781:27;29787:12;:10;:12::i;:::-;29801:6;29781:5;:27::i;:::-;29725:91;:::o;31038:28::-;;;;;;;;;;;;;:::o;30604:30::-;;;;:::o;35533:205::-;35599:15;;;;;;;;;;;35583:31;;:12;:10;:12::i;:::-;:31;;;35575:40;;;;;;35626:28;35657:24;35675:4;35657:9;:24::i;:::-;35626:55;;35692:38;35709:20;35692:16;:38::i;:::-;35564:174;35533:205::o;30674:76::-;;;;;;;;;;;;;:::o;34719:121::-;10617:13;:11;:13::i;:::-;34822:9:::1;34796:15;;:36;;;;;;;;;;;;;;;;;;34719:121:::0;:::o;37065:197::-;10617:13;:11;:13::i;:::-;37172:2:::1;37154:14;:20;;37146:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;37240:14;37226:11;:28;;;;37065:197:::0;:::o;35948:102::-;10617:13;:11;:13::i;:::-;36030:12:::1;36016:11;;:26;;;;;;;;;;;;;;;;;;35948:102:::0;:::o;36472:165::-;36519:7;36539:19;36597:3;36577:17;;36561:13;:11;:13::i;:::-;:33;;;;:::i;:::-;:39;;;;:::i;:::-;36539:61;;36618:11;36611:18;;;36472:165;:::o;31203:30::-;;;;;;;;;;;;;:::o;19245:127::-;19319:7;19346:9;:18;19356:7;19346:18;;;;;;;;;;;;;;;;19339:25;;19245:127;;;:::o;11379:103::-;10617:13;:11;:13::i;:::-;11444:30:::1;11471:1;11444:18;:30::i;:::-;11379:103::o:0;30891:92::-;;;;;;;;;;;;;:::o;30135:164::-;30212:46;30228:7;30237:12;:10;:12::i;:::-;30251:6;30212:15;:46::i;:::-;30269:22;30275:7;30284:6;30269:5;:22::i;:::-;30135:164;;:::o;36856:201::-;36910:7;36930:26;37010:3;36975:32;;36959:13;:11;:13::i;:::-;:48;;;;:::i;:::-;:54;;;;:::i;:::-;36930:83;;37031:18;37024:25;;;36856:201;:::o;37270:173::-;10617:13;:11;:13::i;:::-;37365:2:::1;37351:10;:16;;37343:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37425:10;37415:7;:20;;;;37270:173:::0;:::o;34848:81::-;10617:13;:11;:13::i;:::-;34917:4:::1;34903:11;;:18;;;;;;;;;;;;;;;;;;34848:81::o:0;10731:87::-;10777:7;10804:6;;;;;;;;;;;10797:13;;10731:87;:::o;18173:104::-;18229:13;18262:7;18255:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18173:104;:::o;22531:436::-;22624:4;22641:13;22657:12;:10;:12::i;:::-;22641:28;;22680:24;22707:25;22717:5;22724:7;22707:9;:25::i;:::-;22680:52;;22771:15;22751:16;:35;;22743:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;22864:60;22873:5;22880:7;22908:15;22889:16;:34;22864:8;:60::i;:::-;22955:4;22948:11;;;;22531:436;;;;:::o;31853:233::-;31931:4;31957:46;31971:12;:10;:12::i;:::-;31985:9;31996:6;31957:13;:46::i;:::-;31948:55;;32014:42;32024:12;:10;:12::i;:::-;32038:9;32049:6;32014:9;:42::i;:::-;32074:4;32067:11;;31853:233;;;;:::o;37451:254::-;10617:13;:11;:13::i;:::-;37567:1:::1;37545:18;:23;;37537:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;37679:18;37644:32;:53;;;;37451:254:::0;:::o;30641:26::-;;;;:::o;31170:::-;;;;;;;;;;;;;:::o;19834:151::-;19923:7;19950:11;:18;19962:5;19950:18;;;;;;;;;;;;;;;:27;19969:7;19950:27;;;;;;;;;;;;;;;;19943:34;;19834:151;;;;:::o;36645:203::-;10617:13;:11;:13::i;:::-;36740:1:::1;36725:11;:16;;36717:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36829:11;36809:17;:31;;;;36645:203:::0;:::o;11637:201::-;10617:13;:11;:13::i;:::-;11746:1:::1;11726:22;;:8;:22;;::::0;11718:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11802:28;11821:8;11802:18;:28::i;:::-;11637:201:::0;:::o;35746:194::-;35812:15;;;;;;;;;;;35796:31;;:12;:10;:12::i;:::-;:31;;;35788:40;;;;;;35839:26;35868:21;35839:50;;35900:32;35913:18;35900:12;:32::i;:::-;35777:163;35746:194::o;31133:30::-;;;;;;;;;;;;;:::o;9282:98::-;9335:7;9362:10;9355:17;;9282:98;:::o;26558:380::-;26711:1;26694:19;;:5;:19;;;26686:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26792:1;26773:21;;:7;:21;;;26765:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26876:6;26846:11;:18;26858:5;26846:18;;;;;;;;;;;;;;;:27;26865:7;26846:27;;;;;;;;;;;;;;;:36;;;;26914:7;26898:32;;26907:5;26898:32;;;26923:6;26898:32;;;;;;:::i;:::-;;;;;;;;26558:380;;;:::o;32426:2285::-;32517:7;32551;:5;:7::i;:::-;32541:17;;:6;:17;;;;:41;;;;;32575:7;:5;:7::i;:::-;32562:20;;:9;:20;;;;32541:41;32537:2143;;;32637:11;;;;;;;;;;;32632:146;;32687:7;:5;:7::i;:::-;32677:17;;:6;:17;;;32669:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;32632:146;32808:13;;;;;;;;;;;32795:26;;:9;:26;;;;:56;;;;;32846:4;32825:26;;:9;:26;;;;32795:56;:97;;;;;32876:15;;;;;;;;;;;32855:37;;:9;:37;;;;32795:97;32792:204;;;32931:16;:14;:16::i;:::-;32921:6;:26;;32913:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32792:204;33026:13;;;;;;;;;;;33013:26;;:9;:26;;;;:56;;;;;33064:4;33043:26;;:9;:26;;;;33013:56;:97;;;;;33094:15;;;;;;;;;;;33073:37;;:9;:37;;;;33013:97;33010:238;;;33172:20;:18;:20::i;:::-;33162:6;33139:20;33149:9;33139;:20::i;:::-;:29;;;;:::i;:::-;:53;33131:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;33010:238;33262:28;33293:24;33311:4;33293:9;:24::i;:::-;33262:55;;33332:12;33371:23;:21;:23::i;:::-;33347:20;:47;;33332:62;;33436:16;:14;:16::i;:::-;33412:20;:40;33409:132;;33509:16;:14;:16::i;:::-;33486:39;;33409:132;33559:7;:18;;;;;33571:6;;;;;;;;;;;33570:7;33559:18;:45;;;;;33591:13;;;;;;;;;;;33581:23;;:6;:23;;;;33559:45;:60;;;;;33608:11;;;;;;;;;;;33559:60;:91;;;;;33624:18;:26;33643:6;33624:26;;;;;;;;;;;;;;;;;;;;;;;;;33623:27;33559:91;:125;;;;;33655:18;:29;33674:9;33655:29;;;;;;;;;;;;;;;;;;;;;;;;;33654:30;33559:125;33555:394;;;33705:38;33722:20;33705:16;:38::i;:::-;33762:26;33791:21;33762:50;;33856:1;33835:18;:22;33831:103;;;33882:32;33895:18;33882:12;:32::i;:::-;33831:103;33686:263;33555:394;33963:17;34007:18;:26;34026:6;34007:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;34037:18;:29;34056:9;34037:29;;;;;;;;;;;;;;;;;;;;;;;;;34007:59;34006:120;;;;34082:13;;;;;;;;;;;34072:23;;:6;:23;;;;:53;;;;;34112:13;;;;;;;;;;;34099:26;;:9;:26;;;;34072:53;34006:120;34002:667;;34191:13;;;;;;;;;;;34181:23;;:6;:23;;;:64;;;;;34229:15;;;;;;;;;;;34208:37;;:9;:37;;;;34181:64;34178:303;;;34305:3;34291:11;;34282:6;:20;;;;:::i;:::-;:26;;;;:::i;:::-;34270:38;;34178:303;;;34351:13;;;;;;;;;;;34338:26;;:9;:26;;;:64;;;;;34386:15;;;;;;;;;;;34368:34;;:6;:34;;;;34338:64;34334:147;;;34458:3;34448:7;;34439:6;:16;;;;:::i;:::-;:22;;;;:::i;:::-;34427:34;;34334:147;34178:303;34515:1;34503:9;:13;34499:155;;;34541:43;34551:6;34567:4;34574:9;34541;:43::i;:::-;34625:9;34616:6;:18;;;;:::i;:::-;34607:27;;34499:155;34002:667;32584:2096;;;32537:2143;34697:6;34690:13;;32426:2285;;;;;:::o;23437:840::-;23584:1;23568:18;;:4;:18;;;23560:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23661:1;23647:16;;:2;:16;;;23639:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23716:38;23737:4;23743:2;23747:6;23716:20;:38::i;:::-;23767:19;23789:9;:15;23799:4;23789:15;;;;;;;;;;;;;;;;23767:37;;23838:6;23823:11;:21;;23815:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;23955:6;23941:11;:20;23923:9;:15;23933:4;23923:15;;;;;;;;;;;;;;;:38;;;;24158:6;24141:9;:13;24151:2;24141:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;24208:2;24193:26;;24202:4;24193:26;;;24212:6;24193:26;;;;;;:::i;:::-;;;;;;;;24232:37;24252:4;24258:2;24262:6;24232:19;:37::i;:::-;23549:728;23437:840;;;:::o;10896:132::-;10971:12;:10;:12::i;:::-;10960:23;;:7;:5;:7::i;:::-;:23;;;10952:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10896:132::o;25445:675::-;25548:1;25529:21;;:7;:21;;;25521:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25601:49;25622:7;25639:1;25643:6;25601:20;:49::i;:::-;25663:22;25688:9;:18;25698:7;25688:18;;;;;;;;;;;;;;;;25663:43;;25743:6;25725:14;:24;;25717:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25862:6;25845:14;:23;25824:9;:18;25834:7;25824:18;;;;;;;;;;;;;;;:44;;;;25979:6;25963:12;;:22;;;;;;;;;;;26040:1;26014:37;;26023:7;26014:37;;;26044:6;26014:37;;;;;;:::i;:::-;;;;;;;;26064:48;26084:7;26101:1;26105:6;26064:19;:48::i;:::-;25510:610;25445:675;;:::o;34937:483::-;31281:4;31272:6;;:13;;;;;;;;;;;;;;;;;;35015:21:::1;35053:1;35039:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35015:40;;35084:4;35066;35071:1;35066:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;35110:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35100:4;35105:1;35100:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;35143:62;35160:4;35175:15;;;;;;;;;;;35193:11;35143:8;:62::i;:::-;35216:15;;;;;;;;;;;:66;;;35297:11;35323:1;35339:4;35366;35386:15;35216:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;35004:416;31317:5:::0;31308:6;;:14;;;;;;;;;;;;;;;;;;34937:483;:::o;11998:191::-;12072:16;12091:6;;;;;;;;;;;12072:25;;12117:8;12108:6;;:17;;;;;;;;;;;;;;;;;;12172:8;12141:40;;12162:8;12141:40;;;;;;;;;;;;12061:128;11998:191;:::o;27229:453::-;27364:24;27391:25;27401:5;27408:7;27391:9;:25::i;:::-;27364:52;;27451:17;27431:16;:37;27427:248;;27513:6;27493:16;:26;;27485:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27597:51;27606:5;27613:7;27641:6;27622:16;:25;27597:8;:51::i;:::-;27427:248;27353:329;27229:453;;;:::o;35428:97::-;35485:15;;;;;;;;;;;:24;;:32;35510:6;35485:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35428:97;:::o;28282:125::-;;;;:::o;29011:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:152::-;4220:9;4253:37;4284:5;4253:37;:::i;:::-;4240:50;;4144:152;;;:::o;4302:183::-;4415:63;4472:5;4415:63;:::i;:::-;4410:3;4403:76;4302:183;;:::o;4491:274::-;4610:4;4648:2;4637:9;4633:18;4625:26;;4661:97;4755:1;4744:9;4740:17;4731:6;4661:97;:::i;:::-;4491:274;;;;:::o;4771:619::-;4848:6;4856;4864;4913:2;4901:9;4892:7;4888:23;4884:32;4881:119;;;4919:79;;:::i;:::-;4881:119;5039:1;5064:53;5109:7;5100:6;5089:9;5085:22;5064:53;:::i;:::-;5054:63;;5010:117;5166:2;5192:53;5237:7;5228:6;5217:9;5213:22;5192:53;:::i;:::-;5182:63;;5137:118;5294:2;5320:53;5365:7;5356:6;5345:9;5341:22;5320:53;:::i;:::-;5310:63;;5265:118;4771:619;;;;;:::o;5396:329::-;5455:6;5504:2;5492:9;5483:7;5479:23;5475:32;5472:119;;;5510:79;;:::i;:::-;5472:119;5630:1;5655:53;5700:7;5691:6;5680:9;5676:22;5655:53;:::i;:::-;5645:63;;5601:117;5396:329;;;;:::o;5731:86::-;5766:7;5806:4;5799:5;5795:16;5784:27;;5731:86;;;:::o;5823:112::-;5906:22;5922:5;5906:22;:::i;:::-;5901:3;5894:35;5823:112;;:::o;5941:214::-;6030:4;6068:2;6057:9;6053:18;6045:26;;6081:67;6145:1;6134:9;6130:17;6121:6;6081:67;:::i;:::-;5941:214;;;;:::o;6161:118::-;6248:24;6266:5;6248:24;:::i;:::-;6243:3;6236:37;6161:118;;:::o;6285:222::-;6378:4;6416:2;6405:9;6401:18;6393:26;;6429:71;6497:1;6486:9;6482:17;6473:6;6429:71;:::i;:::-;6285:222;;;;:::o;6513:329::-;6572:6;6621:2;6609:9;6600:7;6596:23;6592:32;6589:119;;;6627:79;;:::i;:::-;6589:119;6747:1;6772:53;6817:7;6808:6;6797:9;6793:22;6772:53;:::i;:::-;6762:63;;6718:117;6513:329;;;;:::o;6848:116::-;6918:21;6933:5;6918:21;:::i;:::-;6911:5;6908:32;6898:60;;6954:1;6951;6944:12;6898:60;6848:116;:::o;6970:133::-;7013:5;7051:6;7038:20;7029:29;;7067:30;7091:5;7067:30;:::i;:::-;6970:133;;;;:::o;7109:323::-;7165:6;7214:2;7202:9;7193:7;7189:23;7185:32;7182:119;;;7220:79;;:::i;:::-;7182:119;7340:1;7365:50;7407:7;7398:6;7387:9;7383:22;7365:50;:::i;:::-;7355:60;;7311:114;7109:323;;;;:::o;7438:104::-;7483:7;7512:24;7530:5;7512:24;:::i;:::-;7501:35;;7438:104;;;:::o;7548:142::-;7651:32;7677:5;7651:32;:::i;:::-;7646:3;7639:45;7548:142;;:::o;7696:254::-;7805:4;7843:2;7832:9;7828:18;7820:26;;7856:87;7940:1;7929:9;7925:17;7916:6;7856:87;:::i;:::-;7696:254;;;;:::o;7956:474::-;8024:6;8032;8081:2;8069:9;8060:7;8056:23;8052:32;8049:119;;;8087:79;;:::i;:::-;8049:119;8207:1;8232:53;8277:7;8268:6;8257:9;8253:22;8232:53;:::i;:::-;8222:63;;8178:117;8334:2;8360:53;8405:7;8396:6;8385:9;8381:22;8360:53;:::i;:::-;8350:63;;8305:118;7956:474;;;;;:::o;8436:180::-;8484:77;8481:1;8474:88;8581:4;8578:1;8571:15;8605:4;8602:1;8595:15;8622:320;8666:6;8703:1;8697:4;8693:12;8683:22;;8750:1;8744:4;8740:12;8771:18;8761:81;;8827:4;8819:6;8815:17;8805:27;;8761:81;8889:2;8881:6;8878:14;8858:18;8855:38;8852:84;;8908:18;;:::i;:::-;8852:84;8673:269;8622:320;;;:::o;8948:180::-;8996:77;8993:1;8986:88;9093:4;9090:1;9083:15;9117:4;9114:1;9107:15;9134:410;9174:7;9197:20;9215:1;9197:20;:::i;:::-;9192:25;;9231:20;9249:1;9231:20;:::i;:::-;9226:25;;9286:1;9283;9279:9;9308:30;9326:11;9308:30;:::i;:::-;9297:41;;9487:1;9478:7;9474:15;9471:1;9468:22;9448:1;9441:9;9421:83;9398:139;;9517:18;;:::i;:::-;9398:139;9182:362;9134:410;;;;:::o;9550:180::-;9598:77;9595:1;9588:88;9695:4;9692:1;9685:15;9719:4;9716:1;9709:15;9736:185;9776:1;9793:20;9811:1;9793:20;:::i;:::-;9788:25;;9827:20;9845:1;9827:20;:::i;:::-;9822:25;;9866:1;9856:35;;9871:18;;:::i;:::-;9856:35;9913:1;9910;9906:9;9901:14;;9736:185;;;;:::o;9927:194::-;9967:4;9987:20;10005:1;9987:20;:::i;:::-;9982:25;;10021:20;10039:1;10021:20;:::i;:::-;10016:25;;10065:1;10062;10058:9;10050:17;;10089:1;10083:4;10080:11;10077:37;;;10094:18;;:::i;:::-;10077:37;9927:194;;;;:::o;10127:243::-;10267:34;10263:1;10255:6;10251:14;10244:58;10336:26;10331:2;10323:6;10319:15;10312:51;10127:243;:::o;10376:366::-;10518:3;10539:67;10603:2;10598:3;10539:67;:::i;:::-;10532:74;;10615:93;10704:3;10615:93;:::i;:::-;10733:2;10728:3;10724:12;10717:19;;10376:366;;;:::o;10748:419::-;10914:4;10952:2;10941:9;10937:18;10929:26;;11001:9;10995:4;10991:20;10987:1;10976:9;10972:17;10965:47;11029:131;11155:4;11029:131;:::i;:::-;11021:139;;10748:419;;;:::o;11173:191::-;11213:3;11232:20;11250:1;11232:20;:::i;:::-;11227:25;;11266:20;11284:1;11266:20;:::i;:::-;11261:25;;11309:1;11306;11302:9;11295:16;;11330:3;11327:1;11324:10;11321:36;;;11337:18;;:::i;:::-;11321:36;11173:191;;;;:::o;11370:223::-;11510:34;11506:1;11498:6;11494:14;11487:58;11579:6;11574:2;11566:6;11562:15;11555:31;11370:223;:::o;11599:366::-;11741:3;11762:67;11826:2;11821:3;11762:67;:::i;:::-;11755:74;;11838:93;11927:3;11838:93;:::i;:::-;11956:2;11951:3;11947:12;11940:19;;11599:366;;;:::o;11971:419::-;12137:4;12175:2;12164:9;12160:18;12152:26;;12224:9;12218:4;12214:20;12210:1;12199:9;12195:17;12188:47;12252:131;12378:4;12252:131;:::i;:::-;12244:139;;11971:419;;;:::o;12396:182::-;12536:34;12532:1;12524:6;12520:14;12513:58;12396:182;:::o;12584:366::-;12726:3;12747:67;12811:2;12806:3;12747:67;:::i;:::-;12740:74;;12823:93;12912:3;12823:93;:::i;:::-;12941:2;12936:3;12932:12;12925:19;;12584:366;;;:::o;12956:419::-;13122:4;13160:2;13149:9;13145:18;13137:26;;13209:9;13203:4;13199:20;13195:1;13184:9;13180:17;13173:47;13237:131;13363:4;13237:131;:::i;:::-;13229:139;;12956:419;;;:::o;13381:224::-;13521:34;13517:1;13509:6;13505:14;13498:58;13590:7;13585:2;13577:6;13573:15;13566:32;13381:224;:::o;13611:366::-;13753:3;13774:67;13838:2;13833:3;13774:67;:::i;:::-;13767:74;;13850:93;13939:3;13850:93;:::i;:::-;13968:2;13963:3;13959:12;13952:19;;13611:366;;;:::o;13983:419::-;14149:4;14187:2;14176:9;14172:18;14164:26;;14236:9;14230:4;14226:20;14222:1;14211:9;14207:17;14200:47;14264:131;14390:4;14264:131;:::i;:::-;14256:139;;13983:419;;;:::o;14408:247::-;14548:34;14544:1;14536:6;14532:14;14525:58;14617:30;14612:2;14604:6;14600:15;14593:55;14408:247;:::o;14661:366::-;14803:3;14824:67;14888:2;14883:3;14824:67;:::i;:::-;14817:74;;14900:93;14989:3;14900:93;:::i;:::-;15018:2;15013:3;15009:12;15002:19;;14661:366;;;:::o;15033:419::-;15199:4;15237:2;15226:9;15222:18;15214:26;;15286:9;15280:4;15276:20;15272:1;15261:9;15257:17;15250:47;15314:131;15440:4;15314:131;:::i;:::-;15306:139;;15033:419;;;:::o;15458:239::-;15598:34;15594:1;15586:6;15582:14;15575:58;15667:22;15662:2;15654:6;15650:15;15643:47;15458:239;:::o;15703:366::-;15845:3;15866:67;15930:2;15925:3;15866:67;:::i;:::-;15859:74;;15942:93;16031:3;15942:93;:::i;:::-;16060:2;16055:3;16051:12;16044:19;;15703:366;;;:::o;16075:419::-;16241:4;16279:2;16268:9;16264:18;16256:26;;16328:9;16322:4;16318:20;16314:1;16303:9;16299:17;16292:47;16356:131;16482:4;16356:131;:::i;:::-;16348:139;;16075:419;;;:::o;16500:225::-;16640:34;16636:1;16628:6;16624:14;16617:58;16709:8;16704:2;16696:6;16692:15;16685:33;16500:225;:::o;16731:366::-;16873:3;16894:67;16958:2;16953:3;16894:67;:::i;:::-;16887:74;;16970:93;17059:3;16970:93;:::i;:::-;17088:2;17083:3;17079:12;17072:19;;16731:366;;;:::o;17103:419::-;17269:4;17307:2;17296:9;17292:18;17284:26;;17356:9;17350:4;17346:20;17342:1;17331:9;17327:17;17320:47;17384:131;17510:4;17384:131;:::i;:::-;17376:139;;17103:419;;;:::o;17528:223::-;17668:34;17664:1;17656:6;17652:14;17645:58;17737:6;17732:2;17724:6;17720:15;17713:31;17528:223;:::o;17757:366::-;17899:3;17920:67;17984:2;17979:3;17920:67;:::i;:::-;17913:74;;17996:93;18085:3;17996:93;:::i;:::-;18114:2;18109:3;18105:12;18098:19;;17757:366;;;:::o;18129:419::-;18295:4;18333:2;18322:9;18318:18;18310:26;;18382:9;18376:4;18372:20;18368:1;18357:9;18353:17;18346:47;18410:131;18536:4;18410:131;:::i;:::-;18402:139;;18129:419;;;:::o;18554:221::-;18694:34;18690:1;18682:6;18678:14;18671:58;18763:4;18758:2;18750:6;18746:15;18739:29;18554:221;:::o;18781:366::-;18923:3;18944:67;19008:2;19003:3;18944:67;:::i;:::-;18937:74;;19020:93;19109:3;19020:93;:::i;:::-;19138:2;19133:3;19129:12;19122:19;;18781:366;;;:::o;19153:419::-;19319:4;19357:2;19346:9;19342:18;19334:26;;19406:9;19400:4;19396:20;19392:1;19381:9;19377:17;19370:47;19434:131;19560:4;19434:131;:::i;:::-;19426:139;;19153:419;;;:::o;19578:250::-;19718:34;19714:1;19706:6;19702:14;19695:58;19787:33;19782:2;19774:6;19770:15;19763:58;19578:250;:::o;19834:366::-;19976:3;19997:67;20061:2;20056:3;19997:67;:::i;:::-;19990:74;;20073:93;20162:3;20073:93;:::i;:::-;20191:2;20186:3;20182:12;20175:19;;19834:366;;;:::o;20206:419::-;20372:4;20410:2;20399:9;20395:18;20387:26;;20459:9;20453:4;20449:20;20445:1;20434:9;20430:17;20423:47;20487:131;20613:4;20487:131;:::i;:::-;20479:139;;20206:419;;;:::o;20631:178::-;20771:30;20767:1;20759:6;20755:14;20748:54;20631:178;:::o;20815:366::-;20957:3;20978:67;21042:2;21037:3;20978:67;:::i;:::-;20971:74;;21054:93;21143:3;21054:93;:::i;:::-;21172:2;21167:3;21163:12;21156:19;;20815:366;;;:::o;21187:419::-;21353:4;21391:2;21380:9;21376:18;21368:26;;21440:9;21434:4;21430:20;21426:1;21415:9;21411:17;21404:47;21468:131;21594:4;21468:131;:::i;:::-;21460:139;;21187:419;;;:::o;21612:222::-;21752:34;21748:1;21740:6;21736:14;21729:58;21821:5;21816:2;21808:6;21804:15;21797:30;21612:222;:::o;21840:366::-;21982:3;22003:67;22067:2;22062:3;22003:67;:::i;:::-;21996:74;;22079:93;22168:3;22079:93;:::i;:::-;22197:2;22192:3;22188:12;22181:19;;21840:366;;;:::o;22212:419::-;22378:4;22416:2;22405:9;22401:18;22393:26;;22465:9;22459:4;22455:20;22451:1;22440:9;22436:17;22429:47;22493:131;22619:4;22493:131;:::i;:::-;22485:139;;22212:419;;;:::o;22637:224::-;22777:34;22773:1;22765:6;22761:14;22754:58;22846:7;22841:2;22833:6;22829:15;22822:32;22637:224;:::o;22867:366::-;23009:3;23030:67;23094:2;23089:3;23030:67;:::i;:::-;23023:74;;23106:93;23195:3;23106:93;:::i;:::-;23224:2;23219:3;23215:12;23208:19;;22867:366;;;:::o;23239:419::-;23405:4;23443:2;23432:9;23428:18;23420:26;;23492:9;23486:4;23482:20;23478:1;23467:9;23463:17;23456:47;23520:131;23646:4;23520:131;:::i;:::-;23512:139;;23239:419;;;:::o;23664:222::-;23804:34;23800:1;23792:6;23788:14;23781:58;23873:5;23868:2;23860:6;23856:15;23849:30;23664:222;:::o;23892:366::-;24034:3;24055:67;24119:2;24114:3;24055:67;:::i;:::-;24048:74;;24131:93;24220:3;24131:93;:::i;:::-;24249:2;24244:3;24240:12;24233:19;;23892:366;;;:::o;24264:419::-;24430:4;24468:2;24457:9;24453:18;24445:26;;24517:9;24511:4;24507:20;24503:1;24492:9;24488:17;24481:47;24545:131;24671:4;24545:131;:::i;:::-;24537:139;;24264:419;;;:::o;24689:225::-;24829:34;24825:1;24817:6;24813:14;24806:58;24898:8;24893:2;24885:6;24881:15;24874:33;24689:225;:::o;24920:366::-;25062:3;25083:67;25147:2;25142:3;25083:67;:::i;:::-;25076:74;;25159:93;25248:3;25159:93;:::i;:::-;25277:2;25272:3;25268:12;25261:19;;24920:366;;;:::o;25292:419::-;25458:4;25496:2;25485:9;25481:18;25473:26;;25545:9;25539:4;25535:20;25531:1;25520:9;25516:17;25509:47;25573:131;25699:4;25573:131;:::i;:::-;25565:139;;25292:419;;;:::o;25717:182::-;25857:34;25853:1;25845:6;25841:14;25834:58;25717:182;:::o;25905:366::-;26047:3;26068:67;26132:2;26127:3;26068:67;:::i;:::-;26061:74;;26144:93;26233:3;26144:93;:::i;:::-;26262:2;26257:3;26253:12;26246:19;;25905:366;;;:::o;26277:419::-;26443:4;26481:2;26470:9;26466:18;26458:26;;26530:9;26524:4;26520:20;26516:1;26505:9;26501:17;26494:47;26558:131;26684:4;26558:131;:::i;:::-;26550:139;;26277:419;;;:::o;26702:220::-;26842:34;26838:1;26830:6;26826:14;26819:58;26911:3;26906:2;26898:6;26894:15;26887:28;26702:220;:::o;26928:366::-;27070:3;27091:67;27155:2;27150:3;27091:67;:::i;:::-;27084:74;;27167:93;27256:3;27167:93;:::i;:::-;27285:2;27280:3;27276:12;27269:19;;26928:366;;;:::o;27300:419::-;27466:4;27504:2;27493:9;27489:18;27481:26;;27553:9;27547:4;27543:20;27539:1;27528:9;27524:17;27517:47;27581:131;27707:4;27581:131;:::i;:::-;27573:139;;27300:419;;;:::o;27725:221::-;27865:34;27861:1;27853:6;27849:14;27842:58;27934:4;27929:2;27921:6;27917:15;27910:29;27725:221;:::o;27952:366::-;28094:3;28115:67;28179:2;28174:3;28115:67;:::i;:::-;28108:74;;28191:93;28280:3;28191:93;:::i;:::-;28309:2;28304:3;28300:12;28293:19;;27952:366;;;:::o;28324:419::-;28490:4;28528:2;28517:9;28513:18;28505:26;;28577:9;28571:4;28567:20;28563:1;28552:9;28548:17;28541:47;28605:131;28731:4;28605:131;:::i;:::-;28597:139;;28324:419;;;:::o;28749:180::-;28797:77;28794:1;28787:88;28894:4;28891:1;28884:15;28918:4;28915:1;28908:15;28935:180;28983:77;28980:1;28973:88;29080:4;29077:1;29070:15;29104:4;29101:1;29094:15;29121:143;29178:5;29209:6;29203:13;29194:22;;29225:33;29252:5;29225:33;:::i;:::-;29121:143;;;;:::o;29270:351::-;29340:6;29389:2;29377:9;29368:7;29364:23;29360:32;29357:119;;;29395:79;;:::i;:::-;29357:119;29515:1;29540:64;29596:7;29587:6;29576:9;29572:22;29540:64;:::i;:::-;29530:74;;29486:128;29270:351;;;;:::o;29627:85::-;29672:7;29701:5;29690:16;;29627:85;;;:::o;29718:158::-;29776:9;29809:61;29827:42;29836:32;29862:5;29836:32;:::i;:::-;29827:42;:::i;:::-;29809:61;:::i;:::-;29796:74;;29718:158;;;:::o;29882:147::-;29977:45;30016:5;29977:45;:::i;:::-;29972:3;29965:58;29882:147;;:::o;30035:114::-;30102:6;30136:5;30130:12;30120:22;;30035:114;;;:::o;30155:184::-;30254:11;30288:6;30283:3;30276:19;30328:4;30323:3;30319:14;30304:29;;30155:184;;;;:::o;30345:132::-;30412:4;30435:3;30427:11;;30465:4;30460:3;30456:14;30448:22;;30345:132;;;:::o;30483:108::-;30560:24;30578:5;30560:24;:::i;:::-;30555:3;30548:37;30483:108;;:::o;30597:179::-;30666:10;30687:46;30729:3;30721:6;30687:46;:::i;:::-;30765:4;30760:3;30756:14;30742:28;;30597:179;;;;:::o;30782:113::-;30852:4;30884;30879:3;30875:14;30867:22;;30782:113;;;:::o;30931:732::-;31050:3;31079:54;31127:5;31079:54;:::i;:::-;31149:86;31228:6;31223:3;31149:86;:::i;:::-;31142:93;;31259:56;31309:5;31259:56;:::i;:::-;31338:7;31369:1;31354:284;31379:6;31376:1;31373:13;31354:284;;;31455:6;31449:13;31482:63;31541:3;31526:13;31482:63;:::i;:::-;31475:70;;31568:60;31621:6;31568:60;:::i;:::-;31558:70;;31414:224;31401:1;31398;31394:9;31389:14;;31354:284;;;31358:14;31654:3;31647:10;;31055:608;;;30931:732;;;;:::o;31669:831::-;31932:4;31970:3;31959:9;31955:19;31947:27;;31984:71;32052:1;32041:9;32037:17;32028:6;31984:71;:::i;:::-;32065:80;32141:2;32130:9;32126:18;32117:6;32065:80;:::i;:::-;32192:9;32186:4;32182:20;32177:2;32166:9;32162:18;32155:48;32220:108;32323:4;32314:6;32220:108;:::i;:::-;32212:116;;32338:72;32406:2;32395:9;32391:18;32382:6;32338:72;:::i;:::-;32420:73;32488:3;32477:9;32473:19;32464:6;32420:73;:::i;:::-;31669:831;;;;;;;;:::o;32506:179::-;32646:31;32642:1;32634:6;32630:14;32623:55;32506:179;:::o;32691:366::-;32833:3;32854:67;32918:2;32913:3;32854:67;:::i;:::-;32847:74;;32930:93;33019:3;32930:93;:::i;:::-;33048:2;33043:3;33039:12;33032:19;;32691:366;;;:::o;33063:419::-;33229:4;33267:2;33256:9;33252:18;33244:26;;33316:9;33310:4;33306:20;33302:1;33291:9;33287:17;33280:47;33344:131;33470:4;33344:131;:::i;:::-;33336:139;;33063:419;;;:::o
Swarm Source
ipfs://d119059af8c9377e207c5ea9a6ef73aadc879af7a44d4cebc560f3613c1d187a
Loading...
Loading
Loading...
Loading
[ 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.