ERC-20
Overview
Max Total Supply
100,000,000 ABORT
Holders
9
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.050000000007605851 ABORTValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AbortionToken
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-27 */ // SPDX-License-Identifier: Unlicensed pragma solidity 0.8.15; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. * * 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; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } /** * @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 this function * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of 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: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - 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) { _approve(_msgSender(), spender, _allowances[_msgSender()][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) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * 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: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _createSupply(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _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; } _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 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 {} } /** * @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() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { 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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } 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); } 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; } 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; } /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SignedSafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SignedSafeMath { /** * @dev Returns the multiplication of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { return a * b; } /** * @dev Returns the integer division of two signed integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(int256 a, int256 b) internal pure returns (int256) { return a / b; } /** * @dev Returns the subtraction of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { return a - b; } /** * @dev Returns the addition of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { return a + b; } } // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /** * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow * checks. * * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can * easily result in undesired exploitation or bugs, since developers usually * assume that overflows raise errors. `SafeCast` restores this intuition by * reverting the transaction when such an operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. * * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing * all math on `uint256` and `int256` and then downcasting. */ library SafeCast { /** * @dev Returns the downcasted uint224 from uint256, reverting on * overflow (when the input is greater than largest uint224). * * Counterpart to Solidity's `uint224` operator. * * Requirements: * * - input must fit into 224 bits */ function toUint224(uint256 value) internal pure returns (uint224) { require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits"); return uint224(value); } /** * @dev Returns the downcasted uint128 from uint256, reverting on * overflow (when the input is greater than largest uint128). * * Counterpart to Solidity's `uint128` operator. * * Requirements: * * - input must fit into 128 bits */ function toUint128(uint256 value) internal pure returns (uint128) { require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits"); return uint128(value); } /** * @dev Returns the downcasted uint96 from uint256, reverting on * overflow (when the input is greater than largest uint96). * * Counterpart to Solidity's `uint96` operator. * * Requirements: * * - input must fit into 96 bits */ function toUint96(uint256 value) internal pure returns (uint96) { require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits"); return uint96(value); } /** * @dev Returns the downcasted uint64 from uint256, reverting on * overflow (when the input is greater than largest uint64). * * Counterpart to Solidity's `uint64` operator. * * Requirements: * * - input must fit into 64 bits */ function toUint64(uint256 value) internal pure returns (uint64) { require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits"); return uint64(value); } /** * @dev Returns the downcasted uint32 from uint256, reverting on * overflow (when the input is greater than largest uint32). * * Counterpart to Solidity's `uint32` operator. * * Requirements: * * - input must fit into 32 bits */ function toUint32(uint256 value) internal pure returns (uint32) { require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits"); return uint32(value); } /** * @dev Returns the downcasted uint16 from uint256, reverting on * overflow (when the input is greater than largest uint16). * * Counterpart to Solidity's `uint16` operator. * * Requirements: * * - input must fit into 16 bits */ function toUint16(uint256 value) internal pure returns (uint16) { require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits"); return uint16(value); } /** * @dev Returns the downcasted uint8 from uint256, reverting on * overflow (when the input is greater than largest uint8). * * Counterpart to Solidity's `uint8` operator. * * Requirements: * * - input must fit into 8 bits. */ function toUint8(uint256 value) internal pure returns (uint8) { require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits"); return uint8(value); } /** * @dev Converts a signed int256 into an unsigned uint256. * * Requirements: * * - input must be greater than or equal to 0. */ function toUint256(int256 value) internal pure returns (uint256) { require(value >= 0, "SafeCast: value must be positive"); return uint256(value); } /** * @dev Returns the downcasted int128 from int256, reverting on * overflow (when the input is less than smallest int128 or * greater than largest int128). * * Counterpart to Solidity's `int128` operator. * * Requirements: * * - input must fit into 128 bits * * _Available since v3.1._ */ function toInt128(int256 value) internal pure returns (int128) { require(value >= type(int128).min && value <= type(int128).max, "SafeCast: value doesn't fit in 128 bits"); return int128(value); } /** * @dev Returns the downcasted int64 from int256, reverting on * overflow (when the input is less than smallest int64 or * greater than largest int64). * * Counterpart to Solidity's `int64` operator. * * Requirements: * * - input must fit into 64 bits * * _Available since v3.1._ */ function toInt64(int256 value) internal pure returns (int64) { require(value >= type(int64).min && value <= type(int64).max, "SafeCast: value doesn't fit in 64 bits"); return int64(value); } /** * @dev Returns the downcasted int32 from int256, reverting on * overflow (when the input is less than smallest int32 or * greater than largest int32). * * Counterpart to Solidity's `int32` operator. * * Requirements: * * - input must fit into 32 bits * * _Available since v3.1._ */ function toInt32(int256 value) internal pure returns (int32) { require(value >= type(int32).min && value <= type(int32).max, "SafeCast: value doesn't fit in 32 bits"); return int32(value); } /** * @dev Returns the downcasted int16 from int256, reverting on * overflow (when the input is less than smallest int16 or * greater than largest int16). * * Counterpart to Solidity's `int16` operator. * * Requirements: * * - input must fit into 16 bits * * _Available since v3.1._ */ function toInt16(int256 value) internal pure returns (int16) { require(value >= type(int16).min && value <= type(int16).max, "SafeCast: value doesn't fit in 16 bits"); return int16(value); } /** * @dev Returns the downcasted int8 from int256, reverting on * overflow (when the input is less than smallest int8 or * greater than largest int8). * * Counterpart to Solidity's `int8` operator. * * Requirements: * * - input must fit into 8 bits. * * _Available since v3.1._ */ function toInt8(int256 value) internal pure returns (int8) { require(value >= type(int8).min && value <= type(int8).max, "SafeCast: value doesn't fit in 8 bits"); return int8(value); } /** * @dev Converts an unsigned uint256 into a signed int256. * * Requirements: * * - input must be less than or equal to maxInt256. */ function toInt256(uint256 value) internal pure returns (int256) { // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256"); return int256(value); } } contract AbortionToken is ERC20, Ownable { using SafeMath for uint256; bool public swapAndLiquifyEnabled = true; bool private inSwapAndLiquify; bool public cooldownEnabled = true; uint256 public cooldownTimerInterval = 60 seconds; mapping (address => uint) private cooldown; uint256 public maxTransactionAmount = 1000000 * (10**18); uint256 public swapTokensAtAmount = 30000 * (10**18); uint256 public maxWalletToken = 2000000 * (10**18); uint256 public liquidityFee = 2; uint256 public marketingFee = 3; address payable public marketingWallet = payable(0xB39Df834Bc09BAbC69dA0A8D88E91bc0bCE68d3D); IUniswapV2Router02 public uniswapV2Router; address public immutable uniswapV2Pair; // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } event SwapAndLiquify(uint256 tokensIntoLiqudity, uint256 ethReceived); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapETHForTokens(uint256 amountIn, address[] path); event ExcludeFromFees(address indexed account, bool isExcluded); constructor() ERC20("AbortionToken", "ABORT") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // uniswap v2 router address // Create a uniswap pair for this new token address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; // exclude from paying fees and max transaction amount excludeFromFees(owner(), true); excludeFromFees(marketingWallet, true); excludeFromFees(address(this), true); /* an internal function that is only called here, and CANNOT be called ever again */ _createSupply(owner(), 100000000 * (10**18)); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if(amount == 0) { super._transfer(from, to, 0); return; } if (from != owner() && to != owner()) { if (from == uniswapV2Pair && to != address(uniswapV2Router) && ! _isExcludedFromFees[to] && cooldownEnabled) { // Cooldown require(cooldown[to] < block.timestamp); cooldown[to] = block.timestamp + (cooldownTimerInterval); } } bool excludedAccount = _isExcludedFromFees[from] || _isExcludedFromFees[to]; if(!excludedAccount){ require(amount <= maxTransactionAmount, "amount exceeds the maxTransactionAmount."); } if (from == uniswapV2Pair && !excludedAccount) { uint256 contractBalanceRecepient = balanceOf(to); require(contractBalanceRecepient + amount <= maxWalletToken, "Exceeds maximum wallet token amount."); } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount; if(overMinTokenBalance && !inSwapAndLiquify && to == uniswapV2Pair && swapAndLiquifyEnabled) { contractTokenBalance = swapTokensAtAmount; swapAndLiquify(contractTokenBalance); } // if any account belongs to _isExcludedFromFee account then remove the fee if(!excludedAccount) { uint256 fees; if(from == uniswapV2Pair || to == uniswapV2Pair) { fees = amount.mul(liquidityFee.add(marketingFee)).div(100); } amount = amount.sub(fees); super._transfer(from, address(this), fees); } super._transfer(from, to, amount); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 tokensForLiquidity = contractTokenBalance.mul(liquidityFee).div(liquidityFee.add(marketingFee)); // split the Liquidity token balance into halves uint256 half = tokensForLiquidity.div(2); uint256 otherHalf = tokensForLiquidity.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); // swap and Send eth to team wallet swapTokensForEth(contractTokenBalance.sub(tokensForLiquidity)); marketingWallet.transfer(address(this).balance); emit SwapAndLiquify(half, newBalance); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); if(allowance(address(this), address(uniswapV2Router)) < tokenAmount) { _approve(address(this), address(uniswapV2Router), ~uint256(0)); } // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function excludeFromFees(address account, bool excluded) public onlyOwner { require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'"); _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function setMaxTxAmount(uint256 _maxTx) public onlyOwner { maxTransactionAmount = _maxTx; require(maxTransactionAmount >= totalSupply().div(100), "value is too low"); } function setFee(uint256 _liquidityFee, uint256 _marketingFee) public onlyOwner { require(_liquidityFee.add(_marketingFee) <= 5, "tax too hugh"); liquidityFee = _liquidityFee; marketingFee = _marketingFee; } function setMaxWalletToken(uint256 _maxToken) external onlyOwner { maxWalletToken = _maxToken; require(maxWalletToken >= totalSupply().div(100), "value is too low"); } function setSwapTokensAtAmouunt(uint256 _newAmount) public onlyOwner { swapTokensAtAmount = _newAmount; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } // enable cooldown between trades function changeCooldownSettings(bool newStatus, uint256 newInterval) external onlyOwner { cooldownEnabled = newStatus; cooldownTimerInterval = newInterval; } 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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","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":[{"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":"bool","name":"newStatus","type":"bool"},{"internalType":"uint256","name":"newInterval","type":"uint256"}],"name":"changeCooldownSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxToken","type":"uint256"}],"name":"setMaxWalletToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setSwapTokensAtAmouunt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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
60a06040526001600560146101000a81548160ff0219169083151502179055506001600560166101000a81548160ff021916908315150217905550603c60065569d3c21bcecceda100000060085569065a4da25d3016c000006009556a01a784379d99db42000000600a556002600b556003600c5573b39df834bc09babc69da0a8d88e91bc0bce68d3d600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000d657600080fd5b506040518060400160405280600d81526020017f41626f7274696f6e546f6b656e000000000000000000000000000000000000008152506040518060400160405280600581526020017f41424f5254000000000000000000000000000000000000000000000000000000815250816003908162000154919062000ae1565b50806004908162000166919062000ae1565b505050620001896200017d6200041e60201b60201c565b6200042660201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000216919062000c32565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200027e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a4919062000c32565b6040518363ffffffff1660e01b8152600401620002c392919062000c75565b6020604051808303816000875af1158015620002e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000309919062000c32565b905081600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050620003a262000394620004ec60201b60201c565b60016200051660201b60201c565b620003d7600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200051660201b60201c565b620003ea3060016200051660201b60201c565b62000416620003fe620004ec60201b60201c565b6a52b7d2dcc80cd2e4000000620006e560201b60201c565b505062000f23565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005266200041e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200054c620004ec60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620005a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200059c9062000d03565b60405180910390fd5b801515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036200063a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006319062000d9b565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620006d9919062000dda565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000757576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074e9062000e47565b60405180910390fd5b6200076b600083836200085d60201b60201c565b80600260008282546200077f919062000e98565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620007d6919062000e98565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200083d919062000f06565b60405180910390a362000859600083836200086260201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008e957607f821691505b602082108103620008ff57620008fe620008a1565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009697fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200092a565b6200097586836200092a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620009c2620009bc620009b6846200098d565b62000997565b6200098d565b9050919050565b6000819050919050565b620009de83620009a1565b620009f6620009ed82620009c9565b84845462000937565b825550505050565b600090565b62000a0d620009fe565b62000a1a818484620009d3565b505050565b5b8181101562000a425762000a3660008262000a03565b60018101905062000a20565b5050565b601f82111562000a915762000a5b8162000905565b62000a66846200091a565b8101602085101562000a76578190505b62000a8e62000a85856200091a565b83018262000a1f565b50505b505050565b600082821c905092915050565b600062000ab66000198460080262000a96565b1980831691505092915050565b600062000ad1838362000aa3565b9150826002028217905092915050565b62000aec8262000867565b67ffffffffffffffff81111562000b085762000b0762000872565b5b62000b148254620008d0565b62000b2182828562000a46565b600060209050601f83116001811462000b59576000841562000b44578287015190505b62000b50858262000ac3565b86555062000bc0565b601f19841662000b698662000905565b60005b8281101562000b935784890151825560018201915060208501945060208101905062000b6c565b8683101562000bb3578489015162000baf601f89168262000aa3565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bfa8262000bcd565b9050919050565b62000c0c8162000bed565b811462000c1857600080fd5b50565b60008151905062000c2c8162000c01565b92915050565b60006020828403121562000c4b5762000c4a62000bc8565b5b600062000c5b8482850162000c1b565b91505092915050565b62000c6f8162000bed565b82525050565b600060408201905062000c8c600083018562000c64565b62000c9b602083018462000c64565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000ceb60208362000ca2565b915062000cf88262000cb3565b602082019050919050565b6000602082019050818103600083015262000d1e8162000cdc565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b600062000d83602a8362000ca2565b915062000d908262000d25565b604082019050919050565b6000602082019050818103600083015262000db68162000d74565b9050919050565b60008115159050919050565b62000dd48162000dbd565b82525050565b600060208201905062000df1600083018462000dc9565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e2f601f8362000ca2565b915062000e3c8262000df7565b602082019050919050565b6000602082019050818103600083015262000e628162000e20565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ea5826200098d565b915062000eb2836200098d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000eea5762000ee962000e69565b5b828201905092915050565b62000f00816200098d565b82525050565b600060208201905062000f1d600083018462000ef5565b92915050565b60805161385a62000f6260003960008181610b250152818161192001528181611bca01528181611cbf01528181611d420152611d97015261385a6000f3fe6080604052600436106101f25760003560e01c8063750c11b61161010d578063a985ceef116100a0578063dd62ed3e1161006f578063dd62ed3e14610710578063e2f456051461074d578063e6c75f7114610778578063ec28438a146107a3578063f2fde38b146107cc576101f9565b8063a985ceef14610668578063c024666814610693578063c49b9a80146106bc578063c8c8ebe4146106e5576101f9565b806395d89b41116100dc57806395d89b411461059857806398118cb4146105c3578063a457c2d7146105ee578063a9059cbb1461062b576101f9565b8063750c11b6146104f057806375f0a874146105195780638da5cb5b1461054457806391d55f411461056f576101f9565b806349bd5a5e116101855780636b67c4df116101545780636b67c4df1461044657806370a0823114610471578063715018a6146104ae578063722b62ad146104c5576101f9565b806349bd5a5e1461038a5780634a74bb02146103b55780634fbee193146103e057806352f7c9881461041d576101f9565b806318160ddd116101c157806318160ddd146102ba57806323b872dd146102e5578063313ce56714610322578063395093511461034d576101f9565b806306fdde03146101fe578063095ea7b3146102295780630d45c0e3146102665780631694505e1461028f576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b506102136107f5565b604051610220919061276a565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b9190612825565b610887565b60405161025d9190612880565b60405180910390f35b34801561027257600080fd5b5061028d600480360381019061028891906128c7565b6108a5565b005b34801561029b57600080fd5b506102a4610946565b6040516102b19190612966565b60405180910390f35b3480156102c657600080fd5b506102cf61096c565b6040516102dc9190612990565b60405180910390f35b3480156102f157600080fd5b5061030c600480360381019061030791906129ab565b610976565b6040516103199190612880565b60405180910390f35b34801561032e57600080fd5b50610337610a6e565b6040516103449190612a1a565b60405180910390f35b34801561035957600080fd5b50610374600480360381019061036f9190612825565b610a77565b6040516103819190612880565b60405180910390f35b34801561039657600080fd5b5061039f610b23565b6040516103ac9190612a44565b60405180910390f35b3480156103c157600080fd5b506103ca610b47565b6040516103d79190612880565b60405180910390f35b3480156103ec57600080fd5b5061040760048036038101906104029190612a5f565b610b5a565b6040516104149190612880565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f9190612a8c565b610bb0565b005b34801561045257600080fd5b5061045b610c94565b6040516104689190612990565b60405180910390f35b34801561047d57600080fd5b5061049860048036038101906104939190612a5f565b610c9a565b6040516104a59190612990565b60405180910390f35b3480156104ba57600080fd5b506104c3610ce2565b005b3480156104d157600080fd5b506104da610d6a565b6040516104e79190612990565b60405180910390f35b3480156104fc57600080fd5b5061051760048036038101906105129190612acc565b610d70565b005b34801561052557600080fd5b5061052e610df6565b60405161053b9190612b1a565b60405180910390f35b34801561055057600080fd5b50610559610e1c565b6040516105669190612a44565b60405180910390f35b34801561057b57600080fd5b5061059660048036038101906105919190612acc565b610e46565b005b3480156105a457600080fd5b506105ad610f2b565b6040516105ba919061276a565b60405180910390f35b3480156105cf57600080fd5b506105d8610fbd565b6040516105e59190612990565b60405180910390f35b3480156105fa57600080fd5b5061061560048036038101906106109190612825565b610fc3565b6040516106229190612880565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d9190612825565b6110ae565b60405161065f9190612880565b60405180910390f35b34801561067457600080fd5b5061067d6110cc565b60405161068a9190612880565b60405180910390f35b34801561069f57600080fd5b506106ba60048036038101906106b59190612b35565b6110df565b005b3480156106c857600080fd5b506106e360048036038101906106de9190612b75565b611296565b005b3480156106f157600080fd5b506106fa611366565b6040516107079190612990565b60405180910390f35b34801561071c57600080fd5b5061073760048036038101906107329190612ba2565b61136c565b6040516107449190612990565b60405180910390f35b34801561075957600080fd5b506107626113f3565b60405161076f9190612990565b60405180910390f35b34801561078457600080fd5b5061078d6113f9565b60405161079a9190612990565b60405180910390f35b3480156107af57600080fd5b506107ca60048036038101906107c59190612acc565b6113ff565b005b3480156107d857600080fd5b506107f360048036038101906107ee9190612a5f565b6114e4565b005b60606003805461080490612c11565b80601f016020809104026020016040519081016040528092919081815260200182805461083090612c11565b801561087d5780601f106108525761010080835404028352916020019161087d565b820191906000526020600020905b81548152906001019060200180831161086057829003601f168201915b5050505050905090565b600061089b6108946115db565b84846115e3565b6001905092915050565b6108ad6115db565b73ffffffffffffffffffffffffffffffffffffffff166108cb610e1c565b73ffffffffffffffffffffffffffffffffffffffff1614610921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091890612c8e565b60405180910390fd5b81600560166101000a81548160ff021916908315150217905550806006819055505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60006109838484846117ac565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109ce6115db565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4590612d20565b60405180910390fd5b610a6285610a5a6115db565b8584036115e3565b60019150509392505050565b60006012905090565b6000610b19610a846115db565b848460016000610a926115db565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b149190612d6f565b6115e3565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600560149054906101000a900460ff1681565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610bb86115db565b73ffffffffffffffffffffffffffffffffffffffff16610bd6610e1c565b73ffffffffffffffffffffffffffffffffffffffff1614610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2390612c8e565b60405180910390fd5b6005610c418284611e5f90919063ffffffff16565b1115610c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7990612e11565b60405180910390fd5b81600b8190555080600c819055505050565b600c5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cea6115db565b73ffffffffffffffffffffffffffffffffffffffff16610d08610e1c565b73ffffffffffffffffffffffffffffffffffffffff1614610d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5590612c8e565b60405180910390fd5b610d686000611e75565b565b60065481565b610d786115db565b73ffffffffffffffffffffffffffffffffffffffff16610d96610e1c565b73ffffffffffffffffffffffffffffffffffffffff1614610dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de390612c8e565b60405180910390fd5b8060098190555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e4e6115db565b73ffffffffffffffffffffffffffffffffffffffff16610e6c610e1c565b73ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990612c8e565b60405180910390fd5b80600a81905550610ee46064610ed661096c565b611f3b90919063ffffffff16565b600a541015610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f90612e7d565b60405180910390fd5b50565b606060048054610f3a90612c11565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6690612c11565b8015610fb35780601f10610f8857610100808354040283529160200191610fb3565b820191906000526020600020905b815481529060010190602001808311610f9657829003601f168201915b5050505050905090565b600b5481565b60008060016000610fd26115db565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561108f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108690612f0f565b60405180910390fd5b6110a361109a6115db565b858584036115e3565b600191505092915050565b60006110c26110bb6115db565b84846117ac565b6001905092915050565b600560169054906101000a900460ff1681565b6110e76115db565b73ffffffffffffffffffffffffffffffffffffffff16611105610e1c565b73ffffffffffffffffffffffffffffffffffffffff161461115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115290612c8e565b60405180910390fd5b801515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036111ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e490612fa1565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161128a9190612880565b60405180910390a25050565b61129e6115db565b73ffffffffffffffffffffffffffffffffffffffff166112bc610e1c565b73ffffffffffffffffffffffffffffffffffffffff1614611312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130990612c8e565b60405180910390fd5b80600560146101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161135b9190612880565b60405180910390a150565b60085481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600a5481565b6114076115db565b73ffffffffffffffffffffffffffffffffffffffff16611425610e1c565b73ffffffffffffffffffffffffffffffffffffffff161461147b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147290612c8e565b60405180910390fd5b8060088190555061149d606461148f61096c565b611f3b90919063ffffffff16565b60085410156114e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d890612e7d565b60405180910390fd5b50565b6114ec6115db565b73ffffffffffffffffffffffffffffffffffffffff1661150a610e1c565b73ffffffffffffffffffffffffffffffffffffffff1614611560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155790612c8e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c690613033565b60405180910390fd5b6115d881611e75565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611652576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611649906130c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b890613157565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161179f9190612990565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361181b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611812906131e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361188a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118819061327b565b60405180910390fd5b600081036118a35761189e83836000611f51565b611e5a565b6118ab610e1c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561191957506118e9610e1c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611ad8577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156119c75750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611a1d5750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611a355750600560169054906101000a900460ff165b15611ad75742600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611a8557600080fd5b60065442611a939190612d6f565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b6000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611b7b5750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905080611bc857600854821115611bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbe9061330d565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611c21575080155b15611c85576000611c3184610c9a565b9050600a548382611c429190612d6f565b1115611c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7a9061339f565b60405180910390fd5b505b6000611c9030610c9a565b905060006009548210159050808015611cb65750600560159054906101000a900460ff16155b8015611d0d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015611d255750600560149054906101000a900460ff165b15611d39576009549150611d38826121d0565b5b82611e4b5760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480611de557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b15611e2957611e266064611e18611e09600c54600b54611e5f90919063ffffffff16565b8861236a90919063ffffffff16565b611f3b90919063ffffffff16565b90505b611e3c818661238090919063ffffffff16565b9450611e49873083611f51565b505b611e56868686611f51565b5050505b505050565b60008183611e6d9190612d6f565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183611f4991906133ee565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb7906131e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361202f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120269061327b565b60405180910390fd5b61203a838383612396565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156120c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b790613491565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121539190612d6f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121b79190612990565b60405180910390a36121ca84848461239b565b50505050565b6001600560156101000a81548160ff021916908315150217905550600061222a612207600c54600b54611e5f90919063ffffffff16565b61221c600b548561236a90919063ffffffff16565b611f3b90919063ffffffff16565b90506000612242600283611f3b90919063ffffffff16565b90506000612259828461238090919063ffffffff16565b90506000479050612269836123a0565b600061227e824761238090919063ffffffff16565b905061228a8382612619565b6122a56122a0868861238090919063ffffffff16565b6123a0565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561230d573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486848260405161233f9291906134b1565b60405180910390a150505050506000600560156101000a81548160ff02191690831515021790555050565b6000818361237891906134da565b905092915050565b6000818361238e9190613534565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156123bd576123bc613568565b5b6040519080825280602002602001820160405280156123eb5781602001602082028036833780820191505090505b509050308160008151811061240357612402613597565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ce91906135db565b816001815181106124e2576124e1613597565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508161254930600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661136c565b101561257f5761257e30600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000196115e3565b5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016125e3959493929190613701565b600060405180830381600087803b1580156125fd57600080fd5b505af1158015612611573d6000803e3d6000fd5b505050505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612665610e1c565b426040518863ffffffff1660e01b81526004016126879695949392919061375b565b60606040518083038185885af11580156126a5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126ca91906137d1565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561270b5780820151818401526020810190506126f0565b8381111561271a576000848401525b50505050565b6000601f19601f8301169050919050565b600061273c826126d1565b61274681856126dc565b93506127568185602086016126ed565b61275f81612720565b840191505092915050565b600060208201905081810360008301526127848184612731565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127bc82612791565b9050919050565b6127cc816127b1565b81146127d757600080fd5b50565b6000813590506127e9816127c3565b92915050565b6000819050919050565b612802816127ef565b811461280d57600080fd5b50565b60008135905061281f816127f9565b92915050565b6000806040838503121561283c5761283b61278c565b5b600061284a858286016127da565b925050602061285b85828601612810565b9150509250929050565b60008115159050919050565b61287a81612865565b82525050565b60006020820190506128956000830184612871565b92915050565b6128a481612865565b81146128af57600080fd5b50565b6000813590506128c18161289b565b92915050565b600080604083850312156128de576128dd61278c565b5b60006128ec858286016128b2565b92505060206128fd85828601612810565b9150509250929050565b6000819050919050565b600061292c61292761292284612791565b612907565b612791565b9050919050565b600061293e82612911565b9050919050565b600061295082612933565b9050919050565b61296081612945565b82525050565b600060208201905061297b6000830184612957565b92915050565b61298a816127ef565b82525050565b60006020820190506129a56000830184612981565b92915050565b6000806000606084860312156129c4576129c361278c565b5b60006129d2868287016127da565b93505060206129e3868287016127da565b92505060406129f486828701612810565b9150509250925092565b600060ff82169050919050565b612a14816129fe565b82525050565b6000602082019050612a2f6000830184612a0b565b92915050565b612a3e816127b1565b82525050565b6000602082019050612a596000830184612a35565b92915050565b600060208284031215612a7557612a7461278c565b5b6000612a83848285016127da565b91505092915050565b60008060408385031215612aa357612aa261278c565b5b6000612ab185828601612810565b9250506020612ac285828601612810565b9150509250929050565b600060208284031215612ae257612ae161278c565b5b6000612af084828501612810565b91505092915050565b6000612b0482612791565b9050919050565b612b1481612af9565b82525050565b6000602082019050612b2f6000830184612b0b565b92915050565b60008060408385031215612b4c57612b4b61278c565b5b6000612b5a858286016127da565b9250506020612b6b858286016128b2565b9150509250929050565b600060208284031215612b8b57612b8a61278c565b5b6000612b99848285016128b2565b91505092915050565b60008060408385031215612bb957612bb861278c565b5b6000612bc7858286016127da565b9250506020612bd8858286016127da565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612c2957607f821691505b602082108103612c3c57612c3b612be2565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612c786020836126dc565b9150612c8382612c42565b602082019050919050565b60006020820190508181036000830152612ca781612c6b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612d0a6028836126dc565b9150612d1582612cae565b604082019050919050565b60006020820190508181036000830152612d3981612cfd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d7a826127ef565b9150612d85836127ef565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612dba57612db9612d40565b5b828201905092915050565b7f74617820746f6f20687567680000000000000000000000000000000000000000600082015250565b6000612dfb600c836126dc565b9150612e0682612dc5565b602082019050919050565b60006020820190508181036000830152612e2a81612dee565b9050919050565b7f76616c756520697320746f6f206c6f7700000000000000000000000000000000600082015250565b6000612e676010836126dc565b9150612e7282612e31565b602082019050919050565b60006020820190508181036000830152612e9681612e5a565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612ef96025836126dc565b9150612f0482612e9d565b604082019050919050565b60006020820190508181036000830152612f2881612eec565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000612f8b602a836126dc565b9150612f9682612f2f565b604082019050919050565b60006020820190508181036000830152612fba81612f7e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061301d6026836126dc565b915061302882612fc1565b604082019050919050565b6000602082019050818103600083015261304c81613010565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006130af6024836126dc565b91506130ba82613053565b604082019050919050565b600060208201905081810360008301526130de816130a2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006131416022836126dc565b915061314c826130e5565b604082019050919050565b6000602082019050818103600083015261317081613134565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006131d36025836126dc565b91506131de82613177565b604082019050919050565b60006020820190508181036000830152613202816131c6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006132656023836126dc565b915061327082613209565b604082019050919050565b6000602082019050818103600083015261329481613258565b9050919050565b7f616d6f756e74206578636565647320746865206d61785472616e73616374696f60008201527f6e416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006132f76028836126dc565b91506133028261329b565b604082019050919050565b60006020820190508181036000830152613326816132ea565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b60006133896024836126dc565b91506133948261332d565b604082019050919050565b600060208201905081810360008301526133b88161337c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006133f9826127ef565b9150613404836127ef565b925082613414576134136133bf565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061347b6026836126dc565b91506134868261341f565b604082019050919050565b600060208201905081810360008301526134aa8161346e565b9050919050565b60006040820190506134c66000830185612981565b6134d36020830184612981565b9392505050565b60006134e5826127ef565b91506134f0836127ef565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561352957613528612d40565b5b828202905092915050565b600061353f826127ef565b915061354a836127ef565b92508282101561355d5761355c612d40565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506135d5816127c3565b92915050565b6000602082840312156135f1576135f061278c565b5b60006135ff848285016135c6565b91505092915050565b6000819050919050565b600061362d61362861362384613608565b612907565b6127ef565b9050919050565b61363d81613612565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613678816127b1565b82525050565b600061368a838361366f565b60208301905092915050565b6000602082019050919050565b60006136ae82613643565b6136b8818561364e565b93506136c38361365f565b8060005b838110156136f45781516136db888261367e565b97506136e683613696565b9250506001810190506136c7565b5085935050505092915050565b600060a0820190506137166000830188612981565b6137236020830187613634565b818103604083015261373581866136a3565b90506137446060830185612a35565b6137516080830184612981565b9695505050505050565b600060c0820190506137706000830189612a35565b61377d6020830188612981565b61378a6040830187613634565b6137976060830186613634565b6137a46080830185612a35565b6137b160a0830184612981565b979650505050505050565b6000815190506137cb816127f9565b92915050565b6000806000606084860312156137ea576137e961278c565b5b60006137f8868287016137bc565b9350506020613809868287016137bc565b925050604061381a868287016137bc565b915050925092509256fea264697066735822122065a02fb82efbfd50157e023d27dfa8f4badb09b4423919a65d846b0307aa84a464736f6c634300080f0033
Deployed Bytecode
0x6080604052600436106101f25760003560e01c8063750c11b61161010d578063a985ceef116100a0578063dd62ed3e1161006f578063dd62ed3e14610710578063e2f456051461074d578063e6c75f7114610778578063ec28438a146107a3578063f2fde38b146107cc576101f9565b8063a985ceef14610668578063c024666814610693578063c49b9a80146106bc578063c8c8ebe4146106e5576101f9565b806395d89b41116100dc57806395d89b411461059857806398118cb4146105c3578063a457c2d7146105ee578063a9059cbb1461062b576101f9565b8063750c11b6146104f057806375f0a874146105195780638da5cb5b1461054457806391d55f411461056f576101f9565b806349bd5a5e116101855780636b67c4df116101545780636b67c4df1461044657806370a0823114610471578063715018a6146104ae578063722b62ad146104c5576101f9565b806349bd5a5e1461038a5780634a74bb02146103b55780634fbee193146103e057806352f7c9881461041d576101f9565b806318160ddd116101c157806318160ddd146102ba57806323b872dd146102e5578063313ce56714610322578063395093511461034d576101f9565b806306fdde03146101fe578063095ea7b3146102295780630d45c0e3146102665780631694505e1461028f576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b506102136107f5565b604051610220919061276a565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b9190612825565b610887565b60405161025d9190612880565b60405180910390f35b34801561027257600080fd5b5061028d600480360381019061028891906128c7565b6108a5565b005b34801561029b57600080fd5b506102a4610946565b6040516102b19190612966565b60405180910390f35b3480156102c657600080fd5b506102cf61096c565b6040516102dc9190612990565b60405180910390f35b3480156102f157600080fd5b5061030c600480360381019061030791906129ab565b610976565b6040516103199190612880565b60405180910390f35b34801561032e57600080fd5b50610337610a6e565b6040516103449190612a1a565b60405180910390f35b34801561035957600080fd5b50610374600480360381019061036f9190612825565b610a77565b6040516103819190612880565b60405180910390f35b34801561039657600080fd5b5061039f610b23565b6040516103ac9190612a44565b60405180910390f35b3480156103c157600080fd5b506103ca610b47565b6040516103d79190612880565b60405180910390f35b3480156103ec57600080fd5b5061040760048036038101906104029190612a5f565b610b5a565b6040516104149190612880565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f9190612a8c565b610bb0565b005b34801561045257600080fd5b5061045b610c94565b6040516104689190612990565b60405180910390f35b34801561047d57600080fd5b5061049860048036038101906104939190612a5f565b610c9a565b6040516104a59190612990565b60405180910390f35b3480156104ba57600080fd5b506104c3610ce2565b005b3480156104d157600080fd5b506104da610d6a565b6040516104e79190612990565b60405180910390f35b3480156104fc57600080fd5b5061051760048036038101906105129190612acc565b610d70565b005b34801561052557600080fd5b5061052e610df6565b60405161053b9190612b1a565b60405180910390f35b34801561055057600080fd5b50610559610e1c565b6040516105669190612a44565b60405180910390f35b34801561057b57600080fd5b5061059660048036038101906105919190612acc565b610e46565b005b3480156105a457600080fd5b506105ad610f2b565b6040516105ba919061276a565b60405180910390f35b3480156105cf57600080fd5b506105d8610fbd565b6040516105e59190612990565b60405180910390f35b3480156105fa57600080fd5b5061061560048036038101906106109190612825565b610fc3565b6040516106229190612880565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d9190612825565b6110ae565b60405161065f9190612880565b60405180910390f35b34801561067457600080fd5b5061067d6110cc565b60405161068a9190612880565b60405180910390f35b34801561069f57600080fd5b506106ba60048036038101906106b59190612b35565b6110df565b005b3480156106c857600080fd5b506106e360048036038101906106de9190612b75565b611296565b005b3480156106f157600080fd5b506106fa611366565b6040516107079190612990565b60405180910390f35b34801561071c57600080fd5b5061073760048036038101906107329190612ba2565b61136c565b6040516107449190612990565b60405180910390f35b34801561075957600080fd5b506107626113f3565b60405161076f9190612990565b60405180910390f35b34801561078457600080fd5b5061078d6113f9565b60405161079a9190612990565b60405180910390f35b3480156107af57600080fd5b506107ca60048036038101906107c59190612acc565b6113ff565b005b3480156107d857600080fd5b506107f360048036038101906107ee9190612a5f565b6114e4565b005b60606003805461080490612c11565b80601f016020809104026020016040519081016040528092919081815260200182805461083090612c11565b801561087d5780601f106108525761010080835404028352916020019161087d565b820191906000526020600020905b81548152906001019060200180831161086057829003601f168201915b5050505050905090565b600061089b6108946115db565b84846115e3565b6001905092915050565b6108ad6115db565b73ffffffffffffffffffffffffffffffffffffffff166108cb610e1c565b73ffffffffffffffffffffffffffffffffffffffff1614610921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091890612c8e565b60405180910390fd5b81600560166101000a81548160ff021916908315150217905550806006819055505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60006109838484846117ac565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109ce6115db565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4590612d20565b60405180910390fd5b610a6285610a5a6115db565b8584036115e3565b60019150509392505050565b60006012905090565b6000610b19610a846115db565b848460016000610a926115db565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b149190612d6f565b6115e3565b6001905092915050565b7f00000000000000000000000066ef156d640669fb81ae2ef924c10f1dbaf11a0481565b600560149054906101000a900460ff1681565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610bb86115db565b73ffffffffffffffffffffffffffffffffffffffff16610bd6610e1c565b73ffffffffffffffffffffffffffffffffffffffff1614610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2390612c8e565b60405180910390fd5b6005610c418284611e5f90919063ffffffff16565b1115610c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7990612e11565b60405180910390fd5b81600b8190555080600c819055505050565b600c5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cea6115db565b73ffffffffffffffffffffffffffffffffffffffff16610d08610e1c565b73ffffffffffffffffffffffffffffffffffffffff1614610d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5590612c8e565b60405180910390fd5b610d686000611e75565b565b60065481565b610d786115db565b73ffffffffffffffffffffffffffffffffffffffff16610d96610e1c565b73ffffffffffffffffffffffffffffffffffffffff1614610dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de390612c8e565b60405180910390fd5b8060098190555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e4e6115db565b73ffffffffffffffffffffffffffffffffffffffff16610e6c610e1c565b73ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990612c8e565b60405180910390fd5b80600a81905550610ee46064610ed661096c565b611f3b90919063ffffffff16565b600a541015610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f90612e7d565b60405180910390fd5b50565b606060048054610f3a90612c11565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6690612c11565b8015610fb35780601f10610f8857610100808354040283529160200191610fb3565b820191906000526020600020905b815481529060010190602001808311610f9657829003601f168201915b5050505050905090565b600b5481565b60008060016000610fd26115db565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561108f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108690612f0f565b60405180910390fd5b6110a361109a6115db565b858584036115e3565b600191505092915050565b60006110c26110bb6115db565b84846117ac565b6001905092915050565b600560169054906101000a900460ff1681565b6110e76115db565b73ffffffffffffffffffffffffffffffffffffffff16611105610e1c565b73ffffffffffffffffffffffffffffffffffffffff161461115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115290612c8e565b60405180910390fd5b801515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036111ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e490612fa1565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161128a9190612880565b60405180910390a25050565b61129e6115db565b73ffffffffffffffffffffffffffffffffffffffff166112bc610e1c565b73ffffffffffffffffffffffffffffffffffffffff1614611312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130990612c8e565b60405180910390fd5b80600560146101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161135b9190612880565b60405180910390a150565b60085481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600a5481565b6114076115db565b73ffffffffffffffffffffffffffffffffffffffff16611425610e1c565b73ffffffffffffffffffffffffffffffffffffffff161461147b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147290612c8e565b60405180910390fd5b8060088190555061149d606461148f61096c565b611f3b90919063ffffffff16565b60085410156114e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d890612e7d565b60405180910390fd5b50565b6114ec6115db565b73ffffffffffffffffffffffffffffffffffffffff1661150a610e1c565b73ffffffffffffffffffffffffffffffffffffffff1614611560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155790612c8e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c690613033565b60405180910390fd5b6115d881611e75565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611652576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611649906130c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b890613157565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161179f9190612990565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361181b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611812906131e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361188a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118819061327b565b60405180910390fd5b600081036118a35761189e83836000611f51565b611e5a565b6118ab610e1c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561191957506118e9610e1c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611ad8577f00000000000000000000000066ef156d640669fb81ae2ef924c10f1dbaf11a0473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156119c75750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611a1d5750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611a355750600560169054906101000a900460ff165b15611ad75742600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611a8557600080fd5b60065442611a939190612d6f565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b6000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611b7b5750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905080611bc857600854821115611bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbe9061330d565b60405180910390fd5b5b7f00000000000000000000000066ef156d640669fb81ae2ef924c10f1dbaf11a0473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611c21575080155b15611c85576000611c3184610c9a565b9050600a548382611c429190612d6f565b1115611c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7a9061339f565b60405180910390fd5b505b6000611c9030610c9a565b905060006009548210159050808015611cb65750600560159054906101000a900460ff16155b8015611d0d57507f00000000000000000000000066ef156d640669fb81ae2ef924c10f1dbaf11a0473ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015611d255750600560149054906101000a900460ff165b15611d39576009549150611d38826121d0565b5b82611e4b5760007f00000000000000000000000066ef156d640669fb81ae2ef924c10f1dbaf11a0473ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480611de557507f00000000000000000000000066ef156d640669fb81ae2ef924c10f1dbaf11a0473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b15611e2957611e266064611e18611e09600c54600b54611e5f90919063ffffffff16565b8861236a90919063ffffffff16565b611f3b90919063ffffffff16565b90505b611e3c818661238090919063ffffffff16565b9450611e49873083611f51565b505b611e56868686611f51565b5050505b505050565b60008183611e6d9190612d6f565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183611f4991906133ee565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb7906131e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361202f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120269061327b565b60405180910390fd5b61203a838383612396565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156120c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b790613491565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121539190612d6f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121b79190612990565b60405180910390a36121ca84848461239b565b50505050565b6001600560156101000a81548160ff021916908315150217905550600061222a612207600c54600b54611e5f90919063ffffffff16565b61221c600b548561236a90919063ffffffff16565b611f3b90919063ffffffff16565b90506000612242600283611f3b90919063ffffffff16565b90506000612259828461238090919063ffffffff16565b90506000479050612269836123a0565b600061227e824761238090919063ffffffff16565b905061228a8382612619565b6122a56122a0868861238090919063ffffffff16565b6123a0565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561230d573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486848260405161233f9291906134b1565b60405180910390a150505050506000600560156101000a81548160ff02191690831515021790555050565b6000818361237891906134da565b905092915050565b6000818361238e9190613534565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156123bd576123bc613568565b5b6040519080825280602002602001820160405280156123eb5781602001602082028036833780820191505090505b509050308160008151811061240357612402613597565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ce91906135db565b816001815181106124e2576124e1613597565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508161254930600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661136c565b101561257f5761257e30600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000196115e3565b5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016125e3959493929190613701565b600060405180830381600087803b1580156125fd57600080fd5b505af1158015612611573d6000803e3d6000fd5b505050505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612665610e1c565b426040518863ffffffff1660e01b81526004016126879695949392919061375b565b60606040518083038185885af11580156126a5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126ca91906137d1565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561270b5780820151818401526020810190506126f0565b8381111561271a576000848401525b50505050565b6000601f19601f8301169050919050565b600061273c826126d1565b61274681856126dc565b93506127568185602086016126ed565b61275f81612720565b840191505092915050565b600060208201905081810360008301526127848184612731565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127bc82612791565b9050919050565b6127cc816127b1565b81146127d757600080fd5b50565b6000813590506127e9816127c3565b92915050565b6000819050919050565b612802816127ef565b811461280d57600080fd5b50565b60008135905061281f816127f9565b92915050565b6000806040838503121561283c5761283b61278c565b5b600061284a858286016127da565b925050602061285b85828601612810565b9150509250929050565b60008115159050919050565b61287a81612865565b82525050565b60006020820190506128956000830184612871565b92915050565b6128a481612865565b81146128af57600080fd5b50565b6000813590506128c18161289b565b92915050565b600080604083850312156128de576128dd61278c565b5b60006128ec858286016128b2565b92505060206128fd85828601612810565b9150509250929050565b6000819050919050565b600061292c61292761292284612791565b612907565b612791565b9050919050565b600061293e82612911565b9050919050565b600061295082612933565b9050919050565b61296081612945565b82525050565b600060208201905061297b6000830184612957565b92915050565b61298a816127ef565b82525050565b60006020820190506129a56000830184612981565b92915050565b6000806000606084860312156129c4576129c361278c565b5b60006129d2868287016127da565b93505060206129e3868287016127da565b92505060406129f486828701612810565b9150509250925092565b600060ff82169050919050565b612a14816129fe565b82525050565b6000602082019050612a2f6000830184612a0b565b92915050565b612a3e816127b1565b82525050565b6000602082019050612a596000830184612a35565b92915050565b600060208284031215612a7557612a7461278c565b5b6000612a83848285016127da565b91505092915050565b60008060408385031215612aa357612aa261278c565b5b6000612ab185828601612810565b9250506020612ac285828601612810565b9150509250929050565b600060208284031215612ae257612ae161278c565b5b6000612af084828501612810565b91505092915050565b6000612b0482612791565b9050919050565b612b1481612af9565b82525050565b6000602082019050612b2f6000830184612b0b565b92915050565b60008060408385031215612b4c57612b4b61278c565b5b6000612b5a858286016127da565b9250506020612b6b858286016128b2565b9150509250929050565b600060208284031215612b8b57612b8a61278c565b5b6000612b99848285016128b2565b91505092915050565b60008060408385031215612bb957612bb861278c565b5b6000612bc7858286016127da565b9250506020612bd8858286016127da565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612c2957607f821691505b602082108103612c3c57612c3b612be2565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612c786020836126dc565b9150612c8382612c42565b602082019050919050565b60006020820190508181036000830152612ca781612c6b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612d0a6028836126dc565b9150612d1582612cae565b604082019050919050565b60006020820190508181036000830152612d3981612cfd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d7a826127ef565b9150612d85836127ef565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612dba57612db9612d40565b5b828201905092915050565b7f74617820746f6f20687567680000000000000000000000000000000000000000600082015250565b6000612dfb600c836126dc565b9150612e0682612dc5565b602082019050919050565b60006020820190508181036000830152612e2a81612dee565b9050919050565b7f76616c756520697320746f6f206c6f7700000000000000000000000000000000600082015250565b6000612e676010836126dc565b9150612e7282612e31565b602082019050919050565b60006020820190508181036000830152612e9681612e5a565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612ef96025836126dc565b9150612f0482612e9d565b604082019050919050565b60006020820190508181036000830152612f2881612eec565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000612f8b602a836126dc565b9150612f9682612f2f565b604082019050919050565b60006020820190508181036000830152612fba81612f7e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061301d6026836126dc565b915061302882612fc1565b604082019050919050565b6000602082019050818103600083015261304c81613010565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006130af6024836126dc565b91506130ba82613053565b604082019050919050565b600060208201905081810360008301526130de816130a2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006131416022836126dc565b915061314c826130e5565b604082019050919050565b6000602082019050818103600083015261317081613134565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006131d36025836126dc565b91506131de82613177565b604082019050919050565b60006020820190508181036000830152613202816131c6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006132656023836126dc565b915061327082613209565b604082019050919050565b6000602082019050818103600083015261329481613258565b9050919050565b7f616d6f756e74206578636565647320746865206d61785472616e73616374696f60008201527f6e416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006132f76028836126dc565b91506133028261329b565b604082019050919050565b60006020820190508181036000830152613326816132ea565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b60006133896024836126dc565b91506133948261332d565b604082019050919050565b600060208201905081810360008301526133b88161337c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006133f9826127ef565b9150613404836127ef565b925082613414576134136133bf565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061347b6026836126dc565b91506134868261341f565b604082019050919050565b600060208201905081810360008301526134aa8161346e565b9050919050565b60006040820190506134c66000830185612981565b6134d36020830184612981565b9392505050565b60006134e5826127ef565b91506134f0836127ef565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561352957613528612d40565b5b828202905092915050565b600061353f826127ef565b915061354a836127ef565b92508282101561355d5761355c612d40565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506135d5816127c3565b92915050565b6000602082840312156135f1576135f061278c565b5b60006135ff848285016135c6565b91505092915050565b6000819050919050565b600061362d61362861362384613608565b612907565b6127ef565b9050919050565b61363d81613612565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613678816127b1565b82525050565b600061368a838361366f565b60208301905092915050565b6000602082019050919050565b60006136ae82613643565b6136b8818561364e565b93506136c38361365f565b8060005b838110156136f45781516136db888261367e565b97506136e683613696565b9250506001810190506136c7565b5085935050505092915050565b600060a0820190506137166000830188612981565b6137236020830187613634565b818103604083015261373581866136a3565b90506137446060830185612a35565b6137516080830184612981565b9695505050505050565b600060c0820190506137706000830189612a35565b61377d6020830188612981565b61378a6040830187613634565b6137976060830186613634565b6137a46080830185612a35565b6137b160a0830184612981565b979650505050505050565b6000815190506137cb816127f9565b92915050565b6000806000606084860312156137ea576137e961278c565b5b60006137f8868287016137bc565b9350506020613809868287016137bc565b925050604061381a868287016137bc565b915050925092509256fea264697066735822122065a02fb82efbfd50157e023d27dfa8f4badb09b4423919a65d846b0307aa84a464736f6c634300080f0033
Deployed Bytecode Sourcemap
39939:8263:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5802:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7969:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47969:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40616:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6922:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8620:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6764:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9521:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40664:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40022:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46850:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47182:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40477:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7093:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17332:94;;;;;;;;;;;;;:::i;:::-;;40150:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47624:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40515:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16681:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47428:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6021:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40439:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10239:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7433:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40109:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46554:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47751:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40257:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7671:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40320:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40379:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46983:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17581:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5802:100;5856:13;5889:5;5882:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5802:100;:::o;7969:169::-;8052:4;8069:39;8078:12;:10;:12::i;:::-;8092:7;8101:6;8069:8;:39::i;:::-;8126:4;8119:11;;7969:169;;;;:::o;47969:180::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48086:9:::1;48068:15;;:27;;;;;;;;;;;;;;;;;;48130:11;48106:21;:35;;;;47969:180:::0;;:::o;40616:41::-;;;;;;;;;;;;;:::o;6922:108::-;6983:7;7010:12;;7003:19;;6922:108;:::o;8620:492::-;8760:4;8777:36;8787:6;8795:9;8806:6;8777:9;:36::i;:::-;8826:24;8853:11;:19;8865:6;8853:19;;;;;;;;;;;;;;;:33;8873:12;:10;:12::i;:::-;8853:33;;;;;;;;;;;;;;;;8826:60;;8925:6;8905:16;:26;;8897:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9012:57;9021:6;9029:12;:10;:12::i;:::-;9062:6;9043:16;:25;9012:8;:57::i;:::-;9100:4;9093:11;;;8620:492;;;;;:::o;6764:93::-;6822:5;6847:2;6840:9;;6764:93;:::o;9521:215::-;9609:4;9626:80;9635:12;:10;:12::i;:::-;9649:7;9695:10;9658:11;:25;9670:12;:10;:12::i;:::-;9658:25;;;;;;;;;;;;;;;:34;9684:7;9658:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9626:8;:80::i;:::-;9724:4;9717:11;;9521:215;;;;:::o;40664:38::-;;;:::o;40022:40::-;;;;;;;;;;;;;:::o;46850:125::-;46915:4;46939:19;:28;46959:7;46939:28;;;;;;;;;;;;;;;;;;;;;;;;;46932:35;;46850:125;;;:::o;47182:238::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47316:1:::1;47280:32;47298:13;47280;:17;;:32;;;;:::i;:::-;:37;;47272:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;47360:13;47345:12;:28;;;;47399:13;47384:12;:28;;;;47182:238:::0;;:::o;40477:31::-;;;;:::o;7093:127::-;7167:7;7194:9;:18;7204:7;7194:18;;;;;;;;;;;;;;;;7187:25;;7093:127;;;:::o;17332:94::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17397:21:::1;17415:1;17397:9;:21::i;:::-;17332:94::o:0;40150:49::-;;;;:::o;47624:119::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47725:10:::1;47704:18;:31;;;;47624:119:::0;:::o;40515:92::-;;;;;;;;;;;;;:::o;16681:87::-;16727:7;16754:6;;;;;;;;;;;16747:13;;16681:87;:::o;47428:188::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47520:9:::1;47503:14;:26;;;;47566:22;47584:3;47566:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;47548:14;;:40;;47540:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;47428:188:::0;:::o;6021:104::-;6077:13;6110:7;6103:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6021:104;:::o;40439:31::-;;;;:::o;10239:413::-;10332:4;10349:24;10376:11;:25;10388:12;:10;:12::i;:::-;10376:25;;;;;;;;;;;;;;;:34;10402:7;10376:34;;;;;;;;;;;;;;;;10349:61;;10449:15;10429:16;:35;;10421:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10542:67;10551:12;:10;:12::i;:::-;10565:7;10593:15;10574:16;:34;10542:8;:67::i;:::-;10640:4;10633:11;;;10239:413;;;;:::o;7433:175::-;7519:4;7536:42;7546:12;:10;:12::i;:::-;7560:9;7571:6;7536:9;:42::i;:::-;7596:4;7589:11;;7433:175;;;;:::o;40109:34::-;;;;;;;;;;;;;:::o;46554:288::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46679:8:::1;46647:40;;:19;:28;46667:7;46647:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;46639:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;46776:8;46745:19;:28;46765:7;46745:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;46816:7;46800:34;;;46825:8;46800:34;;;;;;:::i;:::-;;;;;;;;46554:288:::0;;:::o;47751:171::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47852:8:::1;47828:21;;:32;;;;;;;;;;;;;;;;;;47876:38;47905:8;47876:38;;;;;;:::i;:::-;;;;;;;;47751:171:::0;:::o;40257:56::-;;;;:::o;7671:151::-;7760:7;7787:11;:18;7799:5;7787:18;;;;;;;;;;;;;;;:27;7806:7;7787:27;;;;;;;;;;;;;;;;7780:34;;7671:151;;;;:::o;40320:52::-;;;;:::o;40379:50::-;;;;:::o;46983:191::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47074:6:::1;47051:20;:29;;;;47123:22;47141:3;47123:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;47099:20;;:46;;47091:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;46983:191:::0;:::o;17581:192::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17690:1:::1;17670:22;;:8;:22;;::::0;17662:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17746:19;17756:8;17746:9;:19::i;:::-;17581:192:::0;:::o;323:98::-;376:7;403:10;396:17;;323:98;:::o;13931:380::-;14084:1;14067:19;;:5;:19;;;14059:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14165:1;14146:21;;:7;:21;;;14138:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14249:6;14219:11;:18;14231:5;14219:18;;;;;;;;;;;;;;;:27;14238:7;14219:27;;;;;;;;;;;;;;;:36;;;;14287:7;14271:32;;14280:5;14271:32;;;14296:6;14271:32;;;;;;:::i;:::-;;;;;;;;13931:380;;;:::o;42080:2098::-;42228:1;42212:18;;:4;:18;;;42204:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42305:1;42291:16;;:2;:16;;;42283:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42373:1;42363:6;:11;42360:92;;42391:28;42407:4;42413:2;42417:1;42391:15;:28::i;:::-;42434:7;;42360:92;42476:7;:5;:7::i;:::-;42468:15;;:4;:15;;;;:32;;;;;42493:7;:5;:7::i;:::-;42487:13;;:2;:13;;;;42468:32;42464:365;;;42529:13;42521:21;;:4;:21;;;:55;;;;;42560:15;;;;;;;;;;;42546:30;;:2;:30;;;;42521:55;:84;;;;;42582:19;:23;42602:2;42582:23;;;;;;;;;;;;;;;;;;;;;;;;;42580:25;42521:84;:103;;;;;42609:15;;;;;;;;;;;42521:103;42517:287;;;42697:15;42682:8;:12;42691:2;42682:12;;;;;;;;;;;;;;;;:30;42674:39;;;;;;42766:21;;42747:15;:41;;;;:::i;:::-;42732:8;:12;42741:2;42732:12;;;;;;;;;;;;;;;:56;;;;42517:287;42464:365;42841:20;42864:19;:25;42884:4;42864:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;42893:19;:23;42913:2;42893:23;;;;;;;;;;;;;;;;;;;;;;;;;42864:52;42841:75;;42934:15;42930:130;;42983:20;;42973:6;:30;;42965:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;42930:130;43092:13;43084:21;;:4;:21;;;:41;;;;;43110:15;43109:16;43084:41;43080:237;;;43142:32;43177:13;43187:2;43177:9;:13::i;:::-;43142:48;;43250:14;;43240:6;43213:24;:33;;;;:::i;:::-;:51;;43205:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;43127:190;43080:237;43334:28;43365:24;43383:4;43365:9;:24::i;:::-;43334:55;;43410:24;43461:18;;43437:20;:42;;43410:69;;43502:19;:40;;;;;43526:16;;;;;;;;;;;43525:17;43502:40;:63;;;;;43552:13;43546:19;;:2;:19;;;43502:63;:88;;;;;43569:21;;;;;;;;;;;43502:88;43499:214;;;43630:18;;43607:41;;43663:36;43678:20;43663:14;:36::i;:::-;43499:214;43815:15;43811:312;;43847:12;43885:13;43877:21;;:4;:21;;;:44;;;;43908:13;43902:19;;:2;:19;;;43877:44;43874:141;;;43948:51;43995:3;43948:42;43959:30;43976:12;;43959;;:16;;:30;;;;:::i;:::-;43948:6;:10;;:42;;;;:::i;:::-;:46;;:51;;;;:::i;:::-;43940:59;;43874:141;44037:16;44048:4;44037:6;:10;;:16;;;;:::i;:::-;44028:25;;44068:42;44084:4;44098;44105;44068:15;:42::i;:::-;43832:291;43811:312;44135:33;44151:4;44157:2;44161:6;44135:15;:33::i;:::-;42193:1985;;;42080:2098;;;;:::o;27835:98::-;27893:7;27924:1;27920;:5;;;;:::i;:::-;27913:12;;27835:98;;;;:::o;17781:173::-;17837:16;17856:6;;;;;;;;;;;17837:25;;17882:8;17873:6;;:17;;;;;;;;;;;;;;;;;;17937:8;17906:40;;17927:8;17906:40;;;;;;;;;;;;17826:128;17781:173;:::o;28972:98::-;29030:7;29061:1;29057;:5;;;;:::i;:::-;29050:12;;28972:98;;;;:::o;11142:733::-;11300:1;11282:20;;:6;:20;;;11274:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11384:1;11363:23;;:9;:23;;;11355:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11439:47;11460:6;11468:9;11479:6;11439:20;:47::i;:::-;11499:21;11523:9;:17;11533:6;11523:17;;;;;;;;;;;;;;;;11499:41;;11576:6;11559:13;:23;;11551:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11697:6;11681:13;:22;11661:9;:17;11671:6;11661:17;;;;;;;;;;;;;;;:42;;;;11749:6;11725:9;:20;11735:9;11725:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;11790:9;11773:35;;11782:6;11773:35;;;11801:6;11773:35;;;;;;:::i;:::-;;;;;;;;11821:46;11841:6;11849:9;11860:6;11821:19;:46::i;:::-;11263:612;11142:733;;;:::o;44187:1270::-;40878:4;40859:16;;:23;;;;;;;;;;;;;;;;;;44272:26:::1;44301:74;44344:30;44361:12;;44344;;:16;;:30;;;;:::i;:::-;44301:38;44326:12;;44301:20;:24;;:38;;;;:::i;:::-;:42;;:74;;;;:::i;:::-;44272:103;;44444:12;44459:25;44482:1;44459:18;:22;;:25;;;;:::i;:::-;44444:40;;44495:17;44515:28;44538:4;44515:18;:22;;:28;;;;:::i;:::-;44495:48;;44821:22;44846:21;44821:46;;44912:22;44929:4;44912:16;:22::i;:::-;45065:18;45086:41;45112:14;45086:21;:25;;:41;;;;:::i;:::-;45065:62;;45177:35;45190:9;45201:10;45177:12;:35::i;:::-;45270:62;45287:44;45312:18;45287:20;:24;;:44;;;;:::i;:::-;45270:16;:62::i;:::-;45343:15;;;;;;;;;;;:24;;:47;45368:21;45343:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;45416:32;45431:4;45437:10;45416:32;;;;;;;:::i;:::-;;;;;;;;44261:1196;;;;;40924:5:::0;40905:16;;:24;;;;;;;;;;;;;;;;;;44187:1270;:::o;28573:98::-;28631:7;28662:1;28658;:5;;;;:::i;:::-;28651:12;;28573:98;;;;:::o;28216:::-;28274:7;28305:1;28301;:5;;;;:::i;:::-;28294:12;;28216:98;;;;:::o;14911:125::-;;;;:::o;15640:124::-;;;;:::o;45465:692::-;45591:21;45629:1;45615:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45591:40;;45660:4;45642;45647:1;45642:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;45686:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45676:4;45681:1;45676:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;45777:11;45724:50;45742:4;45757:15;;;;;;;;;;;45724:9;:50::i;:::-;:64;45721:156;;;45803:62;45820:4;45835:15;;;;;;;;;;;45862:1;45853:11;45803:8;:62::i;:::-;45721:156;45915:15;;;;;;;;;;;:66;;;45996:11;46022:1;46066:4;46093;46113:15;45915:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45520:637;45465:692;:::o;46165:381::-;46276:15;;;;;;;;;;;:31;;;46315:9;46348:4;46368:11;46394:1;46437;46480:7;:5;:7::i;:::-;46502:15;46276:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;46165:381;;:::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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:116::-;3564:21;3579:5;3564:21;:::i;:::-;3557:5;3554:32;3544:60;;3600:1;3597;3590:12;3544:60;3494:116;:::o;3616:133::-;3659:5;3697:6;3684:20;3675:29;;3713:30;3737:5;3713:30;:::i;:::-;3616:133;;;;:::o;3755:468::-;3820:6;3828;3877:2;3865:9;3856:7;3852:23;3848:32;3845:119;;;3883:79;;:::i;:::-;3845:119;4003:1;4028:50;4070:7;4061:6;4050:9;4046:22;4028:50;:::i;:::-;4018:60;;3974:114;4127:2;4153:53;4198:7;4189:6;4178:9;4174:22;4153:53;:::i;:::-;4143:63;;4098:118;3755:468;;;;;:::o;4229:60::-;4257:3;4278:5;4271:12;;4229:60;;;:::o;4295:142::-;4345:9;4378:53;4396:34;4405:24;4423:5;4405:24;:::i;:::-;4396:34;:::i;:::-;4378:53;:::i;:::-;4365:66;;4295:142;;;:::o;4443:126::-;4493:9;4526:37;4557:5;4526:37;:::i;:::-;4513:50;;4443:126;;;:::o;4575:153::-;4652:9;4685:37;4716:5;4685:37;:::i;:::-;4672:50;;4575:153;;;:::o;4734:185::-;4848:64;4906:5;4848:64;:::i;:::-;4843:3;4836:77;4734:185;;:::o;4925:276::-;5045:4;5083:2;5072:9;5068:18;5060:26;;5096:98;5191:1;5180:9;5176:17;5167:6;5096:98;:::i;:::-;4925:276;;;;:::o;5207:118::-;5294:24;5312:5;5294:24;:::i;:::-;5289:3;5282:37;5207:118;;:::o;5331:222::-;5424:4;5462:2;5451:9;5447:18;5439:26;;5475:71;5543:1;5532:9;5528:17;5519:6;5475:71;:::i;:::-;5331:222;;;;:::o;5559:619::-;5636:6;5644;5652;5701:2;5689:9;5680:7;5676:23;5672:32;5669:119;;;5707:79;;:::i;:::-;5669:119;5827:1;5852:53;5897:7;5888:6;5877:9;5873:22;5852:53;:::i;:::-;5842:63;;5798:117;5954:2;5980:53;6025:7;6016:6;6005:9;6001:22;5980:53;:::i;:::-;5970:63;;5925:118;6082:2;6108:53;6153:7;6144:6;6133:9;6129:22;6108:53;:::i;:::-;6098:63;;6053:118;5559:619;;;;;:::o;6184:86::-;6219:7;6259:4;6252:5;6248:16;6237:27;;6184:86;;;:::o;6276:112::-;6359:22;6375:5;6359:22;:::i;:::-;6354:3;6347:35;6276:112;;:::o;6394:214::-;6483:4;6521:2;6510:9;6506:18;6498:26;;6534:67;6598:1;6587:9;6583:17;6574:6;6534:67;:::i;:::-;6394:214;;;;:::o;6614:118::-;6701:24;6719:5;6701:24;:::i;:::-;6696:3;6689:37;6614:118;;:::o;6738:222::-;6831:4;6869:2;6858:9;6854:18;6846:26;;6882:71;6950:1;6939:9;6935:17;6926:6;6882:71;:::i;:::-;6738:222;;;;:::o;6966:329::-;7025:6;7074:2;7062:9;7053:7;7049:23;7045:32;7042:119;;;7080:79;;:::i;:::-;7042:119;7200:1;7225:53;7270:7;7261:6;7250:9;7246:22;7225:53;:::i;:::-;7215:63;;7171:117;6966:329;;;;:::o;7301:474::-;7369:6;7377;7426:2;7414:9;7405:7;7401:23;7397:32;7394:119;;;7432:79;;:::i;:::-;7394:119;7552:1;7577:53;7622:7;7613:6;7602:9;7598:22;7577:53;:::i;:::-;7567:63;;7523:117;7679:2;7705:53;7750:7;7741:6;7730:9;7726:22;7705:53;:::i;:::-;7695:63;;7650:118;7301:474;;;;;:::o;7781:329::-;7840:6;7889:2;7877:9;7868:7;7864:23;7860:32;7857:119;;;7895:79;;:::i;:::-;7857:119;8015:1;8040:53;8085:7;8076:6;8065:9;8061:22;8040:53;:::i;:::-;8030:63;;7986:117;7781:329;;;;:::o;8116:104::-;8161:7;8190:24;8208:5;8190:24;:::i;:::-;8179:35;;8116:104;;;:::o;8226:142::-;8329:32;8355:5;8329:32;:::i;:::-;8324:3;8317:45;8226:142;;:::o;8374:254::-;8483:4;8521:2;8510:9;8506:18;8498:26;;8534:87;8618:1;8607:9;8603:17;8594:6;8534:87;:::i;:::-;8374:254;;;;:::o;8634:468::-;8699:6;8707;8756:2;8744:9;8735:7;8731:23;8727:32;8724:119;;;8762:79;;:::i;:::-;8724:119;8882:1;8907:53;8952:7;8943:6;8932:9;8928:22;8907:53;:::i;:::-;8897:63;;8853:117;9009:2;9035:50;9077:7;9068:6;9057:9;9053:22;9035:50;:::i;:::-;9025:60;;8980:115;8634:468;;;;;:::o;9108:323::-;9164:6;9213:2;9201:9;9192:7;9188:23;9184:32;9181:119;;;9219:79;;:::i;:::-;9181:119;9339:1;9364:50;9406:7;9397:6;9386:9;9382:22;9364:50;:::i;:::-;9354:60;;9310:114;9108:323;;;;:::o;9437:474::-;9505:6;9513;9562:2;9550:9;9541:7;9537:23;9533:32;9530:119;;;9568:79;;:::i;:::-;9530:119;9688:1;9713:53;9758:7;9749:6;9738:9;9734:22;9713:53;:::i;:::-;9703:63;;9659:117;9815:2;9841:53;9886:7;9877:6;9866:9;9862:22;9841:53;:::i;:::-;9831:63;;9786:118;9437:474;;;;;:::o;9917:180::-;9965:77;9962:1;9955:88;10062:4;10059:1;10052:15;10086:4;10083:1;10076:15;10103:320;10147:6;10184:1;10178:4;10174:12;10164:22;;10231:1;10225:4;10221:12;10252:18;10242:81;;10308:4;10300:6;10296:17;10286:27;;10242:81;10370:2;10362:6;10359:14;10339:18;10336:38;10333:84;;10389:18;;:::i;:::-;10333:84;10154:269;10103:320;;;:::o;10429:182::-;10569:34;10565:1;10557:6;10553:14;10546:58;10429:182;:::o;10617:366::-;10759:3;10780:67;10844:2;10839:3;10780:67;:::i;:::-;10773:74;;10856:93;10945:3;10856:93;:::i;:::-;10974:2;10969:3;10965:12;10958:19;;10617:366;;;:::o;10989:419::-;11155:4;11193:2;11182:9;11178:18;11170:26;;11242:9;11236:4;11232:20;11228:1;11217:9;11213:17;11206:47;11270:131;11396:4;11270:131;:::i;:::-;11262:139;;10989:419;;;:::o;11414:227::-;11554:34;11550:1;11542:6;11538:14;11531:58;11623:10;11618:2;11610:6;11606:15;11599:35;11414:227;:::o;11647:366::-;11789:3;11810:67;11874:2;11869:3;11810:67;:::i;:::-;11803:74;;11886:93;11975:3;11886:93;:::i;:::-;12004:2;11999:3;11995:12;11988:19;;11647:366;;;:::o;12019:419::-;12185:4;12223:2;12212:9;12208:18;12200:26;;12272:9;12266:4;12262:20;12258:1;12247:9;12243:17;12236:47;12300:131;12426:4;12300:131;:::i;:::-;12292:139;;12019:419;;;:::o;12444:180::-;12492:77;12489:1;12482:88;12589:4;12586:1;12579:15;12613:4;12610:1;12603:15;12630:305;12670:3;12689:20;12707:1;12689:20;:::i;:::-;12684:25;;12723:20;12741:1;12723:20;:::i;:::-;12718:25;;12877:1;12809:66;12805:74;12802:1;12799:81;12796:107;;;12883:18;;:::i;:::-;12796:107;12927:1;12924;12920:9;12913:16;;12630:305;;;;:::o;12941:162::-;13081:14;13077:1;13069:6;13065:14;13058:38;12941:162;:::o;13109:366::-;13251:3;13272:67;13336:2;13331:3;13272:67;:::i;:::-;13265:74;;13348:93;13437:3;13348:93;:::i;:::-;13466:2;13461:3;13457:12;13450:19;;13109:366;;;:::o;13481:419::-;13647:4;13685:2;13674:9;13670:18;13662:26;;13734:9;13728:4;13724:20;13720:1;13709:9;13705:17;13698:47;13762:131;13888:4;13762:131;:::i;:::-;13754:139;;13481:419;;;:::o;13906:166::-;14046:18;14042:1;14034:6;14030:14;14023:42;13906:166;:::o;14078:366::-;14220:3;14241:67;14305:2;14300:3;14241:67;:::i;:::-;14234:74;;14317:93;14406:3;14317:93;:::i;:::-;14435:2;14430:3;14426:12;14419:19;;14078:366;;;:::o;14450:419::-;14616:4;14654:2;14643:9;14639:18;14631:26;;14703:9;14697:4;14693:20;14689:1;14678:9;14674:17;14667:47;14731:131;14857:4;14731:131;:::i;:::-;14723:139;;14450:419;;;:::o;14875:224::-;15015:34;15011:1;15003:6;14999:14;14992:58;15084:7;15079:2;15071:6;15067:15;15060:32;14875:224;:::o;15105:366::-;15247:3;15268:67;15332:2;15327:3;15268:67;:::i;:::-;15261:74;;15344:93;15433:3;15344:93;:::i;:::-;15462:2;15457:3;15453:12;15446:19;;15105:366;;;:::o;15477:419::-;15643:4;15681:2;15670:9;15666:18;15658:26;;15730:9;15724:4;15720:20;15716:1;15705:9;15701:17;15694:47;15758:131;15884:4;15758:131;:::i;:::-;15750:139;;15477:419;;;:::o;15902:229::-;16042:34;16038:1;16030:6;16026:14;16019:58;16111:12;16106:2;16098:6;16094:15;16087:37;15902:229;:::o;16137:366::-;16279:3;16300:67;16364:2;16359:3;16300:67;:::i;:::-;16293:74;;16376:93;16465:3;16376:93;:::i;:::-;16494:2;16489:3;16485:12;16478:19;;16137:366;;;:::o;16509:419::-;16675:4;16713:2;16702:9;16698:18;16690:26;;16762:9;16756:4;16752:20;16748:1;16737:9;16733:17;16726:47;16790:131;16916:4;16790:131;:::i;:::-;16782:139;;16509:419;;;:::o;16934:225::-;17074:34;17070:1;17062:6;17058:14;17051:58;17143:8;17138:2;17130:6;17126:15;17119:33;16934:225;:::o;17165:366::-;17307:3;17328:67;17392:2;17387:3;17328:67;:::i;:::-;17321:74;;17404:93;17493:3;17404:93;:::i;:::-;17522:2;17517:3;17513:12;17506:19;;17165:366;;;:::o;17537:419::-;17703:4;17741:2;17730:9;17726:18;17718:26;;17790:9;17784:4;17780:20;17776:1;17765:9;17761:17;17754:47;17818:131;17944:4;17818:131;:::i;:::-;17810:139;;17537:419;;;:::o;17962:223::-;18102:34;18098:1;18090:6;18086:14;18079:58;18171:6;18166:2;18158:6;18154:15;18147:31;17962:223;:::o;18191:366::-;18333:3;18354:67;18418:2;18413:3;18354:67;:::i;:::-;18347:74;;18430:93;18519:3;18430:93;:::i;:::-;18548:2;18543:3;18539:12;18532:19;;18191:366;;;:::o;18563:419::-;18729:4;18767:2;18756:9;18752:18;18744:26;;18816:9;18810:4;18806:20;18802:1;18791:9;18787:17;18780:47;18844:131;18970:4;18844:131;:::i;:::-;18836:139;;18563:419;;;:::o;18988:221::-;19128:34;19124:1;19116:6;19112:14;19105:58;19197:4;19192:2;19184:6;19180:15;19173:29;18988:221;:::o;19215:366::-;19357:3;19378:67;19442:2;19437:3;19378:67;:::i;:::-;19371:74;;19454:93;19543:3;19454:93;:::i;:::-;19572:2;19567:3;19563:12;19556:19;;19215:366;;;:::o;19587:419::-;19753:4;19791:2;19780:9;19776:18;19768:26;;19840:9;19834:4;19830:20;19826:1;19815:9;19811:17;19804:47;19868:131;19994:4;19868:131;:::i;:::-;19860:139;;19587:419;;;:::o;20012:224::-;20152:34;20148:1;20140:6;20136:14;20129:58;20221:7;20216:2;20208:6;20204:15;20197:32;20012:224;:::o;20242:366::-;20384:3;20405:67;20469:2;20464:3;20405:67;:::i;:::-;20398:74;;20481:93;20570:3;20481:93;:::i;:::-;20599:2;20594:3;20590:12;20583:19;;20242:366;;;:::o;20614:419::-;20780:4;20818:2;20807:9;20803:18;20795:26;;20867:9;20861:4;20857:20;20853:1;20842:9;20838:17;20831:47;20895:131;21021:4;20895:131;:::i;:::-;20887:139;;20614:419;;;:::o;21039:222::-;21179:34;21175:1;21167:6;21163:14;21156:58;21248:5;21243:2;21235:6;21231:15;21224:30;21039:222;:::o;21267:366::-;21409:3;21430:67;21494:2;21489:3;21430:67;:::i;:::-;21423:74;;21506:93;21595:3;21506:93;:::i;:::-;21624:2;21619:3;21615:12;21608:19;;21267:366;;;:::o;21639:419::-;21805:4;21843:2;21832:9;21828:18;21820:26;;21892:9;21886:4;21882:20;21878:1;21867:9;21863:17;21856:47;21920:131;22046:4;21920:131;:::i;:::-;21912:139;;21639:419;;;:::o;22064:227::-;22204:34;22200:1;22192:6;22188:14;22181:58;22273:10;22268:2;22260:6;22256:15;22249:35;22064:227;:::o;22297:366::-;22439:3;22460:67;22524:2;22519:3;22460:67;:::i;:::-;22453:74;;22536:93;22625:3;22536:93;:::i;:::-;22654:2;22649:3;22645:12;22638:19;;22297:366;;;:::o;22669:419::-;22835:4;22873:2;22862:9;22858:18;22850:26;;22922:9;22916:4;22912:20;22908:1;22897:9;22893:17;22886:47;22950:131;23076:4;22950:131;:::i;:::-;22942:139;;22669:419;;;:::o;23094:223::-;23234:34;23230:1;23222:6;23218:14;23211:58;23303:6;23298:2;23290:6;23286:15;23279:31;23094:223;:::o;23323:366::-;23465:3;23486:67;23550:2;23545:3;23486:67;:::i;:::-;23479:74;;23562:93;23651:3;23562:93;:::i;:::-;23680:2;23675:3;23671:12;23664:19;;23323:366;;;:::o;23695:419::-;23861:4;23899:2;23888:9;23884:18;23876:26;;23948:9;23942:4;23938:20;23934:1;23923:9;23919:17;23912:47;23976:131;24102:4;23976:131;:::i;:::-;23968:139;;23695:419;;;:::o;24120:180::-;24168:77;24165:1;24158:88;24265:4;24262:1;24255:15;24289:4;24286:1;24279:15;24306:185;24346:1;24363:20;24381:1;24363:20;:::i;:::-;24358:25;;24397:20;24415:1;24397:20;:::i;:::-;24392:25;;24436:1;24426:35;;24441:18;;:::i;:::-;24426:35;24483:1;24480;24476:9;24471:14;;24306:185;;;;:::o;24497:225::-;24637:34;24633:1;24625:6;24621:14;24614:58;24706:8;24701:2;24693:6;24689:15;24682:33;24497:225;:::o;24728:366::-;24870:3;24891:67;24955:2;24950:3;24891:67;:::i;:::-;24884:74;;24967:93;25056:3;24967:93;:::i;:::-;25085:2;25080:3;25076:12;25069:19;;24728:366;;;:::o;25100:419::-;25266:4;25304:2;25293:9;25289:18;25281:26;;25353:9;25347:4;25343:20;25339:1;25328:9;25324:17;25317:47;25381:131;25507:4;25381:131;:::i;:::-;25373:139;;25100:419;;;:::o;25525:332::-;25646:4;25684:2;25673:9;25669:18;25661:26;;25697:71;25765:1;25754:9;25750:17;25741:6;25697:71;:::i;:::-;25778:72;25846:2;25835:9;25831:18;25822:6;25778:72;:::i;:::-;25525:332;;;;;:::o;25863:348::-;25903:7;25926:20;25944:1;25926:20;:::i;:::-;25921:25;;25960:20;25978:1;25960:20;:::i;:::-;25955:25;;26148:1;26080:66;26076:74;26073:1;26070:81;26065:1;26058:9;26051:17;26047:105;26044:131;;;26155:18;;:::i;:::-;26044:131;26203:1;26200;26196:9;26185:20;;25863:348;;;;:::o;26217:191::-;26257:4;26277:20;26295:1;26277:20;:::i;:::-;26272:25;;26311:20;26329:1;26311:20;:::i;:::-;26306:25;;26350:1;26347;26344:8;26341:34;;;26355:18;;:::i;:::-;26341:34;26400:1;26397;26393:9;26385:17;;26217:191;;;;:::o;26414:180::-;26462:77;26459:1;26452:88;26559:4;26556:1;26549:15;26583:4;26580:1;26573:15;26600:180;26648:77;26645:1;26638:88;26745:4;26742:1;26735:15;26769:4;26766:1;26759:15;26786:143;26843:5;26874:6;26868:13;26859:22;;26890:33;26917:5;26890:33;:::i;:::-;26786:143;;;;:::o;26935:351::-;27005:6;27054:2;27042:9;27033:7;27029:23;27025:32;27022:119;;;27060:79;;:::i;:::-;27022:119;27180:1;27205:64;27261:7;27252:6;27241:9;27237:22;27205:64;:::i;:::-;27195:74;;27151:128;26935:351;;;;:::o;27292:85::-;27337:7;27366:5;27355:16;;27292:85;;;:::o;27383:158::-;27441:9;27474:61;27492:42;27501:32;27527:5;27501:32;:::i;:::-;27492:42;:::i;:::-;27474:61;:::i;:::-;27461:74;;27383:158;;;:::o;27547:147::-;27642:45;27681:5;27642:45;:::i;:::-;27637:3;27630:58;27547:147;;:::o;27700:114::-;27767:6;27801:5;27795:12;27785:22;;27700:114;;;:::o;27820:184::-;27919:11;27953:6;27948:3;27941:19;27993:4;27988:3;27984:14;27969:29;;27820:184;;;;:::o;28010:132::-;28077:4;28100:3;28092:11;;28130:4;28125:3;28121:14;28113:22;;28010:132;;;:::o;28148:108::-;28225:24;28243:5;28225:24;:::i;:::-;28220:3;28213:37;28148:108;;:::o;28262:179::-;28331:10;28352:46;28394:3;28386:6;28352:46;:::i;:::-;28430:4;28425:3;28421:14;28407:28;;28262:179;;;;:::o;28447:113::-;28517:4;28549;28544:3;28540:14;28532:22;;28447:113;;;:::o;28596:732::-;28715:3;28744:54;28792:5;28744:54;:::i;:::-;28814:86;28893:6;28888:3;28814:86;:::i;:::-;28807:93;;28924:56;28974:5;28924:56;:::i;:::-;29003:7;29034:1;29019:284;29044:6;29041:1;29038:13;29019:284;;;29120:6;29114:13;29147:63;29206:3;29191:13;29147:63;:::i;:::-;29140:70;;29233:60;29286:6;29233:60;:::i;:::-;29223:70;;29079:224;29066:1;29063;29059:9;29054:14;;29019:284;;;29023:14;29319:3;29312:10;;28720:608;;;28596:732;;;;:::o;29334:831::-;29597:4;29635:3;29624:9;29620:19;29612:27;;29649:71;29717:1;29706:9;29702:17;29693:6;29649:71;:::i;:::-;29730:80;29806:2;29795:9;29791:18;29782:6;29730:80;:::i;:::-;29857:9;29851:4;29847:20;29842:2;29831:9;29827:18;29820:48;29885:108;29988:4;29979:6;29885:108;:::i;:::-;29877:116;;30003:72;30071:2;30060:9;30056:18;30047:6;30003:72;:::i;:::-;30085:73;30153:3;30142:9;30138:19;30129:6;30085:73;:::i;:::-;29334:831;;;;;;;;:::o;30171:807::-;30420:4;30458:3;30447:9;30443:19;30435:27;;30472:71;30540:1;30529:9;30525:17;30516:6;30472:71;:::i;:::-;30553:72;30621:2;30610:9;30606:18;30597:6;30553:72;:::i;:::-;30635:80;30711:2;30700:9;30696:18;30687:6;30635:80;:::i;:::-;30725;30801:2;30790:9;30786:18;30777:6;30725:80;:::i;:::-;30815:73;30883:3;30872:9;30868:19;30859:6;30815:73;:::i;:::-;30898;30966:3;30955:9;30951:19;30942:6;30898:73;:::i;:::-;30171:807;;;;;;;;;:::o;30984:143::-;31041:5;31072:6;31066:13;31057:22;;31088:33;31115:5;31088:33;:::i;:::-;30984:143;;;;:::o;31133:663::-;31221:6;31229;31237;31286:2;31274:9;31265:7;31261:23;31257:32;31254:119;;;31292:79;;:::i;:::-;31254:119;31412:1;31437:64;31493:7;31484:6;31473:9;31469:22;31437:64;:::i;:::-;31427:74;;31383:128;31550:2;31576:64;31632:7;31623:6;31612:9;31608:22;31576:64;:::i;:::-;31566:74;;31521:129;31689:2;31715:64;31771:7;31762:6;31751:9;31747:22;31715:64;:::i;:::-;31705:74;;31660:129;31133:663;;;;;:::o
Swarm Source
ipfs://65a02fb82efbfd50157e023d27dfa8f4badb09b4423919a65d846b0307aa84a4
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.