ETH Price: $3,912.17 (+0.10%)

Contract

0x26E53F83d29323540128dEe1f1fcF74d6d9297CF
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Sell Fees153972722022-08-23 14:57:40843 days ago1661266660IN
New Community Luna (CLUNA): Old $CLUNA Token
0 ETH0.0008601317.18817007
Approve153968742022-08-23 13:36:18843 days ago1661261778IN
New Community Luna (CLUNA): Old $CLUNA Token
0 ETH0.0005969412.63242998
Approve153968432022-08-23 13:29:36843 days ago1661261376IN
New Community Luna (CLUNA): Old $CLUNA Token
0 ETH0.0006542913.8460796
Approve153967422022-08-23 13:07:54843 days ago1661260074IN
New Community Luna (CLUNA): Old $CLUNA Token
0 ETH0.000411898.7164097
Approve153966572022-08-23 12:50:44843 days ago1661259044IN
New Community Luna (CLUNA): Old $CLUNA Token
0 ETH0.0005357411.33735859
Approve153966222022-08-23 12:43:45843 days ago1661258625IN
New Community Luna (CLUNA): Old $CLUNA Token
0 ETH0.000447439.46856331
Approve153965742022-08-23 12:35:39843 days ago1661258139IN
New Community Luna (CLUNA): Old $CLUNA Token
0 ETH0.0004831810.22495525
Set Buy Back Ena...153965382022-08-23 12:27:38843 days ago1661257658IN
New Community Luna (CLUNA): Old $CLUNA Token
0 ETH0.0004738915.66691842
Approve153964602022-08-23 12:07:07843 days ago1661256427IN
New Community Luna (CLUNA): Old $CLUNA Token
0 ETH0.000336497.12080703
Transfer153963542022-08-23 11:45:43843 days ago1661255143IN
New Community Luna (CLUNA): Old $CLUNA Token
0 ETH0.000479446.39994002
Transfer153963342022-08-23 11:42:19843 days ago1661254939IN
New Community Luna (CLUNA): Old $CLUNA Token
0 ETH0.0015028818.85057612
Transfer153962952022-08-23 11:33:41843 days ago1661254421IN
New Community Luna (CLUNA): Old $CLUNA Token
0 ETH0.000670279.7922333
Approve153962912022-08-23 11:32:53843 days ago1661254373IN
New Community Luna (CLUNA): Old $CLUNA Token
0 ETH0.0006008612.71538701
Approve153962912022-08-23 11:32:53843 days ago1661254373IN
New Community Luna (CLUNA): Old $CLUNA Token
0 ETH0.0006008612.71538701
Approve153962912022-08-23 11:32:53843 days ago1661254373IN
New Community Luna (CLUNA): Old $CLUNA Token
0 ETH0.0006008612.71538701
Transfer153962882022-08-23 11:31:53843 days ago1661254313IN
New Community Luna (CLUNA): Old $CLUNA Token
0 ETH0.000637759.31871505
Transfer153962862022-08-23 11:31:08843 days ago1661254268IN
New Community Luna (CLUNA): Old $CLUNA Token
0 ETH0.000658399.61861095
Approve153962482022-08-23 11:22:54843 days ago1661253774IN
New Community Luna (CLUNA): Old $CLUNA Token
0 ETH0.0004364915.95679188
Transfer153962442022-08-23 11:21:45843 days ago1661253705IN
New Community Luna (CLUNA): Old $CLUNA Token
0 ETH0.0009523313.91288836
Approve153962432022-08-23 11:21:43843 days ago1661253703IN
New Community Luna (CLUNA): Old $CLUNA Token
0 ETH0.0006206613.13447506
Approve153962292022-08-23 11:15:08843 days ago1661253308IN
New Community Luna (CLUNA): Old $CLUNA Token
0 ETH0.000311016.58169266
Approve153962292022-08-23 11:15:08843 days ago1661253308IN
New Community Luna (CLUNA): Old $CLUNA Token
0 ETH0.000311016.58169266
Approve153962292022-08-23 11:15:08843 days ago1661253308IN
New Community Luna (CLUNA): Old $CLUNA Token
0 ETH0.000311016.58169266
Approve153962232022-08-23 11:13:31843 days ago1661253211IN
New Community Luna (CLUNA): Old $CLUNA Token
0 ETH0.000360977.63895898
Approve153962002022-08-23 11:09:04843 days ago1661252944IN
New Community Luna (CLUNA): Old $CLUNA Token
0 ETH0.0007487315.8445888
View all transactions

Latest 4 internal transactions

Advanced mode:
Parent Transaction Hash Block
From
To
153962122022-08-23 11:10:52843 days ago1661253052
New Community Luna (CLUNA): Old $CLUNA Token
0.0000712 ETH
153962122022-08-23 11:10:52843 days ago1661253052
New Community Luna (CLUNA): Old $CLUNA Token
0.00033229 ETH
153962122022-08-23 11:10:52843 days ago1661253052
New Community Luna (CLUNA): Old $CLUNA Token
0.00001187 ETH
153962122022-08-23 11:10:52843 days ago1661253052
New Community Luna (CLUNA): Old $CLUNA Token
0.00001187 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CLUNA

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-18
*/

// SPDX-License-Identifier: Unlicensed


pragma solidity 0.8.16;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}



abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 9;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _createTokens(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

   
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SignedSafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SignedSafeMath {
    /**
     * @dev Returns the multiplication of two signed integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two signed integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        return a / b;
    }

    /**
     * @dev Returns the subtraction of two signed integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        return a - b;
    }

    /**
     * @dev Returns the addition of two signed integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        return a + b;
    }
}

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

/**
 * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow
 * checks.
 *
 * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can
 * easily result in undesired exploitation or bugs, since developers usually
 * assume that overflows raise errors. `SafeCast` restores this intuition by
 * reverting the transaction when such an operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 *
 * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing
 * all math on `uint256` and `int256` and then downcasting.
 */
library SafeCast {
    /**
     * @dev Returns the downcasted uint224 from uint256, reverting on
     * overflow (when the input is greater than largest uint224).
     *
     * Counterpart to Solidity's `uint224` operator.
     *
     * Requirements:
     *
     * - input must fit into 224 bits
     */
    function toUint224(uint256 value) internal pure returns (uint224) {
        require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits");
        return uint224(value);
    }

    /**
     * @dev Returns the downcasted uint128 from uint256, reverting on
     * overflow (when the input is greater than largest uint128).
     *
     * Counterpart to Solidity's `uint128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     */
    function toUint128(uint256 value) internal pure returns (uint128) {
        require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits");
        return uint128(value);
    }

    /**
     * @dev Returns the downcasted uint96 from uint256, reverting on
     * overflow (when the input is greater than largest uint96).
     *
     * Counterpart to Solidity's `uint96` operator.
     *
     * Requirements:
     *
     * - input must fit into 96 bits
     */
    function toUint96(uint256 value) internal pure returns (uint96) {
        require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits");
        return uint96(value);
    }

    /**
     * @dev Returns the downcasted uint64 from uint256, reverting on
     * overflow (when the input is greater than largest uint64).
     *
     * Counterpart to Solidity's `uint64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     */
    function toUint64(uint256 value) internal pure returns (uint64) {
        require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits");
        return uint64(value);
    }

    /**
     * @dev Returns the downcasted uint32 from uint256, reverting on
     * overflow (when the input is greater than largest uint32).
     *
     * Counterpart to Solidity's `uint32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     */
    function toUint32(uint256 value) internal pure returns (uint32) {
        require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits");
        return uint32(value);
    }

    /**
     * @dev Returns the downcasted uint16 from uint256, reverting on
     * overflow (when the input is greater than largest uint16).
     *
     * Counterpart to Solidity's `uint16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     */
    function toUint16(uint256 value) internal pure returns (uint16) {
        require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits");
        return uint16(value);
    }

    /**
     * @dev Returns the downcasted uint8 from uint256, reverting on
     * overflow (when the input is greater than largest uint8).
     *
     * Counterpart to Solidity's `uint8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits.
     */
    function toUint8(uint256 value) internal pure returns (uint8) {
        require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits");
        return uint8(value);
    }

    /**
     * @dev Converts a signed int256 into an unsigned uint256.
     *
     * Requirements:
     *
     * - input must be greater than or equal to 0.
     */
    function toUint256(int256 value) internal pure returns (uint256) {
        require(value >= 0, "SafeCast: value must be positive");
        return uint256(value);
    }

    /**
     * @dev Returns the downcasted int128 from int256, reverting on
     * overflow (when the input is less than smallest int128 or
     * greater than largest int128).
     *
     * Counterpart to Solidity's `int128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     *
     * _Available since v3.1._
     */
    function toInt128(int256 value) internal pure returns (int128) {
        require(value >= type(int128).min && value <= type(int128).max, "SafeCast: value doesn't fit in 128 bits");
        return int128(value);
    }

    /**
     * @dev Returns the downcasted int64 from int256, reverting on
     * overflow (when the input is less than smallest int64 or
     * greater than largest int64).
     *
     * Counterpart to Solidity's `int64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     *
     * _Available since v3.1._
     */
    function toInt64(int256 value) internal pure returns (int64) {
        require(value >= type(int64).min && value <= type(int64).max, "SafeCast: value doesn't fit in 64 bits");
        return int64(value);
    }

    /**
     * @dev Returns the downcasted int32 from int256, reverting on
     * overflow (when the input is less than smallest int32 or
     * greater than largest int32).
     *
     * Counterpart to Solidity's `int32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     *
     * _Available since v3.1._
     */
    function toInt32(int256 value) internal pure returns (int32) {
        require(value >= type(int32).min && value <= type(int32).max, "SafeCast: value doesn't fit in 32 bits");
        return int32(value);
    }

    /**
     * @dev Returns the downcasted int16 from int256, reverting on
     * overflow (when the input is less than smallest int16 or
     * greater than largest int16).
     *
     * Counterpart to Solidity's `int16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     *
     * _Available since v3.1._
     */
    function toInt16(int256 value) internal pure returns (int16) {
        require(value >= type(int16).min && value <= type(int16).max, "SafeCast: value doesn't fit in 16 bits");
        return int16(value);
    }

    /**
     * @dev Returns the downcasted int8 from int256, reverting on
     * overflow (when the input is less than smallest int8 or
     * greater than largest int8).
     *
     * Counterpart to Solidity's `int8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits.
     *
     * _Available since v3.1._
     */
    function toInt8(int256 value) internal pure returns (int8) {
        require(value >= type(int8).min && value <= type(int8).max, "SafeCast: value doesn't fit in 8 bits");
        return int8(value);
    }

    /**
     * @dev Converts an unsigned uint256 into a signed int256.
     *
     * Requirements:
     *
     * - input must be less than or equal to maxInt256.
     */
    function toInt256(uint256 value) internal pure returns (int256) {
        // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive
        require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256");
        return int256(value);
    }
}


contract LockToken is Ownable {
    bool public isOpen = false;
    mapping(address => bool) private _whiteList;
    modifier open(address from, address to) {
        require(isOpen || _whiteList[from] || _whiteList[to], "Not Open");
        _;
    }

    constructor() {
        _whiteList[msg.sender] = true;
        _whiteList[address(this)] = true;
    }

    function openTrade() external onlyOwner {
        isOpen = true;
    }

    function includeToWhiteList(address[] memory _users) external onlyOwner {
        for(uint8 i = 0; i < _users.length; i++) {
            _whiteList[_users[i]] = true;
        }
    }
}


contract CLUNA is ERC20, Ownable, LockToken {
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private inSwapAndLiquify;
    bool public buyBackEnabled = true;

    bool public swapAndLiquifyEnabled = true;
    
    address public deadWallet = 0x000000000000000000000000000000000000dEaD;

    uint256 public maxSellTransactionAmount = 6907376873 * (10**9);
    uint256 public maxBuyTransactionAmount = 6907376873 * (10**9);
    uint256 public swapTokensAtAmount = 3000000000 * (10**9);
    
    uint256 private buyBackUpperLimit = 1 * 10**17; // equal to 0.1 bnb
    uint256 private _buyBackDivisor = 20;
   
    uint256 public liquidityBuyFee = 1;
    uint256 public buyBackBuyFee = 1;
    uint256 public marketingBuyFee = 2;
    uint256 public communityBuyFee = 2;
    uint256 public operationsBuyFee = 2;
    uint256 public devBuyFee = 2;
    uint256 public totalBuyFees = 10;

    uint256 public liquiditySellFee = 1;
    uint256 public buyBackSellFee = 2;
    uint256 public marketingSellFee = 3;
    uint256 public communitySellFee = 3;
    uint256 public operationsSellFee = 3;
    uint256 public devSellFee = 3;
    uint256 public totalSellFees = 15;
 
    address payable private marketingWallet = payable(0xA30a433d4d168cbc87b5B00C3FEae1B122ea867D);
    address payable private communityWallet = payable(0x98E14AbaB800EE96D749E22DbaB4ba821A4d05cB);
    address payable private operationsWallet = payable(0xCe8B57eB6eEB02E26fc7c0B9E75326BA4f767634);
    address payable private devWallet = payable(0xeC40258A69dfc745cb07C0EccA67CD7A78D7C76E);

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedFromMaxTx;

    // 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 BuyBackEnabledUpdated(bool enabled);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event GasForProcessingUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapEthForTokens(uint256 amountIn, address[] path);
    event SwapAndLiquify(uint256 tokensIntoLiqudity, uint256 ethReceived);

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    constructor() ERC20("$CLUNA", "$CLUNA") {
    	IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(communityWallet, true);
        excludeFromFees(operationsWallet, true);
        excludeFromFees(devWallet, true);
        excludeFromFees(address(this), true);
        
        // exclude from max tx
        _isExcludedFromMaxTx[owner()] = true;
        _isExcludedFromMaxTx[address(this)] = true;
        _isExcludedFromMaxTx[marketingWallet] = true;
        _isExcludedFromMaxTx[communityWallet] = true;
        _isExcludedFromMaxTx[operationsWallet] = true;
        _isExcludedFromMaxTx[devWallet] = true;
        
        /*
            internal function  that is only called here,
            and CANNOT be called ever again
        */
        _createTokens(owner(), 6907376873996 * (10**9));
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) open(from, to) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(automatedMarketMakerPairs[from] && (!_isExcludedFromMaxTx[from]) && (!_isExcludedFromMaxTx[to])){
            require(amount <= maxBuyTransactionAmount, "amount exceeds the maxBuyTransactionAmount.");
        }

        if(automatedMarketMakerPairs[to] && (!_isExcludedFromMaxTx[from]) && (!_isExcludedFromMaxTx[to])){
            require(amount <= maxSellTransactionAmount, "amount exceeds the maxSellTransactionAmount.");
        }
        

    	uint256 contractTokenBalance = balanceOf(address(this));
        
        bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount;
       
        if(!inSwapAndLiquify && automatedMarketMakerPairs[to] && swapAndLiquifyEnabled) {
            if(overMinTokenBalance) {
                contractTokenBalance = swapTokensAtAmount;
                swapAndLiquify(contractTokenBalance);
            }
            
            uint256 balance = address(this).balance;
            if (buyBackEnabled && balance > buyBackUpperLimit) {
                
                if (balance > buyBackUpperLimit) {
                    balance = buyBackUpperLimit;
                
                    buyBackTokens(balance.div(_buyBackDivisor));
                }
            }
        }

         // if any account belongs to _isExcludedFromFee account then remove the fee
        if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            uint256 fees = amount.mul(totalBuyFees).div(100);
            if(automatedMarketMakerPairs[to]) {
                fees = amount.mul(totalSellFees).div(100);
            }
        	amount = amount.sub(fees);
            super._transfer(from, address(this), fees); // get total fee first
            
        }

        super._transfer(from, to, amount);

    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 liquidityTokens = contractTokenBalance.mul(liquiditySellFee).div(totalSellFees);
        uint256 walletTokens = contractTokenBalance.sub(liquidityTokens);
        // split the contract balance into halves
        uint256 half = liquidityTokens.div(2);
        uint256 otherHalf = liquidityTokens.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half, address(this));

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        swapAndSendToWallets(walletTokens);
        
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapAndSendToWallets(uint256 _swapTokens) private {
        uint256 balanceBeforeSwap = address(this).balance;
        swapTokensForEth(_swapTokens, address(this));
        uint256 balanceAfterSwap = address(this).balance.sub(balanceBeforeSwap);
        uint256 marketingShare = balanceAfterSwap.mul(marketingSellFee).div(totalSellFees.sub(liquiditySellFee));
        uint256 communityShare = balanceAfterSwap.mul(communitySellFee).div(totalSellFees.sub(liquiditySellFee));
        uint256 opsShare = balanceAfterSwap.mul(operationsSellFee).div(totalSellFees.sub(liquiditySellFee));
        uint256 devShare = balanceAfterSwap.mul(devSellFee).div(totalSellFees.sub(liquiditySellFee));
        marketingWallet.transfer(marketingShare);
        communityWallet.transfer(communityShare);
        operationsWallet.transfer(opsShare);
        devWallet.transfer(devShare);

    }

    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
            owner(),
            block.timestamp
        );
    }
    
     function buyBackTokens(uint256 amount) private lockTheSwap {
    	if (amount > 0) {
    	    swapEthForTokens(amount);
	    }
    }
    
    function swapEthForTokens(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

      // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0, // accept any amount of Tokens
            path,
            deadWallet, // Burn address
            block.timestamp.add(300)
        );
        
        emit SwapEthForTokens(amount, path);
    }

    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();

        if(allowance(address(this), address(uniswapV2Router)) < tokenAmount) {
          _approve(address(this), address(uniswapV2Router), ~uint256(0));
        }

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            _to,
            block.timestamp
        );
        
    }

    function setBuyFees(uint256 _liqFee, uint256 _bbackFee, uint256 _markFee, uint256 _commFee, uint256 _opsFee, uint256 _devFee) public onlyOwner {  
        liquidityBuyFee = _liqFee;
        buyBackBuyFee = _bbackFee;
        marketingBuyFee = _markFee;
        communityBuyFee = _commFee;
        operationsBuyFee = _opsFee;
        devBuyFee = _devFee;
        totalBuyFees = liquidityBuyFee.add(buyBackBuyFee).add(marketingBuyFee).add(communityBuyFee).add(operationsBuyFee).add(devBuyFee); 
        require(totalBuyFees <= 20, "fees too high");
    }

    function setSellFees(uint256 _liqFee, uint256 _bbackFee, uint256 _markFee, uint256 _commFee, uint256 _opsFee, uint256 _devFee) public onlyOwner {  
        liquiditySellFee = _liqFee;
        buyBackSellFee = _bbackFee;
        marketingSellFee = _markFee;
        communitySellFee = _commFee;
        operationsSellFee = _opsFee;
        devSellFee = _devFee;
        totalSellFees = liquiditySellFee.add(buyBackSellFee).add(marketingSellFee).add(communitySellFee).add(operationsSellFee).add(devSellFee);
        require(totalSellFees <= 20, "fees too high"); 
    }

    function updateWallets(address payable _markWallet, address payable _commWallet, address payable _opsWallet, address payable _devWallet) public onlyOwner {  
        marketingWallet = _markWallet;
        communityWallet = _commWallet;
        operationsWallet = _opsWallet;
        devWallet = _devWallet;
    }

    function setMaxSellTx(uint256 _maxSellTxAmount) public onlyOwner {
        maxSellTransactionAmount = _maxSellTxAmount;
        require(maxSellTransactionAmount >= totalSupply().div(200), "value too low");
    }
    
    function setMaxBuyTx(uint256 _maxBuyTxAmount) public onlyOwner {
        maxBuyTransactionAmount = _maxBuyTxAmount;
        require(maxBuyTransactionAmount >= totalSupply().div(200), "value too low");
    }

      function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(newAddress != address(uniswapV2Router), "The router already has that address");
        emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router));
        uniswapV2Router = IUniswapV2Router02(newAddress);
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }
    
    function buyBackUpperLimitAmount() public view returns (uint256) {
        return buyBackUpperLimit;
    }
    
    function SetBuyBackUpperLimit(uint256 newLimit) external onlyOwner {
        buyBackUpperLimit = newLimit;
    }

    function SetSwapTokensAtAmount(uint256 newLimit) external onlyOwner {
        swapTokensAtAmount = newLimit;
    }
    
    function buyBackDivisor() public view returns (uint256) {
        return _buyBackDivisor;
    }
    
    function setBuyBackEnabled(bool _enabled) public onlyOwner {
        buyBackEnabled = _enabled;
        emit BuyBackEnabledUpdated(_enabled);
    }
    
    function setBuyBackDivisor(uint256 _newValue) external onlyOwner() {
        require(_newValue > 0, "cannot be set as zero");
        _buyBackDivisor = _newValue;
    }
    
    function setExcludeFromMaxTx(address _address, bool value) public onlyOwner { 
        _isExcludedFromMaxTx[_address] = value;
    }

    function setExcludeFromAll(address _address) public onlyOwner {
        _isExcludedFromMaxTx[_address] = true;
        _isExcludedFromFees[_address] = true;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The PancakeSwap pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value, "Automated market maker pair is already set to that value");
        automatedMarketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }
    
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function isExcludedFromMaxTx(address account) public view returns(bool) {
        return _isExcludedFromMaxTx[account];
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    receive() external payable {

  	}
    
}

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":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"BuyBackEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapEthForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"SetBuyBackUpperLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"SetSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackUpperLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"communityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"communitySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"includeToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquiditySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"operationsBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"setBuyBackDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liqFee","type":"uint256"},{"internalType":"uint256","name":"_bbackFee","type":"uint256"},{"internalType":"uint256","name":"_markFee","type":"uint256"},{"internalType":"uint256","name":"_commFee","type":"uint256"},{"internalType":"uint256","name":"_opsFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setExcludeFromAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuyTxAmount","type":"uint256"}],"name":"setMaxBuyTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSellTxAmount","type":"uint256"}],"name":"setMaxSellTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liqFee","type":"uint256"},{"internalType":"uint256","name":"_bbackFee","type":"uint256"},{"internalType":"uint256","name":"_markFee","type":"uint256"},{"internalType":"uint256","name":"_commFee","type":"uint256"},{"internalType":"uint256","name":"_opsFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_markWallet","type":"address"},{"internalType":"address payable","name":"_commWallet","type":"address"},{"internalType":"address payable","name":"_opsWallet","type":"address"},{"internalType":"address payable","name":"_devWallet","type":"address"}],"name":"updateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526000600560146101000a81548160ff0219169083151502179055506001600760156101000a81548160ff0219169083151502179055506001600760166101000a81548160ff02191690831515021790555061dead600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550675fdbeeab4ce9da00600955675fdbeeab4ce9da00600a556729a2241af62c0000600b5567016345785d8a0000600c556014600d556001600e556001600f556002601055600260115560026012556002601355600a601455600160155560026016556003601755600360185560036019556003601a55600f601b5573a30a433d4d168cbc87b5b00c3feae1b122ea867d601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507398e14abab800ee96d749e22dbab4ba821a4d05cb601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ce8b57eb6eeb02e26fc7c0b9e75326ba4f767634601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ec40258a69dfc745cb07c0ecca67cd7a78d7c76e601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200027457600080fd5b506040518060400160405280600681526020017f24434c554e4100000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f24434c554e4100000000000000000000000000000000000000000000000000008152508160039081620002f29190620011bd565b508060049081620003049190620011bd565b505050620003276200031b620009c460201b60201c565b620009cc60201b60201c565b6001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046491906200130e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004f291906200130e565b6040518363ffffffff1660e01b81526004016200051192919062001351565b6020604051808303816000875af115801562000531573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200055791906200130e565b905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050620005e181600162000a9260201b60201c565b62000603620005f562000bc860201b60201c565b600162000bf260201b60201c565b62000638601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000bf260201b60201c565b6200066d601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000bf260201b60201c565b620006a2601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000bf260201b60201c565b620006d7601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000bf260201b60201c565b620006ea30600162000bf260201b60201c565b6001602160006200070062000bc860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001602160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160216000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160216000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160216000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160216000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620009bc620009a562000bc860201b60201c565b690176731c4e0c57b5780062000dc160201b60201c565b505062001675565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150362000b27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b1e9062001405565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000c02620009c460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000c2862000bc860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000c81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c789062001477565b60405180910390fd5b801515602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150362000d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d0d906200150f565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000db591906200154e565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000e33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e2a90620015bb565b60405180910390fd5b62000e476000838362000f3960201b60201c565b806002600082825462000e5b91906200160c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000eb291906200160c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000f19919062001658565b60405180910390a362000f356000838362000f3e60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fc557607f821691505b60208210810362000fdb5762000fda62000f7d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620010457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262001006565b62001051868362001006565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200109e62001098620010928462001069565b62001073565b62001069565b9050919050565b6000819050919050565b620010ba836200107d565b620010d2620010c982620010a5565b84845462001013565b825550505050565b600090565b620010e9620010da565b620010f6818484620010af565b505050565b5b818110156200111e5762001112600082620010df565b600181019050620010fc565b5050565b601f8211156200116d57620011378162000fe1565b620011428462000ff6565b8101602085101562001152578190505b6200116a620011618562000ff6565b830182620010fb565b50505b505050565b600082821c905092915050565b6000620011926000198460080262001172565b1980831691505092915050565b6000620011ad83836200117f565b9150826002028217905092915050565b620011c88262000f43565b67ffffffffffffffff811115620011e457620011e362000f4e565b5b620011f0825462000fac565b620011fd82828562001122565b600060209050601f83116001811462001235576000841562001220578287015190505b6200122c85826200119f565b8655506200129c565b601f198416620012458662000fe1565b60005b828110156200126f5784890151825560018201915060208501945060208101905062001248565b868310156200128f57848901516200128b601f8916826200117f565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620012d682620012a9565b9050919050565b620012e881620012c9565b8114620012f457600080fd5b50565b6000815190506200130881620012dd565b92915050565b600060208284031215620013275762001326620012a4565b5b60006200133784828501620012f7565b91505092915050565b6200134b81620012c9565b82525050565b600060408201905062001368600083018562001340565b62001377602083018462001340565b9392505050565b600082825260208201905092915050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b6000620013ed6038836200137e565b9150620013fa826200138f565b604082019050919050565b600060208201905081810360008301526200142081620013de565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200145f6020836200137e565b91506200146c8262001427565b602082019050919050565b60006020820190508181036000830152620014928162001450565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000620014f7602a836200137e565b9150620015048262001499565b604082019050919050565b600060208201905081810360008301526200152a81620014e8565b9050919050565b60008115159050919050565b620015488162001531565b82525050565b60006020820190506200156560008301846200153d565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620015a3601f836200137e565b9150620015b0826200156b565b602082019050919050565b60006020820190508181036000830152620015d68162001594565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620016198262001069565b9150620016268362001069565b9250828201905080821115620016415762001640620015dd565b5b92915050565b620016528162001069565b82525050565b60006020820190506200166f600083018462001647565b92915050565b6080516156b9620016986000396000818161150e0152611c7d01526156b96000f3fe6080604052600436106103905760003560e01c8063743e540d116101dc578063bdc653ef11610102578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610d5d578063f74c9f4714610d86578063fb17e6dc14610daf578063fb201b1d14610dd857610397565b8063dd62ed3e14610c9f578063e2f4560514610cdc578063e7f444b314610d07578063efcc1b2f14610d3257610397565b8063c2b3e1c2116100dc578063c2b3e1c214610bf7578063c49b9a8014610c20578063ccb6135814610c49578063d0a3981414610c7457610397565b8063bdc653ef14610b78578063c024666814610ba3578063c05e8fa114610bcc57610397565b8063a457c2d71161017a578063b45e83f811610149578063b45e83f814610abc578063b62496f514610ae7578063b9e9370014610b24578063ba876bb914610b4f57610397565b8063a457c2d7146109ee578063a9059cbb14610a2b578063a946163014610a68578063afc1687514610a9157610397565b80638da5cb5b116101b65780638da5cb5b146109445780638ee108231461096f57806395d89b411461099a5780639a7a23d6146109c557610397565b8063743e540d146108c55780637506cbd8146108ee57806385141a771461091957610397565b806339509351116102c15780635b89029c1161025f578063680789521161022e578063680789521461081b5780636be638551461084657806370a0823114610871578063715018a6146108ae57610397565b80635b89029c146107615780636053a0e31461078a578063658c27a9146107b557806365b8dbc0146107f257610397565b806349bd5a5e1161029b57806349bd5a5e146106a35780634a74bb02146106ce5780634fbee193146106f95780635aa821a91461073657610397565b8063395093511461061257806347535d7b1461064f57806349928a501461067a57610397565b80630b6bb6f51161032e57806323b872dd1161030857806323b872dd1461055657806329370cc614610593578063313ce567146105bc578063330f829d146105e757610397565b80630b6bb6f5146104d75780631694505e1461050057806318160ddd1461052b57610397565b806306fdde031161036a57806306fdde031461041b578063095ea7b314610446578063099d0d301461048357806309e89af7146104ae57610397565b806301143fea1461039c57806302259e9e146103c7578063068dde72146103f257610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610def565b6040516103be9190614026565b60405180910390f35b3480156103d357600080fd5b506103dc610df5565b6040516103e99190614026565b60405180910390f35b3480156103fe57600080fd5b5061041960048036038101906104149190614081565b610dfb565b005b34801561042757600080fd5b50610430610ec4565b60405161043d919061413e565b60405180910390f35b34801561045257600080fd5b5061046d600480360381019061046891906141be565b610f56565b60405161047a9190614219565b60405180910390f35b34801561048f57600080fd5b50610498610f74565b6040516104a59190614026565b60405180910390f35b3480156104ba57600080fd5b506104d560048036038101906104d09190614081565b610f7a565b005b3480156104e357600080fd5b506104fe60048036038101906104f9919061437c565b611000565b005b34801561050c57600080fd5b50610515611117565b6040516105229190614424565b60405180910390f35b34801561053757600080fd5b5061054061113d565b60405161054d9190614026565b60405180910390f35b34801561056257600080fd5b5061057d6004803603810190610578919061443f565b611147565b60405161058a9190614219565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b591906144be565b61123f565b005b3480156105c857600080fd5b506105d161130f565b6040516105de9190614507565b60405180910390f35b3480156105f357600080fd5b506105fc611318565b6040516106099190614026565b60405180910390f35b34801561061e57600080fd5b50610639600480360381019061063491906141be565b61131e565b6040516106469190614219565b60405180910390f35b34801561065b57600080fd5b506106646113ca565b6040516106719190614219565b60405180910390f35b34801561068657600080fd5b506106a1600480360381019061069c9190614522565b6113dd565b005b3480156106af57600080fd5b506106b861150c565b6040516106c5919061455e565b60405180910390f35b3480156106da57600080fd5b506106e3611530565b6040516106f09190614219565b60405180910390f35b34801561070557600080fd5b50610720600480360381019061071b9190614522565b611543565b60405161072d9190614219565b60405180910390f35b34801561074257600080fd5b5061074b611599565b6040516107589190614026565b60405180910390f35b34801561076d57600080fd5b5061078860048036038101906107839190614579565b61159f565b005b34801561079657600080fd5b5061079f611676565b6040516107ac9190614219565b60405180910390f35b3480156107c157600080fd5b506107dc60048036038101906107d79190614522565b611689565b6040516107e99190614219565b60405180910390f35b3480156107fe57600080fd5b5061081960048036038101906108149190614522565b6116df565b005b34801561082757600080fd5b506108306118ab565b60405161083d9190614026565b60405180910390f35b34801561085257600080fd5b5061085b6118b1565b6040516108689190614026565b60405180910390f35b34801561087d57600080fd5b5061089860048036038101906108939190614522565b6118b7565b6040516108a59190614026565b60405180910390f35b3480156108ba57600080fd5b506108c36118ff565b005b3480156108d157600080fd5b506108ec60048036038101906108e791906145f7565b611987565b005b3480156108fa57600080fd5b50610903611b0d565b6040516109109190614026565b60405180910390f35b34801561092557600080fd5b5061092e611b13565b60405161093b919061455e565b60405180910390f35b34801561095057600080fd5b50610959611b39565b604051610966919061455e565b60405180910390f35b34801561097b57600080fd5b50610984611b63565b6040516109919190614026565b60405180910390f35b3480156109a657600080fd5b506109af611b6d565b6040516109bc919061413e565b60405180910390f35b3480156109d157600080fd5b506109ec60048036038101906109e79190614579565b611bff565b005b3480156109fa57600080fd5b50610a156004803603810190610a1091906141be565b611d17565b604051610a229190614219565b60405180910390f35b348015610a3757600080fd5b50610a526004803603810190610a4d91906141be565b611e02565b604051610a5f9190614219565b60405180910390f35b348015610a7457600080fd5b50610a8f6004803603810190610a8a9190614081565b611e20565b005b348015610a9d57600080fd5b50610aa6611f05565b604051610ab39190614026565b60405180910390f35b348015610ac857600080fd5b50610ad1611f0b565b604051610ade9190614026565b60405180910390f35b348015610af357600080fd5b50610b0e6004803603810190610b099190614522565b611f11565b604051610b1b9190614219565b60405180910390f35b348015610b3057600080fd5b50610b39611f31565b604051610b469190614026565b60405180910390f35b348015610b5b57600080fd5b50610b766004803603810190610b71919061465e565b611f37565b005b348015610b8457600080fd5b50610b8d612098565b604051610b9a9190614026565b60405180910390f35b348015610baf57600080fd5b50610bca6004803603810190610bc59190614579565b6120a2565b005b348015610bd857600080fd5b50610be1612259565b604051610bee9190614026565b60405180910390f35b348015610c0357600080fd5b50610c1e6004803603810190610c199190614081565b61225f565b005b348015610c2c57600080fd5b50610c476004803603810190610c4291906144be565b6122e5565b005b348015610c5557600080fd5b50610c5e6123b5565b604051610c6b9190614026565b60405180910390f35b348015610c8057600080fd5b50610c896123bb565b604051610c969190614026565b60405180910390f35b348015610cab57600080fd5b50610cc66004803603810190610cc191906146eb565b6123c1565b604051610cd39190614026565b60405180910390f35b348015610ce857600080fd5b50610cf1612448565b604051610cfe9190614026565b60405180910390f35b348015610d1357600080fd5b50610d1c61244e565b604051610d299190614026565b60405180910390f35b348015610d3e57600080fd5b50610d47612454565b604051610d549190614026565b60405180910390f35b348015610d6957600080fd5b50610d846004803603810190610d7f9190614522565b61245a565b005b348015610d9257600080fd5b50610dad6004803603810190610da8919061465e565b612551565b005b348015610dbb57600080fd5b50610dd66004803603810190610dd19190614081565b6126b1565b005b348015610de457600080fd5b50610ded612796565b005b60135481565b60095481565b610e0361282f565b73ffffffffffffffffffffffffffffffffffffffff16610e21611b39565b73ffffffffffffffffffffffffffffffffffffffff1614610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e90614777565b60405180910390fd5b60008111610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb1906147e3565b60405180910390fd5b80600d8190555050565b606060038054610ed390614832565b80601f0160208091040260200160405190810160405280929190818152602001828054610eff90614832565b8015610f4c5780601f10610f2157610100808354040283529160200191610f4c565b820191906000526020600020905b815481529060010190602001808311610f2f57829003601f168201915b5050505050905090565b6000610f6a610f6361282f565b8484612837565b6001905092915050565b60155481565b610f8261282f565b73ffffffffffffffffffffffffffffffffffffffff16610fa0611b39565b73ffffffffffffffffffffffffffffffffffffffff1614610ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fed90614777565b60405180910390fd5b80600b8190555050565b61100861282f565b73ffffffffffffffffffffffffffffffffffffffff16611026611b39565b73ffffffffffffffffffffffffffffffffffffffff161461107c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107390614777565b60405180910390fd5b60005b81518160ff16101561111357600160066000848460ff16815181106110a7576110a6614863565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061110b906148c1565b91505061107f565b5050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000611154848484612a00565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061119f61282f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561121f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112169061495c565b60405180910390fd5b6112338561122b61282f565b858403612837565b60019150509392505050565b61124761282f565b73ffffffffffffffffffffffffffffffffffffffff16611265611b39565b73ffffffffffffffffffffffffffffffffffffffff16146112bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b290614777565b60405180910390fd5b80600760156101000a81548160ff0219169083151502179055507f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c0816040516113049190614219565b60405180910390a150565b60006009905090565b60185481565b60006113c061132b61282f565b84846001600061133961282f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113bb919061497c565b612837565b6001905092915050565b600560149054906101000a900460ff1681565b6113e561282f565b73ffffffffffffffffffffffffffffffffffffffff16611403611b39565b73ffffffffffffffffffffffffffffffffffffffff1614611459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145090614777565b60405180910390fd5b6001602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600760169054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600a5481565b6115a761282f565b73ffffffffffffffffffffffffffffffffffffffff166115c5611b39565b73ffffffffffffffffffffffffffffffffffffffff161461161b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161290614777565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760159054906101000a900460ff1681565b6000602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6116e761282f565b73ffffffffffffffffffffffffffffffffffffffff16611705611b39565b73ffffffffffffffffffffffffffffffffffffffff161461175b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175290614777565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e290614a22565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e60405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b60165481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61190761282f565b73ffffffffffffffffffffffffffffffffffffffff16611925611b39565b73ffffffffffffffffffffffffffffffffffffffff161461197b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197290614777565b60405180910390fd5b6119856000613107565b565b61198f61282f565b73ffffffffffffffffffffffffffffffffffffffff166119ad611b39565b73ffffffffffffffffffffffffffffffffffffffff1614611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa90614777565b60405180910390fd5b83601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b60195481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d54905090565b606060048054611b7c90614832565b80601f0160208091040260200160405190810160405280929190818152602001828054611ba890614832565b8015611bf55780601f10611bca57610100808354040283529160200191611bf5565b820191906000526020600020905b815481529060010190602001808311611bd857829003601f168201915b5050505050905090565b611c0761282f565b73ffffffffffffffffffffffffffffffffffffffff16611c25611b39565b73ffffffffffffffffffffffffffffffffffffffff1614611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7290614777565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0090614ada565b60405180910390fd5b611d1382826131cd565b5050565b60008060016000611d2661282f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dda90614b6c565b60405180910390fd5b611df7611dee61282f565b85858403612837565b600191505092915050565b6000611e16611e0f61282f565b8484612a00565b6001905092915050565b611e2861282f565b73ffffffffffffffffffffffffffffffffffffffff16611e46611b39565b73ffffffffffffffffffffffffffffffffffffffff1614611e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9390614777565b60405180910390fd5b80600a81905550611ebe60c8611eb061113d565b61330090919063ffffffff16565b600a541015611f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef990614bd8565b60405180910390fd5b50565b60115481565b601a5481565b60226020528060005260406000206000915054906101000a900460ff1681565b60145481565b611f3f61282f565b73ffffffffffffffffffffffffffffffffffffffff16611f5d611b39565b73ffffffffffffffffffffffffffffffffffffffff1614611fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faa90614777565b60405180910390fd5b856015819055508460168190555083601781905550826018819055508160198190555080601a81905550612044601a5461203660195461202860185461201a60175461200c60165460155461331690919063ffffffff16565b61331690919063ffffffff16565b61331690919063ffffffff16565b61331690919063ffffffff16565b61331690919063ffffffff16565b601b819055506014601b541115612090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208790614c44565b60405180910390fd5b505050505050565b6000600c54905090565b6120aa61282f565b73ffffffffffffffffffffffffffffffffffffffff166120c8611b39565b73ffffffffffffffffffffffffffffffffffffffff161461211e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211590614777565b60405180910390fd5b801515602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036121b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a790614cd6565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161224d9190614219565b60405180910390a25050565b600f5481565b61226761282f565b73ffffffffffffffffffffffffffffffffffffffff16612285611b39565b73ffffffffffffffffffffffffffffffffffffffff16146122db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d290614777565b60405180910390fd5b80600c8190555050565b6122ed61282f565b73ffffffffffffffffffffffffffffffffffffffff1661230b611b39565b73ffffffffffffffffffffffffffffffffffffffff1614612361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235890614777565b60405180910390fd5b80600760166101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516123aa9190614219565b60405180910390a150565b600e5481565b601b5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b60175481565b60125481565b61246261282f565b73ffffffffffffffffffffffffffffffffffffffff16612480611b39565b73ffffffffffffffffffffffffffffffffffffffff16146124d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cd90614777565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253c90614d68565b60405180910390fd5b61254e81613107565b50565b61255961282f565b73ffffffffffffffffffffffffffffffffffffffff16612577611b39565b73ffffffffffffffffffffffffffffffffffffffff16146125cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c490614777565b60405180910390fd5b85600e8190555084600f819055508360108190555082601181905550816012819055508060138190555061265e601354612650601254612642601154612634601054612626600f54600e5461331690919063ffffffff16565b61331690919063ffffffff16565b61331690919063ffffffff16565b61331690919063ffffffff16565b61331690919063ffffffff16565b6014819055506014805411156126a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a090614c44565b60405180910390fd5b505050505050565b6126b961282f565b73ffffffffffffffffffffffffffffffffffffffff166126d7611b39565b73ffffffffffffffffffffffffffffffffffffffff161461272d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272490614777565b60405180910390fd5b8060098190555061274f60c861274161113d565b61330090919063ffffffff16565b6009541015612793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278a90614bd8565b60405180910390fd5b50565b61279e61282f565b73ffffffffffffffffffffffffffffffffffffffff166127bc611b39565b73ffffffffffffffffffffffffffffffffffffffff1614612812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280990614777565b60405180910390fd5b6001600560146101000a81548160ff021916908315150217905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289d90614dfa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290c90614e8c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129f39190614026565b60405180910390a3505050565b8282600560149054906101000a900460ff1680612a665750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612aba5750600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af090614ef8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5f90614f8a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bce9061501c565b60405180910390fd5b60008303612bf057612beb8585600061332c565b613100565b602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c935750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ce95750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d3457600a54831115612d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2a906150ae565b60405180910390fd5b5b602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612dd75750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e2d5750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e7857600954831115612e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6e90615140565b60405180910390fd5b5b6000612e83306118b7565b90506000600b548210159050600760149054906101000a900460ff16158015612ef55750602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612f0d5750600760169054906101000a900460ff165b15612f7e578015612f2757600b549150612f26826135ab565b5b6000479050600760159054906101000a900460ff168015612f495750600c5481115b15612f7c57600c54811115612f7b57600c549050612f7a612f75600d548361330090919063ffffffff16565b6136d1565b5b5b505b602060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156130225750602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130f257600061305160646130436014548961371d90919063ffffffff16565b61330090919063ffffffff16565b9050602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156130d0576130cd60646130bf601b548961371d90919063ffffffff16565b61330090919063ffffffff16565b90505b6130e3818761373390919063ffffffff16565b95506130f088308361332c565b505b6130fd87878761332c565b50505b5050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361325f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613256906151d2565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000818361330e9190615221565b905092915050565b60008183613324919061497c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361339b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339290614f8a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361340a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134019061501c565b60405180910390fd5b613415838383613749565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561349b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613492906152c4565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461352e919061497c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135929190614026565b60405180910390a36135a584848461374e565b50505050565b6001600760146101000a81548160ff02191690831515021790555060006135f1601b546135e36015548561371d90919063ffffffff16565b61330090919063ffffffff16565b90506000613608828461373390919063ffffffff16565b9050600061362060028461330090919063ffffffff16565b90506000613637828561373390919063ffffffff16565b905060004790506136488330613753565b600061365d824761373390919063ffffffff16565b905061366983826139cd565b61367285613ab2565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516136a5939291906152e4565b60405180910390a15050505050506000600760146101000a81548160ff02191690831515021790555050565b6001600760146101000a81548160ff02191690831515021790555060008111156136ff576136fe81613d89565b5b6000600760146101000a81548160ff02191690831515021790555050565b6000818361372b919061531b565b905092915050565b600081836137419190615375565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156137705761376f614239565b5b60405190808252806020026020018201604052801561379e5781602001602082028036833780820191505090505b50905030816000815181106137b6576137b5614863565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561385d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061388191906153be565b8160018151811061389557613894614863565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050826138fc30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166123c1565b10156139325761393130600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019612837565b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b81526004016139969594939291906154e4565b600060405180830381600087803b1580156139b057600080fd5b505af11580156139c4573d6000803e3d6000fd5b50505050505050565b6139fa30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612837565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613a46611b39565b426040518863ffffffff1660e01b8152600401613a689695949392919061553e565b60606040518083038185885af1158015613a86573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613aab91906155b4565b5050505050565b6000479050613ac18230613753565b6000613ad6824761373390919063ffffffff16565b90506000613b17613af4601554601b5461373390919063ffffffff16565b613b096017548561371d90919063ffffffff16565b61330090919063ffffffff16565b90506000613b58613b35601554601b5461373390919063ffffffff16565b613b4a6018548661371d90919063ffffffff16565b61330090919063ffffffff16565b90506000613b99613b76601554601b5461373390919063ffffffff16565b613b8b6019548761371d90919063ffffffff16565b61330090919063ffffffff16565b90506000613bda613bb7601554601b5461373390919063ffffffff16565b613bcc601a548861371d90919063ffffffff16565b61330090919063ffffffff16565b9050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015613c44573d6000803e3d6000fd5b50601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015613cad573d6000803e3d6000fd5b50601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613d16573d6000803e3d6000fd5b50601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613d7f573d6000803e3d6000fd5b5050505050505050565b6000600267ffffffffffffffff811115613da657613da5614239565b5b604051908082528060200260200182016040528015613dd45781602001602082028036833780820191505090505b509050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e6891906153be565b81600081518110613e7c57613e7b614863565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110613ecb57613eca614863565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de9583600084600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613f7f61012c4261331690919063ffffffff16565b6040518663ffffffff1660e01b8152600401613f9e9493929190615607565b6000604051808303818588803b158015613fb757600080fd5b505af1158015613fcb573d6000803e3d6000fd5b50505050507f49572d4c9f88395e245870653f943bb96eced77a132c1b2d14dc524c4eaceea78282604051614001929190615653565b60405180910390a15050565b6000819050919050565b6140208161400d565b82525050565b600060208201905061403b6000830184614017565b92915050565b6000604051905090565b600080fd5b600080fd5b61405e8161400d565b811461406957600080fd5b50565b60008135905061407b81614055565b92915050565b6000602082840312156140975761409661404b565b5b60006140a58482850161406c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156140e85780820151818401526020810190506140cd565b60008484015250505050565b6000601f19601f8301169050919050565b6000614110826140ae565b61411a81856140b9565b935061412a8185602086016140ca565b614133816140f4565b840191505092915050565b600060208201905081810360008301526141588184614105565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061418b82614160565b9050919050565b61419b81614180565b81146141a657600080fd5b50565b6000813590506141b881614192565b92915050565b600080604083850312156141d5576141d461404b565b5b60006141e3858286016141a9565b92505060206141f48582860161406c565b9150509250929050565b60008115159050919050565b614213816141fe565b82525050565b600060208201905061422e600083018461420a565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614271826140f4565b810181811067ffffffffffffffff821117156142905761428f614239565b5b80604052505050565b60006142a3614041565b90506142af8282614268565b919050565b600067ffffffffffffffff8211156142cf576142ce614239565b5b602082029050602081019050919050565b600080fd5b60006142f86142f3846142b4565b614299565b9050808382526020820190506020840283018581111561431b5761431a6142e0565b5b835b81811015614344578061433088826141a9565b84526020840193505060208101905061431d565b5050509392505050565b600082601f83011261436357614362614234565b5b81356143738482602086016142e5565b91505092915050565b6000602082840312156143925761439161404b565b5b600082013567ffffffffffffffff8111156143b0576143af614050565b5b6143bc8482850161434e565b91505092915050565b6000819050919050565b60006143ea6143e56143e084614160565b6143c5565b614160565b9050919050565b60006143fc826143cf565b9050919050565b600061440e826143f1565b9050919050565b61441e81614403565b82525050565b60006020820190506144396000830184614415565b92915050565b6000806000606084860312156144585761445761404b565b5b6000614466868287016141a9565b9350506020614477868287016141a9565b92505060406144888682870161406c565b9150509250925092565b61449b816141fe565b81146144a657600080fd5b50565b6000813590506144b881614492565b92915050565b6000602082840312156144d4576144d361404b565b5b60006144e2848285016144a9565b91505092915050565b600060ff82169050919050565b614501816144eb565b82525050565b600060208201905061451c60008301846144f8565b92915050565b6000602082840312156145385761453761404b565b5b6000614546848285016141a9565b91505092915050565b61455881614180565b82525050565b6000602082019050614573600083018461454f565b92915050565b600080604083850312156145905761458f61404b565b5b600061459e858286016141a9565b92505060206145af858286016144a9565b9150509250929050565b60006145c482614160565b9050919050565b6145d4816145b9565b81146145df57600080fd5b50565b6000813590506145f1816145cb565b92915050565b600080600080608085870312156146115761461061404b565b5b600061461f878288016145e2565b9450506020614630878288016145e2565b9350506040614641878288016145e2565b9250506060614652878288016145e2565b91505092959194509250565b60008060008060008060c0878903121561467b5761467a61404b565b5b600061468989828a0161406c565b965050602061469a89828a0161406c565b95505060406146ab89828a0161406c565b94505060606146bc89828a0161406c565b93505060806146cd89828a0161406c565b92505060a06146de89828a0161406c565b9150509295509295509295565b600080604083850312156147025761470161404b565b5b6000614710858286016141a9565b9250506020614721858286016141a9565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006147616020836140b9565b915061476c8261472b565b602082019050919050565b6000602082019050818103600083015261479081614754565b9050919050565b7f63616e6e6f7420626520736574206173207a65726f0000000000000000000000600082015250565b60006147cd6015836140b9565b91506147d882614797565b602082019050919050565b600060208201905081810360008301526147fc816147c0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061484a57607f821691505b60208210810361485d5761485c614803565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148cc826144eb565b915060ff82036148df576148de614892565b5b600182019050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006149466028836140b9565b9150614951826148ea565b604082019050919050565b6000602082019050818103600083015261497581614939565b9050919050565b60006149878261400d565b91506149928361400d565b92508282019050808211156149aa576149a9614892565b5b92915050565b7f54686520726f7574657220616c7265616479206861732074686174206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614a0c6023836140b9565b9150614a17826149b0565b604082019050919050565b60006020820190508181036000830152614a3b816149ff565b9050919050565b7f5468652050616e63616b655377617020706169722063616e6e6f74206265207260008201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b657260208201527f5061697273000000000000000000000000000000000000000000000000000000604082015250565b6000614ac46045836140b9565b9150614acf82614a42565b606082019050919050565b60006020820190508181036000830152614af381614ab7565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614b566025836140b9565b9150614b6182614afa565b604082019050919050565b60006020820190508181036000830152614b8581614b49565b9050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b6000614bc2600d836140b9565b9150614bcd82614b8c565b602082019050919050565b60006020820190508181036000830152614bf181614bb5565b9050919050565b7f6665657320746f6f206869676800000000000000000000000000000000000000600082015250565b6000614c2e600d836140b9565b9150614c3982614bf8565b602082019050919050565b60006020820190508181036000830152614c5d81614c21565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000614cc0602a836140b9565b9150614ccb82614c64565b604082019050919050565b60006020820190508181036000830152614cef81614cb3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d526026836140b9565b9150614d5d82614cf6565b604082019050919050565b60006020820190508181036000830152614d8181614d45565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614de46024836140b9565b9150614def82614d88565b604082019050919050565b60006020820190508181036000830152614e1381614dd7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e766022836140b9565b9150614e8182614e1a565b604082019050919050565b60006020820190508181036000830152614ea581614e69565b9050919050565b7f4e6f74204f70656e000000000000000000000000000000000000000000000000600082015250565b6000614ee26008836140b9565b9150614eed82614eac565b602082019050919050565b60006020820190508181036000830152614f1181614ed5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f746025836140b9565b9150614f7f82614f18565b604082019050919050565b60006020820190508181036000830152614fa381614f67565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006150066023836140b9565b915061501182614faa565b604082019050919050565b6000602082019050818103600083015261503581614ff9565b9050919050565b7f616d6f756e74206578636565647320746865206d61784275795472616e73616360008201527f74696f6e416d6f756e742e000000000000000000000000000000000000000000602082015250565b6000615098602b836140b9565b91506150a38261503c565b604082019050919050565b600060208201905081810360008301526150c78161508b565b9050919050565b7f616d6f756e74206578636565647320746865206d617853656c6c5472616e736160008201527f6374696f6e416d6f756e742e0000000000000000000000000000000000000000602082015250565b600061512a602c836140b9565b9150615135826150ce565b604082019050919050565b600060208201905081810360008301526151598161511d565b9050919050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b60006151bc6038836140b9565b91506151c782615160565b604082019050919050565b600060208201905081810360008301526151eb816151af565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061522c8261400d565b91506152378361400d565b925082615247576152466151f2565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006152ae6026836140b9565b91506152b982615252565b604082019050919050565b600060208201905081810360008301526152dd816152a1565b9050919050565b60006060820190506152f96000830186614017565b6153066020830185614017565b6153136040830184614017565b949350505050565b60006153268261400d565b91506153318361400d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561536a57615369614892565b5b828202905092915050565b60006153808261400d565b915061538b8361400d565b92508282039050818111156153a3576153a2614892565b5b92915050565b6000815190506153b881614192565b92915050565b6000602082840312156153d4576153d361404b565b5b60006153e2848285016153a9565b91505092915050565b6000819050919050565b600061541061540b615406846153eb565b6143c5565b61400d565b9050919050565b615420816153f5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61545b81614180565b82525050565b600061546d8383615452565b60208301905092915050565b6000602082019050919050565b600061549182615426565b61549b8185615431565b93506154a683615442565b8060005b838110156154d75781516154be8882615461565b97506154c983615479565b9250506001810190506154aa565b5085935050505092915050565b600060a0820190506154f96000830188614017565b6155066020830187615417565b81810360408301526155188186615486565b9050615527606083018561454f565b6155346080830184614017565b9695505050505050565b600060c082019050615553600083018961454f565b6155606020830188614017565b61556d6040830187615417565b61557a6060830186615417565b615587608083018561454f565b61559460a0830184614017565b979650505050505050565b6000815190506155ae81614055565b92915050565b6000806000606084860312156155cd576155cc61404b565b5b60006155db8682870161559f565b93505060206155ec8682870161559f565b92505060406155fd8682870161559f565b9150509250925092565b600060808201905061561c6000830187615417565b818103602083015261562e8186615486565b905061563d604083018561454f565b61564a6060830184614017565b95945050505050565b60006040820190506156686000830185614017565b818103602083015261567a8184615486565b9050939250505056fea2646970667358221220fccce67bb8c00fe71554a8b55c6f4ff483376cf87693052761a38a4e312833da64736f6c63430008100033

