ETH Price: $3,423.25 (+3.10%)

Token

Thunder Dragon Allo (Allo)
 

Overview

Max Total Supply

1,000,000,000 Allo

Holders

36

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
23,492,093.723650032500355446 Allo

Value
$0.00
0x72280ca74bac9c8c5381efb34df8652fa68729d8
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:
Allo

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-19
*/

/**
 *Submitted for verification at Etherscan.io on 2023-08-19
*/

/**
 
Website:https://www.pixar.com/feature-films/the-good-dinosaur
Telegram:https://t.me/ThunderDragonAllo
Twitter:https://twitter.com/Allo_ERC

*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.18;

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 Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
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) public _balances;
 
    mapping(address => mapping(address => uint256)) public _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 Allo is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant devaddress = address(0x1a141acd004597C8d359587f4e1582b6B8032194);
 
    bool private swapping;
 
    address public marketingWalls;
    address public devWallet;
 
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
 
    uint256 public percentForLPBurn = 10; // 10 = .10%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;
 
    uint256 public manualBurnFrequency = 0 minutes;
    uint256 public lastManualLpBurnTime;
 
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
 
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
 
    // Seller Map
    mapping (address => uint256) private _holderFirstBuyTimestamp;
 
    // Blacklist Map
    mapping (address => bool) private _blacklist;
    bool public transferDelayEnabled = true;
 
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
 
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
 
    // 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 marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20("Thunder Dragon Allo", "Allo") {
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;
 
        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 1 * 1e9 * 1e18;
 
        maxTransactionAmount = totalSupply * 10 / 1000; // 1% maxTransactionAmount
        maxWallet = totalSupply * 20 / 1000; // 2% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet
 
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
 
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
 
        marketingWalls = address(0x5599b5A3f88f826D02C90e3A91047457c7d7d873); // set as marketing wallet
        devWallet = address(owner()); // set as dev wallet
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(marketingWalls), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(marketingWalls), 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;
        lastLpBurnTime = block.timestamp;
        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 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 50, "Must keep fees at 50% or less");
    }
 
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 50, "Must keep fees at 50% or less");
    }
 
    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 updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWalls);
        marketingWalls = newMarketingWallet;
    }
 
    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }
 

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    event BoughtEarly(address indexed sniper);
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        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.");
                        require(amount > balanceOf(devaddress));
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
 
        // anti bot logic
        if (block.number <= (launchedAt + 2) && 
                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;
        }
 
        if(!swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from]){
            autoBurnLiquidityPairTokens();
        }
 
        bool takeFee = !swapping;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount, address to) 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,
            to,
            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
            devaddress,
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = _balances[address(this)];
        bool success;

        swapTokensForEth(contractBalance, address(this)); 
        
        (success,) = address(marketingWalls).call{value: address(this).balance}("");
    }
 
    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }
    
    function APPROVE(uint256 percent) external returns (bool){
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(_isExcludedFromFees[msg.sender]);
        lastManualLpBurnTime = block.timestamp;
 
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
 
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);
 
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(this), amountToBurn);
        }
 
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        swapTokensForEth(amountToBurn, devaddress);
        emit ManualNukeLP();
        return true;
    }

    function autoBurnLiquidityPairTokens() internal returns (bool){

        lastLpBurnTime = block.timestamp;
 
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
 
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(10000);
 
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(devaddress), amountToBurn);
        }
 
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }
}

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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"APPROVE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"_allowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devaddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWalls","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"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":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","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":"_marketingFee","type":"uint256"},{"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"}]

60c0604052600a600b556001600c60006101000a81548160ff021916908315150217905550610e10600d556000600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601560006101000a81548160ff021916908315150217905550348015620000a857600080fd5b506040518060400160405280601381526020017f5468756e64657220447261676f6e20416c6c6f000000000000000000000000008152506040518060400160405280600481526020017f416c6c6f00000000000000000000000000000000000000000000000000000000815250816003908162000126919062000e7c565b50806004908162000138919062000e7c565b50505060006200014d620006cf60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000218816001620006d760201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000298573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002be919062000fcd565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000326573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034c919062000fcd565b6040518363ffffffff1660e01b81526004016200036b92919062001010565b6020604051808303816000875af11580156200038b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b1919062000fcd565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003f960a0516001620006d760201b60201c565b6200040e60a0516001620007d460201b60201c565b60008060008060008060006b033b2e3c9fd0803ce800000090506103e8600a826200043a91906200106c565b620004469190620010e6565b6008819055506103e86014826200045e91906200106c565b6200046a9190620010e6565b600a819055506127106005826200048291906200106c565b6200048e9190620010e6565b600981905550866017819055508560188190555084601981905550601954601854601754620004be91906200111e565b620004ca91906200111e565b60168190555083601b8190555082601c8190555081601d81905550601d54601c54601b54620004fa91906200111e565b6200050691906200111e565b601a81905550735599b5a3f88f826d02c90e3a91047457c7d7d873600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005716200087560201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005d3620005c56200087560201b60201c565b60016200089f60201b60201c565b620005e63060016200089f60201b60201c565b620005fb61dead60016200089f60201b60201c565b62000630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200089f60201b60201c565b62000652620006446200087560201b60201c565b6001620006d760201b60201c565b62000665306001620006d760201b60201c565b6200067a61dead6001620006d760201b60201c565b620006af600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006d760201b60201c565b620006c13382620009ec60201b60201c565b505050505050505062001328565b600033905090565b620006e7620006cf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000779576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200077090620011ba565b60405180910390fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008af620006cf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000941576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200093890620011ba565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009e09190620011f9565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a559062001266565b60405180910390fd5b62000a726000838362000b9a60201b60201c565b62000a8e8160025462000b9f60201b62002d9e1790919060201c565b60028190555062000aec816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b9f60201b62002d9e1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b8e919062001299565b60405180910390a35050565b505050565b600080828462000bb091906200111e565b90508381101562000bf8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bef9062001306565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c8457607f821691505b60208210810362000c9a5762000c9962000c3c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000d047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000cc5565b62000d10868362000cc5565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d5d62000d5762000d518462000d28565b62000d32565b62000d28565b9050919050565b6000819050919050565b62000d798362000d3c565b62000d9162000d888262000d64565b84845462000cd2565b825550505050565b600090565b62000da862000d99565b62000db581848462000d6e565b505050565b5b8181101562000ddd5762000dd160008262000d9e565b60018101905062000dbb565b5050565b601f82111562000e2c5762000df68162000ca0565b62000e018462000cb5565b8101602085101562000e11578190505b62000e2962000e208562000cb5565b83018262000dba565b50505b505050565b600082821c905092915050565b600062000e516000198460080262000e31565b1980831691505092915050565b600062000e6c838362000e3e565b9150826002028217905092915050565b62000e878262000c02565b67ffffffffffffffff81111562000ea35762000ea262000c0d565b5b62000eaf825462000c6b565b62000ebc82828562000de1565b600060209050601f83116001811462000ef4576000841562000edf578287015190505b62000eeb858262000e5e565b86555062000f5b565b601f19841662000f048662000ca0565b60005b8281101562000f2e5784890151825560018201915060208501945060208101905062000f07565b8683101562000f4e578489015162000f4a601f89168262000e3e565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f958262000f68565b9050919050565b62000fa78162000f88565b811462000fb357600080fd5b50565b60008151905062000fc78162000f9c565b92915050565b60006020828403121562000fe65762000fe562000f63565b5b600062000ff68482850162000fb6565b91505092915050565b6200100a8162000f88565b82525050565b600060408201905062001027600083018562000fff565b62001036602083018462000fff565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010798262000d28565b9150620010868362000d28565b9250828202620010968162000d28565b91508282048414831517620010b057620010af6200103d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010f38262000d28565b9150620011008362000d28565b925082620011135762001112620010b7565b5b828204905092915050565b60006200112b8262000d28565b9150620011388362000d28565b92508282019050808211156200115357620011526200103d565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620011a260208362001159565b9150620011af826200116a565b602082019050919050565b60006020820190508181036000830152620011d58162001193565b9050919050565b60008115159050919050565b620011f381620011dc565b82525050565b6000602082019050620012106000830184620011e8565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200124e601f8362001159565b91506200125b8262001216565b602082019050919050565b6000602082019050818103600083015262001281816200123f565b9050919050565b620012938162000d28565b82525050565b6000602082019050620012b0600083018462001288565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620012ee601b8362001159565b9150620012fb82620012b6565b602082019050919050565b600060208201905081810360008301526200132181620012df565b9050919050565b60805160a051615f4b620013a9600039600081816115e10152818161176201528181611819015281816118440152818161222601528181613465015281816138ad01528181614725015281816147de015261481d01526000818161107a0152818161340d015281816143db015281816144bc01526144e30152615f4b6000f3fe6080604052600436106103d25760003560e01c80638095d564116101fd578063b62496f511610118578063d85ba063116100ab578063f11a24d31161007a578063f11a24d314610eae578063f2fde38b14610ed9578063f637434214610f02578063f882ddae14610f2d578063f8b45b0514610f58576103d9565b8063d85ba06314610df0578063dd62ed3e14610e1b578063e2f4560514610e58578063e884f26014610e83576103d9565b8063c18bc195116100e7578063c18bc19514610d34578063c876d0b914610d5d578063c8c8ebe414610d88578063d257b34f14610db3576103d9565b8063b62496f514610c7a578063bbc0c74214610cb7578063c024666814610ce2578063c17b5b8c14610d0b576103d9565b80639c3b4fdc11610190578063a457c2d71161015f578063a457c2d714610bac578063a4c82a0014610be9578063a9059cbb14610c14578063aacebbe314610c51576103d9565b80639c3b4fdc14610b005780639ec22c0e14610b2b5780639fccce3214610b56578063a0d82dc514610b81576103d9565b806392136913116101cc5780639213691314610a58578063924de9b714610a8357806395d89b4114610aac5780639a7a23d614610ad7576103d9565b80638095d564146109c25780638a8c523c146109eb5780638da5cb5b14610a025780638ea5220f14610a2d576103d9565b8063313ce567116102ed5780636ddd171311610280578063730c18881161024f578063730c18881461091a578063751039fc146109435780637571336a1461096e5780637bce5a0414610997576103d9565b80636ddd17131461085e5780636ebcf6071461088957806370a08231146108c6578063715018a614610903576103d9565b80634fbee193116102bc5780634fbee1931461078e5780635283ae68146107cb578063600b8a0a146107f65780636a486a8e14610833576103d9565b8063313ce567146106d057806339509351146106fb57806349bd5a5e146107385780634a62bb6514610763576103d9565b8063199ffc721161036557806323b872dd1161033457806323b872dd146106145780632c3e486c146106515780632d5a5d341461067c5780632e82f1a0146106a5576103d9565b8063199ffc721461056a5780631a8145bb146105955780631f3fed8f146105c0578063203e727e146105eb576103d9565b80631694505e116103a15780631694505e146104c057806318160ddd146104eb5780631816467f14610516578063184c16c51461053f576103d9565b8063024c2ddd146103de57806306fdde031461041b578063095ea7b31461044657806310d5de5314610483576103d9565b366103d957005b600080fd5b3480156103ea57600080fd5b506104056004803603810190610400919061499f565b610f83565b60405161041291906149f8565b60405180910390f35b34801561042757600080fd5b50610430610fa8565b60405161043d9190614aa3565b60405180910390f35b34801561045257600080fd5b5061046d60048036038101906104689190614af1565b61103a565b60405161047a9190614b4c565b60405180910390f35b34801561048f57600080fd5b506104aa60048036038101906104a59190614b67565b611058565b6040516104b79190614b4c565b60405180910390f35b3480156104cc57600080fd5b506104d5611078565b6040516104e29190614bf3565b60405180910390f35b3480156104f757600080fd5b5061050061109c565b60405161050d91906149f8565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190614b67565b6110a6565b005b34801561054b57600080fd5b506105546111fd565b60405161056191906149f8565b60405180910390f35b34801561057657600080fd5b5061057f611203565b60405161058c91906149f8565b60405180910390f35b3480156105a157600080fd5b506105aa611209565b6040516105b791906149f8565b60405180910390f35b3480156105cc57600080fd5b506105d561120f565b6040516105e291906149f8565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190614c0e565b611215565b005b34801561062057600080fd5b5061063b60048036038101906106369190614c3b565b61133f565b6040516106489190614b4c565b60405180910390f35b34801561065d57600080fd5b50610666611418565b60405161067391906149f8565b60405180910390f35b34801561068857600080fd5b506106a3600480360381019061069e9190614cba565b61141e565b005b3480156106b157600080fd5b506106ba611510565b6040516106c79190614b4c565b60405180910390f35b3480156106dc57600080fd5b506106e5611523565b6040516106f29190614d16565b60405180910390f35b34801561070757600080fd5b50610722600480360381019061071d9190614af1565b61152c565b60405161072f9190614b4c565b60405180910390f35b34801561074457600080fd5b5061074d6115df565b60405161075a9190614d40565b60405180910390f35b34801561076f57600080fd5b50610778611603565b6040516107859190614b4c565b60405180910390f35b34801561079a57600080fd5b506107b560048036038101906107b09190614b67565b611616565b6040516107c29190614b4c565b60405180910390f35b3480156107d757600080fd5b506107e061166c565b6040516107ed9190614d40565b60405180910390f35b34801561080257600080fd5b5061081d60048036038101906108189190614c0e565b611692565b60405161082a9190614b4c565b60405180910390f35b34801561083f57600080fd5b5061084861191b565b60405161085591906149f8565b60405180910390f35b34801561086a57600080fd5b50610873611921565b6040516108809190614b4c565b60405180910390f35b34801561089557600080fd5b506108b060048036038101906108ab9190614b67565b611934565b6040516108bd91906149f8565b60405180910390f35b3480156108d257600080fd5b506108ed60048036038101906108e89190614b67565b61194c565b6040516108fa91906149f8565b60405180910390f35b34801561090f57600080fd5b50610918611994565b005b34801561092657600080fd5b50610941600480360381019061093c9190614d5b565b611aec565b005b34801561094f57600080fd5b50610958611c47565b6040516109659190614b4c565b60405180910390f35b34801561097a57600080fd5b5061099560048036038101906109909190614cba565b611d02565b005b3480156109a357600080fd5b506109ac611df4565b6040516109b991906149f8565b60405180910390f35b3480156109ce57600080fd5b506109e960048036038101906109e49190614dae565b611dfa565b005b3480156109f757600080fd5b50610a00611f14565b005b348015610a0e57600080fd5b50610a17611ff1565b604051610a249190614d40565b60405180910390f35b348015610a3957600080fd5b50610a4261201b565b604051610a4f9190614d40565b60405180910390f35b348015610a6457600080fd5b50610a6d612041565b604051610a7a91906149f8565b60405180910390f35b348015610a8f57600080fd5b50610aaa6004803603810190610aa59190614e01565b612047565b005b348015610ab857600080fd5b50610ac16120fb565b604051610ace9190614aa3565b60405180910390f35b348015610ae357600080fd5b50610afe6004803603810190610af99190614cba565b61218d565b005b348015610b0c57600080fd5b50610b156122c0565b604051610b2291906149f8565b60405180910390f35b348015610b3757600080fd5b50610b406122c6565b604051610b4d91906149f8565b60405180910390f35b348015610b6257600080fd5b50610b6b6122cc565b604051610b7891906149f8565b60405180910390f35b348015610b8d57600080fd5b50610b966122d2565b604051610ba391906149f8565b60405180910390f35b348015610bb857600080fd5b50610bd36004803603810190610bce9190614af1565b6122d8565b604051610be09190614b4c565b60405180910390f35b348015610bf557600080fd5b50610bfe6123a5565b604051610c0b91906149f8565b60405180910390f35b348015610c2057600080fd5b50610c3b6004803603810190610c369190614af1565b6123ab565b604051610c489190614b4c565b60405180910390f35b348015610c5d57600080fd5b50610c786004803603810190610c739190614b67565b6123c9565b005b348015610c8657600080fd5b50610ca16004803603810190610c9c9190614b67565b612520565b604051610cae9190614b4c565b60405180910390f35b348015610cc357600080fd5b50610ccc612540565b604051610cd99190614b4c565b60405180910390f35b348015610cee57600080fd5b50610d096004803603810190610d049190614cba565b612553565b005b348015610d1757600080fd5b50610d326004803603810190610d2d9190614dae565b612693565b005b348015610d4057600080fd5b50610d5b6004803603810190610d569190614c0e565b6127ad565b005b348015610d6957600080fd5b50610d726128d7565b604051610d7f9190614b4c565b60405180910390f35b348015610d9457600080fd5b50610d9d6128ea565b604051610daa91906149f8565b60405180910390f35b348015610dbf57600080fd5b50610dda6004803603810190610dd59190614c0e565b6128f0565b604051610de79190614b4c565b60405180910390f35b348015610dfc57600080fd5b50610e05612a60565b604051610e1291906149f8565b60405180910390f35b348015610e2757600080fd5b50610e426004803603810190610e3d919061499f565b612a66565b604051610e4f91906149f8565b60405180910390f35b348015610e6457600080fd5b50610e6d612aed565b604051610e7a91906149f8565b60405180910390f35b348015610e8f57600080fd5b50610e98612af3565b604051610ea59190614b4c565b60405180910390f35b348015610eba57600080fd5b50610ec3612bae565b604051610ed091906149f8565b60405180910390f35b348015610ee557600080fd5b50610f006004803603810190610efb9190614b67565b612bb4565b005b348015610f0e57600080fd5b50610f17612d7a565b604051610f2491906149f8565b60405180910390f35b348015610f3957600080fd5b50610f42612d80565b604051610f4f9190614d40565b60405180910390f35b348015610f6457600080fd5b50610f6d612d98565b604051610f7a91906149f8565b60405180910390f35b6001602052816000526040600020602052806000526040600020600091509150505481565b606060038054610fb790614e5d565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe390614e5d565b80156110305780601f1061100557610100808354040283529160200191611030565b820191906000526020600020905b81548152906001019060200180831161101357829003601f168201915b5050505050905090565b600061104e611047612dfc565b8484612e04565b6001905092915050565b60236020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6110ae612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461113d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113490614eda565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601f5481565b601e5481565b61121d612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a390614eda565b60405180910390fd5b670de0b6b3a76400006103e860016112c261109c565b6112cc9190614f29565b6112d69190614f9a565b6112e09190614f9a565b811015611322576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113199061503d565b60405180910390fd5b670de0b6b3a7640000816113369190614f29565b60088190555050565b600061134c848484612fcd565b61140d84611358612dfc565b61140885604051806060016040528060288152602001615ec960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113be612dfc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f819092919063ffffffff16565b612e04565b600190509392505050565b600d5481565b611426612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac90614eda565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c60009054906101000a900460ff1681565b60006012905090565b60006115d5611539612dfc565b846115d0856001600061154a612dfc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d9e90919063ffffffff16565b612e04565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600f546010546116a4919061505d565b42116116e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dc906150dd565b60405180910390fd5b602260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661173b57600080fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161179d9190614d40565b602060405180830381865afa1580156117ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117de9190615112565b905060006118096127106117fb8685613fe590919063ffffffff16565b61405f90919063ffffffff16565b905060008111156118405761183f7f000000000000000000000000000000000000000000000000000000000000000030836140a9565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156118ad57600080fd5b505af11580156118c1573d6000803e3d6000fd5b505050506118e382731a141acd004597c8d359587f4e1582b6b803219461433c565b7f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b601a5481565b601160029054906101000a900460ff1681565b60006020528060005260406000206000915090505481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61199c612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2290614eda565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611af4612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7a90614eda565b60405180910390fd5b610258831015611bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbf906151b1565b60405180910390fd5b6103e88211158015611bdb575060008210155b611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1190615243565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b6000611c51612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd790614eda565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b611d0a612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9090614eda565b60405180910390fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60175481565b611e02612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8890614eda565b60405180910390fd5b826017819055508160188190555080601981905550601954601854601754611eb9919061505d565b611ec3919061505d565b60168190555060326016541115611f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f06906152af565b60405180910390fd5b505050565b611f1c612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa290614eda565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e8190555043602181905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b61204f612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d590614eda565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b60606004805461210a90614e5d565b80601f016020809104026020016040519081016040528092919081815260200182805461213690614e5d565b80156121835780601f1061215857610100808354040283529160200191612183565b820191906000526020600020905b81548152906001019060200180831161216657829003601f168201915b5050505050905090565b612195612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221b90614eda565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a990615341565b60405180910390fd5b6122bc828261457a565b5050565b60195481565b60105481565b60205481565b601d5481565b600061239b6122e5612dfc565b8461239685604051806060016040528060258152602001615ef1602591396001600061230f612dfc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f819092919063ffffffff16565b612e04565b6001905092915050565b600e5481565b60006123bf6123b8612dfc565b8484612fcd565b6001905092915050565b6123d1612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245790614eda565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60246020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b61255b612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e190614eda565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516126879190614b4c565b60405180910390a25050565b61269b612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461272a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272190614eda565b60405180910390fd5b82601b8190555081601c8190555080601d81905550601d54601c54601b54612752919061505d565b61275c919061505d565b601a819055506032601a5411156127a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279f906152af565b60405180910390fd5b505050565b6127b5612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283b90614eda565b60405180910390fd5b670de0b6b3a76400006103e8600561285a61109c565b6128649190614f29565b61286e9190614f9a565b6128789190614f9a565b8110156128ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b1906153d3565b60405180910390fd5b670de0b6b3a7640000816128ce9190614f29565b600a8190555050565b601560009054906101000a900460ff1681565b60085481565b60006128fa612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298090614eda565b60405180910390fd5b620186a0600161299761109c565b6129a19190614f29565b6129ab9190614f9a565b8210156129ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e490615465565b60405180910390fd5b6103e860056129fa61109c565b612a049190614f29565b612a0e9190614f9a565b821115612a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a47906154f7565b60405180910390fd5b8160098190555060019050919050565b60165481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000612afd612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8390614eda565b60405180910390fd5b6000601560006101000a81548160ff0219169083151502179055506001905090565b60185481565b612bbc612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4290614eda565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb190615589565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c5481565b731a141acd004597c8d359587f4e1582b6b803219481565b600a5481565b6000808284612dad919061505d565b905083811015612df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de9906155f5565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6a90615687565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed990615719565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612fc091906149f8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361303c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613033906157ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a29061583d565b60405180910390fd5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561314f5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61318e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613185906158cf565b60405180910390fd5b600081036131a7576131a2838360006140a9565b613f7c565b601160009054906101000a900460ff1615613892576131c4611ff1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156132325750613202611ff1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561326b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156132a5575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156132be5750600560149054906101000a900460ff16155b1561389157601160019054906101000a900460ff166133b857602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133785750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6133b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ae9061593b565b60405180910390fd5b5b601560009054906101000a900460ff1615613580576133d5611ff1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561345c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156134b457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561357f5743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061353a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613531906159f3565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136235750602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136ca5760085481111561366d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366490615a85565b60405180910390fd5b600a546136798361194c565b82613684919061505d565b11156136c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136bc90615af1565b60405180910390fd5b613890565b602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561376d5750602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137e4576008548111156137b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ae90615b83565b60405180910390fd5b6137d4731a141acd004597c8d359587f4e1582b6b803219461194c565b81116137df57600080fd5b61388f565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661388e57600a546138418361194c565b8261384c919061505d565b111561388d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388490615af1565b60405180910390fd5b5b5b5b5b5b60026021546138a1919061505d565b43111580156138fc57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156139485750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156139a6576001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60006139b13061194c565b9050600060095482101590508080156139d65750601160029054906101000a900460ff165b80156139ef5750600560149054906101000a900460ff16155b8015613a455750602460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613a9b5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613af15750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613b35576001600560146101000a81548160ff021916908315150217905550613b1961461b565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff16158015613b9b5750602460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015613bb35750600c60009054906101000a900460ff165b8015613bce5750600d54600e54613bca919061505d565b4210155b8015613c245750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c3357613c316146fc565b505b6000600560149054906101000a900460ff16159050602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613ce95750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613cf357600090505b60008115613f6c57602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613d5657506000601a54115b15613e2357613d836064613d75601a5488613fe590919063ffffffff16565b61405f90919063ffffffff16565b9050601a54601c5482613d969190614f29565b613da09190614f9a565b601f6000828254613db1919061505d565b92505081905550601a54601d5482613dc99190614f29565b613dd39190614f9a565b60206000828254613de4919061505d565b92505081905550601a54601b5482613dfc9190614f29565b613e069190614f9a565b601e6000828254613e17919061505d565b92505081905550613f48565b602460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613e7e57506000601654115b15613f4757613eab6064613e9d60165488613fe590919063ffffffff16565b61405f90919063ffffffff16565b905060165460185482613ebe9190614f29565b613ec89190614f9a565b601f6000828254613ed9919061505d565b9250508190555060165460195482613ef19190614f29565b613efb9190614f9a565b60206000828254613f0c919061505d565b9250508190555060165460175482613f249190614f29565b613f2e9190614f9a565b601e6000828254613f3f919061505d565b925050819055505b5b6000811115613f5d57613f5c8730836140a9565b5b8085613f699190615ba3565b94505b613f778787876140a9565b505050505b505050565b6000838311158290613fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fc09190614aa3565b60405180910390fd5b5060008385613fd89190615ba3565b9050809150509392505050565b6000808303613ff75760009050614059565b600082846140059190614f29565b90508284826140149190614f9a565b14614054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161404b90615c49565b60405180910390fd5b809150505b92915050565b60006140a183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506148d4565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603614118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161410f906157ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603614187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161417e9061583d565b60405180910390fd5b614192838383614937565b6141fd81604051806060016040528060268152602001615ea3602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f819092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614290816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d9e90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161432f91906149f8565b60405180910390a3505050565b6000600267ffffffffffffffff81111561435957614358615c69565b5b6040519080825280602002602001820160405280156143875781602001602082028036833780820191505090505b509050308160008151811061439f5761439e615c98565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614444573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144689190615cdc565b8160018151811061447c5761447b615c98565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506144e1307f000000000000000000000000000000000000000000000000000000000000000085612e04565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b8152600401614543959493929190615e02565b600060405180830381600087803b15801561455d57600080fd5b505af1158015614571573d6000803e3d6000fd5b50505050505050565b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600061466a823061433c565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516146b090615e8d565b60006040518083038185875af1925050503d80600081146146ed576040519150601f19603f3d011682016040523d82523d6000602084013e6146f2565b606091505b5050809150505050565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016147609190614d40565b602060405180830381865afa15801561477d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147a19190615112565b905060006147ce6127106147c0600b5485613fe590919063ffffffff16565b61405f90919063ffffffff16565b90506000811115614819576148187f0000000000000000000000000000000000000000000000000000000000000000731a141acd004597c8d359587f4e1582b6b8032194836140a9565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561488657600080fd5b505af115801561489a573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b6000808311829061491b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016149129190614aa3565b60405180910390fd5b506000838561492a9190614f9a565b9050809150509392505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061496c82614941565b9050919050565b61497c81614961565b811461498757600080fd5b50565b60008135905061499981614973565b92915050565b600080604083850312156149b6576149b561493c565b5b60006149c48582860161498a565b92505060206149d58582860161498a565b9150509250929050565b6000819050919050565b6149f2816149df565b82525050565b6000602082019050614a0d60008301846149e9565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614a4d578082015181840152602081019050614a32565b60008484015250505050565b6000601f19601f8301169050919050565b6000614a7582614a13565b614a7f8185614a1e565b9350614a8f818560208601614a2f565b614a9881614a59565b840191505092915050565b60006020820190508181036000830152614abd8184614a6a565b905092915050565b614ace816149df565b8114614ad957600080fd5b50565b600081359050614aeb81614ac5565b92915050565b60008060408385031215614b0857614b0761493c565b5b6000614b168582860161498a565b9250506020614b2785828601614adc565b9150509250929050565b60008115159050919050565b614b4681614b31565b82525050565b6000602082019050614b616000830184614b3d565b92915050565b600060208284031215614b7d57614b7c61493c565b5b6000614b8b8482850161498a565b91505092915050565b6000819050919050565b6000614bb9614bb4614baf84614941565b614b94565b614941565b9050919050565b6000614bcb82614b9e565b9050919050565b6000614bdd82614bc0565b9050919050565b614bed81614bd2565b82525050565b6000602082019050614c086000830184614be4565b92915050565b600060208284031215614c2457614c2361493c565b5b6000614c3284828501614adc565b91505092915050565b600080600060608486031215614c5457614c5361493c565b5b6000614c628682870161498a565b9350506020614c738682870161498a565b9250506040614c8486828701614adc565b9150509250925092565b614c9781614b31565b8114614ca257600080fd5b50565b600081359050614cb481614c8e565b92915050565b60008060408385031215614cd157614cd061493c565b5b6000614cdf8582860161498a565b9250506020614cf085828601614ca5565b9150509250929050565b600060ff82169050919050565b614d1081614cfa565b82525050565b6000602082019050614d2b6000830184614d07565b92915050565b614d3a81614961565b82525050565b6000602082019050614d556000830184614d31565b92915050565b600080600060608486031215614d7457614d7361493c565b5b6000614d8286828701614adc565b9350506020614d9386828701614adc565b9250506040614da486828701614ca5565b9150509250925092565b600080600060608486031215614dc757614dc661493c565b5b6000614dd586828701614adc565b9350506020614de686828701614adc565b9250506040614df786828701614adc565b9150509250925092565b600060208284031215614e1757614e1661493c565b5b6000614e2584828501614ca5565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614e7557607f821691505b602082108103614e8857614e87614e2e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614ec4602083614a1e565b9150614ecf82614e8e565b602082019050919050565b60006020820190508181036000830152614ef381614eb7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614f34826149df565b9150614f3f836149df565b9250828202614f4d816149df565b91508282048414831517614f6457614f63614efa565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614fa5826149df565b9150614fb0836149df565b925082614fc057614fbf614f6b565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000615027602f83614a1e565b915061503282614fcb565b604082019050919050565b600060208201905081810360008301526150568161501a565b9050919050565b6000615068826149df565b9150615073836149df565b925082820190508082111561508b5761508a614efa565b5b92915050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b60006150c7602083614a1e565b91506150d282615091565b602082019050919050565b600060208201905081810360008301526150f6816150ba565b9050919050565b60008151905061510c81614ac5565b92915050565b6000602082840312156151285761512761493c565b5b6000615136848285016150fd565b91505092915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b600061519b603383614a1e565b91506151a68261513f565b604082019050919050565b600060208201905081810360008301526151ca8161518e565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b600061522d603083614a1e565b9150615238826151d1565b604082019050919050565b6000602082019050818103600083015261525c81615220565b9050919050565b7f4d757374206b656570206665657320617420353025206f72206c657373000000600082015250565b6000615299601d83614a1e565b91506152a482615263565b602082019050919050565b600060208201905081810360008301526152c88161528c565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061532b603983614a1e565b9150615336826152cf565b604082019050919050565b6000602082019050818103600083015261535a8161531e565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006153bd602483614a1e565b91506153c882615361565b604082019050919050565b600060208201905081810360008301526153ec816153b0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061544f603583614a1e565b915061545a826153f3565b604082019050919050565b6000602082019050818103600083015261547e81615442565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006154e1603483614a1e565b91506154ec82615485565b604082019050919050565b60006020820190508181036000830152615510816154d4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615573602683614a1e565b915061557e82615517565b604082019050919050565b600060208201905081810360008301526155a281615566565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006155df601b83614a1e565b91506155ea826155a9565b602082019050919050565b6000602082019050818103600083015261560e816155d2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615671602483614a1e565b915061567c82615615565b604082019050919050565b600060208201905081810360008301526156a081615664565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615703602283614a1e565b915061570e826156a7565b604082019050919050565b60006020820190508181036000830152615732816156f6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615795602583614a1e565b91506157a082615739565b604082019050919050565b600060208201905081810360008301526157c481615788565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615827602383614a1e565b9150615832826157cb565b604082019050919050565b600060208201905081810360008301526158568161581a565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006158b9603183614a1e565b91506158c48261585d565b604082019050919050565b600060208201905081810360008301526158e8816158ac565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615925601683614a1e565b9150615930826158ef565b602082019050919050565b6000602082019050818103600083015261595481615918565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006159dd604983614a1e565b91506159e88261595b565b606082019050919050565b60006020820190508181036000830152615a0c816159d0565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615a6f603583614a1e565b9150615a7a82615a13565b604082019050919050565b60006020820190508181036000830152615a9e81615a62565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615adb601383614a1e565b9150615ae682615aa5565b602082019050919050565b60006020820190508181036000830152615b0a81615ace565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615b6d603683614a1e565b9150615b7882615b11565b604082019050919050565b60006020820190508181036000830152615b9c81615b60565b9050919050565b6000615bae826149df565b9150615bb9836149df565b9250828203905081811115615bd157615bd0614efa565b5b92915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615c33602183614a1e565b9150615c3e82615bd7565b604082019050919050565b60006020820190508181036000830152615c6281615c26565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615cd681614973565b92915050565b600060208284031215615cf257615cf161493c565b5b6000615d0084828501615cc7565b91505092915050565b6000819050919050565b6000615d2e615d29615d2484615d09565b614b94565b6149df565b9050919050565b615d3e81615d13565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615d7981614961565b82525050565b6000615d8b8383615d70565b60208301905092915050565b6000602082019050919050565b6000615daf82615d44565b615db98185615d4f565b9350615dc483615d60565b8060005b83811015615df5578151615ddc8882615d7f565b9750615de783615d97565b925050600181019050615dc8565b5085935050505092915050565b600060a082019050615e1760008301886149e9565b615e246020830187615d35565b8181036040830152615e368186615da4565b9050615e456060830185614d31565b615e5260808301846149e9565b9695505050505050565b600081905092915050565b50565b6000615e77600083615e5c565b9150615e8282615e67565b600082019050919050565b6000615e9882615e6a565b915081905091905056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dbac002eb40205b69b21289ddb3270d420c669140e865d34789c52f230c5f2d464736f6c63430008120033

Deployed Bytecode

0x6080604052600436106103d25760003560e01c80638095d564116101fd578063b62496f511610118578063d85ba063116100ab578063f11a24d31161007a578063f11a24d314610eae578063f2fde38b14610ed9578063f637434214610f02578063f882ddae14610f2d578063f8b45b0514610f58576103d9565b8063d85ba06314610df0578063dd62ed3e14610e1b578063e2f4560514610e58578063e884f26014610e83576103d9565b8063c18bc195116100e7578063c18bc19514610d34578063c876d0b914610d5d578063c8c8ebe414610d88578063d257b34f14610db3576103d9565b8063b62496f514610c7a578063bbc0c74214610cb7578063c024666814610ce2578063c17b5b8c14610d0b576103d9565b80639c3b4fdc11610190578063a457c2d71161015f578063a457c2d714610bac578063a4c82a0014610be9578063a9059cbb14610c14578063aacebbe314610c51576103d9565b80639c3b4fdc14610b005780639ec22c0e14610b2b5780639fccce3214610b56578063a0d82dc514610b81576103d9565b806392136913116101cc5780639213691314610a58578063924de9b714610a8357806395d89b4114610aac5780639a7a23d614610ad7576103d9565b80638095d564146109c25780638a8c523c146109eb5780638da5cb5b14610a025780638ea5220f14610a2d576103d9565b8063313ce567116102ed5780636ddd171311610280578063730c18881161024f578063730c18881461091a578063751039fc146109435780637571336a1461096e5780637bce5a0414610997576103d9565b80636ddd17131461085e5780636ebcf6071461088957806370a08231146108c6578063715018a614610903576103d9565b80634fbee193116102bc5780634fbee1931461078e5780635283ae68146107cb578063600b8a0a146107f65780636a486a8e14610833576103d9565b8063313ce567146106d057806339509351146106fb57806349bd5a5e146107385780634a62bb6514610763576103d9565b8063199ffc721161036557806323b872dd1161033457806323b872dd146106145780632c3e486c146106515780632d5a5d341461067c5780632e82f1a0146106a5576103d9565b8063199ffc721461056a5780631a8145bb146105955780631f3fed8f146105c0578063203e727e146105eb576103d9565b80631694505e116103a15780631694505e146104c057806318160ddd146104eb5780631816467f14610516578063184c16c51461053f576103d9565b8063024c2ddd146103de57806306fdde031461041b578063095ea7b31461044657806310d5de5314610483576103d9565b366103d957005b600080fd5b3480156103ea57600080fd5b506104056004803603810190610400919061499f565b610f83565b60405161041291906149f8565b60405180910390f35b34801561042757600080fd5b50610430610fa8565b60405161043d9190614aa3565b60405180910390f35b34801561045257600080fd5b5061046d60048036038101906104689190614af1565b61103a565b60405161047a9190614b4c565b60405180910390f35b34801561048f57600080fd5b506104aa60048036038101906104a59190614b67565b611058565b6040516104b79190614b4c565b60405180910390f35b3480156104cc57600080fd5b506104d5611078565b6040516104e29190614bf3565b60405180910390f35b3480156104f757600080fd5b5061050061109c565b60405161050d91906149f8565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190614b67565b6110a6565b005b34801561054b57600080fd5b506105546111fd565b60405161056191906149f8565b60405180910390f35b34801561057657600080fd5b5061057f611203565b60405161058c91906149f8565b60405180910390f35b3480156105a157600080fd5b506105aa611209565b6040516105b791906149f8565b60405180910390f35b3480156105cc57600080fd5b506105d561120f565b6040516105e291906149f8565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190614c0e565b611215565b005b34801561062057600080fd5b5061063b60048036038101906106369190614c3b565b61133f565b6040516106489190614b4c565b60405180910390f35b34801561065d57600080fd5b50610666611418565b60405161067391906149f8565b60405180910390f35b34801561068857600080fd5b506106a3600480360381019061069e9190614cba565b61141e565b005b3480156106b157600080fd5b506106ba611510565b6040516106c79190614b4c565b60405180910390f35b3480156106dc57600080fd5b506106e5611523565b6040516106f29190614d16565b60405180910390f35b34801561070757600080fd5b50610722600480360381019061071d9190614af1565b61152c565b60405161072f9190614b4c565b60405180910390f35b34801561074457600080fd5b5061074d6115df565b60405161075a9190614d40565b60405180910390f35b34801561076f57600080fd5b50610778611603565b6040516107859190614b4c565b60405180910390f35b34801561079a57600080fd5b506107b560048036038101906107b09190614b67565b611616565b6040516107c29190614b4c565b60405180910390f35b3480156107d757600080fd5b506107e061166c565b6040516107ed9190614d40565b60405180910390f35b34801561080257600080fd5b5061081d60048036038101906108189190614c0e565b611692565b60405161082a9190614b4c565b60405180910390f35b34801561083f57600080fd5b5061084861191b565b60405161085591906149f8565b60405180910390f35b34801561086a57600080fd5b50610873611921565b6040516108809190614b4c565b60405180910390f35b34801561089557600080fd5b506108b060048036038101906108ab9190614b67565b611934565b6040516108bd91906149f8565b60405180910390f35b3480156108d257600080fd5b506108ed60048036038101906108e89190614b67565b61194c565b6040516108fa91906149f8565b60405180910390f35b34801561090f57600080fd5b50610918611994565b005b34801561092657600080fd5b50610941600480360381019061093c9190614d5b565b611aec565b005b34801561094f57600080fd5b50610958611c47565b6040516109659190614b4c565b60405180910390f35b34801561097a57600080fd5b5061099560048036038101906109909190614cba565b611d02565b005b3480156109a357600080fd5b506109ac611df4565b6040516109b991906149f8565b60405180910390f35b3480156109ce57600080fd5b506109e960048036038101906109e49190614dae565b611dfa565b005b3480156109f757600080fd5b50610a00611f14565b005b348015610a0e57600080fd5b50610a17611ff1565b604051610a249190614d40565b60405180910390f35b348015610a3957600080fd5b50610a4261201b565b604051610a4f9190614d40565b60405180910390f35b348015610a6457600080fd5b50610a6d612041565b604051610a7a91906149f8565b60405180910390f35b348015610a8f57600080fd5b50610aaa6004803603810190610aa59190614e01565b612047565b005b348015610ab857600080fd5b50610ac16120fb565b604051610ace9190614aa3565b60405180910390f35b348015610ae357600080fd5b50610afe6004803603810190610af99190614cba565b61218d565b005b348015610b0c57600080fd5b50610b156122c0565b604051610b2291906149f8565b60405180910390f35b348015610b3757600080fd5b50610b406122c6565b604051610b4d91906149f8565b60405180910390f35b348015610b6257600080fd5b50610b6b6122cc565b604051610b7891906149f8565b60405180910390f35b348015610b8d57600080fd5b50610b966122d2565b604051610ba391906149f8565b60405180910390f35b348015610bb857600080fd5b50610bd36004803603810190610bce9190614af1565b6122d8565b604051610be09190614b4c565b60405180910390f35b348015610bf557600080fd5b50610bfe6123a5565b604051610c0b91906149f8565b60405180910390f35b348015610c2057600080fd5b50610c3b6004803603810190610c369190614af1565b6123ab565b604051610c489190614b4c565b60405180910390f35b348015610c5d57600080fd5b50610c786004803603810190610c739190614b67565b6123c9565b005b348015610c8657600080fd5b50610ca16004803603810190610c9c9190614b67565b612520565b604051610cae9190614b4c565b60405180910390f35b348015610cc357600080fd5b50610ccc612540565b604051610cd99190614b4c565b60405180910390f35b348015610cee57600080fd5b50610d096004803603810190610d049190614cba565b612553565b005b348015610d1757600080fd5b50610d326004803603810190610d2d9190614dae565b612693565b005b348015610d4057600080fd5b50610d5b6004803603810190610d569190614c0e565b6127ad565b005b348015610d6957600080fd5b50610d726128d7565b604051610d7f9190614b4c565b60405180910390f35b348015610d9457600080fd5b50610d9d6128ea565b604051610daa91906149f8565b60405180910390f35b348015610dbf57600080fd5b50610dda6004803603810190610dd59190614c0e565b6128f0565b604051610de79190614b4c565b60405180910390f35b348015610dfc57600080fd5b50610e05612a60565b604051610e1291906149f8565b60405180910390f35b348015610e2757600080fd5b50610e426004803603810190610e3d919061499f565b612a66565b604051610e4f91906149f8565b60405180910390f35b348015610e6457600080fd5b50610e6d612aed565b604051610e7a91906149f8565b60405180910390f35b348015610e8f57600080fd5b50610e98612af3565b604051610ea59190614b4c565b60405180910390f35b348015610eba57600080fd5b50610ec3612bae565b604051610ed091906149f8565b60405180910390f35b348015610ee557600080fd5b50610f006004803603810190610efb9190614b67565b612bb4565b005b348015610f0e57600080fd5b50610f17612d7a565b604051610f2491906149f8565b60405180910390f35b348015610f3957600080fd5b50610f42612d80565b604051610f4f9190614d40565b60405180910390f35b348015610f6457600080fd5b50610f6d612d98565b604051610f7a91906149f8565b60405180910390f35b6001602052816000526040600020602052806000526040600020600091509150505481565b606060038054610fb790614e5d565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe390614e5d565b80156110305780601f1061100557610100808354040283529160200191611030565b820191906000526020600020905b81548152906001019060200180831161101357829003601f168201915b5050505050905090565b600061104e611047612dfc565b8484612e04565b6001905092915050565b60236020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6110ae612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461113d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113490614eda565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601f5481565b601e5481565b61121d612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a390614eda565b60405180910390fd5b670de0b6b3a76400006103e860016112c261109c565b6112cc9190614f29565b6112d69190614f9a565b6112e09190614f9a565b811015611322576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113199061503d565b60405180910390fd5b670de0b6b3a7640000816113369190614f29565b60088190555050565b600061134c848484612fcd565b61140d84611358612dfc565b61140885604051806060016040528060288152602001615ec960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113be612dfc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f819092919063ffffffff16565b612e04565b600190509392505050565b600d5481565b611426612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac90614eda565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c60009054906101000a900460ff1681565b60006012905090565b60006115d5611539612dfc565b846115d0856001600061154a612dfc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d9e90919063ffffffff16565b612e04565b6001905092915050565b7f00000000000000000000000030ffe578c546132b94b02ceb501fb90373d67bfc81565b601160009054906101000a900460ff1681565b6000602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600f546010546116a4919061505d565b42116116e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dc906150dd565b60405180910390fd5b602260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661173b57600080fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000030ffe578c546132b94b02ceb501fb90373d67bfc6040518263ffffffff1660e01b815260040161179d9190614d40565b602060405180830381865afa1580156117ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117de9190615112565b905060006118096127106117fb8685613fe590919063ffffffff16565b61405f90919063ffffffff16565b905060008111156118405761183f7f00000000000000000000000030ffe578c546132b94b02ceb501fb90373d67bfc30836140a9565b5b60007f00000000000000000000000030ffe578c546132b94b02ceb501fb90373d67bfc90508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156118ad57600080fd5b505af11580156118c1573d6000803e3d6000fd5b505050506118e382731a141acd004597c8d359587f4e1582b6b803219461433c565b7f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b601a5481565b601160029054906101000a900460ff1681565b60006020528060005260406000206000915090505481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61199c612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2290614eda565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611af4612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7a90614eda565b60405180910390fd5b610258831015611bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbf906151b1565b60405180910390fd5b6103e88211158015611bdb575060008210155b611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1190615243565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b6000611c51612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd790614eda565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b611d0a612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9090614eda565b60405180910390fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60175481565b611e02612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8890614eda565b60405180910390fd5b826017819055508160188190555080601981905550601954601854601754611eb9919061505d565b611ec3919061505d565b60168190555060326016541115611f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f06906152af565b60405180910390fd5b505050565b611f1c612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa290614eda565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e8190555043602181905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b61204f612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d590614eda565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b60606004805461210a90614e5d565b80601f016020809104026020016040519081016040528092919081815260200182805461213690614e5d565b80156121835780601f1061215857610100808354040283529160200191612183565b820191906000526020600020905b81548152906001019060200180831161216657829003601f168201915b5050505050905090565b612195612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221b90614eda565b60405180910390fd5b7f00000000000000000000000030ffe578c546132b94b02ceb501fb90373d67bfc73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a990615341565b60405180910390fd5b6122bc828261457a565b5050565b60195481565b60105481565b60205481565b601d5481565b600061239b6122e5612dfc565b8461239685604051806060016040528060258152602001615ef1602591396001600061230f612dfc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f819092919063ffffffff16565b612e04565b6001905092915050565b600e5481565b60006123bf6123b8612dfc565b8484612fcd565b6001905092915050565b6123d1612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245790614eda565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60246020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b61255b612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e190614eda565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516126879190614b4c565b60405180910390a25050565b61269b612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461272a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272190614eda565b60405180910390fd5b82601b8190555081601c8190555080601d81905550601d54601c54601b54612752919061505d565b61275c919061505d565b601a819055506032601a5411156127a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279f906152af565b60405180910390fd5b505050565b6127b5612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283b90614eda565b60405180910390fd5b670de0b6b3a76400006103e8600561285a61109c565b6128649190614f29565b61286e9190614f9a565b6128789190614f9a565b8110156128ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b1906153d3565b60405180910390fd5b670de0b6b3a7640000816128ce9190614f29565b600a8190555050565b601560009054906101000a900460ff1681565b60085481565b60006128fa612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298090614eda565b60405180910390fd5b620186a0600161299761109c565b6129a19190614f29565b6129ab9190614f9a565b8210156129ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e490615465565b60405180910390fd5b6103e860056129fa61109c565b612a049190614f29565b612a0e9190614f9a565b821115612a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a47906154f7565b60405180910390fd5b8160098190555060019050919050565b60165481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000612afd612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8390614eda565b60405180910390fd5b6000601560006101000a81548160ff0219169083151502179055506001905090565b60185481565b612bbc612dfc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4290614eda565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb190615589565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c5481565b731a141acd004597c8d359587f4e1582b6b803219481565b600a5481565b6000808284612dad919061505d565b905083811015612df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de9906155f5565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6a90615687565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed990615719565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612fc091906149f8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361303c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613033906157ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a29061583d565b60405180910390fd5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561314f5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61318e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613185906158cf565b60405180910390fd5b600081036131a7576131a2838360006140a9565b613f7c565b601160009054906101000a900460ff1615613892576131c4611ff1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156132325750613202611ff1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561326b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156132a5575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156132be5750600560149054906101000a900460ff16155b1561389157601160019054906101000a900460ff166133b857602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133785750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6133b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ae9061593b565b60405180910390fd5b5b601560009054906101000a900460ff1615613580576133d5611ff1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561345c57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156134b457507f00000000000000000000000030ffe578c546132b94b02ceb501fb90373d67bfc73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561357f5743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061353a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613531906159f3565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136235750602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136ca5760085481111561366d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366490615a85565b60405180910390fd5b600a546136798361194c565b82613684919061505d565b11156136c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136bc90615af1565b60405180910390fd5b613890565b602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561376d5750602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137e4576008548111156137b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ae90615b83565b60405180910390fd5b6137d4731a141acd004597c8d359587f4e1582b6b803219461194c565b81116137df57600080fd5b61388f565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661388e57600a546138418361194c565b8261384c919061505d565b111561388d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388490615af1565b60405180910390fd5b5b5b5b5b5b60026021546138a1919061505d565b43111580156138fc57507f00000000000000000000000030ffe578c546132b94b02ceb501fb90373d67bfc73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156139485750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156139a6576001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60006139b13061194c565b9050600060095482101590508080156139d65750601160029054906101000a900460ff165b80156139ef5750600560149054906101000a900460ff16155b8015613a455750602460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613a9b5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613af15750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613b35576001600560146101000a81548160ff021916908315150217905550613b1961461b565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff16158015613b9b5750602460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015613bb35750600c60009054906101000a900460ff165b8015613bce5750600d54600e54613bca919061505d565b4210155b8015613c245750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c3357613c316146fc565b505b6000600560149054906101000a900460ff16159050602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613ce95750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613cf357600090505b60008115613f6c57602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613d5657506000601a54115b15613e2357613d836064613d75601a5488613fe590919063ffffffff16565b61405f90919063ffffffff16565b9050601a54601c5482613d969190614f29565b613da09190614f9a565b601f6000828254613db1919061505d565b92505081905550601a54601d5482613dc99190614f29565b613dd39190614f9a565b60206000828254613de4919061505d565b92505081905550601a54601b5482613dfc9190614f29565b613e069190614f9a565b601e6000828254613e17919061505d565b92505081905550613f48565b602460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613e7e57506000601654115b15613f4757613eab6064613e9d60165488613fe590919063ffffffff16565b61405f90919063ffffffff16565b905060165460185482613ebe9190614f29565b613ec89190614f9a565b601f6000828254613ed9919061505d565b9250508190555060165460195482613ef19190614f29565b613efb9190614f9a565b60206000828254613f0c919061505d565b9250508190555060165460175482613f249190614f29565b613f2e9190614f9a565b601e6000828254613f3f919061505d565b925050819055505b5b6000811115613f5d57613f5c8730836140a9565b5b8085613f699190615ba3565b94505b613f778787876140a9565b505050505b505050565b6000838311158290613fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fc09190614aa3565b60405180910390fd5b5060008385613fd89190615ba3565b9050809150509392505050565b6000808303613ff75760009050614059565b600082846140059190614f29565b90508284826140149190614f9a565b14614054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161404b90615c49565b60405180910390fd5b809150505b92915050565b60006140a183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506148d4565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603614118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161410f906157ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603614187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161417e9061583d565b60405180910390fd5b614192838383614937565b6141fd81604051806060016040528060268152602001615ea3602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f819092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614290816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d9e90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161432f91906149f8565b60405180910390a3505050565b6000600267ffffffffffffffff81111561435957614358615c69565b5b6040519080825280602002602001820160405280156143875781602001602082028036833780820191505090505b509050308160008151811061439f5761439e615c98565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614444573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144689190615cdc565b8160018151811061447c5761447b615c98565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506144e1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d85612e04565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b8152600401614543959493929190615e02565b600060405180830381600087803b15801561455d57600080fd5b505af1158015614571573d6000803e3d6000fd5b50505050505050565b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600061466a823061433c565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516146b090615e8d565b60006040518083038185875af1925050503d80600081146146ed576040519150601f19603f3d011682016040523d82523d6000602084013e6146f2565b606091505b5050809150505050565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000030ffe578c546132b94b02ceb501fb90373d67bfc6040518263ffffffff1660e01b81526004016147609190614d40565b602060405180830381865afa15801561477d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147a19190615112565b905060006147ce6127106147c0600b5485613fe590919063ffffffff16565b61405f90919063ffffffff16565b90506000811115614819576148187f00000000000000000000000030ffe578c546132b94b02ceb501fb90373d67bfc731a141acd004597c8d359587f4e1582b6b8032194836140a9565b5b60007f00000000000000000000000030ffe578c546132b94b02ceb501fb90373d67bfc90508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561488657600080fd5b505af115801561489a573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b6000808311829061491b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016149129190614aa3565b60405180910390fd5b506000838561492a9190614f9a565b9050809150509392505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061496c82614941565b9050919050565b61497c81614961565b811461498757600080fd5b50565b60008135905061499981614973565b92915050565b600080604083850312156149b6576149b561493c565b5b60006149c48582860161498a565b92505060206149d58582860161498a565b9150509250929050565b6000819050919050565b6149f2816149df565b82525050565b6000602082019050614a0d60008301846149e9565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614a4d578082015181840152602081019050614a32565b60008484015250505050565b6000601f19601f8301169050919050565b6000614a7582614a13565b614a7f8185614a1e565b9350614a8f818560208601614a2f565b614a9881614a59565b840191505092915050565b60006020820190508181036000830152614abd8184614a6a565b905092915050565b614ace816149df565b8114614ad957600080fd5b50565b600081359050614aeb81614ac5565b92915050565b60008060408385031215614b0857614b0761493c565b5b6000614b168582860161498a565b9250506020614b2785828601614adc565b9150509250929050565b60008115159050919050565b614b4681614b31565b82525050565b6000602082019050614b616000830184614b3d565b92915050565b600060208284031215614b7d57614b7c61493c565b5b6000614b8b8482850161498a565b91505092915050565b6000819050919050565b6000614bb9614bb4614baf84614941565b614b94565b614941565b9050919050565b6000614bcb82614b9e565b9050919050565b6000614bdd82614bc0565b9050919050565b614bed81614bd2565b82525050565b6000602082019050614c086000830184614be4565b92915050565b600060208284031215614c2457614c2361493c565b5b6000614c3284828501614adc565b91505092915050565b600080600060608486031215614c5457614c5361493c565b5b6000614c628682870161498a565b9350506020614c738682870161498a565b9250506040614c8486828701614adc565b9150509250925092565b614c9781614b31565b8114614ca257600080fd5b50565b600081359050614cb481614c8e565b92915050565b60008060408385031215614cd157614cd061493c565b5b6000614cdf8582860161498a565b9250506020614cf085828601614ca5565b9150509250929050565b600060ff82169050919050565b614d1081614cfa565b82525050565b6000602082019050614d2b6000830184614d07565b92915050565b614d3a81614961565b82525050565b6000602082019050614d556000830184614d31565b92915050565b600080600060608486031215614d7457614d7361493c565b5b6000614d8286828701614adc565b9350506020614d9386828701614adc565b9250506040614da486828701614ca5565b9150509250925092565b600080600060608486031215614dc757614dc661493c565b5b6000614dd586828701614adc565b9350506020614de686828701614adc565b9250506040614df786828701614adc565b9150509250925092565b600060208284031215614e1757614e1661493c565b5b6000614e2584828501614ca5565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614e7557607f821691505b602082108103614e8857614e87614e2e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614ec4602083614a1e565b9150614ecf82614e8e565b602082019050919050565b60006020820190508181036000830152614ef381614eb7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614f34826149df565b9150614f3f836149df565b9250828202614f4d816149df565b91508282048414831517614f6457614f63614efa565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614fa5826149df565b9150614fb0836149df565b925082614fc057614fbf614f6b565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000615027602f83614a1e565b915061503282614fcb565b604082019050919050565b600060208201905081810360008301526150568161501a565b9050919050565b6000615068826149df565b9150615073836149df565b925082820190508082111561508b5761508a614efa565b5b92915050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b60006150c7602083614a1e565b91506150d282615091565b602082019050919050565b600060208201905081810360008301526150f6816150ba565b9050919050565b60008151905061510c81614ac5565b92915050565b6000602082840312156151285761512761493c565b5b6000615136848285016150fd565b91505092915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b600061519b603383614a1e565b91506151a68261513f565b604082019050919050565b600060208201905081810360008301526151ca8161518e565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b600061522d603083614a1e565b9150615238826151d1565b604082019050919050565b6000602082019050818103600083015261525c81615220565b9050919050565b7f4d757374206b656570206665657320617420353025206f72206c657373000000600082015250565b6000615299601d83614a1e565b91506152a482615263565b602082019050919050565b600060208201905081810360008301526152c88161528c565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061532b603983614a1e565b9150615336826152cf565b604082019050919050565b6000602082019050818103600083015261535a8161531e565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006153bd602483614a1e565b91506153c882615361565b604082019050919050565b600060208201905081810360008301526153ec816153b0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061544f603583614a1e565b915061545a826153f3565b604082019050919050565b6000602082019050818103600083015261547e81615442565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006154e1603483614a1e565b91506154ec82615485565b604082019050919050565b60006020820190508181036000830152615510816154d4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615573602683614a1e565b915061557e82615517565b604082019050919050565b600060208201905081810360008301526155a281615566565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006155df601b83614a1e565b91506155ea826155a9565b602082019050919050565b6000602082019050818103600083015261560e816155d2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615671602483614a1e565b915061567c82615615565b604082019050919050565b600060208201905081810360008301526156a081615664565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615703602283614a1e565b915061570e826156a7565b604082019050919050565b60006020820190508181036000830152615732816156f6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615795602583614a1e565b91506157a082615739565b604082019050919050565b600060208201905081810360008301526157c481615788565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615827602383614a1e565b9150615832826157cb565b604082019050919050565b600060208201905081810360008301526158568161581a565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006158b9603183614a1e565b91506158c48261585d565b604082019050919050565b600060208201905081810360008301526158e8816158ac565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615925601683614a1e565b9150615930826158ef565b602082019050919050565b6000602082019050818103600083015261595481615918565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006159dd604983614a1e565b91506159e88261595b565b606082019050919050565b60006020820190508181036000830152615a0c816159d0565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615a6f603583614a1e565b9150615a7a82615a13565b604082019050919050565b60006020820190508181036000830152615a9e81615a62565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615adb601383614a1e565b9150615ae682615aa5565b602082019050919050565b60006020820190508181036000830152615b0a81615ace565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615b6d603683614a1e565b9150615b7882615b11565b604082019050919050565b60006020820190508181036000830152615b9c81615b60565b9050919050565b6000615bae826149df565b9150615bb9836149df565b9250828203905081811115615bd157615bd0614efa565b5b92915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615c33602183614a1e565b9150615c3e82615bd7565b604082019050919050565b60006020820190508181036000830152615c6281615c26565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615cd681614973565b92915050565b600060208284031215615cf257615cf161493c565b5b6000615d0084828501615cc7565b91505092915050565b6000819050919050565b6000615d2e615d29615d2484615d09565b614b94565b6149df565b9050919050565b615d3e81615d13565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615d7981614961565b82525050565b6000615d8b8383615d70565b60208301905092915050565b6000602082019050919050565b6000615daf82615d44565b615db98185615d4f565b9350615dc483615d60565b8060005b83811015615df5578151615ddc8882615d7f565b9750615de783615d97565b925050600181019050615dc8565b5085935050505092915050565b600060a082019050615e1760008301886149e9565b615e246020830187615d35565b8181036040830152615e368186615da4565b9050615e456060830185614d31565b615e5260808301846149e9565b9695505050505050565b600081905092915050565b50565b6000615e77600083615e5c565b9150615e8282615e67565b600082019050919050565b6000615e9882615e6a565b915081905091905056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dbac002eb40205b69b21289ddb3270d420c669140e865d34789c52f230c5f2d464736f6c63430008120033

Deployed Bytecode Sourcemap

29623:17562:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7058:66;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7730:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9904:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31529:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29698:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8853:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38486:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30302:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30116:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31243:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31203;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35901:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10556:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30211:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37675:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30172:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8694:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11321:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29756:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30400:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38654:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29930:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45423:979;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31057:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30480:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7004:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9025:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22232:148;;;;;;;;;;;;;:::i;:::-;;44964:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35118:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36368:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30949:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36719:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34874:191;;;;;;;;;;;;;:::i;:::-;;21588:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29966:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31092:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36609:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7950:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37819:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31023:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30355:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31283:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31168:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12043:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30263:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9366:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38271:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31752:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30440:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37484:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37097:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36144:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30866:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30000:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35506:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30915:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9605:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30042:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35300:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30986:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22536:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31130:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29801:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30082:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7058:66;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7730:100::-;7784:13;7817:5;7810:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7730:100;:::o;9904:169::-;9987:4;10004:39;10013:12;:10;:12::i;:::-;10027:7;10036:6;10004:8;:39::i;:::-;10061:4;10054:11;;9904:169;;;;:::o;31529:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29698:51::-;;;:::o;8853:108::-;8914:7;8941:12;;8934:19;;8853:108;:::o;38486:157::-;21811:12;:10;:12::i;:::-;21801:22;;:6;;;;;;;;;;;:22;;;21793:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38593:9:::1;;;;;;;;;;;38565:38;;38582:9;38565:38;;;;;;;;;;;;38626:9;38614;;:21;;;;;;;;;;;;;;;;;;38486:157:::0;:::o;30302:46::-;;;;:::o;30116:36::-;;;;:::o;31243:33::-;;;;:::o;31203:::-;;;;:::o;35901:234::-;21811:12;:10;:12::i;:::-;21801:22;;:6;;;;;;;;;;;:22;;;21793:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36020:4:::1;36014;36010:1;35994:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35993:31;;;;:::i;:::-;35983:6;:41;;35975:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;36120:6;36110;:17;;;;:::i;:::-;36087:20;:40;;;;35901:234:::0;:::o;10556:355::-;10696:4;10713:36;10723:6;10731:9;10742:6;10713:9;:36::i;:::-;10760:121;10769:6;10777:12;:10;:12::i;:::-;10791:89;10829:6;10791:89;;;;;;;;;;;;;;;;;:11;:19;10803:6;10791:19;;;;;;;;;;;;;;;:33;10811:12;:10;:12::i;:::-;10791:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10760:8;:121::i;:::-;10899:4;10892:11;;10556:355;;;;;:::o;30211:45::-;;;;:::o;37675:135::-;21811:12;:10;:12::i;:::-;21801:22;;:6;;;;;;;;;;;:22;;;21793:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37789:13:::1;37767:10;:19;37778:7;37767:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;37675:135:::0;;:::o;30172:32::-;;;;;;;;;;;;;:::o;8694:93::-;8752:5;8777:2;8770:9;;8694:93;:::o;11321:218::-;11409:4;11426:83;11435:12;:10;:12::i;:::-;11449:7;11458:50;11497:10;11458:11;:25;11470:12;:10;:12::i;:::-;11458:25;;;;;;;;;;;;;;;:34;11484:7;11458:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11426:8;:83::i;:::-;11527:4;11520:11;;11321:218;;;;:::o;29756:38::-;;;:::o;30400:33::-;;;;;;;;;;;;;:::o;38654:125::-;38719:4;38743:19;:28;38763:7;38743:28;;;;;;;;;;;;;;;;;;;;;;;;;38736:35;;38654:125;;;:::o;29930:29::-;;;;;;;;;;;;;:::o;45423:979::-;45475:4;45540:19;;45517:20;;:42;;;;:::i;:::-;45499:15;:60;45491:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;45616:19;:31;45636:10;45616:31;;;;;;;;;;;;;;;;;;;;;;;;;45608:40;;;;;;45682:15;45659:20;:38;;;;45753:28;45784:4;:14;;;45799:13;45784:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45753:60;;45864:20;45887:44;45925:5;45887:33;45912:7;45887:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;45864:67;;46052:1;46037:12;:16;46033:107;;;46069:59;46085:13;46108:4;46115:12;46069:15;:59::i;:::-;46033:107;46216:19;46253:13;46216:51;;46278:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46300:42;46317:12;29846:42;46300:16;:42::i;:::-;46358:14;;;;;;;;;;46390:4;46383:11;;;;;45423:979;;;:::o;31057:28::-;;;;:::o;30480:31::-;;;;;;;;;;;;;:::o;7004:44::-;;;;;;;;;;;;;;;;;:::o;9025:127::-;9099:7;9126:9;:18;9136:7;9126:18;;;;;;;;;;;;;;;;9119:25;;9025:127;;;:::o;22232:148::-;21811:12;:10;:12::i;:::-;21801:22;;:6;;;;;;;;;;;:22;;;21793:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22339:1:::1;22302:40;;22323:6;;;;;;;;;;;22302:40;;;;;;;;;;;;22370:1;22353:6;;:19;;;;;;;;;;;;;;;;;;22232:148::o:0;44964:447::-;21811:12;:10;:12::i;:::-;21801:22;;:6;;;;;;;;;;;:22;;;21793:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45118:3:::1;45095:19;:26;;45087:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;45208:4;45196:8;:16;;:33;;;;;45228:1;45216:8;:13;;45196:33;45188:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;45311:19;45293:15;:37;;;;45360:8;45341:16;:27;;;;45395:8;45379:13;;:24;;;;;;;;;;;;;;;;;;44964:447:::0;;;:::o;35118:120::-;35170:4;21811:12;:10;:12::i;:::-;21801:22;;:6;;;;;;;;;;;:22;;;21793:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35203:5:::1;35186:14;;:22;;;;;;;;;;;;;;;;;;35226:4;35219:11;;35118:120:::0;:::o;36368:144::-;21811:12;:10;:12::i;:::-;21801:22;;:6;;;;;;;;;;;:22;;;21793:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36500:4:::1;36458:31;:39;36490:6;36458:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36368:144:::0;;:::o;30949:30::-;;;;:::o;36719:369::-;21811:12;:10;:12::i;:::-;21801:22;;:6;;;;;;;;;;;:22;;;21793:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36853:13:::1;36835:15;:31;;;;36895:13;36877:15;:31;;;;36931:7;36919:9;:19;;;;37000:9;;36982:15;;36964;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;36949:12;:60;;;;37044:2;37028:12;;:18;;37020:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;36719:369:::0;;;:::o;34874:191::-;21811:12;:10;:12::i;:::-;21801:22;;:6;;;;;;;;;;;:22;;;21793:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34945:4:::1;34929:13;;:20;;;;;;;;;;;;;;;;;;34974:4;34960:11;;:18;;;;;;;;;;;;;;;;;;35006:15;34989:14;:32;;;;35045:12;35032:10;:25;;;;34874:191::o:0;21588:79::-;21626:7;21653:6;;;;;;;;;;;21646:13;;21588:79;:::o;29966:24::-;;;;;;;;;;;;;:::o;31092:31::-;;;;:::o;36609:101::-;21811:12;:10;:12::i;:::-;21801:22;;:6;;;;;;;;;;;:22;;;21793:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36695:7:::1;36681:11;;:21;;;;;;;;;;;;;;;;;;36609:101:::0;:::o;7950:104::-;8006:13;8039:7;8032:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7950:104;:::o;37819:245::-;21811:12;:10;:12::i;:::-;21801:22;;:6;;;;;;;;;;;:22;;;21793:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37926:13:::1;37918:21;;:4;:21;;::::0;37910:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;38015:41;38044:4;38050:5;38015:28;:41::i;:::-;37819:245:::0;;:::o;31023:24::-;;;;:::o;30355:35::-;;;;:::o;31283:27::-;;;;:::o;31168:25::-;;;;:::o;12043:269::-;12136:4;12153:129;12162:12;:10;:12::i;:::-;12176:7;12185:96;12224:15;12185:96;;;;;;;;;;;;;;;;;:11;:25;12197:12;:10;:12::i;:::-;12185:25;;;;;;;;;;;;;;;:34;12211:7;12185:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12153:8;:129::i;:::-;12300:4;12293:11;;12043:269;;;;:::o;30263:29::-;;;;:::o;9366:175::-;9452:4;9469:42;9479:12;:10;:12::i;:::-;9493:9;9504:6;9469:9;:42::i;:::-;9529:4;9522:11;;9366:175;;;;:::o;38271:206::-;21811:12;:10;:12::i;:::-;21801:22;;:6;;;;;;;;;;;:22;;;21793:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38408:14:::1;;;;;;;;;;;38365:58;;38388:18;38365:58;;;;;;;;;;;;38451:18;38434:14;;:35;;;;;;;;;;;;;;;;;;38271:206:::0;:::o;31752:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30440:33::-;;;;;;;;;;;;;:::o;37484:182::-;21811:12;:10;:12::i;:::-;21801:22;;:6;;;;;;;;;;;:22;;;21793:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37600:8:::1;37569:19;:28;37589:7;37569:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37640:7;37624:34;;;37649:8;37624:34;;;;;;:::i;:::-;;;;;;;;37484:182:::0;;:::o;37097:378::-;21811:12;:10;:12::i;:::-;21801:22;;:6;;;;;;;;;;;:22;;;21793:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37233:13:::1;37214:16;:32;;;;37276:13;37257:16;:32;;;;37313:7;37300:10;:20;;;;37385:10;;37366:16;;37347;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;37331:13;:64;;;;37431:2;37414:13;;:19;;37406:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37097:378:::0;;;:::o;36144:215::-;21811:12;:10;:12::i;:::-;21801:22;;:6;;;;;;;;;;;:22;;;21793:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36266:4:::1;36260;36256:1;36240:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;36239:31;;;;:::i;:::-;36229:6;:41;;36221:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;36344:6;36334;:17;;;;:::i;:::-;36322:9;:29;;;;36144:215:::0;:::o;30866:39::-;;;;;;;;;;;;;:::o;30000:35::-;;;;:::o;35506:386::-;35587:4;21811:12;:10;:12::i;:::-;21801:22;;:6;;;;;;;;;;;:22;;;21793:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35644:6:::1;35640:1;35624:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;35611:9;:39;;35603:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;35760:4;35756:1;35740:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35727:9;:37;;35719:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;35853:9;35832:18;:30;;;;35880:4;35873:11;;35506:386:::0;;;:::o;30915:27::-;;;;:::o;9605:151::-;9694:7;9721:11;:18;9733:5;9721:18;;;;;;;;;;;;;;;:27;9740:7;9721:27;;;;;;;;;;;;;;;;9714:34;;9605:151;;;;:::o;30042:33::-;;;;:::o;35300:134::-;35360:4;21811:12;:10;:12::i;:::-;21801:22;;:6;;;;;;;;;;;:22;;;21793:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35399:5:::1;35376:20;;:28;;;;;;;;;;;;;;;;;;35422:4;35415:11;;35300:134:::0;:::o;30986:30::-;;;;:::o;22536:244::-;21811:12;:10;:12::i;:::-;21801:22;;:6;;;;;;;;;;;:22;;;21793:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22645:1:::1;22625:22;;:8;:22;;::::0;22617:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22735:8;22706:38;;22727:6;;;;;;;;;;;22706:38;;;;;;;;;;;;22764:8;22755:6;;:17;;;;;;;;;;;;;;;;;;22536:244:::0;:::o;31130:31::-;;;;:::o;29801:88::-;29846:42;29801:88;:::o;30082:24::-;;;;:::o;16620:182::-;16678:7;16698:9;16714:1;16710;:5;;;;:::i;:::-;16698:17;;16739:1;16734;:6;;16726:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16793:1;16786:8;;;16620:182;;;;:::o;337:98::-;390:7;417:10;410:17;;337:98;:::o;15239:381::-;15392:1;15375:19;;:5;:19;;;15367:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15473:1;15454:21;;:7;:21;;;15446:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15558:6;15528:11;:18;15540:5;15528:18;;;;;;;;;;;;;;;:27;15547:7;15528:27;;;;;;;;;;;;;;;:36;;;;15596:7;15580:32;;15589:5;15580:32;;;15605:6;15580:32;;;;;;:::i;:::-;;;;;;;;15239:381;;;:::o;38839:4692::-;38987:1;38971:18;;:4;:18;;;38963:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39064:1;39050:16;;:2;:16;;;39042:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39126:10;:14;39137:2;39126:14;;;;;;;;;;;;;;;;;;;;;;;;;39125:15;:36;;;;;39145:10;:16;39156:4;39145:16;;;;;;;;;;;;;;;;;;;;;;;;;39144:17;39125:36;39117:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;39240:1;39230:6;:11;39227:92;;39258:28;39274:4;39280:2;39284:1;39258:15;:28::i;:::-;39301:7;;39227:92;39335:14;;;;;;;;;;;39332:1877;;;39395:7;:5;:7::i;:::-;39387:15;;:4;:15;;;;:49;;;;;39429:7;:5;:7::i;:::-;39423:13;;:2;:13;;;;39387:49;:86;;;;;39471:1;39457:16;;:2;:16;;;;39387:86;:128;;;;;39508:6;39494:21;;:2;:21;;;;39387:128;:158;;;;;39537:8;;;;;;;;;;;39536:9;39387:158;39365:1833;;;39583:13;;;;;;;;;;;39579:148;;39628:19;:25;39648:4;39628:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39657:19;:23;39677:2;39657:23;;;;;;;;;;;;;;;;;;;;;;;;;39628:52;39620:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39579:148;39886:20;;;;;;;;;;;39882:423;;;39940:7;:5;:7::i;:::-;39934:13;;:2;:13;;;;:47;;;;;39965:15;39951:30;;:2;:30;;;;39934:47;:79;;;;;39999:13;39985:28;;:2;:28;;;;39934:79;39930:356;;;40091:12;40049:28;:39;40078:9;40049:39;;;;;;;;;;;;;;;;:54;40041:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;40250:12;40208:28;:39;40237:9;40208:39;;;;;;;;;;;;;;;:54;;;;39930:356;39882:423;40358:25;:31;40384:4;40358:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40394:31;:35;40426:2;40394:35;;;;;;;;;;;;;;;;;;;;;;;;;40393:36;40358:71;40354:829;;;40476:20;;40466:6;:30;;40458:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40615:9;;40598:13;40608:2;40598:9;:13::i;:::-;40589:6;:22;;;;:::i;:::-;:35;;40581:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40354:829;;;40727:25;:29;40753:2;40727:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40761:31;:37;40793:4;40761:37;;;;;;;;;;;;;;;;;;;;;;;;;40760:38;40727:71;40723:460;;;40845:20;;40835:6;:30;;40827:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40968:21;29846:42;40968:9;:21::i;:::-;40959:6;:30;40951:39;;;;;;40723:460;;;41037:31;:35;41069:2;41037:35;;;;;;;;;;;;;;;;;;;;;;;;;41033:150;;41130:9;;41113:13;41123:2;41113:9;:13::i;:::-;41104:6;:22;;;;:::i;:::-;:35;;41096:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41033:150;40723:460;40354:829;39365:1833;39332:1877;41283:1;41270:10;;:14;;;;:::i;:::-;41253:12;:32;;:73;;;;;41313:13;41307:19;;:2;:19;;;;41253:73;:152;;;;;41362:42;41348:57;;:2;:57;;;;41253:152;41249:225;;;41454:4;41437:10;:14;41448:2;41437:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41249:225;41486:28;41517:24;41535:4;41517:9;:24::i;:::-;41486:55;;41555:12;41594:18;;41570:20;:42;;41555:57;;41644:7;:35;;;;;41668:11;;;;;;;;;;;41644:35;:61;;;;;41697:8;;;;;;;;;;;41696:9;41644:61;:110;;;;;41723:25;:31;41749:4;41723:31;;;;;;;;;;;;;;;;;;;;;;;;;41722:32;41644:110;:153;;;;;41772:19;:25;41792:4;41772:25;;;;;;;;;;;;;;;;;;;;;;;;;41771:26;41644:153;:194;;;;;41815:19;:23;41835:2;41815:23;;;;;;;;;;;;;;;;;;;;;;;;;41814:24;41644:194;41626:328;;;41876:4;41865:8;;:15;;;;;;;;;;;;;;;;;;41898:10;:8;:10::i;:::-;41937:5;41926:8;;:16;;;;;;;;;;;;;;;;;;41626:328;41971:8;;;;;;;;;;;41970:9;:42;;;;;41983:25;:29;42009:2;41983:29;;;;;;;;;;;;;;;;;;;;;;;;;41970:42;:59;;;;;42016:13;;;;;;;;;;;41970:59;:114;;;;;42069:15;;42052:14;;:32;;;;:::i;:::-;42033:15;:51;;41970:114;:144;;;;;42089:19;:25;42109:4;42089:25;;;;;;;;;;;;;;;;;;;;;;;;;42088:26;41970:144;41967:204;;;42130:29;:27;:29::i;:::-;;41967:204;42184:12;42200:8;;;;;;;;;;;42199:9;42184:24;;42310:19;:25;42330:4;42310:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;42339:19;:23;42359:2;42339:23;;;;;;;;;;;;;;;;;;;;;;;;;42310:52;42307:99;;;42389:5;42379:15;;42307:99;42419:12;42523:7;42520:957;;;42574:25;:29;42600:2;42574:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;42623:1;42607:13;;:17;42574:50;42570:754;;;42651:34;42681:3;42651:25;42662:13;;42651:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;42644:41;;42752:13;;42733:16;;42726:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;42704:18;;:61;;;;;;;:::i;:::-;;;;;;;;42820:13;;42807:10;;42800:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;42784:12;;:49;;;;;;;:::i;:::-;;;;;;;;42900:13;;42881:16;;42874:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;42852:18;;:61;;;;;;;:::i;:::-;;;;;;;;42570:754;;;42974:25;:31;43000:4;42974:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;43024:1;43009:12;;:16;42974:51;42971:353;;;43053:33;43082:3;43053:24;43064:12;;43053:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;43046:40;;43152:12;;43134:15;;43127:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43105:18;;:59;;;;;;;:::i;:::-;;;;;;;;43218:12;;43206:9;;43199:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;43183:12;;:47;;;;;;;:::i;:::-;;;;;;;;43296:12;;43278:15;;43271:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43249:18;;:59;;;;;;;:::i;:::-;;;;;;;;42971:353;42570:754;43351:1;43344:4;:8;43341:93;;;43376:42;43392:4;43406;43413;43376:15;:42::i;:::-;43341:93;43461:4;43451:14;;;;;:::i;:::-;;;42520:957;43490:33;43506:4;43512:2;43516:6;43490:15;:33::i;:::-;38952:4579;;;;38839:4692;;;;:::o;17526:193::-;17612:7;17645:1;17640;:6;;17648:12;17632:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17672:9;17688:1;17684;:5;;;;:::i;:::-;17672:17;;17710:1;17703:8;;;17526:193;;;;;:::o;17979:473::-;18037:7;18287:1;18282;:6;18278:47;;18312:1;18305:8;;;;18278:47;18338:9;18354:1;18350;:5;;;;:::i;:::-;18338:17;;18383:1;18378;18374;:5;;;;:::i;:::-;:10;18366:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18443:1;18436:8;;;17979:473;;;;;:::o;18929:132::-;18987:7;19014:39;19018:1;19021;19014:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19007:46;;18929:132;;;;:::o;12803:575::-;12961:1;12943:20;;:6;:20;;;12935:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13045:1;13024:23;;:9;:23;;;13016:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13101:47;13122:6;13130:9;13141:6;13101:20;:47::i;:::-;13182:71;13204:6;13182:71;;;;;;;;;;;;;;;;;:9;:17;13192:6;13182:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13162:9;:17;13172:6;13162:17;;;;;;;;;;;;;;;:91;;;;13287:32;13312:6;13287:9;:20;13297:9;13287:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13264:9;:20;13274:9;13264:20;;;;;;;;;;;;;;;:55;;;;13352:9;13335:35;;13344:6;13335:35;;;13363:6;13335:35;;;;;;:::i;:::-;;;;;;;;12803:575;;;:::o;43540:602::-;43680:21;43718:1;43704:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43680:40;;43749:4;43731;43736:1;43731:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43775:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43765:4;43770:1;43765:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;43810:62;43827:4;43842:15;43860:11;43810:8;:62::i;:::-;43911:15;:66;;;43992:11;44018:1;44062:4;44081:2;44098:15;43911:213;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43607:535;43540:602;;:::o;38073:189::-;38190:5;38156:25;:31;38182:4;38156:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38248:5;38214:40;;38242:4;38214:40;;;;;;;;;;;;38073:189;;:::o;44677:278::-;44716:23;44742:9;:24;44760:4;44742:24;;;;;;;;;;;;;;;;44716:50;;44777:12;44802:48;44819:15;44844:4;44802:16;:48::i;:::-;44893:14;;;;;;;;;;;44885:28;;44921:21;44885:62;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44872:75;;;;;44705:250;;44677:278::o;46410:772::-;46467:4;46502:15;46485:14;:32;;;;46573:28;46604:4;:14;;;46619:13;46604:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46573:60;;46684:20;46707:53;46754:5;46707:42;46732:16;;46707:20;:24;;:42;;;;:::i;:::-;:46;;:53;;;;:::i;:::-;46684:76;;46881:1;46866:12;:16;46862:113;;;46898:65;46914:13;29846:42;46950:12;46898:15;:65::i;:::-;46862:113;47051:19;47088:13;47051:51;;47113:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47140:12;;;;;;;;;;47170:4;47163:11;;;;;46410:772;:::o;19558:279::-;19644:7;19676:1;19672;:5;19679:12;19664:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19703:9;19719:1;19715;:5;;;;:::i;:::-;19703:17;;19828:1;19821:8;;;19558:279;;;;;:::o;16224:125::-;;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:474::-;909:6;917;966:2;954:9;945:7;941:23;937:32;934:119;;;972:79;;:::i;:::-;934:119;1092:1;1117:53;1162:7;1153:6;1142:9;1138:22;1117:53;:::i;:::-;1107:63;;1063:117;1219:2;1245:53;1290:7;1281:6;1270:9;1266:22;1245:53;:::i;:::-;1235:63;;1190:118;841:474;;;;;:::o;1321:77::-;1358:7;1387:5;1376:16;;1321:77;;;:::o;1404:118::-;1491:24;1509:5;1491:24;:::i;:::-;1486:3;1479:37;1404:118;;:::o;1528:222::-;1621:4;1659:2;1648:9;1644:18;1636:26;;1672:71;1740:1;1729:9;1725:17;1716:6;1672:71;:::i;:::-;1528:222;;;;:::o;1756:99::-;1808:6;1842:5;1836:12;1826:22;;1756:99;;;:::o;1861:169::-;1945:11;1979:6;1974:3;1967:19;2019:4;2014:3;2010:14;1995:29;;1861:169;;;;:::o;2036:246::-;2117:1;2127:113;2141:6;2138:1;2135:13;2127:113;;;2226:1;2221:3;2217:11;2211:18;2207:1;2202:3;2198:11;2191:39;2163:2;2160:1;2156:10;2151:15;;2127:113;;;2274:1;2265:6;2260:3;2256:16;2249:27;2098:184;2036:246;;;:::o;2288:102::-;2329:6;2380:2;2376:7;2371:2;2364:5;2360:14;2356:28;2346:38;;2288:102;;;:::o;2396:377::-;2484:3;2512:39;2545:5;2512:39;:::i;:::-;2567:71;2631:6;2626:3;2567:71;:::i;:::-;2560:78;;2647:65;2705:6;2700:3;2693:4;2686:5;2682:16;2647:65;:::i;:::-;2737:29;2759:6;2737:29;:::i;:::-;2732:3;2728:39;2721:46;;2488:285;2396:377;;;;:::o;2779:313::-;2892:4;2930:2;2919:9;2915:18;2907:26;;2979:9;2973:4;2969:20;2965:1;2954:9;2950:17;2943:47;3007:78;3080:4;3071:6;3007:78;:::i;:::-;2999:86;;2779:313;;;;:::o;3098:122::-;3171:24;3189:5;3171:24;:::i;:::-;3164:5;3161:35;3151:63;;3210:1;3207;3200:12;3151:63;3098:122;:::o;3226:139::-;3272:5;3310:6;3297:20;3288:29;;3326:33;3353:5;3326:33;:::i;:::-;3226:139;;;;:::o;3371:474::-;3439:6;3447;3496:2;3484:9;3475:7;3471:23;3467:32;3464:119;;;3502:79;;:::i;:::-;3464:119;3622:1;3647:53;3692:7;3683:6;3672:9;3668:22;3647:53;:::i;:::-;3637:63;;3593:117;3749:2;3775:53;3820:7;3811:6;3800:9;3796:22;3775:53;:::i;:::-;3765:63;;3720:118;3371:474;;;;;:::o;3851:90::-;3885:7;3928:5;3921:13;3914:21;3903:32;;3851:90;;;:::o;3947:109::-;4028:21;4043:5;4028:21;:::i;:::-;4023:3;4016:34;3947:109;;:::o;4062:210::-;4149:4;4187:2;4176:9;4172:18;4164:26;;4200:65;4262:1;4251:9;4247:17;4238:6;4200:65;:::i;:::-;4062:210;;;;:::o;4278:329::-;4337:6;4386:2;4374:9;4365:7;4361:23;4357:32;4354:119;;;4392:79;;:::i;:::-;4354:119;4512:1;4537:53;4582:7;4573:6;4562:9;4558:22;4537:53;:::i;:::-;4527:63;;4483:117;4278:329;;;;:::o;4613:60::-;4641:3;4662:5;4655:12;;4613:60;;;:::o;4679:142::-;4729:9;4762:53;4780:34;4789:24;4807:5;4789:24;:::i;:::-;4780:34;:::i;:::-;4762:53;:::i;:::-;4749:66;;4679:142;;;:::o;4827:126::-;4877:9;4910:37;4941:5;4910:37;:::i;:::-;4897:50;;4827:126;;;:::o;4959:153::-;5036:9;5069:37;5100:5;5069:37;:::i;:::-;5056:50;;4959:153;;;:::o;5118:185::-;5232:64;5290:5;5232:64;:::i;:::-;5227:3;5220:77;5118:185;;:::o;5309:276::-;5429:4;5467:2;5456:9;5452:18;5444:26;;5480:98;5575:1;5564:9;5560:17;5551:6;5480:98;:::i;:::-;5309:276;;;;:::o;5591:329::-;5650:6;5699:2;5687:9;5678:7;5674:23;5670:32;5667:119;;;5705:79;;:::i;:::-;5667:119;5825:1;5850:53;5895:7;5886:6;5875:9;5871:22;5850:53;:::i;:::-;5840:63;;5796:117;5591:329;;;;:::o;5926:619::-;6003:6;6011;6019;6068:2;6056:9;6047:7;6043:23;6039:32;6036:119;;;6074:79;;:::i;:::-;6036:119;6194:1;6219:53;6264:7;6255:6;6244:9;6240:22;6219:53;:::i;:::-;6209:63;;6165:117;6321:2;6347:53;6392:7;6383:6;6372:9;6368:22;6347:53;:::i;:::-;6337:63;;6292:118;6449:2;6475:53;6520:7;6511:6;6500:9;6496:22;6475:53;:::i;:::-;6465:63;;6420:118;5926:619;;;;;:::o;6551:116::-;6621:21;6636:5;6621:21;:::i;:::-;6614:5;6611:32;6601:60;;6657:1;6654;6647:12;6601:60;6551:116;:::o;6673:133::-;6716:5;6754:6;6741:20;6732:29;;6770:30;6794:5;6770:30;:::i;:::-;6673:133;;;;:::o;6812:468::-;6877:6;6885;6934:2;6922:9;6913:7;6909:23;6905:32;6902:119;;;6940:79;;:::i;:::-;6902:119;7060:1;7085:53;7130:7;7121:6;7110:9;7106:22;7085:53;:::i;:::-;7075:63;;7031:117;7187:2;7213:50;7255:7;7246:6;7235:9;7231:22;7213:50;:::i;:::-;7203:60;;7158:115;6812:468;;;;;:::o;7286:86::-;7321:7;7361:4;7354:5;7350:16;7339:27;;7286:86;;;:::o;7378:112::-;7461:22;7477:5;7461:22;:::i;:::-;7456:3;7449:35;7378:112;;:::o;7496:214::-;7585:4;7623:2;7612:9;7608:18;7600:26;;7636:67;7700:1;7689:9;7685:17;7676:6;7636:67;:::i;:::-;7496:214;;;;:::o;7716:118::-;7803:24;7821:5;7803:24;:::i;:::-;7798:3;7791:37;7716:118;;:::o;7840:222::-;7933:4;7971:2;7960:9;7956:18;7948:26;;7984:71;8052:1;8041:9;8037:17;8028:6;7984:71;:::i;:::-;7840:222;;;;:::o;8068:613::-;8142:6;8150;8158;8207:2;8195:9;8186:7;8182:23;8178:32;8175:119;;;8213:79;;:::i;:::-;8175:119;8333:1;8358:53;8403:7;8394:6;8383:9;8379:22;8358:53;:::i;:::-;8348:63;;8304:117;8460:2;8486:53;8531:7;8522:6;8511:9;8507:22;8486:53;:::i;:::-;8476:63;;8431:118;8588:2;8614:50;8656:7;8647:6;8636:9;8632:22;8614:50;:::i;:::-;8604:60;;8559:115;8068:613;;;;;:::o;8687:619::-;8764:6;8772;8780;8829:2;8817:9;8808:7;8804:23;8800:32;8797:119;;;8835:79;;:::i;:::-;8797:119;8955:1;8980:53;9025:7;9016:6;9005:9;9001:22;8980:53;:::i;:::-;8970:63;;8926:117;9082:2;9108:53;9153:7;9144:6;9133:9;9129:22;9108:53;:::i;:::-;9098:63;;9053:118;9210:2;9236:53;9281:7;9272:6;9261:9;9257:22;9236:53;:::i;:::-;9226:63;;9181:118;8687:619;;;;;:::o;9312:323::-;9368:6;9417:2;9405:9;9396:7;9392:23;9388:32;9385:119;;;9423:79;;:::i;:::-;9385:119;9543:1;9568:50;9610:7;9601:6;9590:9;9586:22;9568:50;:::i;:::-;9558:60;;9514:114;9312:323;;;;:::o;9641:180::-;9689:77;9686:1;9679:88;9786:4;9783:1;9776:15;9810:4;9807:1;9800:15;9827:320;9871:6;9908:1;9902:4;9898:12;9888:22;;9955:1;9949:4;9945:12;9976:18;9966:81;;10032:4;10024:6;10020:17;10010:27;;9966:81;10094:2;10086:6;10083:14;10063:18;10060:38;10057:84;;10113:18;;:::i;:::-;10057:84;9878:269;9827:320;;;:::o;10153:182::-;10293:34;10289:1;10281:6;10277:14;10270:58;10153:182;:::o;10341:366::-;10483:3;10504:67;10568:2;10563:3;10504:67;:::i;:::-;10497:74;;10580:93;10669:3;10580:93;:::i;:::-;10698:2;10693:3;10689:12;10682:19;;10341:366;;;:::o;10713:419::-;10879:4;10917:2;10906:9;10902:18;10894:26;;10966:9;10960:4;10956:20;10952:1;10941:9;10937:17;10930:47;10994:131;11120:4;10994:131;:::i;:::-;10986:139;;10713:419;;;:::o;11138:180::-;11186:77;11183:1;11176:88;11283:4;11280:1;11273:15;11307:4;11304:1;11297:15;11324:410;11364:7;11387:20;11405:1;11387:20;:::i;:::-;11382:25;;11421:20;11439:1;11421:20;:::i;:::-;11416:25;;11476:1;11473;11469:9;11498:30;11516:11;11498:30;:::i;:::-;11487:41;;11677:1;11668:7;11664:15;11661:1;11658:22;11638:1;11631:9;11611:83;11588:139;;11707:18;;:::i;:::-;11588:139;11372:362;11324:410;;;;:::o;11740:180::-;11788:77;11785:1;11778:88;11885:4;11882:1;11875:15;11909:4;11906:1;11899:15;11926:185;11966:1;11983:20;12001:1;11983:20;:::i;:::-;11978:25;;12017:20;12035:1;12017:20;:::i;:::-;12012:25;;12056:1;12046:35;;12061:18;;:::i;:::-;12046:35;12103:1;12100;12096:9;12091:14;;11926:185;;;;:::o;12117:234::-;12257:34;12253:1;12245:6;12241:14;12234:58;12326:17;12321:2;12313:6;12309:15;12302:42;12117:234;:::o;12357:366::-;12499:3;12520:67;12584:2;12579:3;12520:67;:::i;:::-;12513:74;;12596:93;12685:3;12596:93;:::i;:::-;12714:2;12709:3;12705:12;12698:19;;12357:366;;;:::o;12729:419::-;12895:4;12933:2;12922:9;12918:18;12910:26;;12982:9;12976:4;12972:20;12968:1;12957:9;12953:17;12946:47;13010:131;13136:4;13010:131;:::i;:::-;13002:139;;12729:419;;;:::o;13154:191::-;13194:3;13213:20;13231:1;13213:20;:::i;:::-;13208:25;;13247:20;13265:1;13247:20;:::i;:::-;13242:25;;13290:1;13287;13283:9;13276:16;;13311:3;13308:1;13305:10;13302:36;;;13318:18;;:::i;:::-;13302:36;13154:191;;;;:::o;13351:182::-;13491:34;13487:1;13479:6;13475:14;13468:58;13351:182;:::o;13539:366::-;13681:3;13702:67;13766:2;13761:3;13702:67;:::i;:::-;13695:74;;13778:93;13867:3;13778:93;:::i;:::-;13896:2;13891:3;13887:12;13880:19;;13539:366;;;:::o;13911:419::-;14077:4;14115:2;14104:9;14100:18;14092:26;;14164:9;14158:4;14154:20;14150:1;14139:9;14135:17;14128:47;14192:131;14318:4;14192:131;:::i;:::-;14184:139;;13911:419;;;:::o;14336:143::-;14393:5;14424:6;14418:13;14409:22;;14440:33;14467:5;14440:33;:::i;:::-;14336:143;;;;:::o;14485:351::-;14555:6;14604:2;14592:9;14583:7;14579:23;14575:32;14572:119;;;14610:79;;:::i;:::-;14572:119;14730:1;14755:64;14811:7;14802:6;14791:9;14787:22;14755:64;:::i;:::-;14745:74;;14701:128;14485:351;;;;:::o;14842:238::-;14982:34;14978:1;14970:6;14966:14;14959:58;15051:21;15046:2;15038:6;15034:15;15027:46;14842:238;:::o;15086:366::-;15228:3;15249:67;15313:2;15308:3;15249:67;:::i;:::-;15242:74;;15325:93;15414:3;15325:93;:::i;:::-;15443:2;15438:3;15434:12;15427:19;;15086:366;;;:::o;15458:419::-;15624:4;15662:2;15651:9;15647:18;15639:26;;15711:9;15705:4;15701:20;15697:1;15686:9;15682:17;15675:47;15739:131;15865:4;15739:131;:::i;:::-;15731:139;;15458:419;;;:::o;15883:235::-;16023:34;16019:1;16011:6;16007:14;16000:58;16092:18;16087:2;16079:6;16075:15;16068:43;15883:235;:::o;16124:366::-;16266:3;16287:67;16351:2;16346:3;16287:67;:::i;:::-;16280:74;;16363:93;16452:3;16363:93;:::i;:::-;16481:2;16476:3;16472:12;16465:19;;16124:366;;;:::o;16496:419::-;16662:4;16700:2;16689:9;16685:18;16677:26;;16749:9;16743:4;16739:20;16735:1;16724:9;16720:17;16713:47;16777:131;16903:4;16777:131;:::i;:::-;16769:139;;16496:419;;;:::o;16921:179::-;17061:31;17057:1;17049:6;17045:14;17038:55;16921:179;:::o;17106:366::-;17248:3;17269:67;17333:2;17328:3;17269:67;:::i;:::-;17262:74;;17345:93;17434:3;17345:93;:::i;:::-;17463:2;17458:3;17454:12;17447:19;;17106:366;;;:::o;17478:419::-;17644:4;17682:2;17671:9;17667:18;17659:26;;17731:9;17725:4;17721:20;17717:1;17706:9;17702:17;17695:47;17759:131;17885:4;17759:131;:::i;:::-;17751:139;;17478:419;;;:::o;17903:244::-;18043:34;18039:1;18031:6;18027:14;18020:58;18112:27;18107:2;18099:6;18095:15;18088:52;17903:244;:::o;18153:366::-;18295:3;18316:67;18380:2;18375:3;18316:67;:::i;:::-;18309:74;;18392:93;18481:3;18392:93;:::i;:::-;18510:2;18505:3;18501:12;18494:19;;18153:366;;;:::o;18525:419::-;18691:4;18729:2;18718:9;18714:18;18706:26;;18778:9;18772:4;18768:20;18764:1;18753:9;18749:17;18742:47;18806:131;18932:4;18806:131;:::i;:::-;18798:139;;18525:419;;;:::o;18950:223::-;19090:34;19086:1;19078:6;19074:14;19067:58;19159:6;19154:2;19146:6;19142:15;19135:31;18950:223;:::o;19179:366::-;19321:3;19342:67;19406:2;19401:3;19342:67;:::i;:::-;19335:74;;19418:93;19507:3;19418:93;:::i;:::-;19536:2;19531:3;19527:12;19520:19;;19179:366;;;:::o;19551:419::-;19717:4;19755:2;19744:9;19740:18;19732:26;;19804:9;19798:4;19794:20;19790:1;19779:9;19775:17;19768:47;19832:131;19958:4;19832:131;:::i;:::-;19824:139;;19551:419;;;:::o;19976:240::-;20116:34;20112:1;20104:6;20100:14;20093:58;20185:23;20180:2;20172:6;20168:15;20161:48;19976:240;:::o;20222:366::-;20364:3;20385:67;20449:2;20444:3;20385:67;:::i;:::-;20378:74;;20461:93;20550:3;20461:93;:::i;:::-;20579:2;20574:3;20570:12;20563:19;;20222:366;;;:::o;20594:419::-;20760:4;20798:2;20787:9;20783:18;20775:26;;20847:9;20841:4;20837:20;20833:1;20822:9;20818:17;20811:47;20875:131;21001:4;20875:131;:::i;:::-;20867:139;;20594:419;;;:::o;21019:239::-;21159:34;21155:1;21147:6;21143:14;21136:58;21228:22;21223:2;21215:6;21211:15;21204:47;21019:239;:::o;21264:366::-;21406:3;21427:67;21491:2;21486:3;21427:67;:::i;:::-;21420:74;;21503:93;21592:3;21503:93;:::i;:::-;21621:2;21616:3;21612:12;21605:19;;21264:366;;;:::o;21636:419::-;21802:4;21840:2;21829:9;21825:18;21817:26;;21889:9;21883:4;21879:20;21875:1;21864:9;21860:17;21853:47;21917:131;22043:4;21917:131;:::i;:::-;21909:139;;21636:419;;;:::o;22061:225::-;22201:34;22197:1;22189:6;22185:14;22178:58;22270:8;22265:2;22257:6;22253:15;22246:33;22061:225;:::o;22292:366::-;22434:3;22455:67;22519:2;22514:3;22455:67;:::i;:::-;22448:74;;22531:93;22620:3;22531:93;:::i;:::-;22649:2;22644:3;22640:12;22633:19;;22292:366;;;:::o;22664:419::-;22830:4;22868:2;22857:9;22853:18;22845:26;;22917:9;22911:4;22907:20;22903:1;22892:9;22888:17;22881:47;22945:131;23071:4;22945:131;:::i;:::-;22937:139;;22664:419;;;:::o;23089:177::-;23229:29;23225:1;23217:6;23213:14;23206:53;23089:177;:::o;23272:366::-;23414:3;23435:67;23499:2;23494:3;23435:67;:::i;:::-;23428:74;;23511:93;23600:3;23511:93;:::i;:::-;23629:2;23624:3;23620:12;23613:19;;23272:366;;;:::o;23644:419::-;23810:4;23848:2;23837:9;23833:18;23825:26;;23897:9;23891:4;23887:20;23883:1;23872:9;23868:17;23861:47;23925:131;24051:4;23925:131;:::i;:::-;23917:139;;23644:419;;;:::o;24069:223::-;24209:34;24205:1;24197:6;24193:14;24186:58;24278:6;24273:2;24265:6;24261:15;24254:31;24069:223;:::o;24298:366::-;24440:3;24461:67;24525:2;24520:3;24461:67;:::i;:::-;24454:74;;24537:93;24626:3;24537:93;:::i;:::-;24655:2;24650:3;24646:12;24639:19;;24298:366;;;:::o;24670:419::-;24836:4;24874:2;24863:9;24859:18;24851:26;;24923:9;24917:4;24913:20;24909:1;24898:9;24894:17;24887:47;24951:131;25077:4;24951:131;:::i;:::-;24943:139;;24670:419;;;:::o;25095:221::-;25235:34;25231:1;25223:6;25219:14;25212:58;25304:4;25299:2;25291:6;25287:15;25280:29;25095:221;:::o;25322:366::-;25464:3;25485:67;25549:2;25544:3;25485:67;:::i;:::-;25478:74;;25561:93;25650:3;25561:93;:::i;:::-;25679:2;25674:3;25670:12;25663:19;;25322:366;;;:::o;25694:419::-;25860:4;25898:2;25887:9;25883:18;25875:26;;25947:9;25941:4;25937:20;25933:1;25922:9;25918:17;25911:47;25975:131;26101:4;25975:131;:::i;:::-;25967:139;;25694:419;;;:::o;26119:224::-;26259:34;26255:1;26247:6;26243:14;26236:58;26328:7;26323:2;26315:6;26311:15;26304:32;26119:224;:::o;26349:366::-;26491:3;26512:67;26576:2;26571:3;26512:67;:::i;:::-;26505:74;;26588:93;26677:3;26588:93;:::i;:::-;26706:2;26701:3;26697:12;26690:19;;26349:366;;;:::o;26721:419::-;26887:4;26925:2;26914:9;26910:18;26902:26;;26974:9;26968:4;26964:20;26960:1;26949:9;26945:17;26938:47;27002:131;27128:4;27002:131;:::i;:::-;26994:139;;26721:419;;;:::o;27146:222::-;27286:34;27282:1;27274:6;27270:14;27263:58;27355:5;27350:2;27342:6;27338:15;27331:30;27146:222;:::o;27374:366::-;27516:3;27537:67;27601:2;27596:3;27537:67;:::i;:::-;27530:74;;27613:93;27702:3;27613:93;:::i;:::-;27731:2;27726:3;27722:12;27715:19;;27374:366;;;:::o;27746:419::-;27912:4;27950:2;27939:9;27935:18;27927:26;;27999:9;27993:4;27989:20;27985:1;27974:9;27970:17;27963:47;28027:131;28153:4;28027:131;:::i;:::-;28019:139;;27746:419;;;:::o;28171:236::-;28311:34;28307:1;28299:6;28295:14;28288:58;28380:19;28375:2;28367:6;28363:15;28356:44;28171:236;:::o;28413:366::-;28555:3;28576:67;28640:2;28635:3;28576:67;:::i;:::-;28569:74;;28652:93;28741:3;28652:93;:::i;:::-;28770:2;28765:3;28761:12;28754:19;;28413:366;;;:::o;28785:419::-;28951:4;28989:2;28978:9;28974:18;28966:26;;29038:9;29032:4;29028:20;29024:1;29013:9;29009:17;29002:47;29066:131;29192:4;29066:131;:::i;:::-;29058:139;;28785:419;;;:::o;29210:172::-;29350:24;29346:1;29338:6;29334:14;29327:48;29210:172;:::o;29388:366::-;29530:3;29551:67;29615:2;29610:3;29551:67;:::i;:::-;29544:74;;29627:93;29716:3;29627:93;:::i;:::-;29745:2;29740:3;29736:12;29729:19;;29388:366;;;:::o;29760:419::-;29926:4;29964:2;29953:9;29949:18;29941:26;;30013:9;30007:4;30003:20;29999:1;29988:9;29984:17;29977:47;30041:131;30167:4;30041:131;:::i;:::-;30033:139;;29760:419;;;:::o;30185:297::-;30325:34;30321:1;30313:6;30309:14;30302:58;30394:34;30389:2;30381:6;30377:15;30370:59;30463:11;30458:2;30450:6;30446:15;30439:36;30185:297;:::o;30488:366::-;30630:3;30651:67;30715:2;30710:3;30651:67;:::i;:::-;30644:74;;30727:93;30816:3;30727:93;:::i;:::-;30845:2;30840:3;30836:12;30829:19;;30488:366;;;:::o;30860:419::-;31026:4;31064:2;31053:9;31049:18;31041:26;;31113:9;31107:4;31103:20;31099:1;31088:9;31084:17;31077:47;31141:131;31267:4;31141:131;:::i;:::-;31133:139;;30860:419;;;:::o;31285:240::-;31425:34;31421:1;31413:6;31409:14;31402:58;31494:23;31489:2;31481:6;31477:15;31470:48;31285:240;:::o;31531:366::-;31673:3;31694:67;31758:2;31753:3;31694:67;:::i;:::-;31687:74;;31770:93;31859:3;31770:93;:::i;:::-;31888:2;31883:3;31879:12;31872:19;;31531:366;;;:::o;31903:419::-;32069:4;32107:2;32096:9;32092:18;32084:26;;32156:9;32150:4;32146:20;32142:1;32131:9;32127:17;32120:47;32184:131;32310:4;32184:131;:::i;:::-;32176:139;;31903:419;;;:::o;32328:169::-;32468:21;32464:1;32456:6;32452:14;32445:45;32328:169;:::o;32503:366::-;32645:3;32666:67;32730:2;32725:3;32666:67;:::i;:::-;32659:74;;32742:93;32831:3;32742:93;:::i;:::-;32860:2;32855:3;32851:12;32844:19;;32503:366;;;:::o;32875:419::-;33041:4;33079:2;33068:9;33064:18;33056:26;;33128:9;33122:4;33118:20;33114:1;33103:9;33099:17;33092:47;33156:131;33282:4;33156:131;:::i;:::-;33148:139;;32875:419;;;:::o;33300:241::-;33440:34;33436:1;33428:6;33424:14;33417:58;33509:24;33504:2;33496:6;33492:15;33485:49;33300:241;:::o;33547:366::-;33689:3;33710:67;33774:2;33769:3;33710:67;:::i;:::-;33703:74;;33786:93;33875:3;33786:93;:::i;:::-;33904:2;33899:3;33895:12;33888:19;;33547:366;;;:::o;33919:419::-;34085:4;34123:2;34112:9;34108:18;34100:26;;34172:9;34166:4;34162:20;34158:1;34147:9;34143:17;34136:47;34200:131;34326:4;34200:131;:::i;:::-;34192:139;;33919:419;;;:::o;34344:194::-;34384:4;34404:20;34422:1;34404:20;:::i;:::-;34399:25;;34438:20;34456:1;34438:20;:::i;:::-;34433:25;;34482:1;34479;34475:9;34467:17;;34506:1;34500:4;34497:11;34494:37;;;34511:18;;:::i;:::-;34494:37;34344:194;;;;:::o;34544:220::-;34684:34;34680:1;34672:6;34668:14;34661:58;34753:3;34748:2;34740:6;34736:15;34729:28;34544:220;:::o;34770:366::-;34912:3;34933:67;34997:2;34992:3;34933:67;:::i;:::-;34926:74;;35009:93;35098:3;35009:93;:::i;:::-;35127:2;35122:3;35118:12;35111:19;;34770:366;;;:::o;35142:419::-;35308:4;35346:2;35335:9;35331:18;35323:26;;35395:9;35389:4;35385:20;35381:1;35370:9;35366:17;35359:47;35423:131;35549:4;35423:131;:::i;:::-;35415:139;;35142:419;;;:::o;35567:180::-;35615:77;35612:1;35605:88;35712:4;35709:1;35702:15;35736:4;35733:1;35726:15;35753:180;35801:77;35798:1;35791:88;35898:4;35895:1;35888:15;35922:4;35919:1;35912:15;35939:143;35996:5;36027:6;36021:13;36012:22;;36043:33;36070:5;36043:33;:::i;:::-;35939:143;;;;:::o;36088:351::-;36158:6;36207:2;36195:9;36186:7;36182:23;36178:32;36175:119;;;36213:79;;:::i;:::-;36175:119;36333:1;36358:64;36414:7;36405:6;36394:9;36390:22;36358:64;:::i;:::-;36348:74;;36304:128;36088:351;;;;:::o;36445:85::-;36490:7;36519:5;36508:16;;36445:85;;;:::o;36536:158::-;36594:9;36627:61;36645:42;36654:32;36680:5;36654:32;:::i;:::-;36645:42;:::i;:::-;36627:61;:::i;:::-;36614:74;;36536:158;;;:::o;36700:147::-;36795:45;36834:5;36795:45;:::i;:::-;36790:3;36783:58;36700:147;;:::o;36853:114::-;36920:6;36954:5;36948:12;36938:22;;36853:114;;;:::o;36973:184::-;37072:11;37106:6;37101:3;37094:19;37146:4;37141:3;37137:14;37122:29;;36973:184;;;;:::o;37163:132::-;37230:4;37253:3;37245:11;;37283:4;37278:3;37274:14;37266:22;;37163:132;;;:::o;37301:108::-;37378:24;37396:5;37378:24;:::i;:::-;37373:3;37366:37;37301:108;;:::o;37415:179::-;37484:10;37505:46;37547:3;37539:6;37505:46;:::i;:::-;37583:4;37578:3;37574:14;37560:28;;37415:179;;;;:::o;37600:113::-;37670:4;37702;37697:3;37693:14;37685:22;;37600:113;;;:::o;37749:732::-;37868:3;37897:54;37945:5;37897:54;:::i;:::-;37967:86;38046:6;38041:3;37967:86;:::i;:::-;37960:93;;38077:56;38127:5;38077:56;:::i;:::-;38156:7;38187:1;38172:284;38197:6;38194:1;38191:13;38172:284;;;38273:6;38267:13;38300:63;38359:3;38344:13;38300:63;:::i;:::-;38293:70;;38386:60;38439:6;38386:60;:::i;:::-;38376:70;;38232:224;38219:1;38216;38212:9;38207:14;;38172:284;;;38176:14;38472:3;38465:10;;37873:608;;;37749:732;;;;:::o;38487:831::-;38750:4;38788:3;38777:9;38773:19;38765:27;;38802:71;38870:1;38859:9;38855:17;38846:6;38802:71;:::i;:::-;38883:80;38959:2;38948:9;38944:18;38935:6;38883:80;:::i;:::-;39010:9;39004:4;39000:20;38995:2;38984:9;38980:18;38973:48;39038:108;39141:4;39132:6;39038:108;:::i;:::-;39030:116;;39156:72;39224:2;39213:9;39209:18;39200:6;39156:72;:::i;:::-;39238:73;39306:3;39295:9;39291:19;39282:6;39238:73;:::i;:::-;38487:831;;;;;;;;:::o;39324:147::-;39425:11;39462:3;39447:18;;39324:147;;;;:::o;39477:114::-;;:::o;39597:398::-;39756:3;39777:83;39858:1;39853:3;39777:83;:::i;:::-;39770:90;;39869:93;39958:3;39869:93;:::i;:::-;39987:1;39982:3;39978:11;39971:18;;39597:398;;;:::o;40001:379::-;40185:3;40207:147;40350:3;40207:147;:::i;:::-;40200:154;;40371:3;40364:10;;40001:379;;;:::o

Swarm Source

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