ETH Price: $2,613.70 (+0.26%)

Token

MakeMoneyNotFriends (MMNF)
 

Overview

Max Total Supply

1,000,000,000,000,000 MMNF

Holders

8

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
MakeMoneyNotFriends

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// $MMNF - Make Money Not Friends
// This token is built for the real ETH Hustler$

// Website: http://bit.ly/3WudiVD
// Telegram: https://t.me/MMNFverification

// SPDX-License-Identifier: MIT
pragma solidity =0.8.10 >=0.8.10 >=0.8.0 <0.9.0;
pragma experimental ABIEncoderV2;

/* pragma solidity ^0.8.0; */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);
    event ExcludeMultipleAccountsMaxTx(address[] accounts, bool isExcluded);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    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;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

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

    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;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    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;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

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

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

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

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

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

////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)

/* pragma solidity ^0.8.0; */

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

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

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

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

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

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

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

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

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

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

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

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

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

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

////// src/IUniswapV2Factory.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

////// src/IUniswapV2Pair.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

////// src/IUniswapV2Router02.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

contract MakeMoneyNotFriends is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    //Prev Swapping
    bool private swapping;

    address public marketingWallet;
    address public devWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;

    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

    bool public limitsInEffect = true;
    bool public trading = false;
    bool public swapEnabled = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

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

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

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

    event AutoNukeLP();

    event ManualNukeLP();

    constructor() ERC20("MakeMoneyNotFriends", "MMNF") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            //Uni Router V2
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 2;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 2;

        uint256 _sellMarketingFee = 2;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 2;

        uint256 totalSupply = 1_000_000_000_000_000 * 1e18;
        maxTransactionAmount = 20_000_000_000_000 * 1e18; // 2% from total supply
        maxWallet = 20_000_000_000_000 * 1e18; // 2% from total supply
        swapTokensAtAmount = (totalSupply * 100) / 10000; // 1% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        marketingWallet = address(0xC4EA414A40527Ad07A6B93FF9920e39717Cf8B4B);
        devWallet = address(0xef42Dd3000A9064947Be920165b5A0E002852FCD);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableSwapping() external onlyOwner {
        trading = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }

    function excludeFromMaxTransaction(address adr, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[adr] = isEx;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

     function excludeMultipleAccountsFromFees(
        address[] memory accounts,
        bool excluded
    ) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = excluded;
        }

        emit ExcludeMultipleAccountsFromFees(accounts, excluded);
    }
     function excludeMultipleAccountsFroMaxTx(
        address[] memory accounts,
        bool excluded
    ) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedMaxTransactionAmount[accounts[i]] = excluded;
        }

        emit ExcludeMultipleAccountsFromFees(accounts, excluded);
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 11, "Must keep fees at 11% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 11, "Must keep fees at 11% or less");
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    //function updateMarketingWallet(address newMarketingWallet)
    //external
    //onlyOwner
    //{
    //emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
    //marketingWallet = newMarketingWallet;
    //}

    //function updateDevWallet(address newWallet) external onlyOwner {
    //emit devWalletUpdated(newWallet, devWallet);
    //devWallet = newWallet;
    //}

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    //event BoughtEarly(address indexed sniper);

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

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!trading) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        if (
            !swapping &&
            automatedMarketMakerPairs[to] &&
            lpBurnEnabled &&
            block.timestamp >= lastLpBurnTime + lpBurnFrequency &&
            !_isExcludedFromFees[from]
        ) {
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }

    function setAutoLPBurnSettings(
        uint256 _frequencyInSeconds,
        uint256 _percent,
        bool _Enabled
    ) external onlyOwner {
        require(
            _frequencyInSeconds >= 600,
            "cannot set buyback more often than every 10 minutes"
        );
        require(
            _percent <= 1000 && _percent >= 0,
            "Must set auto LP burn percent between 0% and 10%"
        );
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }

    function autoBurnLiquidityPairTokens() internal returns (bool) {
        lastLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(
            10000
        );

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }

    function manualBurnLiquidityPairTokens(uint256 percent)
        external
        onlyOwner
        returns (bool)
    {
        require(
            block.timestamp > lastManualLpBurnTime + manualBurnFrequency,
            "Must wait for cooldown to finish"
        );
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit ManualNukeLP();
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsMaxTx","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableSwapping","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFroMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526019600b556001600c60006101000a81548160ff021916908315150217905550610e10600d55610708600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601360006101000a81548160ff021916908315150217905550348015620000a957600080fd5b506040518060400160405280601381526020017f4d616b654d6f6e65794e6f74467269656e6473000000000000000000000000008152506040518060400160405280600481526020017f4d4d4e460000000000000000000000000000000000000000000000000000000081525081600390805190602001906200012e92919062000b1b565b5080600490805190602001906200014792919062000b1b565b5050506200016a6200015e620005db60201b60201c565b620005e360201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000196816001620006a960201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000216573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023c919062000c35565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ca919062000c35565b6040518363ffffffff1660e01b8152600401620002e992919062000c78565b6020604051808303816000875af115801562000309573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032f919062000c35565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200037760a0516001620006a960201b60201c565b6200038c60a05160016200079360201b60201c565b600060029050600080600290506000600290506000806002905060006d314dc6448d9338c15b0a0000000090506cfc6f7c40458122964d000000006008819055506cfc6f7c40458122964d00000000600a81905550612710606482620003f3919062000cde565b620003ff919062000d6e565b6009819055508660158190555085601681905550846017819055506017546016546015546200042f919062000da6565b6200043b919062000da6565b6014819055508360198190555082601a8190555081601b81905550601b54601a546019546200046b919062000da6565b62000477919062000da6565b60188190555073c4ea414a40527ad07a6b93ff9920e39717cf8b4b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ef42dd3000a9064947be920165b5a0e002852fcd600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005496200053b6200083460201b60201c565b60016200085e60201b60201c565b6200055c3060016200085e60201b60201c565b6200057161dead60016200085e60201b60201c565b62000593620005856200083460201b60201c565b6001620006a960201b60201c565b620005a6306001620006a960201b60201c565b620005bb61dead6001620006a960201b60201c565b620005cd33826200099860201b60201c565b505050505050505062000fc5565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006b9620005db60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006df6200083460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000738576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200072f9062000e64565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200086e620005db60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008946200083460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008ed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008e49062000e64565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200098c919062000ea3565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a029062000f10565b60405180910390fd5b62000a1f6000838362000b1160201b60201c565b806002600082825462000a33919062000da6565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a8a919062000da6565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000af1919062000f43565b60405180910390a362000b0d6000838362000b1660201b60201c565b5050565b505050565b505050565b82805462000b299062000f8f565b90600052602060002090601f01602090048101928262000b4d576000855562000b99565b82601f1062000b6857805160ff191683800117855562000b99565b8280016001018555821562000b99579182015b8281111562000b9857825182559160200191906001019062000b7b565b5b50905062000ba8919062000bac565b5090565b5b8082111562000bc757600081600090555060010162000bad565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bfd8262000bd0565b9050919050565b62000c0f8162000bf0565b811462000c1b57600080fd5b50565b60008151905062000c2f8162000c04565b92915050565b60006020828403121562000c4e5762000c4d62000bcb565b5b600062000c5e8482850162000c1e565b91505092915050565b62000c728162000bf0565b82525050565b600060408201905062000c8f600083018562000c67565b62000c9e602083018462000c67565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ceb8262000ca5565b915062000cf88362000ca5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d345762000d3362000caf565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d7b8262000ca5565b915062000d888362000ca5565b92508262000d9b5762000d9a62000d3f565b5b828204905092915050565b600062000db38262000ca5565b915062000dc08362000ca5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000df85762000df762000caf565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e4c60208362000e03565b915062000e598262000e14565b602082019050919050565b6000602082019050818103600083015262000e7f8162000e3d565b9050919050565b60008115159050919050565b62000e9d8162000e86565b82525050565b600060208201905062000eba600083018462000e92565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ef8601f8362000e03565b915062000f058262000ec0565b602082019050919050565b6000602082019050818103600083015262000f2b8162000ee9565b9050919050565b62000f3d8162000ca5565b82525050565b600060208201905062000f5a600083018462000f32565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fa857607f821691505b6020821081141562000fbf5762000fbe62000f60565b5b50919050565b60805160a051615de56200104d6000396000818161136c01528181611ac1015281816127630152818161281a0152818161284701528181612e8b01528181613f8f01528181614048015261407501526000818161104b01528181612e33015281816141eb015281816142cc015281816142f30152818161438f01526143b60152615de56000f3fe6080604052600436106103b15760003560e01c80638ea5220f116101e7578063c18bc1951161010d578063e884f260116100a0578063f63743421161006f578063f637434214610e03578063f8b45b0514610e2e578063fb5250cb14610e59578063fe72b27a14610e82576103b8565b8063e884f26014610d59578063ec44acf214610d84578063f11a24d314610daf578063f2fde38b14610dda576103b8565b8063d257b34f116100dc578063d257b34f14610c89578063d85ba06314610cc6578063dd62ed3e14610cf1578063e2f4560514610d2e576103b8565b8063c18bc19514610be1578063c492f04614610c0a578063c876d0b914610c33578063c8c8ebe414610c5e576103b8565b80639fccce3211610185578063a9059cbb11610154578063a9059cbb14610b15578063b62496f514610b52578063c024666814610b8f578063c17b5b8c14610bb8576103b8565b80639fccce3214610a57578063a0d82dc514610a82578063a457c2d714610aad578063a4c82a0014610aea576103b8565b806395d89b41116101c157806395d89b41146109ad5780639a7a23d6146109d85780639c3b4fdc14610a015780639ec22c0e14610a2c576103b8565b80638ea5220f1461092e5780639213691314610959578063924de9b714610984576103b8565b8063313ce567116102d7578063715018a61161026a57806375f0a8741161023957806375f0a874146108845780637bce5a04146108af5780638095d564146108da5780638da5cb5b14610903576103b8565b8063715018a6146107f0578063730c188814610807578063751039fc146108305780637571336a1461085b576103b8565b80634fbee193116102a65780634fbee193146107205780636a486a8e1461075d5780636ddd17131461078857806370a08231146107b3576103b8565b8063313ce56714610662578063395093511461068d57806349bd5a5e146106ca5780634a62bb65146106f5576103b8565b8063199ffc721161034f57806323b872dd1161031e57806323b872dd146105a457806327c8f835146105e15780632c3e486c1461060c5780632e82f1a014610637576103b8565b8063199ffc72146104fa5780631a8145bb146105255780631f3fed8f14610550578063203e727e1461057b576103b8565b806310d5de531161038b57806310d5de531461043c5780631694505e1461047957806318160ddd146104a4578063184c16c5146104cf576103b8565b806306fdde03146103bd57806307af33c6146103e8578063095ea7b3146103ff576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610ebf565b6040516103df91906144fe565b60405180910390f35b3480156103f457600080fd5b506103fd610f51565b005b34801561040b57600080fd5b50610426600480360381019061042191906145c8565b61100c565b6040516104339190614623565b60405180910390f35b34801561044857600080fd5b50610463600480360381019061045e919061463e565b61102a565b6040516104709190614623565b60405180910390f35b34801561048557600080fd5b5061048e611049565b60405161049b91906146ca565b60405180910390f35b3480156104b057600080fd5b506104b961106d565b6040516104c691906146f4565b60405180910390f35b3480156104db57600080fd5b506104e4611077565b6040516104f191906146f4565b60405180910390f35b34801561050657600080fd5b5061050f61107d565b60405161051c91906146f4565b60405180910390f35b34801561053157600080fd5b5061053a611083565b60405161054791906146f4565b60405180910390f35b34801561055c57600080fd5b50610565611089565b60405161057291906146f4565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d919061470f565b61108f565b005b3480156105b057600080fd5b506105cb60048036038101906105c6919061473c565b61119e565b6040516105d89190614623565b60405180910390f35b3480156105ed57600080fd5b506105f6611296565b604051610603919061479e565b60405180910390f35b34801561061857600080fd5b5061062161129c565b60405161062e91906146f4565b60405180910390f35b34801561064357600080fd5b5061064c6112a2565b6040516106599190614623565b60405180910390f35b34801561066e57600080fd5b506106776112b5565b60405161068491906147d5565b60405180910390f35b34801561069957600080fd5b506106b460048036038101906106af91906145c8565b6112be565b6040516106c19190614623565b60405180910390f35b3480156106d657600080fd5b506106df61136a565b6040516106ec919061479e565b60405180910390f35b34801561070157600080fd5b5061070a61138e565b6040516107179190614623565b60405180910390f35b34801561072c57600080fd5b506107476004803603810190610742919061463e565b6113a1565b6040516107549190614623565b60405180910390f35b34801561076957600080fd5b506107726113f7565b60405161077f91906146f4565b60405180910390f35b34801561079457600080fd5b5061079d6113fd565b6040516107aa9190614623565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d5919061463e565b611410565b6040516107e791906146f4565b60405180910390f35b3480156107fc57600080fd5b50610805611458565b005b34801561081357600080fd5b5061082e6004803603810190610829919061481c565b6114e0565b005b34801561083c57600080fd5b50610845611620565b6040516108529190614623565b60405180910390f35b34801561086757600080fd5b50610882600480360381019061087d919061486f565b6116c0565b005b34801561089057600080fd5b50610899611797565b6040516108a6919061479e565b60405180910390f35b3480156108bb57600080fd5b506108c46117bd565b6040516108d191906146f4565b60405180910390f35b3480156108e657600080fd5b5061090160048036038101906108fc91906148af565b6117c3565b005b34801561090f57600080fd5b506109186118c2565b604051610925919061479e565b60405180910390f35b34801561093a57600080fd5b506109436118ec565b604051610950919061479e565b60405180910390f35b34801561096557600080fd5b5061096e611912565b60405161097b91906146f4565b60405180910390f35b34801561099057600080fd5b506109ab60048036038101906109a69190614902565b611918565b005b3480156109b957600080fd5b506109c26119b1565b6040516109cf91906144fe565b60405180910390f35b3480156109e457600080fd5b506109ff60048036038101906109fa919061486f565b611a43565b005b348015610a0d57600080fd5b50610a16611b5c565b604051610a2391906146f4565b60405180910390f35b348015610a3857600080fd5b50610a41611b62565b604051610a4e91906146f4565b60405180910390f35b348015610a6357600080fd5b50610a6c611b68565b604051610a7991906146f4565b60405180910390f35b348015610a8e57600080fd5b50610a97611b6e565b604051610aa491906146f4565b60405180910390f35b348015610ab957600080fd5b50610ad46004803603810190610acf91906145c8565b611b74565b604051610ae19190614623565b60405180910390f35b348015610af657600080fd5b50610aff611c5f565b604051610b0c91906146f4565b60405180910390f35b348015610b2157600080fd5b50610b3c6004803603810190610b3791906145c8565b611c65565b604051610b499190614623565b60405180910390f35b348015610b5e57600080fd5b50610b796004803603810190610b74919061463e565b611c83565b604051610b869190614623565b60405180910390f35b348015610b9b57600080fd5b50610bb66004803603810190610bb1919061486f565b611ca3565b005b348015610bc457600080fd5b50610bdf6004803603810190610bda91906148af565b611dc8565b005b348015610bed57600080fd5b50610c086004803603810190610c03919061470f565b611ec7565b005b348015610c1657600080fd5b50610c316004803603810190610c2c9190614a77565b611fd6565b005b348015610c3f57600080fd5b50610c48612120565b604051610c559190614623565b60405180910390f35b348015610c6a57600080fd5b50610c73612133565b604051610c8091906146f4565b60405180910390f35b348015610c9557600080fd5b50610cb06004803603810190610cab919061470f565b612139565b604051610cbd9190614623565b60405180910390f35b348015610cd257600080fd5b50610cdb61228e565b604051610ce891906146f4565b60405180910390f35b348015610cfd57600080fd5b50610d186004803603810190610d139190614ad3565b612294565b604051610d2591906146f4565b60405180910390f35b348015610d3a57600080fd5b50610d4361231b565b604051610d5091906146f4565b60405180910390f35b348015610d6557600080fd5b50610d6e612321565b604051610d7b9190614623565b60405180910390f35b348015610d9057600080fd5b50610d996123c1565b604051610da69190614623565b60405180910390f35b348015610dbb57600080fd5b50610dc46123d4565b604051610dd191906146f4565b60405180910390f35b348015610de657600080fd5b50610e016004803603810190610dfc919061463e565b6123da565b005b348015610e0f57600080fd5b50610e186124d2565b604051610e2591906146f4565b60405180910390f35b348015610e3a57600080fd5b50610e436124d8565b604051610e5091906146f4565b60405180910390f35b348015610e6557600080fd5b50610e806004803603810190610e7b9190614a77565b6124de565b005b348015610e8e57600080fd5b50610ea96004803603810190610ea4919061470f565b612628565b604051610eb69190614623565b60405180910390f35b606060038054610ece90614b42565b80601f0160208091040260200160405190810160405280929190818152602001828054610efa90614b42565b8015610f475780601f10610f1c57610100808354040283529160200191610f47565b820191906000526020600020905b815481529060010190602001808311610f2a57829003601f168201915b5050505050905090565b610f59612900565b73ffffffffffffffffffffffffffffffffffffffff16610f776118c2565b73ffffffffffffffffffffffffffffffffffffffff1614610fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc490614bc0565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000611020611019612900565b8484612908565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600f5481565b600b5481565b601d5481565b601c5481565b611097612900565b73ffffffffffffffffffffffffffffffffffffffff166110b56118c2565b73ffffffffffffffffffffffffffffffffffffffff161461110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110290614bc0565b60405180910390fd5b670de0b6b3a76400006103e8600161112161106d565b61112b9190614c0f565b6111359190614c98565b61113f9190614c98565b811015611181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117890614d3b565b60405180910390fd5b670de0b6b3a7640000816111959190614c0f565b60088190555050565b60006111ab848484612ad3565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111f6612900565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126d90614dcd565b60405180910390fd5b61128a85611282612900565b858403612908565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60006113606112cb612900565b8484600160006112d9612900565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461135b9190614ded565b612908565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611460612900565b73ffffffffffffffffffffffffffffffffffffffff1661147e6118c2565b73ffffffffffffffffffffffffffffffffffffffff16146114d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cb90614bc0565b60405180910390fd5b6114de600061386b565b565b6114e8612900565b73ffffffffffffffffffffffffffffffffffffffff166115066118c2565b73ffffffffffffffffffffffffffffffffffffffff161461155c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155390614bc0565b60405180910390fd5b6102588310156115a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159890614eb5565b60405180910390fd5b6103e882111580156115b4575060008210155b6115f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ea90614f47565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b600061162a612900565b73ffffffffffffffffffffffffffffffffffffffff166116486118c2565b73ffffffffffffffffffffffffffffffffffffffff161461169e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169590614bc0565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b6116c8612900565b73ffffffffffffffffffffffffffffffffffffffff166116e66118c2565b73ffffffffffffffffffffffffffffffffffffffff161461173c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173390614bc0565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6117cb612900565b73ffffffffffffffffffffffffffffffffffffffff166117e96118c2565b73ffffffffffffffffffffffffffffffffffffffff161461183f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183690614bc0565b60405180910390fd5b8260158190555081601681905550806017819055506017546016546015546118679190614ded565b6118719190614ded565b601481905550600b60145411156118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b490614fb3565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b611920612900565b73ffffffffffffffffffffffffffffffffffffffff1661193e6118c2565b73ffffffffffffffffffffffffffffffffffffffff1614611994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198b90614bc0565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b6060600480546119c090614b42565b80601f01602080910402602001604051908101604052809291908181526020018280546119ec90614b42565b8015611a395780601f10611a0e57610100808354040283529160200191611a39565b820191906000526020600020905b815481529060010190602001808311611a1c57829003601f168201915b5050505050905090565b611a4b612900565b73ffffffffffffffffffffffffffffffffffffffff16611a696118c2565b73ffffffffffffffffffffffffffffffffffffffff1614611abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab690614bc0565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4590615045565b60405180910390fd5b611b588282613931565b5050565b60175481565b60105481565b601e5481565b601b5481565b60008060016000611b83612900565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c37906150d7565b60405180910390fd5b611c54611c4b612900565b85858403612908565b600191505092915050565b600e5481565b6000611c79611c72612900565b8484612ad3565b6001905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b611cab612900565b73ffffffffffffffffffffffffffffffffffffffff16611cc96118c2565b73ffffffffffffffffffffffffffffffffffffffff1614611d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1690614bc0565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611dbc9190614623565b60405180910390a25050565b611dd0612900565b73ffffffffffffffffffffffffffffffffffffffff16611dee6118c2565b73ffffffffffffffffffffffffffffffffffffffff1614611e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3b90614bc0565b60405180910390fd5b8260198190555081601a8190555080601b81905550601b54601a54601954611e6c9190614ded565b611e769190614ded565b601881905550600b6018541115611ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb990614fb3565b60405180910390fd5b505050565b611ecf612900565b73ffffffffffffffffffffffffffffffffffffffff16611eed6118c2565b73ffffffffffffffffffffffffffffffffffffffff1614611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614bc0565b60405180910390fd5b670de0b6b3a76400006103e86005611f5961106d565b611f639190614c0f565b611f6d9190614c98565b611f779190614c98565b811015611fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb090615169565b60405180910390fd5b670de0b6b3a764000081611fcd9190614c0f565b600a8190555050565b611fde612900565b73ffffffffffffffffffffffffffffffffffffffff16611ffc6118c2565b73ffffffffffffffffffffffffffffffffffffffff1614612052576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204990614bc0565b60405180910390fd5b60005b82518110156120e25781601f600085848151811061207657612075615189565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806120da906151b8565b915050612055565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b3582826040516121149291906152bf565b60405180910390a15050565b601360009054906101000a900460ff1681565b60085481565b6000612143612900565b73ffffffffffffffffffffffffffffffffffffffff166121616118c2565b73ffffffffffffffffffffffffffffffffffffffff16146121b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ae90614bc0565b60405180910390fd5b620186a060016121c561106d565b6121cf9190614c0f565b6121d99190614c98565b82101561221b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221290615361565b60405180910390fd5b6103e8600561222861106d565b6122329190614c0f565b61223c9190614c98565b82111561227e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612275906153f3565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061232b612900565b73ffffffffffffffffffffffffffffffffffffffff166123496118c2565b73ffffffffffffffffffffffffffffffffffffffff161461239f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239690614bc0565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b601160019054906101000a900460ff1681565b60165481565b6123e2612900565b73ffffffffffffffffffffffffffffffffffffffff166124006118c2565b73ffffffffffffffffffffffffffffffffffffffff1614612456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244d90614bc0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bd90615485565b60405180910390fd5b6124cf8161386b565b50565b601a5481565b600a5481565b6124e6612900565b73ffffffffffffffffffffffffffffffffffffffff166125046118c2565b73ffffffffffffffffffffffffffffffffffffffff161461255a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255190614bc0565b60405180910390fd5b60005b82518110156125ea57816020600085848151811061257e5761257d615189565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806125e2906151b8565b91505061255d565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35828260405161261c9291906152bf565b60405180910390a15050565b6000612632612900565b73ffffffffffffffffffffffffffffffffffffffff166126506118c2565b73ffffffffffffffffffffffffffffffffffffffff16146126a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269d90614bc0565b60405180910390fd5b600f546010546126b69190614ded565b42116126f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ee906154f1565b60405180910390fd5b6103e882111561273c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273390615583565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161279e919061479e565b602060405180830381865afa1580156127bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127df91906155b8565b9050600061280a6127106127fc86856139d290919063ffffffff16565b6139e890919063ffffffff16565b90506000811115612843576128427f000000000000000000000000000000000000000000000000000000000000000061dead836139fe565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156128b057600080fd5b505af11580156128c4573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296f90615657565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129df906156e9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ac691906146f4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3a9061577b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa9061580d565b60405180910390fd5b6000811415612bcd57612bc8838360006139fe565b613866565b601160009054906101000a900460ff161561329057612bea6118c2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c585750612c286118c2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c915750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ccb575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ce45750600560149054906101000a900460ff16155b1561328f57601160019054906101000a900460ff16612dde57601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d9e5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd490615879565b60405180910390fd5b5b601360009054906101000a900460ff1615612fa657612dfb6118c2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612e8257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612eda57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612fa55743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5790615931565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130495750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130f057600854811115613093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308a906159c3565b60405180910390fd5b600a5461309f83611410565b826130aa9190614ded565b11156130eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e290615a2f565b60405180910390fd5b61328e565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131935750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131e2576008548111156131dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d490615ac1565b60405180910390fd5b61328d565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661328c57600a5461323f83611410565b8261324a9190614ded565b111561328b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328290615a2f565b60405180910390fd5b5b5b5b5b5b600061329b30611410565b9050600060095482101590508080156132c05750601160029054906101000a900460ff165b80156132d95750600560149054906101000a900460ff16155b801561332f5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133855750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133db5750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561341f576001600560146101000a81548160ff021916908315150217905550613403613c7f565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156134855750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561349d5750600c60009054906101000a900460ff165b80156134b85750600d54600e546134b49190614ded565b4210155b801561350e5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561351d5761351b613f66565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135d35750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135dd57600090505b6000811561385657602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561364057506000601854115b1561370d5761366d606461365f601854886139d290919063ffffffff16565b6139e890919063ffffffff16565b9050601854601a54826136809190614c0f565b61368a9190614c98565b601d600082825461369b9190614ded565b92505081905550601854601b54826136b39190614c0f565b6136bd9190614c98565b601e60008282546136ce9190614ded565b92505081905550601854601954826136e69190614c0f565b6136f09190614c98565b601c60008282546137019190614ded565b92505081905550613832565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561376857506000601454115b15613831576137956064613787601454886139d290919063ffffffff16565b6139e890919063ffffffff16565b9050601454601654826137a89190614c0f565b6137b29190614c98565b601d60008282546137c39190614ded565b92505081905550601454601754826137db9190614c0f565b6137e59190614c98565b601e60008282546137f69190614ded565b925050819055506014546015548261380e9190614c0f565b6138189190614c98565b601c60008282546138299190614ded565b925050819055505b5b6000811115613847576138468730836139fe565b5b80856138539190615ae1565b94505b6138618787876139fe565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081836139e09190614c0f565b905092915050565b600081836139f69190614c98565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a659061577b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ad59061580d565b60405180910390fd5b613ae983838361412c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b6690615b87565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613c029190614ded565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613c6691906146f4565b60405180910390a3613c79848484614131565b50505050565b6000613c8a30611410565b90506000601e54601c54601d54613ca19190614ded565b613cab9190614ded565b9050600080831480613cbd5750600082145b15613cca57505050613f64565b6014600954613cd99190614c0f565b831115613cf2576014600954613cef9190614c0f565b92505b6000600283601d5486613d059190614c0f565b613d0f9190614c98565b613d199190614c98565b90506000613d30828661413690919063ffffffff16565b90506000479050613d408261414c565b6000613d55824761413690919063ffffffff16565b90506000613d8087613d72601c54856139d290919063ffffffff16565b6139e890919063ffffffff16565b90506000613dab88613d9d601e54866139d290919063ffffffff16565b6139e890919063ffffffff16565b90506000818385613dbc9190615ae1565b613dc69190615ae1565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613e2690615bd8565b60006040518083038185875af1925050503d8060008114613e63576040519150601f19603f3d011682016040523d82523d6000602084013e613e68565b606091505b505080985050600087118015613e7e5750600081115b15613ecb57613e8d8782614389565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d54604051613ec293929190615bed565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613f1190615bd8565b60006040518083038185875af1925050503d8060008114613f4e576040519150601f19603f3d011682016040523d82523d6000602084013e613f53565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401613fca919061479e565b602060405180830381865afa158015613fe7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061400b91906155b8565b9050600061403861271061402a600b54856139d290919063ffffffff16565b6139e890919063ffffffff16565b90506000811115614071576140707f000000000000000000000000000000000000000000000000000000000000000061dead836139fe565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156140de57600080fd5b505af11580156140f2573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b600081836141449190615ae1565b905092915050565b6000600267ffffffffffffffff81111561416957614168614934565b5b6040519080825280602002602001820160405280156141975781602001602082028036833780820191505090505b50905030816000815181106141af576141ae615189565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614254573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142789190615c39565b8160018151811061428c5761428b615189565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506142f1307f000000000000000000000000000000000000000000000000000000000000000084612908565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614353959493929190615ca1565b600060405180830381600087803b15801561436d57600080fd5b505af1158015614381573d6000803e3d6000fd5b505050505050565b6143b4307f000000000000000000000000000000000000000000000000000000000000000084612908565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161441b96959493929190615cfb565b60606040518083038185885af1158015614439573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061445e9190615d5c565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561449f578082015181840152602081019050614484565b838111156144ae576000848401525b50505050565b6000601f19601f8301169050919050565b60006144d082614465565b6144da8185614470565b93506144ea818560208601614481565b6144f3816144b4565b840191505092915050565b6000602082019050818103600083015261451881846144c5565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061455f82614534565b9050919050565b61456f81614554565b811461457a57600080fd5b50565b60008135905061458c81614566565b92915050565b6000819050919050565b6145a581614592565b81146145b057600080fd5b50565b6000813590506145c28161459c565b92915050565b600080604083850312156145df576145de61452a565b5b60006145ed8582860161457d565b92505060206145fe858286016145b3565b9150509250929050565b60008115159050919050565b61461d81614608565b82525050565b60006020820190506146386000830184614614565b92915050565b6000602082840312156146545761465361452a565b5b60006146628482850161457d565b91505092915050565b6000819050919050565b600061469061468b61468684614534565b61466b565b614534565b9050919050565b60006146a282614675565b9050919050565b60006146b482614697565b9050919050565b6146c4816146a9565b82525050565b60006020820190506146df60008301846146bb565b92915050565b6146ee81614592565b82525050565b600060208201905061470960008301846146e5565b92915050565b6000602082840312156147255761472461452a565b5b6000614733848285016145b3565b91505092915050565b6000806000606084860312156147555761475461452a565b5b60006147638682870161457d565b93505060206147748682870161457d565b9250506040614785868287016145b3565b9150509250925092565b61479881614554565b82525050565b60006020820190506147b3600083018461478f565b92915050565b600060ff82169050919050565b6147cf816147b9565b82525050565b60006020820190506147ea60008301846147c6565b92915050565b6147f981614608565b811461480457600080fd5b50565b600081359050614816816147f0565b92915050565b6000806000606084860312156148355761483461452a565b5b6000614843868287016145b3565b9350506020614854868287016145b3565b925050604061486586828701614807565b9150509250925092565b600080604083850312156148865761488561452a565b5b60006148948582860161457d565b92505060206148a585828601614807565b9150509250929050565b6000806000606084860312156148c8576148c761452a565b5b60006148d6868287016145b3565b93505060206148e7868287016145b3565b92505060406148f8868287016145b3565b9150509250925092565b6000602082840312156149185761491761452a565b5b600061492684828501614807565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61496c826144b4565b810181811067ffffffffffffffff8211171561498b5761498a614934565b5b80604052505050565b600061499e614520565b90506149aa8282614963565b919050565b600067ffffffffffffffff8211156149ca576149c9614934565b5b602082029050602081019050919050565b600080fd5b60006149f36149ee846149af565b614994565b90508083825260208201905060208402830185811115614a1657614a156149db565b5b835b81811015614a3f5780614a2b888261457d565b845260208401935050602081019050614a18565b5050509392505050565b600082601f830112614a5e57614a5d61492f565b5b8135614a6e8482602086016149e0565b91505092915050565b60008060408385031215614a8e57614a8d61452a565b5b600083013567ffffffffffffffff811115614aac57614aab61452f565b5b614ab885828601614a49565b9250506020614ac985828601614807565b9150509250929050565b60008060408385031215614aea57614ae961452a565b5b6000614af88582860161457d565b9250506020614b098582860161457d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614b5a57607f821691505b60208210811415614b6e57614b6d614b13565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614baa602083614470565b9150614bb582614b74565b602082019050919050565b60006020820190508181036000830152614bd981614b9d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614c1a82614592565b9150614c2583614592565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c5e57614c5d614be0565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ca382614592565b9150614cae83614592565b925082614cbe57614cbd614c69565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614d25602f83614470565b9150614d3082614cc9565b604082019050919050565b60006020820190508181036000830152614d5481614d18565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614db7602883614470565b9150614dc282614d5b565b604082019050919050565b60006020820190508181036000830152614de681614daa565b9050919050565b6000614df882614592565b9150614e0383614592565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e3857614e37614be0565b5b828201905092915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614e9f603383614470565b9150614eaa82614e43565b604082019050919050565b60006020820190508181036000830152614ece81614e92565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614f31603083614470565b9150614f3c82614ed5565b604082019050919050565b60006020820190508181036000830152614f6081614f24565b9050919050565b7f4d757374206b656570206665657320617420313125206f72206c657373000000600082015250565b6000614f9d601d83614470565b9150614fa882614f67565b602082019050919050565b60006020820190508181036000830152614fcc81614f90565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061502f603983614470565b915061503a82614fd3565b604082019050919050565b6000602082019050818103600083015261505e81615022565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006150c1602583614470565b91506150cc82615065565b604082019050919050565b600060208201905081810360008301526150f0816150b4565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000615153602483614470565b915061515e826150f7565b604082019050919050565b6000602082019050818103600083015261518281615146565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006151c382614592565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151f6576151f5614be0565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61523681614554565b82525050565b6000615248838361522d565b60208301905092915050565b6000602082019050919050565b600061526c82615201565b615276818561520c565b93506152818361521d565b8060005b838110156152b2578151615299888261523c565b97506152a483615254565b925050600181019050615285565b5085935050505092915050565b600060408201905081810360008301526152d98185615261565b90506152e86020830184614614565b9392505050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061534b603583614470565b9150615356826152ef565b604082019050919050565b6000602082019050818103600083015261537a8161533e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006153dd603483614470565b91506153e882615381565b604082019050919050565b6000602082019050818103600083015261540c816153d0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061546f602683614470565b915061547a82615413565b604082019050919050565b6000602082019050818103600083015261549e81615462565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b60006154db602083614470565b91506154e6826154a5565b602082019050919050565b6000602082019050818103600083015261550a816154ce565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b600061556d602a83614470565b915061557882615511565b604082019050919050565b6000602082019050818103600083015261559c81615560565b9050919050565b6000815190506155b28161459c565b92915050565b6000602082840312156155ce576155cd61452a565b5b60006155dc848285016155a3565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615641602483614470565b915061564c826155e5565b604082019050919050565b6000602082019050818103600083015261567081615634565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006156d3602283614470565b91506156de82615677565b604082019050919050565b60006020820190508181036000830152615702816156c6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615765602583614470565b915061577082615709565b604082019050919050565b6000602082019050818103600083015261579481615758565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006157f7602383614470565b91506158028261579b565b604082019050919050565b60006020820190508181036000830152615826816157ea565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615863601683614470565b915061586e8261582d565b602082019050919050565b6000602082019050818103600083015261589281615856565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061591b604983614470565b915061592682615899565b606082019050919050565b6000602082019050818103600083015261594a8161590e565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006159ad603583614470565b91506159b882615951565b604082019050919050565b600060208201905081810360008301526159dc816159a0565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615a19601383614470565b9150615a24826159e3565b602082019050919050565b60006020820190508181036000830152615a4881615a0c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615aab603683614470565b9150615ab682615a4f565b604082019050919050565b60006020820190508181036000830152615ada81615a9e565b9050919050565b6000615aec82614592565b9150615af783614592565b925082821015615b0a57615b09614be0565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615b71602683614470565b9150615b7c82615b15565b604082019050919050565b60006020820190508181036000830152615ba081615b64565b9050919050565b600081905092915050565b50565b6000615bc2600083615ba7565b9150615bcd82615bb2565b600082019050919050565b6000615be382615bb5565b9150819050919050565b6000606082019050615c0260008301866146e5565b615c0f60208301856146e5565b615c1c60408301846146e5565b949350505050565b600081519050615c3381614566565b92915050565b600060208284031215615c4f57615c4e61452a565b5b6000615c5d84828501615c24565b91505092915050565b6000819050919050565b6000615c8b615c86615c8184615c66565b61466b565b614592565b9050919050565b615c9b81615c70565b82525050565b600060a082019050615cb660008301886146e5565b615cc36020830187615c92565b8181036040830152615cd58186615261565b9050615ce4606083018561478f565b615cf160808301846146e5565b9695505050505050565b600060c082019050615d10600083018961478f565b615d1d60208301886146e5565b615d2a6040830187615c92565b615d376060830186615c92565b615d44608083018561478f565b615d5160a08301846146e5565b979650505050505050565b600080600060608486031215615d7557615d7461452a565b5b6000615d83868287016155a3565b9350506020615d94868287016155a3565b9250506040615da5868287016155a3565b915050925092509256fea2646970667358221220cbd2522883bbb4baa5a583c1fd9e611f7e1f814dfe7d789ba36eacf5b8921d6464736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103b15760003560e01c80638ea5220f116101e7578063c18bc1951161010d578063e884f260116100a0578063f63743421161006f578063f637434214610e03578063f8b45b0514610e2e578063fb5250cb14610e59578063fe72b27a14610e82576103b8565b8063e884f26014610d59578063ec44acf214610d84578063f11a24d314610daf578063f2fde38b14610dda576103b8565b8063d257b34f116100dc578063d257b34f14610c89578063d85ba06314610cc6578063dd62ed3e14610cf1578063e2f4560514610d2e576103b8565b8063c18bc19514610be1578063c492f04614610c0a578063c876d0b914610c33578063c8c8ebe414610c5e576103b8565b80639fccce3211610185578063a9059cbb11610154578063a9059cbb14610b15578063b62496f514610b52578063c024666814610b8f578063c17b5b8c14610bb8576103b8565b80639fccce3214610a57578063a0d82dc514610a82578063a457c2d714610aad578063a4c82a0014610aea576103b8565b806395d89b41116101c157806395d89b41146109ad5780639a7a23d6146109d85780639c3b4fdc14610a015780639ec22c0e14610a2c576103b8565b80638ea5220f1461092e5780639213691314610959578063924de9b714610984576103b8565b8063313ce567116102d7578063715018a61161026a57806375f0a8741161023957806375f0a874146108845780637bce5a04146108af5780638095d564146108da5780638da5cb5b14610903576103b8565b8063715018a6146107f0578063730c188814610807578063751039fc146108305780637571336a1461085b576103b8565b80634fbee193116102a65780634fbee193146107205780636a486a8e1461075d5780636ddd17131461078857806370a08231146107b3576103b8565b8063313ce56714610662578063395093511461068d57806349bd5a5e146106ca5780634a62bb65146106f5576103b8565b8063199ffc721161034f57806323b872dd1161031e57806323b872dd146105a457806327c8f835146105e15780632c3e486c1461060c5780632e82f1a014610637576103b8565b8063199ffc72146104fa5780631a8145bb146105255780631f3fed8f14610550578063203e727e1461057b576103b8565b806310d5de531161038b57806310d5de531461043c5780631694505e1461047957806318160ddd146104a4578063184c16c5146104cf576103b8565b806306fdde03146103bd57806307af33c6146103e8578063095ea7b3146103ff576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610ebf565b6040516103df91906144fe565b60405180910390f35b3480156103f457600080fd5b506103fd610f51565b005b34801561040b57600080fd5b50610426600480360381019061042191906145c8565b61100c565b6040516104339190614623565b60405180910390f35b34801561044857600080fd5b50610463600480360381019061045e919061463e565b61102a565b6040516104709190614623565b60405180910390f35b34801561048557600080fd5b5061048e611049565b60405161049b91906146ca565b60405180910390f35b3480156104b057600080fd5b506104b961106d565b6040516104c691906146f4565b60405180910390f35b3480156104db57600080fd5b506104e4611077565b6040516104f191906146f4565b60405180910390f35b34801561050657600080fd5b5061050f61107d565b60405161051c91906146f4565b60405180910390f35b34801561053157600080fd5b5061053a611083565b60405161054791906146f4565b60405180910390f35b34801561055c57600080fd5b50610565611089565b60405161057291906146f4565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d919061470f565b61108f565b005b3480156105b057600080fd5b506105cb60048036038101906105c6919061473c565b61119e565b6040516105d89190614623565b60405180910390f35b3480156105ed57600080fd5b506105f6611296565b604051610603919061479e565b60405180910390f35b34801561061857600080fd5b5061062161129c565b60405161062e91906146f4565b60405180910390f35b34801561064357600080fd5b5061064c6112a2565b6040516106599190614623565b60405180910390f35b34801561066e57600080fd5b506106776112b5565b60405161068491906147d5565b60405180910390f35b34801561069957600080fd5b506106b460048036038101906106af91906145c8565b6112be565b6040516106c19190614623565b60405180910390f35b3480156106d657600080fd5b506106df61136a565b6040516106ec919061479e565b60405180910390f35b34801561070157600080fd5b5061070a61138e565b6040516107179190614623565b60405180910390f35b34801561072c57600080fd5b506107476004803603810190610742919061463e565b6113a1565b6040516107549190614623565b60405180910390f35b34801561076957600080fd5b506107726113f7565b60405161077f91906146f4565b60405180910390f35b34801561079457600080fd5b5061079d6113fd565b6040516107aa9190614623565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d5919061463e565b611410565b6040516107e791906146f4565b60405180910390f35b3480156107fc57600080fd5b50610805611458565b005b34801561081357600080fd5b5061082e6004803603810190610829919061481c565b6114e0565b005b34801561083c57600080fd5b50610845611620565b6040516108529190614623565b60405180910390f35b34801561086757600080fd5b50610882600480360381019061087d919061486f565b6116c0565b005b34801561089057600080fd5b50610899611797565b6040516108a6919061479e565b60405180910390f35b3480156108bb57600080fd5b506108c46117bd565b6040516108d191906146f4565b60405180910390f35b3480156108e657600080fd5b5061090160048036038101906108fc91906148af565b6117c3565b005b34801561090f57600080fd5b506109186118c2565b604051610925919061479e565b60405180910390f35b34801561093a57600080fd5b506109436118ec565b604051610950919061479e565b60405180910390f35b34801561096557600080fd5b5061096e611912565b60405161097b91906146f4565b60405180910390f35b34801561099057600080fd5b506109ab60048036038101906109a69190614902565b611918565b005b3480156109b957600080fd5b506109c26119b1565b6040516109cf91906144fe565b60405180910390f35b3480156109e457600080fd5b506109ff60048036038101906109fa919061486f565b611a43565b005b348015610a0d57600080fd5b50610a16611b5c565b604051610a2391906146f4565b60405180910390f35b348015610a3857600080fd5b50610a41611b62565b604051610a4e91906146f4565b60405180910390f35b348015610a6357600080fd5b50610a6c611b68565b604051610a7991906146f4565b60405180910390f35b348015610a8e57600080fd5b50610a97611b6e565b604051610aa491906146f4565b60405180910390f35b348015610ab957600080fd5b50610ad46004803603810190610acf91906145c8565b611b74565b604051610ae19190614623565b60405180910390f35b348015610af657600080fd5b50610aff611c5f565b604051610b0c91906146f4565b60405180910390f35b348015610b2157600080fd5b50610b3c6004803603810190610b3791906145c8565b611c65565b604051610b499190614623565b60405180910390f35b348015610b5e57600080fd5b50610b796004803603810190610b74919061463e565b611c83565b604051610b869190614623565b60405180910390f35b348015610b9b57600080fd5b50610bb66004803603810190610bb1919061486f565b611ca3565b005b348015610bc457600080fd5b50610bdf6004803603810190610bda91906148af565b611dc8565b005b348015610bed57600080fd5b50610c086004803603810190610c03919061470f565b611ec7565b005b348015610c1657600080fd5b50610c316004803603810190610c2c9190614a77565b611fd6565b005b348015610c3f57600080fd5b50610c48612120565b604051610c559190614623565b60405180910390f35b348015610c6a57600080fd5b50610c73612133565b604051610c8091906146f4565b60405180910390f35b348015610c9557600080fd5b50610cb06004803603810190610cab919061470f565b612139565b604051610cbd9190614623565b60405180910390f35b348015610cd257600080fd5b50610cdb61228e565b604051610ce891906146f4565b60405180910390f35b348015610cfd57600080fd5b50610d186004803603810190610d139190614ad3565b612294565b604051610d2591906146f4565b60405180910390f35b348015610d3a57600080fd5b50610d4361231b565b604051610d5091906146f4565b60405180910390f35b348015610d6557600080fd5b50610d6e612321565b604051610d7b9190614623565b60405180910390f35b348015610d9057600080fd5b50610d996123c1565b604051610da69190614623565b60405180910390f35b348015610dbb57600080fd5b50610dc46123d4565b604051610dd191906146f4565b60405180910390f35b348015610de657600080fd5b50610e016004803603810190610dfc919061463e565b6123da565b005b348015610e0f57600080fd5b50610e186124d2565b604051610e2591906146f4565b60405180910390f35b348015610e3a57600080fd5b50610e436124d8565b604051610e5091906146f4565b60405180910390f35b348015610e6557600080fd5b50610e806004803603810190610e7b9190614a77565b6124de565b005b348015610e8e57600080fd5b50610ea96004803603810190610ea4919061470f565b612628565b604051610eb69190614623565b60405180910390f35b606060038054610ece90614b42565b80601f0160208091040260200160405190810160405280929190818152602001828054610efa90614b42565b8015610f475780601f10610f1c57610100808354040283529160200191610f47565b820191906000526020600020905b815481529060010190602001808311610f2a57829003601f168201915b5050505050905090565b610f59612900565b73ffffffffffffffffffffffffffffffffffffffff16610f776118c2565b73ffffffffffffffffffffffffffffffffffffffff1614610fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc490614bc0565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000611020611019612900565b8484612908565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600f5481565b600b5481565b601d5481565b601c5481565b611097612900565b73ffffffffffffffffffffffffffffffffffffffff166110b56118c2565b73ffffffffffffffffffffffffffffffffffffffff161461110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110290614bc0565b60405180910390fd5b670de0b6b3a76400006103e8600161112161106d565b61112b9190614c0f565b6111359190614c98565b61113f9190614c98565b811015611181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117890614d3b565b60405180910390fd5b670de0b6b3a7640000816111959190614c0f565b60088190555050565b60006111ab848484612ad3565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111f6612900565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126d90614dcd565b60405180910390fd5b61128a85611282612900565b858403612908565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60006113606112cb612900565b8484600160006112d9612900565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461135b9190614ded565b612908565b6001905092915050565b7f000000000000000000000000fd3b8e7e3e0df5d2e714d80f161a1a9a2f26593581565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611460612900565b73ffffffffffffffffffffffffffffffffffffffff1661147e6118c2565b73ffffffffffffffffffffffffffffffffffffffff16146114d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cb90614bc0565b60405180910390fd5b6114de600061386b565b565b6114e8612900565b73ffffffffffffffffffffffffffffffffffffffff166115066118c2565b73ffffffffffffffffffffffffffffffffffffffff161461155c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155390614bc0565b60405180910390fd5b6102588310156115a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159890614eb5565b60405180910390fd5b6103e882111580156115b4575060008210155b6115f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ea90614f47565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b600061162a612900565b73ffffffffffffffffffffffffffffffffffffffff166116486118c2565b73ffffffffffffffffffffffffffffffffffffffff161461169e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169590614bc0565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b6116c8612900565b73ffffffffffffffffffffffffffffffffffffffff166116e66118c2565b73ffffffffffffffffffffffffffffffffffffffff161461173c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173390614bc0565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6117cb612900565b73ffffffffffffffffffffffffffffffffffffffff166117e96118c2565b73ffffffffffffffffffffffffffffffffffffffff161461183f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183690614bc0565b60405180910390fd5b8260158190555081601681905550806017819055506017546016546015546118679190614ded565b6118719190614ded565b601481905550600b60145411156118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b490614fb3565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b611920612900565b73ffffffffffffffffffffffffffffffffffffffff1661193e6118c2565b73ffffffffffffffffffffffffffffffffffffffff1614611994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198b90614bc0565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b6060600480546119c090614b42565b80601f01602080910402602001604051908101604052809291908181526020018280546119ec90614b42565b8015611a395780601f10611a0e57610100808354040283529160200191611a39565b820191906000526020600020905b815481529060010190602001808311611a1c57829003601f168201915b5050505050905090565b611a4b612900565b73ffffffffffffffffffffffffffffffffffffffff16611a696118c2565b73ffffffffffffffffffffffffffffffffffffffff1614611abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab690614bc0565b60405180910390fd5b7f000000000000000000000000fd3b8e7e3e0df5d2e714d80f161a1a9a2f26593573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4590615045565b60405180910390fd5b611b588282613931565b5050565b60175481565b60105481565b601e5481565b601b5481565b60008060016000611b83612900565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c37906150d7565b60405180910390fd5b611c54611c4b612900565b85858403612908565b600191505092915050565b600e5481565b6000611c79611c72612900565b8484612ad3565b6001905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b611cab612900565b73ffffffffffffffffffffffffffffffffffffffff16611cc96118c2565b73ffffffffffffffffffffffffffffffffffffffff1614611d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1690614bc0565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611dbc9190614623565b60405180910390a25050565b611dd0612900565b73ffffffffffffffffffffffffffffffffffffffff16611dee6118c2565b73ffffffffffffffffffffffffffffffffffffffff1614611e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3b90614bc0565b60405180910390fd5b8260198190555081601a8190555080601b81905550601b54601a54601954611e6c9190614ded565b611e769190614ded565b601881905550600b6018541115611ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb990614fb3565b60405180910390fd5b505050565b611ecf612900565b73ffffffffffffffffffffffffffffffffffffffff16611eed6118c2565b73ffffffffffffffffffffffffffffffffffffffff1614611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614bc0565b60405180910390fd5b670de0b6b3a76400006103e86005611f5961106d565b611f639190614c0f565b611f6d9190614c98565b611f779190614c98565b811015611fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb090615169565b60405180910390fd5b670de0b6b3a764000081611fcd9190614c0f565b600a8190555050565b611fde612900565b73ffffffffffffffffffffffffffffffffffffffff16611ffc6118c2565b73ffffffffffffffffffffffffffffffffffffffff1614612052576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204990614bc0565b60405180910390fd5b60005b82518110156120e25781601f600085848151811061207657612075615189565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806120da906151b8565b915050612055565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b3582826040516121149291906152bf565b60405180910390a15050565b601360009054906101000a900460ff1681565b60085481565b6000612143612900565b73ffffffffffffffffffffffffffffffffffffffff166121616118c2565b73ffffffffffffffffffffffffffffffffffffffff16146121b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ae90614bc0565b60405180910390fd5b620186a060016121c561106d565b6121cf9190614c0f565b6121d99190614c98565b82101561221b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221290615361565b60405180910390fd5b6103e8600561222861106d565b6122329190614c0f565b61223c9190614c98565b82111561227e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612275906153f3565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061232b612900565b73ffffffffffffffffffffffffffffffffffffffff166123496118c2565b73ffffffffffffffffffffffffffffffffffffffff161461239f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239690614bc0565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b601160019054906101000a900460ff1681565b60165481565b6123e2612900565b73ffffffffffffffffffffffffffffffffffffffff166124006118c2565b73ffffffffffffffffffffffffffffffffffffffff1614612456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244d90614bc0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bd90615485565b60405180910390fd5b6124cf8161386b565b50565b601a5481565b600a5481565b6124e6612900565b73ffffffffffffffffffffffffffffffffffffffff166125046118c2565b73ffffffffffffffffffffffffffffffffffffffff161461255a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255190614bc0565b60405180910390fd5b60005b82518110156125ea57816020600085848151811061257e5761257d615189565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806125e2906151b8565b91505061255d565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35828260405161261c9291906152bf565b60405180910390a15050565b6000612632612900565b73ffffffffffffffffffffffffffffffffffffffff166126506118c2565b73ffffffffffffffffffffffffffffffffffffffff16146126a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269d90614bc0565b60405180910390fd5b600f546010546126b69190614ded565b42116126f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ee906154f1565b60405180910390fd5b6103e882111561273c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273390615583565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000fd3b8e7e3e0df5d2e714d80f161a1a9a2f2659356040518263ffffffff1660e01b815260040161279e919061479e565b602060405180830381865afa1580156127bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127df91906155b8565b9050600061280a6127106127fc86856139d290919063ffffffff16565b6139e890919063ffffffff16565b90506000811115612843576128427f000000000000000000000000fd3b8e7e3e0df5d2e714d80f161a1a9a2f26593561dead836139fe565b5b60007f000000000000000000000000fd3b8e7e3e0df5d2e714d80f161a1a9a2f26593590508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156128b057600080fd5b505af11580156128c4573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296f90615657565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129df906156e9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ac691906146f4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3a9061577b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa9061580d565b60405180910390fd5b6000811415612bcd57612bc8838360006139fe565b613866565b601160009054906101000a900460ff161561329057612bea6118c2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c585750612c286118c2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c915750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ccb575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ce45750600560149054906101000a900460ff16155b1561328f57601160019054906101000a900460ff16612dde57601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d9e5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd490615879565b60405180910390fd5b5b601360009054906101000a900460ff1615612fa657612dfb6118c2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612e8257507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612eda57507f000000000000000000000000fd3b8e7e3e0df5d2e714d80f161a1a9a2f26593573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612fa55743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5790615931565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130495750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130f057600854811115613093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308a906159c3565b60405180910390fd5b600a5461309f83611410565b826130aa9190614ded565b11156130eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e290615a2f565b60405180910390fd5b61328e565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131935750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131e2576008548111156131dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d490615ac1565b60405180910390fd5b61328d565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661328c57600a5461323f83611410565b8261324a9190614ded565b111561328b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328290615a2f565b60405180910390fd5b5b5b5b5b5b600061329b30611410565b9050600060095482101590508080156132c05750601160029054906101000a900460ff165b80156132d95750600560149054906101000a900460ff16155b801561332f5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133855750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133db5750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561341f576001600560146101000a81548160ff021916908315150217905550613403613c7f565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156134855750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561349d5750600c60009054906101000a900460ff165b80156134b85750600d54600e546134b49190614ded565b4210155b801561350e5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561351d5761351b613f66565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135d35750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135dd57600090505b6000811561385657602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561364057506000601854115b1561370d5761366d606461365f601854886139d290919063ffffffff16565b6139e890919063ffffffff16565b9050601854601a54826136809190614c0f565b61368a9190614c98565b601d600082825461369b9190614ded565b92505081905550601854601b54826136b39190614c0f565b6136bd9190614c98565b601e60008282546136ce9190614ded565b92505081905550601854601954826136e69190614c0f565b6136f09190614c98565b601c60008282546137019190614ded565b92505081905550613832565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561376857506000601454115b15613831576137956064613787601454886139d290919063ffffffff16565b6139e890919063ffffffff16565b9050601454601654826137a89190614c0f565b6137b29190614c98565b601d60008282546137c39190614ded565b92505081905550601454601754826137db9190614c0f565b6137e59190614c98565b601e60008282546137f69190614ded565b925050819055506014546015548261380e9190614c0f565b6138189190614c98565b601c60008282546138299190614ded565b925050819055505b5b6000811115613847576138468730836139fe565b5b80856138539190615ae1565b94505b6138618787876139fe565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081836139e09190614c0f565b905092915050565b600081836139f69190614c98565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a659061577b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ad59061580d565b60405180910390fd5b613ae983838361412c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b6690615b87565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613c029190614ded565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613c6691906146f4565b60405180910390a3613c79848484614131565b50505050565b6000613c8a30611410565b90506000601e54601c54601d54613ca19190614ded565b613cab9190614ded565b9050600080831480613cbd5750600082145b15613cca57505050613f64565b6014600954613cd99190614c0f565b831115613cf2576014600954613cef9190614c0f565b92505b6000600283601d5486613d059190614c0f565b613d0f9190614c98565b613d199190614c98565b90506000613d30828661413690919063ffffffff16565b90506000479050613d408261414c565b6000613d55824761413690919063ffffffff16565b90506000613d8087613d72601c54856139d290919063ffffffff16565b6139e890919063ffffffff16565b90506000613dab88613d9d601e54866139d290919063ffffffff16565b6139e890919063ffffffff16565b90506000818385613dbc9190615ae1565b613dc69190615ae1565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613e2690615bd8565b60006040518083038185875af1925050503d8060008114613e63576040519150601f19603f3d011682016040523d82523d6000602084013e613e68565b606091505b505080985050600087118015613e7e5750600081115b15613ecb57613e8d8782614389565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d54604051613ec293929190615bed565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613f1190615bd8565b60006040518083038185875af1925050503d8060008114613f4e576040519150601f19603f3d011682016040523d82523d6000602084013e613f53565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000fd3b8e7e3e0df5d2e714d80f161a1a9a2f2659356040518263ffffffff1660e01b8152600401613fca919061479e565b602060405180830381865afa158015613fe7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061400b91906155b8565b9050600061403861271061402a600b54856139d290919063ffffffff16565b6139e890919063ffffffff16565b90506000811115614071576140707f000000000000000000000000fd3b8e7e3e0df5d2e714d80f161a1a9a2f26593561dead836139fe565b5b60007f000000000000000000000000fd3b8e7e3e0df5d2e714d80f161a1a9a2f26593590508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156140de57600080fd5b505af11580156140f2573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b600081836141449190615ae1565b905092915050565b6000600267ffffffffffffffff81111561416957614168614934565b5b6040519080825280602002602001820160405280156141975781602001602082028036833780820191505090505b50905030816000815181106141af576141ae615189565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614254573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142789190615c39565b8160018151811061428c5761428b615189565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506142f1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612908565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614353959493929190615ca1565b600060405180830381600087803b15801561436d57600080fd5b505af1158015614381573d6000803e3d6000fd5b505050505050565b6143b4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612908565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161441b96959493929190615cfb565b60606040518083038185885af1158015614439573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061445e9190615d5c565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561449f578082015181840152602081019050614484565b838111156144ae576000848401525b50505050565b6000601f19601f8301169050919050565b60006144d082614465565b6144da8185614470565b93506144ea818560208601614481565b6144f3816144b4565b840191505092915050565b6000602082019050818103600083015261451881846144c5565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061455f82614534565b9050919050565b61456f81614554565b811461457a57600080fd5b50565b60008135905061458c81614566565b92915050565b6000819050919050565b6145a581614592565b81146145b057600080fd5b50565b6000813590506145c28161459c565b92915050565b600080604083850312156145df576145de61452a565b5b60006145ed8582860161457d565b92505060206145fe858286016145b3565b9150509250929050565b60008115159050919050565b61461d81614608565b82525050565b60006020820190506146386000830184614614565b92915050565b6000602082840312156146545761465361452a565b5b60006146628482850161457d565b91505092915050565b6000819050919050565b600061469061468b61468684614534565b61466b565b614534565b9050919050565b60006146a282614675565b9050919050565b60006146b482614697565b9050919050565b6146c4816146a9565b82525050565b60006020820190506146df60008301846146bb565b92915050565b6146ee81614592565b82525050565b600060208201905061470960008301846146e5565b92915050565b6000602082840312156147255761472461452a565b5b6000614733848285016145b3565b91505092915050565b6000806000606084860312156147555761475461452a565b5b60006147638682870161457d565b93505060206147748682870161457d565b9250506040614785868287016145b3565b9150509250925092565b61479881614554565b82525050565b60006020820190506147b3600083018461478f565b92915050565b600060ff82169050919050565b6147cf816147b9565b82525050565b60006020820190506147ea60008301846147c6565b92915050565b6147f981614608565b811461480457600080fd5b50565b600081359050614816816147f0565b92915050565b6000806000606084860312156148355761483461452a565b5b6000614843868287016145b3565b9350506020614854868287016145b3565b925050604061486586828701614807565b9150509250925092565b600080604083850312156148865761488561452a565b5b60006148948582860161457d565b92505060206148a585828601614807565b9150509250929050565b6000806000606084860312156148c8576148c761452a565b5b60006148d6868287016145b3565b93505060206148e7868287016145b3565b92505060406148f8868287016145b3565b9150509250925092565b6000602082840312156149185761491761452a565b5b600061492684828501614807565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61496c826144b4565b810181811067ffffffffffffffff8211171561498b5761498a614934565b5b80604052505050565b600061499e614520565b90506149aa8282614963565b919050565b600067ffffffffffffffff8211156149ca576149c9614934565b5b602082029050602081019050919050565b600080fd5b60006149f36149ee846149af565b614994565b90508083825260208201905060208402830185811115614a1657614a156149db565b5b835b81811015614a3f5780614a2b888261457d565b845260208401935050602081019050614a18565b5050509392505050565b600082601f830112614a5e57614a5d61492f565b5b8135614a6e8482602086016149e0565b91505092915050565b60008060408385031215614a8e57614a8d61452a565b5b600083013567ffffffffffffffff811115614aac57614aab61452f565b5b614ab885828601614a49565b9250506020614ac985828601614807565b9150509250929050565b60008060408385031215614aea57614ae961452a565b5b6000614af88582860161457d565b9250506020614b098582860161457d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614b5a57607f821691505b60208210811415614b6e57614b6d614b13565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614baa602083614470565b9150614bb582614b74565b602082019050919050565b60006020820190508181036000830152614bd981614b9d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614c1a82614592565b9150614c2583614592565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c5e57614c5d614be0565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ca382614592565b9150614cae83614592565b925082614cbe57614cbd614c69565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614d25602f83614470565b9150614d3082614cc9565b604082019050919050565b60006020820190508181036000830152614d5481614d18565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614db7602883614470565b9150614dc282614d5b565b604082019050919050565b60006020820190508181036000830152614de681614daa565b9050919050565b6000614df882614592565b9150614e0383614592565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e3857614e37614be0565b5b828201905092915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614e9f603383614470565b9150614eaa82614e43565b604082019050919050565b60006020820190508181036000830152614ece81614e92565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614f31603083614470565b9150614f3c82614ed5565b604082019050919050565b60006020820190508181036000830152614f6081614f24565b9050919050565b7f4d757374206b656570206665657320617420313125206f72206c657373000000600082015250565b6000614f9d601d83614470565b9150614fa882614f67565b602082019050919050565b60006020820190508181036000830152614fcc81614f90565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061502f603983614470565b915061503a82614fd3565b604082019050919050565b6000602082019050818103600083015261505e81615022565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006150c1602583614470565b91506150cc82615065565b604082019050919050565b600060208201905081810360008301526150f0816150b4565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000615153602483614470565b915061515e826150f7565b604082019050919050565b6000602082019050818103600083015261518281615146565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006151c382614592565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151f6576151f5614be0565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61523681614554565b82525050565b6000615248838361522d565b60208301905092915050565b6000602082019050919050565b600061526c82615201565b615276818561520c565b93506152818361521d565b8060005b838110156152b2578151615299888261523c565b97506152a483615254565b925050600181019050615285565b5085935050505092915050565b600060408201905081810360008301526152d98185615261565b90506152e86020830184614614565b9392505050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061534b603583614470565b9150615356826152ef565b604082019050919050565b6000602082019050818103600083015261537a8161533e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006153dd603483614470565b91506153e882615381565b604082019050919050565b6000602082019050818103600083015261540c816153d0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061546f602683614470565b915061547a82615413565b604082019050919050565b6000602082019050818103600083015261549e81615462565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b60006154db602083614470565b91506154e6826154a5565b602082019050919050565b6000602082019050818103600083015261550a816154ce565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b600061556d602a83614470565b915061557882615511565b604082019050919050565b6000602082019050818103600083015261559c81615560565b9050919050565b6000815190506155b28161459c565b92915050565b6000602082840312156155ce576155cd61452a565b5b60006155dc848285016155a3565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615641602483614470565b915061564c826155e5565b604082019050919050565b6000602082019050818103600083015261567081615634565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006156d3602283614470565b91506156de82615677565b604082019050919050565b60006020820190508181036000830152615702816156c6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615765602583614470565b915061577082615709565b604082019050919050565b6000602082019050818103600083015261579481615758565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006157f7602383614470565b91506158028261579b565b604082019050919050565b60006020820190508181036000830152615826816157ea565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615863601683614470565b915061586e8261582d565b602082019050919050565b6000602082019050818103600083015261589281615856565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061591b604983614470565b915061592682615899565b606082019050919050565b6000602082019050818103600083015261594a8161590e565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006159ad603583614470565b91506159b882615951565b604082019050919050565b600060208201905081810360008301526159dc816159a0565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615a19601383614470565b9150615a24826159e3565b602082019050919050565b60006020820190508181036000830152615a4881615a0c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615aab603683614470565b9150615ab682615a4f565b604082019050919050565b60006020820190508181036000830152615ada81615a9e565b9050919050565b6000615aec82614592565b9150615af783614592565b925082821015615b0a57615b09614be0565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615b71602683614470565b9150615b7c82615b15565b604082019050919050565b60006020820190508181036000830152615ba081615b64565b9050919050565b600081905092915050565b50565b6000615bc2600083615ba7565b9150615bcd82615bb2565b600082019050919050565b6000615be382615bb5565b9150819050919050565b6000606082019050615c0260008301866146e5565b615c0f60208301856146e5565b615c1c60408301846146e5565b949350505050565b600081519050615c3381614566565b92915050565b600060208284031215615c4f57615c4e61452a565b5b6000615c5d84828501615c24565b91505092915050565b6000819050919050565b6000615c8b615c86615c8184615c66565b61466b565b614592565b9050919050565b615c9b81615c70565b82525050565b600060a082019050615cb660008301886146e5565b615cc36020830187615c92565b8181036040830152615cd58186615261565b9050615ce4606083018561478f565b615cf160808301846146e5565b9695505050505050565b600060c082019050615d10600083018961478f565b615d1d60208301886146e5565b615d2a6040830187615c92565b615d376060830186615c92565b615d44608083018561478f565b615d5160a08301846146e5565b979650505050505050565b600080600060608486031215615d7557615d7461452a565b5b6000615d83868287016155a3565b9350506020615d94868287016155a3565b9250506040615da5868287016155a3565b915050925092509256fea2646970667358221220cbd2522883bbb4baa5a583c1fd9e611f7e1f814dfe7d789ba36eacf5b8921d6464736f6c634300080a0033

Deployed Bytecode Sourcemap

24437:20087:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3774:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29400:150;;;;;;;;;;;;;:::i;:::-;;5451:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26064:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24526:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4263:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25112:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24927:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25876:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25836;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30494:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5669:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24629:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25022:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24983:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4105:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6206:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24584:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25210:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34021:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25691:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25284:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4434:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1054:103;;;;;;;;;;;;;:::i;:::-;;42106:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29602:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31041:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24742:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25584;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32280:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;831:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24779:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25726:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32172:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3993:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33111:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25658:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25166:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25916:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25802:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6511:482;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25074:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4824:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26285:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31210:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32691:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30777:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31401:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25502:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24812:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29989:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25550:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5103:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24854:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29784:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25250:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25621:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1165:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25764:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24894:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31736:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43465:1056;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3774:100;3828:13;3861:5;3854:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3774:100;:::o;29400:150::-;977:12;:10;:12::i;:::-;966:23;;:7;:5;:7::i;:::-;:23;;;958:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29466:4:::1;29456:7;;:14;;;;;;;;;;;;;;;;;;29495:4;29481:11;;:18;;;;;;;;;;;;;;;;;;29527:15;29510:14;:32;;;;29400:150::o:0;5451:210::-;5570:4;5592:39;5601:12;:10;:12::i;:::-;5615:7;5624:6;5592:8;:39::i;:::-;5649:4;5642:11;;5451:210;;;;:::o;26064:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;24526:51::-;;;:::o;4263:108::-;4324:7;4351:12;;4344:19;;4263:108;:::o;25112:47::-;;;;:::o;24927:36::-;;;;:::o;25876:33::-;;;;:::o;25836:::-;;;;:::o;30494:275::-;977:12;:10;:12::i;:::-;966:23;;:7;:5;:7::i;:::-;:23;;;958:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30631:4:::1;30623;30618:1;30602:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30601:26;;;;:::i;:::-;30600:35;;;;:::i;:::-;30590:6;:45;;30568:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;30754:6;30744;:17;;;;:::i;:::-;30721:20;:40;;;;30494:275:::0;:::o;5669:529::-;5809:4;5826:36;5836:6;5844:9;5855:6;5826:9;:36::i;:::-;5875:24;5902:11;:19;5914:6;5902:19;;;;;;;;;;;;;;;:33;5922:12;:10;:12::i;:::-;5902:33;;;;;;;;;;;;;;;;5875:60;;5988:6;5968:16;:26;;5946:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;6098:57;6107:6;6115:12;:10;:12::i;:::-;6148:6;6129:16;:25;6098:8;:57::i;:::-;6186:4;6179:11;;;5669:529;;;;;:::o;24629:53::-;24675:6;24629:53;:::o;25022:45::-;;;;:::o;24983:32::-;;;;;;;;;;;;;:::o;4105:93::-;4163:5;4188:2;4181:9;;4105:93;:::o;6206:297::-;6321:4;6343:130;6366:12;:10;:12::i;:::-;6393:7;6452:10;6415:11;:25;6427:12;:10;:12::i;:::-;6415:25;;;;;;;;;;;;;;;:34;6441:7;6415:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;6343:8;:130::i;:::-;6491:4;6484:11;;6206:297;;;;:::o;24584:38::-;;;:::o;25210:33::-;;;;;;;;;;;;;:::o;34021:126::-;34087:4;34111:19;:28;34131:7;34111:28;;;;;;;;;;;;;;;;;;;;;;;;;34104:35;;34021:126;;;:::o;25691:28::-;;;;:::o;25284:31::-;;;;;;;;;;;;;:::o;4434:177::-;4553:7;4585:9;:18;4595:7;4585:18;;;;;;;;;;;;;;;;4578:25;;4434:177;;;:::o;1054:103::-;977:12;:10;:12::i;:::-;966:23;;:7;:5;:7::i;:::-;:23;;;958:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1119:30:::1;1146:1;1119:18;:30::i;:::-;1054:103::o:0;42106:555::-;977:12;:10;:12::i;:::-;966:23;;:7;:5;:7::i;:::-;:23;;;958:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42308:3:::1;42285:19;:26;;42263:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;42435:4;42423:8;:16;;:33;;;;;42455:1;42443:8;:13;;42423:33;42401:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;42561:19;42543:15;:37;;;;42610:8;42591:16;:27;;;;42645:8;42629:13;;:24;;;;;;;;;;;;;;;;;;42106:555:::0;;;:::o;29602:121::-;29654:4;977:12;:10;:12::i;:::-;966:23;;:7;:5;:7::i;:::-;:23;;;958:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29688:5:::1;29671:14;;:22;;;;;;;;;;;;;;;;;;29711:4;29704:11;;29602:121:::0;:::o;31041:161::-;977:12;:10;:12::i;:::-;966:23;;:7;:5;:7::i;:::-;:23;;;958:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31190:4:::1;31151:31;:36;31183:3;31151:36;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;31041:161:::0;;:::o;24742:30::-;;;;;;;;;;;;;:::o;25584:::-;;;;:::o;32280:403::-;977:12;:10;:12::i;:::-;966:23;;:7;:5;:7::i;:::-;:23;;;958:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32448:13:::1;32430:15;:31;;;;32490:13;32472:15;:31;;;;32526:7;32514:9;:19;;;;32595:9;;32577:15;;32559;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;32544:12;:60;;;;32639:2;32623:12;;:18;;32615:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;32280:403:::0;;;:::o;831:87::-;877:7;904:6;;;;;;;;;;;897:13;;831:87;:::o;24779:24::-;;;;;;;;;;;;;:::o;25726:31::-;;;;:::o;32172:100::-;977:12;:10;:12::i;:::-;966:23;;:7;:5;:7::i;:::-;:23;;;958:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32257:7:::1;32243:11;;:21;;;;;;;;;;;;;;;;;;32172:100:::0;:::o;3993:104::-;4049:13;4082:7;4075:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3993:104;:::o;33111:304::-;977:12;:10;:12::i;:::-;966:23;;:7;:5;:7::i;:::-;:23;;;958:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33255:13:::1;33247:21;;:4;:21;;;;33225:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;33366:41;33395:4;33401:5;33366:28;:41::i;:::-;33111:304:::0;;:::o;25658:24::-;;;;:::o;25166:35::-;;;;:::o;25916:27::-;;;;:::o;25802:25::-;;;;:::o;6511:482::-;6631:4;6653:24;6680:11;:25;6692:12;:10;:12::i;:::-;6680:25;;;;;;;;;;;;;;;:34;6706:7;6680:34;;;;;;;;;;;;;;;;6653:61;;6767:15;6747:16;:35;;6725:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;6883:67;6892:12;:10;:12::i;:::-;6906:7;6934:15;6915:16;:34;6883:8;:67::i;:::-;6981:4;6974:11;;;6511:482;;;;:::o;25074:29::-;;;;:::o;4824:216::-;4946:4;4968:42;4978:12;:10;:12::i;:::-;4992:9;5003:6;4968:9;:42::i;:::-;5028:4;5021:11;;4824:216;;;;:::o;26285:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;31210:182::-;977:12;:10;:12::i;:::-;966:23;;:7;:5;:7::i;:::-;:23;;;958:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31326:8:::1;31295:19;:28;31315:7;31295:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31366:7;31350:34;;;31375:8;31350:34;;;;;;:::i;:::-;;;;;;;;31210:182:::0;;:::o;32691:412::-;977:12;:10;:12::i;:::-;966:23;;:7;:5;:7::i;:::-;:23;;;958:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32861:13:::1;32842:16;:32;;;;32904:13;32885:16;:32;;;;32941:7;32928:10;:20;;;;33013:10;;32994:16;;32975;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;32959:13;:64;;;;33059:2;33042:13;;:19;;33034:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32691:412:::0;;;:::o;30777:256::-;977:12;:10;:12::i;:::-;966:23;;:7;:5;:7::i;:::-;:23;;;958:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30917:4:::1;30909;30904:1;30888:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30887:26;;;;:::i;:::-;30886:35;;;;:::i;:::-;30876:6;:45;;30854:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;31018:6;31008;:17;;;;:::i;:::-;30996:9;:29;;;;30777:256:::0;:::o;31401:328::-;977:12;:10;:12::i;:::-;966:23;;:7;:5;:7::i;:::-;:23;;;958:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31542:9:::1;31537:116;31561:8;:15;31557:1;:19;31537:116;;;31633:8;31598:19;:32;31618:8;31627:1;31618:11;;;;;;;;:::i;:::-;;;;;;;;31598:32;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;31578:3;;;;;:::i;:::-;;;;31537:116;;;;31670:51;31702:8;31712;31670:51;;;;;;;:::i;:::-;;;;;;;;31401:328:::0;;:::o;25502:39::-;;;;;;;;;;;;;:::o;24812:35::-;;;;:::o;29989:497::-;30097:4;977:12;:10;:12::i;:::-;966:23;;:7;:5;:7::i;:::-;:23;;;958:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30176:6:::1;30171:1;30155:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30154:28;;;;:::i;:::-;30141:9;:41;;30119:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;30331:4;30326:1;30310:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30309:26;;;;:::i;:::-;30296:9;:39;;30274:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;30447:9;30426:18;:30;;;;30474:4;30467:11;;29989:497:::0;;;:::o;25550:27::-;;;;:::o;5103:201::-;5237:7;5269:11;:18;5281:5;5269:18;;;;;;;;;;;;;;;:27;5288:7;5269:27;;;;;;;;;;;;;;;;5262:34;;5103:201;;;;:::o;24854:33::-;;;;:::o;29784:135::-;29844:4;977:12;:10;:12::i;:::-;966:23;;:7;:5;:7::i;:::-;:23;;;958:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29884:5:::1;29861:20;;:28;;;;;;;;;;;;;;;;;;29907:4;29900:11;;29784:135:::0;:::o;25250:27::-;;;;;;;;;;;;;:::o;25621:30::-;;;;:::o;1165:238::-;977:12;:10;:12::i;:::-;966:23;;:7;:5;:7::i;:::-;:23;;;958:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1288:1:::1;1268:22;;:8;:22;;;;1246:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;1367:28;1386:8;1367:18;:28::i;:::-;1165:238:::0;:::o;25764:31::-;;;;:::o;24894:24::-;;;;:::o;31736:340::-;977:12;:10;:12::i;:::-;966:23;;:7;:5;:7::i;:::-;:23;;;958:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31877:9:::1;31872:128;31896:8;:15;31892:1;:19;31872:128;;;31980:8;31933:31;:44;31965:8;31974:1;31965:11;;;;;;;;:::i;:::-;;;;;;;;31933:44;;;;;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;31913:3;;;;;:::i;:::-;;;;31872:128;;;;32017:51;32049:8;32059;32017:51;;;;;;;:::i;:::-;;;;;;;;31736:340:::0;;:::o;43465:1056::-;43576:4;977:12;:10;:12::i;:::-;966:23;;:7;:5;:7::i;:::-;:23;;;958:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43661:19:::1;;43638:20;;:42;;;;:::i;:::-;43620:15;:60;43598:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;43770:4;43759:7;:15;;43751:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;43855:15;43832:20;:38;;;;43925:28;43956:4;:14;;;43971:13;43956:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43925:60;;44035:20;44058:44;44096:5;44058:33;44083:7;44058:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;44035:67;;44222:1;44207:12;:16;44203:110;;;44240:61;44256:13;44279:6;44288:12;44240:15;:61::i;:::-;44203:110;44388:19;44425:13;44388:51;;44450:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44477:14;;;;;;;;;;44509:4;44502:11;;;;;43465:1056:::0;;;:::o;352:98::-;405:7;432:10;425:17;;352:98;:::o;9819:380::-;9972:1;9955:19;;:5;:19;;;;9947:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10053:1;10034:21;;:7;:21;;;;10026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10137:6;10107:11;:18;10119:5;10107:18;;;;;;;;;;;;;;;:27;10126:7;10107:27;;;;;;;;;;;;;;;:36;;;;10175:7;10159:32;;10168:5;10159:32;;;10184:6;10159:32;;;;;;:::i;:::-;;;;;;;;9819:380;;;:::o;34207:5005::-;34355:1;34339:18;;:4;:18;;;;34331:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34432:1;34418:16;;:2;:16;;;;34410:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34501:1;34491:6;:11;34487:93;;;34519:28;34535:4;34541:2;34545:1;34519:15;:28::i;:::-;34562:7;;34487:93;34596:14;;;;;;;;;;;34592:2481;;;34657:7;:5;:7::i;:::-;34649:15;;:4;:15;;;;:49;;;;;34691:7;:5;:7::i;:::-;34685:13;;:2;:13;;;;34649:49;:86;;;;;34733:1;34719:16;;:2;:16;;;;34649:86;:128;;;;;34770:6;34756:21;;:2;:21;;;;34649:128;:158;;;;;34799:8;;;;;;;;;;;34798:9;34649:158;34627:2435;;;34847:7;;;;;;;;;;;34842:217;;34913:19;:25;34933:4;34913:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;34942:19;:23;34962:2;34942:23;;;;;;;;;;;;;;;;;;;;;;;;;34913:52;34879:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;34842:217;35215:20;;;;;;;;;;;35211:641;;;35296:7;:5;:7::i;:::-;35290:13;;:2;:13;;;;:72;;;;;35346:15;35332:30;;:2;:30;;;;35290:72;:129;;;;;35405:13;35391:28;;:2;:28;;;;35290:129;35260:573;;;35583:12;35508:28;:39;35537:9;35508:39;;;;;;;;;;;;;;;;:87;35470:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;35797:12;35755:28;:39;35784:9;35755:39;;;;;;;;;;;;;;;:54;;;;35260:573;35211:641;35926:25;:31;35952:4;35926:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;35983:31;:35;36015:2;35983:35;;;;;;;;;;;;;;;;;;;;;;;;;35982:36;35926:92;35900:1147;;;36105:20;;36095:6;:30;;36061:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;36313:9;;36296:13;36306:2;36296:9;:13::i;:::-;36287:6;:22;;;;:::i;:::-;:35;;36253:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;35900:1147;;;36491:25;:29;36517:2;36491:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;36546:31;:37;36578:4;36546:37;;;;;;;;;;;;;;;;;;;;;;;;;36545:38;36491:92;36465:582;;;36670:20;;36660:6;:30;;36626:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;36465:582;;;36827:31;:35;36859:2;36827:35;;;;;;;;;;;;;;;;;;;;;;;;;36822:225;;36947:9;;36930:13;36940:2;36930:9;:13::i;:::-;36921:6;:22;;;;:::i;:::-;:35;;36887:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;36822:225;36465:582;35900:1147;34627:2435;34592:2481;37085:28;37116:24;37134:4;37116:9;:24::i;:::-;37085:55;;37153:12;37192:18;;37168:20;:42;;37153:57;;37241:7;:35;;;;;37265:11;;;;;;;;;;;37241:35;:61;;;;;37294:8;;;;;;;;;;;37293:9;37241:61;:110;;;;;37320:25;:31;37346:4;37320:31;;;;;;;;;;;;;;;;;;;;;;;;;37319:32;37241:110;:153;;;;;37369:19;:25;37389:4;37369:25;;;;;;;;;;;;;;;;;;;;;;;;;37368:26;37241:153;:194;;;;;37412:19;:23;37432:2;37412:23;;;;;;;;;;;;;;;;;;;;;;;;;37411:24;37241:194;37223:326;;;37473:4;37462:8;;:15;;;;;;;;;;;;;;;;;;37494:10;:8;:10::i;:::-;37532:5;37521:8;;:16;;;;;;;;;;;;;;;;;;37223:326;37580:8;;;;;;;;;;;37579:9;:55;;;;;37605:25;:29;37631:2;37605:29;;;;;;;;;;;;;;;;;;;;;;;;;37579:55;:85;;;;;37651:13;;;;;;;;;;;37579:85;:153;;;;;37717:15;;37700:14;;:32;;;;:::i;:::-;37681:15;:51;;37579:153;:196;;;;;37750:19;:25;37770:4;37750:25;;;;;;;;;;;;;;;;;;;;;;;;;37749:26;37579:196;37561:282;;;37802:29;:27;:29::i;:::-;;37561:282;37855:12;37871:8;;;;;;;;;;;37870:9;37855:24;;37981:19;:25;38001:4;37981:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38010:19;:23;38030:2;38010:23;;;;;;;;;;;;;;;;;;;;;;;;;37981:52;37977:100;;;38060:5;38050:15;;37977:100;38089:12;38194:7;38190:969;;;38246:25;:29;38272:2;38246:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;38295:1;38279:13;;:17;38246:50;38242:768;;;38324:34;38354:3;38324:25;38335:13;;38324:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;38317:41;;38427:13;;38407:16;;38400:4;:23;;;;:::i;:::-;38399:41;;;;:::i;:::-;38377:18;;:63;;;;;;;:::i;:::-;;;;;;;;38497:13;;38483:10;;38476:4;:17;;;;:::i;:::-;38475:35;;;;:::i;:::-;38459:12;;:51;;;;;;;:::i;:::-;;;;;;;;38579:13;;38559:16;;38552:4;:23;;;;:::i;:::-;38551:41;;;;:::i;:::-;38529:18;;:63;;;;;;;:::i;:::-;;;;;;;;38242:768;;;38654:25;:31;38680:4;38654:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;38704:1;38689:12;;:16;38654:51;38650:360;;;38733:33;38762:3;38733:24;38744:12;;38733:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;38726:40;;38834:12;;38815:15;;38808:4;:22;;;;:::i;:::-;38807:39;;;;:::i;:::-;38785:18;;:61;;;;;;;:::i;:::-;;;;;;;;38902:12;;38889:9;;38882:4;:16;;;;:::i;:::-;38881:33;;;;:::i;:::-;38865:12;;:49;;;;;;;:::i;:::-;;;;;;;;38982:12;;38963:15;;38956:4;:22;;;;:::i;:::-;38955:39;;;;:::i;:::-;38933:18;;:61;;;;;;;:::i;:::-;;;;;;;;38650:360;38242:768;39037:1;39030:4;:8;39026:91;;;39059:42;39075:4;39089;39096;39059:15;:42::i;:::-;39026:91;39143:4;39133:14;;;;;:::i;:::-;;;38190:969;39171:33;39187:4;39193:2;39197:6;39171:15;:33::i;:::-;34320:4892;;;;34207:5005;;;;:::o;1411:191::-;1485:16;1504:6;;;;;;;;;;;1485:25;;1530:8;1521:6;;:17;;;;;;;;;;;;;;;;;;1585:8;1554:40;;1575:8;1554:40;;;;;;;;;;;;1474:128;1411:191;:::o;33423:188::-;33540:5;33506:25;:31;33532:4;33506:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;33597:5;33563:40;;33591:4;33563:40;;;;;;;;;;;;33423:188;;:::o;15432:98::-;15490:7;15521:1;15517;:5;;;;:::i;:::-;15510:12;;15432:98;;;;:::o;15831:::-;15889:7;15920:1;15916;:5;;;;:::i;:::-;15909:12;;15831:98;;;;:::o;7001:770::-;7159:1;7141:20;;:6;:20;;;;7133:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7243:1;7222:23;;:9;:23;;;;7214:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7298:47;7319:6;7327:9;7338:6;7298:20;:47::i;:::-;7358:21;7382:9;:17;7392:6;7382:17;;;;;;;;;;;;;;;;7358:41;;7449:6;7432:13;:23;;7410:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;7593:6;7577:13;:22;7557:9;:17;7567:6;7557:17;;;;;;;;;;;;;;;:42;;;;7645:6;7621:9;:20;7631:9;7621:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;7686:9;7669:35;;7678:6;7669:35;;;7697:6;7669:35;;;;;;:::i;:::-;;;;;;;;7717:46;7737:6;7745:9;7756:6;7717:19;:46::i;:::-;7122:649;7001:770;;;:::o;40342:1756::-;40381:23;40407:24;40425:4;40407:9;:24::i;:::-;40381:50;;40442:25;40538:12;;40504:18;;40470;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;40442:108;;40561:12;40609:1;40590:15;:20;:46;;;;40635:1;40614:17;:22;40590:46;40586:85;;;40653:7;;;;;40586:85;40726:2;40705:18;;:23;;;;:::i;:::-;40687:15;:41;40683:115;;;40784:2;40763:18;;:23;;;;:::i;:::-;40745:41;;40683:115;40859:23;40972:1;40939:17;40904:18;;40886:15;:36;;;;:::i;:::-;40885:71;;;;:::i;:::-;:88;;;;:::i;:::-;40859:114;;40984:26;41013:36;41033:15;41013;:19;;:36;;;;:::i;:::-;40984:65;;41062:25;41090:21;41062:49;;41124:36;41141:18;41124:16;:36::i;:::-;41173:18;41194:44;41220:17;41194:21;:25;;:44;;;;:::i;:::-;41173:65;;41251:23;41277:81;41330:17;41277:34;41292:18;;41277:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;41251:107;;41369:17;41389:51;41422:17;41389:28;41404:12;;41389:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;41369:71;;41453:23;41510:9;41492:15;41479:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;41453:66;;41553:1;41532:18;:22;;;;41586:1;41565:18;:22;;;;41613:1;41598:12;:16;;;;41649:9;;;;;;;;;;;41641:23;;41672:9;41641:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41627:59;;;;;41721:1;41703:15;:19;:42;;;;;41744:1;41726:15;:19;41703:42;41699:278;;;41762:46;41775:15;41792;41762:12;:46::i;:::-;41828:137;41861:18;41898:15;41932:18;;41828:137;;;;;;;;:::i;:::-;;;;;;;;41699:278;42011:15;;;;;;;;;;;42003:29;;42054:21;42003:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41989:101;;;;;40370:1728;;;;;;;;;;40342:1756;:::o;42669:788::-;42726:4;42760:15;42743:14;:32;;;;42830:28;42861:4;:14;;;42876:13;42861:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42830:60;;42940:20;42963:77;43024:5;42963:42;42988:16;;42963:20;:24;;:42;;;;:::i;:::-;:46;;:77;;;;:::i;:::-;42940:100;;43160:1;43145:12;:16;43141:110;;;43178:61;43194:13;43217:6;43226:12;43178:15;:61::i;:::-;43141:110;43326:19;43363:13;43326:51;;43388:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43415:12;;;;;;;;;;43445:4;43438:11;;;;;42669:788;:::o;10799:125::-;;;;:::o;11528:124::-;;;;:::o;15075:98::-;15133:7;15164:1;15160;:5;;;;:::i;:::-;15153:12;;15075:98;;;;:::o;39220:589::-;39346:21;39384:1;39370:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39346:40;;39415:4;39397;39402:1;39397:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;39441:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39431:4;39436:1;39431:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;39476:62;39493:4;39508:15;39526:11;39476:8;:62::i;:::-;39577:15;:66;;;39658:11;39684:1;39728:4;39755;39775:15;39577:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39275:534;39220:589;:::o;39817:517::-;39965:62;39982:4;39997:15;40015:11;39965:8;:62::i;:::-;40070:15;:31;;;40109:9;40142:4;40162:11;40188:1;40231;24675:6;40300:15;40070:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;39817:517;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:75::-;1430:6;1463:2;1457:9;1447:19;;1397:75;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:613::-;7236:6;7244;7252;7301:2;7289:9;7280:7;7276:23;7272:32;7269:119;;;7307:79;;:::i;:::-;7269:119;7427:1;7452:53;7497:7;7488:6;7477:9;7473:22;7452:53;:::i;:::-;7442:63;;7398:117;7554:2;7580:53;7625:7;7616:6;7605:9;7601:22;7580:53;:::i;:::-;7570:63;;7525:118;7682:2;7708:50;7750:7;7741:6;7730:9;7726:22;7708:50;:::i;:::-;7698:60;;7653:115;7162:613;;;;;:::o;7781:468::-;7846:6;7854;7903:2;7891:9;7882:7;7878:23;7874:32;7871:119;;;7909:79;;:::i;:::-;7871:119;8029:1;8054:53;8099:7;8090:6;8079:9;8075:22;8054:53;:::i;:::-;8044:63;;8000:117;8156:2;8182:50;8224:7;8215:6;8204:9;8200:22;8182:50;:::i;:::-;8172:60;;8127:115;7781:468;;;;;:::o;8255:619::-;8332:6;8340;8348;8397:2;8385:9;8376:7;8372:23;8368:32;8365:119;;;8403:79;;:::i;:::-;8365:119;8523:1;8548:53;8593:7;8584:6;8573:9;8569:22;8548:53;:::i;:::-;8538:63;;8494:117;8650:2;8676:53;8721:7;8712:6;8701:9;8697:22;8676:53;:::i;:::-;8666:63;;8621:118;8778:2;8804:53;8849:7;8840:6;8829:9;8825:22;8804:53;:::i;:::-;8794:63;;8749:118;8255:619;;;;;:::o;8880:323::-;8936:6;8985:2;8973:9;8964:7;8960:23;8956:32;8953:119;;;8991:79;;:::i;:::-;8953:119;9111:1;9136:50;9178:7;9169:6;9158:9;9154:22;9136:50;:::i;:::-;9126:60;;9082:114;8880:323;;;;:::o;9209:117::-;9318:1;9315;9308:12;9332:180;9380:77;9377:1;9370:88;9477:4;9474:1;9467:15;9501:4;9498:1;9491:15;9518:281;9601:27;9623:4;9601:27;:::i;:::-;9593:6;9589:40;9731:6;9719:10;9716:22;9695:18;9683:10;9680:34;9677:62;9674:88;;;9742:18;;:::i;:::-;9674:88;9782:10;9778:2;9771:22;9561:238;9518:281;;:::o;9805:129::-;9839:6;9866:20;;:::i;:::-;9856:30;;9895:33;9923:4;9915:6;9895:33;:::i;:::-;9805:129;;;:::o;9940:311::-;10017:4;10107:18;10099:6;10096:30;10093:56;;;10129:18;;:::i;:::-;10093:56;10179:4;10171:6;10167:17;10159:25;;10239:4;10233;10229:15;10221:23;;9940:311;;;:::o;10257:117::-;10366:1;10363;10356:12;10397:710;10493:5;10518:81;10534:64;10591:6;10534:64;:::i;:::-;10518:81;:::i;:::-;10509:90;;10619:5;10648:6;10641:5;10634:21;10682:4;10675:5;10671:16;10664:23;;10735:4;10727:6;10723:17;10715:6;10711:30;10764:3;10756:6;10753:15;10750:122;;;10783:79;;:::i;:::-;10750:122;10898:6;10881:220;10915:6;10910:3;10907:15;10881:220;;;10990:3;11019:37;11052:3;11040:10;11019:37;:::i;:::-;11014:3;11007:50;11086:4;11081:3;11077:14;11070:21;;10957:144;10941:4;10936:3;10932:14;10925:21;;10881:220;;;10885:21;10499:608;;10397:710;;;;;:::o;11130:370::-;11201:5;11250:3;11243:4;11235:6;11231:17;11227:27;11217:122;;11258:79;;:::i;:::-;11217:122;11375:6;11362:20;11400:94;11490:3;11482:6;11475:4;11467:6;11463:17;11400:94;:::i;:::-;11391:103;;11207:293;11130:370;;;;:::o;11506:678::-;11596:6;11604;11653:2;11641:9;11632:7;11628:23;11624:32;11621:119;;;11659:79;;:::i;:::-;11621:119;11807:1;11796:9;11792:17;11779:31;11837:18;11829:6;11826:30;11823:117;;;11859:79;;:::i;:::-;11823:117;11964:78;12034:7;12025:6;12014:9;12010:22;11964:78;:::i;:::-;11954:88;;11750:302;12091:2;12117:50;12159:7;12150:6;12139:9;12135:22;12117:50;:::i;:::-;12107:60;;12062:115;11506:678;;;;;:::o;12190:474::-;12258:6;12266;12315:2;12303:9;12294:7;12290:23;12286:32;12283:119;;;12321:79;;:::i;:::-;12283:119;12441:1;12466:53;12511:7;12502:6;12491:9;12487:22;12466:53;:::i;:::-;12456:63;;12412:117;12568:2;12594:53;12639:7;12630:6;12619:9;12615:22;12594:53;:::i;:::-;12584:63;;12539:118;12190:474;;;;;:::o;12670:180::-;12718:77;12715:1;12708:88;12815:4;12812:1;12805:15;12839:4;12836:1;12829:15;12856:320;12900:6;12937:1;12931:4;12927:12;12917:22;;12984:1;12978:4;12974:12;13005:18;12995:81;;13061:4;13053:6;13049:17;13039:27;;12995:81;13123:2;13115:6;13112:14;13092:18;13089:38;13086:84;;;13142:18;;:::i;:::-;13086:84;12907:269;12856:320;;;:::o;13182:182::-;13322:34;13318:1;13310:6;13306:14;13299:58;13182:182;:::o;13370:366::-;13512:3;13533:67;13597:2;13592:3;13533:67;:::i;:::-;13526:74;;13609:93;13698:3;13609:93;:::i;:::-;13727:2;13722:3;13718:12;13711:19;;13370:366;;;:::o;13742:419::-;13908:4;13946:2;13935:9;13931:18;13923:26;;13995:9;13989:4;13985:20;13981:1;13970:9;13966:17;13959:47;14023:131;14149:4;14023:131;:::i;:::-;14015:139;;13742:419;;;:::o;14167:180::-;14215:77;14212:1;14205:88;14312:4;14309:1;14302:15;14336:4;14333:1;14326:15;14353:348;14393:7;14416:20;14434:1;14416:20;:::i;:::-;14411:25;;14450:20;14468:1;14450:20;:::i;:::-;14445:25;;14638:1;14570:66;14566:74;14563:1;14560:81;14555:1;14548:9;14541:17;14537:105;14534:131;;;14645:18;;:::i;:::-;14534:131;14693:1;14690;14686:9;14675:20;;14353:348;;;;:::o;14707:180::-;14755:77;14752:1;14745:88;14852:4;14849:1;14842:15;14876:4;14873:1;14866:15;14893:185;14933:1;14950:20;14968:1;14950:20;:::i;:::-;14945:25;;14984:20;15002:1;14984:20;:::i;:::-;14979:25;;15023:1;15013:35;;15028:18;;:::i;:::-;15013:35;15070:1;15067;15063:9;15058:14;;14893:185;;;;:::o;15084:234::-;15224:34;15220:1;15212:6;15208:14;15201:58;15293:17;15288:2;15280:6;15276:15;15269:42;15084:234;:::o;15324:366::-;15466:3;15487:67;15551:2;15546:3;15487:67;:::i;:::-;15480:74;;15563:93;15652:3;15563:93;:::i;:::-;15681:2;15676:3;15672:12;15665:19;;15324:366;;;:::o;15696:419::-;15862:4;15900:2;15889:9;15885:18;15877:26;;15949:9;15943:4;15939:20;15935:1;15924:9;15920:17;15913:47;15977:131;16103:4;15977:131;:::i;:::-;15969:139;;15696:419;;;:::o;16121:227::-;16261:34;16257:1;16249:6;16245:14;16238:58;16330:10;16325:2;16317:6;16313:15;16306:35;16121:227;:::o;16354:366::-;16496:3;16517:67;16581:2;16576:3;16517:67;:::i;:::-;16510:74;;16593:93;16682:3;16593:93;:::i;:::-;16711:2;16706:3;16702:12;16695:19;;16354:366;;;:::o;16726:419::-;16892:4;16930:2;16919:9;16915:18;16907:26;;16979:9;16973:4;16969:20;16965:1;16954:9;16950:17;16943:47;17007:131;17133:4;17007:131;:::i;:::-;16999:139;;16726:419;;;:::o;17151:305::-;17191:3;17210:20;17228:1;17210:20;:::i;:::-;17205:25;;17244:20;17262:1;17244:20;:::i;:::-;17239:25;;17398:1;17330:66;17326:74;17323:1;17320:81;17317:107;;;17404:18;;:::i;:::-;17317:107;17448:1;17445;17441:9;17434:16;;17151:305;;;;:::o;17462:238::-;17602:34;17598:1;17590:6;17586:14;17579:58;17671:21;17666:2;17658:6;17654:15;17647:46;17462:238;:::o;17706:366::-;17848:3;17869:67;17933:2;17928:3;17869:67;:::i;:::-;17862:74;;17945:93;18034:3;17945:93;:::i;:::-;18063:2;18058:3;18054:12;18047:19;;17706:366;;;:::o;18078:419::-;18244:4;18282:2;18271:9;18267:18;18259:26;;18331:9;18325:4;18321:20;18317:1;18306:9;18302:17;18295:47;18359:131;18485:4;18359:131;:::i;:::-;18351:139;;18078:419;;;:::o;18503:235::-;18643:34;18639:1;18631:6;18627:14;18620:58;18712:18;18707:2;18699:6;18695:15;18688:43;18503:235;:::o;18744:366::-;18886:3;18907:67;18971:2;18966:3;18907:67;:::i;:::-;18900:74;;18983:93;19072:3;18983:93;:::i;:::-;19101:2;19096:3;19092:12;19085:19;;18744:366;;;:::o;19116:419::-;19282:4;19320:2;19309:9;19305:18;19297:26;;19369:9;19363:4;19359:20;19355:1;19344:9;19340:17;19333:47;19397:131;19523:4;19397:131;:::i;:::-;19389:139;;19116:419;;;:::o;19541:179::-;19681:31;19677:1;19669:6;19665:14;19658:55;19541:179;:::o;19726:366::-;19868:3;19889:67;19953:2;19948:3;19889:67;:::i;:::-;19882:74;;19965:93;20054:3;19965:93;:::i;:::-;20083:2;20078:3;20074:12;20067:19;;19726:366;;;:::o;20098:419::-;20264:4;20302:2;20291:9;20287:18;20279:26;;20351:9;20345:4;20341:20;20337:1;20326:9;20322:17;20315:47;20379:131;20505:4;20379:131;:::i;:::-;20371:139;;20098:419;;;:::o;20523:244::-;20663:34;20659:1;20651:6;20647:14;20640:58;20732:27;20727:2;20719:6;20715:15;20708:52;20523:244;:::o;20773:366::-;20915:3;20936:67;21000:2;20995:3;20936:67;:::i;:::-;20929:74;;21012:93;21101:3;21012:93;:::i;:::-;21130:2;21125:3;21121:12;21114:19;;20773:366;;;:::o;21145:419::-;21311:4;21349:2;21338:9;21334:18;21326:26;;21398:9;21392:4;21388:20;21384:1;21373:9;21369:17;21362:47;21426:131;21552:4;21426:131;:::i;:::-;21418:139;;21145:419;;;:::o;21570:224::-;21710:34;21706:1;21698:6;21694:14;21687:58;21779:7;21774:2;21766:6;21762:15;21755:32;21570:224;:::o;21800:366::-;21942:3;21963:67;22027:2;22022:3;21963:67;:::i;:::-;21956:74;;22039:93;22128:3;22039:93;:::i;:::-;22157:2;22152:3;22148:12;22141:19;;21800:366;;;:::o;22172:419::-;22338:4;22376:2;22365:9;22361:18;22353:26;;22425:9;22419:4;22415:20;22411:1;22400:9;22396:17;22389:47;22453:131;22579:4;22453:131;:::i;:::-;22445:139;;22172:419;;;:::o;22597:223::-;22737:34;22733:1;22725:6;22721:14;22714:58;22806:6;22801:2;22793:6;22789:15;22782:31;22597:223;:::o;22826:366::-;22968:3;22989:67;23053:2;23048:3;22989:67;:::i;:::-;22982:74;;23065:93;23154:3;23065:93;:::i;:::-;23183:2;23178:3;23174:12;23167:19;;22826:366;;;:::o;23198:419::-;23364:4;23402:2;23391:9;23387:18;23379:26;;23451:9;23445:4;23441:20;23437:1;23426:9;23422:17;23415:47;23479:131;23605:4;23479:131;:::i;:::-;23471:139;;23198:419;;;:::o;23623:180::-;23671:77;23668:1;23661:88;23768:4;23765:1;23758:15;23792:4;23789:1;23782:15;23809:233;23848:3;23871:24;23889:5;23871:24;:::i;:::-;23862:33;;23917:66;23910:5;23907:77;23904:103;;;23987:18;;:::i;:::-;23904:103;24034:1;24027:5;24023:13;24016:20;;23809:233;;;:::o;24048:114::-;24115:6;24149:5;24143:12;24133:22;;24048:114;;;:::o;24168:184::-;24267:11;24301:6;24296:3;24289:19;24341:4;24336:3;24332:14;24317:29;;24168:184;;;;:::o;24358:132::-;24425:4;24448:3;24440:11;;24478:4;24473:3;24469:14;24461:22;;24358:132;;;:::o;24496:108::-;24573:24;24591:5;24573:24;:::i;:::-;24568:3;24561:37;24496:108;;:::o;24610:179::-;24679:10;24700:46;24742:3;24734:6;24700:46;:::i;:::-;24778:4;24773:3;24769:14;24755:28;;24610:179;;;;:::o;24795:113::-;24865:4;24897;24892:3;24888:14;24880:22;;24795:113;;;:::o;24944:732::-;25063:3;25092:54;25140:5;25092:54;:::i;:::-;25162:86;25241:6;25236:3;25162:86;:::i;:::-;25155:93;;25272:56;25322:5;25272:56;:::i;:::-;25351:7;25382:1;25367:284;25392:6;25389:1;25386:13;25367:284;;;25468:6;25462:13;25495:63;25554:3;25539:13;25495:63;:::i;:::-;25488:70;;25581:60;25634:6;25581:60;:::i;:::-;25571:70;;25427:224;25414:1;25411;25407:9;25402:14;;25367:284;;;25371:14;25667:3;25660:10;;25068:608;;;24944:732;;;;:::o;25682:471::-;25847:4;25885:2;25874:9;25870:18;25862:26;;25934:9;25928:4;25924:20;25920:1;25909:9;25905:17;25898:47;25962:108;26065:4;26056:6;25962:108;:::i;:::-;25954:116;;26080:66;26142:2;26131:9;26127:18;26118:6;26080:66;:::i;:::-;25682:471;;;;;:::o;26159:240::-;26299:34;26295:1;26287:6;26283:14;26276:58;26368:23;26363:2;26355:6;26351:15;26344:48;26159:240;:::o;26405:366::-;26547:3;26568:67;26632:2;26627:3;26568:67;:::i;:::-;26561:74;;26644:93;26733:3;26644:93;:::i;:::-;26762:2;26757:3;26753:12;26746:19;;26405:366;;;:::o;26777:419::-;26943:4;26981:2;26970:9;26966:18;26958:26;;27030:9;27024:4;27020:20;27016:1;27005:9;27001:17;26994:47;27058:131;27184:4;27058:131;:::i;:::-;27050:139;;26777:419;;;:::o;27202:239::-;27342:34;27338:1;27330:6;27326:14;27319:58;27411:22;27406:2;27398:6;27394:15;27387:47;27202:239;:::o;27447:366::-;27589:3;27610:67;27674:2;27669:3;27610:67;:::i;:::-;27603:74;;27686:93;27775:3;27686:93;:::i;:::-;27804:2;27799:3;27795:12;27788:19;;27447:366;;;:::o;27819:419::-;27985:4;28023:2;28012:9;28008:18;28000:26;;28072:9;28066:4;28062:20;28058:1;28047:9;28043:17;28036:47;28100:131;28226:4;28100:131;:::i;:::-;28092:139;;27819:419;;;:::o;28244:225::-;28384:34;28380:1;28372:6;28368:14;28361:58;28453:8;28448:2;28440:6;28436:15;28429:33;28244:225;:::o;28475:366::-;28617:3;28638:67;28702:2;28697:3;28638:67;:::i;:::-;28631:74;;28714:93;28803:3;28714:93;:::i;:::-;28832:2;28827:3;28823:12;28816:19;;28475:366;;;:::o;28847:419::-;29013:4;29051:2;29040:9;29036:18;29028:26;;29100:9;29094:4;29090:20;29086:1;29075:9;29071:17;29064:47;29128:131;29254:4;29128:131;:::i;:::-;29120:139;;28847:419;;;:::o;29272:182::-;29412:34;29408:1;29400:6;29396:14;29389:58;29272:182;:::o;29460:366::-;29602:3;29623:67;29687:2;29682:3;29623:67;:::i;:::-;29616:74;;29699:93;29788:3;29699:93;:::i;:::-;29817:2;29812:3;29808:12;29801:19;;29460:366;;;:::o;29832:419::-;29998:4;30036:2;30025:9;30021:18;30013:26;;30085:9;30079:4;30075:20;30071:1;30060:9;30056:17;30049:47;30113:131;30239:4;30113:131;:::i;:::-;30105:139;;29832:419;;;:::o;30257:229::-;30397:34;30393:1;30385:6;30381:14;30374:58;30466:12;30461:2;30453:6;30449:15;30442:37;30257:229;:::o;30492:366::-;30634:3;30655:67;30719:2;30714:3;30655:67;:::i;:::-;30648:74;;30731:93;30820:3;30731:93;:::i;:::-;30849:2;30844:3;30840:12;30833:19;;30492:366;;;:::o;30864:419::-;31030:4;31068:2;31057:9;31053:18;31045:26;;31117:9;31111:4;31107:20;31103:1;31092:9;31088:17;31081:47;31145:131;31271:4;31145:131;:::i;:::-;31137:139;;30864:419;;;:::o;31289:143::-;31346:5;31377:6;31371:13;31362:22;;31393:33;31420:5;31393:33;:::i;:::-;31289:143;;;;:::o;31438:351::-;31508:6;31557:2;31545:9;31536:7;31532:23;31528:32;31525:119;;;31563:79;;:::i;:::-;31525:119;31683:1;31708:64;31764:7;31755:6;31744:9;31740:22;31708:64;:::i;:::-;31698:74;;31654:128;31438:351;;;;:::o;31795:223::-;31935:34;31931:1;31923:6;31919:14;31912:58;32004:6;31999:2;31991:6;31987:15;31980:31;31795:223;:::o;32024:366::-;32166:3;32187:67;32251:2;32246:3;32187:67;:::i;:::-;32180:74;;32263:93;32352:3;32263:93;:::i;:::-;32381:2;32376:3;32372:12;32365:19;;32024:366;;;:::o;32396:419::-;32562:4;32600:2;32589:9;32585:18;32577:26;;32649:9;32643:4;32639:20;32635:1;32624:9;32620:17;32613:47;32677:131;32803:4;32677:131;:::i;:::-;32669:139;;32396:419;;;:::o;32821:221::-;32961:34;32957:1;32949:6;32945:14;32938:58;33030:4;33025:2;33017:6;33013:15;33006:29;32821:221;:::o;33048:366::-;33190:3;33211:67;33275:2;33270:3;33211:67;:::i;:::-;33204:74;;33287:93;33376:3;33287:93;:::i;:::-;33405:2;33400:3;33396:12;33389:19;;33048:366;;;:::o;33420:419::-;33586:4;33624:2;33613:9;33609:18;33601:26;;33673:9;33667:4;33663:20;33659:1;33648:9;33644:17;33637:47;33701:131;33827:4;33701:131;:::i;:::-;33693:139;;33420:419;;;:::o;33845:224::-;33985:34;33981:1;33973:6;33969:14;33962:58;34054:7;34049:2;34041:6;34037:15;34030:32;33845:224;:::o;34075:366::-;34217:3;34238:67;34302:2;34297:3;34238:67;:::i;:::-;34231:74;;34314:93;34403:3;34314:93;:::i;:::-;34432:2;34427:3;34423:12;34416:19;;34075:366;;;:::o;34447:419::-;34613:4;34651:2;34640:9;34636:18;34628:26;;34700:9;34694:4;34690:20;34686:1;34675:9;34671:17;34664:47;34728:131;34854:4;34728:131;:::i;:::-;34720:139;;34447:419;;;:::o;34872:222::-;35012:34;35008:1;35000:6;34996:14;34989:58;35081:5;35076:2;35068:6;35064:15;35057:30;34872:222;:::o;35100:366::-;35242:3;35263:67;35327:2;35322:3;35263:67;:::i;:::-;35256:74;;35339:93;35428:3;35339:93;:::i;:::-;35457:2;35452:3;35448:12;35441:19;;35100:366;;;:::o;35472:419::-;35638:4;35676:2;35665:9;35661:18;35653:26;;35725:9;35719:4;35715:20;35711:1;35700:9;35696:17;35689:47;35753:131;35879:4;35753:131;:::i;:::-;35745:139;;35472:419;;;:::o;35897:172::-;36037:24;36033:1;36025:6;36021:14;36014:48;35897:172;:::o;36075:366::-;36217:3;36238:67;36302:2;36297:3;36238:67;:::i;:::-;36231:74;;36314:93;36403:3;36314:93;:::i;:::-;36432:2;36427:3;36423:12;36416:19;;36075:366;;;:::o;36447:419::-;36613:4;36651:2;36640:9;36636:18;36628:26;;36700:9;36694:4;36690:20;36686:1;36675:9;36671:17;36664:47;36728:131;36854:4;36728:131;:::i;:::-;36720:139;;36447:419;;;:::o;36872:297::-;37012:34;37008:1;37000:6;36996:14;36989:58;37081:34;37076:2;37068:6;37064:15;37057:59;37150:11;37145:2;37137:6;37133:15;37126:36;36872:297;:::o;37175:366::-;37317:3;37338:67;37402:2;37397:3;37338:67;:::i;:::-;37331:74;;37414:93;37503:3;37414:93;:::i;:::-;37532:2;37527:3;37523:12;37516:19;;37175:366;;;:::o;37547:419::-;37713:4;37751:2;37740:9;37736:18;37728:26;;37800:9;37794:4;37790:20;37786:1;37775:9;37771:17;37764:47;37828:131;37954:4;37828:131;:::i;:::-;37820:139;;37547:419;;;:::o;37972:240::-;38112:34;38108:1;38100:6;38096:14;38089:58;38181:23;38176:2;38168:6;38164:15;38157:48;37972:240;:::o;38218:366::-;38360:3;38381:67;38445:2;38440:3;38381:67;:::i;:::-;38374:74;;38457:93;38546:3;38457:93;:::i;:::-;38575:2;38570:3;38566:12;38559:19;;38218:366;;;:::o;38590:419::-;38756:4;38794:2;38783:9;38779:18;38771:26;;38843:9;38837:4;38833:20;38829:1;38818:9;38814:17;38807:47;38871:131;38997:4;38871:131;:::i;:::-;38863:139;;38590:419;;;:::o;39015:169::-;39155:21;39151:1;39143:6;39139:14;39132:45;39015:169;:::o;39190:366::-;39332:3;39353:67;39417:2;39412:3;39353:67;:::i;:::-;39346:74;;39429:93;39518:3;39429:93;:::i;:::-;39547:2;39542:3;39538:12;39531:19;;39190:366;;;:::o;39562:419::-;39728:4;39766:2;39755:9;39751:18;39743:26;;39815:9;39809:4;39805:20;39801:1;39790:9;39786:17;39779:47;39843:131;39969:4;39843:131;:::i;:::-;39835:139;;39562:419;;;:::o;39987:241::-;40127:34;40123:1;40115:6;40111:14;40104:58;40196:24;40191:2;40183:6;40179:15;40172:49;39987:241;:::o;40234:366::-;40376:3;40397:67;40461:2;40456:3;40397:67;:::i;:::-;40390:74;;40473:93;40562:3;40473:93;:::i;:::-;40591:2;40586:3;40582:12;40575:19;;40234:366;;;:::o;40606:419::-;40772:4;40810:2;40799:9;40795:18;40787:26;;40859:9;40853:4;40849:20;40845:1;40834:9;40830:17;40823:47;40887:131;41013:4;40887:131;:::i;:::-;40879:139;;40606:419;;;:::o;41031:191::-;41071:4;41091:20;41109:1;41091:20;:::i;:::-;41086:25;;41125:20;41143:1;41125:20;:::i;:::-;41120:25;;41164:1;41161;41158:8;41155:34;;;41169:18;;:::i;:::-;41155:34;41214:1;41211;41207:9;41199:17;;41031:191;;;;:::o;41228:225::-;41368:34;41364:1;41356:6;41352:14;41345:58;41437:8;41432:2;41424:6;41420:15;41413:33;41228:225;:::o;41459:366::-;41601:3;41622:67;41686:2;41681:3;41622:67;:::i;:::-;41615:74;;41698:93;41787:3;41698:93;:::i;:::-;41816:2;41811:3;41807:12;41800:19;;41459:366;;;:::o;41831:419::-;41997:4;42035:2;42024:9;42020:18;42012:26;;42084:9;42078:4;42074:20;42070:1;42059:9;42055:17;42048:47;42112:131;42238:4;42112:131;:::i;:::-;42104:139;;41831:419;;;:::o;42256:147::-;42357:11;42394:3;42379:18;;42256:147;;;;:::o;42409:114::-;;:::o;42529:398::-;42688:3;42709:83;42790:1;42785:3;42709:83;:::i;:::-;42702:90;;42801:93;42890:3;42801:93;:::i;:::-;42919:1;42914:3;42910:11;42903:18;;42529:398;;;:::o;42933:379::-;43117:3;43139:147;43282:3;43139:147;:::i;:::-;43132:154;;43303:3;43296:10;;42933:379;;;:::o;43318:442::-;43467:4;43505:2;43494:9;43490:18;43482:26;;43518:71;43586:1;43575:9;43571:17;43562:6;43518:71;:::i;:::-;43599:72;43667:2;43656:9;43652:18;43643:6;43599:72;:::i;:::-;43681;43749:2;43738:9;43734:18;43725:6;43681:72;:::i;:::-;43318:442;;;;;;:::o;43766:143::-;43823:5;43854:6;43848:13;43839:22;;43870:33;43897:5;43870:33;:::i;:::-;43766:143;;;;:::o;43915:351::-;43985:6;44034:2;44022:9;44013:7;44009:23;44005:32;44002:119;;;44040:79;;:::i;:::-;44002:119;44160:1;44185:64;44241:7;44232:6;44221:9;44217:22;44185:64;:::i;:::-;44175:74;;44131:128;43915:351;;;;:::o;44272:85::-;44317:7;44346:5;44335:16;;44272:85;;;:::o;44363:158::-;44421:9;44454:61;44472:42;44481:32;44507:5;44481:32;:::i;:::-;44472:42;:::i;:::-;44454:61;:::i;:::-;44441:74;;44363:158;;;:::o;44527:147::-;44622:45;44661:5;44622:45;:::i;:::-;44617:3;44610:58;44527:147;;:::o;44680:831::-;44943:4;44981:3;44970:9;44966:19;44958:27;;44995:71;45063:1;45052:9;45048:17;45039:6;44995:71;:::i;:::-;45076:80;45152:2;45141:9;45137:18;45128:6;45076:80;:::i;:::-;45203:9;45197:4;45193:20;45188:2;45177:9;45173:18;45166:48;45231:108;45334:4;45325:6;45231:108;:::i;:::-;45223:116;;45349:72;45417:2;45406:9;45402:18;45393:6;45349:72;:::i;:::-;45431:73;45499:3;45488:9;45484:19;45475:6;45431:73;:::i;:::-;44680:831;;;;;;;;:::o;45517:807::-;45766:4;45804:3;45793:9;45789:19;45781:27;;45818:71;45886:1;45875:9;45871:17;45862:6;45818:71;:::i;:::-;45899:72;45967:2;45956:9;45952:18;45943:6;45899:72;:::i;:::-;45981:80;46057:2;46046:9;46042:18;46033:6;45981:80;:::i;:::-;46071;46147:2;46136:9;46132:18;46123:6;46071:80;:::i;:::-;46161:73;46229:3;46218:9;46214:19;46205:6;46161:73;:::i;:::-;46244;46312:3;46301:9;46297:19;46288:6;46244:73;:::i;:::-;45517:807;;;;;;;;;:::o;46330:663::-;46418:6;46426;46434;46483:2;46471:9;46462:7;46458:23;46454:32;46451:119;;;46489:79;;:::i;:::-;46451:119;46609:1;46634:64;46690:7;46681:6;46670:9;46666:22;46634:64;:::i;:::-;46624:74;;46580:128;46747:2;46773:64;46829:7;46820:6;46809:9;46805:22;46773:64;:::i;:::-;46763:74;;46718:129;46886:2;46912:64;46968:7;46959:6;46948:9;46944:22;46912:64;:::i;:::-;46902:74;;46857:129;46330:663;;;;;:::o

Swarm Source

ipfs://cbd2522883bbb4baa5a583c1fd9e611f7e1f814dfe7d789ba36eacf5b8921d64
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.