Deployed Bytecode

0x6080604052600436106103905760003560e01c8063743e540d116101dc578063bdc653ef11610102578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610d5d578063f74c9f4714610d86578063fb17e6dc14610daf578063fb201b1d14610dd857610397565b8063dd62ed3e14610c9f578063e2f4560514610cdc578063e7f444b314610d07578063efcc1b2f14610d3257610397565b8063c2b3e1c2116100dc578063c2b3e1c214610bf7578063c49b9a8014610c20578063ccb6135814610c49578063d0a3981414610c7457610397565b8063bdc653ef14610b78578063c024666814610ba3578063c05e8fa114610bcc57610397565b8063a457c2d71161017a578063b45e83f811610149578063b45e83f814610abc578063b62496f514610ae7578063b9e9370014610b24578063ba876bb914610b4f57610397565b8063a457c2d7146109ee578063a9059cbb14610a2b578063a946163014610a68578063afc1687514610a9157610397565b80638da5cb5b116101b65780638da5cb5b146109445780638ee108231461096f57806395d89b411461099a5780639a7a23d6146109c557610397565b8063743e540d146108c55780637506cbd8146108ee57806385141a771461091957610397565b806339509351116102c15780635b89029c1161025f578063680789521161022e578063680789521461081b5780636be638551461084657806370a0823114610871578063715018a6146108ae57610397565b80635b89029c146107615780636053a0e31461078a578063658c27a9146107b557806365b8dbc0146107f257610397565b806349bd5a5e1161029b57806349bd5a5e146106a35780634a74bb02146106ce5780634fbee193146106f95780635aa821a91461073657610397565b8063395093511461061257806347535d7b1461064f57806349928a501461067a57610397565b80630b6bb6f51161032e57806323b872dd1161030857806323b872dd1461055657806329370cc614610593578063313ce567146105bc578063330f829d146105e757610397565b80630b6bb6f5146104d75780631694505e1461050057806318160ddd1461052b57610397565b806306fdde031161036a57806306fdde031461041b578063095ea7b314610446578063099d0d301461048357806309e89af7146104ae57610397565b806301143fea1461039c57806302259e9e146103c7578063068dde72146103f257610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610def565b6040516103be9190614026565b60405180910390f35b3480156103d357600080fd5b506103dc610df5565b6040516103e99190614026565b60405180910390f35b3480156103fe57600080fd5b5061041960048036038101906104149190614081565b610dfb565b005b34801561042757600080fd5b50610430610ec4565b60405161043d919061413e565b60405180910390f35b34801561045257600080fd5b5061046d600480360381019061046891906141be565b610f56565b60405161047a9190614219565b60405180910390f35b34801561048f57600080fd5b50610498610f74565b6040516104a59190614026565b60405180910390f35b3480156104ba57600080fd5b506104d560048036038101906104d09190614081565b610f7a565b005b3480156104e357600080fd5b506104fe60048036038101906104f9919061437c565b611000565b005b34801561050c57600080fd5b50610515611117565b6040516105229190614424565b60405180910390f35b34801561053757600080fd5b5061054061113d565b60405161054d9190614026565b60405180910390f35b34801561056257600080fd5b5061057d6004803603810190610578919061443f565b611147565b60405161058a9190614219565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b591906144be565b61123f565b005b3480156105c857600080fd5b506105d161130f565b6040516105de9190614507565b60405180910390f35b3480156105f357600080fd5b506105fc611318565b6040516106099190614026565b60405180910390f35b34801561061e57600080fd5b50610639600480360381019061063491906141be565b61131e565b6040516106469190614219565b60405180910390f35b34801561065b57600080fd5b506106646113ca565b6040516106719190614219565b60405180910390f35b34801561068657600080fd5b506106a1600480360381019061069c9190614522565b6113dd565b005b3480156106af57600080fd5b506106b861150c565b6040516106c5919061455e565b60405180910390f35b3480156106da57600080fd5b506106e3611530565b6040516106f09190614219565b60405180910390f35b34801561070557600080fd5b50610720600480360381019061071b9190614522565b611543565b60405161072d9190614219565b60405180910390f35b34801561074257600080fd5b5061074b611599565b6040516107589190614026565b60405180910390f35b34801561076d57600080fd5b5061078860048036038101906107839190614579565b61159f565b005b34801561079657600080fd5b5061079f611676565b6040516107ac9190614219565b60405180910390f35b3480156107c157600080fd5b506107dc60048036038101906107d79190614522565b611689565b6040516107e99190614219565b60405180910390f35b3480156107fe57600080fd5b5061081960048036038101906108149190614522565b6116df565b005b34801561082757600080fd5b506108306118ab565b60405161083d9190614026565b60405180910390f35b34801561085257600080fd5b5061085b6118b1565b6040516108689190614026565b60405180910390f35b34801561087d57600080fd5b5061089860048036038101906108939190614522565b6118b7565b6040516108a59190614026565b60405180910390f35b3480156108ba57600080fd5b506108c36118ff565b005b3480156108d157600080fd5b506108ec60048036038101906108e791906145f7565b611987565b005b3480156108fa57600080fd5b50610903611b0d565b6040516109109190614026565b60405180910390f35b34801561092557600080fd5b5061092e611b13565b60405161093b919061455e565b60405180910390f35b34801561095057600080fd5b50610959611b39565b604051610966919061455e565b60405180910390f35b34801561097b57600080fd5b50610984611b63565b6040516109919190614026565b60405180910390f35b3480156109a657600080fd5b506109af611b6d565b6040516109bc919061413e565b60405180910390f35b3480156109d157600080fd5b506109ec60048036038101906109e79190614579565b611bff565b005b3480156109fa57600080fd5b50610a156004803603810190610a1091906141be565b611d17565b604051610a229190614219565b60405180910390f35b348015610a3757600080fd5b50610a526004803603810190610a4d91906141be565b611e02565b604051610a5f9190614219565b60405180910390f35b348015610a7457600080fd5b50610a8f6004803603810190610a8a9190614081565b611e20565b005b348015610a9d57600080fd5b50610aa6611f05565b604051610ab39190614026565b60405180910390f35b348015610ac857600080fd5b50610ad1611f0b565b604051610ade9190614026565b60405180910390f35b348015610af357600080fd5b50610b0e6004803603810190610b099190614522565b611f11565b604051610b1b9190614219565b60405180910390f35b348015610b3057600080fd5b50610b39611f31565b604051610b469190614026565b60405180910390f35b348015610b5b57600080fd5b50610b766004803603810190610b71919061465e565b611f37565b005b348015610b8457600080fd5b50610b8d612098565b604051610b9a9190614026565b60405180910390f35b348015610baf57600080fd5b50610bca6004803603810190610bc59190614579565b6120a2565b005b348015610bd857600080fd5b50610be1612259565b604051610bee9190614026565b60405180910390f35b348015610c0357600080fd5b50610c1e6004803603810190610c199190614081565b61225f565b005b348015610c2c57600080fd5b50610c476004803603810190610c4291906144be565b6122e5565b005b348015610c5557600080fd5b50610c5e6123b5565b604051610c6b9190614026565b60405180910390f35b348015610c8057600080fd5b50610c896123bb565b604051610c969190614026565b60405180910390f35b348015610cab57600080fd5b50610cc66004803603810190610cc191906146eb565b6123c1565b604051610cd39190614026565b60405180910390f35b348015610ce857600080fd5b50610cf1612448565b604051610cfe9190614026565b60405180910390f35b348015610d1357600080fd5b50610d1c61244e565b604051610d299190614026565b60405180910390f35b348015610d3e57600080fd5b50610d47612454565b604051610d549190614026565b60405180910390f35b348015610d6957600080fd5b50610d846004803603810190610d7f9190614522565b61245a565b005b348015610d9257600080fd5b50610dad6004803603810190610da8919061465e565b612551565b005b348015610dbb57600080fd5b50610dd66004803603810190610dd19190614081565b6126b1565b005b348015610de457600080fd5b50610ded612796565b005b60135481565b60095481565b610e0361282f565b73ffffffffffffffffffffffffffffffffffffffff16610e21611b39565b73ffffffffffffffffffffffffffffffffffffffff1614610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e90614777565b60405180910390fd5b60008111610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb1906147e3565b60405180910390fd5b80600d8190555050565b606060038054610ed390614832565b80601f0160208091040260200160405190810160405280929190818152602001828054610eff90614832565b8015610f4c5780601f10610f2157610100808354040283529160200191610f4c565b820191906000526020600020905b815481529060010190602001808311610f2f57829003601f168201915b5050505050905090565b6000610f6a610f6361282f565b8484612837565b6001905092915050565b60155481565b610f8261282f565b73ffffffffffffffffffffffffffffffffffffffff16610fa0611b39565b73ffffffffffffffffffffffffffffffffffffffff1614610ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fed90614777565b60405180910390fd5b80600b8190555050565b61100861282f565b73ffffffffffffffffffffffffffffffffffffffff16611026611b39565b73ffffffffffffffffffffffffffffffffffffffff161461107c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107390614777565b60405180910390fd5b60005b81518160ff16101561111357600160066000848460ff16815181106110a7576110a6614863565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061110b906148c1565b91505061107f565b5050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000611154848484612a00565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061119f61282f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561121f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112169061495c565b60405180910390fd5b6112338561122b61282f565b858403612837565b60019150509392505050565b61124761282f565b73ffffffffffffffffffffffffffffffffffffffff16611265611b39565b73ffffffffffffffffffffffffffffffffffffffff16146112bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b290614777565b60405180910390fd5b80600760156101000a81548160ff0219169083151502179055507f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c0816040516113049190614219565b60405180910390a150565b60006009905090565b60185481565b60006113c061132b61282f565b84846001600061133961282f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113bb919061497c565b612837565b6001905092915050565b600560149054906101000a900460ff1681565b6113e561282f565b73ffffffffffffffffffffffffffffffffffffffff16611403611b39565b73ffffffffffffffffffffffffffffffffffffffff1614611459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145090614777565b60405180910390fd5b6001602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f00000000000000000000000021c8f608bbabf23ed01ddd9e7e9d9e67c93ee8ad81565b600760169054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600a5481565b6115a761282f565b73ffffffffffffffffffffffffffffffffffffffff166115c5611b39565b73ffffffffffffffffffffffffffffffffffffffff161461161b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161290614777565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760159054906101000a900460ff1681565b6000602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6116e761282f565b73ffffffffffffffffffffffffffffffffffffffff16611705611b39565b73ffffffffffffffffffffffffffffffffffffffff161461175b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175290614777565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e290614a22565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e60405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b60165481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61190761282f565b73ffffffffffffffffffffffffffffffffffffffff16611925611b39565b73ffffffffffffffffffffffffffffffffffffffff161461197b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197290614777565b60405180910390fd5b6119856000613107565b565b61198f61282f565b73ffffffffffffffffffffffffffffffffffffffff166119ad611b39565b73ffffffffffffffffffffffffffffffffffffffff1614611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa90614777565b60405180910390fd5b83601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b60195481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d54905090565b606060048054611b7c90614832565b80601f0160208091040260200160405190810160405280929190818152602001828054611ba890614832565b8015611bf55780601f10611bca57610100808354040283529160200191611bf5565b820191906000526020600020905b815481529060010190602001808311611bd857829003601f168201915b5050505050905090565b611c0761282f565b73ffffffffffffffffffffffffffffffffffffffff16611c25611b39565b73ffffffffffffffffffffffffffffffffffffffff1614611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7290614777565b60405180910390fd5b7f00000000000000000000000021c8f608bbabf23ed01ddd9e7e9d9e67c93ee8ad73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0090614ada565b60405180910390fd5b611d1382826131cd565b5050565b60008060016000611d2661282f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dda90614b6c565b60405180910390fd5b611df7611dee61282f565b85858403612837565b600191505092915050565b6000611e16611e0f61282f565b8484612a00565b6001905092915050565b611e2861282f565b73ffffffffffffffffffffffffffffffffffffffff16611e46611b39565b73ffffffffffffffffffffffffffffffffffffffff1614611e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9390614777565b60405180910390fd5b80600a81905550611ebe60c8611eb061113d565b61330090919063ffffffff16565b600a541015611f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef990614bd8565b60405180910390fd5b50565b60115481565b601a5481565b60226020528060005260406000206000915054906101000a900460ff1681565b60145481565b611f3f61282f565b73ffffffffffffffffffffffffffffffffffffffff16611f5d611b39565b73ffffffffffffffffffffffffffffffffffffffff1614611fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faa90614777565b60405180910390fd5b856015819055508460168190555083601781905550826018819055508160198190555080601a81905550612044601a5461203660195461202860185461201a60175461200c60165460155461331690919063ffffffff16565b61331690919063ffffffff16565b61331690919063ffffffff16565b61331690919063ffffffff16565b61331690919063ffffffff16565b601b819055506014601b541115612090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208790614c44565b60405180910390fd5b505050505050565b6000600c54905090565b6120aa61282f565b73ffffffffffffffffffffffffffffffffffffffff166120c8611b39565b73ffffffffffffffffffffffffffffffffffffffff161461211e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211590614777565b60405180910390fd5b801515602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036121b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a790614cd6565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161224d9190614219565b60405180910390a25050565b600f5481565b61226761282f565b73ffffffffffffffffffffffffffffffffffffffff16612285611b39565b73ffffffffffffffffffffffffffffffffffffffff16146122db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d290614777565b60405180910390fd5b80600c8190555050565b6122ed61282f565b73ffffffffffffffffffffffffffffffffffffffff1661230b611b39565b73ffffffffffffffffffffffffffffffffffffffff1614612361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235890614777565b60405180910390fd5b80600760166101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516123aa9190614219565b60405180910390a150565b600e5481565b601b5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b60175481565b60125481565b61246261282f565b73ffffffffffffffffffffffffffffffffffffffff16612480611b39565b73ffffffffffffffffffffffffffffffffffffffff16146124d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cd90614777565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253c90614d68565b60405180910390fd5b61254e81613107565b50565b61255961282f565b73ffffffffffffffffffffffffffffffffffffffff16612577611b39565b73ffffffffffffffffffffffffffffffffffffffff16146125cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c490614777565b60405180910390fd5b85600e8190555084600f819055508360108190555082601181905550816012819055508060138190555061265e601354612650601254612642601154612634601054612626600f54600e5461331690919063ffffffff16565b61331690919063ffffffff16565b61331690919063ffffffff16565b61331690919063ffffffff16565b61331690919063ffffffff16565b6014819055506014805411156126a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a090614c44565b60405180910390fd5b505050505050565b6126b961282f565b73ffffffffffffffffffffffffffffffffffffffff166126d7611b39565b73ffffffffffffffffffffffffffffffffffffffff161461272d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272490614777565b60405180910390fd5b8060098190555061274f60c861274161113d565b61330090919063ffffffff16565b6009541015612793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278a90614bd8565b60405180910390fd5b50565b61279e61282f565b73ffffffffffffffffffffffffffffffffffffffff166127bc611b39565b73ffffffffffffffffffffffffffffffffffffffff1614612812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280990614777565b60405180910390fd5b6001600560146101000a81548160ff021916908315150217905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289d90614dfa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290c90614e8c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129f39190614026565b60405180910390a3505050565b8282600560149054906101000a900460ff1680612a665750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612aba5750600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af090614ef8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5f90614f8a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bce9061501c565b60405180910390fd5b60008303612bf057612beb8585600061332c565b613100565b602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c935750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ce95750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d3457600a54831115612d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2a906150ae565b60405180910390fd5b5b602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612dd75750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e2d5750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e7857600954831115612e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6e90615140565b60405180910390fd5b5b6000612e83306118b7565b90506000600b548210159050600760149054906101000a900460ff16158015612ef55750602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612f0d5750600760169054906101000a900460ff165b15612f7e578015612f2757600b549150612f26826135ab565b5b6000479050600760159054906101000a900460ff168015612f495750600c5481115b15612f7c57600c54811115612f7b57600c549050612f7a612f75600d548361330090919063ffffffff16565b6136d1565b5b5b505b602060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156130225750602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130f257600061305160646130436014548961371d90919063ffffffff16565b61330090919063ffffffff16565b9050602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156130d0576130cd60646130bf601b548961371d90919063ffffffff16565b61330090919063ffffffff16565b90505b6130e3818761373390919063ffffffff16565b95506130f088308361332c565b505b6130fd87878761332c565b50505b5050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361325f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613256906151d2565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000818361330e9190615221565b905092915050565b60008183613324919061497c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361339b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339290614f8a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361340a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134019061501c565b60405180910390fd5b613415838383613749565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561349b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613492906152c4565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461352e919061497c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135929190614026565b60405180910390a36135a584848461374e565b50505050565b6001600760146101000a81548160ff02191690831515021790555060006135f1601b546135e36015548561371d90919063ffffffff16565b61330090919063ffffffff16565b90506000613608828461373390919063ffffffff16565b9050600061362060028461330090919063ffffffff16565b90506000613637828561373390919063ffffffff16565b905060004790506136488330613753565b600061365d824761373390919063ffffffff16565b905061366983826139cd565b61367285613ab2565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516136a5939291906152e4565b60405180910390a15050505050506000600760146101000a81548160ff02191690831515021790555050565b6001600760146101000a81548160ff02191690831515021790555060008111156136ff576136fe81613d89565b5b6000600760146101000a81548160ff02191690831515021790555050565b6000818361372b919061531b565b905092915050565b600081836137419190615375565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156137705761376f614239565b5b60405190808252806020026020018201604052801561379e5781602001602082028036833780820191505090505b50905030816000815181106137b6576137b5614863565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561385d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061388191906153be565b8160018151811061389557613894614863565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050826138fc30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166123c1565b10156139325761393130600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019612837565b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b81526004016139969594939291906154e4565b600060405180830381600087803b1580156139b057600080fd5b505af11580156139c4573d6000803e3d6000fd5b50505050505050565b6139fa30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612837565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613a46611b39565b426040518863ffffffff1660e01b8152600401613a689695949392919061553e565b60606040518083038185885af1158015613a86573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613aab91906155b4565b5050505050565b6000479050613ac18230613753565b6000613ad6824761373390919063ffffffff16565b90506000613b17613af4601554601b5461373390919063ffffffff16565b613b096017548561371d90919063ffffffff16565b61330090919063ffffffff16565b90506000613b58613b35601554601b5461373390919063ffffffff16565b613b4a6018548661371d90919063ffffffff16565b61330090919063ffffffff16565b90506000613b99613b76601554601b5461373390919063ffffffff16565b613b8b6019548761371d90919063ffffffff16565b61330090919063ffffffff16565b90506000613bda613bb7601554601b5461373390919063ffffffff16565b613bcc601a548861371d90919063ffffffff16565b61330090919063ffffffff16565b9050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015613c44573d6000803e3d6000fd5b50601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015613cad573d6000803e3d6000fd5b50601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613d16573d6000803e3d6000fd5b50601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613d7f573d6000803e3d6000fd5b5050505050505050565b6000600267ffffffffffffffff811115613da657613da5614239565b5b604051908082528060200260200182016040528015613dd45781602001602082028036833780820191505090505b509050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e6891906153be565b81600081518110613e7c57613e7b614863565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110613ecb57613eca614863565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de9583600084600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613f7f61012c4261331690919063ffffffff16565b6040518663ffffffff1660e01b8152600401613f9e9493929190615607565b6000604051808303818588803b158015613fb757600080fd5b505af1158015613fcb573d6000803e3d6000fd5b50505050507f49572d4c9f88395e245870653f943bb96eced77a132c1b2d14dc524c4eaceea78282604051614001929190615653565b60405180910390a15050565b6000819050919050565b6140208161400d565b82525050565b600060208201905061403b6000830184614017565b92915050565b6000604051905090565b600080fd5b600080fd5b61405e8161400d565b811461406957600080fd5b50565b60008135905061407b81614055565b92915050565b6000602082840312156140975761409661404b565b5b60006140a58482850161406c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156140e85780820151818401526020810190506140cd565b60008484015250505050565b6000601f19601f8301169050919050565b6000614110826140ae565b61411a81856140b9565b935061412a8185602086016140ca565b614133816140f4565b840191505092915050565b600060208201905081810360008301526141588184614105565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061418b82614160565b9050919050565b61419b81614180565b81146141a657600080fd5b50565b6000813590506141b881614192565b92915050565b600080604083850312156141d5576141d461404b565b5b60006141e3858286016141a9565b92505060206141f48582860161406c565b9150509250929050565b60008115159050919050565b614213816141fe565b82525050565b600060208201905061422e600083018461420a565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614271826140f4565b810181811067ffffffffffffffff821117156142905761428f614239565b5b80604052505050565b60006142a3614041565b90506142af8282614268565b919050565b600067ffffffffffffffff8211156142cf576142ce614239565b5b602082029050602081019050919050565b600080fd5b60006142f86142f3846142b4565b614299565b9050808382526020820190506020840283018581111561431b5761431a6142e0565b5b835b81811015614344578061433088826141a9565b84526020840193505060208101905061431d565b5050509392505050565b600082601f83011261436357614362614234565b5b81356143738482602086016142e5565b91505092915050565b6000602082840312156143925761439161404b565b5b600082013567ffffffffffffffff8111156143b0576143af614050565b5b6143bc8482850161434e565b91505092915050565b6000819050919050565b60006143ea6143e56143e084614160565b6143c5565b614160565b9050919050565b60006143fc826143cf565b9050919050565b600061440e826143f1565b9050919050565b61441e81614403565b82525050565b60006020820190506144396000830184614415565b92915050565b6000806000606084860312156144585761445761404b565b5b6000614466868287016141a9565b9350506020614477868287016141a9565b92505060406144888682870161406c565b9150509250925092565b61449b816141fe565b81146144a657600080fd5b50565b6000813590506144b881614492565b92915050565b6000602082840312156144d4576144d361404b565b5b60006144e2848285016144a9565b91505092915050565b600060ff82169050919050565b614501816144eb565b82525050565b600060208201905061451c60008301846144f8565b92915050565b6000602082840312156145385761453761404b565b5b6000614546848285016141a9565b91505092915050565b61455881614180565b82525050565b6000602082019050614573600083018461454f565b92915050565b600080604083850312156145905761458f61404b565b5b600061459e858286016141a9565b92505060206145af858286016144a9565b9150509250929050565b60006145c482614160565b9050919050565b6145d4816145b9565b81146145df57600080fd5b50565b6000813590506145f1816145cb565b92915050565b600080600080608085870312156146115761461061404b565b5b600061461f878288016145e2565b9450506020614630878288016145e2565b9350506040614641878288016145e2565b9250506060614652878288016145e2565b91505092959194509250565b60008060008060008060c0878903121561467b5761467a61404b565b5b600061468989828a0161406c565b965050602061469a89828a0161406c565b95505060406146ab89828a0161406c565b94505060606146bc89828a0161406c565b93505060806146cd89828a0161406c565b92505060a06146de89828a0161406c565b9150509295509295509295565b600080604083850312156147025761470161404b565b5b6000614710858286016141a9565b9250506020614721858286016141a9565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006147616020836140b9565b915061476c8261472b565b602082019050919050565b6000602082019050818103600083015261479081614754565b9050919050565b7f63616e6e6f7420626520736574206173207a65726f0000000000000000000000600082015250565b60006147cd6015836140b9565b91506147d882614797565b602082019050919050565b600060208201905081810360008301526147fc816147c0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061484a57607f821691505b60208210810361485d5761485c614803565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148cc826144eb565b915060ff82036148df576148de614892565b5b600182019050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006149466028836140b9565b9150614951826148ea565b604082019050919050565b6000602082019050818103600083015261497581614939565b9050919050565b60006149878261400d565b91506149928361400d565b92508282019050808211156149aa576149a9614892565b5b92915050565b7f54686520726f7574657220616c7265616479206861732074686174206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614a0c6023836140b9565b9150614a17826149b0565b604082019050919050565b60006020820190508181036000830152614a3b816149ff565b9050919050565b7f5468652050616e63616b655377617020706169722063616e6e6f74206265207260008201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b657260208201527f5061697273000000000000000000000000000000000000000000000000000000604082015250565b6000614ac46045836140b9565b9150614acf82614a42565b606082019050919050565b60006020820190508181036000830152614af381614ab7565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614b566025836140b9565b9150614b6182614afa565b604082019050919050565b60006020820190508181036000830152614b8581614b49565b9050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b6000614bc2600d836140b9565b9150614bcd82614b8c565b602082019050919050565b60006020820190508181036000830152614bf181614bb5565b9050919050565b7f6665657320746f6f206869676800000000000000000000000000000000000000600082015250565b6000614c2e600d836140b9565b9150614c3982614bf8565b602082019050919050565b60006020820190508181036000830152614c5d81614c21565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000614cc0602a836140b9565b9150614ccb82614c64565b604082019050919050565b60006020820190508181036000830152614cef81614cb3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d526026836140b9565b9150614d5d82614cf6565b604082019050919050565b60006020820190508181036000830152614d8181614d45565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614de46024836140b9565b9150614def82614d88565b604082019050919050565b60006020820190508181036000830152614e1381614dd7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e766022836140b9565b9150614e8182614e1a565b604082019050919050565b60006020820190508181036000830152614ea581614e69565b9050919050565b7f4e6f74204f70656e000000000000000000000000000000000000000000000000600082015250565b6000614ee26008836140b9565b9150614eed82614eac565b602082019050919050565b60006020820190508181036000830152614f1181614ed5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f746025836140b9565b9150614f7f82614f18565b604082019050919050565b60006020820190508181036000830152614fa381614f67565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006150066023836140b9565b915061501182614faa565b604082019050919050565b6000602082019050818103600083015261503581614ff9565b9050919050565b7f616d6f756e74206578636565647320746865206d61784275795472616e73616360008201527f74696f6e416d6f756e742e000000000000000000000000000000000000000000602082015250565b6000615098602b836140b9565b91506150a38261503c565b604082019050919050565b600060208201905081810360008301526150c78161508b565b9050919050565b7f616d6f756e74206578636565647320746865206d617853656c6c5472616e736160008201527f6374696f6e416d6f756e742e0000000000000000000000000000000000000000602082015250565b600061512a602c836140b9565b9150615135826150ce565b604082019050919050565b600060208201905081810360008301526151598161511d565b9050919050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b60006151bc6038836140b9565b91506151c782615160565b604082019050919050565b600060208201905081810360008301526151eb816151af565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061522c8261400d565b91506152378361400d565b925082615247576152466151f2565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006152ae6026836140b9565b91506152b982615252565b604082019050919050565b600060208201905081810360008301526152dd816152a1565b9050919050565b60006060820190506152f96000830186614017565b6153066020830185614017565b6153136040830184614017565b949350505050565b60006153268261400d565b91506153318361400d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561536a57615369614892565b5b828202905092915050565b60006153808261400d565b915061538b8361400d565b92508282039050818111156153a3576153a2614892565b5b92915050565b6000815190506153b881614192565b92915050565b6000602082840312156153d4576153d361404b565b5b60006153e2848285016153a9565b91505092915050565b6000819050919050565b600061541061540b615406846153eb565b6143c5565b61400d565b9050919050565b615420816153f5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61545b81614180565b82525050565b600061546d8383615452565b60208301905092915050565b6000602082019050919050565b600061549182615426565b61549b8185615431565b93506154a683615442565b8060005b838110156154d75781516154be8882615461565b97506154c983615479565b9250506001810190506154aa565b5085935050505092915050565b600060a0820190506154f96000830188614017565b6155066020830187615417565b81810360408301526155188186615486565b9050615527606083018561454f565b6155346080830184614017565b9695505050505050565b600060c082019050615553600083018961454f565b6155606020830188614017565b61556d6040830187615417565b61557a6060830186615417565b615587608083018561454f565b61559460a0830184614017565b979650505050505050565b6000815190506155ae81614055565b92915050565b6000806000606084860312156155cd576155cc61404b565b5b60006155db8682870161559f565b93505060206155ec8682870161559f565b92505060406155fd8682870161559f565b9150509250925092565b600060808201905061561c6000830187615417565b818103602083015261562e8186615486565b905061563d604083018561454f565b61564a6060830184614017565b95945050505050565b60006040820190506156686000830185614017565b818103602083015261567a8184615486565b9050939250505056fea2646970667358221220fccce67bb8c00fe71554a8b55c6f4ff483376cf87693052761a38a4e312833da64736f6c63430008100033

