Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
696,696 HONK
Holders
95
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
1,462.308741839376088759 HONKValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
HONK
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-04-05 */ /** TG: https://t.me/honkaerc Twitter: https://twitter.com/honkaerc */ // SPDX-License-Identifier: MIT pragma solidity =0.8.10 >=0.8.10 >=0.8.0 <0.9.0; pragma experimental ABIEncoderV2; ////// lib/openzeppelin-contracts/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) /* pragma solidity ^0.8.0; */ /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } ////// lib/openzeppelin-contracts/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) /* pragma solidity ^0.8.0; */ /* import "../utils/Context.sol"; */ /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev 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 { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } ////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) /* pragma solidity ^0.8.0; */ /** * @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); } ////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol) /* pragma solidity ^0.8.0; */ /* import "../IERC20.sol"; */ /** * @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); } ////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol) /* pragma solidity ^0.8.0; */ /* import "./IERC20.sol"; */ /* import "./extensions/IERC20Metadata.sol"; */ /* import "../../utils/Context.sol"; */ /** * @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 Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `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 {} } ////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol) /* pragma solidity ^0.8.0; */ // 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 generally not needed starting with Solidity 0.8, since 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; } } } ////// src/IUniswapV2Factory.sol /* pragma solidity 0.8.10; */ /* pragma experimental ABIEncoderV2; */ interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); 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(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } ////// src/IUniswapV2Pair.sol /* pragma solidity 0.8.10; */ /* pragma experimental ABIEncoderV2; */ interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } ////// src/IUniswapV2Router02.sol /* pragma solidity 0.8.10; */ /* pragma experimental ABIEncoderV2; */ interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } /* pragma solidity >=0.8.10; */ /* import {IUniswapV2Router02} from "./IUniswapV2Router02.sol"; */ /* import {IUniswapV2Factory} from "./IUniswapV2Factory.sol"; */ /* import {IUniswapV2Pair} from "./IUniswapV2Pair.sol"; */ /* import {IERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; */ /* import {ERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; */ /* import {Ownable} from "lib/openzeppelin-contracts/contracts/access/Ownable.sol"; */ /* import {SafeMath} from "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol"; */ contract HONK is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; address public marketingWallet; address public devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; uint256 public percentForLPBurn = 25; // 25 = .25% bool public lpBurnEnabled = true; uint256 public lpBurnFrequency = 3600 seconds; uint256 public lastLpBurnTime; uint256 public manualBurnFrequency = 30 minutes; uint256 public lastManualLpBurnTime; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public sellDevFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForDev; /******************/ // exlcude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; // 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 SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated( address indexed newWallet, address indexed oldWallet ); event devWalletUpdated( address indexed newWallet, address indexed oldWallet ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AutoNukeLP(); event ManualNukeLP(); constructor() ERC20("Honka", "HONK") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyMarketingFee = 0; uint256 _buyLiquidityFee = 0; uint256 _buyDevFee = 20; uint256 _sellMarketingFee = 0; uint256 _sellLiquidityFee = 0; uint256 _sellDevFee = 80; uint256 totalSupply = 696_696 * 1e18; maxTransactionAmount = 13_950 * 1e18; // 2% from total supply maxTransactionAmountTxn maxWallet = 13_950 * 1e18; // 2% from total supply maxWallet swapTokensAtAmount = (totalSupply * 10) / 10000; // 0.1% swap wallet buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; marketingWallet = address(0x4072a06E3ea3d8694Ed4B2E819440d955348F49A); // set as marketing wallet devWallet = address(0x4072a06E3ea3d8694Ed4B2E819440d955348F49A); // set as dev wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable {} // once enabled, can never be turned off function enableTrading(bool enabled) external onlyOwner { if(enabled){ tradingActive = true; swapEnabled = true; lastLpBurnTime = block.timestamp; } } // remove limits after token is stable function removeHonks() external onlyOwner returns (bool) { limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool) { transferDelayEnabled = false; return true; } // change the minimum amount of tokens to sell from fees function HonkTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) { require( newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply." ); require( newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply." ); swapTokensAtAmount = newAmount; return true; } function honkLimits(uint256 newNumTx, uint256 newNumWallet) external onlyOwner { require( newNumTx >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.1%" ); maxTransactionAmount = newNumTx * (10**18); require( newNumWallet >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set maxWallet lower than 0.5%" ); maxWallet = newNumWallet * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner { swapEnabled = enabled; } function honkFees(uint256 _buyMarketingFee, uint256 _buyLiquidityFee, uint256 _buyDevFee, uint256 _sellMarketingFee, uint256 _sellLiquidityFee, uint256 _sellDevFee) external onlyOwner{ buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require( pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateMarketingWallet(address newMarketingWallet) external onlyOwner { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function updateDevWallet(address newWallet) external onlyOwner { emit devWalletUpdated(newWallet, devWallet); devWallet = newWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } event BoughtEarly(address indexed sniper); function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled) { if ( to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair) ) { require( _holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed." ); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require( amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount." ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } if ( !swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from] ) { autoBurnLiquidityPairTokens(); } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees; tokensForDev += (fees * sellDevFee) / sellTotalFees; tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees; } // on buy else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees; tokensForDev += (fees * buyDevFee) / buyTotalFees; tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } 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(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable deadAddress, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev; bool success; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div( totalTokensToSwap ); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; (success, ) = address(devWallet).call{value: ethForDev}(""); if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify( amountToSwapForETH, ethForLiquidity, tokensForLiquidity ); } (success, ) = address(marketingWallet).call{ value: address(this).balance }(""); } function setAutoLPBurnSettings( uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled ) external onlyOwner { require( _frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes" ); require( _percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%" ); lpBurnFrequency = _frequencyInSeconds; percentForLPBurn = _percent; lpBurnEnabled = _Enabled; } function autoBurnLiquidityPairTokens() internal returns (bool) { lastLpBurnTime = block.timestamp; // get balance of liquidity pair uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair); // calculate amount to burn uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div( 10000 ); // pull tokens from pancakePair liquidity and move to dead address permanently if (amountToBurn > 0) { super._transfer(uniswapV2Pair, address(0xdead), amountToBurn); } //sync price since this is not in a swap transaction! IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair); pair.sync(); emit AutoNukeLP(); return true; } function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner returns (bool) { require( block.timestamp > lastManualLpBurnTime + manualBurnFrequency, "Must wait for cooldown to finish" ); require(percent <= 1000, "May not nuke more than 10% of tokens in LP"); lastManualLpBurnTime = block.timestamp; // get balance of liquidity pair uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair); // calculate amount to burn uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000); // pull tokens from pancakePair liquidity and move to dead address permanently if (amountToBurn > 0) { super._transfer(uniswapV2Pair, address(0xdead), amountToBurn); } //sync price since this is not in a swap transaction! IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair); pair.sync(); emit ManualNukeLP(); return true; } }
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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":[],"name":"ManualNukeLP","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":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"HonkTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyDevFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sellDevFee","type":"uint256"}],"name":"honkFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNumTx","type":"uint256"},{"internalType":"uint256","name":"newNumWallet","type":"uint256"}],"name":"honkLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeHonks","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","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":[],"name":"swapEnabled","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526019600b556001600c60006101000a81548160ff021916908315150217905550610e10600d55610708600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601360006101000a81548160ff021916908315150217905550348015620000a957600080fd5b506040518060400160405280600581526020017f486f6e6b610000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f484f4e4b0000000000000000000000000000000000000000000000000000000081525081600390805190602001906200012e92919062000b09565b5080600490805190602001906200014792919062000b09565b5050506200016a6200015e620005c960201b60201c565b620005d160201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001968160016200069760201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000216573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023c919062000c23565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ca919062000c23565b6040518363ffffffff1660e01b8152600401620002e992919062000c66565b6020604051808303816000875af115801562000309573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032f919062000c23565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200037760a05160016200069760201b60201c565b6200038c60a05160016200078160201b60201c565b6000806000601490506000806000605090506000699387f7412a645ae0000090506902f43b23d1bb7b3800006008819055506902f43b23d1bb7b380000600a81905550612710600a82620003e1919062000ccc565b620003ed919062000d5c565b6009819055508660158190555085601681905550846017819055506017546016546015546200041d919062000d94565b62000429919062000d94565b6014819055508360198190555082601a8190555081601b81905550601b54601a5460195462000459919062000d94565b62000465919062000d94565b601881905550734072a06e3ea3d8694ed4b2e819440d955348f49a600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734072a06e3ea3d8694ed4b2e819440d955348f49a600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000537620005296200082260201b60201c565b60016200084c60201b60201c565b6200054a3060016200084c60201b60201c565b6200055f61dead60016200084c60201b60201c565b62000581620005736200082260201b60201c565b60016200069760201b60201c565b620005943060016200069760201b60201c565b620005a961dead60016200069760201b60201c565b620005bb33826200098660201b60201c565b505050505050505062000fb3565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006a7620005c960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006cd6200082260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000726576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200071d9062000e52565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200085c620005c960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008826200082260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008d29062000e52565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200097a919062000e91565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009f09062000efe565b60405180910390fd5b62000a0d6000838362000aff60201b60201c565b806002600082825462000a21919062000d94565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a78919062000d94565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000adf919062000f31565b60405180910390a362000afb6000838362000b0460201b60201c565b5050565b505050565b505050565b82805462000b179062000f7d565b90600052602060002090601f01602090048101928262000b3b576000855562000b87565b82601f1062000b5657805160ff191683800117855562000b87565b8280016001018555821562000b87579182015b8281111562000b8657825182559160200191906001019062000b69565b5b50905062000b96919062000b9a565b5090565b5b8082111562000bb557600081600090555060010162000b9b565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000beb8262000bbe565b9050919050565b62000bfd8162000bde565b811462000c0957600080fd5b50565b60008151905062000c1d8162000bf2565b92915050565b60006020828403121562000c3c5762000c3b62000bb9565b5b600062000c4c8482850162000c0c565b91505092915050565b62000c608162000bde565b82525050565b600060408201905062000c7d600083018562000c55565b62000c8c602083018462000c55565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cd98262000c93565b915062000ce68362000c93565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d225762000d2162000c9d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d698262000c93565b915062000d768362000c93565b92508262000d895762000d8862000d2d565b5b828204905092915050565b600062000da18262000c93565b915062000dae8362000c93565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000de65762000de562000c9d565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e3a60208362000df1565b915062000e478262000e02565b602082019050919050565b6000602082019050818103600083015262000e6d8162000e2b565b9050919050565b60008115159050919050565b62000e8b8162000e74565b82525050565b600060208201905062000ea8600083018462000e80565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ee6601f8362000df1565b915062000ef38262000eae565b602082019050919050565b6000602082019050818103600083015262000f198162000ed7565b9050919050565b62000f2b8162000c93565b82525050565b600060208201905062000f48600083018462000f20565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f9657607f821691505b6020821081141562000fad5762000fac62000f4e565b5b50919050565b60805160a051615a046200103b600039600081816113dd01528181611a3301528181612571015281816126280152818161265501528181612c9901528181613d9d01528181613e560152613e8301526000818161108f01528181612c4101528181613ff9015281816140da015281816141010152818161419d01526141c40152615a046000f3fe60806040526004361061039b5760003560e01c806392136913116101dc578063bbc0c74211610102578063e884f260116100a0578063f2fde38b1161006f578063f2fde38b14610dad578063f637434214610dd6578063f8b45b0514610e01578063fe72b27a14610e2c576103a2565b8063e884f26014610d05578063e96b10c414610d30578063f11a24d314610d59578063f275f64b14610d84576103a2565b8063c8c8ebe4116100dc578063c8c8ebe414610c47578063d85ba06314610c72578063dd62ed3e14610c9d578063e2f4560514610cda576103a2565b8063bbc0c74214610bc8578063c024666814610bf3578063c876d0b914610c1c576103a2565b80639fccce321161017a578063a81718b511610149578063a81718b514610afc578063a9059cbb14610b25578063aacebbe314610b62578063b62496f514610b8b576103a2565b80639fccce3214610a3e578063a0d82dc514610a69578063a457c2d714610a94578063a4c82a0014610ad1576103a2565b806395d89b41116101b657806395d89b41146109945780639a7a23d6146109bf5780639c3b4fdc146109e85780639ec22c0e14610a13576103a2565b80639213691314610915578063924de9b714610940578063932641dd14610969576103a2565b8063313ce567116102c157806370a082311161025f57806375f0a8741161022e57806375f0a874146108695780637bce5a04146108945780638da5cb5b146108bf5780638ea5220f146108ea576103a2565b806370a08231146107c3578063715018a614610800578063730c1888146108175780637571336a14610840576103a2565b80634a62bb651161029b5780634a62bb65146107055780634fbee193146107305780636a486a8e1461076d5780636ddd171314610798576103a2565b8063313ce56714610672578063395093511461069d57806349bd5a5e146106da576103a2565b8063184c16c51161033957806323b872dd1161030857806323b872dd146105b457806327c8f835146105f15780632c3e486c1461061c5780632e82f1a014610647576103a2565b8063184c16c514610508578063199ffc72146105335780631a8145bb1461055e5780631f3fed8f14610589576103a2565b806310d5de531161037557806310d5de531461044c5780631694505e1461048957806318160ddd146104b45780631816467f146104df576103a2565b806306fdde03146103a7578063070c01b1146103d2578063095ea7b31461040f576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610e69565b6040516103c9919061430c565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190614369565b610efb565b60405161040691906143b1565b60405180910390f35b34801561041b57600080fd5b506104366004803603810190610431919061442a565b611050565b60405161044391906143b1565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e919061446a565b61106e565b60405161048091906143b1565b60405180910390f35b34801561049557600080fd5b5061049e61108d565b6040516104ab91906144f6565b60405180910390f35b3480156104c057600080fd5b506104c96110b1565b6040516104d69190614520565b60405180910390f35b3480156104eb57600080fd5b506105066004803603810190610501919061446a565b6110bb565b005b34801561051457600080fd5b5061051d6111f7565b60405161052a9190614520565b60405180910390f35b34801561053f57600080fd5b506105486111fd565b6040516105559190614520565b60405180910390f35b34801561056a57600080fd5b50610573611203565b6040516105809190614520565b60405180910390f35b34801561059557600080fd5b5061059e611209565b6040516105ab9190614520565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d6919061453b565b61120f565b6040516105e891906143b1565b60405180910390f35b3480156105fd57600080fd5b50610606611307565b604051610613919061459d565b60405180910390f35b34801561062857600080fd5b5061063161130d565b60405161063e9190614520565b60405180910390f35b34801561065357600080fd5b5061065c611313565b60405161066991906143b1565b60405180910390f35b34801561067e57600080fd5b50610687611326565b60405161069491906145d4565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf919061442a565b61132f565b6040516106d191906143b1565b60405180910390f35b3480156106e657600080fd5b506106ef6113db565b6040516106fc919061459d565b60405180910390f35b34801561071157600080fd5b5061071a6113ff565b60405161072791906143b1565b60405180910390f35b34801561073c57600080fd5b506107576004803603810190610752919061446a565b611412565b60405161076491906143b1565b60405180910390f35b34801561077957600080fd5b50610782611468565b60405161078f9190614520565b60405180910390f35b3480156107a457600080fd5b506107ad61146e565b6040516107ba91906143b1565b60405180910390f35b3480156107cf57600080fd5b506107ea60048036038101906107e5919061446a565b611481565b6040516107f79190614520565b60405180910390f35b34801561080c57600080fd5b506108156114c9565b005b34801561082357600080fd5b5061083e6004803603810190610839919061461b565b611551565b005b34801561084c57600080fd5b506108676004803603810190610862919061466e565b611691565b005b34801561087557600080fd5b5061087e611768565b60405161088b919061459d565b60405180910390f35b3480156108a057600080fd5b506108a961178e565b6040516108b69190614520565b60405180910390f35b3480156108cb57600080fd5b506108d4611794565b6040516108e1919061459d565b60405180910390f35b3480156108f657600080fd5b506108ff6117be565b60405161090c919061459d565b60405180910390f35b34801561092157600080fd5b5061092a6117e4565b6040516109379190614520565b60405180910390f35b34801561094c57600080fd5b50610967600480360381019061096291906146ae565b6117ea565b005b34801561097557600080fd5b5061097e611883565b60405161098b91906143b1565b60405180910390f35b3480156109a057600080fd5b506109a9611923565b6040516109b6919061430c565b60405180910390f35b3480156109cb57600080fd5b506109e660048036038101906109e1919061466e565b6119b5565b005b3480156109f457600080fd5b506109fd611ace565b604051610a0a9190614520565b60405180910390f35b348015610a1f57600080fd5b50610a28611ad4565b604051610a359190614520565b60405180910390f35b348015610a4a57600080fd5b50610a53611ada565b604051610a609190614520565b60405180910390f35b348015610a7557600080fd5b50610a7e611ae0565b604051610a8b9190614520565b60405180910390f35b348015610aa057600080fd5b50610abb6004803603810190610ab6919061442a565b611ae6565b604051610ac891906143b1565b60405180910390f35b348015610add57600080fd5b50610ae6611bd1565b604051610af39190614520565b60405180910390f35b348015610b0857600080fd5b50610b236004803603810190610b1e91906146db565b611bd7565b005b348015610b3157600080fd5b50610b4c6004803603810190610b47919061442a565b611d77565b604051610b5991906143b1565b60405180910390f35b348015610b6e57600080fd5b50610b896004803603810190610b84919061446a565b611d95565b005b348015610b9757600080fd5b50610bb26004803603810190610bad919061446a565b611ed1565b604051610bbf91906143b1565b60405180910390f35b348015610bd457600080fd5b50610bdd611ef1565b604051610bea91906143b1565b60405180910390f35b348015610bff57600080fd5b50610c1a6004803603810190610c15919061466e565b611f04565b005b348015610c2857600080fd5b50610c31612029565b604051610c3e91906143b1565b60405180910390f35b348015610c5357600080fd5b50610c5c61203c565b604051610c699190614520565b60405180910390f35b348015610c7e57600080fd5b50610c87612042565b604051610c949190614520565b60405180910390f35b348015610ca957600080fd5b50610cc46004803603810190610cbf919061471b565b612048565b604051610cd19190614520565b60405180910390f35b348015610ce657600080fd5b50610cef6120cf565b604051610cfc9190614520565b60405180910390f35b348015610d1157600080fd5b50610d1a6120d5565b604051610d2791906143b1565b60405180910390f35b348015610d3c57600080fd5b50610d576004803603810190610d52919061475b565b612175565b005b348015610d6557600080fd5b50610d6e612269565b604051610d7b9190614520565b60405180910390f35b348015610d9057600080fd5b50610dab6004803603810190610da691906146ae565b61226f565b005b348015610db957600080fd5b50610dd46004803603810190610dcf919061446a565b612332565b005b348015610de257600080fd5b50610deb61242a565b604051610df89190614520565b60405180910390f35b348015610e0d57600080fd5b50610e16612430565b604051610e239190614520565b60405180910390f35b348015610e3857600080fd5b50610e536004803603810190610e4e9190614369565b612436565b604051610e6091906143b1565b60405180910390f35b606060038054610e7890614817565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea490614817565b8015610ef15780601f10610ec657610100808354040283529160200191610ef1565b820191906000526020600020905b815481529060010190602001808311610ed457829003601f168201915b5050505050905090565b6000610f0561270e565b73ffffffffffffffffffffffffffffffffffffffff16610f23611794565b73ffffffffffffffffffffffffffffffffffffffff1614610f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7090614895565b60405180910390fd5b620186a06001610f876110b1565b610f9191906148e4565b610f9b919061496d565b821015610fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd490614a10565b60405180910390fd5b6103e86005610fea6110b1565b610ff491906148e4565b610ffe919061496d565b821115611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103790614aa2565b60405180910390fd5b8160098190555060019050919050565b600061106461105d61270e565b8484612716565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6110c361270e565b73ffffffffffffffffffffffffffffffffffffffff166110e1611794565b73ffffffffffffffffffffffffffffffffffffffff1614611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e90614895565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b600061121c8484846128e1565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061126761270e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112de90614b34565b60405180910390fd5b6112fb856112f361270e565b858403612716565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60006113d161133c61270e565b84846001600061134a61270e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113cc9190614b54565b612716565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114d161270e565b73ffffffffffffffffffffffffffffffffffffffff166114ef611794565b73ffffffffffffffffffffffffffffffffffffffff1614611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c90614895565b60405180910390fd5b61154f6000613679565b565b61155961270e565b73ffffffffffffffffffffffffffffffffffffffff16611577611794565b73ffffffffffffffffffffffffffffffffffffffff16146115cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c490614895565b60405180910390fd5b610258831015611612576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160990614c1c565b60405180910390fd5b6103e88211158015611625575060008210155b611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165b90614cae565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b61169961270e565b73ffffffffffffffffffffffffffffffffffffffff166116b7611794565b73ffffffffffffffffffffffffffffffffffffffff161461170d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170490614895565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b6117f261270e565b73ffffffffffffffffffffffffffffffffffffffff16611810611794565b73ffffffffffffffffffffffffffffffffffffffff1614611866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185d90614895565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b600061188d61270e565b73ffffffffffffffffffffffffffffffffffffffff166118ab611794565b73ffffffffffffffffffffffffffffffffffffffff1614611901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f890614895565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b60606004805461193290614817565b80601f016020809104026020016040519081016040528092919081815260200182805461195e90614817565b80156119ab5780601f10611980576101008083540402835291602001916119ab565b820191906000526020600020905b81548152906001019060200180831161198e57829003601f168201915b5050505050905090565b6119bd61270e565b73ffffffffffffffffffffffffffffffffffffffff166119db611794565b73ffffffffffffffffffffffffffffffffffffffff1614611a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2890614895565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab790614d40565b60405180910390fd5b611aca828261373f565b5050565b60175481565b60105481565b601e5481565b601b5481565b60008060016000611af561270e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba990614dd2565b60405180910390fd5b611bc6611bbd61270e565b85858403612716565b600191505092915050565b600e5481565b611bdf61270e565b73ffffffffffffffffffffffffffffffffffffffff16611bfd611794565b73ffffffffffffffffffffffffffffffffffffffff1614611c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4a90614895565b60405180910390fd5b670de0b6b3a76400006103e86001611c696110b1565b611c7391906148e4565b611c7d919061496d565b611c87919061496d565b821015611cc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc090614e64565b60405180910390fd5b670de0b6b3a764000082611cdd91906148e4565b600881905550670de0b6b3a76400006103e86005611cf96110b1565b611d0391906148e4565b611d0d919061496d565b611d17919061496d565b811015611d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5090614ef6565b60405180910390fd5b670de0b6b3a764000081611d6d91906148e4565b600a819055505050565b6000611d8b611d8461270e565b84846128e1565b6001905092915050565b611d9d61270e565b73ffffffffffffffffffffffffffffffffffffffff16611dbb611794565b73ffffffffffffffffffffffffffffffffffffffff1614611e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0890614895565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611f0c61270e565b73ffffffffffffffffffffffffffffffffffffffff16611f2a611794565b73ffffffffffffffffffffffffffffffffffffffff1614611f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7790614895565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161201d91906143b1565b60405180910390a25050565b601360009054906101000a900460ff1681565b60085481565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006120df61270e565b73ffffffffffffffffffffffffffffffffffffffff166120fd611794565b73ffffffffffffffffffffffffffffffffffffffff1614612153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a90614895565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b61217d61270e565b73ffffffffffffffffffffffffffffffffffffffff1661219b611794565b73ffffffffffffffffffffffffffffffffffffffff16146121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e890614895565b60405180910390fd5b8560158190555084601681905550836017819055506017546016546015546122199190614b54565b6122239190614b54565b6014819055508260198190555081601a8190555080601b819055506017546016546015546122519190614b54565b61225b9190614b54565b601881905550505050505050565b60165481565b61227761270e565b73ffffffffffffffffffffffffffffffffffffffff16612295611794565b73ffffffffffffffffffffffffffffffffffffffff16146122eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e290614895565b60405180910390fd5b801561232f576001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e819055505b50565b61233a61270e565b73ffffffffffffffffffffffffffffffffffffffff16612358611794565b73ffffffffffffffffffffffffffffffffffffffff16146123ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a590614895565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561241e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241590614f88565b60405180910390fd5b61242781613679565b50565b601a5481565b600a5481565b600061244061270e565b73ffffffffffffffffffffffffffffffffffffffff1661245e611794565b73ffffffffffffffffffffffffffffffffffffffff16146124b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ab90614895565b60405180910390fd5b600f546010546124c49190614b54565b4211612505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fc90614ff4565b60405180910390fd5b6103e882111561254a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254190615086565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016125ac919061459d565b602060405180830381865afa1580156125c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ed91906150bb565b9050600061261861271061260a86856137e090919063ffffffff16565b6137f690919063ffffffff16565b90506000811115612651576126507f000000000000000000000000000000000000000000000000000000000000000061dead8361380c565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156126be57600080fd5b505af11580156126d2573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277d9061515a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ed906151ec565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128d49190614520565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612951576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129489061527e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b890615310565b60405180910390fd5b60008114156129db576129d68383600061380c565b613674565b601160009054906101000a900460ff161561309e576129f8611794565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a665750612a36611794565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a9f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ad9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612af25750600560149054906101000a900460ff16155b1561309d57601160019054906101000a900460ff16612bec57601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bac5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be29061537c565b60405180910390fd5b5b601360009054906101000a900460ff1615612db457612c09611794565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612c9057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ce857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612db35743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6590615434565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e575750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612efe57600854811115612ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e98906154c6565b60405180910390fd5b600a54612ead83611481565b82612eb89190614b54565b1115612ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef090615532565b60405180910390fd5b61309c565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fa15750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ff057600854811115612feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe2906155c4565b60405180910390fd5b61309b565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661309a57600a5461304d83611481565b826130589190614b54565b1115613099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309090615532565b60405180910390fd5b5b5b5b5b5b60006130a930611481565b9050600060095482101590508080156130ce5750601160029054906101000a900460ff165b80156130e75750600560149054906101000a900460ff16155b801561313d5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131935750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131e95750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561322d576001600560146101000a81548160ff021916908315150217905550613211613a8d565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156132935750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156132ab5750600c60009054906101000a900460ff165b80156132c65750600d54600e546132c29190614b54565b4210155b801561331c5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561332b57613329613d74565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133e15750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133eb57600090505b6000811561366457602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561344e57506000601854115b1561351b5761347b606461346d601854886137e090919063ffffffff16565b6137f690919063ffffffff16565b9050601854601a548261348e91906148e4565b613498919061496d565b601d60008282546134a99190614b54565b92505081905550601854601b54826134c191906148e4565b6134cb919061496d565b601e60008282546134dc9190614b54565b92505081905550601854601954826134f491906148e4565b6134fe919061496d565b601c600082825461350f9190614b54565b92505081905550613640565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561357657506000601454115b1561363f576135a36064613595601454886137e090919063ffffffff16565b6137f690919063ffffffff16565b9050601454601654826135b691906148e4565b6135c0919061496d565b601d60008282546135d19190614b54565b92505081905550601454601754826135e991906148e4565b6135f3919061496d565b601e60008282546136049190614b54565b925050819055506014546015548261361c91906148e4565b613626919061496d565b601c60008282546136379190614b54565b925050819055505b5b60008111156136555761365487308361380c565b5b808561366191906155e4565b94505b61366f87878761380c565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081836137ee91906148e4565b905092915050565b60008183613804919061496d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561387c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138739061527e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138e390615310565b60405180910390fd5b6138f7838383613f3a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561397d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139749061568a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a109190614b54565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a749190614520565b60405180910390a3613a87848484613f3f565b50505050565b6000613a9830611481565b90506000601e54601c54601d54613aaf9190614b54565b613ab99190614b54565b9050600080831480613acb5750600082145b15613ad857505050613d72565b6014600954613ae791906148e4565b831115613b00576014600954613afd91906148e4565b92505b6000600283601d5486613b1391906148e4565b613b1d919061496d565b613b27919061496d565b90506000613b3e8286613f4490919063ffffffff16565b90506000479050613b4e82613f5a565b6000613b638247613f4490919063ffffffff16565b90506000613b8e87613b80601c54856137e090919063ffffffff16565b6137f690919063ffffffff16565b90506000613bb988613bab601e54866137e090919063ffffffff16565b6137f690919063ffffffff16565b90506000818385613bca91906155e4565b613bd491906155e4565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613c34906156db565b60006040518083038185875af1925050503d8060008114613c71576040519150601f19603f3d011682016040523d82523d6000602084013e613c76565b606091505b505080985050600087118015613c8c5750600081115b15613cd957613c9b8782614197565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d54604051613cd0939291906156f0565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613d1f906156db565b60006040518083038185875af1925050503d8060008114613d5c576040519150601f19603f3d011682016040523d82523d6000602084013e613d61565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401613dd8919061459d565b602060405180830381865afa158015613df5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e1991906150bb565b90506000613e46612710613e38600b54856137e090919063ffffffff16565b6137f690919063ffffffff16565b90506000811115613e7f57613e7e7f000000000000000000000000000000000000000000000000000000000000000061dead8361380c565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613eec57600080fd5b505af1158015613f00573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b60008183613f5291906155e4565b905092915050565b6000600267ffffffffffffffff811115613f7757613f76615727565b5b604051908082528060200260200182016040528015613fa55781602001602082028036833780820191505090505b5090503081600081518110613fbd57613fbc615756565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614062573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614086919061579a565b8160018151811061409a57614099615756565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506140ff307f000000000000000000000000000000000000000000000000000000000000000084612716565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016141619594939291906158c0565b600060405180830381600087803b15801561417b57600080fd5b505af115801561418f573d6000803e3d6000fd5b505050505050565b6141c2307f000000000000000000000000000000000000000000000000000000000000000084612716565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016142299695949392919061591a565b60606040518083038185885af1158015614247573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061426c919061597b565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156142ad578082015181840152602081019050614292565b838111156142bc576000848401525b50505050565b6000601f19601f8301169050919050565b60006142de82614273565b6142e8818561427e565b93506142f881856020860161428f565b614301816142c2565b840191505092915050565b6000602082019050818103600083015261432681846142d3565b905092915050565b600080fd5b6000819050919050565b61434681614333565b811461435157600080fd5b50565b6000813590506143638161433d565b92915050565b60006020828403121561437f5761437e61432e565b5b600061438d84828501614354565b91505092915050565b60008115159050919050565b6143ab81614396565b82525050565b60006020820190506143c660008301846143a2565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143f7826143cc565b9050919050565b614407816143ec565b811461441257600080fd5b50565b600081359050614424816143fe565b92915050565b600080604083850312156144415761444061432e565b5b600061444f85828601614415565b925050602061446085828601614354565b9150509250929050565b6000602082840312156144805761447f61432e565b5b600061448e84828501614415565b91505092915050565b6000819050919050565b60006144bc6144b76144b2846143cc565b614497565b6143cc565b9050919050565b60006144ce826144a1565b9050919050565b60006144e0826144c3565b9050919050565b6144f0816144d5565b82525050565b600060208201905061450b60008301846144e7565b92915050565b61451a81614333565b82525050565b60006020820190506145356000830184614511565b92915050565b6000806000606084860312156145545761455361432e565b5b600061456286828701614415565b935050602061457386828701614415565b925050604061458486828701614354565b9150509250925092565b614597816143ec565b82525050565b60006020820190506145b2600083018461458e565b92915050565b600060ff82169050919050565b6145ce816145b8565b82525050565b60006020820190506145e960008301846145c5565b92915050565b6145f881614396565b811461460357600080fd5b50565b600081359050614615816145ef565b92915050565b6000806000606084860312156146345761463361432e565b5b600061464286828701614354565b935050602061465386828701614354565b925050604061466486828701614606565b9150509250925092565b600080604083850312156146855761468461432e565b5b600061469385828601614415565b92505060206146a485828601614606565b9150509250929050565b6000602082840312156146c4576146c361432e565b5b60006146d284828501614606565b91505092915050565b600080604083850312156146f2576146f161432e565b5b600061470085828601614354565b925050602061471185828601614354565b9150509250929050565b600080604083850312156147325761473161432e565b5b600061474085828601614415565b925050602061475185828601614415565b9150509250929050565b60008060008060008060c087890312156147785761477761432e565b5b600061478689828a01614354565b965050602061479789828a01614354565b95505060406147a889828a01614354565b94505060606147b989828a01614354565b93505060806147ca89828a01614354565b92505060a06147db89828a01614354565b9150509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061482f57607f821691505b60208210811415614843576148426147e8565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061487f60208361427e565b915061488a82614849565b602082019050919050565b600060208201905081810360008301526148ae81614872565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148ef82614333565b91506148fa83614333565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614933576149326148b5565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061497882614333565b915061498383614333565b9250826149935761499261493e565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006149fa60358361427e565b9150614a058261499e565b604082019050919050565b60006020820190508181036000830152614a29816149ed565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614a8c60348361427e565b9150614a9782614a30565b604082019050919050565b60006020820190508181036000830152614abb81614a7f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614b1e60288361427e565b9150614b2982614ac2565b604082019050919050565b60006020820190508181036000830152614b4d81614b11565b9050919050565b6000614b5f82614333565b9150614b6a83614333565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b9f57614b9e6148b5565b5b828201905092915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614c0660338361427e565b9150614c1182614baa565b604082019050919050565b60006020820190508181036000830152614c3581614bf9565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614c9860308361427e565b9150614ca382614c3c565b604082019050919050565b60006020820190508181036000830152614cc781614c8b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614d2a60398361427e565b9150614d3582614cce565b604082019050919050565b60006020820190508181036000830152614d5981614d1d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614dbc60258361427e565b9150614dc782614d60565b604082019050919050565b60006020820190508181036000830152614deb81614daf565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614e4e602f8361427e565b9150614e5982614df2565b604082019050919050565b60006020820190508181036000830152614e7d81614e41565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614ee060248361427e565b9150614eeb82614e84565b604082019050919050565b60006020820190508181036000830152614f0f81614ed3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614f7260268361427e565b9150614f7d82614f16565b604082019050919050565b60006020820190508181036000830152614fa181614f65565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614fde60208361427e565b9150614fe982614fa8565b602082019050919050565b6000602082019050818103600083015261500d81614fd1565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000615070602a8361427e565b915061507b82615014565b604082019050919050565b6000602082019050818103600083015261509f81615063565b9050919050565b6000815190506150b58161433d565b92915050565b6000602082840312156150d1576150d061432e565b5b60006150df848285016150a6565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061514460248361427e565b915061514f826150e8565b604082019050919050565b6000602082019050818103600083015261517381615137565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006151d660228361427e565b91506151e18261517a565b604082019050919050565b60006020820190508181036000830152615205816151c9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061526860258361427e565b91506152738261520c565b604082019050919050565b600060208201905081810360008301526152978161525b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006152fa60238361427e565b91506153058261529e565b604082019050919050565b60006020820190508181036000830152615329816152ed565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061536660168361427e565b915061537182615330565b602082019050919050565b6000602082019050818103600083015261539581615359565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061541e60498361427e565b91506154298261539c565b606082019050919050565b6000602082019050818103600083015261544d81615411565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006154b060358361427e565b91506154bb82615454565b604082019050919050565b600060208201905081810360008301526154df816154a3565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061551c60138361427e565b9150615527826154e6565b602082019050919050565b6000602082019050818103600083015261554b8161550f565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006155ae60368361427e565b91506155b982615552565b604082019050919050565b600060208201905081810360008301526155dd816155a1565b9050919050565b60006155ef82614333565b91506155fa83614333565b92508282101561560d5761560c6148b5565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061567460268361427e565b915061567f82615618565b604082019050919050565b600060208201905081810360008301526156a381615667565b9050919050565b600081905092915050565b50565b60006156c56000836156aa565b91506156d0826156b5565b600082019050919050565b60006156e6826156b8565b9150819050919050565b60006060820190506157056000830186614511565b6157126020830185614511565b61571f6040830184614511565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615794816143fe565b92915050565b6000602082840312156157b0576157af61432e565b5b60006157be84828501615785565b91505092915050565b6000819050919050565b60006157ec6157e76157e2846157c7565b614497565b614333565b9050919050565b6157fc816157d1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615837816143ec565b82525050565b6000615849838361582e565b60208301905092915050565b6000602082019050919050565b600061586d82615802565b615877818561580d565b93506158828361581e565b8060005b838110156158b357815161589a888261583d565b97506158a583615855565b925050600181019050615886565b5085935050505092915050565b600060a0820190506158d56000830188614511565b6158e260208301876157f3565b81810360408301526158f48186615862565b9050615903606083018561458e565b6159106080830184614511565b9695505050505050565b600060c08201905061592f600083018961458e565b61593c6020830188614511565b61594960408301876157f3565b61595660608301866157f3565b615963608083018561458e565b61597060a0830184614511565b979650505050505050565b6000806000606084860312156159945761599361432e565b5b60006159a2868287016150a6565b93505060206159b3868287016150a6565b92505060406159c4868287016150a6565b915050925092509256fea2646970667358221220620634f9da4a260a6aac8c397edd67f1801f4d96a93cfc35e0edef05a623f48364736f6c634300080a0033
Deployed Bytecode
0x60806040526004361061039b5760003560e01c806392136913116101dc578063bbc0c74211610102578063e884f260116100a0578063f2fde38b1161006f578063f2fde38b14610dad578063f637434214610dd6578063f8b45b0514610e01578063fe72b27a14610e2c576103a2565b8063e884f26014610d05578063e96b10c414610d30578063f11a24d314610d59578063f275f64b14610d84576103a2565b8063c8c8ebe4116100dc578063c8c8ebe414610c47578063d85ba06314610c72578063dd62ed3e14610c9d578063e2f4560514610cda576103a2565b8063bbc0c74214610bc8578063c024666814610bf3578063c876d0b914610c1c576103a2565b80639fccce321161017a578063a81718b511610149578063a81718b514610afc578063a9059cbb14610b25578063aacebbe314610b62578063b62496f514610b8b576103a2565b80639fccce3214610a3e578063a0d82dc514610a69578063a457c2d714610a94578063a4c82a0014610ad1576103a2565b806395d89b41116101b657806395d89b41146109945780639a7a23d6146109bf5780639c3b4fdc146109e85780639ec22c0e14610a13576103a2565b80639213691314610915578063924de9b714610940578063932641dd14610969576103a2565b8063313ce567116102c157806370a082311161025f57806375f0a8741161022e57806375f0a874146108695780637bce5a04146108945780638da5cb5b146108bf5780638ea5220f146108ea576103a2565b806370a08231146107c3578063715018a614610800578063730c1888146108175780637571336a14610840576103a2565b80634a62bb651161029b5780634a62bb65146107055780634fbee193146107305780636a486a8e1461076d5780636ddd171314610798576103a2565b8063313ce56714610672578063395093511461069d57806349bd5a5e146106da576103a2565b8063184c16c51161033957806323b872dd1161030857806323b872dd146105b457806327c8f835146105f15780632c3e486c1461061c5780632e82f1a014610647576103a2565b8063184c16c514610508578063199ffc72146105335780631a8145bb1461055e5780631f3fed8f14610589576103a2565b806310d5de531161037557806310d5de531461044c5780631694505e1461048957806318160ddd146104b45780631816467f146104df576103a2565b806306fdde03146103a7578063070c01b1146103d2578063095ea7b31461040f576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610e69565b6040516103c9919061430c565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190614369565b610efb565b60405161040691906143b1565b60405180910390f35b34801561041b57600080fd5b506104366004803603810190610431919061442a565b611050565b60405161044391906143b1565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e919061446a565b61106e565b60405161048091906143b1565b60405180910390f35b34801561049557600080fd5b5061049e61108d565b6040516104ab91906144f6565b60405180910390f35b3480156104c057600080fd5b506104c96110b1565b6040516104d69190614520565b60405180910390f35b3480156104eb57600080fd5b506105066004803603810190610501919061446a565b6110bb565b005b34801561051457600080fd5b5061051d6111f7565b60405161052a9190614520565b60405180910390f35b34801561053f57600080fd5b506105486111fd565b6040516105559190614520565b60405180910390f35b34801561056a57600080fd5b50610573611203565b6040516105809190614520565b60405180910390f35b34801561059557600080fd5b5061059e611209565b6040516105ab9190614520565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d6919061453b565b61120f565b6040516105e891906143b1565b60405180910390f35b3480156105fd57600080fd5b50610606611307565b604051610613919061459d565b60405180910390f35b34801561062857600080fd5b5061063161130d565b60405161063e9190614520565b60405180910390f35b34801561065357600080fd5b5061065c611313565b60405161066991906143b1565b60405180910390f35b34801561067e57600080fd5b50610687611326565b60405161069491906145d4565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf919061442a565b61132f565b6040516106d191906143b1565b60405180910390f35b3480156106e657600080fd5b506106ef6113db565b6040516106fc919061459d565b60405180910390f35b34801561071157600080fd5b5061071a6113ff565b60405161072791906143b1565b60405180910390f35b34801561073c57600080fd5b506107576004803603810190610752919061446a565b611412565b60405161076491906143b1565b60405180910390f35b34801561077957600080fd5b50610782611468565b60405161078f9190614520565b60405180910390f35b3480156107a457600080fd5b506107ad61146e565b6040516107ba91906143b1565b60405180910390f35b3480156107cf57600080fd5b506107ea60048036038101906107e5919061446a565b611481565b6040516107f79190614520565b60405180910390f35b34801561080c57600080fd5b506108156114c9565b005b34801561082357600080fd5b5061083e6004803603810190610839919061461b565b611551565b005b34801561084c57600080fd5b506108676004803603810190610862919061466e565b611691565b005b34801561087557600080fd5b5061087e611768565b60405161088b919061459d565b60405180910390f35b3480156108a057600080fd5b506108a961178e565b6040516108b69190614520565b60405180910390f35b3480156108cb57600080fd5b506108d4611794565b6040516108e1919061459d565b60405180910390f35b3480156108f657600080fd5b506108ff6117be565b60405161090c919061459d565b60405180910390f35b34801561092157600080fd5b5061092a6117e4565b6040516109379190614520565b60405180910390f35b34801561094c57600080fd5b50610967600480360381019061096291906146ae565b6117ea565b005b34801561097557600080fd5b5061097e611883565b60405161098b91906143b1565b60405180910390f35b3480156109a057600080fd5b506109a9611923565b6040516109b6919061430c565b60405180910390f35b3480156109cb57600080fd5b506109e660048036038101906109e1919061466e565b6119b5565b005b3480156109f457600080fd5b506109fd611ace565b604051610a0a9190614520565b60405180910390f35b348015610a1f57600080fd5b50610a28611ad4565b604051610a359190614520565b60405180910390f35b348015610a4a57600080fd5b50610a53611ada565b604051610a609190614520565b60405180910390f35b348015610a7557600080fd5b50610a7e611ae0565b604051610a8b9190614520565b60405180910390f35b348015610aa057600080fd5b50610abb6004803603810190610ab6919061442a565b611ae6565b604051610ac891906143b1565b60405180910390f35b348015610add57600080fd5b50610ae6611bd1565b604051610af39190614520565b60405180910390f35b348015610b0857600080fd5b50610b236004803603810190610b1e91906146db565b611bd7565b005b348015610b3157600080fd5b50610b4c6004803603810190610b47919061442a565b611d77565b604051610b5991906143b1565b60405180910390f35b348015610b6e57600080fd5b50610b896004803603810190610b84919061446a565b611d95565b005b348015610b9757600080fd5b50610bb26004803603810190610bad919061446a565b611ed1565b604051610bbf91906143b1565b60405180910390f35b348015610bd457600080fd5b50610bdd611ef1565b604051610bea91906143b1565b60405180910390f35b348015610bff57600080fd5b50610c1a6004803603810190610c15919061466e565b611f04565b005b348015610c2857600080fd5b50610c31612029565b604051610c3e91906143b1565b60405180910390f35b348015610c5357600080fd5b50610c5c61203c565b604051610c699190614520565b60405180910390f35b348015610c7e57600080fd5b50610c87612042565b604051610c949190614520565b60405180910390f35b348015610ca957600080fd5b50610cc46004803603810190610cbf919061471b565b612048565b604051610cd19190614520565b60405180910390f35b348015610ce657600080fd5b50610cef6120cf565b604051610cfc9190614520565b60405180910390f35b348015610d1157600080fd5b50610d1a6120d5565b604051610d2791906143b1565b60405180910390f35b348015610d3c57600080fd5b50610d576004803603810190610d52919061475b565b612175565b005b348015610d6557600080fd5b50610d6e612269565b604051610d7b9190614520565b60405180910390f35b348015610d9057600080fd5b50610dab6004803603810190610da691906146ae565b61226f565b005b348015610db957600080fd5b50610dd46004803603810190610dcf919061446a565b612332565b005b348015610de257600080fd5b50610deb61242a565b604051610df89190614520565b60405180910390f35b348015610e0d57600080fd5b50610e16612430565b604051610e239190614520565b60405180910390f35b348015610e3857600080fd5b50610e536004803603810190610e4e9190614369565b612436565b604051610e6091906143b1565b60405180910390f35b606060038054610e7890614817565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea490614817565b8015610ef15780601f10610ec657610100808354040283529160200191610ef1565b820191906000526020600020905b815481529060010190602001808311610ed457829003601f168201915b5050505050905090565b6000610f0561270e565b73ffffffffffffffffffffffffffffffffffffffff16610f23611794565b73ffffffffffffffffffffffffffffffffffffffff1614610f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7090614895565b60405180910390fd5b620186a06001610f876110b1565b610f9191906148e4565b610f9b919061496d565b821015610fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd490614a10565b60405180910390fd5b6103e86005610fea6110b1565b610ff491906148e4565b610ffe919061496d565b821115611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103790614aa2565b60405180910390fd5b8160098190555060019050919050565b600061106461105d61270e565b8484612716565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6110c361270e565b73ffffffffffffffffffffffffffffffffffffffff166110e1611794565b73ffffffffffffffffffffffffffffffffffffffff1614611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e90614895565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b600061121c8484846128e1565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061126761270e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112de90614b34565b60405180910390fd5b6112fb856112f361270e565b858403612716565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60006113d161133c61270e565b84846001600061134a61270e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113cc9190614b54565b612716565b6001905092915050565b7f000000000000000000000000676776e93d4bb009bc46b99477568d2130cbc62481565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114d161270e565b73ffffffffffffffffffffffffffffffffffffffff166114ef611794565b73ffffffffffffffffffffffffffffffffffffffff1614611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c90614895565b60405180910390fd5b61154f6000613679565b565b61155961270e565b73ffffffffffffffffffffffffffffffffffffffff16611577611794565b73ffffffffffffffffffffffffffffffffffffffff16146115cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c490614895565b60405180910390fd5b610258831015611612576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160990614c1c565b60405180910390fd5b6103e88211158015611625575060008210155b611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165b90614cae565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b61169961270e565b73ffffffffffffffffffffffffffffffffffffffff166116b7611794565b73ffffffffffffffffffffffffffffffffffffffff161461170d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170490614895565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b6117f261270e565b73ffffffffffffffffffffffffffffffffffffffff16611810611794565b73ffffffffffffffffffffffffffffffffffffffff1614611866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185d90614895565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b600061188d61270e565b73ffffffffffffffffffffffffffffffffffffffff166118ab611794565b73ffffffffffffffffffffffffffffffffffffffff1614611901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f890614895565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b60606004805461193290614817565b80601f016020809104026020016040519081016040528092919081815260200182805461195e90614817565b80156119ab5780601f10611980576101008083540402835291602001916119ab565b820191906000526020600020905b81548152906001019060200180831161198e57829003601f168201915b5050505050905090565b6119bd61270e565b73ffffffffffffffffffffffffffffffffffffffff166119db611794565b73ffffffffffffffffffffffffffffffffffffffff1614611a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2890614895565b60405180910390fd5b7f000000000000000000000000676776e93d4bb009bc46b99477568d2130cbc62473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab790614d40565b60405180910390fd5b611aca828261373f565b5050565b60175481565b60105481565b601e5481565b601b5481565b60008060016000611af561270e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba990614dd2565b60405180910390fd5b611bc6611bbd61270e565b85858403612716565b600191505092915050565b600e5481565b611bdf61270e565b73ffffffffffffffffffffffffffffffffffffffff16611bfd611794565b73ffffffffffffffffffffffffffffffffffffffff1614611c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4a90614895565b60405180910390fd5b670de0b6b3a76400006103e86001611c696110b1565b611c7391906148e4565b611c7d919061496d565b611c87919061496d565b821015611cc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc090614e64565b60405180910390fd5b670de0b6b3a764000082611cdd91906148e4565b600881905550670de0b6b3a76400006103e86005611cf96110b1565b611d0391906148e4565b611d0d919061496d565b611d17919061496d565b811015611d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5090614ef6565b60405180910390fd5b670de0b6b3a764000081611d6d91906148e4565b600a819055505050565b6000611d8b611d8461270e565b84846128e1565b6001905092915050565b611d9d61270e565b73ffffffffffffffffffffffffffffffffffffffff16611dbb611794565b73ffffffffffffffffffffffffffffffffffffffff1614611e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0890614895565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611f0c61270e565b73ffffffffffffffffffffffffffffffffffffffff16611f2a611794565b73ffffffffffffffffffffffffffffffffffffffff1614611f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7790614895565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161201d91906143b1565b60405180910390a25050565b601360009054906101000a900460ff1681565b60085481565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006120df61270e565b73ffffffffffffffffffffffffffffffffffffffff166120fd611794565b73ffffffffffffffffffffffffffffffffffffffff1614612153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a90614895565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b61217d61270e565b73ffffffffffffffffffffffffffffffffffffffff1661219b611794565b73ffffffffffffffffffffffffffffffffffffffff16146121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e890614895565b60405180910390fd5b8560158190555084601681905550836017819055506017546016546015546122199190614b54565b6122239190614b54565b6014819055508260198190555081601a8190555080601b819055506017546016546015546122519190614b54565b61225b9190614b54565b601881905550505050505050565b60165481565b61227761270e565b73ffffffffffffffffffffffffffffffffffffffff16612295611794565b73ffffffffffffffffffffffffffffffffffffffff16146122eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e290614895565b60405180910390fd5b801561232f576001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e819055505b50565b61233a61270e565b73ffffffffffffffffffffffffffffffffffffffff16612358611794565b73ffffffffffffffffffffffffffffffffffffffff16146123ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a590614895565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561241e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241590614f88565b60405180910390fd5b61242781613679565b50565b601a5481565b600a5481565b600061244061270e565b73ffffffffffffffffffffffffffffffffffffffff1661245e611794565b73ffffffffffffffffffffffffffffffffffffffff16146124b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ab90614895565b60405180910390fd5b600f546010546124c49190614b54565b4211612505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fc90614ff4565b60405180910390fd5b6103e882111561254a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254190615086565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000676776e93d4bb009bc46b99477568d2130cbc6246040518263ffffffff1660e01b81526004016125ac919061459d565b602060405180830381865afa1580156125c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ed91906150bb565b9050600061261861271061260a86856137e090919063ffffffff16565b6137f690919063ffffffff16565b90506000811115612651576126507f000000000000000000000000676776e93d4bb009bc46b99477568d2130cbc62461dead8361380c565b5b60007f000000000000000000000000676776e93d4bb009bc46b99477568d2130cbc62490508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156126be57600080fd5b505af11580156126d2573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277d9061515a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ed906151ec565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128d49190614520565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612951576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129489061527e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b890615310565b60405180910390fd5b60008114156129db576129d68383600061380c565b613674565b601160009054906101000a900460ff161561309e576129f8611794565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a665750612a36611794565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a9f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ad9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612af25750600560149054906101000a900460ff16155b1561309d57601160019054906101000a900460ff16612bec57601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bac5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be29061537c565b60405180910390fd5b5b601360009054906101000a900460ff1615612db457612c09611794565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612c9057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ce857507f000000000000000000000000676776e93d4bb009bc46b99477568d2130cbc62473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612db35743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6590615434565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e575750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612efe57600854811115612ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e98906154c6565b60405180910390fd5b600a54612ead83611481565b82612eb89190614b54565b1115612ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef090615532565b60405180910390fd5b61309c565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fa15750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ff057600854811115612feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe2906155c4565b60405180910390fd5b61309b565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661309a57600a5461304d83611481565b826130589190614b54565b1115613099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309090615532565b60405180910390fd5b5b5b5b5b5b60006130a930611481565b9050600060095482101590508080156130ce5750601160029054906101000a900460ff165b80156130e75750600560149054906101000a900460ff16155b801561313d5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131935750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131e95750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561322d576001600560146101000a81548160ff021916908315150217905550613211613a8d565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156132935750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156132ab5750600c60009054906101000a900460ff165b80156132c65750600d54600e546132c29190614b54565b4210155b801561331c5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561332b57613329613d74565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133e15750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133eb57600090505b6000811561366457602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561344e57506000601854115b1561351b5761347b606461346d601854886137e090919063ffffffff16565b6137f690919063ffffffff16565b9050601854601a548261348e91906148e4565b613498919061496d565b601d60008282546134a99190614b54565b92505081905550601854601b54826134c191906148e4565b6134cb919061496d565b601e60008282546134dc9190614b54565b92505081905550601854601954826134f491906148e4565b6134fe919061496d565b601c600082825461350f9190614b54565b92505081905550613640565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561357657506000601454115b1561363f576135a36064613595601454886137e090919063ffffffff16565b6137f690919063ffffffff16565b9050601454601654826135b691906148e4565b6135c0919061496d565b601d60008282546135d19190614b54565b92505081905550601454601754826135e991906148e4565b6135f3919061496d565b601e60008282546136049190614b54565b925050819055506014546015548261361c91906148e4565b613626919061496d565b601c60008282546136379190614b54565b925050819055505b5b60008111156136555761365487308361380c565b5b808561366191906155e4565b94505b61366f87878761380c565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081836137ee91906148e4565b905092915050565b60008183613804919061496d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561387c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138739061527e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138e390615310565b60405180910390fd5b6138f7838383613f3a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561397d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139749061568a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a109190614b54565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a749190614520565b60405180910390a3613a87848484613f3f565b50505050565b6000613a9830611481565b90506000601e54601c54601d54613aaf9190614b54565b613ab99190614b54565b9050600080831480613acb5750600082145b15613ad857505050613d72565b6014600954613ae791906148e4565b831115613b00576014600954613afd91906148e4565b92505b6000600283601d5486613b1391906148e4565b613b1d919061496d565b613b27919061496d565b90506000613b3e8286613f4490919063ffffffff16565b90506000479050613b4e82613f5a565b6000613b638247613f4490919063ffffffff16565b90506000613b8e87613b80601c54856137e090919063ffffffff16565b6137f690919063ffffffff16565b90506000613bb988613bab601e54866137e090919063ffffffff16565b6137f690919063ffffffff16565b90506000818385613bca91906155e4565b613bd491906155e4565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613c34906156db565b60006040518083038185875af1925050503d8060008114613c71576040519150601f19603f3d011682016040523d82523d6000602084013e613c76565b606091505b505080985050600087118015613c8c5750600081115b15613cd957613c9b8782614197565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d54604051613cd0939291906156f0565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613d1f906156db565b60006040518083038185875af1925050503d8060008114613d5c576040519150601f19603f3d011682016040523d82523d6000602084013e613d61565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000676776e93d4bb009bc46b99477568d2130cbc6246040518263ffffffff1660e01b8152600401613dd8919061459d565b602060405180830381865afa158015613df5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e1991906150bb565b90506000613e46612710613e38600b54856137e090919063ffffffff16565b6137f690919063ffffffff16565b90506000811115613e7f57613e7e7f000000000000000000000000676776e93d4bb009bc46b99477568d2130cbc62461dead8361380c565b5b60007f000000000000000000000000676776e93d4bb009bc46b99477568d2130cbc62490508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613eec57600080fd5b505af1158015613f00573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b60008183613f5291906155e4565b905092915050565b6000600267ffffffffffffffff811115613f7757613f76615727565b5b604051908082528060200260200182016040528015613fa55781602001602082028036833780820191505090505b5090503081600081518110613fbd57613fbc615756565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614062573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614086919061579a565b8160018151811061409a57614099615756565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506140ff307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612716565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016141619594939291906158c0565b600060405180830381600087803b15801561417b57600080fd5b505af115801561418f573d6000803e3d6000fd5b505050505050565b6141c2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612716565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016142299695949392919061591a565b60606040518083038185885af1158015614247573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061426c919061597b565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156142ad578082015181840152602081019050614292565b838111156142bc576000848401525b50505050565b6000601f19601f8301169050919050565b60006142de82614273565b6142e8818561427e565b93506142f881856020860161428f565b614301816142c2565b840191505092915050565b6000602082019050818103600083015261432681846142d3565b905092915050565b600080fd5b6000819050919050565b61434681614333565b811461435157600080fd5b50565b6000813590506143638161433d565b92915050565b60006020828403121561437f5761437e61432e565b5b600061438d84828501614354565b91505092915050565b60008115159050919050565b6143ab81614396565b82525050565b60006020820190506143c660008301846143a2565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143f7826143cc565b9050919050565b614407816143ec565b811461441257600080fd5b50565b600081359050614424816143fe565b92915050565b600080604083850312156144415761444061432e565b5b600061444f85828601614415565b925050602061446085828601614354565b9150509250929050565b6000602082840312156144805761447f61432e565b5b600061448e84828501614415565b91505092915050565b6000819050919050565b60006144bc6144b76144b2846143cc565b614497565b6143cc565b9050919050565b60006144ce826144a1565b9050919050565b60006144e0826144c3565b9050919050565b6144f0816144d5565b82525050565b600060208201905061450b60008301846144e7565b92915050565b61451a81614333565b82525050565b60006020820190506145356000830184614511565b92915050565b6000806000606084860312156145545761455361432e565b5b600061456286828701614415565b935050602061457386828701614415565b925050604061458486828701614354565b9150509250925092565b614597816143ec565b82525050565b60006020820190506145b2600083018461458e565b92915050565b600060ff82169050919050565b6145ce816145b8565b82525050565b60006020820190506145e960008301846145c5565b92915050565b6145f881614396565b811461460357600080fd5b50565b600081359050614615816145ef565b92915050565b6000806000606084860312156146345761463361432e565b5b600061464286828701614354565b935050602061465386828701614354565b925050604061466486828701614606565b9150509250925092565b600080604083850312156146855761468461432e565b5b600061469385828601614415565b92505060206146a485828601614606565b9150509250929050565b6000602082840312156146c4576146c361432e565b5b60006146d284828501614606565b91505092915050565b600080604083850312156146f2576146f161432e565b5b600061470085828601614354565b925050602061471185828601614354565b9150509250929050565b600080604083850312156147325761473161432e565b5b600061474085828601614415565b925050602061475185828601614415565b9150509250929050565b60008060008060008060c087890312156147785761477761432e565b5b600061478689828a01614354565b965050602061479789828a01614354565b95505060406147a889828a01614354565b94505060606147b989828a01614354565b93505060806147ca89828a01614354565b92505060a06147db89828a01614354565b9150509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061482f57607f821691505b60208210811415614843576148426147e8565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061487f60208361427e565b915061488a82614849565b602082019050919050565b600060208201905081810360008301526148ae81614872565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148ef82614333565b91506148fa83614333565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614933576149326148b5565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061497882614333565b915061498383614333565b9250826149935761499261493e565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006149fa60358361427e565b9150614a058261499e565b604082019050919050565b60006020820190508181036000830152614a29816149ed565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614a8c60348361427e565b9150614a9782614a30565b604082019050919050565b60006020820190508181036000830152614abb81614a7f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614b1e60288361427e565b9150614b2982614ac2565b604082019050919050565b60006020820190508181036000830152614b4d81614b11565b9050919050565b6000614b5f82614333565b9150614b6a83614333565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b9f57614b9e6148b5565b5b828201905092915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614c0660338361427e565b9150614c1182614baa565b604082019050919050565b60006020820190508181036000830152614c3581614bf9565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614c9860308361427e565b9150614ca382614c3c565b604082019050919050565b60006020820190508181036000830152614cc781614c8b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614d2a60398361427e565b9150614d3582614cce565b604082019050919050565b60006020820190508181036000830152614d5981614d1d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614dbc60258361427e565b9150614dc782614d60565b604082019050919050565b60006020820190508181036000830152614deb81614daf565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614e4e602f8361427e565b9150614e5982614df2565b604082019050919050565b60006020820190508181036000830152614e7d81614e41565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614ee060248361427e565b9150614eeb82614e84565b604082019050919050565b60006020820190508181036000830152614f0f81614ed3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614f7260268361427e565b9150614f7d82614f16565b604082019050919050565b60006020820190508181036000830152614fa181614f65565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614fde60208361427e565b9150614fe982614fa8565b602082019050919050565b6000602082019050818103600083015261500d81614fd1565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000615070602a8361427e565b915061507b82615014565b604082019050919050565b6000602082019050818103600083015261509f81615063565b9050919050565b6000815190506150b58161433d565b92915050565b6000602082840312156150d1576150d061432e565b5b60006150df848285016150a6565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061514460248361427e565b915061514f826150e8565b604082019050919050565b6000602082019050818103600083015261517381615137565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006151d660228361427e565b91506151e18261517a565b604082019050919050565b60006020820190508181036000830152615205816151c9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061526860258361427e565b91506152738261520c565b604082019050919050565b600060208201905081810360008301526152978161525b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006152fa60238361427e565b91506153058261529e565b604082019050919050565b60006020820190508181036000830152615329816152ed565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061536660168361427e565b915061537182615330565b602082019050919050565b6000602082019050818103600083015261539581615359565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061541e60498361427e565b91506154298261539c565b606082019050919050565b6000602082019050818103600083015261544d81615411565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006154b060358361427e565b91506154bb82615454565b604082019050919050565b600060208201905081810360008301526154df816154a3565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061551c60138361427e565b9150615527826154e6565b602082019050919050565b6000602082019050818103600083015261554b8161550f565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006155ae60368361427e565b91506155b982615552565b604082019050919050565b600060208201905081810360008301526155dd816155a1565b9050919050565b60006155ef82614333565b91506155fa83614333565b92508282101561560d5761560c6148b5565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061567460268361427e565b915061567f82615618565b604082019050919050565b600060208201905081810360008301526156a381615667565b9050919050565b600081905092915050565b50565b60006156c56000836156aa565b91506156d0826156b5565b600082019050919050565b60006156e6826156b8565b9150819050919050565b60006060820190506157056000830186614511565b6157126020830185614511565b61571f6040830184614511565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615794816143fe565b92915050565b6000602082840312156157b0576157af61432e565b5b60006157be84828501615785565b91505092915050565b6000819050919050565b60006157ec6157e76157e2846157c7565b614497565b614333565b9050919050565b6157fc816157d1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615837816143ec565b82525050565b6000615849838361582e565b60208301905092915050565b6000602082019050919050565b600061586d82615802565b615877818561580d565b93506158828361581e565b8060005b838110156158b357815161589a888261583d565b97506158a583615855565b925050600181019050615886565b5085935050505092915050565b600060a0820190506158d56000830188614511565b6158e260208301876157f3565b81810360408301526158f48186615862565b9050615903606083018561458e565b6159106080830184614511565b9695505050505050565b600060c08201905061592f600083018961458e565b61593c6020830188614511565b61594960408301876157f3565b61595660608301866157f3565b615963608083018561458e565b61597060a0830184614511565b979650505050505050565b6000806000606084860312156159945761599361432e565b5b60006159a2868287016150a6565b93505060206159b3868287016150a6565b92505060406159c4868287016150a6565b915050925092509256fea2646970667358221220620634f9da4a260a6aac8c397edd67f1801f4d96a93cfc35e0edef05a623f48364736f6c634300080a0033
Deployed Bytecode Sourcemap
32806:19247:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9634:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38425:491;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11801:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34431:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32880:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10754:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41381:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33445:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33260:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34215:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34175;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12452:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32983:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33355:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33316:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10596:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13353:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32938:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33543:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41546:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34030:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33623:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10925:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2869:103;;;;;;;;;;;;;:::i;:::-;;49635:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39429:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33075:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33923;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2218:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33112:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34065:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39692:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38039:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9853:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40634:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33997:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33499:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34255:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34141:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14071:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33407:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38924:491;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11265:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41142:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34652:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33583:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40444:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33841:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33145:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33889:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11503:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33187:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38220:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39800:609;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33960:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37773:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3127:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34103:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33227:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50994:1056;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9634:100;9688:13;9721:5;9714:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9634:100;:::o;38425:491::-;38527:4;2449:12;:10;:12::i;:::-;2438:23;;:7;:5;:7::i;:::-;:23;;;2430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38606:6:::1;38601:1;38585:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38584:28;;;;:::i;:::-;38571:9;:41;;38549:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;38761:4;38756:1;38740:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38739:26;;;;:::i;:::-;38726:9;:39;;38704:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;38877:9;38856:18;:30;;;;38904:4;38897:11;;38425:491:::0;;;:::o;11801:169::-;11884:4;11901:39;11910:12;:10;:12::i;:::-;11924:7;11933:6;11901:8;:39::i;:::-;11958:4;11951:11;;11801:169;;;;:::o;34431:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;32880:51::-;;;:::o;10754:108::-;10815:7;10842:12;;10835:19;;10754:108;:::o;41381:157::-;2449:12;:10;:12::i;:::-;2438:23;;:7;:5;:7::i;:::-;:23;;;2430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41488:9:::1;;;;;;;;;;;41460:38;;41477:9;41460:38;;;;;;;;;;;;41521:9;41509;;:21;;;;;;;;;;;;;;;;;;41381:157:::0;:::o;33445:47::-;;;;:::o;33260:36::-;;;;:::o;34215:33::-;;;;:::o;34175:::-;;;;:::o;12452:492::-;12592:4;12609:36;12619:6;12627:9;12638:6;12609:9;:36::i;:::-;12658:24;12685:11;:19;12697:6;12685:19;;;;;;;;;;;;;;;:33;12705:12;:10;:12::i;:::-;12685:33;;;;;;;;;;;;;;;;12658:60;;12757:6;12737:16;:26;;12729:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12844:57;12853:6;12861:12;:10;:12::i;:::-;12894:6;12875:16;:25;12844:8;:57::i;:::-;12932:4;12925:11;;;12452:492;;;;;:::o;32983:53::-;33029:6;32983:53;:::o;33355:45::-;;;;:::o;33316:32::-;;;;;;;;;;;;;:::o;10596:93::-;10654:5;10679:2;10672:9;;10596:93;:::o;13353:215::-;13441:4;13458:80;13467:12;:10;:12::i;:::-;13481:7;13527:10;13490:11;:25;13502:12;:10;:12::i;:::-;13490:25;;;;;;;;;;;;;;;:34;13516:7;13490:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13458:8;:80::i;:::-;13556:4;13549:11;;13353:215;;;;:::o;32938:38::-;;;:::o;33543:33::-;;;;;;;;;;;;;:::o;41546:126::-;41612:4;41636:19;:28;41656:7;41636:28;;;;;;;;;;;;;;;;;;;;;;;;;41629:35;;41546:126;;;:::o;34030:28::-;;;;:::o;33623:31::-;;;;;;;;;;;;;:::o;10925:127::-;10999:7;11026:9;:18;11036:7;11026:18;;;;;;;;;;;;;;;;11019:25;;10925:127;;;:::o;2869:103::-;2449:12;:10;:12::i;:::-;2438:23;;:7;:5;:7::i;:::-;:23;;;2430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2934:30:::1;2961:1;2934:18;:30::i;:::-;2869:103::o:0;49635:555::-;2449:12;:10;:12::i;:::-;2438:23;;:7;:5;:7::i;:::-;:23;;;2430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49837:3:::1;49814:19;:26;;49792:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;49964:4;49952:8;:16;;:33;;;;;49984:1;49972:8;:13;;49952:33;49930:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;50090:19;50072:15;:37;;;;50139:8;50120:16;:27;;;;50174:8;50158:13;;:24;;;;;;;;;;;;;;;;;;49635:555:::0;;;:::o;39429:167::-;2449:12;:10;:12::i;:::-;2438:23;;:7;:5;:7::i;:::-;:23;;;2430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39584:4:::1;39542:31;:39;39574:6;39542:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39429:167:::0;;:::o;33075:30::-;;;;;;;;;;;;;:::o;33923:::-;;;;:::o;2218:87::-;2264:7;2291:6;;;;;;;;;;;2284:13;;2218:87;:::o;33112:24::-;;;;;;;;;;;;;:::o;34065:31::-;;;;:::o;39692:100::-;2449:12;:10;:12::i;:::-;2438:23;;:7;:5;:7::i;:::-;:23;;;2430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39777:7:::1;39763:11;;:21;;;;;;;;;;;;;;;;;;39692:100:::0;:::o;38039:120::-;38090:4;2449:12;:10;:12::i;:::-;2438:23;;:7;:5;:7::i;:::-;:23;;;2430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38124:5:::1;38107:14;;:22;;;;;;;;;;;;;;;;;;38147:4;38140:11;;38039:120:::0;:::o;9853:104::-;9909:13;9942:7;9935:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9853:104;:::o;40634:304::-;2449:12;:10;:12::i;:::-;2438:23;;:7;:5;:7::i;:::-;:23;;;2430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40778:13:::1;40770:21;;:4;:21;;;;40748:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;40889:41;40918:4;40924:5;40889:28;:41::i;:::-;40634:304:::0;;:::o;33997:24::-;;;;:::o;33499:35::-;;;;:::o;34255:27::-;;;;:::o;34141:25::-;;;;:::o;14071:413::-;14164:4;14181:24;14208:11;:25;14220:12;:10;:12::i;:::-;14208:25;;;;;;;;;;;;;;;:34;14234:7;14208:34;;;;;;;;;;;;;;;;14181:61;;14281:15;14261:16;:35;;14253:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14374:67;14383:12;:10;:12::i;:::-;14397:7;14425:15;14406:16;:34;14374:8;:67::i;:::-;14472:4;14465:11;;;14071:413;;;;:::o;33407:29::-;;;;:::o;38924:491::-;2449:12;:10;:12::i;:::-;2438:23;;:7;:5;:7::i;:::-;:23;;;2430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39079:4:::1;39071;39066:1;39050:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39049:26;;;;:::i;:::-;39048:35;;;;:::i;:::-;39036:8;:47;;39014:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;39204:6;39192:8;:19;;;;:::i;:::-;39169:20;:42;;;;39293:4;39285;39280:1;39264:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39263:26;;;;:::i;:::-;39262:35;;;;:::i;:::-;39246:12;:51;;39224:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;39400:6;39384:12;:23;;;;:::i;:::-;39372:9;:35;;;;38924:491:::0;;:::o;11265:175::-;11351:4;11368:42;11378:12;:10;:12::i;:::-;11392:9;11403:6;11368:9;:42::i;:::-;11428:4;11421:11;;11265:175;;;;:::o;41142:231::-;2449:12;:10;:12::i;:::-;2438:23;;:7;:5;:7::i;:::-;:23;;;2430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41302:15:::1;;;;;;;;;;;41259:59;;41282:18;41259:59;;;;;;;;;;;;41347:18;41329:15;;:36;;;;;;;;;;;;;;;;;;41142:231:::0;:::o;34652:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;33583:33::-;;;;;;;;;;;;;:::o;40444:182::-;2449:12;:10;:12::i;:::-;2438:23;;:7;:5;:7::i;:::-;:23;;;2430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40560:8:::1;40529:19;:28;40549:7;40529:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;40600:7;40584:34;;;40609:8;40584:34;;;;;;:::i;:::-;;;;;;;;40444:182:::0;;:::o;33841:39::-;;;;;;;;;;;;;:::o;33145:35::-;;;;:::o;33889:27::-;;;;:::o;11503:151::-;11592:7;11619:11;:18;11631:5;11619:18;;;;;;;;;;;;;;;:27;11638:7;11619:27;;;;;;;;;;;;;;;;11612:34;;11503:151;;;;:::o;33187:33::-;;;;:::o;38220:135::-;38280:4;2449:12;:10;:12::i;:::-;2438:23;;:7;:5;:7::i;:::-;:23;;;2430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38320:5:::1;38297:20;;:28;;;;;;;;;;;;;;;;;;38343:4;38336:11;;38220:135:::0;:::o;39800:609::-;2449:12;:10;:12::i;:::-;2438:23;;:7;:5;:7::i;:::-;:23;;;2430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40014:16:::1;39996:15;:34;;;;40059:16;40041:15;:34;;;;40098:10;40086:9;:22;;;;40170:9;;40152:15;;40134;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;40119:12;:60;;;;40221:17;40202:16;:36;;;;40268:17;40249:16;:36;;;;40309:11;40296:10;:24;;;;40383:9;;40365:15;;40347;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;40331:13;:61;;;;39800:609:::0;;;;;;:::o;33960:30::-;;;;:::o;37773:214::-;2449:12;:10;:12::i;:::-;2438:23;;:7;:5;:7::i;:::-;:23;;;2430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37845:7:::1;37842:128;;;37880:4;37864:13;;:20;;;;;;;;;;;;;;;;;;37909:4;37895:11;;:18;;;;;;;;;;;;;;;;;;37941:15;37924:14;:32;;;;37842:128;37773:214:::0;:::o;3127:201::-;2449:12;:10;:12::i;:::-;2438:23;;:7;:5;:7::i;:::-;:23;;;2430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3236:1:::1;3216:22;;:8;:22;;;;3208:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3292:28;3311:8;3292:18;:28::i;:::-;3127:201:::0;:::o;34103:31::-;;;;:::o;33227:24::-;;;;:::o;50994:1056::-;51105:4;2449:12;:10;:12::i;:::-;2438:23;;:7;:5;:7::i;:::-;:23;;;2430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51190:19:::1;;51167:20;;:42;;;;:::i;:::-;51149:15;:60;51127:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;51299:4;51288:7;:15;;51280:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;51384:15;51361:20;:38;;;;51454:28;51485:4;:14;;;51500:13;51485:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51454:60;;51564:20;51587:44;51625:5;51587:33;51612:7;51587:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;51564:67;;51751:1;51736:12;:16;51732:110;;;51769:61;51785:13;51808:6;51817:12;51769:15;:61::i;:::-;51732:110;51917:19;51954:13;51917:51;;51979:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;52006:14;;;;;;;;;;52038:4;52031:11;;;;;50994:1056:::0;;;:::o;891:98::-;944:7;971:10;964:17;;891:98;:::o;17755:380::-;17908:1;17891:19;;:5;:19;;;;17883:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17989:1;17970:21;;:7;:21;;;;17962:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18073:6;18043:11;:18;18055:5;18043:18;;;;;;;;;;;;;;;:27;18062:7;18043:27;;;;;;;;;;;;;;;:36;;;;18111:7;18095:32;;18104:5;18095:32;;;18120:6;18095:32;;;;;;:::i;:::-;;;;;;;;17755:380;;;:::o;41730:5011::-;41878:1;41862:18;;:4;:18;;;;41854:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41955:1;41941:16;;:2;:16;;;;41933:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42024:1;42014:6;:11;42010:93;;;42042:28;42058:4;42064:2;42068:1;42042:15;:28::i;:::-;42085:7;;42010:93;42119:14;;;;;;;;;;;42115:2487;;;42180:7;:5;:7::i;:::-;42172:15;;:4;:15;;;;:49;;;;;42214:7;:5;:7::i;:::-;42208:13;;:2;:13;;;;42172:49;:86;;;;;42256:1;42242:16;;:2;:16;;;;42172:86;:128;;;;;42293:6;42279:21;;:2;:21;;;;42172:128;:158;;;;;42322:8;;;;;;;;;;;42321:9;42172:158;42150:2441;;;42370:13;;;;;;;;;;;42365:223;;42442:19;:25;42462:4;42442:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;42471:19;:23;42491:2;42471:23;;;;;;;;;;;;;;;;;;;;;;;;;42442:52;42408:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;42365:223;42744:20;;;;;;;;;;;42740:641;;;42825:7;:5;:7::i;:::-;42819:13;;:2;:13;;;;:72;;;;;42875:15;42861:30;;:2;:30;;;;42819:72;:129;;;;;42934:13;42920:28;;:2;:28;;;;42819:129;42789:573;;;43112:12;43037:28;:39;43066:9;43037:39;;;;;;;;;;;;;;;;:87;42999:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;43326:12;43284:28;:39;43313:9;43284:39;;;;;;;;;;;;;;;:54;;;;42789:573;42740:641;43455:25;:31;43481:4;43455:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;43512:31;:35;43544:2;43512:35;;;;;;;;;;;;;;;;;;;;;;;;;43511:36;43455:92;43429:1147;;;43634:20;;43624:6;:30;;43590:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;43842:9;;43825:13;43835:2;43825:9;:13::i;:::-;43816:6;:22;;;;:::i;:::-;:35;;43782:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43429:1147;;;44020:25;:29;44046:2;44020:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;44075:31;:37;44107:4;44075:37;;;;;;;;;;;;;;;;;;;;;;;;;44074:38;44020:92;43994:582;;;44199:20;;44189:6;:30;;44155:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;43994:582;;;44356:31;:35;44388:2;44356:35;;;;;;;;;;;;;;;;;;;;;;;;;44351:225;;44476:9;;44459:13;44469:2;44459:9;:13::i;:::-;44450:6;:22;;;;:::i;:::-;:35;;44416:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;44351:225;43994:582;43429:1147;42150:2441;42115:2487;44614:28;44645:24;44663:4;44645:9;:24::i;:::-;44614:55;;44682:12;44721:18;;44697:20;:42;;44682:57;;44770:7;:35;;;;;44794:11;;;;;;;;;;;44770:35;:61;;;;;44823:8;;;;;;;;;;;44822:9;44770:61;:110;;;;;44849:25;:31;44875:4;44849:31;;;;;;;;;;;;;;;;;;;;;;;;;44848:32;44770:110;:153;;;;;44898:19;:25;44918:4;44898:25;;;;;;;;;;;;;;;;;;;;;;;;;44897:26;44770:153;:194;;;;;44941:19;:23;44961:2;44941:23;;;;;;;;;;;;;;;;;;;;;;;;;44940:24;44770:194;44752:326;;;45002:4;44991:8;;:15;;;;;;;;;;;;;;;;;;45023:10;:8;:10::i;:::-;45061:5;45050:8;;:16;;;;;;;;;;;;;;;;;;44752:326;45109:8;;;;;;;;;;;45108:9;:55;;;;;45134:25;:29;45160:2;45134:29;;;;;;;;;;;;;;;;;;;;;;;;;45108:55;:85;;;;;45180:13;;;;;;;;;;;45108:85;:153;;;;;45246:15;;45229:14;;:32;;;;:::i;:::-;45210:15;:51;;45108:153;:196;;;;;45279:19;:25;45299:4;45279:25;;;;;;;;;;;;;;;;;;;;;;;;;45278:26;45108:196;45090:282;;;45331:29;:27;:29::i;:::-;;45090:282;45384:12;45400:8;;;;;;;;;;;45399:9;45384:24;;45510:19;:25;45530:4;45510:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;45539:19;:23;45559:2;45539:23;;;;;;;;;;;;;;;;;;;;;;;;;45510:52;45506:100;;;45589:5;45579:15;;45506:100;45618:12;45723:7;45719:969;;;45775:25;:29;45801:2;45775:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;45824:1;45808:13;;:17;45775:50;45771:768;;;45853:34;45883:3;45853:25;45864:13;;45853:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;45846:41;;45956:13;;45936:16;;45929:4;:23;;;;:::i;:::-;45928:41;;;;:::i;:::-;45906:18;;:63;;;;;;;:::i;:::-;;;;;;;;46026:13;;46012:10;;46005:4;:17;;;;:::i;:::-;46004:35;;;;:::i;:::-;45988:12;;:51;;;;;;;:::i;:::-;;;;;;;;46108:13;;46088:16;;46081:4;:23;;;;:::i;:::-;46080:41;;;;:::i;:::-;46058:18;;:63;;;;;;;:::i;:::-;;;;;;;;45771:768;;;46183:25;:31;46209:4;46183:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;46233:1;46218:12;;:16;46183:51;46179:360;;;46262:33;46291:3;46262:24;46273:12;;46262:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;46255:40;;46363:12;;46344:15;;46337:4;:22;;;;:::i;:::-;46336:39;;;;:::i;:::-;46314:18;;:61;;;;;;;:::i;:::-;;;;;;;;46431:12;;46418:9;;46411:4;:16;;;;:::i;:::-;46410:33;;;;:::i;:::-;46394:12;;:49;;;;;;;:::i;:::-;;;;;;;;46511:12;;46492:15;;46485:4;:22;;;;:::i;:::-;46484:39;;;;:::i;:::-;46462:18;;:61;;;;;;;:::i;:::-;;;;;;;;46179:360;45771:768;46566:1;46559:4;:8;46555:91;;;46588:42;46604:4;46618;46625;46588:15;:42::i;:::-;46555:91;46672:4;46662:14;;;;;:::i;:::-;;;45719:969;46700:33;46716:4;46722:2;46726:6;46700:15;:33::i;:::-;41843:4898;;;;41730:5011;;;;:::o;3488:191::-;3562:16;3581:6;;;;;;;;;;;3562:25;;3607:8;3598:6;;:17;;;;;;;;;;;;;;;;;;3662:8;3631:40;;3652:8;3631:40;;;;;;;;;;;;3551:128;3488:191;:::o;40946:188::-;41063:5;41029:25;:31;41055:4;41029:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;41120:5;41086:40;;41114:4;41086:40;;;;;;;;;;;;40946:188;;:::o;23208:98::-;23266:7;23297:1;23293;:5;;;;:::i;:::-;23286:12;;23208:98;;;;:::o;23607:::-;23665:7;23696:1;23692;:5;;;;:::i;:::-;23685:12;;23607:98;;;;:::o;14974:733::-;15132:1;15114:20;;:6;:20;;;;15106:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15216:1;15195:23;;:9;:23;;;;15187:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15271:47;15292:6;15300:9;15311:6;15271:20;:47::i;:::-;15331:21;15355:9;:17;15365:6;15355:17;;;;;;;;;;;;;;;;15331:41;;15408:6;15391:13;:23;;15383:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;15529:6;15513:13;:22;15493:9;:17;15503:6;15493:17;;;;;;;;;;;;;;;:42;;;;15581:6;15557:9;:20;15567:9;15557:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;15622:9;15605:35;;15614:6;15605:35;;;15633:6;15605:35;;;;;;:::i;:::-;;;;;;;;15653:46;15673:6;15681:9;15692:6;15653:19;:46::i;:::-;15095:612;14974:733;;;:::o;47871:1756::-;47910:23;47936:24;47954:4;47936:9;:24::i;:::-;47910:50;;47971:25;48067:12;;48033:18;;47999;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;47971:108;;48090:12;48138:1;48119:15;:20;:46;;;;48164:1;48143:17;:22;48119:46;48115:85;;;48182:7;;;;;48115:85;48255:2;48234:18;;:23;;;;:::i;:::-;48216:15;:41;48212:115;;;48313:2;48292:18;;:23;;;;:::i;:::-;48274:41;;48212:115;48388:23;48501:1;48468:17;48433:18;;48415:15;:36;;;;:::i;:::-;48414:71;;;;:::i;:::-;:88;;;;:::i;:::-;48388:114;;48513:26;48542:36;48562:15;48542;:19;;:36;;;;:::i;:::-;48513:65;;48591:25;48619:21;48591:49;;48653:36;48670:18;48653:16;:36::i;:::-;48702:18;48723:44;48749:17;48723:21;:25;;:44;;;;:::i;:::-;48702:65;;48780:23;48806:81;48859:17;48806:34;48821:18;;48806:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;48780:107;;48898:17;48918:51;48951:17;48918:28;48933:12;;48918:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;48898:71;;48982:23;49039:9;49021:15;49008:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;48982:66;;49082:1;49061:18;:22;;;;49115:1;49094:18;:22;;;;49142:1;49127:12;:16;;;;49178:9;;;;;;;;;;;49170:23;;49201:9;49170:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49156:59;;;;;49250:1;49232:15;:19;:42;;;;;49273:1;49255:15;:19;49232:42;49228:278;;;49291:46;49304:15;49321;49291:12;:46::i;:::-;49357:137;49390:18;49427:15;49461:18;;49357:137;;;;;;;;:::i;:::-;;;;;;;;49228:278;49540:15;;;;;;;;;;;49532:29;;49583:21;49532:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49518:101;;;;;47899:1728;;;;;;;;;;47871:1756;:::o;50198:788::-;50255:4;50289:15;50272:14;:32;;;;50359:28;50390:4;:14;;;50405:13;50390:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50359:60;;50469:20;50492:77;50553:5;50492:42;50517:16;;50492:20;:24;;:42;;;;:::i;:::-;:46;;:77;;;;:::i;:::-;50469:100;;50689:1;50674:12;:16;50670:110;;;50707:61;50723:13;50746:6;50755:12;50707:15;:61::i;:::-;50670:110;50855:19;50892:13;50855:51;;50917:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50944:12;;;;;;;;;;50974:4;50967:11;;;;;50198:788;:::o;18735:125::-;;;;:::o;19464:124::-;;;;:::o;22851:98::-;22909:7;22940:1;22936;:5;;;;:::i;:::-;22929:12;;22851:98;;;;:::o;46749:589::-;46875:21;46913:1;46899:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46875:40;;46944:4;46926;46931:1;46926:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;46970:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46960:4;46965:1;46960:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;47005:62;47022:4;47037:15;47055:11;47005:8;:62::i;:::-;47106:15;:66;;;47187:11;47213:1;47257:4;47284;47304:15;47106:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46804:534;46749:589;:::o;47346:517::-;47494:62;47511:4;47526:15;47544:11;47494:8;:62::i;:::-;47599:15;:31;;;47638:9;47671:4;47691:11;47717:1;47760;33029:6;47829:15;47599:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;47346:517;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:77;1761:7;1790:5;1779:16;;1724:77;;;:::o;1807:122::-;1880:24;1898:5;1880:24;:::i;:::-;1873:5;1870:35;1860:63;;1919:1;1916;1909:12;1860:63;1807:122;:::o;1935:139::-;1981:5;2019:6;2006:20;1997:29;;2035:33;2062:5;2035:33;:::i;:::-;1935:139;;;;:::o;2080:329::-;2139:6;2188:2;2176:9;2167:7;2163:23;2159:32;2156:119;;;2194:79;;:::i;:::-;2156:119;2314:1;2339:53;2384:7;2375:6;2364:9;2360:22;2339:53;:::i;:::-;2329:63;;2285:117;2080:329;;;;:::o;2415:90::-;2449:7;2492:5;2485:13;2478:21;2467:32;;2415:90;;;:::o;2511:109::-;2592:21;2607:5;2592:21;:::i;:::-;2587:3;2580:34;2511:109;;:::o;2626:210::-;2713:4;2751:2;2740:9;2736:18;2728:26;;2764:65;2826:1;2815:9;2811:17;2802:6;2764:65;:::i;:::-;2626:210;;;;:::o;2842:126::-;2879:7;2919:42;2912:5;2908:54;2897:65;;2842:126;;;:::o;2974:96::-;3011:7;3040:24;3058:5;3040:24;:::i;:::-;3029:35;;2974:96;;;:::o;3076:122::-;3149:24;3167:5;3149:24;:::i;:::-;3142:5;3139:35;3129:63;;3188:1;3185;3178:12;3129:63;3076:122;:::o;3204:139::-;3250:5;3288:6;3275:20;3266:29;;3304:33;3331:5;3304:33;:::i;:::-;3204:139;;;;:::o;3349:474::-;3417:6;3425;3474:2;3462:9;3453:7;3449:23;3445:32;3442:119;;;3480:79;;:::i;:::-;3442:119;3600:1;3625:53;3670:7;3661:6;3650:9;3646:22;3625:53;:::i;:::-;3615:63;;3571:117;3727:2;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3698:118;3349:474;;;;;:::o;3829:329::-;3888:6;3937:2;3925:9;3916:7;3912:23;3908:32;3905:119;;;3943:79;;:::i;:::-;3905:119;4063:1;4088:53;4133:7;4124:6;4113:9;4109:22;4088:53;:::i;:::-;4078:63;;4034:117;3829:329;;;;:::o;4164:60::-;4192:3;4213:5;4206:12;;4164:60;;;:::o;4230:142::-;4280:9;4313:53;4331:34;4340:24;4358:5;4340:24;:::i;:::-;4331:34;:::i;:::-;4313:53;:::i;:::-;4300:66;;4230:142;;;:::o;4378:126::-;4428:9;4461:37;4492:5;4461:37;:::i;:::-;4448:50;;4378:126;;;:::o;4510:153::-;4587:9;4620:37;4651:5;4620:37;:::i;:::-;4607:50;;4510:153;;;:::o;4669:185::-;4783:64;4841:5;4783:64;:::i;:::-;4778:3;4771:77;4669:185;;:::o;4860:276::-;4980:4;5018:2;5007:9;5003:18;4995:26;;5031:98;5126:1;5115:9;5111:17;5102:6;5031:98;:::i;:::-;4860:276;;;;:::o;5142:118::-;5229:24;5247:5;5229:24;:::i;:::-;5224:3;5217:37;5142:118;;:::o;5266:222::-;5359:4;5397:2;5386:9;5382:18;5374:26;;5410:71;5478:1;5467:9;5463:17;5454:6;5410:71;:::i;:::-;5266:222;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:613::-;7236:6;7244;7252;7301:2;7289:9;7280:7;7276:23;7272:32;7269:119;;;7307:79;;:::i;:::-;7269:119;7427:1;7452:53;7497:7;7488:6;7477:9;7473:22;7452:53;:::i;:::-;7442:63;;7398:117;7554:2;7580:53;7625:7;7616:6;7605:9;7601:22;7580:53;:::i;:::-;7570:63;;7525:118;7682:2;7708:50;7750:7;7741:6;7730:9;7726:22;7708:50;:::i;:::-;7698:60;;7653:115;7162:613;;;;;:::o;7781:468::-;7846:6;7854;7903:2;7891:9;7882:7;7878:23;7874:32;7871:119;;;7909:79;;:::i;:::-;7871:119;8029:1;8054:53;8099:7;8090:6;8079:9;8075:22;8054:53;:::i;:::-;8044:63;;8000:117;8156:2;8182:50;8224:7;8215:6;8204:9;8200:22;8182:50;:::i;:::-;8172:60;;8127:115;7781:468;;;;;:::o;8255:323::-;8311:6;8360:2;8348:9;8339:7;8335:23;8331:32;8328:119;;;8366:79;;:::i;:::-;8328:119;8486:1;8511:50;8553:7;8544:6;8533:9;8529:22;8511:50;:::i;:::-;8501:60;;8457:114;8255:323;;;;:::o;8584:474::-;8652:6;8660;8709:2;8697:9;8688:7;8684:23;8680:32;8677:119;;;8715:79;;:::i;:::-;8677:119;8835:1;8860:53;8905:7;8896:6;8885:9;8881:22;8860:53;:::i;:::-;8850:63;;8806:117;8962:2;8988:53;9033:7;9024:6;9013:9;9009:22;8988:53;:::i;:::-;8978:63;;8933:118;8584:474;;;;;:::o;9064:::-;9132:6;9140;9189:2;9177:9;9168:7;9164:23;9160:32;9157:119;;;9195:79;;:::i;:::-;9157:119;9315:1;9340:53;9385:7;9376:6;9365:9;9361:22;9340:53;:::i;:::-;9330:63;;9286:117;9442:2;9468:53;9513:7;9504:6;9493:9;9489:22;9468:53;:::i;:::-;9458:63;;9413:118;9064:474;;;;;:::o;9544:1057::-;9648:6;9656;9664;9672;9680;9688;9737:3;9725:9;9716:7;9712:23;9708:33;9705:120;;;9744:79;;:::i;:::-;9705:120;9864:1;9889:53;9934:7;9925:6;9914:9;9910:22;9889:53;:::i;:::-;9879:63;;9835:117;9991:2;10017:53;10062:7;10053:6;10042:9;10038:22;10017:53;:::i;:::-;10007:63;;9962:118;10119:2;10145:53;10190:7;10181:6;10170:9;10166:22;10145:53;:::i;:::-;10135:63;;10090:118;10247:2;10273:53;10318:7;10309:6;10298:9;10294:22;10273:53;:::i;:::-;10263:63;;10218:118;10375:3;10402:53;10447:7;10438:6;10427:9;10423:22;10402:53;:::i;:::-;10392:63;;10346:119;10504:3;10531:53;10576:7;10567:6;10556:9;10552:22;10531:53;:::i;:::-;10521:63;;10475:119;9544:1057;;;;;;;;:::o;10607:180::-;10655:77;10652:1;10645:88;10752:4;10749:1;10742:15;10776:4;10773:1;10766:15;10793:320;10837:6;10874:1;10868:4;10864:12;10854:22;;10921:1;10915:4;10911:12;10942:18;10932:81;;10998:4;10990:6;10986:17;10976:27;;10932:81;11060:2;11052:6;11049:14;11029:18;11026:38;11023:84;;;11079:18;;:::i;:::-;11023:84;10844:269;10793:320;;;:::o;11119:182::-;11259:34;11255:1;11247:6;11243:14;11236:58;11119:182;:::o;11307:366::-;11449:3;11470:67;11534:2;11529:3;11470:67;:::i;:::-;11463:74;;11546:93;11635:3;11546:93;:::i;:::-;11664:2;11659:3;11655:12;11648:19;;11307:366;;;:::o;11679:419::-;11845:4;11883:2;11872:9;11868:18;11860:26;;11932:9;11926:4;11922:20;11918:1;11907:9;11903:17;11896:47;11960:131;12086:4;11960:131;:::i;:::-;11952:139;;11679:419;;;:::o;12104:180::-;12152:77;12149:1;12142:88;12249:4;12246:1;12239:15;12273:4;12270:1;12263:15;12290:348;12330:7;12353:20;12371:1;12353:20;:::i;:::-;12348:25;;12387:20;12405:1;12387:20;:::i;:::-;12382:25;;12575:1;12507:66;12503:74;12500:1;12497:81;12492:1;12485:9;12478:17;12474:105;12471:131;;;12582:18;;:::i;:::-;12471:131;12630:1;12627;12623:9;12612:20;;12290:348;;;;:::o;12644:180::-;12692:77;12689:1;12682:88;12789:4;12786:1;12779:15;12813:4;12810:1;12803:15;12830:185;12870:1;12887:20;12905:1;12887:20;:::i;:::-;12882:25;;12921:20;12939:1;12921:20;:::i;:::-;12916:25;;12960:1;12950:35;;12965:18;;:::i;:::-;12950:35;13007:1;13004;13000:9;12995:14;;12830:185;;;;:::o;13021:240::-;13161:34;13157:1;13149:6;13145:14;13138:58;13230:23;13225:2;13217:6;13213:15;13206:48;13021:240;:::o;13267:366::-;13409:3;13430:67;13494:2;13489:3;13430:67;:::i;:::-;13423:74;;13506:93;13595:3;13506:93;:::i;:::-;13624:2;13619:3;13615:12;13608:19;;13267:366;;;:::o;13639:419::-;13805:4;13843:2;13832:9;13828:18;13820:26;;13892:9;13886:4;13882:20;13878:1;13867:9;13863:17;13856:47;13920:131;14046:4;13920:131;:::i;:::-;13912:139;;13639:419;;;:::o;14064:239::-;14204:34;14200:1;14192:6;14188:14;14181:58;14273:22;14268:2;14260:6;14256:15;14249:47;14064:239;:::o;14309:366::-;14451:3;14472:67;14536:2;14531:3;14472:67;:::i;:::-;14465:74;;14548:93;14637:3;14548:93;:::i;:::-;14666:2;14661:3;14657:12;14650:19;;14309:366;;;:::o;14681:419::-;14847:4;14885:2;14874:9;14870:18;14862:26;;14934:9;14928:4;14924:20;14920:1;14909:9;14905:17;14898:47;14962:131;15088:4;14962:131;:::i;:::-;14954:139;;14681:419;;;:::o;15106:227::-;15246:34;15242:1;15234:6;15230:14;15223:58;15315:10;15310:2;15302:6;15298:15;15291:35;15106:227;:::o;15339:366::-;15481:3;15502:67;15566:2;15561:3;15502:67;:::i;:::-;15495:74;;15578:93;15667:3;15578:93;:::i;:::-;15696:2;15691:3;15687:12;15680:19;;15339:366;;;:::o;15711:419::-;15877:4;15915:2;15904:9;15900:18;15892:26;;15964:9;15958:4;15954:20;15950:1;15939:9;15935:17;15928:47;15992:131;16118:4;15992:131;:::i;:::-;15984:139;;15711:419;;;:::o;16136:305::-;16176:3;16195:20;16213:1;16195:20;:::i;:::-;16190:25;;16229:20;16247:1;16229:20;:::i;:::-;16224:25;;16383:1;16315:66;16311:74;16308:1;16305:81;16302:107;;;16389:18;;:::i;:::-;16302:107;16433:1;16430;16426:9;16419:16;;16136:305;;;;:::o;16447:238::-;16587:34;16583:1;16575:6;16571:14;16564:58;16656:21;16651:2;16643:6;16639:15;16632:46;16447:238;:::o;16691:366::-;16833:3;16854:67;16918:2;16913:3;16854:67;:::i;:::-;16847:74;;16930:93;17019:3;16930:93;:::i;:::-;17048:2;17043:3;17039:12;17032:19;;16691:366;;;:::o;17063:419::-;17229:4;17267:2;17256:9;17252:18;17244:26;;17316:9;17310:4;17306:20;17302:1;17291:9;17287:17;17280:47;17344:131;17470:4;17344:131;:::i;:::-;17336:139;;17063:419;;;:::o;17488:235::-;17628:34;17624:1;17616:6;17612:14;17605:58;17697:18;17692:2;17684:6;17680:15;17673:43;17488:235;:::o;17729:366::-;17871:3;17892:67;17956:2;17951:3;17892:67;:::i;:::-;17885:74;;17968:93;18057:3;17968:93;:::i;:::-;18086:2;18081:3;18077:12;18070:19;;17729:366;;;:::o;18101:419::-;18267:4;18305:2;18294:9;18290:18;18282:26;;18354:9;18348:4;18344:20;18340:1;18329:9;18325:17;18318:47;18382:131;18508:4;18382:131;:::i;:::-;18374:139;;18101:419;;;:::o;18526:244::-;18666:34;18662:1;18654:6;18650:14;18643:58;18735:27;18730:2;18722:6;18718:15;18711:52;18526:244;:::o;18776:366::-;18918:3;18939:67;19003:2;18998:3;18939:67;:::i;:::-;18932:74;;19015:93;19104:3;19015:93;:::i;:::-;19133:2;19128:3;19124:12;19117:19;;18776:366;;;:::o;19148:419::-;19314:4;19352:2;19341:9;19337:18;19329:26;;19401:9;19395:4;19391:20;19387:1;19376:9;19372:17;19365:47;19429:131;19555:4;19429:131;:::i;:::-;19421:139;;19148:419;;;:::o;19573:224::-;19713:34;19709:1;19701:6;19697:14;19690:58;19782:7;19777:2;19769:6;19765:15;19758:32;19573:224;:::o;19803:366::-;19945:3;19966:67;20030:2;20025:3;19966:67;:::i;:::-;19959:74;;20042:93;20131:3;20042:93;:::i;:::-;20160:2;20155:3;20151:12;20144:19;;19803:366;;;:::o;20175:419::-;20341:4;20379:2;20368:9;20364:18;20356:26;;20428:9;20422:4;20418:20;20414:1;20403:9;20399:17;20392:47;20456:131;20582:4;20456:131;:::i;:::-;20448:139;;20175:419;;;:::o;20600:234::-;20740:34;20736:1;20728:6;20724:14;20717:58;20809:17;20804:2;20796:6;20792:15;20785:42;20600:234;:::o;20840:366::-;20982:3;21003:67;21067:2;21062:3;21003:67;:::i;:::-;20996:74;;21079:93;21168:3;21079:93;:::i;:::-;21197:2;21192:3;21188:12;21181:19;;20840:366;;;:::o;21212:419::-;21378:4;21416:2;21405:9;21401:18;21393:26;;21465:9;21459:4;21455:20;21451:1;21440:9;21436:17;21429:47;21493:131;21619:4;21493:131;:::i;:::-;21485:139;;21212:419;;;:::o;21637:223::-;21777:34;21773:1;21765:6;21761:14;21754:58;21846:6;21841:2;21833:6;21829:15;21822:31;21637:223;:::o;21866:366::-;22008:3;22029:67;22093:2;22088:3;22029:67;:::i;:::-;22022:74;;22105:93;22194:3;22105:93;:::i;:::-;22223:2;22218:3;22214:12;22207:19;;21866:366;;;:::o;22238:419::-;22404:4;22442:2;22431:9;22427:18;22419:26;;22491:9;22485:4;22481:20;22477:1;22466:9;22462:17;22455:47;22519:131;22645:4;22519:131;:::i;:::-;22511:139;;22238:419;;;:::o;22663:225::-;22803:34;22799:1;22791:6;22787:14;22780:58;22872:8;22867:2;22859:6;22855:15;22848:33;22663:225;:::o;22894:366::-;23036:3;23057:67;23121:2;23116:3;23057:67;:::i;:::-;23050:74;;23133:93;23222:3;23133:93;:::i;:::-;23251:2;23246:3;23242:12;23235:19;;22894:366;;;:::o;23266:419::-;23432:4;23470:2;23459:9;23455:18;23447:26;;23519:9;23513:4;23509:20;23505:1;23494:9;23490:17;23483:47;23547:131;23673:4;23547:131;:::i;:::-;23539:139;;23266:419;;;:::o;23691:182::-;23831:34;23827:1;23819:6;23815:14;23808:58;23691:182;:::o;23879:366::-;24021:3;24042:67;24106:2;24101:3;24042:67;:::i;:::-;24035:74;;24118:93;24207:3;24118:93;:::i;:::-;24236:2;24231:3;24227:12;24220:19;;23879:366;;;:::o;24251:419::-;24417:4;24455:2;24444:9;24440:18;24432:26;;24504:9;24498:4;24494:20;24490:1;24479:9;24475:17;24468:47;24532:131;24658:4;24532:131;:::i;:::-;24524:139;;24251:419;;;:::o;24676:229::-;24816:34;24812:1;24804:6;24800:14;24793:58;24885:12;24880:2;24872:6;24868:15;24861:37;24676:229;:::o;24911:366::-;25053:3;25074:67;25138:2;25133:3;25074:67;:::i;:::-;25067:74;;25150:93;25239:3;25150:93;:::i;:::-;25268:2;25263:3;25259:12;25252:19;;24911:366;;;:::o;25283:419::-;25449:4;25487:2;25476:9;25472:18;25464:26;;25536:9;25530:4;25526:20;25522:1;25511:9;25507:17;25500:47;25564:131;25690:4;25564:131;:::i;:::-;25556:139;;25283:419;;;:::o;25708:143::-;25765:5;25796:6;25790:13;25781:22;;25812:33;25839:5;25812:33;:::i;:::-;25708:143;;;;:::o;25857:351::-;25927:6;25976:2;25964:9;25955:7;25951:23;25947:32;25944:119;;;25982:79;;:::i;:::-;25944:119;26102:1;26127:64;26183:7;26174:6;26163:9;26159:22;26127:64;:::i;:::-;26117:74;;26073:128;25857:351;;;;:::o;26214:223::-;26354:34;26350:1;26342:6;26338:14;26331:58;26423:6;26418:2;26410:6;26406:15;26399:31;26214:223;:::o;26443:366::-;26585:3;26606:67;26670:2;26665:3;26606:67;:::i;:::-;26599:74;;26682:93;26771:3;26682:93;:::i;:::-;26800:2;26795:3;26791:12;26784:19;;26443:366;;;:::o;26815:419::-;26981:4;27019:2;27008:9;27004:18;26996:26;;27068:9;27062:4;27058:20;27054:1;27043:9;27039:17;27032:47;27096:131;27222:4;27096:131;:::i;:::-;27088:139;;26815:419;;;:::o;27240:221::-;27380:34;27376:1;27368:6;27364:14;27357:58;27449:4;27444:2;27436:6;27432:15;27425:29;27240:221;:::o;27467:366::-;27609:3;27630:67;27694:2;27689:3;27630:67;:::i;:::-;27623:74;;27706:93;27795:3;27706:93;:::i;:::-;27824:2;27819:3;27815:12;27808:19;;27467:366;;;:::o;27839:419::-;28005:4;28043:2;28032:9;28028:18;28020:26;;28092:9;28086:4;28082:20;28078:1;28067:9;28063:17;28056:47;28120:131;28246:4;28120:131;:::i;:::-;28112:139;;27839:419;;;:::o;28264:224::-;28404:34;28400:1;28392:6;28388:14;28381:58;28473:7;28468:2;28460:6;28456:15;28449:32;28264:224;:::o;28494:366::-;28636:3;28657:67;28721:2;28716:3;28657:67;:::i;:::-;28650:74;;28733:93;28822:3;28733:93;:::i;:::-;28851:2;28846:3;28842:12;28835:19;;28494:366;;;:::o;28866:419::-;29032:4;29070:2;29059:9;29055:18;29047:26;;29119:9;29113:4;29109:20;29105:1;29094:9;29090:17;29083:47;29147:131;29273:4;29147:131;:::i;:::-;29139:139;;28866:419;;;:::o;29291:222::-;29431:34;29427:1;29419:6;29415:14;29408:58;29500:5;29495:2;29487:6;29483:15;29476:30;29291:222;:::o;29519:366::-;29661:3;29682:67;29746:2;29741:3;29682:67;:::i;:::-;29675:74;;29758:93;29847:3;29758:93;:::i;:::-;29876:2;29871:3;29867:12;29860:19;;29519:366;;;:::o;29891:419::-;30057:4;30095:2;30084:9;30080:18;30072:26;;30144:9;30138:4;30134:20;30130:1;30119:9;30115:17;30108:47;30172:131;30298:4;30172:131;:::i;:::-;30164:139;;29891:419;;;:::o;30316:172::-;30456:24;30452:1;30444:6;30440:14;30433:48;30316:172;:::o;30494:366::-;30636:3;30657:67;30721:2;30716:3;30657:67;:::i;:::-;30650:74;;30733:93;30822:3;30733:93;:::i;:::-;30851:2;30846:3;30842:12;30835:19;;30494:366;;;:::o;30866:419::-;31032:4;31070:2;31059:9;31055:18;31047:26;;31119:9;31113:4;31109:20;31105:1;31094:9;31090:17;31083:47;31147:131;31273:4;31147:131;:::i;:::-;31139:139;;30866:419;;;:::o;31291:297::-;31431:34;31427:1;31419:6;31415:14;31408:58;31500:34;31495:2;31487:6;31483:15;31476:59;31569:11;31564:2;31556:6;31552:15;31545:36;31291:297;:::o;31594:366::-;31736:3;31757:67;31821:2;31816:3;31757:67;:::i;:::-;31750:74;;31833:93;31922:3;31833:93;:::i;:::-;31951:2;31946:3;31942:12;31935:19;;31594:366;;;:::o;31966:419::-;32132:4;32170:2;32159:9;32155:18;32147:26;;32219:9;32213:4;32209:20;32205:1;32194:9;32190:17;32183:47;32247:131;32373:4;32247:131;:::i;:::-;32239:139;;31966:419;;;:::o;32391:240::-;32531:34;32527:1;32519:6;32515:14;32508:58;32600:23;32595:2;32587:6;32583:15;32576:48;32391:240;:::o;32637:366::-;32779:3;32800:67;32864:2;32859:3;32800:67;:::i;:::-;32793:74;;32876:93;32965:3;32876:93;:::i;:::-;32994:2;32989:3;32985:12;32978:19;;32637:366;;;:::o;33009:419::-;33175:4;33213:2;33202:9;33198:18;33190:26;;33262:9;33256:4;33252:20;33248:1;33237:9;33233:17;33226:47;33290:131;33416:4;33290:131;:::i;:::-;33282:139;;33009:419;;;:::o;33434:169::-;33574:21;33570:1;33562:6;33558:14;33551:45;33434:169;:::o;33609:366::-;33751:3;33772:67;33836:2;33831:3;33772:67;:::i;:::-;33765:74;;33848:93;33937:3;33848:93;:::i;:::-;33966:2;33961:3;33957:12;33950:19;;33609:366;;;:::o;33981:419::-;34147:4;34185:2;34174:9;34170:18;34162:26;;34234:9;34228:4;34224:20;34220:1;34209:9;34205:17;34198:47;34262:131;34388:4;34262:131;:::i;:::-;34254:139;;33981:419;;;:::o;34406:241::-;34546:34;34542:1;34534:6;34530:14;34523:58;34615:24;34610:2;34602:6;34598:15;34591:49;34406:241;:::o;34653:366::-;34795:3;34816:67;34880:2;34875:3;34816:67;:::i;:::-;34809:74;;34892:93;34981:3;34892:93;:::i;:::-;35010:2;35005:3;35001:12;34994:19;;34653:366;;;:::o;35025:419::-;35191:4;35229:2;35218:9;35214:18;35206:26;;35278:9;35272:4;35268:20;35264:1;35253:9;35249:17;35242:47;35306:131;35432:4;35306:131;:::i;:::-;35298:139;;35025:419;;;:::o;35450:191::-;35490:4;35510:20;35528:1;35510:20;:::i;:::-;35505:25;;35544:20;35562:1;35544:20;:::i;:::-;35539:25;;35583:1;35580;35577:8;35574:34;;;35588:18;;:::i;:::-;35574:34;35633:1;35630;35626:9;35618:17;;35450:191;;;;:::o;35647:225::-;35787:34;35783:1;35775:6;35771:14;35764:58;35856:8;35851:2;35843:6;35839:15;35832:33;35647:225;:::o;35878:366::-;36020:3;36041:67;36105:2;36100:3;36041:67;:::i;:::-;36034:74;;36117:93;36206:3;36117:93;:::i;:::-;36235:2;36230:3;36226:12;36219:19;;35878:366;;;:::o;36250:419::-;36416:4;36454:2;36443:9;36439:18;36431:26;;36503:9;36497:4;36493:20;36489:1;36478:9;36474:17;36467:47;36531:131;36657:4;36531:131;:::i;:::-;36523:139;;36250:419;;;:::o;36675:147::-;36776:11;36813:3;36798:18;;36675:147;;;;:::o;36828:114::-;;:::o;36948:398::-;37107:3;37128:83;37209:1;37204:3;37128:83;:::i;:::-;37121:90;;37220:93;37309:3;37220:93;:::i;:::-;37338:1;37333:3;37329:11;37322:18;;36948:398;;;:::o;37352:379::-;37536:3;37558:147;37701:3;37558:147;:::i;:::-;37551:154;;37722:3;37715:10;;37352:379;;;:::o;37737:442::-;37886:4;37924:2;37913:9;37909:18;37901:26;;37937:71;38005:1;37994:9;37990:17;37981:6;37937:71;:::i;:::-;38018:72;38086:2;38075:9;38071:18;38062:6;38018:72;:::i;:::-;38100;38168:2;38157:9;38153:18;38144:6;38100:72;:::i;:::-;37737:442;;;;;;:::o;38185:180::-;38233:77;38230:1;38223:88;38330:4;38327:1;38320:15;38354:4;38351:1;38344:15;38371:180;38419:77;38416:1;38409:88;38516:4;38513:1;38506:15;38540:4;38537:1;38530:15;38557:143;38614:5;38645:6;38639:13;38630:22;;38661:33;38688:5;38661:33;:::i;:::-;38557:143;;;;:::o;38706:351::-;38776:6;38825:2;38813:9;38804:7;38800:23;38796:32;38793:119;;;38831:79;;:::i;:::-;38793:119;38951:1;38976:64;39032:7;39023:6;39012:9;39008:22;38976:64;:::i;:::-;38966:74;;38922:128;38706:351;;;;:::o;39063:85::-;39108:7;39137:5;39126:16;;39063:85;;;:::o;39154:158::-;39212:9;39245:61;39263:42;39272:32;39298:5;39272:32;:::i;:::-;39263:42;:::i;:::-;39245:61;:::i;:::-;39232:74;;39154:158;;;:::o;39318:147::-;39413:45;39452:5;39413:45;:::i;:::-;39408:3;39401:58;39318:147;;:::o;39471:114::-;39538:6;39572:5;39566:12;39556:22;;39471:114;;;:::o;39591:184::-;39690:11;39724:6;39719:3;39712:19;39764:4;39759:3;39755:14;39740:29;;39591:184;;;;:::o;39781:132::-;39848:4;39871:3;39863:11;;39901:4;39896:3;39892:14;39884:22;;39781:132;;;:::o;39919:108::-;39996:24;40014:5;39996:24;:::i;:::-;39991:3;39984:37;39919:108;;:::o;40033:179::-;40102:10;40123:46;40165:3;40157:6;40123:46;:::i;:::-;40201:4;40196:3;40192:14;40178:28;;40033:179;;;;:::o;40218:113::-;40288:4;40320;40315:3;40311:14;40303:22;;40218:113;;;:::o;40367:732::-;40486:3;40515:54;40563:5;40515:54;:::i;:::-;40585:86;40664:6;40659:3;40585:86;:::i;:::-;40578:93;;40695:56;40745:5;40695:56;:::i;:::-;40774:7;40805:1;40790:284;40815:6;40812:1;40809:13;40790:284;;;40891:6;40885:13;40918:63;40977:3;40962:13;40918:63;:::i;:::-;40911:70;;41004:60;41057:6;41004:60;:::i;:::-;40994:70;;40850:224;40837:1;40834;40830:9;40825:14;;40790:284;;;40794:14;41090:3;41083:10;;40491:608;;;40367:732;;;;:::o;41105:831::-;41368:4;41406:3;41395:9;41391:19;41383:27;;41420:71;41488:1;41477:9;41473:17;41464:6;41420:71;:::i;:::-;41501:80;41577:2;41566:9;41562:18;41553:6;41501:80;:::i;:::-;41628:9;41622:4;41618:20;41613:2;41602:9;41598:18;41591:48;41656:108;41759:4;41750:6;41656:108;:::i;:::-;41648:116;;41774:72;41842:2;41831:9;41827:18;41818:6;41774:72;:::i;:::-;41856:73;41924:3;41913:9;41909:19;41900:6;41856:73;:::i;:::-;41105:831;;;;;;;;:::o;41942:807::-;42191:4;42229:3;42218:9;42214:19;42206:27;;42243:71;42311:1;42300:9;42296:17;42287:6;42243:71;:::i;:::-;42324:72;42392:2;42381:9;42377:18;42368:6;42324:72;:::i;:::-;42406:80;42482:2;42471:9;42467:18;42458:6;42406:80;:::i;:::-;42496;42572:2;42561:9;42557:18;42548:6;42496:80;:::i;:::-;42586:73;42654:3;42643:9;42639:19;42630:6;42586:73;:::i;:::-;42669;42737:3;42726:9;42722:19;42713:6;42669:73;:::i;:::-;41942:807;;;;;;;;;:::o;42755:663::-;42843:6;42851;42859;42908:2;42896:9;42887:7;42883:23;42879:32;42876:119;;;42914:79;;:::i;:::-;42876:119;43034:1;43059:64;43115:7;43106:6;43095:9;43091:22;43059:64;:::i;:::-;43049:74;;43005:128;43172:2;43198:64;43254:7;43245:6;43234:9;43230:22;43198:64;:::i;:::-;43188:74;;43143:129;43311:2;43337:64;43393:7;43384:6;43373:9;43369:22;43337:64;:::i;:::-;43327:74;;43282:129;42755:663;;;;;:::o
Swarm Source
ipfs://620634f9da4a260a6aac8c397edd67f1801f4d96a93cfc35e0edef05a623f483
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.