ERC-20
Overview
Max Total Supply
25,000,000,000,000 SKUNK
Holders
116
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.797333223558473471 SKUNKValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SkunkCoin
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-04-06 */ // SPDX-License-Identifier: Unlicensed // Website: https://skunkcoin.fun/ // Telegram: https://t.me/skunkportal pragma solidity 0.8.9; 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 {_mint}. * 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 _mint(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 SkunkCoin is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public immutable uniswapV2Pair; address public constant USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7; //Mainnet USDT ERC20 bool private inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public maxSellTransactionAmount = 25000000000000 * (10**18); uint256 public maxBuyTransactionAmount = 25000000000000 * (10**18); uint256 public swapTokensAtAmount = 100000000000 * (10**18); uint256 public maxWalletAmount = 1125000000000 * (10**18); //4.5% of the supply (antiwhale) uint256 public developmentFee = 1; address public developmentWallet = 0x31aa6F19c00fb43114bc3aCd5C0e525dF9e7Eaa8; // exlcude from fees,max transaction and max wallet amount mapping (address => bool) private _isExcludedFromFees; mapping(address => bool) private _isExcludedFromMaxTx; mapping(address => bool) private _isExcludedFromMaxWallet; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event GasForProcessingUpdated(uint256 indexed newValue, uint256 indexed oldValue); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensIntoLiqudity, uint256 ethReceived ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() ERC20("Skunk Coin", "SKUNK") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Create a uniswap pair for this new token address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(developmentWallet, true); excludeFromFees(address(this), true); // exclude from max tx _isExcludedFromMaxTx[owner()] = true; _isExcludedFromMaxTx[address(this)] = true; _isExcludedFromMaxTx[developmentWallet] = true; //exclude from max wallet limit _isExcludedFromMaxWallet[owner()] = true; _isExcludedFromMaxWallet[address(this)] = true; _isExcludedFromMaxWallet[developmentWallet] = true; /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(owner(), 25000000000000 * (10**18)); } receive() external payable { } function updateUniswapV2Router(address newAddress) public onlyOwner { require(newAddress != address(uniswapV2Router), "CJP: The router already has that address"); emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router)); uniswapV2Router = IUniswapV2Router02(newAddress); } function excludeFromFees(address account, bool excluded) public onlyOwner { require(_isExcludedFromFees[account] != excluded, "CJP: Account is already the value of 'excluded'"); _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setExcludeFromMaxTx(address _address, bool value) public onlyOwner { _isExcludedFromMaxTx[_address] = value; } function setExcludeFromAll(address _address) public onlyOwner { _isExcludedFromMaxTx[_address] = true; _isExcludedFromFees[_address] = true; } function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) public onlyOwner { for(uint256 i = 0; i < accounts.length; i++) { _isExcludedFromFees[accounts[i]] = excluded; } emit ExcludeMultipleAccountsFromFees(accounts, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "CJP: The Uniswap pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { require(automatedMarketMakerPairs[pair] != value, "CJP: Automated market maker pair is already set to that value"); automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function isExcludedFromMaxTx(address account) public view returns(bool) { return _isExcludedFromMaxTx[account]; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } 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; } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount; if( overMinTokenBalance && !inSwapAndLiquify && automatedMarketMakerPairs[to] && swapAndLiquifyEnabled ) { swapAndSendToWallets(contractTokenBalance); } // if any account belongs to _isExcludedFromFee account then remove the fee if(!_isExcludedFromFees[from] && automatedMarketMakerPairs[to]) { uint256 _developmentfees = amount.mul(developmentFee).div(100); amount = amount.sub(_developmentfees); super._transfer(from, address(this),_developmentfees); } if (!_isExcludedFromFees[to] && !_isExcludedFromMaxTx[to] && automatedMarketMakerPairs[from]){ require(amount <= maxBuyTransactionAmount, "amount exceeds the maxBuyTransactionAmount."); uint256 _developmentfees = amount.mul(developmentFee).div(100); amount = amount.sub(_developmentfees); super._transfer(from, address(this),_developmentfees); } super._transfer(from, to, amount); } function swapAndSendToWallets (uint256 tokens) private lockTheSwap { uint256 initialBalance = address(this).balance; swapTokensForEth(tokens); uint256 newBalance = address(this).balance - initialBalance; uint256 developmentPart = newBalance; swapETHforUSDT(developmentWallet, developmentPart); } 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 swapETHforUSDT(address wallet, uint256 ethAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = USDT; uniswapV2Router.swapExactETHForTokens{value: ethAmount}( 0, //slippage is unavoidable (accept any amount of USDT) path, wallet, block.timestamp ); } }
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":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"USDT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","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":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setExcludeFromAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","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"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526001600660156101000a81548160ff0219169083151502179055506d013b8b5b5056e16b3be0400000006007556d013b8b5b5056e16b3be0400000006008556c01431e0fae6d7217caa00000006009556c0e3312306a4f438ba788000000600a556001600b557331aa6f19c00fb43114bc3acd5c0e525df9e7eaa8600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000cc57600080fd5b506040518060400160405280600a81526020017f536b756e6b20436f696e000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f534b554e4b00000000000000000000000000000000000000000000000000000081525081600390805190602001906200015192919062000c5c565b5080600490805190602001906200016a92919062000c5c565b5050506200018d62000181620006da60201b60201c565b620006e260201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001ef57600080fd5b505afa15801562000204573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022a919062000d76565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200028d57600080fd5b505afa158015620002a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c8919062000d76565b6040518363ffffffff1660e01b8152600401620002e792919062000db9565b602060405180830381600087803b1580156200030257600080fd5b505af115801562000317573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033d919062000d76565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050620003c7816001620007a860201b60201c565b620003e9620003db620008df60201b60201c565b60016200090960201b60201c565b6200041e600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200090960201b60201c565b620004313060016200090960201b60201c565b6001600e600062000447620008df60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f600062000580620008df60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006d2620006b7620008df60201b60201c565b6d013b8b5b5056e16b3be04000000062000ad960201b60201c565b50506200116e565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156200083e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008359062000e6d565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000919620006da60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200093f620008df60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000998576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200098f9062000edf565b60405180910390fd5b801515600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141562000a2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a259062000f77565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000acd919062000fb6565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000b4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b439062001023565b60405180910390fd5b62000b606000838362000c5260201b60201c565b806002600082825462000b7491906200107e565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000bcb91906200107e565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c329190620010ec565b60405180910390a362000c4e6000838362000c5760201b60201c565b5050565b505050565b505050565b82805462000c6a9062001138565b90600052602060002090601f01602090048101928262000c8e576000855562000cda565b82601f1062000ca957805160ff191683800117855562000cda565b8280016001018555821562000cda579182015b8281111562000cd957825182559160200191906001019062000cbc565b5b50905062000ce9919062000ced565b5090565b5b8082111562000d0857600081600090555060010162000cee565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d3e8262000d11565b9050919050565b62000d508162000d31565b811462000d5c57600080fd5b50565b60008151905062000d708162000d45565b92915050565b60006020828403121562000d8f5762000d8e62000d0c565b5b600062000d9f8482850162000d5f565b91505092915050565b62000db38162000d31565b82525050565b600060408201905062000dd0600083018562000da8565b62000ddf602083018462000da8565b9392505050565b600082825260208201905092915050565b7f434a503a204175746f6d61746564206d61726b6574206d616b6572207061697260008201527f20697320616c72656164792073657420746f20746861742076616c7565000000602082015250565b600062000e55603d8362000de6565b915062000e628262000df7565b604082019050919050565b6000602082019050818103600083015262000e888162000e46565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000ec760208362000de6565b915062000ed48262000e8f565b602082019050919050565b6000602082019050818103600083015262000efa8162000eb8565b9050919050565b7f434a503a204163636f756e7420697320616c7265616479207468652076616c7560008201527f65206f6620276578636c75646564270000000000000000000000000000000000602082015250565b600062000f5f602f8362000de6565b915062000f6c8262000f01565b604082019050919050565b6000602082019050818103600083015262000f928162000f50565b9050919050565b60008115159050919050565b62000fb08162000f99565b82525050565b600060208201905062000fcd600083018462000fa5565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200100b601f8362000de6565b9150620010188262000fd3565b602082019050919050565b600060208201905081810360008301526200103e8162000ffc565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200108b8262001045565b9150620010988362001045565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620010d057620010cf6200104f565b5b828201905092915050565b620010e68162001045565b82525050565b6000602082019050620011036000830184620010db565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200115157607f821691505b6020821081141562001168576200116762001109565b5b50919050565b608051613d206200119160003960008181610c1301526111a80152613d206000f3fe6080604052600436106101fd5760003560e01c8063715018a61161010d578063b62496f5116100a0578063c49b9a801161006f578063c49b9a801461076a578063c54e44eb14610793578063dd62ed3e146107be578063e2f45605146107fb578063f2fde38b1461082657610204565b8063b62496f5146106b0578063c0246668146106ed578063c04a541414610716578063c492f0461461074157610204565b8063a457c2d7116100dc578063a457c2d7146105e0578063a5f3d0031461061d578063a9059cbb14610648578063aa4bde281461068557610204565b8063715018a61461054a5780638da5cb5b1461056157806395d89b411461058c5780639a7a23d6146105b757610204565b806349928a50116101905780635aa821a91161015f5780635aa821a9146104535780635b89029c1461047e578063658c27a9146104a757806365b8dbc0146104e457806370a082311461050d57610204565b806349928a501461039757806349bd5a5e146103c05780634a74bb02146103eb5780634fbee1931461041657610204565b806318160ddd116101cc57806318160ddd146102c757806323b872dd146102f2578063313ce5671461032f578063395093511461035a57610204565b806302259e9e1461020957806306fdde0314610234578063095ea7b31461025f5780631694505e1461029c57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e61084f565b60405161022b9190612985565b60405180910390f35b34801561024057600080fd5b50610249610855565b6040516102569190612a39565b60405180910390f35b34801561026b57600080fd5b5061028660048036038101906102819190612af9565b6108e7565b6040516102939190612b54565b60405180910390f35b3480156102a857600080fd5b506102b1610905565b6040516102be9190612bce565b60405180910390f35b3480156102d357600080fd5b506102dc61092b565b6040516102e99190612985565b60405180910390f35b3480156102fe57600080fd5b5061031960048036038101906103149190612be9565b610935565b6040516103269190612b54565b60405180910390f35b34801561033b57600080fd5b50610344610a2d565b6040516103519190612c58565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190612af9565b610a36565b60405161038e9190612b54565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b99190612c73565b610ae2565b005b3480156103cc57600080fd5b506103d5610c11565b6040516103e29190612caf565b60405180910390f35b3480156103f757600080fd5b50610400610c35565b60405161040d9190612b54565b60405180910390f35b34801561042257600080fd5b5061043d60048036038101906104389190612c73565b610c48565b60405161044a9190612b54565b60405180910390f35b34801561045f57600080fd5b50610468610c9e565b6040516104759190612985565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a09190612cf6565b610ca4565b005b3480156104b357600080fd5b506104ce60048036038101906104c99190612c73565b610d7b565b6040516104db9190612b54565b60405180910390f35b3480156104f057600080fd5b5061050b60048036038101906105069190612c73565b610dd1565b005b34801561051957600080fd5b50610534600480360381019061052f9190612c73565b610f9e565b6040516105419190612985565b60405180910390f35b34801561055657600080fd5b5061055f610fe6565b005b34801561056d57600080fd5b5061057661106e565b6040516105839190612caf565b60405180910390f35b34801561059857600080fd5b506105a1611098565b6040516105ae9190612a39565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d99190612cf6565b61112a565b005b3480156105ec57600080fd5b5061060760048036038101906106029190612af9565b611243565b6040516106149190612b54565b60405180910390f35b34801561062957600080fd5b5061063261132e565b60405161063f9190612985565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a9190612af9565b611334565b60405161067c9190612b54565b60405180910390f35b34801561069157600080fd5b5061069a611352565b6040516106a79190612985565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d29190612c73565b611358565b6040516106e49190612b54565b60405180910390f35b3480156106f957600080fd5b50610714600480360381019061070f9190612cf6565b611378565b005b34801561072257600080fd5b5061072b611530565b6040516107389190612caf565b60405180910390f35b34801561074d57600080fd5b5061076860048036038101906107639190612d9b565b611556565b005b34801561077657600080fd5b50610791600480360381019061078c9190612dfb565b6116b2565b005b34801561079f57600080fd5b506107a8611782565b6040516107b59190612caf565b60405180910390f35b3480156107ca57600080fd5b506107e560048036038101906107e09190612e28565b61179a565b6040516107f29190612985565b60405180910390f35b34801561080757600080fd5b50610810611821565b60405161081d9190612985565b60405180910390f35b34801561083257600080fd5b5061084d60048036038101906108489190612c73565b611827565b005b60075481565b60606003805461086490612e97565b80601f016020809104026020016040519081016040528092919081815260200182805461089090612e97565b80156108dd5780601f106108b2576101008083540402835291602001916108dd565b820191906000526020600020905b8154815290600101906020018083116108c057829003601f168201915b5050505050905090565b60006108fb6108f461191f565b8484611927565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000610942848484611af2565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061098d61191f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0490612f3b565b60405180910390fd5b610a2185610a1961191f565b858403611927565b60019150509392505050565b60006012905090565b6000610ad8610a4361191f565b848460016000610a5161191f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ad39190612f8a565b611927565b6001905092915050565b610aea61191f565b73ffffffffffffffffffffffffffffffffffffffff16610b0861106e565b73ffffffffffffffffffffffffffffffffffffffff1614610b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b559061302c565b60405180910390fd5b6001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600660159054906101000a900460ff1681565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60085481565b610cac61191f565b73ffffffffffffffffffffffffffffffffffffffff16610cca61106e565b73ffffffffffffffffffffffffffffffffffffffff1614610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d179061302c565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610dd961191f565b73ffffffffffffffffffffffffffffffffffffffff16610df761106e565b73ffffffffffffffffffffffffffffffffffffffff1614610e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e449061302c565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed5906130be565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e60405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fee61191f565b73ffffffffffffffffffffffffffffffffffffffff1661100c61106e565b73ffffffffffffffffffffffffffffffffffffffff1614611062576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110599061302c565b60405180910390fd5b61106c6000611f33565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546110a790612e97565b80601f01602080910402602001604051908101604052809291908181526020018280546110d390612e97565b80156111205780601f106110f557610100808354040283529160200191611120565b820191906000526020600020905b81548152906001019060200180831161110357829003601f168201915b5050505050905090565b61113261191f565b73ffffffffffffffffffffffffffffffffffffffff1661115061106e565b73ffffffffffffffffffffffffffffffffffffffff16146111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119d9061302c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122c90613176565b60405180910390fd5b61123f8282611ff9565b5050565b6000806001600061125261191f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561130f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130690613208565b60405180910390fd5b61132361131a61191f565b85858403611927565b600191505092915050565b600b5481565b600061134861134161191f565b8484611af2565b6001905092915050565b600a5481565b60106020528060005260406000206000915054906101000a900460ff1681565b61138061191f565b73ffffffffffffffffffffffffffffffffffffffff1661139e61106e565b73ffffffffffffffffffffffffffffffffffffffff16146113f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113eb9061302c565b60405180910390fd5b801515600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147e9061329a565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115249190612b54565b60405180910390a25050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61155e61191f565b73ffffffffffffffffffffffffffffffffffffffff1661157c61106e565b73ffffffffffffffffffffffffffffffffffffffff16146115d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c99061302c565b60405180910390fd5b60005b838390508110156116715781600d60008686858181106115f8576115f76132ba565b5b905060200201602081019061160d9190612c73565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611669906132e9565b9150506115d5565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358383836040516116a5939291906133f5565b60405180910390a1505050565b6116ba61191f565b73ffffffffffffffffffffffffffffffffffffffff166116d861106e565b73ffffffffffffffffffffffffffffffffffffffff161461172e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117259061302c565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516117779190612b54565b60405180910390a150565b73dac17f958d2ee523a2206206994597c13d831ec781565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b61182f61191f565b73ffffffffffffffffffffffffffffffffffffffff1661184d61106e565b73ffffffffffffffffffffffffffffffffffffffff16146118a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189a9061302c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190a90613499565b60405180910390fd5b61191c81611f33565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198e9061352b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fe906135bd565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ae59190612985565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b599061364f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc9906136e1565b60405180910390fd5b6000811415611bec57611be78383600061212d565b611f2e565b6000611bf730610f9e565b905060006009548210159050808015611c1d5750600660149054906101000a900460ff16155b8015611c725750601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015611c8a5750600660159054906101000a900460ff165b15611c9957611c98826123ae565b5b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611d3c5750601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611d8f576000611d6b6064611d5d600b548761243990919063ffffffff16565b61244f90919063ffffffff16565b9050611d80818561246590919063ffffffff16565b9350611d8d86308361212d565b505b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611e335750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611e885750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611f2057600854831115611ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec990613773565b60405180910390fd5b6000611efc6064611eee600b548761243990919063ffffffff16565b61244f90919063ffffffff16565b9050611f11818561246590919063ffffffff16565b9350611f1e86308361212d565b505b611f2b85858561212d565b50505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561208c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208390613805565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561219d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121949061364f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561220d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612204906136e1565b60405180910390fd5b61221883838361247b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561229e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229590613897565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123319190612f8a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123959190612985565b60405180910390a36123a8848484612480565b50505050565b6001600660146101000a81548160ff02191690831515021790555060004790506123d782612485565b600081476123e591906138b7565b90506000819050612418600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261270d565b5050506000600660146101000a81548160ff02191690831515021790555050565b6000818361244791906138eb565b905092915050565b6000818361245d9190613974565b905092915050565b6000818361247391906138b7565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156124a2576124a16139a5565b5b6040519080825280602002602001820160405280156124d05781602001602082028036833780820191505090505b50905030816000815181106124e8576124e76132ba565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561258a57600080fd5b505afa15801561259e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c291906139e9565b816001815181106125d6576125d56132ba565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508161263d30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661179a565b10156126735761267230600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019611927565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016126d7959493929190613ad7565b600060405180830381600087803b1580156126f157600080fd5b505af1158015612705573d6000803e3d6000fd5b505050505050565b6000600267ffffffffffffffff81111561272a576127296139a5565b5b6040519080825280602002602001820160405280156127585781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156127c357600080fd5b505afa1580156127d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127fb91906139e9565b8160008151811061280f5761280e6132ba565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073dac17f958d2ee523a2206206994597c13d831ec781600181518110612872576128716132ba565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637ff36ab58360008487426040518663ffffffff1660e01b815260040161290f9493929190613b31565b6000604051808303818588803b15801561292857600080fd5b505af115801561293c573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f820116820180604052508101906129669190613ca1565b50505050565b6000819050919050565b61297f8161296c565b82525050565b600060208201905061299a6000830184612976565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156129da5780820151818401526020810190506129bf565b838111156129e9576000848401525b50505050565b6000601f19601f8301169050919050565b6000612a0b826129a0565b612a1581856129ab565b9350612a258185602086016129bc565b612a2e816129ef565b840191505092915050565b60006020820190508181036000830152612a538184612a00565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a9a82612a6f565b9050919050565b612aaa81612a8f565b8114612ab557600080fd5b50565b600081359050612ac781612aa1565b92915050565b612ad68161296c565b8114612ae157600080fd5b50565b600081359050612af381612acd565b92915050565b60008060408385031215612b1057612b0f612a65565b5b6000612b1e85828601612ab8565b9250506020612b2f85828601612ae4565b9150509250929050565b60008115159050919050565b612b4e81612b39565b82525050565b6000602082019050612b696000830184612b45565b92915050565b6000819050919050565b6000612b94612b8f612b8a84612a6f565b612b6f565b612a6f565b9050919050565b6000612ba682612b79565b9050919050565b6000612bb882612b9b565b9050919050565b612bc881612bad565b82525050565b6000602082019050612be36000830184612bbf565b92915050565b600080600060608486031215612c0257612c01612a65565b5b6000612c1086828701612ab8565b9350506020612c2186828701612ab8565b9250506040612c3286828701612ae4565b9150509250925092565b600060ff82169050919050565b612c5281612c3c565b82525050565b6000602082019050612c6d6000830184612c49565b92915050565b600060208284031215612c8957612c88612a65565b5b6000612c9784828501612ab8565b91505092915050565b612ca981612a8f565b82525050565b6000602082019050612cc46000830184612ca0565b92915050565b612cd381612b39565b8114612cde57600080fd5b50565b600081359050612cf081612cca565b92915050565b60008060408385031215612d0d57612d0c612a65565b5b6000612d1b85828601612ab8565b9250506020612d2c85828601612ce1565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f840112612d5b57612d5a612d36565b5b8235905067ffffffffffffffff811115612d7857612d77612d3b565b5b602083019150836020820283011115612d9457612d93612d40565b5b9250929050565b600080600060408486031215612db457612db3612a65565b5b600084013567ffffffffffffffff811115612dd257612dd1612a6a565b5b612dde86828701612d45565b93509350506020612df186828701612ce1565b9150509250925092565b600060208284031215612e1157612e10612a65565b5b6000612e1f84828501612ce1565b91505092915050565b60008060408385031215612e3f57612e3e612a65565b5b6000612e4d85828601612ab8565b9250506020612e5e85828601612ab8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612eaf57607f821691505b60208210811415612ec357612ec2612e68565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612f256028836129ab565b9150612f3082612ec9565b604082019050919050565b60006020820190508181036000830152612f5481612f18565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f958261296c565b9150612fa08361296c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612fd557612fd4612f5b565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006130166020836129ab565b915061302182612fe0565b602082019050919050565b6000602082019050818103600083015261304581613009565b9050919050565b7f434a503a2054686520726f7574657220616c726561647920686173207468617460008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b60006130a86028836129ab565b91506130b38261304c565b604082019050919050565b600060208201905081810360008301526130d78161309b565b9050919050565b7f434a503a2054686520556e697377617020706169722063616e6e6f742062652060008201527f72656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6560208201527f7250616972730000000000000000000000000000000000000000000000000000604082015250565b60006131606046836129ab565b915061316b826130de565b606082019050919050565b6000602082019050818103600083015261318f81613153565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006131f26025836129ab565b91506131fd82613196565b604082019050919050565b60006020820190508181036000830152613221816131e5565b9050919050565b7f434a503a204163636f756e7420697320616c7265616479207468652076616c7560008201527f65206f6620276578636c75646564270000000000000000000000000000000000602082015250565b6000613284602f836129ab565b915061328f82613228565b604082019050919050565b600060208201905081810360008301526132b381613277565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006132f48261296c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561332757613326612f5b565b5b600182019050919050565b600082825260208201905092915050565b6000819050919050565b61335681612a8f565b82525050565b6000613368838361334d565b60208301905092915050565b60006133836020840184612ab8565b905092915050565b6000602082019050919050565b60006133a48385613332565b93506133af82613343565b8060005b858110156133e8576133c58284613374565b6133cf888261335c565b97506133da8361338b565b9250506001810190506133b3565b5085925050509392505050565b60006040820190508181036000830152613410818587613398565b905061341f6020830184612b45565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006134836026836129ab565b915061348e82613427565b604082019050919050565b600060208201905081810360008301526134b281613476565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006135156024836129ab565b9150613520826134b9565b604082019050919050565b6000602082019050818103600083015261354481613508565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006135a76022836129ab565b91506135b28261354b565b604082019050919050565b600060208201905081810360008301526135d68161359a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006136396025836129ab565b9150613644826135dd565b604082019050919050565b600060208201905081810360008301526136688161362c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006136cb6023836129ab565b91506136d68261366f565b604082019050919050565b600060208201905081810360008301526136fa816136be565b9050919050565b7f616d6f756e74206578636565647320746865206d61784275795472616e73616360008201527f74696f6e416d6f756e742e000000000000000000000000000000000000000000602082015250565b600061375d602b836129ab565b915061376882613701565b604082019050919050565b6000602082019050818103600083015261378c81613750565b9050919050565b7f434a503a204175746f6d61746564206d61726b6574206d616b6572207061697260008201527f20697320616c72656164792073657420746f20746861742076616c7565000000602082015250565b60006137ef603d836129ab565b91506137fa82613793565b604082019050919050565b6000602082019050818103600083015261381e816137e2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006138816026836129ab565b915061388c82613825565b604082019050919050565b600060208201905081810360008301526138b081613874565b9050919050565b60006138c28261296c565b91506138cd8361296c565b9250828210156138e0576138df612f5b565b5b828203905092915050565b60006138f68261296c565b91506139018361296c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561393a57613939612f5b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061397f8261296c565b915061398a8361296c565b92508261399a57613999613945565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506139e381612aa1565b92915050565b6000602082840312156139ff576139fe612a65565b5b6000613a0d848285016139d4565b91505092915050565b6000819050919050565b6000613a3b613a36613a3184613a16565b612b6f565b61296c565b9050919050565b613a4b81613a20565b82525050565b600081519050919050565b6000819050602082019050919050565b6000602082019050919050565b6000613a8482613a51565b613a8e8185613332565b9350613a9983613a5c565b8060005b83811015613aca578151613ab1888261335c565b9750613abc83613a6c565b925050600181019050613a9d565b5085935050505092915050565b600060a082019050613aec6000830188612976565b613af96020830187613a42565b8181036040830152613b0b8186613a79565b9050613b1a6060830185612ca0565b613b276080830184612976565b9695505050505050565b6000608082019050613b466000830187613a42565b8181036020830152613b588186613a79565b9050613b676040830185612ca0565b613b746060830184612976565b95945050505050565b613b86826129ef565b810181811067ffffffffffffffff82111715613ba557613ba46139a5565b5b80604052505050565b6000613bb8612a5b565b9050613bc48282613b7d565b919050565b600067ffffffffffffffff821115613be457613be36139a5565b5b602082029050602081019050919050565b600081519050613c0481612acd565b92915050565b6000613c1d613c1884613bc9565b613bae565b90508083825260208201905060208402830185811115613c4057613c3f612d40565b5b835b81811015613c695780613c558882613bf5565b845260208401935050602081019050613c42565b5050509392505050565b600082601f830112613c8857613c87612d36565b5b8151613c98848260208601613c0a565b91505092915050565b600060208284031215613cb757613cb6612a65565b5b600082015167ffffffffffffffff811115613cd557613cd4612a6a565b5b613ce184828501613c73565b9150509291505056fea26469706673582212201f1b883631500fe290bb565123a1893ee3ef5322d1f6598a4283a5a5fb73b88264736f6c63430008090033
Deployed Bytecode
0x6080604052600436106101fd5760003560e01c8063715018a61161010d578063b62496f5116100a0578063c49b9a801161006f578063c49b9a801461076a578063c54e44eb14610793578063dd62ed3e146107be578063e2f45605146107fb578063f2fde38b1461082657610204565b8063b62496f5146106b0578063c0246668146106ed578063c04a541414610716578063c492f0461461074157610204565b8063a457c2d7116100dc578063a457c2d7146105e0578063a5f3d0031461061d578063a9059cbb14610648578063aa4bde281461068557610204565b8063715018a61461054a5780638da5cb5b1461056157806395d89b411461058c5780639a7a23d6146105b757610204565b806349928a50116101905780635aa821a91161015f5780635aa821a9146104535780635b89029c1461047e578063658c27a9146104a757806365b8dbc0146104e457806370a082311461050d57610204565b806349928a501461039757806349bd5a5e146103c05780634a74bb02146103eb5780634fbee1931461041657610204565b806318160ddd116101cc57806318160ddd146102c757806323b872dd146102f2578063313ce5671461032f578063395093511461035a57610204565b806302259e9e1461020957806306fdde0314610234578063095ea7b31461025f5780631694505e1461029c57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e61084f565b60405161022b9190612985565b60405180910390f35b34801561024057600080fd5b50610249610855565b6040516102569190612a39565b60405180910390f35b34801561026b57600080fd5b5061028660048036038101906102819190612af9565b6108e7565b6040516102939190612b54565b60405180910390f35b3480156102a857600080fd5b506102b1610905565b6040516102be9190612bce565b60405180910390f35b3480156102d357600080fd5b506102dc61092b565b6040516102e99190612985565b60405180910390f35b3480156102fe57600080fd5b5061031960048036038101906103149190612be9565b610935565b6040516103269190612b54565b60405180910390f35b34801561033b57600080fd5b50610344610a2d565b6040516103519190612c58565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190612af9565b610a36565b60405161038e9190612b54565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b99190612c73565b610ae2565b005b3480156103cc57600080fd5b506103d5610c11565b6040516103e29190612caf565b60405180910390f35b3480156103f757600080fd5b50610400610c35565b60405161040d9190612b54565b60405180910390f35b34801561042257600080fd5b5061043d60048036038101906104389190612c73565b610c48565b60405161044a9190612b54565b60405180910390f35b34801561045f57600080fd5b50610468610c9e565b6040516104759190612985565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a09190612cf6565b610ca4565b005b3480156104b357600080fd5b506104ce60048036038101906104c99190612c73565b610d7b565b6040516104db9190612b54565b60405180910390f35b3480156104f057600080fd5b5061050b60048036038101906105069190612c73565b610dd1565b005b34801561051957600080fd5b50610534600480360381019061052f9190612c73565b610f9e565b6040516105419190612985565b60405180910390f35b34801561055657600080fd5b5061055f610fe6565b005b34801561056d57600080fd5b5061057661106e565b6040516105839190612caf565b60405180910390f35b34801561059857600080fd5b506105a1611098565b6040516105ae9190612a39565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d99190612cf6565b61112a565b005b3480156105ec57600080fd5b5061060760048036038101906106029190612af9565b611243565b6040516106149190612b54565b60405180910390f35b34801561062957600080fd5b5061063261132e565b60405161063f9190612985565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a9190612af9565b611334565b60405161067c9190612b54565b60405180910390f35b34801561069157600080fd5b5061069a611352565b6040516106a79190612985565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d29190612c73565b611358565b6040516106e49190612b54565b60405180910390f35b3480156106f957600080fd5b50610714600480360381019061070f9190612cf6565b611378565b005b34801561072257600080fd5b5061072b611530565b6040516107389190612caf565b60405180910390f35b34801561074d57600080fd5b5061076860048036038101906107639190612d9b565b611556565b005b34801561077657600080fd5b50610791600480360381019061078c9190612dfb565b6116b2565b005b34801561079f57600080fd5b506107a8611782565b6040516107b59190612caf565b60405180910390f35b3480156107ca57600080fd5b506107e560048036038101906107e09190612e28565b61179a565b6040516107f29190612985565b60405180910390f35b34801561080757600080fd5b50610810611821565b60405161081d9190612985565b60405180910390f35b34801561083257600080fd5b5061084d60048036038101906108489190612c73565b611827565b005b60075481565b60606003805461086490612e97565b80601f016020809104026020016040519081016040528092919081815260200182805461089090612e97565b80156108dd5780601f106108b2576101008083540402835291602001916108dd565b820191906000526020600020905b8154815290600101906020018083116108c057829003601f168201915b5050505050905090565b60006108fb6108f461191f565b8484611927565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000610942848484611af2565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061098d61191f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0490612f3b565b60405180910390fd5b610a2185610a1961191f565b858403611927565b60019150509392505050565b60006012905090565b6000610ad8610a4361191f565b848460016000610a5161191f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ad39190612f8a565b611927565b6001905092915050565b610aea61191f565b73ffffffffffffffffffffffffffffffffffffffff16610b0861106e565b73ffffffffffffffffffffffffffffffffffffffff1614610b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b559061302c565b60405180910390fd5b6001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f0000000000000000000000003a67cf946742f93eb6cf9e5d7204f876025e4d5081565b600660159054906101000a900460ff1681565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60085481565b610cac61191f565b73ffffffffffffffffffffffffffffffffffffffff16610cca61106e565b73ffffffffffffffffffffffffffffffffffffffff1614610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d179061302c565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610dd961191f565b73ffffffffffffffffffffffffffffffffffffffff16610df761106e565b73ffffffffffffffffffffffffffffffffffffffff1614610e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e449061302c565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed5906130be565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e60405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fee61191f565b73ffffffffffffffffffffffffffffffffffffffff1661100c61106e565b73ffffffffffffffffffffffffffffffffffffffff1614611062576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110599061302c565b60405180910390fd5b61106c6000611f33565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546110a790612e97565b80601f01602080910402602001604051908101604052809291908181526020018280546110d390612e97565b80156111205780601f106110f557610100808354040283529160200191611120565b820191906000526020600020905b81548152906001019060200180831161110357829003601f168201915b5050505050905090565b61113261191f565b73ffffffffffffffffffffffffffffffffffffffff1661115061106e565b73ffffffffffffffffffffffffffffffffffffffff16146111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119d9061302c565b60405180910390fd5b7f0000000000000000000000003a67cf946742f93eb6cf9e5d7204f876025e4d5073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122c90613176565b60405180910390fd5b61123f8282611ff9565b5050565b6000806001600061125261191f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561130f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130690613208565b60405180910390fd5b61132361131a61191f565b85858403611927565b600191505092915050565b600b5481565b600061134861134161191f565b8484611af2565b6001905092915050565b600a5481565b60106020528060005260406000206000915054906101000a900460ff1681565b61138061191f565b73ffffffffffffffffffffffffffffffffffffffff1661139e61106e565b73ffffffffffffffffffffffffffffffffffffffff16146113f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113eb9061302c565b60405180910390fd5b801515600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147e9061329a565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115249190612b54565b60405180910390a25050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61155e61191f565b73ffffffffffffffffffffffffffffffffffffffff1661157c61106e565b73ffffffffffffffffffffffffffffffffffffffff16146115d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c99061302c565b60405180910390fd5b60005b838390508110156116715781600d60008686858181106115f8576115f76132ba565b5b905060200201602081019061160d9190612c73565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611669906132e9565b9150506115d5565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358383836040516116a5939291906133f5565b60405180910390a1505050565b6116ba61191f565b73ffffffffffffffffffffffffffffffffffffffff166116d861106e565b73ffffffffffffffffffffffffffffffffffffffff161461172e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117259061302c565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516117779190612b54565b60405180910390a150565b73dac17f958d2ee523a2206206994597c13d831ec781565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b61182f61191f565b73ffffffffffffffffffffffffffffffffffffffff1661184d61106e565b73ffffffffffffffffffffffffffffffffffffffff16146118a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189a9061302c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190a90613499565b60405180910390fd5b61191c81611f33565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198e9061352b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fe906135bd565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ae59190612985565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b599061364f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc9906136e1565b60405180910390fd5b6000811415611bec57611be78383600061212d565b611f2e565b6000611bf730610f9e565b905060006009548210159050808015611c1d5750600660149054906101000a900460ff16155b8015611c725750601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015611c8a5750600660159054906101000a900460ff165b15611c9957611c98826123ae565b5b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611d3c5750601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611d8f576000611d6b6064611d5d600b548761243990919063ffffffff16565b61244f90919063ffffffff16565b9050611d80818561246590919063ffffffff16565b9350611d8d86308361212d565b505b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611e335750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611e885750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611f2057600854831115611ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec990613773565b60405180910390fd5b6000611efc6064611eee600b548761243990919063ffffffff16565b61244f90919063ffffffff16565b9050611f11818561246590919063ffffffff16565b9350611f1e86308361212d565b505b611f2b85858561212d565b50505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561208c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208390613805565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561219d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121949061364f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561220d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612204906136e1565b60405180910390fd5b61221883838361247b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561229e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229590613897565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123319190612f8a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123959190612985565b60405180910390a36123a8848484612480565b50505050565b6001600660146101000a81548160ff02191690831515021790555060004790506123d782612485565b600081476123e591906138b7565b90506000819050612418600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261270d565b5050506000600660146101000a81548160ff02191690831515021790555050565b6000818361244791906138eb565b905092915050565b6000818361245d9190613974565b905092915050565b6000818361247391906138b7565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156124a2576124a16139a5565b5b6040519080825280602002602001820160405280156124d05781602001602082028036833780820191505090505b50905030816000815181106124e8576124e76132ba565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561258a57600080fd5b505afa15801561259e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c291906139e9565b816001815181106125d6576125d56132ba565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508161263d30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661179a565b10156126735761267230600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019611927565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016126d7959493929190613ad7565b600060405180830381600087803b1580156126f157600080fd5b505af1158015612705573d6000803e3d6000fd5b505050505050565b6000600267ffffffffffffffff81111561272a576127296139a5565b5b6040519080825280602002602001820160405280156127585781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156127c357600080fd5b505afa1580156127d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127fb91906139e9565b8160008151811061280f5761280e6132ba565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073dac17f958d2ee523a2206206994597c13d831ec781600181518110612872576128716132ba565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637ff36ab58360008487426040518663ffffffff1660e01b815260040161290f9493929190613b31565b6000604051808303818588803b15801561292857600080fd5b505af115801561293c573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f820116820180604052508101906129669190613ca1565b50505050565b6000819050919050565b61297f8161296c565b82525050565b600060208201905061299a6000830184612976565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156129da5780820151818401526020810190506129bf565b838111156129e9576000848401525b50505050565b6000601f19601f8301169050919050565b6000612a0b826129a0565b612a1581856129ab565b9350612a258185602086016129bc565b612a2e816129ef565b840191505092915050565b60006020820190508181036000830152612a538184612a00565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a9a82612a6f565b9050919050565b612aaa81612a8f565b8114612ab557600080fd5b50565b600081359050612ac781612aa1565b92915050565b612ad68161296c565b8114612ae157600080fd5b50565b600081359050612af381612acd565b92915050565b60008060408385031215612b1057612b0f612a65565b5b6000612b1e85828601612ab8565b9250506020612b2f85828601612ae4565b9150509250929050565b60008115159050919050565b612b4e81612b39565b82525050565b6000602082019050612b696000830184612b45565b92915050565b6000819050919050565b6000612b94612b8f612b8a84612a6f565b612b6f565b612a6f565b9050919050565b6000612ba682612b79565b9050919050565b6000612bb882612b9b565b9050919050565b612bc881612bad565b82525050565b6000602082019050612be36000830184612bbf565b92915050565b600080600060608486031215612c0257612c01612a65565b5b6000612c1086828701612ab8565b9350506020612c2186828701612ab8565b9250506040612c3286828701612ae4565b9150509250925092565b600060ff82169050919050565b612c5281612c3c565b82525050565b6000602082019050612c6d6000830184612c49565b92915050565b600060208284031215612c8957612c88612a65565b5b6000612c9784828501612ab8565b91505092915050565b612ca981612a8f565b82525050565b6000602082019050612cc46000830184612ca0565b92915050565b612cd381612b39565b8114612cde57600080fd5b50565b600081359050612cf081612cca565b92915050565b60008060408385031215612d0d57612d0c612a65565b5b6000612d1b85828601612ab8565b9250506020612d2c85828601612ce1565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f840112612d5b57612d5a612d36565b5b8235905067ffffffffffffffff811115612d7857612d77612d3b565b5b602083019150836020820283011115612d9457612d93612d40565b5b9250929050565b600080600060408486031215612db457612db3612a65565b5b600084013567ffffffffffffffff811115612dd257612dd1612a6a565b5b612dde86828701612d45565b93509350506020612df186828701612ce1565b9150509250925092565b600060208284031215612e1157612e10612a65565b5b6000612e1f84828501612ce1565b91505092915050565b60008060408385031215612e3f57612e3e612a65565b5b6000612e4d85828601612ab8565b9250506020612e5e85828601612ab8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612eaf57607f821691505b60208210811415612ec357612ec2612e68565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612f256028836129ab565b9150612f3082612ec9565b604082019050919050565b60006020820190508181036000830152612f5481612f18565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f958261296c565b9150612fa08361296c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612fd557612fd4612f5b565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006130166020836129ab565b915061302182612fe0565b602082019050919050565b6000602082019050818103600083015261304581613009565b9050919050565b7f434a503a2054686520726f7574657220616c726561647920686173207468617460008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b60006130a86028836129ab565b91506130b38261304c565b604082019050919050565b600060208201905081810360008301526130d78161309b565b9050919050565b7f434a503a2054686520556e697377617020706169722063616e6e6f742062652060008201527f72656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6560208201527f7250616972730000000000000000000000000000000000000000000000000000604082015250565b60006131606046836129ab565b915061316b826130de565b606082019050919050565b6000602082019050818103600083015261318f81613153565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006131f26025836129ab565b91506131fd82613196565b604082019050919050565b60006020820190508181036000830152613221816131e5565b9050919050565b7f434a503a204163636f756e7420697320616c7265616479207468652076616c7560008201527f65206f6620276578636c75646564270000000000000000000000000000000000602082015250565b6000613284602f836129ab565b915061328f82613228565b604082019050919050565b600060208201905081810360008301526132b381613277565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006132f48261296c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561332757613326612f5b565b5b600182019050919050565b600082825260208201905092915050565b6000819050919050565b61335681612a8f565b82525050565b6000613368838361334d565b60208301905092915050565b60006133836020840184612ab8565b905092915050565b6000602082019050919050565b60006133a48385613332565b93506133af82613343565b8060005b858110156133e8576133c58284613374565b6133cf888261335c565b97506133da8361338b565b9250506001810190506133b3565b5085925050509392505050565b60006040820190508181036000830152613410818587613398565b905061341f6020830184612b45565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006134836026836129ab565b915061348e82613427565b604082019050919050565b600060208201905081810360008301526134b281613476565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006135156024836129ab565b9150613520826134b9565b604082019050919050565b6000602082019050818103600083015261354481613508565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006135a76022836129ab565b91506135b28261354b565b604082019050919050565b600060208201905081810360008301526135d68161359a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006136396025836129ab565b9150613644826135dd565b604082019050919050565b600060208201905081810360008301526136688161362c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006136cb6023836129ab565b91506136d68261366f565b604082019050919050565b600060208201905081810360008301526136fa816136be565b9050919050565b7f616d6f756e74206578636565647320746865206d61784275795472616e73616360008201527f74696f6e416d6f756e742e000000000000000000000000000000000000000000602082015250565b600061375d602b836129ab565b915061376882613701565b604082019050919050565b6000602082019050818103600083015261378c81613750565b9050919050565b7f434a503a204175746f6d61746564206d61726b6574206d616b6572207061697260008201527f20697320616c72656164792073657420746f20746861742076616c7565000000602082015250565b60006137ef603d836129ab565b91506137fa82613793565b604082019050919050565b6000602082019050818103600083015261381e816137e2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006138816026836129ab565b915061388c82613825565b604082019050919050565b600060208201905081810360008301526138b081613874565b9050919050565b60006138c28261296c565b91506138cd8361296c565b9250828210156138e0576138df612f5b565b5b828203905092915050565b60006138f68261296c565b91506139018361296c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561393a57613939612f5b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061397f8261296c565b915061398a8361296c565b92508261399a57613999613945565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506139e381612aa1565b92915050565b6000602082840312156139ff576139fe612a65565b5b6000613a0d848285016139d4565b91505092915050565b6000819050919050565b6000613a3b613a36613a3184613a16565b612b6f565b61296c565b9050919050565b613a4b81613a20565b82525050565b600081519050919050565b6000819050602082019050919050565b6000602082019050919050565b6000613a8482613a51565b613a8e8185613332565b9350613a9983613a5c565b8060005b83811015613aca578151613ab1888261335c565b9750613abc83613a6c565b925050600181019050613a9d565b5085935050505092915050565b600060a082019050613aec6000830188612976565b613af96020830187613a42565b8181036040830152613b0b8186613a79565b9050613b1a6060830185612ca0565b613b276080830184612976565b9695505050505050565b6000608082019050613b466000830187613a42565b8181036020830152613b588186613a79565b9050613b676040830185612ca0565b613b746060830184612976565b95945050505050565b613b86826129ef565b810181811067ffffffffffffffff82111715613ba557613ba46139a5565b5b80604052505050565b6000613bb8612a5b565b9050613bc48282613b7d565b919050565b600067ffffffffffffffff821115613be457613be36139a5565b5b602082029050602081019050919050565b600081519050613c0481612acd565b92915050565b6000613c1d613c1884613bc9565b613bae565b90508083825260208201905060208402830185811115613c4057613c3f612d40565b5b835b81811015613c695780613c558882613bf5565b845260208401935050602081019050613c42565b5050509392505050565b600082601f830112613c8857613c87612d36565b5b8151613c98848260208601613c0a565b91505092915050565b600060208284031215613cb757613cb6612a65565b5b600082015167ffffffffffffffff811115613cd557613cd4612a6a565b5b613ce184828501613c73565b9150509291505056fea26469706673582212201f1b883631500fe290bb565123a1893ee3ef5322d1f6598a4283a5a5fb73b88264736f6c63430008090033
Deployed Bytecode Sourcemap
39782:8838:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40142:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5653:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7820:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39861:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6773:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8471:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6615:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9372:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43909:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39909:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40093:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44982:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40216:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43767:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45119:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43140:312;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6944:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17175:94;;;;;;;;;;;;;:::i;:::-;;16524:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5872:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44394:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10090:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40454:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7284:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40355:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40985:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43460:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40495:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44082:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45254:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39954:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7522:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40289:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17424:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40142:67;;;;:::o;5653:100::-;5707:13;5740:5;5733:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5653:100;:::o;7820:169::-;7903:4;7920:39;7929:12;:10;:12::i;:::-;7943:7;7952:6;7920:8;:39::i;:::-;7977:4;7970:11;;7820:169;;;;:::o;39861:41::-;;;;;;;;;;;;;:::o;6773:108::-;6834:7;6861:12;;6854:19;;6773:108;:::o;8471:492::-;8611:4;8628:36;8638:6;8646:9;8657:6;8628:9;:36::i;:::-;8677:24;8704:11;:19;8716:6;8704:19;;;;;;;;;;;;;;;:33;8724:12;:10;:12::i;:::-;8704:33;;;;;;;;;;;;;;;;8677:60;;8776:6;8756:16;:26;;8748:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8863:57;8872:6;8880:12;:10;:12::i;:::-;8913:6;8894:16;:25;8863:8;:57::i;:::-;8951:4;8944:11;;;8471:492;;;;;:::o;6615:93::-;6673:5;6698:2;6691:9;;6615:93;:::o;9372:215::-;9460:4;9477:80;9486:12;:10;:12::i;:::-;9500:7;9546:10;9509:11;:25;9521:12;:10;:12::i;:::-;9509:25;;;;;;;;;;;;;;;:34;9535:7;9509:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9477:8;:80::i;:::-;9575:4;9568:11;;9372:215;;;;:::o;43909:165::-;16755:12;:10;:12::i;:::-;16744:23;;:7;:5;:7::i;:::-;:23;;;16736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44015:4:::1;43982:20;:30;44003:8;43982:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;44062:4;44030:19;:29;44050:8;44030:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;43909:165:::0;:::o;39909:38::-;;;:::o;40093:40::-;;;;;;;;;;;;;:::o;44982:125::-;45047:4;45071:19;:28;45091:7;45071:28;;;;;;;;;;;;;;;;;;;;;;;;;45064:35;;44982:125;;;:::o;40216:66::-;;;;:::o;43767:134::-;16755:12;:10;:12::i;:::-;16744:23;;:7;:5;:7::i;:::-;:23;;;16736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43888:5:::1;43855:20;:30;43876:8;43855:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;43767:134:::0;;:::o;45119:127::-;45185:4;45209:20;:29;45230:7;45209:29;;;;;;;;;;;;;;;;;;;;;;;;;45202:36;;45119:127;;;:::o;43140:312::-;16755:12;:10;:12::i;:::-;16744:23;;:7;:5;:7::i;:::-;:23;;;16736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43249:15:::1;;;;;;;;;;;43227:38;;:10;:38;;;;43219:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;43368:15;;;;;;;;;;;43326:59;;43348:10;43326:59;;;;;;;;;;;;43433:10;43396:15;;:48;;;;;;;;;;;;;;;;;;43140:312:::0;:::o;6944:127::-;7018:7;7045:9;:18;7055:7;7045:18;;;;;;;;;;;;;;;;7038:25;;6944:127;;;:::o;17175:94::-;16755:12;:10;:12::i;:::-;16744:23;;:7;:5;:7::i;:::-;:23;;;16736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17240:21:::1;17258:1;17240:9;:21::i;:::-;17175:94::o:0;16524:87::-;16570:7;16597:6;;;;;;;;;;;16590:13;;16524:87;:::o;5872:104::-;5928:13;5961:7;5954:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5872:104;:::o;44394:255::-;16755:12;:10;:12::i;:::-;16744:23;;:7;:5;:7::i;:::-;:23;;;16736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44501:13:::1;44493:21;;:4;:21;;;;44485:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;44600:41;44629:4;44635:5;44600:28;:41::i;:::-;44394:255:::0;;:::o;10090:413::-;10183:4;10200:24;10227:11;:25;10239:12;:10;:12::i;:::-;10227:25;;;;;;;;;;;;;;;:34;10253:7;10227:34;;;;;;;;;;;;;;;;10200:61;;10300:15;10280:16;:35;;10272:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10393:67;10402:12;:10;:12::i;:::-;10416:7;10444:15;10425:16;:34;10393:8;:67::i;:::-;10491:4;10484:11;;;10090:413;;;;:::o;40454:34::-;;;;:::o;7284:175::-;7370:4;7387:42;7397:12;:10;:12::i;:::-;7411:9;7422:6;7387:9;:42::i;:::-;7447:4;7440:11;;7284:175;;;;:::o;40355:57::-;;;;:::o;40985:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;43460:295::-;16755:12;:10;:12::i;:::-;16744:23;;:7;:5;:7::i;:::-;:23;;;16736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43585:8:::1;43553:40;;:19;:28;43573:7;43553:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;43545:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;43687:8;43656:19;:28;43676:7;43656:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;43729:7;43713:34;;;43738:8;43713:34;;;;;;:::i;:::-;;;;;;;;43460:295:::0;;:::o;40495:78::-;;;;;;;;;;;;;:::o;44082:304::-;16755:12;:10;:12::i;:::-;16744:23;;:7;:5;:7::i;:::-;:23;;;16736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44199:9:::1;44195:115;44218:8;;:15;;44214:1;:19;44195:115;;;44290:8;44255:19;:32;44275:8;;44284:1;44275:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;44255:32;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;44235:3;;;;;:::i;:::-;;;;44195:115;;;;44327:51;44359:8;;44369;44327:51;;;;;;;;:::i;:::-;;;;;;;;44082:304:::0;;;:::o;45254:171::-;16755:12;:10;:12::i;:::-;16744:23;;:7;:5;:7::i;:::-;:23;;;16736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45355:8:::1;45331:21;;:32;;;;;;;;;;;;;;;;;;45379:38;45408:8;45379:38;;;;;;:::i;:::-;;;;;;;;45254:171:::0;:::o;39954:73::-;39985:42;39954:73;:::o;7522:151::-;7611:7;7638:11;:18;7650:5;7638:18;;;;;;;;;;;;;;;:27;7657:7;7638:27;;;;;;;;;;;;;;;;7631:34;;7522:151;;;;:::o;40289:59::-;;;;:::o;17424:192::-;16755:12;:10;:12::i;:::-;16744:23;;:7;:5;:7::i;:::-;:23;;;16736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17533:1:::1;17513:22;;:8;:22;;;;17505:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;17589:19;17599:8;17589:9;:19::i;:::-;17424:192:::0;:::o;179:98::-;232:7;259:10;252:17;;179:98;:::o;13774:380::-;13927:1;13910:19;;:5;:19;;;;13902:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14008:1;13989:21;;:7;:21;;;;13981:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14092:6;14062:11;:18;14074:5;14062:18;;;;;;;;;;;;;;;:27;14081:7;14062:27;;;;;;;;;;;;;;;:36;;;;14130:7;14114:32;;14123:5;14114:32;;;14139:6;14114:32;;;;;;:::i;:::-;;;;;;;;13774:380;;;:::o;45433:1642::-;45581:1;45565:18;;:4;:18;;;;45557:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45658:1;45644:16;;:2;:16;;;;45636:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;45726:1;45716:6;:11;45713:92;;;45744:28;45760:4;45766:2;45770:1;45744:15;:28::i;:::-;45787:7;;45713:92;45822:28;45853:24;45871:4;45853:9;:24::i;:::-;45822:55;;45898:24;45949:18;;45925:20;:42;;45898:69;;46004:19;:53;;;;;46041:16;;;;;;;;;;;46040:17;46004:53;:99;;;;;46074:25;:29;46100:2;46074:29;;;;;;;;;;;;;;;;;;;;;;;;;46004:99;:138;;;;;46121:21;;;;;;;;;;;46004:138;45987:236;;;46169:42;46190:20;46169;:42::i;:::-;45987:236;46325:19;:25;46345:4;46325:25;;;;;;;;;;;;;;;;;;;;;;;;;46324:26;:59;;;;;46354:25;:29;46380:2;46354:29;;;;;;;;;;;;;;;;;;;;;;;;;46324:59;46321:277;;;46400:24;46427:35;46458:3;46427:26;46438:14;;46427:6;:10;;:26;;;;:::i;:::-;:30;;:35;;;;:::i;:::-;46400:62;;46483:28;46494:16;46483:6;:10;;:28;;;;:::i;:::-;46474:37;;46526:53;46542:4;46556;46562:16;46526:15;:53::i;:::-;46385:213;46321:277;46615:19;:23;46635:2;46615:23;;;;;;;;;;;;;;;;;;;;;;;;;46614:24;:53;;;;;46643:20;:24;46664:2;46643:24;;;;;;;;;;;;;;;;;;;;;;;;;46642:25;46614:53;:88;;;;;46671:25;:31;46697:4;46671:31;;;;;;;;;;;;;;;;;;;;;;;;;46614:88;46610:410;;;46736:23;;46726:6;:33;;46718:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;46822:24;46849:35;46880:3;46849:26;46860:14;;46849:6;:10;;:26;;;;:::i;:::-;:30;;:35;;;;:::i;:::-;46822:62;;46905:28;46916:16;46905:6;:10;;:28;;;;:::i;:::-;46896:37;;46948:53;46964:4;46978;46984:16;46948:15;:53::i;:::-;46703:317;46610:410;47032:33;47048:4;47054:2;47058:6;47032:15;:33::i;:::-;45546:1529;;45433:1642;;;;:::o;17624:173::-;17680:16;17699:6;;;;;;;;;;;17680:25;;17725:8;17716:6;;:17;;;;;;;;;;;;;;;;;;17780:8;17749:40;;17770:8;17749:40;;;;;;;;;;;;17669:128;17624:173;:::o;44657:313::-;44783:5;44748:40;;:25;:31;44774:4;44748:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;44740:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;44899:5;44865:25;:31;44891:4;44865:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;44956:5;44922:40;;44950:4;44922:40;;;;;;;;;;;;44657:313;;:::o;10993:733::-;11151:1;11133:20;;:6;:20;;;;11125:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11235:1;11214:23;;:9;:23;;;;11206:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11290:47;11311:6;11319:9;11330:6;11290:20;:47::i;:::-;11350:21;11374:9;:17;11384:6;11374:17;;;;;;;;;;;;;;;;11350:41;;11427:6;11410:13;:23;;11402:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11548:6;11532:13;:22;11512:9;:17;11522:6;11512:17;;;;;;;;;;;;;;;:42;;;;11600:6;11576:9;:20;11586:9;11576:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;11641:9;11624:35;;11633:6;11624:35;;;11652:6;11624:35;;;;;;:::i;:::-;;;;;;;;11672:46;11692:6;11700:9;11711:6;11672:19;:46::i;:::-;11114:612;10993:733;;;:::o;47083:345::-;41682:4;41663:16;;:23;;;;;;;;;;;;;;;;;;47161:22:::1;47186:21;47161:46;;47218:24;47235:6;47218:16;:24::i;:::-;47253:18;47298:14;47274:21;:38;;;;:::i;:::-;47253:59;;47323:23;47349:10;47323:36;;47370:50;47385:17;;;;;;;;;;;47404:15;47370:14;:50::i;:::-;47150:278;;;41728:5:::0;41709:16;;:24;;;;;;;;;;;;;;;;;;47083:345;:::o;28416:98::-;28474:7;28505:1;28501;:5;;;;:::i;:::-;28494:12;;28416:98;;;;:::o;28815:::-;28873:7;28904:1;28900;:5;;;;:::i;:::-;28893:12;;28815:98;;;;:::o;28059:::-;28117:7;28148:1;28144;:5;;;;:::i;:::-;28137:12;;28059:98;;;;:::o;14754:125::-;;;;:::o;15483:124::-;;;;:::o;47438:685::-;47564:21;47602:1;47588:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47564:40;;47633:4;47615;47620:1;47615:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;47659:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47649:4;47654:1;47649:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;47750:11;47697:50;47715:4;47730:15;;;;;;;;;;;47697:9;:50::i;:::-;:64;47694:156;;;47776:62;47793:4;47808:15;;;;;;;;;;;47835:1;47826:11;47776:8;:62::i;:::-;47694:156;47888:15;;;;;;;;;;;:66;;;47969:11;47995:1;48039:4;48066;48086:15;47888:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47493:630;47438:685;:::o;48131:475::-;48271:21;48309:1;48295:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48271:40;;48332:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48322:4;48327:1;48322:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;39985:42;48365:4;48370:1;48365:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;48390:15;;;;;;;;;;;:37;;;48435:9;48460:1;48530:4;48549:6;48570:15;48390:208;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;48199:407;48131:475;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1832:75::-;1865:6;1898:2;1892:9;1882:19;;1832:75;:::o;1913:117::-;2022:1;2019;2012:12;2036:117;2145:1;2142;2135:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:60::-;3874:3;3895:5;3888:12;;3846:60;;;:::o;3912:142::-;3962:9;3995:53;4013:34;4022:24;4040:5;4022:24;:::i;:::-;4013:34;:::i;:::-;3995:53;:::i;:::-;3982:66;;3912:142;;;:::o;4060:126::-;4110:9;4143:37;4174:5;4143:37;:::i;:::-;4130:50;;4060:126;;;:::o;4192:153::-;4269:9;4302:37;4333:5;4302:37;:::i;:::-;4289:50;;4192:153;;;:::o;4351:185::-;4465:64;4523:5;4465:64;:::i;:::-;4460:3;4453:77;4351:185;;:::o;4542:276::-;4662:4;4700:2;4689:9;4685:18;4677:26;;4713:98;4808:1;4797:9;4793:17;4784:6;4713:98;:::i;:::-;4542:276;;;;:::o;4824:619::-;4901:6;4909;4917;4966:2;4954:9;4945:7;4941:23;4937:32;4934:119;;;4972:79;;:::i;:::-;4934:119;5092:1;5117:53;5162:7;5153:6;5142:9;5138:22;5117:53;:::i;:::-;5107:63;;5063:117;5219:2;5245:53;5290:7;5281:6;5270:9;5266:22;5245:53;:::i;:::-;5235:63;;5190:118;5347:2;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5318:118;4824:619;;;;;:::o;5449:86::-;5484:7;5524:4;5517:5;5513:16;5502:27;;5449:86;;;:::o;5541:112::-;5624:22;5640:5;5624:22;:::i;:::-;5619:3;5612:35;5541:112;;:::o;5659:214::-;5748:4;5786:2;5775:9;5771:18;5763:26;;5799:67;5863:1;5852:9;5848:17;5839:6;5799:67;:::i;:::-;5659:214;;;;:::o;5879:329::-;5938:6;5987:2;5975:9;5966:7;5962:23;5958:32;5955:119;;;5993:79;;:::i;:::-;5955:119;6113:1;6138:53;6183:7;6174:6;6163:9;6159:22;6138:53;:::i;:::-;6128:63;;6084:117;5879:329;;;;:::o;6214:118::-;6301:24;6319:5;6301:24;:::i;:::-;6296:3;6289:37;6214:118;;:::o;6338:222::-;6431:4;6469:2;6458:9;6454:18;6446:26;;6482:71;6550:1;6539:9;6535:17;6526:6;6482:71;:::i;:::-;6338:222;;;;:::o;6566:116::-;6636:21;6651:5;6636:21;:::i;:::-;6629:5;6626:32;6616:60;;6672:1;6669;6662:12;6616:60;6566:116;:::o;6688:133::-;6731:5;6769:6;6756:20;6747:29;;6785:30;6809:5;6785:30;:::i;:::-;6688:133;;;;:::o;6827:468::-;6892:6;6900;6949:2;6937:9;6928:7;6924:23;6920:32;6917:119;;;6955:79;;:::i;:::-;6917:119;7075:1;7100:53;7145:7;7136:6;7125:9;7121:22;7100:53;:::i;:::-;7090:63;;7046:117;7202:2;7228:50;7270:7;7261:6;7250:9;7246:22;7228:50;:::i;:::-;7218:60;;7173:115;6827:468;;;;;:::o;7301:117::-;7410:1;7407;7400:12;7424:117;7533:1;7530;7523:12;7547:117;7656:1;7653;7646:12;7687:568;7760:8;7770:6;7820:3;7813:4;7805:6;7801:17;7797:27;7787:122;;7828:79;;:::i;:::-;7787:122;7941:6;7928:20;7918:30;;7971:18;7963:6;7960:30;7957:117;;;7993:79;;:::i;:::-;7957:117;8107:4;8099:6;8095:17;8083:29;;8161:3;8153:4;8145:6;8141:17;8131:8;8127:32;8124:41;8121:128;;;8168:79;;:::i;:::-;8121:128;7687:568;;;;;:::o;8261:698::-;8353:6;8361;8369;8418:2;8406:9;8397:7;8393:23;8389:32;8386:119;;;8424:79;;:::i;:::-;8386:119;8572:1;8561:9;8557:17;8544:31;8602:18;8594:6;8591:30;8588:117;;;8624:79;;:::i;:::-;8588:117;8737:80;8809:7;8800:6;8789:9;8785:22;8737:80;:::i;:::-;8719:98;;;;8515:312;8866:2;8892:50;8934:7;8925:6;8914:9;8910:22;8892:50;:::i;:::-;8882:60;;8837:115;8261:698;;;;;:::o;8965:323::-;9021:6;9070:2;9058:9;9049:7;9045:23;9041:32;9038:119;;;9076:79;;:::i;:::-;9038:119;9196:1;9221:50;9263:7;9254:6;9243:9;9239:22;9221:50;:::i;:::-;9211:60;;9167:114;8965:323;;;;:::o;9294:474::-;9362:6;9370;9419:2;9407:9;9398:7;9394:23;9390:32;9387:119;;;9425:79;;:::i;:::-;9387:119;9545:1;9570:53;9615:7;9606:6;9595:9;9591:22;9570:53;:::i;:::-;9560:63;;9516:117;9672:2;9698:53;9743:7;9734:6;9723:9;9719:22;9698:53;:::i;:::-;9688:63;;9643:118;9294:474;;;;;:::o;9774:180::-;9822:77;9819:1;9812:88;9919:4;9916:1;9909:15;9943:4;9940:1;9933:15;9960:320;10004:6;10041:1;10035:4;10031:12;10021:22;;10088:1;10082:4;10078:12;10109:18;10099:81;;10165:4;10157:6;10153:17;10143:27;;10099:81;10227:2;10219:6;10216:14;10196:18;10193:38;10190:84;;;10246:18;;:::i;:::-;10190:84;10011:269;9960:320;;;:::o;10286:227::-;10426:34;10422:1;10414:6;10410:14;10403:58;10495:10;10490:2;10482:6;10478:15;10471:35;10286:227;:::o;10519:366::-;10661:3;10682:67;10746:2;10741:3;10682:67;:::i;:::-;10675:74;;10758:93;10847:3;10758:93;:::i;:::-;10876:2;10871:3;10867:12;10860:19;;10519:366;;;:::o;10891:419::-;11057:4;11095:2;11084:9;11080:18;11072:26;;11144:9;11138:4;11134:20;11130:1;11119:9;11115:17;11108:47;11172:131;11298:4;11172:131;:::i;:::-;11164:139;;10891:419;;;:::o;11316:180::-;11364:77;11361:1;11354:88;11461:4;11458:1;11451:15;11485:4;11482:1;11475:15;11502:305;11542:3;11561:20;11579:1;11561:20;:::i;:::-;11556:25;;11595:20;11613:1;11595:20;:::i;:::-;11590:25;;11749:1;11681:66;11677:74;11674:1;11671:81;11668:107;;;11755:18;;:::i;:::-;11668:107;11799:1;11796;11792:9;11785:16;;11502:305;;;;:::o;11813:182::-;11953:34;11949:1;11941:6;11937:14;11930:58;11813:182;:::o;12001:366::-;12143:3;12164:67;12228:2;12223:3;12164:67;:::i;:::-;12157:74;;12240:93;12329:3;12240:93;:::i;:::-;12358:2;12353:3;12349:12;12342:19;;12001:366;;;:::o;12373:419::-;12539:4;12577:2;12566:9;12562:18;12554:26;;12626:9;12620:4;12616:20;12612:1;12601:9;12597:17;12590:47;12654:131;12780:4;12654:131;:::i;:::-;12646:139;;12373:419;;;:::o;12798:227::-;12938:34;12934:1;12926:6;12922:14;12915:58;13007:10;13002:2;12994:6;12990:15;12983:35;12798:227;:::o;13031:366::-;13173:3;13194:67;13258:2;13253:3;13194:67;:::i;:::-;13187:74;;13270:93;13359:3;13270:93;:::i;:::-;13388:2;13383:3;13379:12;13372:19;;13031:366;;;:::o;13403:419::-;13569:4;13607:2;13596:9;13592:18;13584:26;;13656:9;13650:4;13646:20;13642:1;13631:9;13627:17;13620:47;13684:131;13810:4;13684:131;:::i;:::-;13676:139;;13403:419;;;:::o;13828:294::-;13968:34;13964:1;13956:6;13952:14;13945:58;14037:34;14032:2;14024:6;14020:15;14013:59;14106:8;14101:2;14093:6;14089:15;14082:33;13828:294;:::o;14128:366::-;14270:3;14291:67;14355:2;14350:3;14291:67;:::i;:::-;14284:74;;14367:93;14456:3;14367:93;:::i;:::-;14485:2;14480:3;14476:12;14469:19;;14128:366;;;:::o;14500:419::-;14666:4;14704:2;14693:9;14689:18;14681:26;;14753:9;14747:4;14743:20;14739:1;14728:9;14724:17;14717:47;14781:131;14907:4;14781:131;:::i;:::-;14773:139;;14500:419;;;:::o;14925:224::-;15065:34;15061:1;15053:6;15049:14;15042:58;15134:7;15129:2;15121:6;15117:15;15110:32;14925:224;:::o;15155:366::-;15297:3;15318:67;15382:2;15377:3;15318:67;:::i;:::-;15311:74;;15394:93;15483:3;15394:93;:::i;:::-;15512:2;15507:3;15503:12;15496:19;;15155:366;;;:::o;15527:419::-;15693:4;15731:2;15720:9;15716:18;15708:26;;15780:9;15774:4;15770:20;15766:1;15755:9;15751:17;15744:47;15808:131;15934:4;15808:131;:::i;:::-;15800:139;;15527:419;;;:::o;15952:234::-;16092:34;16088:1;16080:6;16076:14;16069:58;16161:17;16156:2;16148:6;16144:15;16137:42;15952:234;:::o;16192:366::-;16334:3;16355:67;16419:2;16414:3;16355:67;:::i;:::-;16348:74;;16431:93;16520:3;16431:93;:::i;:::-;16549:2;16544:3;16540:12;16533:19;;16192:366;;;:::o;16564:419::-;16730:4;16768:2;16757:9;16753:18;16745:26;;16817:9;16811:4;16807:20;16803:1;16792:9;16788:17;16781:47;16845:131;16971:4;16845:131;:::i;:::-;16837:139;;16564:419;;;:::o;16989:180::-;17037:77;17034:1;17027:88;17134:4;17131:1;17124:15;17158:4;17155:1;17148:15;17175:233;17214:3;17237:24;17255:5;17237:24;:::i;:::-;17228:33;;17283:66;17276:5;17273:77;17270:103;;;17353:18;;:::i;:::-;17270:103;17400:1;17393:5;17389:13;17382:20;;17175:233;;;:::o;17414:184::-;17513:11;17547:6;17542:3;17535:19;17587:4;17582:3;17578:14;17563:29;;17414:184;;;;:::o;17604:102::-;17673:4;17696:3;17688:11;;17604:102;;;:::o;17712:108::-;17789:24;17807:5;17789:24;:::i;:::-;17784:3;17777:37;17712:108;;:::o;17826:179::-;17895:10;17916:46;17958:3;17950:6;17916:46;:::i;:::-;17994:4;17989:3;17985:14;17971:28;;17826:179;;;;:::o;18011:122::-;18063:5;18088:39;18123:2;18118:3;18114:12;18109:3;18088:39;:::i;:::-;18079:48;;18011:122;;;;:::o;18139:115::-;18211:4;18243;18238:3;18234:14;18226:22;;18139:115;;;:::o;18290:699::-;18419:3;18442:86;18521:6;18516:3;18442:86;:::i;:::-;18435:93;;18552:58;18604:5;18552:58;:::i;:::-;18633:7;18664:1;18649:315;18674:6;18671:1;18668:13;18649:315;;;18744:42;18779:6;18770:7;18744:42;:::i;:::-;18806:63;18865:3;18850:13;18806:63;:::i;:::-;18799:70;;18892:62;18947:6;18892:62;:::i;:::-;18882:72;;18709:255;18696:1;18693;18689:9;18684:14;;18649:315;;;18653:14;18980:3;18973:10;;18424:565;;18290:699;;;;;:::o;18995:491::-;19170:4;19208:2;19197:9;19193:18;19185:26;;19257:9;19251:4;19247:20;19243:1;19232:9;19228:17;19221:47;19285:118;19398:4;19389:6;19381;19285:118;:::i;:::-;19277:126;;19413:66;19475:2;19464:9;19460:18;19451:6;19413:66;:::i;:::-;18995:491;;;;;;:::o;19492:225::-;19632:34;19628:1;19620:6;19616:14;19609:58;19701:8;19696:2;19688:6;19684:15;19677:33;19492:225;:::o;19723:366::-;19865:3;19886:67;19950:2;19945:3;19886:67;:::i;:::-;19879:74;;19962:93;20051:3;19962:93;:::i;:::-;20080:2;20075:3;20071:12;20064:19;;19723:366;;;:::o;20095:419::-;20261:4;20299:2;20288:9;20284:18;20276:26;;20348:9;20342:4;20338:20;20334:1;20323:9;20319:17;20312:47;20376:131;20502:4;20376:131;:::i;:::-;20368:139;;20095:419;;;:::o;20520:223::-;20660:34;20656:1;20648:6;20644:14;20637:58;20729:6;20724:2;20716:6;20712:15;20705:31;20520:223;:::o;20749:366::-;20891:3;20912:67;20976:2;20971:3;20912:67;:::i;:::-;20905:74;;20988:93;21077:3;20988:93;:::i;:::-;21106:2;21101:3;21097:12;21090:19;;20749:366;;;:::o;21121:419::-;21287:4;21325:2;21314:9;21310:18;21302:26;;21374:9;21368:4;21364:20;21360:1;21349:9;21345:17;21338:47;21402:131;21528:4;21402:131;:::i;:::-;21394:139;;21121:419;;;:::o;21546:221::-;21686:34;21682:1;21674:6;21670:14;21663:58;21755:4;21750:2;21742:6;21738:15;21731:29;21546:221;:::o;21773:366::-;21915:3;21936:67;22000:2;21995:3;21936:67;:::i;:::-;21929:74;;22012:93;22101:3;22012:93;:::i;:::-;22130:2;22125:3;22121:12;22114:19;;21773:366;;;:::o;22145:419::-;22311:4;22349:2;22338:9;22334:18;22326:26;;22398:9;22392:4;22388:20;22384:1;22373:9;22369:17;22362:47;22426:131;22552:4;22426:131;:::i;:::-;22418:139;;22145:419;;;:::o;22570:224::-;22710:34;22706:1;22698:6;22694:14;22687:58;22779:7;22774:2;22766:6;22762:15;22755:32;22570:224;:::o;22800:366::-;22942:3;22963:67;23027:2;23022:3;22963:67;:::i;:::-;22956:74;;23039:93;23128:3;23039:93;:::i;:::-;23157:2;23152:3;23148:12;23141:19;;22800:366;;;:::o;23172:419::-;23338:4;23376:2;23365:9;23361:18;23353:26;;23425:9;23419:4;23415:20;23411:1;23400:9;23396:17;23389:47;23453:131;23579:4;23453:131;:::i;:::-;23445:139;;23172:419;;;:::o;23597:222::-;23737:34;23733:1;23725:6;23721:14;23714:58;23806:5;23801:2;23793:6;23789:15;23782:30;23597:222;:::o;23825:366::-;23967:3;23988:67;24052:2;24047:3;23988:67;:::i;:::-;23981:74;;24064:93;24153:3;24064:93;:::i;:::-;24182:2;24177:3;24173:12;24166:19;;23825:366;;;:::o;24197:419::-;24363:4;24401:2;24390:9;24386:18;24378:26;;24450:9;24444:4;24440:20;24436:1;24425:9;24421:17;24414:47;24478:131;24604:4;24478:131;:::i;:::-;24470:139;;24197:419;;;:::o;24622:230::-;24762:34;24758:1;24750:6;24746:14;24739:58;24831:13;24826:2;24818:6;24814:15;24807:38;24622:230;:::o;24858:366::-;25000:3;25021:67;25085:2;25080:3;25021:67;:::i;:::-;25014:74;;25097:93;25186:3;25097:93;:::i;:::-;25215:2;25210:3;25206:12;25199:19;;24858:366;;;:::o;25230:419::-;25396:4;25434:2;25423:9;25419:18;25411:26;;25483:9;25477:4;25473:20;25469:1;25458:9;25454:17;25447:47;25511:131;25637:4;25511:131;:::i;:::-;25503:139;;25230:419;;;:::o;25655:248::-;25795:34;25791:1;25783:6;25779:14;25772:58;25864:31;25859:2;25851:6;25847:15;25840:56;25655:248;:::o;25909:366::-;26051:3;26072:67;26136:2;26131:3;26072:67;:::i;:::-;26065:74;;26148:93;26237:3;26148:93;:::i;:::-;26266:2;26261:3;26257:12;26250:19;;25909:366;;;:::o;26281:419::-;26447:4;26485:2;26474:9;26470:18;26462:26;;26534:9;26528:4;26524:20;26520:1;26509:9;26505:17;26498:47;26562:131;26688:4;26562:131;:::i;:::-;26554:139;;26281:419;;;:::o;26706:225::-;26846:34;26842:1;26834:6;26830:14;26823:58;26915:8;26910:2;26902:6;26898:15;26891:33;26706:225;:::o;26937:366::-;27079:3;27100:67;27164:2;27159:3;27100:67;:::i;:::-;27093:74;;27176:93;27265:3;27176:93;:::i;:::-;27294:2;27289:3;27285:12;27278:19;;26937:366;;;:::o;27309:419::-;27475:4;27513:2;27502:9;27498:18;27490:26;;27562:9;27556:4;27552:20;27548:1;27537:9;27533:17;27526:47;27590:131;27716:4;27590:131;:::i;:::-;27582:139;;27309:419;;;:::o;27734:191::-;27774:4;27794:20;27812:1;27794:20;:::i;:::-;27789:25;;27828:20;27846:1;27828:20;:::i;:::-;27823:25;;27867:1;27864;27861:8;27858:34;;;27872:18;;:::i;:::-;27858:34;27917:1;27914;27910:9;27902:17;;27734:191;;;;:::o;27931:348::-;27971:7;27994:20;28012:1;27994:20;:::i;:::-;27989:25;;28028:20;28046:1;28028:20;:::i;:::-;28023:25;;28216:1;28148:66;28144:74;28141:1;28138:81;28133:1;28126:9;28119:17;28115:105;28112:131;;;28223:18;;:::i;:::-;28112:131;28271:1;28268;28264:9;28253:20;;27931:348;;;;:::o;28285:180::-;28333:77;28330:1;28323:88;28430:4;28427:1;28420:15;28454:4;28451:1;28444:15;28471:185;28511:1;28528:20;28546:1;28528:20;:::i;:::-;28523:25;;28562:20;28580:1;28562:20;:::i;:::-;28557:25;;28601:1;28591:35;;28606:18;;:::i;:::-;28591:35;28648:1;28645;28641:9;28636:14;;28471:185;;;;:::o;28662:180::-;28710:77;28707:1;28700:88;28807:4;28804:1;28797:15;28831:4;28828:1;28821:15;28848:143;28905:5;28936:6;28930:13;28921:22;;28952:33;28979:5;28952:33;:::i;:::-;28848:143;;;;:::o;28997:351::-;29067:6;29116:2;29104:9;29095:7;29091:23;29087:32;29084:119;;;29122:79;;:::i;:::-;29084:119;29242:1;29267:64;29323:7;29314:6;29303:9;29299:22;29267:64;:::i;:::-;29257:74;;29213:128;28997:351;;;;:::o;29354:85::-;29399:7;29428:5;29417:16;;29354:85;;;:::o;29445:158::-;29503:9;29536:61;29554:42;29563:32;29589:5;29563:32;:::i;:::-;29554:42;:::i;:::-;29536:61;:::i;:::-;29523:74;;29445:158;;;:::o;29609:147::-;29704:45;29743:5;29704:45;:::i;:::-;29699:3;29692:58;29609:147;;:::o;29762:114::-;29829:6;29863:5;29857:12;29847:22;;29762:114;;;:::o;29882:132::-;29949:4;29972:3;29964:11;;30002:4;29997:3;29993:14;29985:22;;29882:132;;;:::o;30020:113::-;30090:4;30122;30117:3;30113:14;30105:22;;30020:113;;;:::o;30169:732::-;30288:3;30317:54;30365:5;30317:54;:::i;:::-;30387:86;30466:6;30461:3;30387:86;:::i;:::-;30380:93;;30497:56;30547:5;30497:56;:::i;:::-;30576:7;30607:1;30592:284;30617:6;30614:1;30611:13;30592:284;;;30693:6;30687:13;30720:63;30779:3;30764:13;30720:63;:::i;:::-;30713:70;;30806:60;30859:6;30806:60;:::i;:::-;30796:70;;30652:224;30639:1;30636;30632:9;30627:14;;30592:284;;;30596:14;30892:3;30885:10;;30293:608;;;30169:732;;;;:::o;30907:831::-;31170:4;31208:3;31197:9;31193:19;31185:27;;31222:71;31290:1;31279:9;31275:17;31266:6;31222:71;:::i;:::-;31303:80;31379:2;31368:9;31364:18;31355:6;31303:80;:::i;:::-;31430:9;31424:4;31420:20;31415:2;31404:9;31400:18;31393:48;31458:108;31561:4;31552:6;31458:108;:::i;:::-;31450:116;;31576:72;31644:2;31633:9;31629:18;31620:6;31576:72;:::i;:::-;31658:73;31726:3;31715:9;31711:19;31702:6;31658:73;:::i;:::-;30907:831;;;;;;;;:::o;31744:720::-;31979:4;32017:3;32006:9;32002:19;31994:27;;32031:79;32107:1;32096:9;32092:17;32083:6;32031:79;:::i;:::-;32157:9;32151:4;32147:20;32142:2;32131:9;32127:18;32120:48;32185:108;32288:4;32279:6;32185:108;:::i;:::-;32177:116;;32303:72;32371:2;32360:9;32356:18;32347:6;32303:72;:::i;:::-;32385;32453:2;32442:9;32438:18;32429:6;32385:72;:::i;:::-;31744:720;;;;;;;:::o;32470:281::-;32553:27;32575:4;32553:27;:::i;:::-;32545:6;32541:40;32683:6;32671:10;32668:22;32647:18;32635:10;32632:34;32629:62;32626:88;;;32694:18;;:::i;:::-;32626:88;32734:10;32730:2;32723:22;32513:238;32470:281;;:::o;32757:129::-;32791:6;32818:20;;:::i;:::-;32808:30;;32847:33;32875:4;32867:6;32847:33;:::i;:::-;32757:129;;;:::o;32892:311::-;32969:4;33059:18;33051:6;33048:30;33045:56;;;33081:18;;:::i;:::-;33045:56;33131:4;33123:6;33119:17;33111:25;;33191:4;33185;33181:15;33173:23;;32892:311;;;:::o;33209:143::-;33266:5;33297:6;33291:13;33282:22;;33313:33;33340:5;33313:33;:::i;:::-;33209:143;;;;:::o;33375:732::-;33482:5;33507:81;33523:64;33580:6;33523:64;:::i;:::-;33507:81;:::i;:::-;33498:90;;33608:5;33637:6;33630:5;33623:21;33671:4;33664:5;33660:16;33653:23;;33724:4;33716:6;33712:17;33704:6;33700:30;33753:3;33745:6;33742:15;33739:122;;;33772:79;;:::i;:::-;33739:122;33887:6;33870:231;33904:6;33899:3;33896:15;33870:231;;;33979:3;34008:48;34052:3;34040:10;34008:48;:::i;:::-;34003:3;33996:61;34086:4;34081:3;34077:14;34070:21;;33946:155;33930:4;33925:3;33921:14;33914:21;;33870:231;;;33874:21;33488:619;;33375:732;;;;;:::o;34130:385::-;34212:5;34261:3;34254:4;34246:6;34242:17;34238:27;34228:122;;34269:79;;:::i;:::-;34228:122;34379:6;34373:13;34404:105;34505:3;34497:6;34490:4;34482:6;34478:17;34404:105;:::i;:::-;34395:114;;34218:297;34130:385;;;;:::o;34521:554::-;34616:6;34665:2;34653:9;34644:7;34640:23;34636:32;34633:119;;;34671:79;;:::i;:::-;34633:119;34812:1;34801:9;34797:17;34791:24;34842:18;34834:6;34831:30;34828:117;;;34864:79;;:::i;:::-;34828:117;34969:89;35050:7;35041:6;35030:9;35026:22;34969:89;:::i;:::-;34959:99;;34762:306;34521:554;;;;:::o
Swarm Source
ipfs://1f1b883631500fe290bb565123a1893ee3ef5322d1f6598a4283a5a5fb73b882
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.