Deployed Bytecode Sourcemap

38549:15388:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39471:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38940:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52363:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4678:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6844:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39547:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51964:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38354:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38635:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5797:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7495:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52201:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5640:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39671:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8396:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37934:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52688:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38683:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38808:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53441:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39009:61;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52546:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38766:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53578:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51105:307;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39347:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39589:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5968:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15288:94;;;;;;;;;;;;;:::i;:::-;;50335:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39713:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38861:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14637:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52092:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4897:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52861:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9114:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6308:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50886:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39388:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39756:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40556:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39506:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49751:576;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51722:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51420:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39308:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51842:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53713:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39267:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39792:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6546:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39077:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39629:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39429;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15537:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49182:561;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50660:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38274:72;;;;;;;;;;;;;:::i;:::-;;39471:28;;;;:::o;38940:62::-;;;;:::o;52363:171::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52461:1:::1;52449:9;:13;52441:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;52517:9;52499:15;:27;;;;52363:171:::0;:::o;4678:100::-;4732:13;4765:5;4758:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4678:100;:::o;6844:169::-;6927:4;6944:39;6953:12;:10;:12::i;:::-;6967:7;6976:6;6944:8;:39::i;:::-;7001:4;6994:11;;6844:169;;;;:::o;39547:35::-;;;;:::o;51964:116::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52064:8:::1;52043:18;:29;;;;51964:116:::0;:::o;38354:186::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38441:7:::1;38437:96;38458:6;:13;38454:1;:17;;;38437:96;;;38517:4;38493:10;:21;38504:6;38511:1;38504:9;;;;;;;;;;:::i;:::-;;;;;;;;38493:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;38473:3;;;;;:::i;:::-;;;;38437:96;;;;38354:186:::0;:::o;38635:41::-;;;;;;;;;;;;;:::o;5797:108::-;5858:7;5885:12;;5878:19;;5797:108;:::o;7495:492::-;7635:4;7652:36;7662:6;7670:9;7681:6;7652:9;:36::i;:::-;7701:24;7728:11;:19;7740:6;7728:19;;;;;;;;;;;;;;;:33;7748:12;:10;:12::i;:::-;7728:33;;;;;;;;;;;;;;;;7701:60;;7800:6;7780:16;:26;;7772:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;7887:57;7896:6;7904:12;:10;:12::i;:::-;7937:6;7918:16;:25;7887:8;:57::i;:::-;7975:4;7968:11;;;7495:492;;;;;:::o;52201:150::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52288:8:::1;52271:14;;:25;;;;;;;;;;;;;;;;;;52312:31;52334:8;52312:31;;;;;;:::i;:::-;;;;;;;;52201:150:::0;:::o;5640:92::-;5698:5;5723:1;5716:8;;5640:92;:::o;39671:35::-;;;;:::o;8396:215::-;8484:4;8501:80;8510:12;:10;:12::i;:::-;8524:7;8570:10;8533:11;:25;8545:12;:10;:12::i;:::-;8533:25;;;;;;;;;;;;;;;:34;8559:7;8533:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;8501:8;:80::i;:::-;8599:4;8592:11;;8396:215;;;;:::o;37934:26::-;;;;;;;;;;;;;:::o;52688:165::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52794:4:::1;52761:20;:30;52782:8;52761:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;52841:4;52809:19;:29;52829:8;52809:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;52688:165:::0;:::o;38683:38::-;;;:::o;38808:40::-;;;;;;;;;;;;;:::o;53441:125::-;53506:4;53530:19;:28;53550:7;53530:28;;;;;;;;;;;;;;;;;;;;;;;;;53523:35;;53441:125;;;:::o;39009:61::-;;;;:::o;52546:134::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52667:5:::1;52634:20;:30;52655:8;52634:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;52546:134:::0;;:::o;38766:33::-;;;;;;;;;;;;;:::o;53578:127::-;53644:4;53668:20;:29;53689:7;53668:29;;;;;;;;;;;;;;;;;;;;;;;;;53661:36;;53578:127;;;:::o;51105:307::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51214:15:::1;;;;;;;;;;;51192:38;;:10;:38;;::::0;51184:86:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;51328:15;;;;;;;;;;;51286:59;;51308:10;51286:59;;;;;;;;;;;;51393:10;51356:15;;:48;;;;;;;;;;;;;;;;;;51105:307:::0;:::o;39347:34::-;;;;:::o;39589:33::-;;;;:::o;5968:127::-;6042:7;6069:9;:18;6079:7;6069:18;;;;;;;;;;;;;;;;6062:25;;5968:127;;;:::o;15288:94::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15353:21:::1;15371:1;15353:9;:21::i;:::-;15288:94::o:0;50335:317::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50520:11:::1;50502:15;;:29;;;;;;;;;;;;;;;;;;50560:11;50542:15;;:29;;;;;;;;;;;;;;;;;;50601:10;50582:16;;:29;;;;;;;;;;;;;;;;;;50634:10;50622:9;;:22;;;;;;;;;;;;;;;;;;50335:317:::0;;;;:::o;39713:36::-;;;;:::o;38861:70::-;;;;;;;;;;;;;:::o;14637:87::-;14683:7;14710:6;;;;;;;;;;;14703:13;;14637:87;:::o;52092:97::-;52139:7;52166:15;;52159:22;;52092:97;:::o;4897:104::-;4953:13;4986:7;4979:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4897:104;:::o;52861:254::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52968:13:::1;52960:21;;:4;:21;;::::0;52952:103:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;53066:41;53095:4;53101:5;53066:28;:41::i;:::-;52861:254:::0;;:::o;9114:413::-;9207:4;9224:24;9251:11;:25;9263:12;:10;:12::i;:::-;9251:25;;;;;;;;;;;;;;;:34;9277:7;9251:34;;;;;;;;;;;;;;;;9224:61;;9324:15;9304:16;:35;;9296:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;9417:67;9426:12;:10;:12::i;:::-;9440:7;9468:15;9449:16;:34;9417:8;:67::i;:::-;9515:4;9508:11;;;9114:413;;;;:::o;6308:175::-;6394:4;6411:42;6421:12;:10;:12::i;:::-;6435:9;6446:6;6411:9;:42::i;:::-;6471:4;6464:11;;6308:175;;;;:::o;50886:209::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50986:15:::1;50960:23;:41;;;;51047:22;51065:3;51047:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;51020:23;;:49;;51012:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;50886:209:::0;:::o;39388:34::-;;;;:::o;39756:29::-;;;;:::o;40556:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;39506:32::-;;;;:::o;49751:576::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49927:7:::1;49908:16;:26;;;;49962:9;49945:14;:26;;;;50001:8;49982:16;:27;;;;50039:8;50020:16;:27;;;;50078:7;50058:17;:27;;;;50109:7;50096:10;:20;;;;50143:119;50251:10;;50143:103;50228:17;;50143:80;50206:16;;50143:58;50184:16;;50143:36;50164:14;;50143:16;;:20;;:36;;;;:::i;:::-;:40;;:58;;;;:::i;:::-;:62;;:80;;;;:::i;:::-;:84;;:103;;;;:::i;:::-;:107;;:119;;;;:::i;:::-;50127:13;:135;;;;50298:2;50281:13;;:19;;50273:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;49751:576:::0;;;;;;:::o;51722:108::-;51778:7;51805:17;;51798:24;;51722:108;:::o;51420:290::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51545:8:::1;51513:40;;:19;:28;51533:7;51513:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;51505:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;51642:8;51611:19;:28;51631:7;51611:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;51684:7;51668:34;;;51693:8;51668:34;;;;;;:::i;:::-;;;;;;;;51420:290:::0;;:::o;39308:32::-;;;;:::o;51842:114::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51940:8:::1;51920:17;:28;;;;51842:114:::0;:::o;53713:171::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53814:8:::1;53790:21;;:32;;;;;;;;;;;;;;;;;;53838:38;53867:8;53838:38;;;;;;:::i;:::-;;;;;;;;53713:171:::0;:::o;39267:34::-;;;;:::o;39792:33::-;;;;:::o;6546:151::-;6635:7;6662:11;:18;6674:5;6662:18;;;;;;;;;;;;;;;:27;6681:7;6662:27;;;;;;;;;;;;;;;;6655:34;;6546:151;;;;:::o;39077:56::-;;;;:::o;39629:35::-;;;;:::o;39429:::-;;;;:::o;15537:192::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15646:1:::1;15626:22;;:8;:22;;::::0;15618:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15702:19;15712:8;15702:9;:19::i;:::-;15537:192:::0;:::o;49182:561::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49356:7:::1;49338:15;:25;;;;49390:9;49374:13;:25;;;;49428:8;49410:15;:26;;;;49465:8;49447:15;:26;;;;49503:7;49484:16;:26;;;;49533:7;49521:9;:19;;;;49566:113;49669:9;;49566:98;49647:16;;49566:76;49626:15;;49566:55;49605:15;;49566:34;49586:13;;49566:15;;:19;;:34;;;;:::i;:::-;:38;;:55;;;;:::i;:::-;:59;;:76;;;;:::i;:::-;:80;;:98;;;;:::i;:::-;:102;;:113;;;;:::i;:::-;49551:12;:128;;;;49715:2;49699:12:::0;::::1;:18;;49691:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;49182:561:::0;;;;;;:::o;50660:214::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50763:16:::1;50736:24;:43;;;;50826:22;50844:3;50826:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;50798:24;;:50;;50790:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;50660:214:::0;:::o;38274:72::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38334:4:::1;38325:6;;:13;;;;;;;;;;;;;;;;;;38274:72::o:0;3401:98::-;3454:7;3481:10;3474:17;;3401:98;:::o;11887:380::-;12040:1;12023:19;;:5;:19;;;12015:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12121:1;12102:21;;:7;:21;;;12094:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12205:6;12175:11;:18;12187:5;12175:18;;;;;;;;;;;;;;;:27;12194:7;12175:27;;;;;;;;;;;;;;;:36;;;;12243:7;12227:32;;12236:5;12227:32;;;12252:6;12227:32;;;;;;:::i;:::-;;;;;;;;11887:380;;;:::o;42953:2208::-;43053:4;43059:2;38076:6;;;;;;;;;;;:26;;;;38086:10;:16;38097:4;38086:16;;;;;;;;;;;;;;;;;;;;;;;;;38076:26;:44;;;;38106:10;:14;38117:2;38106:14;;;;;;;;;;;;;;;;;;;;;;;;;38076:44;38068:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;43116:1:::1;43100:18;;:4;:18;;::::0;43092:68:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;43193:1;43179:16;;:2;:16;;::::0;43171:64:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;43261:1;43251:6;:11:::0;43248:92:::1;;43279:28;43295:4;43301:2;43305:1;43279:15;:28::i;:::-;43322:7;;43248:92;43363:25;:31;43389:4;43363:31;;;;;;;;;;;;;;;;;;;;;;;;;:64;;;;;43400:20;:26;43421:4;43400:26;;;;;;;;;;;;;;;;;;;;;;;;;43399:27;43363:64;:95;;;;;43433:20;:24;43454:2;43433:24;;;;;;;;;;;;;;;;;;;;;;;;;43432:25;43363:95;43360:215;;;43492:23;;43482:6;:33;;43474:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;43360:215;43590:25;:29;43616:2;43590:29;;;;;;;;;;;;;;;;;;;;;;;;;:62;;;;;43625:20;:26;43646:4;43625:26;;;;;;;;;;;;;;;;;;;;;;;;;43624:27;43590:62;:93;;;;;43658:20;:24;43679:2;43658:24;;;;;;;;;;;;;;;;;;;;;;;;;43657:25;43590:93;43587:215;;;43717:24;;43707:6;:34;;43699:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;43587:215;43821:28;43852:24;43870:4;43852:9;:24::i;:::-;43821:55;;43897:24;43948:18;;43924:20;:42;;43897:69;;43990:16;;;;;;;;;;;43989:17;:50;;;;;44010:25;:29;44036:2;44010:29;;;;;;;;;;;;;;;;;;;;;;;;;43989:50;:75;;;;;44043:21;;;;;;;;;;;43989:75;43986:633;;;44084:19;44081:155;;;44147:18;;44124:41;;44184:36;44199:20;44184:14;:36::i;:::-;44081:155;44264:15;44282:21;44264:39;;44322:14;;;;;;;;;;;:45;;;;;44350:17;;44340:7;:27;44322:45;44318:290;;;44420:17;;44410:7;:27;44406:187;;;44472:17;;44462:27;;44530:43;44544:28;44556:15;;44544:7;:11;;:28;;;;:::i;:::-;44530:13;:43::i;:::-;44406:187;44318:290;44066:553;43986:633;44721:19;:25;44741:4;44721:25;;;;;;;;;;;;;;;;;;;;;;;;;44720:26;:54;;;;;44751:19;:23;44771:2;44751:23;;;;;;;;;;;;;;;;;;;;;;;;;44750:24;44720:54;44717:389;;;44791:12;44806:33;44835:3;44806:24;44817:12;;44806:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;44791:48;;44857:25;:29;44883:2;44857:29;;;;;;;;;;;;;;;;;;;;;;;;;44854:110;;;44914:34;44944:3;44914:25;44925:13;;44914:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;44907:41;;44854:110;44984:16;44995:4;44984:6;:10;;:16;;;;:::i;:::-;44975:25;;45015:42;45031:4;45045;45052;45015:15;:42::i;:::-;44776:330;44717:389;45118:33;45134:4;45140:2;45144:6;45118:15;:33::i;:::-;43081:2080;;38144:1;42953:2208:::0;;;;;:::o;15737:173::-;15793:16;15812:6;;;;;;;;;;;15793:25;;15838:8;15829:6;;:17;;;;;;;;;;;;;;;;;;15893:8;15862:40;;15883:8;15862:40;;;;;;;;;;;;15782:128;15737:173;:::o;53123:306::-;53249:5;53214:40;;:25;:31;53240:4;53214:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;53206:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;53360:5;53326:25;:31;53352:4;53326:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;53415:5;53381:40;;53409:4;53381:40;;;;;;;;;;;;53123:306;;:::o;26928:98::-;26986:7;27017:1;27013;:5;;;;:::i;:::-;27006:12;;26928:98;;;;:::o;25791:::-;25849:7;25880:1;25876;:5;;;;:::i;:::-;25869:12;;25791:98;;;;:::o;10017:733::-;10175:1;10157:20;;:6;:20;;;10149:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;10259:1;10238:23;;:9;:23;;;10230:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10314:47;10335:6;10343:9;10354:6;10314:20;:47::i;:::-;10374:21;10398:9;:17;10408:6;10398:17;;;;;;;;;;;;;;;;10374:41;;10451:6;10434:13;:23;;10426:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;10572:6;10556:13;:22;10536:9;:17;10546:6;10536:17;;;;;;;;;;;;;;;:42;;;;10624:6;10600:9;:20;10610:9;10600:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;10665:9;10648:35;;10657:6;10648:35;;;10676:6;10648:35;;;;;;:::i;:::-;;;;;;;;10696:46;10716:6;10724:9;10735:6;10696:19;:46::i;:::-;10138:612;10017:733;;;:::o;45169:1140::-;41333:4;41314:16;;:23;;;;;;;;;;;;;;;;;;45254::::1;45280:61;45327:13;;45280:42;45305:16;;45280:20;:24;;:42;;;;:::i;:::-;:46;;:61;;;;:::i;:::-;45254:87;;45352:20;45375:41;45400:15;45375:20;:24;;:41;;;;:::i;:::-;45352:64;;45478:12;45493:22;45513:1;45493:15;:19;;:22;;;;:::i;:::-;45478:37;;45526:17;45546:25;45566:4;45546:15;:19;;:25;;;;:::i;:::-;45526:45;;45849:22;45874:21;45849:46;;45940:37;45957:4;45971;45940:16;:37::i;:::-;46038:18;46059:41;46085:14;46059:21;:25;;:41;;;;:::i;:::-;46038:62;;46150:35;46163:9;46174:10;46150:12;:35::i;:::-;46198:34;46219:12;46198:20;:34::i;:::-;46258:43;46273:4;46279:10;46291:9;46258:43;;;;;;;;:::i;:::-;;;;;;;;45243:1066;;;;;;41379:5:::0;41360:16;;:24;;;;;;;;;;;;;;;;;;45169:1140;:::o;47747:135::-;41333:4;41314:16;;:23;;;;;;;;;;;;;;;;;;47827:1:::1;47818:6;:10;47814:61;;;47842:24;47859:6;47842:16;:24::i;:::-;47814:61;41379:5:::0;41360:16;;:24;;;;;;;;;;;;;;;;;;47747:135;:::o;26529:98::-;26587:7;26618:1;26614;:5;;;;:::i;:::-;26607:12;;26529:98;;;;:::o;26172:::-;26230:7;26261:1;26257;:5;;;;:::i;:::-;26250:12;;26172:98;;;;:::o;12867:125::-;;;;:::o;13596:124::-;;;;:::o;48479:695::-;48618:21;48656:1;48642:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48618:40;;48687:4;48669;48674:1;48669:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;48713:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48703:4;48708:1;48703:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;48804:11;48751:50;48769:4;48784:15;;;;;;;;;;;48751:9;:50::i;:::-;:64;48748:156;;;48830:62;48847:4;48862:15;;;;;;;;;;;48889:1;48880:11;48830:8;:62::i;:::-;48748:156;48942:15;;;;;;;;;;;:66;;;49023:11;49049:1;49093:4;49112:3;49130:15;48942:214;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48547:627;48479:695;;:::o;47221:513::-;47369:62;47386:4;47401:15;;;;;;;;;;;47419:11;47369:8;:62::i;:::-;47474:15;;;;;;;;;;;:31;;;47513:9;47546:4;47566:11;47592:1;47635;47678:7;:5;:7::i;:::-;47700:15;47474:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;47221:513;;:::o;46317:896::-;46387:25;46415:21;46387:49;;46447:44;46464:11;46485:4;46447:16;:44::i;:::-;46502:24;46529:44;46555:17;46529:21;:25;;:44;;;;:::i;:::-;46502:71;;46584:22;46609:79;46652:35;46670:16;;46652:13;;:17;;:35;;;;:::i;:::-;46609:38;46630:16;;46609;:20;;:38;;;;:::i;:::-;:42;;:79;;;;:::i;:::-;46584:104;;46699:22;46724:79;46767:35;46785:16;;46767:13;;:17;;:35;;;;:::i;:::-;46724:38;46745:16;;46724;:20;;:38;;;;:::i;:::-;:42;;:79;;;;:::i;:::-;46699:104;;46814:16;46833:80;46877:35;46895:16;;46877:13;;:17;;:35;;;;:::i;:::-;46833:39;46854:17;;46833:16;:20;;:39;;;;:::i;:::-;:43;;:80;;;;:::i;:::-;46814:99;;46924:16;46943:73;46980:35;46998:16;;46980:13;;:17;;:35;;;;:::i;:::-;46943:32;46964:10;;46943:16;:20;;:32;;;;:::i;:::-;:36;;:73;;;;:::i;:::-;46924:92;;47027:15;;;;;;;;;;;:24;;:40;47052:14;47027:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47078:15;;;;;;;;;;;:24;;:40;47103:14;47078:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47129:16;;;;;;;;;;;:25;;:35;47155:8;47129:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47175:9;;;;;;;;;;;:18;;:28;47194:8;47175:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46376:837;;;;;;46317:896;:::o;47894:577::-;48015:21;48053:1;48039:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48015:40;;48076:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48066:4;48071:1;48066:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;48127:4;48109;48114:1;48109:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;48169:15;;;;;;;;;;;:66;;;48243:6;48265:1;48312:4;48331:10;;;;;;;;;;;48372:24;48392:3;48372:15;:19;;:24;;;;:::i;:::-;48169:238;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48433:30;48450:6;48458:4;48433:30;;;;;;;:::i;:::-;;;;;;;;47944:527;47894:577;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:75::-;475:6;508:2;502:9;492:19;;442:75;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:122;842:24;860:5;842:24;:::i;:::-;835:5;832:35;822:63;;881:1;878;871:12;822:63;769:122;:::o;897:139::-;943:5;981:6;968:20;959:29;;997:33;1024:5;997:33;:::i;:::-;897:139;;;;:::o;1042:329::-;1101:6;1150:2;1138:9;1129:7;1125:23;1121:32;1118:119;;;1156:79;;:::i;:::-;1118:119;1276:1;1301:53;1346:7;1337:6;1326:9;1322:22;1301:53;:::i;:::-;1291:63;;1247:117;1042:329;;;;:::o;1377:99::-;1429:6;1463:5;1457:12;1447:22;;1377:99;;;:::o;1482:169::-;1566:11;1600:6;1595:3;1588:19;1640:4;1635:3;1631:14;1616:29;;1482:169;;;;:::o;1657:246::-;1738:1;1748:113;1762:6;1759:1;1756:13;1748:113;;;1847:1;1842:3;1838:11;1832:18;1828:1;1823:3;1819:11;1812:39;1784:2;1781:1;1777:10;1772:15;;1748:113;;;1895:1;1886:6;1881:3;1877:16;1870:27;1719:184;1657:246;;;:::o;1909:102::-;1950:6;2001:2;1997:7;1992:2;1985:5;1981:14;1977:28;1967:38;;1909:102;;;:::o;2017:377::-;2105:3;2133:39;2166:5;2133:39;:::i;:::-;2188:71;2252:6;2247:3;2188:71;:::i;:::-;2181:78;;2268:65;2326:6;2321:3;2314:4;2307:5;2303:16;2268:65;:::i;:::-;2358:29;2380:6;2358:29;:::i;:::-;2353:3;2349:39;2342:46;;2109:285;2017:377;;;;:::o;2400:313::-;2513:4;2551:2;2540:9;2536:18;2528:26;;2600:9;2594:4;2590:20;2586:1;2575:9;2571:17;2564:47;2628:78;2701:4;2692:6;2628:78;:::i;:::-;2620:86;;2400:313;;;;:::o;2719:126::-;2756:7;2796:42;2789:5;2785:54;2774:65;;2719:126;;;:::o;2851:96::-;2888:7;2917:24;2935:5;2917:24;:::i;:::-;2906:35;;2851:96;;;:::o;2953:122::-;3026:24;3044:5;3026:24;:::i;:::-;3019:5;3016:35;3006:63;;3065:1;3062;3055:12;3006:63;2953:122;:::o;3081:139::-;3127:5;3165:6;3152:20;3143:29;;3181:33;3208:5;3181:33;:::i;:::-;3081:139;;;;:::o;3226:474::-;3294:6;3302;3351:2;3339:9;3330:7;3326:23;3322:32;3319:119;;;3357:79;;:::i;:::-;3319:119;3477:1;3502:53;3547:7;3538:6;3527:9;3523:22;3502:53;:::i;:::-;3492:63;;3448:117;3604:2;3630:53;3675:7;3666:6;3655:9;3651:22;3630:53;:::i;:::-;3620:63;;3575:118;3226:474;;;;;:::o;3706:90::-;3740:7;3783:5;3776:13;3769:21;3758:32;;3706:90;;;:::o;3802:109::-;3883:21;3898:5;3883:21;:::i;:::-;3878:3;3871:34;3802:109;;:::o;3917:210::-;4004:4;4042:2;4031:9;4027:18;4019:26;;4055:65;4117:1;4106:9;4102:17;4093:6;4055:65;:::i;:::-;3917:210;;;;:::o;4133:117::-;4242:1;4239;4232:12;4256:180;4304:77;4301:1;4294:88;4401:4;4398:1;4391:15;4425:4;4422:1;4415:15;4442:281;4525:27;4547:4;4525:27;:::i;:::-;4517:6;4513:40;4655:6;4643:10;4640:22;4619:18;4607:10;4604:34;4601:62;4598:88;;;4666:18;;:::i;:::-;4598:88;4706:10;4702:2;4695:22;4485:238;4442:281;;:::o;4729:129::-;4763:6;4790:20;;:::i;:::-;4780:30;;4819:33;4847:4;4839:6;4819:33;:::i;:::-;4729:129;;;:::o;4864:311::-;4941:4;5031:18;5023:6;5020:30;5017:56;;;5053:18;;:::i;:::-;5017:56;5103:4;5095:6;5091:17;5083:25;;5163:4;5157;5153:15;5145:23;;4864:311;;;:::o;5181:117::-;5290:1;5287;5280:12;5321:710;5417:5;5442:81;5458:64;5515:6;5458:64;:::i;:::-;5442:81;:::i;:::-;5433:90;;5543:5;5572:6;5565:5;5558:21;5606:4;5599:5;5595:16;5588:23;;5659:4;5651:6;5647:17;5639:6;5635:30;5688:3;5680:6;5677:15;5674:122;;;5707:79;;:::i;:::-;5674:122;5822:6;5805:220;5839:6;5834:3;5831:15;5805:220;;;5914:3;5943:37;5976:3;5964:10;5943:37;:::i;:::-;5938:3;5931:50;6010:4;6005:3;6001:14;5994:21;;5881:144;5865:4;5860:3;5856:14;5849:21;;5805:220;;;5809:21;5423:608;;5321:710;;;;;:::o;6054:370::-;6125:5;6174:3;6167:4;6159:6;6155:17;6151:27;6141:122;;6182:79;;:::i;:::-;6141:122;6299:6;6286:20;6324:94;6414:3;6406:6;6399:4;6391:6;6387:17;6324:94;:::i;:::-;6315:103;;6131:293;6054:370;;;;:::o;6430:539::-;6514:6;6563:2;6551:9;6542:7;6538:23;6534:32;6531:119;;;6569:79;;:::i;:::-;6531:119;6717:1;6706:9;6702:17;6689:31;6747:18;6739:6;6736:30;6733:117;;;6769:79;;:::i;:::-;6733:117;6874:78;6944:7;6935:6;6924:9;6920:22;6874:78;:::i;:::-;6864:88;;6660:302;6430:539;;;;:::o;6975:60::-;7003:3;7024:5;7017:12;;6975:60;;;:::o;7041:142::-;7091:9;7124:53;7142:34;7151:24;7169:5;7151:24;:::i;:::-;7142:34;:::i;:::-;7124:53;:::i;:::-;7111:66;;7041:142;;;:::o;7189:126::-;7239:9;7272:37;7303:5;7272:37;:::i;:::-;7259:50;;7189:126;;;:::o;7321:153::-;7398:9;7431:37;7462:5;7431:37;:::i;:::-;7418:50;;7321:153;;;:::o;7480:185::-;7594:64;7652:5;7594:64;:::i;:::-;7589:3;7582:77;7480:185;;:::o;7671:276::-;7791:4;7829:2;7818:9;7814:18;7806:26;;7842:98;7937:1;7926:9;7922:17;7913:6;7842:98;:::i;:::-;7671:276;;;;:::o;7953:619::-;8030:6;8038;8046;8095:2;8083:9;8074:7;8070:23;8066:32;8063:119;;;8101:79;;:::i;:::-;8063:119;8221:1;8246:53;8291:7;8282:6;8271:9;8267:22;8246:53;:::i;:::-;8236:63;;8192:117;8348:2;8374:53;8419:7;8410:6;8399:9;8395:22;8374:53;:::i;:::-;8364:63;;8319:118;8476:2;8502:53;8547:7;8538:6;8527:9;8523:22;8502:53;:::i;:::-;8492:63;;8447:118;7953:619;;;;;:::o;8578:116::-;8648:21;8663:5;8648:21;:::i;:::-;8641:5;8638:32;8628:60;;8684:1;8681;8674:12;8628:60;8578:116;:::o;8700:133::-;8743:5;8781:6;8768:20;8759:29;;8797:30;8821:5;8797:30;:::i;:::-;8700:133;;;;:::o;8839:323::-;8895:6;8944:2;8932:9;8923:7;8919:23;8915:32;8912:119;;;8950:79;;:::i;:::-;8912:119;9070:1;9095:50;9137:7;9128:6;9117:9;9113:22;9095:50;:::i;:::-;9085:60;;9041:114;8839:323;;;;:::o;9168:86::-;9203:7;9243:4;9236:5;9232:16;9221:27;;9168:86;;;:::o;9260:112::-;9343:22;9359:5;9343:22;:::i;:::-;9338:3;9331:35;9260:112;;:::o;9378:214::-;9467:4;9505:2;9494:9;9490:18;9482:26;;9518:67;9582:1;9571:9;9567:17;9558:6;9518:67;:::i;:::-;9378:214;;;;:::o;9598:329::-;9657:6;9706:2;9694:9;9685:7;9681:23;9677:32;9674:119;;;9712:79;;:::i;:::-;9674:119;9832:1;9857:53;9902:7;9893:6;9882:9;9878:22;9857:53;:::i;:::-;9847:63;;9803:117;9598:329;;;;:::o;9933:118::-;10020:24;10038:5;10020:24;:::i;:::-;10015:3;10008:37;9933:118;;:::o;10057:222::-;10150:4;10188:2;10177:9;10173:18;10165:26;;10201:71;10269:1;10258:9;10254:17;10245:6;10201:71;:::i;:::-;10057:222;;;;:::o;10285:468::-;10350:6;10358;10407:2;10395:9;10386:7;10382:23;10378:32;10375:119;;;10413:79;;:::i;:::-;10375:119;10533:1;10558:53;10603:7;10594:6;10583:9;10579:22;10558:53;:::i;:::-;10548:63;;10504:117;10660:2;10686:50;10728:7;10719:6;10708:9;10704:22;10686:50;:::i;:::-;10676:60;;10631:115;10285:468;;;;;:::o;10759:104::-;10804:7;10833:24;10851:5;10833:24;:::i;:::-;10822:35;;10759:104;;;:::o;10869:138::-;10950:32;10976:5;10950:32;:::i;:::-;10943:5;10940:43;10930:71;;10997:1;10994;10987:12;10930:71;10869:138;:::o;11013:155::-;11067:5;11105:6;11092:20;11083:29;;11121:41;11156:5;11121:41;:::i;:::-;11013:155;;;;:::o;11174:829::-;11292:6;11300;11308;11316;11365:3;11353:9;11344:7;11340:23;11336:33;11333:120;;;11372:79;;:::i;:::-;11333:120;11492:1;11517:61;11570:7;11561:6;11550:9;11546:22;11517:61;:::i;:::-;11507:71;;11463:125;11627:2;11653:61;11706:7;11697:6;11686:9;11682:22;11653:61;:::i;:::-;11643:71;;11598:126;11763:2;11789:61;11842:7;11833:6;11822:9;11818:22;11789:61;:::i;:::-;11779:71;;11734:126;11899:2;11925:61;11978:7;11969:6;11958:9;11954:22;11925:61;:::i;:::-;11915:71;;11870:126;11174:829;;;;;;;:::o;12009:1057::-;12113:6;12121;12129;12137;12145;12153;12202:3;12190:9;12181:7;12177:23;12173:33;12170:120;;;12209:79;;:::i;:::-;12170:120;12329:1;12354:53;12399:7;12390:6;12379:9;12375:22;12354:53;:::i;:::-;12344:63;;12300:117;12456:2;12482:53;12527:7;12518:6;12507:9;12503:22;12482:53;:::i;:::-;12472:63;;12427:118;12584:2;12610:53;12655:7;12646:6;12635:9;12631:22;12610:53;:::i;:::-;12600:63;;12555:118;12712:2;12738:53;12783:7;12774:6;12763:9;12759:22;12738:53;:::i;:::-;12728:63;;12683:118;12840:3;12867:53;12912:7;12903:6;12892:9;12888:22;12867:53;:::i;:::-;12857:63;;12811:119;12969:3;12996:53;13041:7;13032:6;13021:9;13017:22;12996:53;:::i;:::-;12986:63;;12940:119;12009:1057;;;;;;;;:::o;13072:474::-;13140:6;13148;13197:2;13185:9;13176:7;13172:23;13168:32;13165:119;;;13203:79;;:::i;:::-;13165:119;13323:1;13348:53;13393:7;13384:6;13373:9;13369:22;13348:53;:::i;:::-;13338:63;;13294:117;13450:2;13476:53;13521:7;13512:6;13501:9;13497:22;13476:53;:::i;:::-;13466:63;;13421:118;13072:474;;;;;:::o;13552:182::-;13692:34;13688:1;13680:6;13676:14;13669:58;13552:182;:::o;13740:366::-;13882:3;13903:67;13967:2;13962:3;13903:67;:::i;:::-;13896:74;;13979:93;14068:3;13979:93;:::i;:::-;14097:2;14092:3;14088:12;14081:19;;13740:366;;;:::o;14112:419::-;14278:4;14316:2;14305:9;14301:18;14293:26;;14365:9;14359:4;14355:20;14351:1;14340:9;14336:17;14329:47;14393:131;14519:4;14393:131;:::i;:::-;14385:139;;14112:419;;;:::o;14537:171::-;14677:23;14673:1;14665:6;14661:14;14654:47;14537:171;:::o;14714:366::-;14856:3;14877:67;14941:2;14936:3;14877:67;:::i;:::-;14870:74;;14953:93;15042:3;14953:93;:::i;:::-;15071:2;15066:3;15062:12;15055:19;;14714:366;;;:::o;15086:419::-;15252:4;15290:2;15279:9;15275:18;15267:26;;15339:9;15333:4;15329:20;15325:1;15314:9;15310:17;15303:47;15367:131;15493:4;15367:131;:::i;:::-;15359:139;;15086:419;;;:::o;15511:180::-;15559:77;15556:1;15549:88;15656:4;15653:1;15646:15;15680:4;15677:1;15670:15;15697:320;15741:6;15778:1;15772:4;15768:12;15758:22;;15825:1;15819:4;15815:12;15846:18;15836:81;;15902:4;15894:6;15890:17;15880:27;;15836:81;15964:2;15956:6;15953:14;15933:18;15930:38;15927:84;;15983:18;;:::i;:::-;15927:84;15748:269;15697:320;;;:::o;16023:180::-;16071:77;16068:1;16061:88;16168:4;16165:1;16158:15;16192:4;16189:1;16182:15;16209:180;16257:77;16254:1;16247:88;16354:4;16351:1;16344:15;16378:4;16375:1;16368:15;16395:167;16432:3;16455:22;16471:5;16455:22;:::i;:::-;16446:31;;16499:4;16492:5;16489:15;16486:41;;16507:18;;:::i;:::-;16486:41;16554:1;16547:5;16543:13;16536:20;;16395:167;;;:::o;16568:227::-;16708:34;16704:1;16696:6;16692:14;16685:58;16777:10;16772:2;16764:6;16760:15;16753:35;16568:227;:::o;16801:366::-;16943:3;16964:67;17028:2;17023:3;16964:67;:::i;:::-;16957:74;;17040:93;17129:3;17040:93;:::i;:::-;17158:2;17153:3;17149:12;17142:19;;16801:366;;;:::o;17173:419::-;17339:4;17377:2;17366:9;17362:18;17354:26;;17426:9;17420:4;17416:20;17412:1;17401:9;17397:17;17390:47;17454:131;17580:4;17454:131;:::i;:::-;17446:139;;17173:419;;;:::o;17598:191::-;17638:3;17657:20;17675:1;17657:20;:::i;:::-;17652:25;;17691:20;17709:1;17691:20;:::i;:::-;17686:25;;17734:1;17731;17727:9;17720:16;;17755:3;17752:1;17749:10;17746:36;;;17762:18;;:::i;:::-;17746:36;17598:191;;;;:::o;17795:222::-;17935:34;17931:1;17923:6;17919:14;17912:58;18004:5;17999:2;17991:6;17987:15;17980:30;17795:222;:::o;18023:366::-;18165:3;18186:67;18250:2;18245:3;18186:67;:::i;:::-;18179:74;;18262:93;18351:3;18262:93;:::i;:::-;18380:2;18375:3;18371:12;18364:19;;18023:366;;;:::o;18395:419::-;18561:4;18599:2;18588:9;18584:18;18576:26;;18648:9;18642:4;18638:20;18634:1;18623:9;18619:17;18612:47;18676:131;18802:4;18676:131;:::i;:::-;18668:139;;18395:419;;;:::o;18820:293::-;18960:34;18956:1;18948:6;18944:14;18937:58;19029:34;19024:2;19016:6;19012:15;19005:59;19098:7;19093:2;19085:6;19081:15;19074:32;18820:293;:::o;19119:366::-;19261:3;19282:67;19346:2;19341:3;19282:67;:::i;:::-;19275:74;;19358:93;19447:3;19358:93;:::i;:::-;19476:2;19471:3;19467:12;19460:19;;19119:366;;;:::o;19491:419::-;19657:4;19695:2;19684:9;19680:18;19672:26;;19744:9;19738:4;19734:20;19730:1;19719:9;19715:17;19708:47;19772:131;19898:4;19772:131;:::i;:::-;19764:139;;19491:419;;;:::o;19916:224::-;20056:34;20052:1;20044:6;20040:14;20033:58;20125:7;20120:2;20112:6;20108:15;20101:32;19916:224;:::o;20146:366::-;20288:3;20309:67;20373:2;20368:3;20309:67;:::i;:::-;20302:74;;20385:93;20474:3;20385:93;:::i;:::-;20503:2;20498:3;20494:12;20487:19;;20146:366;;;:::o;20518:419::-;20684:4;20722:2;20711:9;20707:18;20699:26;;20771:9;20765:4;20761:20;20757:1;20746:9;20742:17;20735:47;20799:131;20925:4;20799:131;:::i;:::-;20791:139;;20518:419;;;:::o;20943:163::-;21083:15;21079:1;21071:6;21067:14;21060:39;20943:163;:::o;21112:366::-;21254:3;21275:67;21339:2;21334:3;21275:67;:::i;:::-;21268:74;;21351:93;21440:3;21351:93;:::i;:::-;21469:2;21464:3;21460:12;21453:19;;21112:366;;;:::o;21484:419::-;21650:4;21688:2;21677:9;21673:18;21665:26;;21737:9;21731:4;21727:20;21723:1;21712:9;21708:17;21701:47;21765:131;21891:4;21765:131;:::i;:::-;21757:139;;21484:419;;;:::o;21909:163::-;22049:15;22045:1;22037:6;22033:14;22026:39;21909:163;:::o;22078:366::-;22220:3;22241:67;22305:2;22300:3;22241:67;:::i;:::-;22234:74;;22317:93;22406:3;22317:93;:::i;:::-;22435:2;22430:3;22426:12;22419:19;;22078:366;;;:::o;22450:419::-;22616:4;22654:2;22643:9;22639:18;22631:26;;22703:9;22697:4;22693:20;22689:1;22678:9;22674:17;22667:47;22731:131;22857:4;22731:131;:::i;:::-;22723:139;;22450:419;;;:::o;22875:229::-;23015:34;23011:1;23003:6;22999:14;22992:58;23084:12;23079:2;23071:6;23067:15;23060:37;22875:229;:::o;23110:366::-;23252:3;23273:67;23337:2;23332:3;23273:67;:::i;:::-;23266:74;;23349:93;23438:3;23349:93;:::i;:::-;23467:2;23462:3;23458:12;23451:19;;23110:366;;;:::o;23482:419::-;23648:4;23686:2;23675:9;23671:18;23663:26;;23735:9;23729:4;23725:20;23721:1;23710:9;23706:17;23699:47;23763:131;23889:4;23763:131;:::i;:::-;23755:139;;23482:419;;;:::o;23907:225::-;24047:34;24043:1;24035:6;24031:14;24024:58;24116:8;24111:2;24103:6;24099:15;24092:33;23907:225;:::o;24138:366::-;24280:3;24301:67;24365:2;24360:3;24301:67;:::i;:::-;24294:74;;24377:93;24466:3;24377:93;:::i;:::-;24495:2;24490:3;24486:12;24479:19;;24138:366;;;:::o;24510:419::-;24676:4;24714:2;24703:9;24699:18;24691:26;;24763:9;24757:4;24753:20;24749:1;24738:9;24734:17;24727:47;24791:131;24917:4;24791:131;:::i;:::-;24783:139;;24510:419;;;:::o;24935:223::-;25075:34;25071:1;25063:6;25059:14;25052:58;25144:6;25139:2;25131:6;25127:15;25120:31;24935:223;:::o;25164:366::-;25306:3;25327:67;25391:2;25386:3;25327:67;:::i;:::-;25320:74;;25403:93;25492:3;25403:93;:::i;:::-;25521:2;25516:3;25512:12;25505:19;;25164:366;;;:::o;25536:419::-;25702:4;25740:2;25729:9;25725:18;25717:26;;25789:9;25783:4;25779:20;25775:1;25764:9;25760:17;25753:47;25817:131;25943:4;25817:131;:::i;:::-;25809:139;;25536:419;;;:::o;25961:221::-;26101:34;26097:1;26089:6;26085:14;26078:58;26170:4;26165:2;26157:6;26153:15;26146:29;25961:221;:::o;26188:366::-;26330:3;26351:67;26415:2;26410:3;26351:67;:::i;:::-;26344:74;;26427:93;26516:3;26427:93;:::i;:::-;26545:2;26540:3;26536:12;26529:19;;26188:366;;;:::o;26560:419::-;26726:4;26764:2;26753:9;26749:18;26741:26;;26813:9;26807:4;26803:20;26799:1;26788:9;26784:17;26777:47;26841:131;26967:4;26841:131;:::i;:::-;26833:139;;26560:419;;;:::o;26985:158::-;27125:10;27121:1;27113:6;27109:14;27102:34;26985:158;:::o;27149:365::-;27291:3;27312:66;27376:1;27371:3;27312:66;:::i;:::-;27305:73;;27387:93;27476:3;27387:93;:::i;:::-;27505:2;27500:3;27496:12;27489:19;;27149:365;;;:::o;27520:419::-;27686:4;27724:2;27713:9;27709:18;27701:26;;27773:9;27767:4;27763:20;27759:1;27748:9;27744:17;27737:47;27801:131;27927:4;27801:131;:::i;:::-;27793:139;;27520:419;;;:::o;27945:224::-;28085:34;28081:1;28073:6;28069:14;28062:58;28154:7;28149:2;28141:6;28137:15;28130:32;27945:224;:::o;28175:366::-;28317:3;28338:67;28402:2;28397:3;28338:67;:::i;:::-;28331:74;;28414:93;28503:3;28414:93;:::i;:::-;28532:2;28527:3;28523:12;28516:19;;28175:366;;;:::o;28547:419::-;28713:4;28751:2;28740:9;28736:18;28728:26;;28800:9;28794:4;28790:20;28786:1;28775:9;28771:17;28764:47;28828:131;28954:4;28828:131;:::i;:::-;28820:139;;28547:419;;;:::o;28972:222::-;29112:34;29108:1;29100:6;29096:14;29089:58;29181:5;29176:2;29168:6;29164:15;29157:30;28972:222;:::o;29200:366::-;29342:3;29363:67;29427:2;29422:3;29363:67;:::i;:::-;29356:74;;29439:93;29528:3;29439:93;:::i;:::-;29557:2;29552:3;29548:12;29541:19;;29200:366;;;:::o;29572:419::-;29738:4;29776:2;29765:9;29761:18;29753:26;;29825:9;29819:4;29815:20;29811:1;29800:9;29796:17;29789:47;29853:131;29979:4;29853:131;:::i;:::-;29845:139;;29572:419;;;:::o;29997:230::-;30137:34;30133:1;30125:6;30121:14;30114:58;30206:13;30201:2;30193:6;30189:15;30182:38;29997:230;:::o;30233:366::-;30375:3;30396:67;30460:2;30455:3;30396:67;:::i;:::-;30389:74;;30472:93;30561:3;30472:93;:::i;:::-;30590:2;30585:3;30581:12;30574:19;;30233:366;;;:::o;30605:419::-;30771:4;30809:2;30798:9;30794:18;30786:26;;30858:9;30852:4;30848:20;30844:1;30833:9;30829:17;30822:47;30886:131;31012:4;30886:131;:::i;:::-;30878:139;;30605:419;;;:::o;31030:231::-;31170:34;31166:1;31158:6;31154:14;31147:58;31239:14;31234:2;31226:6;31222:15;31215:39;31030:231;:::o;31267:366::-;31409:3;31430:67;31494:2;31489:3;31430:67;:::i;:::-;31423:74;;31506:93;31595:3;31506:93;:::i;:::-;31624:2;31619:3;31615:12;31608:19;;31267:366;;;:::o;31639:419::-;31805:4;31843:2;31832:9;31828:18;31820:26;;31892:9;31886:4;31882:20;31878:1;31867:9;31863:17;31856:47;31920:131;32046:4;31920:131;:::i;:::-;31912:139;;31639:419;;;:::o;32064:243::-;32204:34;32200:1;32192:6;32188:14;32181:58;32273:26;32268:2;32260:6;32256:15;32249:51;32064:243;:::o;32313:366::-;32455:3;32476:67;32540:2;32535:3;32476:67;:::i;:::-;32469:74;;32552:93;32641:3;32552:93;:::i;:::-;32670:2;32665:3;32661:12;32654:19;;32313:366;;;:::o;32685:419::-;32851:4;32889:2;32878:9;32874:18;32866:26;;32938:9;32932:4;32928:20;32924:1;32913:9;32909:17;32902:47;32966:131;33092:4;32966:131;:::i;:::-;32958:139;;32685:419;;;:::o;33110:180::-;33158:77;33155:1;33148:88;33255:4;33252:1;33245:15;33279:4;33276:1;33269:15;33296:185;33336:1;33353:20;33371:1;33353:20;:::i;:::-;33348:25;;33387:20;33405:1;33387:20;:::i;:::-;33382:25;;33426:1;33416:35;;33431:18;;:::i;:::-;33416:35;33473:1;33470;33466:9;33461:14;;33296:185;;;;:::o;33487:225::-;33627:34;33623:1;33615:6;33611:14;33604:58;33696:8;33691:2;33683:6;33679:15;33672:33;33487:225;:::o;33718:366::-;33860:3;33881:67;33945:2;33940:3;33881:67;:::i;:::-;33874:74;;33957:93;34046:3;33957:93;:::i;:::-;34075:2;34070:3;34066:12;34059:19;;33718:366;;;:::o;34090:419::-;34256:4;34294:2;34283:9;34279:18;34271:26;;34343:9;34337:4;34333:20;34329:1;34318:9;34314:17;34307:47;34371:131;34497:4;34371:131;:::i;:::-;34363:139;;34090:419;;;:::o;34515:442::-;34664:4;34702:2;34691:9;34687:18;34679:26;;34715:71;34783:1;34772:9;34768:17;34759:6;34715:71;:::i;:::-;34796:72;34864:2;34853:9;34849:18;34840:6;34796:72;:::i;:::-;34878;34946:2;34935:9;34931:18;34922:6;34878:72;:::i;:::-;34515:442;;;;;;:::o;34963:348::-;35003:7;35026:20;35044:1;35026:20;:::i;:::-;35021:25;;35060:20;35078:1;35060:20;:::i;:::-;35055:25;;35248:1;35180:66;35176:74;35173:1;35170:81;35165:1;35158:9;35151:17;35147:105;35144:131;;;35255:18;;:::i;:::-;35144:131;35303:1;35300;35296:9;35285:20;;34963:348;;;;:::o;35317:194::-;35357:4;35377:20;35395:1;35377:20;:::i;:::-;35372:25;;35411:20;35429:1;35411:20;:::i;:::-;35406:25;;35455:1;35452;35448:9;35440:17;;35479:1;35473:4;35470:11;35467:37;;;35484:18;;:::i;:::-;35467:37;35317:194;;;;:::o;35517:143::-;35574:5;35605:6;35599:13;35590:22;;35621:33;35648:5;35621:33;:::i;:::-;35517:143;;;;:::o;35666:351::-;35736:6;35785:2;35773:9;35764:7;35760:23;35756:32;35753:119;;;35791:79;;:::i;:::-;35753:119;35911:1;35936:64;35992:7;35983:6;35972:9;35968:22;35936:64;:::i;:::-;35926:74;;35882:128;35666:351;;;;:::o;36023:85::-;36068:7;36097:5;36086:16;;36023:85;;;:::o;36114:158::-;36172:9;36205:61;36223:42;36232:32;36258:5;36232:32;:::i;:::-;36223:42;:::i;:::-;36205:61;:::i;:::-;36192:74;;36114:158;;;:::o;36278:147::-;36373:45;36412:5;36373:45;:::i;:::-;36368:3;36361:58;36278:147;;:::o;36431:114::-;36498:6;36532:5;36526:12;36516:22;;36431:114;;;:::o;36551:184::-;36650:11;36684:6;36679:3;36672:19;36724:4;36719:3;36715:14;36700:29;;36551:184;;;;:::o;36741:132::-;36808:4;36831:3;36823:11;;36861:4;36856:3;36852:14;36844:22;;36741:132;;;:::o;36879:108::-;36956:24;36974:5;36956:24;:::i;:::-;36951:3;36944:37;36879:108;;:::o;36993:179::-;37062:10;37083:46;37125:3;37117:6;37083:46;:::i;:::-;37161:4;37156:3;37152:14;37138:28;;36993:179;;;;:::o;37178:113::-;37248:4;37280;37275:3;37271:14;37263:22;;37178:113;;;:::o;37327:732::-;37446:3;37475:54;37523:5;37475:54;:::i;:::-;37545:86;37624:6;37619:3;37545:86;:::i;:::-;37538:93;;37655:56;37705:5;37655:56;:::i;:::-;37734:7;37765:1;37750:284;37775:6;37772:1;37769:13;37750:284;;;37851:6;37845:13;37878:63;37937:3;37922:13;37878:63;:::i;:::-;37871:70;;37964:60;38017:6;37964:60;:::i;:::-;37954:70;;37810:224;37797:1;37794;37790:9;37785:14;;37750:284;;;37754:14;38050:3;38043:10;;37451:608;;;37327:732;;;;:::o;38065:831::-;38328:4;38366:3;38355:9;38351:19;38343:27;;38380:71;38448:1;38437:9;38433:17;38424:6;38380:71;:::i;:::-;38461:80;38537:2;38526:9;38522:18;38513:6;38461:80;:::i;:::-;38588:9;38582:4;38578:20;38573:2;38562:9;38558:18;38551:48;38616:108;38719:4;38710:6;38616:108;:::i;:::-;38608:116;;38734:72;38802:2;38791:9;38787:18;38778:6;38734:72;:::i;:::-;38816:73;38884:3;38873:9;38869:19;38860:6;38816:73;:::i;:::-;38065:831;;;;;;;;:::o;38902:807::-;39151:4;39189:3;39178:9;39174:19;39166:27;;39203:71;39271:1;39260:9;39256:17;39247:6;39203:71;:::i;:::-;39284:72;39352:2;39341:9;39337:18;39328:6;39284:72;:::i;:::-;39366:80;39442:2;39431:9;39427:18;39418:6;39366:80;:::i;:::-;39456;39532:2;39521:9;39517:18;39508:6;39456:80;:::i;:::-;39546:73;39614:3;39603:9;39599:19;39590:6;39546:73;:::i;:::-;39629;39697:3;39686:9;39682:19;39673:6;39629:73;:::i;:::-;38902:807;;;;;;;;;:::o;39715:143::-;39772:5;39803:6;39797:13;39788:22;;39819:33;39846:5;39819:33;:::i;:::-;39715:143;;;;:::o;39864:663::-;39952:6;39960;39968;40017:2;40005:9;39996:7;39992:23;39988:32;39985:119;;;40023:79;;:::i;:::-;39985:119;40143:1;40168:64;40224:7;40215:6;40204:9;40200:22;40168:64;:::i;:::-;40158:74;;40114:128;40281:2;40307:64;40363:7;40354:6;40343:9;40339:22;40307:64;:::i;:::-;40297:74;;40252:129;40420:2;40446:64;40502:7;40493:6;40482:9;40478:22;40446:64;:::i;:::-;40436:74;;40391:129;39864:663;;;;;:::o;40533:720::-;40768:4;40806:3;40795:9;40791:19;40783:27;;40820:79;40896:1;40885:9;40881:17;40872:6;40820:79;:::i;:::-;40946:9;40940:4;40936:20;40931:2;40920:9;40916:18;40909:48;40974:108;41077:4;41068:6;40974:108;:::i;:::-;40966:116;;41092:72;41160:2;41149:9;41145:18;41136:6;41092:72;:::i;:::-;41174;41242:2;41231:9;41227:18;41218:6;41174:72;:::i;:::-;40533:720;;;;;;;:::o;41259:483::-;41430:4;41468:2;41457:9;41453:18;41445:26;;41481:71;41549:1;41538:9;41534:17;41525:6;41481:71;:::i;:::-;41599:9;41593:4;41589:20;41584:2;41573:9;41569:18;41562:48;41627:108;41730:4;41721:6;41627:108;:::i;:::-;41619:116;;41259:483;;;;;:::o

Swarm Source

ipfs://fccce67bb8c00fe71554a8b55c6f4ff483376cf87693052761a38a4e312833da

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

$CLUNA token contract has migrated to a

Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.