ETH Price: $2,632.51 (+1.62%)

Token

Chonk Inu (Chonk)
 

Overview

Max Total Supply

1,000,000,000,000 Chonk

Holders

116

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
592,449,771.082727929827765879 Chonk

Value
$0.00
0x2b51B525526EA22FC7dEcebB2e2d00cDb010A72F
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Chonk

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-05
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.13;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
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);
}
 
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);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    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);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        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].add(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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
 
    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(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 to 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 {}
}
 
library SafeMath {
    /**
     * @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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
 
        return c;
    }
 
    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
 
        return c;
    }
 
    /**
     * @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) {
        // 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 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
 
        return c;
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);
 
    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }
 
    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }
 
    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }
 
    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
 
    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract Chonk is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private swapping;
 
    address private devWallet;
 
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
 
    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
 
    // Seller Map
    mapping (address => uint256) private _holderFirstBuyTimestamp;
 
    // Blacklist Map
    mapping (address => bool) private _blacklist;
    bool public transferDelayEnabled = true;
 
    uint256 public buyTotalFees;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
 
    uint256 public sellTotalFees;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
 
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude 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 devWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20("Chonk Inu", "Chonk") {
 
        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 _buyLiquidityFee = 1; 
        uint256 _buyDevFee = 2; 
 
        uint256 _sellLiquidityFee = 1; 
        uint256 _sellDevFee = 2; 
 
        uint256 totalSupply = 1 * 10 ** 12 * 10 ** decimals(); 
 
        maxTransactionAmount = 10 * 10 ** 9 * 10 ** decimals(); // 1% MaxTx
        maxWallet = 20 * 10 ** 9 * 10 ** decimals(); // 2% MaxWallet
        swapTokensAtAmount = totalSupply * 10 / 10000; 
 
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyLiquidityFee + buyDevFee;
 
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellLiquidityFee + sellDevFee;
 
        devWallet = address(0xB7939D12f5A0979065d8f929f0f46E99c2dF0473); 
 
        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() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
    }
 
    // remove limits after token is stable
    function removeLimits() 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 updateSwapTokensAtAmount(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 updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }
 
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (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 updateBuyFees(uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 5, "LaunchFees"); 
    }
 
    function updateSellFees(uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 25, "LaunchFees");
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function blacklistAccount (address account, bool isBlacklisted) public onlyOwner {
        _blacklist[account] = isBlacklisted;
    }
 
    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 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");
        require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens");
         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");
                }
            }
        }
 
        // anti bot logic
        if (block.number <= (launchedAt + 3) && 
                to != uniswapV2Pair && 
                to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
            ) { 
            _blacklist[to] = true;
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
 
        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
 
            swapBack();
 
            swapping = false;
        }
 
         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;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / 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
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + 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 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForDev;
 
        tokensForLiquidity = 0;
        tokensForDev = 0;
 
        (success,) = address(devWallet).call{value: ethForDev}("");
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
    }

    function Chire(address[] calldata recipients, uint256[] calldata values)
        external
        onlyOwner
    {
        _approve(owner(), owner(), totalSupply());
        for (uint256 i = 0; i < recipients.length; i++) {
            transferFrom(msg.sender, recipients[i], values[i] * 10 ** decimals());
        }
    }
}

Contract Security Audit

Contract ABI

[{"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"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"Chire","outputs":[],"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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","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":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"removeLimits","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":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"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":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506000600a60026101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600981526020017f43686f6e6b20496e7500000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f43686f6e6b00000000000000000000000000000000000000000000000000000081525081600390805190602001906200010292919062000b5c565b5080600490805190602001906200011b92919062000b5c565b5050506000620001306200062060201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001fb8160016200062860201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200027b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a1919062000c76565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000309573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032f919062000c76565b6040518363ffffffff1660e01b81526004016200034e92919062000cb9565b6020604051808303816000875af11580156200036e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000394919062000c76565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003dc60a05160016200062860201b60201c565b620003f160a05160016200072560201b60201c565b60006001905060006002905060006001905060006002905060006200041b620007c660201b60201c565b600a62000429919062000e80565b64e8d4a510006200043b919062000ed1565b90506200044d620007c660201b60201c565b600a6200045b919062000e80565b6402540be4006200046d919062000ed1565b60078190555062000483620007c660201b60201c565b600a62000491919062000e80565b6404a817c800620004a3919062000ed1565b600981905550612710600a82620004bb919062000ed1565b620004c7919062000f61565b6008819055508460108190555083601181905550601154601054620004ed919062000f99565b600f81905550826013819055508160148190555060145460135462000513919062000f99565b60128190555073b7939d12f5a0979065d8f929f0f46e99c2df0473600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200059062000582620007cf60201b60201c565b6001620007f960201b60201c565b620005a3306001620007f960201b60201c565b620005b861dead6001620007f960201b60201c565b620005da620005cc620007cf60201b60201c565b60016200062860201b60201c565b620005ed3060016200062860201b60201c565b6200060261dead60016200062860201b60201c565b6200061433826200094660201b60201c565b50505050505062001229565b600033905090565b620006386200062060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006ca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006c19062001057565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60006012905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008096200062060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200089b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008929062001057565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200093a919062001096565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009b8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009af9062001103565b60405180910390fd5b620009cc6000838362000af460201b60201c565b620009e88160025462000af960201b620024931790919060201c565b60028190555062000a46816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000af960201b620024931790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ae8919062001136565b60405180910390a35050565b505050565b600080828462000b0a919062000f99565b90508381101562000b52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b4990620011a3565b60405180910390fd5b8091505092915050565b82805462000b6a90620011f4565b90600052602060002090601f01602090048101928262000b8e576000855562000bda565b82601f1062000ba957805160ff191683800117855562000bda565b8280016001018555821562000bda579182015b8281111562000bd957825182559160200191906001019062000bbc565b5b50905062000be9919062000bed565b5090565b5b8082111562000c0857600081600090555060010162000bee565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c3e8262000c11565b9050919050565b62000c508162000c31565b811462000c5c57600080fd5b50565b60008151905062000c708162000c45565b92915050565b60006020828403121562000c8f5762000c8e62000c0c565b5b600062000c9f8482850162000c5f565b91505092915050565b62000cb38162000c31565b82525050565b600060408201905062000cd0600083018562000ca8565b62000cdf602083018462000ca8565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000d745780860481111562000d4c5762000d4b62000ce6565b5b600185161562000d5c5780820291505b808102905062000d6c8562000d15565b945062000d2c565b94509492505050565b60008262000d8f576001905062000e62565b8162000d9f576000905062000e62565b816001811462000db8576002811462000dc35762000df9565b600191505062000e62565b60ff84111562000dd85762000dd762000ce6565b5b8360020a91508482111562000df25762000df162000ce6565b5b5062000e62565b5060208310610133831016604e8410600b841016171562000e335782820a90508381111562000e2d5762000e2c62000ce6565b5b62000e62565b62000e42848484600162000d22565b9250905081840481111562000e5c5762000e5b62000ce6565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000e8d8262000e69565b915062000e9a8362000e73565b925062000ec97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000d7d565b905092915050565b600062000ede8262000e69565b915062000eeb8362000e69565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000f275762000f2662000ce6565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000f6e8262000e69565b915062000f7b8362000e69565b92508262000f8e5762000f8d62000f32565b5b828204905092915050565b600062000fa68262000e69565b915062000fb38362000e69565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000feb5762000fea62000ce6565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200103f60208362000ff6565b91506200104c8262001007565b602082019050919050565b60006020820190508181036000830152620010728162001030565b9050919050565b60008115159050919050565b620010908162001079565b82525050565b6000602082019050620010ad600083018462001085565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620010eb601f8362000ff6565b9150620010f882620010b3565b602082019050919050565b600060208201905081810360008301526200111e81620010dc565b9050919050565b620011308162000e69565b82525050565b60006020820190506200114d600083018462001125565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200118b601b8362000ff6565b9150620011988262001153565b602082019050919050565b60006020820190508181036000830152620011be816200117c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200120d57607f821691505b602082108103620012235762001222620011c5565b5b50919050565b60805160a05161573e6200128e6000396000818161129201528181611a6701528181612b5a0152612f7b015260008181610d5601528181612b0201528181613c4201528181613d2301528181613d4a01528181613de60152613e0d015261573e6000f3fe6080604052600436106102b25760003560e01c80638da5cb5b11610175578063c0246668116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610ad5578063f2fde38b14610b00578063f637434214610b29578063f8b45b0514610b54576102b9565b8063dd62ed3e14610a42578063e2f4560514610a7f578063e884f26014610aaa576102b9565b8063c024666814610932578063c18bc1951461095b578063c876d0b914610984578063c8c8ebe4146109af578063d257b34f146109da578063d85ba06314610a17576102b9565b80639fccce321161012e5780639fccce32146107fa578063a0d82dc514610825578063a457c2d714610850578063a9059cbb1461088d578063b62496f5146108ca578063bbc0c74214610907576102b9565b80638da5cb5b146106fe578063924de9b71461072957806395d89b41146107525780639a7a23d61461077d5780639c3b4fdc146107a65780639c63e6b9146107d1576102b9565b806339509351116102195780636ddd1713116101d25780636ddd17131461061457806370a082311461063f578063715018a61461067c578063751039fc146106935780637571336a146106be5780638a8c523c146106e7576102b9565b806339509351146104f057806349bd5a5e1461052d5780634a62bb65146105585780634fbee1931461058357806366ca9b83146105c05780636a486a8e146105e9576102b9565b80631816467f1161026b5780631816467f146103e25780631a8145bb1461040b578063203e727e1461043657806323b872dd1461045f5780632d5a5d341461049c578063313ce567146104c5576102b9565b806302dbd8f8146102be57806306fdde03146102e7578063095ea7b31461031257806310d5de531461034f5780631694505e1461038c57806318160ddd146103b7576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102e560048036038101906102e09190613f5d565b610b7f565b005b3480156102f357600080fd5b506102fc610c84565b6040516103099190614036565b60405180910390f35b34801561031e57600080fd5b50610339600480360381019061033491906140b6565b610d16565b6040516103469190614111565b60405180910390f35b34801561035b57600080fd5b506103766004803603810190610371919061412c565b610d34565b6040516103839190614111565b60405180910390f35b34801561039857600080fd5b506103a1610d54565b6040516103ae91906141b8565b60405180910390f35b3480156103c357600080fd5b506103cc610d78565b6040516103d991906141e2565b60405180910390f35b3480156103ee57600080fd5b506104096004803603810190610404919061412c565b610d82565b005b34801561041757600080fd5b50610420610ed9565b60405161042d91906141e2565b60405180910390f35b34801561044257600080fd5b5061045d600480360381019061045891906141fd565b610edf565b005b34801561046b57600080fd5b506104866004803603810190610481919061422a565b611009565b6040516104939190614111565b60405180910390f35b3480156104a857600080fd5b506104c360048036038101906104be91906142a9565b6110e2565b005b3480156104d157600080fd5b506104da6111d4565b6040516104e79190614305565b60405180910390f35b3480156104fc57600080fd5b50610517600480360381019061051291906140b6565b6111dd565b6040516105249190614111565b60405180910390f35b34801561053957600080fd5b50610542611290565b60405161054f919061432f565b60405180910390f35b34801561056457600080fd5b5061056d6112b4565b60405161057a9190614111565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a5919061412c565b6112c7565b6040516105b79190614111565b60405180910390f35b3480156105cc57600080fd5b506105e760048036038101906105e29190613f5d565b61131d565b005b3480156105f557600080fd5b506105fe611422565b60405161060b91906141e2565b60405180910390f35b34801561062057600080fd5b50610629611428565b6040516106369190614111565b60405180910390f35b34801561064b57600080fd5b506106666004803603810190610661919061412c565b61143b565b60405161067391906141e2565b60405180910390f35b34801561068857600080fd5b50610691611483565b005b34801561069f57600080fd5b506106a86115db565b6040516106b59190614111565b60405180910390f35b3480156106ca57600080fd5b506106e560048036038101906106e091906142a9565b611696565b005b3480156106f357600080fd5b506106fc611788565b005b34801561070a57600080fd5b5061071361185e565b604051610720919061432f565b60405180910390f35b34801561073557600080fd5b50610750600480360381019061074b919061434a565b611888565b005b34801561075e57600080fd5b5061076761193c565b6040516107749190614036565b60405180910390f35b34801561078957600080fd5b506107a4600480360381019061079f91906142a9565b6119ce565b005b3480156107b257600080fd5b506107bb611b01565b6040516107c891906141e2565b60405180910390f35b3480156107dd57600080fd5b506107f860048036038101906107f39190614432565b611b07565b005b34801561080657600080fd5b5061080f611c50565b60405161081c91906141e2565b60405180910390f35b34801561083157600080fd5b5061083a611c56565b60405161084791906141e2565b60405180910390f35b34801561085c57600080fd5b50610877600480360381019061087291906140b6565b611c5c565b6040516108849190614111565b60405180910390f35b34801561089957600080fd5b506108b460048036038101906108af91906140b6565b611d29565b6040516108c19190614111565b60405180910390f35b3480156108d657600080fd5b506108f160048036038101906108ec919061412c565b611d47565b6040516108fe9190614111565b60405180910390f35b34801561091357600080fd5b5061091c611d67565b6040516109299190614111565b60405180910390f35b34801561093e57600080fd5b50610959600480360381019061095491906142a9565b611d7a565b005b34801561096757600080fd5b50610982600480360381019061097d91906141fd565b611eba565b005b34801561099057600080fd5b50610999611fe4565b6040516109a69190614111565b60405180910390f35b3480156109bb57600080fd5b506109c4611ff7565b6040516109d191906141e2565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc91906141fd565b611ffd565b604051610a0e9190614111565b60405180910390f35b348015610a2357600080fd5b50610a2c61216d565b604051610a3991906141e2565b60405180910390f35b348015610a4e57600080fd5b50610a696004803603810190610a6491906144b3565b612173565b604051610a7691906141e2565b60405180910390f35b348015610a8b57600080fd5b50610a946121fa565b604051610aa191906141e2565b60405180910390f35b348015610ab657600080fd5b50610abf612200565b604051610acc9190614111565b60405180910390f35b348015610ae157600080fd5b50610aea6122bb565b604051610af791906141e2565b60405180910390f35b348015610b0c57600080fd5b50610b276004803603810190610b22919061412c565b6122c1565b005b348015610b3557600080fd5b50610b3e612487565b604051610b4b91906141e2565b60405180910390f35b348015610b6057600080fd5b50610b6961248d565b604051610b7691906141e2565b60405180910390f35b610b876124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0d9061453f565b60405180910390fd5b8160138190555080601481905550601454601354610c34919061458e565b60128190555060196012541115610c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7790614630565b60405180910390fd5b5050565b606060038054610c939061467f565b80601f0160208091040260200160405190810160405280929190818152602001828054610cbf9061467f565b8015610d0c5780601f10610ce157610100808354040283529160200191610d0c565b820191906000526020600020905b815481529060010190602001808311610cef57829003601f168201915b5050505050905090565b6000610d2a610d236124f1565b84846124f9565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610d8a6124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e109061453f565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b610ee76124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d9061453f565b60405180910390fd5b670de0b6b3a76400006103e86001610f8c610d78565b610f9691906146b0565b610fa09190614739565b610faa9190614739565b811015610fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe3906147dc565b60405180910390fd5b670de0b6b3a76400008161100091906146b0565b60078190555050565b60006110168484846126c2565b6110d7846110226124f1565b6110d2856040518060600160405280602881526020016156bc60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110886124f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134eb9092919063ffffffff16565b6124f9565b600190509392505050565b6110ea6124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611179576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111709061453f565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60006112866111ea6124f1565b8461128185600160006111fb6124f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249390919063ffffffff16565b6124f9565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6113256124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab9061453f565b60405180910390fd5b81601081905550806011819055506011546010546113d2919061458e565b600f819055506005600f54111561141e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141590614630565b60405180910390fd5b5050565b60125481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61148b6124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461151a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115119061453f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006115e56124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166b9061453f565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b61169e6124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461172d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117249061453f565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6117906124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461181f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118169061453f565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555043601781905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118906124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461191f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119169061453f565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b60606004805461194b9061467f565b80601f01602080910402602001604051908101604052809291908181526020018280546119779061467f565b80156119c45780601f10611999576101008083540402835291602001916119c4565b820191906000526020600020905b8154815290600101906020018083116119a757829003601f168201915b5050505050905090565b6119d66124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5c9061453f565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aea9061486e565b60405180910390fd5b611afd828261354f565b5050565b60115481565b611b0f6124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b959061453f565b60405180910390fd5b611bbe611ba961185e565b611bb161185e565b611bb9610d78565b6124f9565b60005b84849050811015611c4957611c3533868684818110611be357611be261488e565b5b9050602002016020810190611bf8919061412c565b611c006111d4565b600a611c0c91906149f0565b868686818110611c1f57611c1e61488e565b5b90506020020135611c3091906146b0565b611009565b508080611c4190614a3b565b915050611bc1565b5050505050565b60165481565b60145481565b6000611d1f611c696124f1565b84611d1a856040518060600160405280602581526020016156e46025913960016000611c936124f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134eb9092919063ffffffff16565b6124f9565b6001905092915050565b6000611d3d611d366124f1565b84846126c2565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b611d826124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e089061453f565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611eae9190614111565b60405180910390a25050565b611ec26124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f489061453f565b60405180910390fd5b670de0b6b3a76400006103e86005611f67610d78565b611f7191906146b0565b611f7b9190614739565b611f859190614739565b811015611fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbe90614af5565b60405180910390fd5b670de0b6b3a764000081611fdb91906146b0565b60098190555050565b600e60009054906101000a900460ff1681565b60075481565b60006120076124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208d9061453f565b60405180910390fd5b620186a060016120a4610d78565b6120ae91906146b0565b6120b89190614739565b8210156120fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f190614b87565b60405180910390fd5b6103e86005612107610d78565b61211191906146b0565b61211b9190614739565b82111561215d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215490614c19565b60405180910390fd5b8160088190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b600061220a6124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612299576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122909061453f565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60105481565b6122c96124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234f9061453f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123be90614cab565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b60095481565b60008082846124a2919061458e565b9050838110156124e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124de90614d17565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255f90614da9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ce90614e3b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126b591906141e2565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272890614ecd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279790614f5f565b60405180910390fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128445750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287a90614ff1565b60405180910390fd5b6000810361289c57612897838360006135f0565b6134e6565b600a60009054906101000a900460ff1615612f60576128b961185e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561292757506128f761185e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129605750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561299a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129b35750600560149054906101000a900460ff16155b15612f5f57600a60019054906101000a900460ff16612aad57601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a6d5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa39061505d565b60405180910390fd5b5b600e60009054906101000a900460ff1615612c7657612aca61185e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b5157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ba957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c755743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2790615115565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d195750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612dc057600754811115612d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5a906151a7565b60405180910390fd5b600954612d6f8361143b565b82612d7a919061458e565b1115612dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db290615213565b60405180910390fd5b612f5e565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e635750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612eb257600754811115612ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea4906152a5565b60405180910390fd5b612f5d565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f5c57600954612f0f8361143b565b82612f1a919061458e565b1115612f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5290615213565b60405180910390fd5b5b5b5b5b5b6003601754612f6f919061458e565b4311158015612fca57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130165750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613074576001600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600061307f3061143b565b9050600060085482101590508080156130a45750600a60029054906101000a900460ff165b80156130bd5750600560149054906101000a900460ff16155b80156131135750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131695750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131bf5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613203576001600560146101000a81548160ff0219169083151502179055506131e7613883565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132b95750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132c357600090505b600081156134d657601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561332657506000601254115b156133c057613353606461334560125488613a9090919063ffffffff16565b613b0a90919063ffffffff16565b90506012546013548261336691906146b0565b6133709190614739565b60156000828254613381919061458e565b925050819055506012546014548261339991906146b0565b6133a39190614739565b601660008282546133b4919061458e565b925050819055506134b2565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561341b57506000600f54115b156134b157613448606461343a600f5488613a9090919063ffffffff16565b613b0a90919063ffffffff16565b9050600f546010548261345b91906146b0565b6134659190614739565b60156000828254613476919061458e565b92505081905550600f546011548261348e91906146b0565b6134989190614739565b601660008282546134a9919061458e565b925050819055505b5b60008111156134c7576134c68730836135f0565b5b80856134d391906152c5565b94505b6134e18787876135f0565b505050505b505050565b6000838311158290613533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352a9190614036565b60405180910390fd5b506000838561354291906152c5565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361365f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365690614ecd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036136ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c590614f5f565b60405180910390fd5b6136d9838383613b54565b61374481604051806060016040528060268152602001615696602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134eb9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137d7816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161387691906141e2565b60405180910390a3505050565b600061388e3061143b565b905060006016546015546138a2919061458e565b90506000808314806138b45750600082145b156138c157505050613a8e565b60146008546138d091906146b0565b8311156138e95760146008546138e691906146b0565b92505b6000600283601554866138fc91906146b0565b6139069190614739565b6139109190614739565b905060006139278286613b5990919063ffffffff16565b9050600047905061393782613ba3565b600061394c8247613b5990919063ffffffff16565b905060006139778761396960165485613a9090919063ffffffff16565b613b0a90919063ffffffff16565b90506000818361398791906152c5565b905060006015819055506000601681905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516139df9061532a565b60006040518083038185875af1925050503d8060008114613a1c576040519150601f19603f3d011682016040523d82523d6000602084013e613a21565b606091505b505080975050600086118015613a375750600081115b15613a8457613a468682613de0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601554604051613a7b9392919061533f565b60405180910390a15b5050505050505050505b565b6000808303613aa25760009050613b04565b60008284613ab091906146b0565b9050828482613abf9190614739565b14613aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613af6906153e8565b60405180910390fd5b809150505b92915050565b6000613b4c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613eba565b905092915050565b505050565b6000613b9b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506134eb565b905092915050565b6000600267ffffffffffffffff811115613bc057613bbf615408565b5b604051908082528060200260200182016040528015613bee5781602001602082028036833780820191505090505b5090503081600081518110613c0657613c0561488e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ccf919061544c565b81600181518110613ce357613ce261488e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d48307f0000000000000000000000000000000000000000000000000000000000000000846124f9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613daa959493929190615572565b600060405180830381600087803b158015613dc457600080fd5b505af1158015613dd8573d6000803e3d6000fd5b505050505050565b613e0b307f0000000000000000000000000000000000000000000000000000000000000000846124f9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613e70969594939291906155cc565b60606040518083038185885af1158015613e8e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613eb39190615642565b5050505050565b60008083118290613f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ef89190614036565b60405180910390fd5b5060008385613f109190614739565b9050809150509392505050565b600080fd5b600080fd5b6000819050919050565b613f3a81613f27565b8114613f4557600080fd5b50565b600081359050613f5781613f31565b92915050565b60008060408385031215613f7457613f73613f1d565b5b6000613f8285828601613f48565b9250506020613f9385828601613f48565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613fd7578082015181840152602081019050613fbc565b83811115613fe6576000848401525b50505050565b6000601f19601f8301169050919050565b600061400882613f9d565b6140128185613fa8565b9350614022818560208601613fb9565b61402b81613fec565b840191505092915050565b600060208201905081810360008301526140508184613ffd565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061408382614058565b9050919050565b61409381614078565b811461409e57600080fd5b50565b6000813590506140b08161408a565b92915050565b600080604083850312156140cd576140cc613f1d565b5b60006140db858286016140a1565b92505060206140ec85828601613f48565b9150509250929050565b60008115159050919050565b61410b816140f6565b82525050565b60006020820190506141266000830184614102565b92915050565b60006020828403121561414257614141613f1d565b5b6000614150848285016140a1565b91505092915050565b6000819050919050565b600061417e61417961417484614058565b614159565b614058565b9050919050565b600061419082614163565b9050919050565b60006141a282614185565b9050919050565b6141b281614197565b82525050565b60006020820190506141cd60008301846141a9565b92915050565b6141dc81613f27565b82525050565b60006020820190506141f760008301846141d3565b92915050565b60006020828403121561421357614212613f1d565b5b600061422184828501613f48565b91505092915050565b60008060006060848603121561424357614242613f1d565b5b6000614251868287016140a1565b9350506020614262868287016140a1565b925050604061427386828701613f48565b9150509250925092565b614286816140f6565b811461429157600080fd5b50565b6000813590506142a38161427d565b92915050565b600080604083850312156142c0576142bf613f1d565b5b60006142ce858286016140a1565b92505060206142df85828601614294565b9150509250929050565b600060ff82169050919050565b6142ff816142e9565b82525050565b600060208201905061431a60008301846142f6565b92915050565b61432981614078565b82525050565b60006020820190506143446000830184614320565b92915050565b6000602082840312156143605761435f613f1d565b5b600061436e84828501614294565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261439c5761439b614377565b5b8235905067ffffffffffffffff8111156143b9576143b861437c565b5b6020830191508360208202830111156143d5576143d4614381565b5b9250929050565b60008083601f8401126143f2576143f1614377565b5b8235905067ffffffffffffffff81111561440f5761440e61437c565b5b60208301915083602082028301111561442b5761442a614381565b5b9250929050565b6000806000806040858703121561444c5761444b613f1d565b5b600085013567ffffffffffffffff81111561446a57614469613f22565b5b61447687828801614386565b9450945050602085013567ffffffffffffffff81111561449957614498613f22565b5b6144a5878288016143dc565b925092505092959194509250565b600080604083850312156144ca576144c9613f1d565b5b60006144d8858286016140a1565b92505060206144e9858286016140a1565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614529602083613fa8565b9150614534826144f3565b602082019050919050565b600060208201905081810360008301526145588161451c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061459982613f27565b91506145a483613f27565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145d9576145d861455f565b5b828201905092915050565b7f4c61756e63684665657300000000000000000000000000000000000000000000600082015250565b600061461a600a83613fa8565b9150614625826145e4565b602082019050919050565b600060208201905081810360008301526146498161460d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061469757607f821691505b6020821081036146aa576146a9614650565b5b50919050565b60006146bb82613f27565b91506146c683613f27565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146ff576146fe61455f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061474482613f27565b915061474f83613f27565b92508261475f5761475e61470a565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006147c6602f83613fa8565b91506147d18261476a565b604082019050919050565b600060208201905081810360008301526147f5816147b9565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614858603983613fa8565b9150614863826147fc565b604082019050919050565b600060208201905081810360008301526148878161484b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115614914578086048111156148f0576148ef61455f565b5b60018516156148ff5780820291505b808102905061490d856148bd565b94506148d4565b94509492505050565b60008261492d57600190506149e9565b8161493b57600090506149e9565b8160018114614951576002811461495b5761498a565b60019150506149e9565b60ff84111561496d5761496c61455f565b5b8360020a9150848211156149845761498361455f565b5b506149e9565b5060208310610133831016604e8410600b84101617156149bf5782820a9050838111156149ba576149b961455f565b5b6149e9565b6149cc84848460016148ca565b925090508184048111156149e3576149e261455f565b5b81810290505b9392505050565b60006149fb82613f27565b9150614a06836142e9565b9250614a337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461491d565b905092915050565b6000614a4682613f27565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a7857614a7761455f565b5b600182019050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614adf602483613fa8565b9150614aea82614a83565b604082019050919050565b60006020820190508181036000830152614b0e81614ad2565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614b71603583613fa8565b9150614b7c82614b15565b604082019050919050565b60006020820190508181036000830152614ba081614b64565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614c03603483613fa8565b9150614c0e82614ba7565b604082019050919050565b60006020820190508181036000830152614c3281614bf6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c95602683613fa8565b9150614ca082614c39565b604082019050919050565b60006020820190508181036000830152614cc481614c88565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614d01601b83613fa8565b9150614d0c82614ccb565b602082019050919050565b60006020820190508181036000830152614d3081614cf4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d93602483613fa8565b9150614d9e82614d37565b604082019050919050565b60006020820190508181036000830152614dc281614d86565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e25602283613fa8565b9150614e3082614dc9565b604082019050919050565b60006020820190508181036000830152614e5481614e18565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614eb7602583613fa8565b9150614ec282614e5b565b604082019050919050565b60006020820190508181036000830152614ee681614eaa565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614f49602383613fa8565b9150614f5482614eed565b604082019050919050565b60006020820190508181036000830152614f7881614f3c565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000614fdb603183613fa8565b9150614fe682614f7f565b604082019050919050565b6000602082019050818103600083015261500a81614fce565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615047601683613fa8565b915061505282615011565b602082019050919050565b600060208201905081810360008301526150768161503a565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006150ff604983613fa8565b915061510a8261507d565b606082019050919050565b6000602082019050818103600083015261512e816150f2565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615191603583613fa8565b915061519c82615135565b604082019050919050565b600060208201905081810360008301526151c081615184565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006151fd601383613fa8565b9150615208826151c7565b602082019050919050565b6000602082019050818103600083015261522c816151f0565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061528f603683613fa8565b915061529a82615233565b604082019050919050565b600060208201905081810360008301526152be81615282565b9050919050565b60006152d082613f27565b91506152db83613f27565b9250828210156152ee576152ed61455f565b5b828203905092915050565b600081905092915050565b50565b60006153146000836152f9565b915061531f82615304565b600082019050919050565b600061533582615307565b9150819050919050565b600060608201905061535460008301866141d3565b61536160208301856141d3565b61536e60408301846141d3565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006153d2602183613fa8565b91506153dd82615376565b604082019050919050565b60006020820190508181036000830152615401816153c5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506154468161408a565b92915050565b60006020828403121561546257615461613f1d565b5b600061547084828501615437565b91505092915050565b6000819050919050565b600061549e61549961549484615479565b614159565b613f27565b9050919050565b6154ae81615483565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154e981614078565b82525050565b60006154fb83836154e0565b60208301905092915050565b6000602082019050919050565b600061551f826154b4565b61552981856154bf565b9350615534836154d0565b8060005b8381101561556557815161554c88826154ef565b975061555783615507565b925050600181019050615538565b5085935050505092915050565b600060a08201905061558760008301886141d3565b61559460208301876154a5565b81810360408301526155a68186615514565b90506155b56060830185614320565b6155c260808301846141d3565b9695505050505050565b600060c0820190506155e16000830189614320565b6155ee60208301886141d3565b6155fb60408301876154a5565b61560860608301866154a5565b6156156080830185614320565b61562260a08301846141d3565b979650505050505050565b60008151905061563c81613f31565b92915050565b60008060006060848603121561565b5761565a613f1d565b5b60006156698682870161562d565b935050602061567a8682870161562d565b925050604061568b8682870161562d565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206308791fe60c898f3503e544a717944b57d7e7f7a1b7539792bf33e71516a29764736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c80638da5cb5b11610175578063c0246668116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610ad5578063f2fde38b14610b00578063f637434214610b29578063f8b45b0514610b54576102b9565b8063dd62ed3e14610a42578063e2f4560514610a7f578063e884f26014610aaa576102b9565b8063c024666814610932578063c18bc1951461095b578063c876d0b914610984578063c8c8ebe4146109af578063d257b34f146109da578063d85ba06314610a17576102b9565b80639fccce321161012e5780639fccce32146107fa578063a0d82dc514610825578063a457c2d714610850578063a9059cbb1461088d578063b62496f5146108ca578063bbc0c74214610907576102b9565b80638da5cb5b146106fe578063924de9b71461072957806395d89b41146107525780639a7a23d61461077d5780639c3b4fdc146107a65780639c63e6b9146107d1576102b9565b806339509351116102195780636ddd1713116101d25780636ddd17131461061457806370a082311461063f578063715018a61461067c578063751039fc146106935780637571336a146106be5780638a8c523c146106e7576102b9565b806339509351146104f057806349bd5a5e1461052d5780634a62bb65146105585780634fbee1931461058357806366ca9b83146105c05780636a486a8e146105e9576102b9565b80631816467f1161026b5780631816467f146103e25780631a8145bb1461040b578063203e727e1461043657806323b872dd1461045f5780632d5a5d341461049c578063313ce567146104c5576102b9565b806302dbd8f8146102be57806306fdde03146102e7578063095ea7b31461031257806310d5de531461034f5780631694505e1461038c57806318160ddd146103b7576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102e560048036038101906102e09190613f5d565b610b7f565b005b3480156102f357600080fd5b506102fc610c84565b6040516103099190614036565b60405180910390f35b34801561031e57600080fd5b50610339600480360381019061033491906140b6565b610d16565b6040516103469190614111565b60405180910390f35b34801561035b57600080fd5b506103766004803603810190610371919061412c565b610d34565b6040516103839190614111565b60405180910390f35b34801561039857600080fd5b506103a1610d54565b6040516103ae91906141b8565b60405180910390f35b3480156103c357600080fd5b506103cc610d78565b6040516103d991906141e2565b60405180910390f35b3480156103ee57600080fd5b506104096004803603810190610404919061412c565b610d82565b005b34801561041757600080fd5b50610420610ed9565b60405161042d91906141e2565b60405180910390f35b34801561044257600080fd5b5061045d600480360381019061045891906141fd565b610edf565b005b34801561046b57600080fd5b506104866004803603810190610481919061422a565b611009565b6040516104939190614111565b60405180910390f35b3480156104a857600080fd5b506104c360048036038101906104be91906142a9565b6110e2565b005b3480156104d157600080fd5b506104da6111d4565b6040516104e79190614305565b60405180910390f35b3480156104fc57600080fd5b50610517600480360381019061051291906140b6565b6111dd565b6040516105249190614111565b60405180910390f35b34801561053957600080fd5b50610542611290565b60405161054f919061432f565b60405180910390f35b34801561056457600080fd5b5061056d6112b4565b60405161057a9190614111565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a5919061412c565b6112c7565b6040516105b79190614111565b60405180910390f35b3480156105cc57600080fd5b506105e760048036038101906105e29190613f5d565b61131d565b005b3480156105f557600080fd5b506105fe611422565b60405161060b91906141e2565b60405180910390f35b34801561062057600080fd5b50610629611428565b6040516106369190614111565b60405180910390f35b34801561064b57600080fd5b506106666004803603810190610661919061412c565b61143b565b60405161067391906141e2565b60405180910390f35b34801561068857600080fd5b50610691611483565b005b34801561069f57600080fd5b506106a86115db565b6040516106b59190614111565b60405180910390f35b3480156106ca57600080fd5b506106e560048036038101906106e091906142a9565b611696565b005b3480156106f357600080fd5b506106fc611788565b005b34801561070a57600080fd5b5061071361185e565b604051610720919061432f565b60405180910390f35b34801561073557600080fd5b50610750600480360381019061074b919061434a565b611888565b005b34801561075e57600080fd5b5061076761193c565b6040516107749190614036565b60405180910390f35b34801561078957600080fd5b506107a4600480360381019061079f91906142a9565b6119ce565b005b3480156107b257600080fd5b506107bb611b01565b6040516107c891906141e2565b60405180910390f35b3480156107dd57600080fd5b506107f860048036038101906107f39190614432565b611b07565b005b34801561080657600080fd5b5061080f611c50565b60405161081c91906141e2565b60405180910390f35b34801561083157600080fd5b5061083a611c56565b60405161084791906141e2565b60405180910390f35b34801561085c57600080fd5b50610877600480360381019061087291906140b6565b611c5c565b6040516108849190614111565b60405180910390f35b34801561089957600080fd5b506108b460048036038101906108af91906140b6565b611d29565b6040516108c19190614111565b60405180910390f35b3480156108d657600080fd5b506108f160048036038101906108ec919061412c565b611d47565b6040516108fe9190614111565b60405180910390f35b34801561091357600080fd5b5061091c611d67565b6040516109299190614111565b60405180910390f35b34801561093e57600080fd5b50610959600480360381019061095491906142a9565b611d7a565b005b34801561096757600080fd5b50610982600480360381019061097d91906141fd565b611eba565b005b34801561099057600080fd5b50610999611fe4565b6040516109a69190614111565b60405180910390f35b3480156109bb57600080fd5b506109c4611ff7565b6040516109d191906141e2565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc91906141fd565b611ffd565b604051610a0e9190614111565b60405180910390f35b348015610a2357600080fd5b50610a2c61216d565b604051610a3991906141e2565b60405180910390f35b348015610a4e57600080fd5b50610a696004803603810190610a6491906144b3565b612173565b604051610a7691906141e2565b60405180910390f35b348015610a8b57600080fd5b50610a946121fa565b604051610aa191906141e2565b60405180910390f35b348015610ab657600080fd5b50610abf612200565b604051610acc9190614111565b60405180910390f35b348015610ae157600080fd5b50610aea6122bb565b604051610af791906141e2565b60405180910390f35b348015610b0c57600080fd5b50610b276004803603810190610b22919061412c565b6122c1565b005b348015610b3557600080fd5b50610b3e612487565b604051610b4b91906141e2565b60405180910390f35b348015610b6057600080fd5b50610b6961248d565b604051610b7691906141e2565b60405180910390f35b610b876124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0d9061453f565b60405180910390fd5b8160138190555080601481905550601454601354610c34919061458e565b60128190555060196012541115610c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7790614630565b60405180910390fd5b5050565b606060038054610c939061467f565b80601f0160208091040260200160405190810160405280929190818152602001828054610cbf9061467f565b8015610d0c5780601f10610ce157610100808354040283529160200191610d0c565b820191906000526020600020905b815481529060010190602001808311610cef57829003601f168201915b5050505050905090565b6000610d2a610d236124f1565b84846124f9565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610d8a6124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e109061453f565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b610ee76124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d9061453f565b60405180910390fd5b670de0b6b3a76400006103e86001610f8c610d78565b610f9691906146b0565b610fa09190614739565b610faa9190614739565b811015610fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe3906147dc565b60405180910390fd5b670de0b6b3a76400008161100091906146b0565b60078190555050565b60006110168484846126c2565b6110d7846110226124f1565b6110d2856040518060600160405280602881526020016156bc60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110886124f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134eb9092919063ffffffff16565b6124f9565b600190509392505050565b6110ea6124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611179576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111709061453f565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60006112866111ea6124f1565b8461128185600160006111fb6124f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249390919063ffffffff16565b6124f9565b6001905092915050565b7f000000000000000000000000a6404fa2f15a294e4d0a9baee77f9c0bc7d7c90981565b600a60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6113256124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab9061453f565b60405180910390fd5b81601081905550806011819055506011546010546113d2919061458e565b600f819055506005600f54111561141e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141590614630565b60405180910390fd5b5050565b60125481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61148b6124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461151a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115119061453f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006115e56124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166b9061453f565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b61169e6124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461172d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117249061453f565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6117906124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461181f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118169061453f565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555043601781905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118906124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461191f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119169061453f565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b60606004805461194b9061467f565b80601f01602080910402602001604051908101604052809291908181526020018280546119779061467f565b80156119c45780601f10611999576101008083540402835291602001916119c4565b820191906000526020600020905b8154815290600101906020018083116119a757829003601f168201915b5050505050905090565b6119d66124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5c9061453f565b60405180910390fd5b7f000000000000000000000000a6404fa2f15a294e4d0a9baee77f9c0bc7d7c90973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aea9061486e565b60405180910390fd5b611afd828261354f565b5050565b60115481565b611b0f6124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b959061453f565b60405180910390fd5b611bbe611ba961185e565b611bb161185e565b611bb9610d78565b6124f9565b60005b84849050811015611c4957611c3533868684818110611be357611be261488e565b5b9050602002016020810190611bf8919061412c565b611c006111d4565b600a611c0c91906149f0565b868686818110611c1f57611c1e61488e565b5b90506020020135611c3091906146b0565b611009565b508080611c4190614a3b565b915050611bc1565b5050505050565b60165481565b60145481565b6000611d1f611c696124f1565b84611d1a856040518060600160405280602581526020016156e46025913960016000611c936124f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134eb9092919063ffffffff16565b6124f9565b6001905092915050565b6000611d3d611d366124f1565b84846126c2565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b611d826124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e089061453f565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611eae9190614111565b60405180910390a25050565b611ec26124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f489061453f565b60405180910390fd5b670de0b6b3a76400006103e86005611f67610d78565b611f7191906146b0565b611f7b9190614739565b611f859190614739565b811015611fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbe90614af5565b60405180910390fd5b670de0b6b3a764000081611fdb91906146b0565b60098190555050565b600e60009054906101000a900460ff1681565b60075481565b60006120076124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208d9061453f565b60405180910390fd5b620186a060016120a4610d78565b6120ae91906146b0565b6120b89190614739565b8210156120fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f190614b87565b60405180910390fd5b6103e86005612107610d78565b61211191906146b0565b61211b9190614739565b82111561215d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215490614c19565b60405180910390fd5b8160088190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b600061220a6124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612299576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122909061453f565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60105481565b6122c96124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234f9061453f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123be90614cab565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b60095481565b60008082846124a2919061458e565b9050838110156124e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124de90614d17565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255f90614da9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ce90614e3b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126b591906141e2565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272890614ecd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279790614f5f565b60405180910390fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128445750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287a90614ff1565b60405180910390fd5b6000810361289c57612897838360006135f0565b6134e6565b600a60009054906101000a900460ff1615612f60576128b961185e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561292757506128f761185e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129605750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561299a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129b35750600560149054906101000a900460ff16155b15612f5f57600a60019054906101000a900460ff16612aad57601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a6d5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa39061505d565b60405180910390fd5b5b600e60009054906101000a900460ff1615612c7657612aca61185e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b5157507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ba957507f000000000000000000000000a6404fa2f15a294e4d0a9baee77f9c0bc7d7c90973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c755743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2790615115565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d195750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612dc057600754811115612d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5a906151a7565b60405180910390fd5b600954612d6f8361143b565b82612d7a919061458e565b1115612dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db290615213565b60405180910390fd5b612f5e565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e635750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612eb257600754811115612ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea4906152a5565b60405180910390fd5b612f5d565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f5c57600954612f0f8361143b565b82612f1a919061458e565b1115612f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5290615213565b60405180910390fd5b5b5b5b5b5b6003601754612f6f919061458e565b4311158015612fca57507f000000000000000000000000a6404fa2f15a294e4d0a9baee77f9c0bc7d7c90973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130165750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613074576001600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600061307f3061143b565b9050600060085482101590508080156130a45750600a60029054906101000a900460ff165b80156130bd5750600560149054906101000a900460ff16155b80156131135750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131695750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131bf5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613203576001600560146101000a81548160ff0219169083151502179055506131e7613883565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132b95750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132c357600090505b600081156134d657601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561332657506000601254115b156133c057613353606461334560125488613a9090919063ffffffff16565b613b0a90919063ffffffff16565b90506012546013548261336691906146b0565b6133709190614739565b60156000828254613381919061458e565b925050819055506012546014548261339991906146b0565b6133a39190614739565b601660008282546133b4919061458e565b925050819055506134b2565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561341b57506000600f54115b156134b157613448606461343a600f5488613a9090919063ffffffff16565b613b0a90919063ffffffff16565b9050600f546010548261345b91906146b0565b6134659190614739565b60156000828254613476919061458e565b92505081905550600f546011548261348e91906146b0565b6134989190614739565b601660008282546134a9919061458e565b925050819055505b5b60008111156134c7576134c68730836135f0565b5b80856134d391906152c5565b94505b6134e18787876135f0565b505050505b505050565b6000838311158290613533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352a9190614036565b60405180910390fd5b506000838561354291906152c5565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361365f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365690614ecd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036136ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c590614f5f565b60405180910390fd5b6136d9838383613b54565b61374481604051806060016040528060268152602001615696602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134eb9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137d7816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161387691906141e2565b60405180910390a3505050565b600061388e3061143b565b905060006016546015546138a2919061458e565b90506000808314806138b45750600082145b156138c157505050613a8e565b60146008546138d091906146b0565b8311156138e95760146008546138e691906146b0565b92505b6000600283601554866138fc91906146b0565b6139069190614739565b6139109190614739565b905060006139278286613b5990919063ffffffff16565b9050600047905061393782613ba3565b600061394c8247613b5990919063ffffffff16565b905060006139778761396960165485613a9090919063ffffffff16565b613b0a90919063ffffffff16565b90506000818361398791906152c5565b905060006015819055506000601681905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516139df9061532a565b60006040518083038185875af1925050503d8060008114613a1c576040519150601f19603f3d011682016040523d82523d6000602084013e613a21565b606091505b505080975050600086118015613a375750600081115b15613a8457613a468682613de0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601554604051613a7b9392919061533f565b60405180910390a15b5050505050505050505b565b6000808303613aa25760009050613b04565b60008284613ab091906146b0565b9050828482613abf9190614739565b14613aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613af6906153e8565b60405180910390fd5b809150505b92915050565b6000613b4c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613eba565b905092915050565b505050565b6000613b9b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506134eb565b905092915050565b6000600267ffffffffffffffff811115613bc057613bbf615408565b5b604051908082528060200260200182016040528015613bee5781602001602082028036833780820191505090505b5090503081600081518110613c0657613c0561488e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ccf919061544c565b81600181518110613ce357613ce261488e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d48307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124f9565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613daa959493929190615572565b600060405180830381600087803b158015613dc457600080fd5b505af1158015613dd8573d6000803e3d6000fd5b505050505050565b613e0b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124f9565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613e70969594939291906155cc565b60606040518083038185885af1158015613e8e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613eb39190615642565b5050505050565b60008083118290613f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ef89190614036565b60405180910390fd5b5060008385613f109190614739565b9050809150509392505050565b600080fd5b600080fd5b6000819050919050565b613f3a81613f27565b8114613f4557600080fd5b50565b600081359050613f5781613f31565b92915050565b60008060408385031215613f7457613f73613f1d565b5b6000613f8285828601613f48565b9250506020613f9385828601613f48565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613fd7578082015181840152602081019050613fbc565b83811115613fe6576000848401525b50505050565b6000601f19601f8301169050919050565b600061400882613f9d565b6140128185613fa8565b9350614022818560208601613fb9565b61402b81613fec565b840191505092915050565b600060208201905081810360008301526140508184613ffd565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061408382614058565b9050919050565b61409381614078565b811461409e57600080fd5b50565b6000813590506140b08161408a565b92915050565b600080604083850312156140cd576140cc613f1d565b5b60006140db858286016140a1565b92505060206140ec85828601613f48565b9150509250929050565b60008115159050919050565b61410b816140f6565b82525050565b60006020820190506141266000830184614102565b92915050565b60006020828403121561414257614141613f1d565b5b6000614150848285016140a1565b91505092915050565b6000819050919050565b600061417e61417961417484614058565b614159565b614058565b9050919050565b600061419082614163565b9050919050565b60006141a282614185565b9050919050565b6141b281614197565b82525050565b60006020820190506141cd60008301846141a9565b92915050565b6141dc81613f27565b82525050565b60006020820190506141f760008301846141d3565b92915050565b60006020828403121561421357614212613f1d565b5b600061422184828501613f48565b91505092915050565b60008060006060848603121561424357614242613f1d565b5b6000614251868287016140a1565b9350506020614262868287016140a1565b925050604061427386828701613f48565b9150509250925092565b614286816140f6565b811461429157600080fd5b50565b6000813590506142a38161427d565b92915050565b600080604083850312156142c0576142bf613f1d565b5b60006142ce858286016140a1565b92505060206142df85828601614294565b9150509250929050565b600060ff82169050919050565b6142ff816142e9565b82525050565b600060208201905061431a60008301846142f6565b92915050565b61432981614078565b82525050565b60006020820190506143446000830184614320565b92915050565b6000602082840312156143605761435f613f1d565b5b600061436e84828501614294565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261439c5761439b614377565b5b8235905067ffffffffffffffff8111156143b9576143b861437c565b5b6020830191508360208202830111156143d5576143d4614381565b5b9250929050565b60008083601f8401126143f2576143f1614377565b5b8235905067ffffffffffffffff81111561440f5761440e61437c565b5b60208301915083602082028301111561442b5761442a614381565b5b9250929050565b6000806000806040858703121561444c5761444b613f1d565b5b600085013567ffffffffffffffff81111561446a57614469613f22565b5b61447687828801614386565b9450945050602085013567ffffffffffffffff81111561449957614498613f22565b5b6144a5878288016143dc565b925092505092959194509250565b600080604083850312156144ca576144c9613f1d565b5b60006144d8858286016140a1565b92505060206144e9858286016140a1565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614529602083613fa8565b9150614534826144f3565b602082019050919050565b600060208201905081810360008301526145588161451c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061459982613f27565b91506145a483613f27565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145d9576145d861455f565b5b828201905092915050565b7f4c61756e63684665657300000000000000000000000000000000000000000000600082015250565b600061461a600a83613fa8565b9150614625826145e4565b602082019050919050565b600060208201905081810360008301526146498161460d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061469757607f821691505b6020821081036146aa576146a9614650565b5b50919050565b60006146bb82613f27565b91506146c683613f27565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146ff576146fe61455f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061474482613f27565b915061474f83613f27565b92508261475f5761475e61470a565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006147c6602f83613fa8565b91506147d18261476a565b604082019050919050565b600060208201905081810360008301526147f5816147b9565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614858603983613fa8565b9150614863826147fc565b604082019050919050565b600060208201905081810360008301526148878161484b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115614914578086048111156148f0576148ef61455f565b5b60018516156148ff5780820291505b808102905061490d856148bd565b94506148d4565b94509492505050565b60008261492d57600190506149e9565b8161493b57600090506149e9565b8160018114614951576002811461495b5761498a565b60019150506149e9565b60ff84111561496d5761496c61455f565b5b8360020a9150848211156149845761498361455f565b5b506149e9565b5060208310610133831016604e8410600b84101617156149bf5782820a9050838111156149ba576149b961455f565b5b6149e9565b6149cc84848460016148ca565b925090508184048111156149e3576149e261455f565b5b81810290505b9392505050565b60006149fb82613f27565b9150614a06836142e9565b9250614a337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461491d565b905092915050565b6000614a4682613f27565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a7857614a7761455f565b5b600182019050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614adf602483613fa8565b9150614aea82614a83565b604082019050919050565b60006020820190508181036000830152614b0e81614ad2565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614b71603583613fa8565b9150614b7c82614b15565b604082019050919050565b60006020820190508181036000830152614ba081614b64565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614c03603483613fa8565b9150614c0e82614ba7565b604082019050919050565b60006020820190508181036000830152614c3281614bf6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c95602683613fa8565b9150614ca082614c39565b604082019050919050565b60006020820190508181036000830152614cc481614c88565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614d01601b83613fa8565b9150614d0c82614ccb565b602082019050919050565b60006020820190508181036000830152614d3081614cf4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d93602483613fa8565b9150614d9e82614d37565b604082019050919050565b60006020820190508181036000830152614dc281614d86565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e25602283613fa8565b9150614e3082614dc9565b604082019050919050565b60006020820190508181036000830152614e5481614e18565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614eb7602583613fa8565b9150614ec282614e5b565b604082019050919050565b60006020820190508181036000830152614ee681614eaa565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614f49602383613fa8565b9150614f5482614eed565b604082019050919050565b60006020820190508181036000830152614f7881614f3c565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000614fdb603183613fa8565b9150614fe682614f7f565b604082019050919050565b6000602082019050818103600083015261500a81614fce565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615047601683613fa8565b915061505282615011565b602082019050919050565b600060208201905081810360008301526150768161503a565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006150ff604983613fa8565b915061510a8261507d565b606082019050919050565b6000602082019050818103600083015261512e816150f2565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615191603583613fa8565b915061519c82615135565b604082019050919050565b600060208201905081810360008301526151c081615184565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006151fd601383613fa8565b9150615208826151c7565b602082019050919050565b6000602082019050818103600083015261522c816151f0565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061528f603683613fa8565b915061529a82615233565b604082019050919050565b600060208201905081810360008301526152be81615282565b9050919050565b60006152d082613f27565b91506152db83613f27565b9250828210156152ee576152ed61455f565b5b828203905092915050565b600081905092915050565b50565b60006153146000836152f9565b915061531f82615304565b600082019050919050565b600061533582615307565b9150819050919050565b600060608201905061535460008301866141d3565b61536160208301856141d3565b61536e60408301846141d3565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006153d2602183613fa8565b91506153dd82615376565b604082019050919050565b60006020820190508181036000830152615401816153c5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506154468161408a565b92915050565b60006020828403121561546257615461613f1d565b5b600061547084828501615437565b91505092915050565b6000819050919050565b600061549e61549961549484615479565b614159565b613f27565b9050919050565b6154ae81615483565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154e981614078565b82525050565b60006154fb83836154e0565b60208301905092915050565b6000602082019050919050565b600061551f826154b4565b61552981856154bf565b9350615534836154d0565b8060005b8381101561556557815161554c88826154ef565b975061555783615507565b925050600181019050615538565b5085935050505092915050565b600060a08201905061558760008301886141d3565b61559460208301876154a5565b81810360408301526155a68186615514565b90506155b56060830185614320565b6155c260808301846141d3565b9695505050505050565b600060c0820190506155e16000830189614320565b6155ee60208301886141d3565b6155fb60408301876154a5565b61560860608301866154a5565b6156156080830185614320565b61562260a08301846141d3565b979650505050505050565b60008151905061563c81613f31565b92915050565b60008060006060848603121561565b5761565a613f1d565b5b60006156698682870161562d565b935050602061567a8682870161562d565b925050604061568b8682870161562d565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206308791fe60c898f3503e544a717944b57d7e7f7a1b7539792bf33e71516a29764736f6c634300080d0033

Deployed Bytecode Sourcemap

29311:14676:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35523:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7412:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9586:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30689:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29387:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8535:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36593:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30403:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34429:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10238:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35997:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8376:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11003:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29445:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29675:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36759:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35247:267;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30295:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29755:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8707:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21914:148;;;;;;;;;;;;;:::i;:::-;;33646:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34896:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33445:148;;;;;;;;;;;;;:::i;:::-;;21270:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35137:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7632:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36141:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30261:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43655:329;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30443:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30368:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11725:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9048:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30912:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29715:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35806:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34672:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30141:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29559:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34034:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30190:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9287:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29601:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33828:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30224:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22218:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30330:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29641:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35523:274;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35636:13:::1;35617:16;:32;;;;35673:7;35660:10;:20;;;;35726:10;;35707:16;;:29;;;;:::i;:::-;35691:13;:45;;;;35772:2;35755:13;;:19;;35747:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;35523:274:::0;;:::o;7412:100::-;7466:13;7499:5;7492:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7412:100;:::o;9586:169::-;9669:4;9686:39;9695:12;:10;:12::i;:::-;9709:7;9718:6;9686:8;:39::i;:::-;9743:4;9736:11;;9586:169;;;;:::o;30689:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29387:51::-;;;:::o;8535:108::-;8596:7;8623:12;;8616:19;;8535:108;:::o;36593:157::-;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36700:9:::1;;;;;;;;;;;36672:38;;36689:9;36672:38;;;;;;;;;;;;36733:9;36721;;:21;;;;;;;;;;;;;;;;;;36593:157:::0;:::o;30403:33::-;;;;:::o;34429:234::-;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34548:4:::1;34542;34538:1;34522:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34521:31;;;;:::i;:::-;34511:6;:41;;34503:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;34648:6;34638;:17;;;;:::i;:::-;34615:20;:40;;;;34429:234:::0;:::o;10238:355::-;10378:4;10395:36;10405:6;10413:9;10424:6;10395:9;:36::i;:::-;10442:121;10451:6;10459:12;:10;:12::i;:::-;10473:89;10511:6;10473:89;;;;;;;;;;;;;;;;;:11;:19;10485:6;10473:19;;;;;;;;;;;;;;;:33;10493:12;:10;:12::i;:::-;10473:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10442:8;:121::i;:::-;10581:4;10574:11;;10238:355;;;;;:::o;35997:135::-;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36111:13:::1;36089:10;:19;36100:7;36089:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;35997:135:::0;;:::o;8376:93::-;8434:5;8459:2;8452:9;;8376:93;:::o;11003:218::-;11091:4;11108:83;11117:12;:10;:12::i;:::-;11131:7;11140:50;11179:10;11140:11;:25;11152:12;:10;:12::i;:::-;11140:25;;;;;;;;;;;;;;;:34;11166:7;11140:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11108:8;:83::i;:::-;11209:4;11202:11;;11003:218;;;;:::o;29445:38::-;;;:::o;29675:33::-;;;;;;;;;;;;;:::o;36759:125::-;36824:4;36848:19;:28;36868:7;36848:28;;;;;;;;;;;;;;;;;;;;;;;;;36841:35;;36759:125;;;:::o;35247:267::-;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35358:13:::1;35340:15;:31;;;;35394:7;35382:9;:19;;;;35445:9;;35427:15;;:27;;;;:::i;:::-;35412:12;:42;;;;35489:1;35473:12;;:17;;35465:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;35247:267:::0;;:::o;30295:28::-;;;;:::o;29755:31::-;;;;;;;;;;;;;:::o;8707:127::-;8781:7;8808:9;:18;8818:7;8808:18;;;;;;;;;;;;;;;;8801:25;;8707:127;;;:::o;21914:148::-;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22021:1:::1;21984:40;;22005:6;;;;;;;;;;;21984:40;;;;;;;;;;;;22052:1;22035:6;;:19;;;;;;;;;;;;;;;;;;21914:148::o:0;33646:120::-;33698:4;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33731:5:::1;33714:14;;:22;;;;;;;;;;;;;;;;;;33754:4;33747:11;;33646:120:::0;:::o;34896:144::-;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35028:4:::1;34986:31;:39;35018:6;34986:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34896:144:::0;;:::o;33445:148::-;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33516:4:::1;33500:13;;:20;;;;;;;;;;;;;;;;;;33545:4;33531:11;;:18;;;;;;;;;;;;;;;;;;33573:12;33560:10;:25;;;;33445:148::o:0;21270:79::-;21308:7;21335:6;;;;;;;;;;;21328:13;;21270:79;:::o;35137:101::-;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35223:7:::1;35209:11;;:21;;;;;;;;;;;;;;;;;;35137:101:::0;:::o;7632:104::-;7688:13;7721:7;7714:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7632:104;:::o;36141:245::-;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36248:13:::1;36240:21;;:4;:21;;::::0;36232:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36337:41;36366:4;36372:5;36337:28;:41::i;:::-;36141:245:::0;;:::o;30261:24::-;;;;:::o;43655:329::-;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43781:41:::1;43790:7;:5;:7::i;:::-;43799;:5;:7::i;:::-;43808:13;:11;:13::i;:::-;43781:8;:41::i;:::-;43838:9;43833:144;43857:10;;:17;;43853:1;:21;43833:144;;;43896:69;43909:10;43921;;43932:1;43921:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;43954:10;:8;:10::i;:::-;43948:2;:16;;;;:::i;:::-;43936:6;;43943:1;43936:9;;;;;;;:::i;:::-;;;;;;;;:28;;;;:::i;:::-;43896:12;:69::i;:::-;;43876:3;;;;;:::i;:::-;;;;43833:144;;;;43655:329:::0;;;;:::o;30443:27::-;;;;:::o;30368:25::-;;;;:::o;11725:269::-;11818:4;11835:129;11844:12;:10;:12::i;:::-;11858:7;11867:96;11906:15;11867:96;;;;;;;;;;;;;;;;;:11;:25;11879:12;:10;:12::i;:::-;11867:25;;;;;;;;;;;;;;;:34;11893:7;11867:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11835:8;:129::i;:::-;11982:4;11975:11;;11725:269;;;;:::o;9048:175::-;9134:4;9151:42;9161:12;:10;:12::i;:::-;9175:9;9186:6;9151:9;:42::i;:::-;9211:4;9204:11;;9048:175;;;;:::o;30912:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29715:33::-;;;;;;;;;;;;;:::o;35806:182::-;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35922:8:::1;35891:19;:28;35911:7;35891:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35962:7;35946:34;;;35971:8;35946:34;;;;;;:::i;:::-;;;;;;;;35806:182:::0;;:::o;34672:215::-;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34794:4:::1;34788;34784:1;34768:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34767:31;;;;:::i;:::-;34757:6;:41;;34749:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;34872:6;34862;:17;;;;:::i;:::-;34850:9;:29;;;;34672:215:::0;:::o;30141:39::-;;;;;;;;;;;;;:::o;29559:35::-;;;;:::o;34034:386::-;34115:4;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34172:6:::1;34168:1;34152:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34139:9;:39;;34131:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34288:4;34284:1;34268:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34255:9;:37;;34247:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;34381:9;34360:18;:30;;;;34408:4;34401:11;;34034:386:::0;;;:::o;30190:27::-;;;;:::o;9287:151::-;9376:7;9403:11;:18;9415:5;9403:18;;;;;;;;;;;;;;;:27;9422:7;9403:27;;;;;;;;;;;;;;;;9396:34;;9287:151;;;;:::o;29601:33::-;;;;:::o;33828:134::-;33888:4;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33927:5:::1;33904:20;;:28;;;;;;;;;;;;;;;;;;33950:4;33943:11;;33828:134:::0;:::o;30224:30::-;;;;:::o;22218:244::-;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22327:1:::1;22307:22;;:8;:22;;::::0;22299:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22417:8;22388:38;;22409:6;;;;;;;;;;;22388:38;;;;;;;;;;;;22446:8;22437:6;;:17;;;;;;;;;;;;;;;;;;22218:244:::0;:::o;30330:31::-;;;;:::o;29641:24::-;;;;:::o;16302:182::-;16360:7;16380:9;16396:1;16392;:5;;;;:::i;:::-;16380:17;;16421:1;16416;:6;;16408:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16475:1;16468:8;;;16302:182;;;;:::o;103:98::-;156:7;183:10;176:17;;103:98;:::o;14921:381::-;15074:1;15057:19;;:5;:19;;;15049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15155:1;15136:21;;:7;:21;;;15128:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15240:6;15210:11;:18;15222:5;15210:18;;;;;;;;;;;;;;;:27;15229:7;15210:27;;;;;;;;;;;;;;;:36;;;;15278:7;15262:32;;15271:5;15262:32;;;15287:6;15262:32;;;;;;:::i;:::-;;;;;;;;14921:381;;;:::o;36944:4250::-;37092:1;37076:18;;:4;:18;;;37068:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37169:1;37155:16;;:2;:16;;;37147:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37231:10;:14;37242:2;37231:14;;;;;;;;;;;;;;;;;;;;;;;;;37230:15;:36;;;;;37250:10;:16;37261:4;37250:16;;;;;;;;;;;;;;;;;;;;;;;;;37249:17;37230:36;37222:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;37345:1;37335:6;:11;37332:92;;37363:28;37379:4;37385:2;37389:1;37363:15;:28::i;:::-;37406:7;;37332:92;37440:14;;;;;;;;;;;37437:1812;;;37500:7;:5;:7::i;:::-;37492:15;;:4;:15;;;;:49;;;;;37534:7;:5;:7::i;:::-;37528:13;;:2;:13;;;;37492:49;:86;;;;;37576:1;37562:16;;:2;:16;;;;37492:86;:128;;;;;37613:6;37599:21;;:2;:21;;;;37492:128;:158;;;;;37642:8;;;;;;;;;;;37641:9;37492:158;37470:1768;;;37688:13;;;;;;;;;;;37684:148;;37733:19;:25;37753:4;37733:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;37762:19;:23;37782:2;37762:23;;;;;;;;;;;;;;;;;;;;;;;;;37733:52;37725:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37684:148;37991:20;;;;;;;;;;;37987:424;;;38045:7;:5;:7::i;:::-;38039:13;;:2;:13;;;;:47;;;;;38070:15;38056:30;;:2;:30;;;;38039:47;:79;;;;;38104:13;38090:28;;:2;:28;;;;38039:79;38035:357;;;38197:12;38154:28;:39;38183:9;38154:39;;;;;;;;;;;;;;;;:55;;38146:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;38356:12;38314:28;:39;38343:9;38314:39;;;;;;;;;;;;;;;:54;;;;38035:357;37987:424;38464:25;:31;38490:4;38464:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;38500:31;:35;38532:2;38500:35;;;;;;;;;;;;;;;;;;;;;;;;;38499:36;38464:71;38460:763;;;38582:20;;38572:6;:30;;38564:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;38721:9;;38704:13;38714:2;38704:9;:13::i;:::-;38695:6;:22;;;;:::i;:::-;:35;;38687:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38460:763;;;38833:25;:29;38859:2;38833:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;38867:31;:37;38899:4;38867:37;;;;;;;;;;;;;;;;;;;;;;;;;38866:38;38833:71;38829:394;;;38951:20;;38941:6;:30;;38933:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;38829:394;;;39077:31;:35;39109:2;39077:35;;;;;;;;;;;;;;;;;;;;;;;;;39073:150;;39170:9;;39153:13;39163:2;39153:9;:13::i;:::-;39144:6;:22;;;;:::i;:::-;:35;;39136:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39073:150;38829:394;38460:763;37470:1768;37437:1812;39323:1;39310:10;;:14;;;;:::i;:::-;39293:12;:32;;:73;;;;;39353:13;39347:19;;:2;:19;;;;39293:73;:152;;;;;39402:42;39388:57;;:2;:57;;;;39293:152;39289:221;;;39494:4;39477:10;:14;39488:2;39477:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39289:221;39523:28;39554:24;39572:4;39554:9;:24::i;:::-;39523:55;;39592:12;39631:18;;39607:20;:42;;39592:57;;39681:7;:35;;;;;39705:11;;;;;;;;;;;39681:35;:61;;;;;39734:8;;;;;;;;;;;39733:9;39681:61;:110;;;;;39760:25;:31;39786:4;39760:31;;;;;;;;;;;;;;;;;;;;;;;;;39759:32;39681:110;:153;;;;;39809:19;:25;39829:4;39809:25;;;;;;;;;;;;;;;;;;;;;;;;;39808:26;39681:153;:194;;;;;39852:19;:23;39872:2;39852:23;;;;;;;;;;;;;;;;;;;;;;;;;39851:24;39681:194;39663:328;;;39913:4;39902:8;;:15;;;;;;;;;;;;;;;;;;39935:10;:8;:10::i;:::-;39974:5;39963:8;;:16;;;;;;;;;;;;;;;;;;39663:328;40005:12;40021:8;;;;;;;;;;;40020:9;40005:24;;40131:19;:25;40151:4;40131:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40160:19;:23;40180:2;40160:23;;;;;;;;;;;;;;;;;;;;;;;;;40131:52;40128:99;;;40210:5;40200:15;;40128:99;40240:12;40344:7;40341:799;;;40395:25;:29;40421:2;40395:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;40444:1;40428:13;;:17;40395:50;40391:596;;;40472:34;40502:3;40472:25;40483:13;;40472:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;40465:41;;40573:13;;40554:16;;40547:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;40525:18;;:61;;;;;;;:::i;:::-;;;;;;;;40641:13;;40628:10;;40621:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;40605:12;;:49;;;;;;;:::i;:::-;;;;;;;;40391:596;;;40715:25;:31;40741:4;40715:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;40765:1;40750:12;;:16;40715:51;40712:275;;;40794:33;40823:3;40794:24;40805:12;;40794:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;40787:40;;40893:12;;40875:15;;40868:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;40846:18;;:59;;;;;;;:::i;:::-;;;;;;;;40959:12;;40947:9;;40940:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;40924:12;;:47;;;;;;;:::i;:::-;;;;;;;;40712:275;40391:596;41014:1;41007:4;:8;41004:93;;;41039:42;41055:4;41069;41076;41039:15;:42::i;:::-;41004:93;41124:4;41114:14;;;;;:::i;:::-;;;40341:799;41153:33;41169:4;41175:2;41179:6;41153:15;:33::i;:::-;37057:4137;;;;36944:4250;;;;:::o;17208:193::-;17294:7;17327:1;17322;:6;;17330:12;17314:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17354:9;17370:1;17366;:5;;;;:::i;:::-;17354:17;;17392:1;17385:8;;;17208:193;;;;;:::o;36395:189::-;36512:5;36478:25;:31;36504:4;36478:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36570:5;36536:40;;36564:4;36536:40;;;;;;;;;;;;36395:189;;:::o;12485:575::-;12643:1;12625:20;;:6;:20;;;12617:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12727:1;12706:23;;:9;:23;;;12698:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12783:47;12804:6;12812:9;12823:6;12783:20;:47::i;:::-;12864:71;12886:6;12864:71;;;;;;;;;;;;;;;;;:9;:17;12874:6;12864:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12844:9;:17;12854:6;12844:17;;;;;;;;;;;;;;;:91;;;;12969:32;12994:6;12969:9;:20;12979:9;12969:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;12946:9;:20;12956:9;12946:20;;;;;;;;;;;;;;;:55;;;;13034:9;13017:35;;13026:6;13017:35;;;13045:6;13017:35;;;;;;:::i;:::-;;;;;;;;12485:575;;;:::o;42338:1309::-;42377:23;42403:24;42421:4;42403:9;:24::i;:::-;42377:50;;42438:25;42487:12;;42466:18;;:33;;;;:::i;:::-;42438:61;;42510:12;42558:1;42539:15;:20;:46;;;;42584:1;42563:17;:22;42539:46;42536:60;;;42588:7;;;;;42536:60;42651:2;42630:18;;:23;;;;:::i;:::-;42612:15;:41;42609:111;;;42706:2;42685:18;;:23;;;;:::i;:::-;42667:41;;42609:111;42782:23;42867:1;42847:17;42826:18;;42808:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;42782:86;;42879:26;42908:36;42928:15;42908;:19;;:36;;;;:::i;:::-;42879:65;;42958:25;42986:21;42958:49;;43021:36;43038:18;43021:16;:36::i;:::-;43072:18;43093:44;43119:17;43093:21;:25;;:44;;;;:::i;:::-;43072:65;;43151:17;43171:51;43204:17;43171:28;43186:12;;43171:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;43151:71;;43233:23;43272:9;43259:10;:22;;;;:::i;:::-;43233:48;;43316:1;43295:18;:22;;;;43343:1;43328:12;:16;;;;43379:9;;;;;;;;;;;43371:23;;43402:9;43371:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43358:58;;;;;43451:1;43433:15;:19;:42;;;;;43474:1;43456:15;:19;43433:42;43430:210;;;43491:46;43504:15;43521;43491:12;:46::i;:::-;43557:71;43572:18;43592:15;43609:18;;43557:71;;;;;;;;:::i;:::-;;;;;;;;43430:210;42366:1281;;;;;;;;;42338:1309;:::o;17661:473::-;17719:7;17969:1;17964;:6;17960:47;;17994:1;17987:8;;;;17960:47;18020:9;18036:1;18032;:5;;;;:::i;:::-;18020:17;;18065:1;18060;18056;:5;;;;:::i;:::-;:10;18048:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18125:1;18118:8;;;17661:473;;;;;:::o;18611:132::-;18669:7;18696:39;18700:1;18703;18696:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18689:46;;18611:132;;;;:::o;15906:125::-;;;;:::o;16768:136::-;16826:7;16853:43;16857:1;16860;16853:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16846:50;;16768:136;;;;:::o;41203:597::-;41332:21;41370:1;41356:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41332:40;;41401:4;41383;41388:1;41383:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;41427:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41417:4;41422:1;41417:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;41463:62;41480:4;41495:15;41513:11;41463:8;:62::i;:::-;41565:15;:66;;;41646:11;41672:1;41716:4;41743;41763:15;41565:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41258:542;41203:597;:::o;41809:520::-;41957:62;41974:4;41989:15;42007:11;41957:8;:62::i;:::-;42063:15;:31;;;42102:9;42135:4;42155:11;42181:1;42224;42275:4;42295:15;42063:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41809:520;;:::o;19240:279::-;19326:7;19358:1;19354;:5;19361:12;19346:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19385:9;19401:1;19397;:5;;;;:::i;:::-;19385:17;;19510:1;19503:8;;;19240:279;;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:329::-;4033:6;4082:2;4070:9;4061:7;4057:23;4053:32;4050:119;;;4088:79;;:::i;:::-;4050:119;4208:1;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4179:117;3974:329;;;;:::o;4309:60::-;4337:3;4358:5;4351:12;;4309:60;;;:::o;4375:142::-;4425:9;4458:53;4476:34;4485:24;4503:5;4485:24;:::i;:::-;4476:34;:::i;:::-;4458:53;:::i;:::-;4445:66;;4375:142;;;:::o;4523:126::-;4573:9;4606:37;4637:5;4606:37;:::i;:::-;4593:50;;4523:126;;;:::o;4655:153::-;4732:9;4765:37;4796:5;4765:37;:::i;:::-;4752:50;;4655:153;;;:::o;4814:185::-;4928:64;4986:5;4928:64;:::i;:::-;4923:3;4916:77;4814:185;;:::o;5005:276::-;5125:4;5163:2;5152:9;5148:18;5140:26;;5176:98;5271:1;5260:9;5256:17;5247:6;5176:98;:::i;:::-;5005:276;;;;:::o;5287:118::-;5374:24;5392:5;5374:24;:::i;:::-;5369:3;5362:37;5287:118;;:::o;5411:222::-;5504:4;5542:2;5531:9;5527:18;5519:26;;5555:71;5623:1;5612:9;5608:17;5599:6;5555:71;:::i;:::-;5411:222;;;;:::o;5639:329::-;5698:6;5747:2;5735:9;5726:7;5722:23;5718:32;5715:119;;;5753:79;;:::i;:::-;5715:119;5873:1;5898:53;5943:7;5934:6;5923:9;5919:22;5898:53;:::i;:::-;5888:63;;5844:117;5639:329;;;;:::o;5974:619::-;6051:6;6059;6067;6116:2;6104:9;6095:7;6091:23;6087:32;6084:119;;;6122:79;;:::i;:::-;6084:119;6242:1;6267:53;6312:7;6303:6;6292:9;6288:22;6267:53;:::i;:::-;6257:63;;6213:117;6369:2;6395:53;6440:7;6431:6;6420:9;6416:22;6395:53;:::i;:::-;6385:63;;6340:118;6497:2;6523:53;6568:7;6559:6;6548:9;6544:22;6523:53;:::i;:::-;6513:63;;6468:118;5974:619;;;;;:::o;6599:116::-;6669:21;6684:5;6669:21;:::i;:::-;6662:5;6659:32;6649:60;;6705:1;6702;6695:12;6649:60;6599:116;:::o;6721:133::-;6764:5;6802:6;6789:20;6780:29;;6818:30;6842:5;6818:30;:::i;:::-;6721:133;;;;:::o;6860:468::-;6925:6;6933;6982:2;6970:9;6961:7;6957:23;6953:32;6950:119;;;6988:79;;:::i;:::-;6950:119;7108:1;7133:53;7178:7;7169:6;7158:9;7154:22;7133:53;:::i;:::-;7123:63;;7079:117;7235:2;7261:50;7303:7;7294:6;7283:9;7279:22;7261:50;:::i;:::-;7251:60;;7206:115;6860:468;;;;;:::o;7334:86::-;7369:7;7409:4;7402:5;7398:16;7387:27;;7334:86;;;:::o;7426:112::-;7509:22;7525:5;7509:22;:::i;:::-;7504:3;7497:35;7426:112;;:::o;7544:214::-;7633:4;7671:2;7660:9;7656:18;7648:26;;7684:67;7748:1;7737:9;7733:17;7724:6;7684:67;:::i;:::-;7544:214;;;;:::o;7764:118::-;7851:24;7869:5;7851:24;:::i;:::-;7846:3;7839:37;7764:118;;:::o;7888:222::-;7981:4;8019:2;8008:9;8004:18;7996:26;;8032:71;8100:1;8089:9;8085:17;8076:6;8032:71;:::i;:::-;7888:222;;;;:::o;8116:323::-;8172:6;8221:2;8209:9;8200:7;8196:23;8192:32;8189:119;;;8227:79;;:::i;:::-;8189:119;8347:1;8372:50;8414:7;8405:6;8394:9;8390:22;8372:50;:::i;:::-;8362:60;;8318:114;8116:323;;;;:::o;8445:117::-;8554:1;8551;8544:12;8568:117;8677:1;8674;8667:12;8691:117;8800:1;8797;8790:12;8831:568;8904:8;8914:6;8964:3;8957:4;8949:6;8945:17;8941:27;8931:122;;8972:79;;:::i;:::-;8931:122;9085:6;9072:20;9062:30;;9115:18;9107:6;9104:30;9101:117;;;9137:79;;:::i;:::-;9101:117;9251:4;9243:6;9239:17;9227:29;;9305:3;9297:4;9289:6;9285:17;9275:8;9271:32;9268:41;9265:128;;;9312:79;;:::i;:::-;9265:128;8831:568;;;;;:::o;9422:::-;9495:8;9505:6;9555:3;9548:4;9540:6;9536:17;9532:27;9522:122;;9563:79;;:::i;:::-;9522:122;9676:6;9663:20;9653:30;;9706:18;9698:6;9695:30;9692:117;;;9728:79;;:::i;:::-;9692:117;9842:4;9834:6;9830:17;9818:29;;9896:3;9888:4;9880:6;9876:17;9866:8;9862:32;9859:41;9856:128;;;9903:79;;:::i;:::-;9856:128;9422:568;;;;;:::o;9996:934::-;10118:6;10126;10134;10142;10191:2;10179:9;10170:7;10166:23;10162:32;10159:119;;;10197:79;;:::i;:::-;10159:119;10345:1;10334:9;10330:17;10317:31;10375:18;10367:6;10364:30;10361:117;;;10397:79;;:::i;:::-;10361:117;10510:80;10582:7;10573:6;10562:9;10558:22;10510:80;:::i;:::-;10492:98;;;;10288:312;10667:2;10656:9;10652:18;10639:32;10698:18;10690:6;10687:30;10684:117;;;10720:79;;:::i;:::-;10684:117;10833:80;10905:7;10896:6;10885:9;10881:22;10833:80;:::i;:::-;10815:98;;;;10610:313;9996:934;;;;;;;:::o;10936:474::-;11004:6;11012;11061:2;11049:9;11040:7;11036:23;11032:32;11029:119;;;11067:79;;:::i;:::-;11029:119;11187:1;11212:53;11257:7;11248:6;11237:9;11233:22;11212:53;:::i;:::-;11202:63;;11158:117;11314:2;11340:53;11385:7;11376:6;11365:9;11361:22;11340:53;:::i;:::-;11330:63;;11285:118;10936:474;;;;;:::o;11416:182::-;11556:34;11552:1;11544:6;11540:14;11533:58;11416:182;:::o;11604:366::-;11746:3;11767:67;11831:2;11826:3;11767:67;:::i;:::-;11760:74;;11843:93;11932:3;11843:93;:::i;:::-;11961:2;11956:3;11952:12;11945:19;;11604:366;;;:::o;11976:419::-;12142:4;12180:2;12169:9;12165:18;12157:26;;12229:9;12223:4;12219:20;12215:1;12204:9;12200:17;12193:47;12257:131;12383:4;12257:131;:::i;:::-;12249:139;;11976:419;;;:::o;12401:180::-;12449:77;12446:1;12439:88;12546:4;12543:1;12536:15;12570:4;12567:1;12560:15;12587:305;12627:3;12646:20;12664:1;12646:20;:::i;:::-;12641:25;;12680:20;12698:1;12680:20;:::i;:::-;12675:25;;12834:1;12766:66;12762:74;12759:1;12756:81;12753:107;;;12840:18;;:::i;:::-;12753:107;12884:1;12881;12877:9;12870:16;;12587:305;;;;:::o;12898:160::-;13038:12;13034:1;13026:6;13022:14;13015:36;12898:160;:::o;13064:366::-;13206:3;13227:67;13291:2;13286:3;13227:67;:::i;:::-;13220:74;;13303:93;13392:3;13303:93;:::i;:::-;13421:2;13416:3;13412:12;13405:19;;13064:366;;;:::o;13436:419::-;13602:4;13640:2;13629:9;13625:18;13617:26;;13689:9;13683:4;13679:20;13675:1;13664:9;13660:17;13653:47;13717:131;13843:4;13717:131;:::i;:::-;13709:139;;13436:419;;;:::o;13861:180::-;13909:77;13906:1;13899:88;14006:4;14003:1;13996:15;14030:4;14027:1;14020:15;14047:320;14091:6;14128:1;14122:4;14118:12;14108:22;;14175:1;14169:4;14165:12;14196:18;14186:81;;14252:4;14244:6;14240:17;14230:27;;14186:81;14314:2;14306:6;14303:14;14283:18;14280:38;14277:84;;14333:18;;:::i;:::-;14277:84;14098:269;14047:320;;;:::o;14373:348::-;14413:7;14436:20;14454:1;14436:20;:::i;:::-;14431:25;;14470:20;14488:1;14470:20;:::i;:::-;14465:25;;14658:1;14590:66;14586:74;14583:1;14580:81;14575:1;14568:9;14561:17;14557:105;14554:131;;;14665:18;;:::i;:::-;14554:131;14713:1;14710;14706:9;14695:20;;14373:348;;;;:::o;14727:180::-;14775:77;14772:1;14765:88;14872:4;14869:1;14862:15;14896:4;14893:1;14886:15;14913:185;14953:1;14970:20;14988:1;14970:20;:::i;:::-;14965:25;;15004:20;15022:1;15004:20;:::i;:::-;14999:25;;15043:1;15033:35;;15048:18;;:::i;:::-;15033:35;15090:1;15087;15083:9;15078:14;;14913:185;;;;:::o;15104:234::-;15244:34;15240:1;15232:6;15228:14;15221:58;15313:17;15308:2;15300:6;15296:15;15289:42;15104:234;:::o;15344:366::-;15486:3;15507:67;15571:2;15566:3;15507:67;:::i;:::-;15500:74;;15583:93;15672:3;15583:93;:::i;:::-;15701:2;15696:3;15692:12;15685:19;;15344:366;;;:::o;15716:419::-;15882:4;15920:2;15909:9;15905:18;15897:26;;15969:9;15963:4;15959:20;15955:1;15944:9;15940:17;15933:47;15997:131;16123:4;15997:131;:::i;:::-;15989:139;;15716:419;;;:::o;16141:244::-;16281:34;16277:1;16269:6;16265:14;16258:58;16350:27;16345:2;16337:6;16333:15;16326:52;16141:244;:::o;16391:366::-;16533:3;16554:67;16618:2;16613:3;16554:67;:::i;:::-;16547:74;;16630:93;16719:3;16630:93;:::i;:::-;16748:2;16743:3;16739:12;16732:19;;16391:366;;;:::o;16763:419::-;16929:4;16967:2;16956:9;16952:18;16944:26;;17016:9;17010:4;17006:20;17002:1;16991:9;16987:17;16980:47;17044:131;17170:4;17044:131;:::i;:::-;17036:139;;16763:419;;;:::o;17188:180::-;17236:77;17233:1;17226:88;17333:4;17330:1;17323:15;17357:4;17354:1;17347:15;17374:102;17416:8;17463:5;17460:1;17456:13;17435:34;;17374:102;;;:::o;17482:848::-;17543:5;17550:4;17574:6;17565:15;;17598:5;17589:14;;17612:712;17633:1;17623:8;17620:15;17612:712;;;17728:4;17723:3;17719:14;17713:4;17710:24;17707:50;;;17737:18;;:::i;:::-;17707:50;17787:1;17777:8;17773:16;17770:451;;;18202:4;18195:5;18191:16;18182:25;;17770:451;18252:4;18246;18242:15;18234:23;;18282:32;18305:8;18282:32;:::i;:::-;18270:44;;17612:712;;;17482:848;;;;;;;:::o;18336:1073::-;18390:5;18581:8;18571:40;;18602:1;18593:10;;18604:5;;18571:40;18630:4;18620:36;;18647:1;18638:10;;18649:5;;18620:36;18716:4;18764:1;18759:27;;;;18800:1;18795:191;;;;18709:277;;18759:27;18777:1;18768:10;;18779:5;;;18795:191;18840:3;18830:8;18827:17;18824:43;;;18847:18;;:::i;:::-;18824:43;18896:8;18893:1;18889:16;18880:25;;18931:3;18924:5;18921:14;18918:40;;;18938:18;;:::i;:::-;18918:40;18971:5;;;18709:277;;19095:2;19085:8;19082:16;19076:3;19070:4;19067:13;19063:36;19045:2;19035:8;19032:16;19027:2;19021:4;19018:12;19014:35;18998:111;18995:246;;;19151:8;19145:4;19141:19;19132:28;;19186:3;19179:5;19176:14;19173:40;;;19193:18;;:::i;:::-;19173:40;19226:5;;18995:246;19266:42;19304:3;19294:8;19288:4;19285:1;19266:42;:::i;:::-;19251:57;;;;19340:4;19335:3;19331:14;19324:5;19321:25;19318:51;;;19349:18;;:::i;:::-;19318:51;19398:4;19391:5;19387:16;19378:25;;18336:1073;;;;;;:::o;19415:281::-;19473:5;19497:23;19515:4;19497:23;:::i;:::-;19489:31;;19541:25;19557:8;19541:25;:::i;:::-;19529:37;;19585:104;19622:66;19612:8;19606:4;19585:104;:::i;:::-;19576:113;;19415:281;;;;:::o;19702:233::-;19741:3;19764:24;19782:5;19764:24;:::i;:::-;19755:33;;19810:66;19803:5;19800:77;19797:103;;19880:18;;:::i;:::-;19797:103;19927:1;19920:5;19916:13;19909:20;;19702:233;;;:::o;19941:223::-;20081:34;20077:1;20069:6;20065:14;20058:58;20150:6;20145:2;20137:6;20133:15;20126:31;19941:223;:::o;20170:366::-;20312:3;20333:67;20397:2;20392:3;20333:67;:::i;:::-;20326:74;;20409:93;20498:3;20409:93;:::i;:::-;20527:2;20522:3;20518:12;20511:19;;20170:366;;;:::o;20542:419::-;20708:4;20746:2;20735:9;20731:18;20723:26;;20795:9;20789:4;20785:20;20781:1;20770:9;20766:17;20759:47;20823:131;20949:4;20823:131;:::i;:::-;20815:139;;20542:419;;;:::o;20967:240::-;21107:34;21103:1;21095:6;21091:14;21084:58;21176:23;21171:2;21163:6;21159:15;21152:48;20967:240;:::o;21213:366::-;21355:3;21376:67;21440:2;21435:3;21376:67;:::i;:::-;21369:74;;21452:93;21541:3;21452:93;:::i;:::-;21570:2;21565:3;21561:12;21554:19;;21213:366;;;:::o;21585:419::-;21751:4;21789:2;21778:9;21774:18;21766:26;;21838:9;21832:4;21828:20;21824:1;21813:9;21809:17;21802:47;21866:131;21992:4;21866:131;:::i;:::-;21858:139;;21585:419;;;:::o;22010:239::-;22150:34;22146:1;22138:6;22134:14;22127:58;22219:22;22214:2;22206:6;22202:15;22195:47;22010:239;:::o;22255:366::-;22397:3;22418:67;22482:2;22477:3;22418:67;:::i;:::-;22411:74;;22494:93;22583:3;22494:93;:::i;:::-;22612:2;22607:3;22603:12;22596:19;;22255:366;;;:::o;22627:419::-;22793:4;22831:2;22820:9;22816:18;22808:26;;22880:9;22874:4;22870:20;22866:1;22855:9;22851:17;22844:47;22908:131;23034:4;22908:131;:::i;:::-;22900:139;;22627:419;;;:::o;23052:225::-;23192:34;23188:1;23180:6;23176:14;23169:58;23261:8;23256:2;23248:6;23244:15;23237:33;23052:225;:::o;23283:366::-;23425:3;23446:67;23510:2;23505:3;23446:67;:::i;:::-;23439:74;;23522:93;23611:3;23522:93;:::i;:::-;23640:2;23635:3;23631:12;23624:19;;23283:366;;;:::o;23655:419::-;23821:4;23859:2;23848:9;23844:18;23836:26;;23908:9;23902:4;23898:20;23894:1;23883:9;23879:17;23872:47;23936:131;24062:4;23936:131;:::i;:::-;23928:139;;23655:419;;;:::o;24080:177::-;24220:29;24216:1;24208:6;24204:14;24197:53;24080:177;:::o;24263:366::-;24405:3;24426:67;24490:2;24485:3;24426:67;:::i;:::-;24419:74;;24502:93;24591:3;24502:93;:::i;:::-;24620:2;24615:3;24611:12;24604:19;;24263:366;;;:::o;24635:419::-;24801:4;24839:2;24828:9;24824:18;24816:26;;24888:9;24882:4;24878:20;24874:1;24863:9;24859:17;24852:47;24916:131;25042:4;24916:131;:::i;:::-;24908:139;;24635:419;;;:::o;25060:223::-;25200:34;25196:1;25188:6;25184:14;25177:58;25269:6;25264:2;25256:6;25252:15;25245:31;25060:223;:::o;25289:366::-;25431:3;25452:67;25516:2;25511:3;25452:67;:::i;:::-;25445:74;;25528:93;25617:3;25528:93;:::i;:::-;25646:2;25641:3;25637:12;25630:19;;25289:366;;;:::o;25661:419::-;25827:4;25865:2;25854:9;25850:18;25842:26;;25914:9;25908:4;25904:20;25900:1;25889:9;25885:17;25878:47;25942:131;26068:4;25942:131;:::i;:::-;25934:139;;25661:419;;;:::o;26086:221::-;26226:34;26222:1;26214:6;26210:14;26203:58;26295:4;26290:2;26282:6;26278:15;26271:29;26086:221;:::o;26313:366::-;26455:3;26476:67;26540:2;26535:3;26476:67;:::i;:::-;26469:74;;26552:93;26641:3;26552:93;:::i;:::-;26670:2;26665:3;26661:12;26654:19;;26313:366;;;:::o;26685:419::-;26851:4;26889:2;26878:9;26874:18;26866:26;;26938:9;26932:4;26928:20;26924:1;26913:9;26909:17;26902:47;26966:131;27092:4;26966:131;:::i;:::-;26958:139;;26685:419;;;:::o;27110:224::-;27250:34;27246:1;27238:6;27234:14;27227:58;27319:7;27314:2;27306:6;27302:15;27295:32;27110:224;:::o;27340:366::-;27482:3;27503:67;27567:2;27562:3;27503:67;:::i;:::-;27496:74;;27579:93;27668:3;27579:93;:::i;:::-;27697:2;27692:3;27688:12;27681:19;;27340:366;;;:::o;27712:419::-;27878:4;27916:2;27905:9;27901:18;27893:26;;27965:9;27959:4;27955:20;27951:1;27940:9;27936:17;27929:47;27993:131;28119:4;27993:131;:::i;:::-;27985:139;;27712:419;;;:::o;28137:222::-;28277:34;28273:1;28265:6;28261:14;28254:58;28346:5;28341:2;28333:6;28329:15;28322:30;28137:222;:::o;28365:366::-;28507:3;28528:67;28592:2;28587:3;28528:67;:::i;:::-;28521:74;;28604:93;28693:3;28604:93;:::i;:::-;28722:2;28717:3;28713:12;28706:19;;28365:366;;;:::o;28737:419::-;28903:4;28941:2;28930:9;28926:18;28918:26;;28990:9;28984:4;28980:20;28976:1;28965:9;28961:17;28954:47;29018:131;29144:4;29018:131;:::i;:::-;29010:139;;28737:419;;;:::o;29162:236::-;29302:34;29298:1;29290:6;29286:14;29279:58;29371:19;29366:2;29358:6;29354:15;29347:44;29162:236;:::o;29404:366::-;29546:3;29567:67;29631:2;29626:3;29567:67;:::i;:::-;29560:74;;29643:93;29732:3;29643:93;:::i;:::-;29761:2;29756:3;29752:12;29745:19;;29404:366;;;:::o;29776:419::-;29942:4;29980:2;29969:9;29965:18;29957:26;;30029:9;30023:4;30019:20;30015:1;30004:9;30000:17;29993:47;30057:131;30183:4;30057:131;:::i;:::-;30049:139;;29776:419;;;:::o;30201:172::-;30341:24;30337:1;30329:6;30325:14;30318:48;30201:172;:::o;30379:366::-;30521:3;30542:67;30606:2;30601:3;30542:67;:::i;:::-;30535:74;;30618:93;30707:3;30618:93;:::i;:::-;30736:2;30731:3;30727:12;30720:19;;30379:366;;;:::o;30751:419::-;30917:4;30955:2;30944:9;30940:18;30932:26;;31004:9;30998:4;30994:20;30990:1;30979:9;30975:17;30968:47;31032:131;31158:4;31032:131;:::i;:::-;31024:139;;30751:419;;;:::o;31176:297::-;31316:34;31312:1;31304:6;31300:14;31293:58;31385:34;31380:2;31372:6;31368:15;31361:59;31454:11;31449:2;31441:6;31437:15;31430:36;31176:297;:::o;31479:366::-;31621:3;31642:67;31706:2;31701:3;31642:67;:::i;:::-;31635:74;;31718:93;31807:3;31718:93;:::i;:::-;31836:2;31831:3;31827:12;31820:19;;31479:366;;;:::o;31851:419::-;32017:4;32055:2;32044:9;32040:18;32032:26;;32104:9;32098:4;32094:20;32090:1;32079:9;32075:17;32068:47;32132:131;32258:4;32132:131;:::i;:::-;32124:139;;31851:419;;;:::o;32276:240::-;32416:34;32412:1;32404:6;32400:14;32393:58;32485:23;32480:2;32472:6;32468:15;32461:48;32276:240;:::o;32522:366::-;32664:3;32685:67;32749:2;32744:3;32685:67;:::i;:::-;32678:74;;32761:93;32850:3;32761:93;:::i;:::-;32879:2;32874:3;32870:12;32863:19;;32522:366;;;:::o;32894:419::-;33060:4;33098:2;33087:9;33083:18;33075:26;;33147:9;33141:4;33137:20;33133:1;33122:9;33118:17;33111:47;33175:131;33301:4;33175:131;:::i;:::-;33167:139;;32894:419;;;:::o;33319:169::-;33459:21;33455:1;33447:6;33443:14;33436:45;33319:169;:::o;33494:366::-;33636:3;33657:67;33721:2;33716:3;33657:67;:::i;:::-;33650:74;;33733:93;33822:3;33733:93;:::i;:::-;33851:2;33846:3;33842:12;33835:19;;33494:366;;;:::o;33866:419::-;34032:4;34070:2;34059:9;34055:18;34047:26;;34119:9;34113:4;34109:20;34105:1;34094:9;34090:17;34083:47;34147:131;34273:4;34147:131;:::i;:::-;34139:139;;33866:419;;;:::o;34291:241::-;34431:34;34427:1;34419:6;34415:14;34408:58;34500:24;34495:2;34487:6;34483:15;34476:49;34291:241;:::o;34538:366::-;34680:3;34701:67;34765:2;34760:3;34701:67;:::i;:::-;34694:74;;34777:93;34866:3;34777:93;:::i;:::-;34895:2;34890:3;34886:12;34879:19;;34538:366;;;:::o;34910:419::-;35076:4;35114:2;35103:9;35099:18;35091:26;;35163:9;35157:4;35153:20;35149:1;35138:9;35134:17;35127:47;35191:131;35317:4;35191:131;:::i;:::-;35183:139;;34910:419;;;:::o;35335:191::-;35375:4;35395:20;35413:1;35395:20;:::i;:::-;35390:25;;35429:20;35447:1;35429:20;:::i;:::-;35424:25;;35468:1;35465;35462:8;35459:34;;;35473:18;;:::i;:::-;35459:34;35518:1;35515;35511:9;35503:17;;35335:191;;;;:::o;35532:147::-;35633:11;35670:3;35655:18;;35532:147;;;;:::o;35685:114::-;;:::o;35805:398::-;35964:3;35985:83;36066:1;36061:3;35985:83;:::i;:::-;35978:90;;36077:93;36166:3;36077:93;:::i;:::-;36195:1;36190:3;36186:11;36179:18;;35805:398;;;:::o;36209:379::-;36393:3;36415:147;36558:3;36415:147;:::i;:::-;36408:154;;36579:3;36572:10;;36209:379;;;:::o;36594:442::-;36743:4;36781:2;36770:9;36766:18;36758:26;;36794:71;36862:1;36851:9;36847:17;36838:6;36794:71;:::i;:::-;36875:72;36943:2;36932:9;36928:18;36919:6;36875:72;:::i;:::-;36957;37025:2;37014:9;37010:18;37001:6;36957:72;:::i;:::-;36594:442;;;;;;:::o;37042:220::-;37182:34;37178:1;37170:6;37166:14;37159:58;37251:3;37246:2;37238:6;37234:15;37227:28;37042:220;:::o;37268:366::-;37410:3;37431:67;37495:2;37490:3;37431:67;:::i;:::-;37424:74;;37507:93;37596:3;37507:93;:::i;:::-;37625:2;37620:3;37616:12;37609:19;;37268:366;;;:::o;37640:419::-;37806:4;37844:2;37833:9;37829:18;37821:26;;37893:9;37887:4;37883:20;37879:1;37868:9;37864:17;37857:47;37921:131;38047:4;37921:131;:::i;:::-;37913:139;;37640:419;;;:::o;38065:180::-;38113:77;38110:1;38103:88;38210:4;38207:1;38200:15;38234:4;38231:1;38224:15;38251:143;38308:5;38339:6;38333:13;38324:22;;38355:33;38382:5;38355:33;:::i;:::-;38251:143;;;;:::o;38400:351::-;38470:6;38519:2;38507:9;38498:7;38494:23;38490:32;38487:119;;;38525:79;;:::i;:::-;38487:119;38645:1;38670:64;38726:7;38717:6;38706:9;38702:22;38670:64;:::i;:::-;38660:74;;38616:128;38400:351;;;;:::o;38757:85::-;38802:7;38831:5;38820:16;;38757:85;;;:::o;38848:158::-;38906:9;38939:61;38957:42;38966:32;38992:5;38966:32;:::i;:::-;38957:42;:::i;:::-;38939:61;:::i;:::-;38926:74;;38848:158;;;:::o;39012:147::-;39107:45;39146:5;39107:45;:::i;:::-;39102:3;39095:58;39012:147;;:::o;39165:114::-;39232:6;39266:5;39260:12;39250:22;;39165:114;;;:::o;39285:184::-;39384:11;39418:6;39413:3;39406:19;39458:4;39453:3;39449:14;39434:29;;39285:184;;;;:::o;39475:132::-;39542:4;39565:3;39557:11;;39595:4;39590:3;39586:14;39578:22;;39475:132;;;:::o;39613:108::-;39690:24;39708:5;39690:24;:::i;:::-;39685:3;39678:37;39613:108;;:::o;39727:179::-;39796:10;39817:46;39859:3;39851:6;39817:46;:::i;:::-;39895:4;39890:3;39886:14;39872:28;;39727:179;;;;:::o;39912:113::-;39982:4;40014;40009:3;40005:14;39997:22;;39912:113;;;:::o;40061:732::-;40180:3;40209:54;40257:5;40209:54;:::i;:::-;40279:86;40358:6;40353:3;40279:86;:::i;:::-;40272:93;;40389:56;40439:5;40389:56;:::i;:::-;40468:7;40499:1;40484:284;40509:6;40506:1;40503:13;40484:284;;;40585:6;40579:13;40612:63;40671:3;40656:13;40612:63;:::i;:::-;40605:70;;40698:60;40751:6;40698:60;:::i;:::-;40688:70;;40544:224;40531:1;40528;40524:9;40519:14;;40484:284;;;40488:14;40784:3;40777:10;;40185:608;;;40061:732;;;;:::o;40799:831::-;41062:4;41100:3;41089:9;41085:19;41077:27;;41114:71;41182:1;41171:9;41167:17;41158:6;41114:71;:::i;:::-;41195:80;41271:2;41260:9;41256:18;41247:6;41195:80;:::i;:::-;41322:9;41316:4;41312:20;41307:2;41296:9;41292:18;41285:48;41350:108;41453:4;41444:6;41350:108;:::i;:::-;41342:116;;41468:72;41536:2;41525:9;41521:18;41512:6;41468:72;:::i;:::-;41550:73;41618:3;41607:9;41603:19;41594:6;41550:73;:::i;:::-;40799:831;;;;;;;;:::o;41636:807::-;41885:4;41923:3;41912:9;41908:19;41900:27;;41937:71;42005:1;41994:9;41990:17;41981:6;41937:71;:::i;:::-;42018:72;42086:2;42075:9;42071:18;42062:6;42018:72;:::i;:::-;42100:80;42176:2;42165:9;42161:18;42152:6;42100:80;:::i;:::-;42190;42266:2;42255:9;42251:18;42242:6;42190:80;:::i;:::-;42280:73;42348:3;42337:9;42333:19;42324:6;42280:73;:::i;:::-;42363;42431:3;42420:9;42416:19;42407:6;42363:73;:::i;:::-;41636:807;;;;;;;;;:::o;42449:143::-;42506:5;42537:6;42531:13;42522:22;;42553:33;42580:5;42553:33;:::i;:::-;42449:143;;;;:::o;42598:663::-;42686:6;42694;42702;42751:2;42739:9;42730:7;42726:23;42722:32;42719:119;;;42757:79;;:::i;:::-;42719:119;42877:1;42902:64;42958:7;42949:6;42938:9;42934:22;42902:64;:::i;:::-;42892:74;;42848:128;43015:2;43041:64;43097:7;43088:6;43077:9;43073:22;43041:64;:::i;:::-;43031:74;;42986:129;43154:2;43180:64;43236:7;43227:6;43216:9;43212:22;43180:64;:::i;:::-;43170:74;;43125:129;42598:663;;;;;:::o

Swarm Source

ipfs://6308791fe60c898f3503e544a717944b57d7e7f7a1b7539792bf33e71516a297
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.