Contract 0xf0ff56d83d61f51d7237867ad71b8392ac00f557

Contract Overview

Balance:
0 BNB
Txn Hash
Block
From
To
Value [Txn Fee]
0xce80af2a301af89eaca2b2d2dce4c0687915a8fc7c3689a2ae3bba707796b93988423742021-05-14 19:10:2383 days 2 hrs ago0xc08f01fb3e4282d069f841b4f3dff06dc6f3f094 IN  0xf0ff56d83d61f51d7237867ad71b8392ac00f5570 BNB0.0002771
0xbe98a53b8c02cc378d9545d6b9a1625f99226227d2b42fa8a7a300547dd79d7588422522021-05-14 19:04:1783 days 2 hrs ago0xc08f01fb3e4282d069f841b4f3dff06dc6f3f094 IN  0xf0ff56d83d61f51d7237867ad71b8392ac00f5570 BNB0.00045161
0x7d78387c063153b64df93b9e4ac92d7e21008285d11e30ac50a7332a43fc231788422442021-05-14 19:03:5383 days 2 hrs ago0xc08f01fb3e4282d069f841b4f3dff06dc6f3f094 IN  0xf0ff56d83d61f51d7237867ad71b8392ac00f5570 BNB0.00086598
0xecd353768dfcd2abea74c4b9305c5ad810cee6fa130b66ab72853b348b97883788422402021-05-14 19:03:4183 days 2 hrs ago0xc08f01fb3e4282d069f841b4f3dff06dc6f3f094 IN  0xf0ff56d83d61f51d7237867ad71b8392ac00f5570 BNB0.00086577
0x28cbdb3f4251b31090c6d4ab55034108cece9d71279ccbbbf29d930c1eb664f888422302021-05-14 19:03:1183 days 2 hrs ago0xc08f01fb3e4282d069f841b4f3dff06dc6f3f094 IN  0xf0ff56d83d61f51d7237867ad71b8392ac00f5570 BNB0.00024992
0x7f89d09d0d68ed5269bb628fb28768c60ae43eeb3863664dc87786b23b7c32a888422082021-05-14 19:02:0583 days 2 hrs ago0xc08f01fb3e4282d069f841b4f3dff06dc6f3f094 IN  Contract Creation0 BNB0.06769408
[ Download CSV Export 
Latest 11 internal transactions
Parent Txn Hash Block From To Value
0x8ddce130ef029000e003b86209cd9a06f532c0a7396fe8ab7b6cfe9eb753258c88423872021-05-14 19:11:0283 days 2 hrs ago 0xa93680fb5388194a75930878904d4345f7baaf84 0xf0ff56d83d61f51d7237867ad71b8392ac00f5570 BNB
0x8ddce130ef029000e003b86209cd9a06f532c0a7396fe8ab7b6cfe9eb753258c88423872021-05-14 19:11:0283 days 2 hrs ago 0xa93680fb5388194a75930878904d4345f7baaf84 0xf0ff56d83d61f51d7237867ad71b8392ac00f5570 BNB
0x7ec1ad0611cb699f076e292a822396236193b341c563d01b197b1e023b6dd50688423082021-05-14 19:07:0583 days 2 hrs ago 0xa93680fb5388194a75930878904d4345f7baaf84 0xf0ff56d83d61f51d7237867ad71b8392ac00f5570 BNB
0x7ec1ad0611cb699f076e292a822396236193b341c563d01b197b1e023b6dd50688423082021-05-14 19:07:0583 days 2 hrs ago 0x1b02da8cb0d097eb8d57a175b88c7d8b47997506 0xf0ff56d83d61f51d7237867ad71b8392ac00f5570 BNB
0xb41d170ea05cee924d6a5f01e1aca20fd7617f7fd6b312f139cc6a2f5776a44f88422832021-05-14 19:05:5083 days 2 hrs ago 0xa93680fb5388194a75930878904d4345f7baaf84 0xf0ff56d83d61f51d7237867ad71b8392ac00f5570 BNB
0xb41d170ea05cee924d6a5f01e1aca20fd7617f7fd6b312f139cc6a2f5776a44f88422832021-05-14 19:05:5083 days 2 hrs ago 0xa93680fb5388194a75930878904d4345f7baaf84 0xf0ff56d83d61f51d7237867ad71b8392ac00f5570 BNB
0x8627645443a60a6f69328e395c797964c940c344ff572a4df14f5ec23e9930af88422682021-05-14 19:05:0583 days 2 hrs ago 0xa93680fb5388194a75930878904d4345f7baaf84 0xf0ff56d83d61f51d7237867ad71b8392ac00f5570 BNB
0x8627645443a60a6f69328e395c797964c940c344ff572a4df14f5ec23e9930af88422682021-05-14 19:05:0583 days 2 hrs ago 0x1b02da8cb0d097eb8d57a175b88c7d8b47997506 0xf0ff56d83d61f51d7237867ad71b8392ac00f5570 BNB
0x7f89d09d0d68ed5269bb628fb28768c60ae43eeb3863664dc87786b23b7c32a888422082021-05-14 19:02:0583 days 2 hrs ago 0xf0ff56d83d61f51d7237867ad71b8392ac00f557 0xb7926c0430afb07aa7defde6da862ae0bde767bc0 BNB
0x7f89d09d0d68ed5269bb628fb28768c60ae43eeb3863664dc87786b23b7c32a888422082021-05-14 19:02:0583 days 2 hrs ago 0xf0ff56d83d61f51d7237867ad71b8392ac00f557 0x9ac64cc6e4415144c455bd8e4837fea55603e5c30 BNB
0x7f89d09d0d68ed5269bb628fb28768c60ae43eeb3863664dc87786b23b7c32a888422082021-05-14 19:02:0583 days 2 hrs ago 0xf0ff56d83d61f51d7237867ad71b8392ac00f557 0x9ac64cc6e4415144c455bd8e4837fea55603e5c30 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
NEW700

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 9: NEW700.sol
// SPDX-License-Identifier: MIT

/**
 * ePara
 * https://ePara.finance
 */

pragma solidity ^0.8.0;

import "./Address.sol";
import "./Context.sol";
import "./Ownable.sol";
import "./IERC20.sol";
import "./IERC20Metadata.sol";
import "./IUniswapV2Router02.sol";
import "./IUniswapV2Factory.sol";

contract NEW700 is Context, IERC20, IERC20Metadata, Ownable {
    using Address for address;

    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isCharity;
    mapping (address => bool) private _isMarketing;
    
    address[] private _charity;
    address[] private _marketing;

    string private _name = "NEW700";
    string private constant _symbol = "NEW700";
    uint8 private constant _decimals = 8;
    uint256 private constant _initialSupply = 1000000 * 10**8;
    uint256 private constant _numTokensSellToAddToLiquidity = 100 * 10**8; // 0.01% of initial supply
    address private constant _pancakeSwapRouterAddress = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3;
    uint256 private _totalSupply;
    uint256 private _tCharityTotal;
    uint256 private _tMarketingTotal;
    bool _inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    address private constant _charityAddress = 0x29e92c85689735234b0a3826527153CffAA63Cec;
    address private constant _marketingAddress = 0xBD27E0A3EcEc9ca7E5C89A328Dd257eba609D372;
    uint256 public liquidityPercent = 2 * 10**2; // 2%
    uint256 public burnPercent = 0.5 * 10**2; // 2%
    uint256 public charityPercent = 5 * 10**2; // 4%
    uint256 public marketingPercent = 2.5 * 10**2; // 2%
    uint256 public maxTxAmount = 1000 * 10**8; // 0.1%
    IUniswapV2Router02 public immutable uniswapRouter;
    address public immutable uniswapPair;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    modifier lockTheSwap {
        _inSwapAndLiquify = true;
        _;
        _inSwapAndLiquify = false;
    }

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

    /**
     * Initialize the token.
     */
    constructor () {
        _mint(owner(), _initialSupply);

        IUniswapV2Router02 _uniswapRouter = IUniswapV2Router02(_pancakeSwapRouterAddress);
        uniswapRouter = _uniswapRouter;
        
        address _uniswapPair = IUniswapV2Factory(_uniswapRouter.factory()).createPair(address(this), _uniswapRouter.WETH());
        uniswapPair = _uniswapPair;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[_uniswapPair] = true;
        //_isExcludedFromFees[_charityAddress] = true;
        //_isExcludedFromFees[_marketingAddress] = true;
    }
    
    /**
     * @dev Sets the maximum transaction amount.
     */
    function setMaxTxAmount(uint256 _maxTxAmount) public onlyOwner() {
        maxTxAmount = _maxTxAmount;
    }

    /**
     * @dev Sets the charity wallet address.
     */

    function setAsCharityAccount(address account) external onlyOwner() {
        require(!_isCharity[account], "Account is the charity account.");
        _isCharity[account] = true;
        _charity.push(account);
    }
    
    /**
     * @dev Sets the marketing wallet address.
     */

    function setAsMarketingAccount(address account) external onlyOwner() {
        require(!_isMarketing[account], "Account is the marketing account.");
        _isMarketing[account] = true;
        _marketing.push(account);
    }
    
    /**
     * @dev Sets the liquidity and burn percent.
     */

    function setLiquidityPercentage(uint256 _liquidityPercent) public onlyOwner(){
        liquidityPercent = _liquidityPercent;
    }
    function setBurnPercentage(uint256 _burnPercent) public onlyOwner(){
        burnPercent = _burnPercent;
    }
    function setCharityPercentage(uint256 _charityPercent) public onlyOwner(){
        require(_charityPercent<=5 * 10**2,"Charity percent cannot be greater than 5%");
        charityPercent = _charityPercent;
    }
    function setMarketingPercentage(uint256 _marketingPercent) public onlyOwner(){
        require(_marketingPercent<=2.5 * 10**2,"Marketing percent cannot be greater than 2.5%");
        marketingPercent = _marketingPercent;
    }

    /**
     * @dev Returns the fee status of an address.
     */
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    /**
     * @dev Returns the charity wallet address
     */

    function isCharity(address account) public view returns (bool) {
        return _isCharity[account];
    }

    /**
     * @dev Returns the marketing wallet address
     */

    function isMarketing(address account) public view returns (bool) {
        return _isMarketing[account];
    }

    /**
     * @dev Returns the total amount of the charity donated
     */
    function totalCharity() public view returns (uint256) {
        return _tCharityTotal;
    }

    /**
     * @dev Returns the total amount of the marketing wallet
     */
    function totalMarketing() public view returns (uint256) {
        return _tMarketingTotal;
    }

    /**
     * @dev Sets exclude/include fees for an address.
     */
    function setExcludeFromFees(address account, bool value) public onlyOwner() {
        _isExcludedFromFees[account] = value;
    }
    
    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

    /**
     * @dev Swaps tokens for ETH.
     */
    function _swapTokensForEth(uint256 amount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapRouter.WETH();

        _approve(address(this), address(uniswapRouter), amount);
        uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount, 0, path, address(this), block.timestamp);
    }

    /**
     * @dev Adds liquidity to PancakeSwap.
     */
    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapRouter), tokenAmount);
        uniswapRouter.addLiquidityETH{value: ethAmount}(address(this), tokenAmount, 0, 0, owner(), block.timestamp);
    }

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


    /**
     * @dev Swaps tokens for ETH and adds liquidity to PancakeSwap.
     */
    function _swapAndLiquify(uint256 amount) private lockTheSwap {
        uint256 half = amount / 2;
        uint256 otherHalf = amount - half;
        uint256 initialBalance = address(this).balance;
        _swapTokensForEth(half);
        uint256 newBalance = address(this).balance - initialBalance;
        _addLiquidity(otherHalf, newBalance);
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    /**
     * @dev To recieve ETH from PancakeSwap when swaping.
     */
    receive() external payable {}

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

        uint256 contractTokenBalance = balanceOf(address(this));
        if(contractTokenBalance >= maxTxAmount)
        {
            contractTokenBalance = maxTxAmount;
        }

        if (contractTokenBalance >= _numTokensSellToAddToLiquidity && !_inSwapAndLiquify && sender != uniswapPair && swapAndLiquifyEnabled) {
            contractTokenBalance = _numTokensSellToAddToLiquidity;
            _swapAndLiquify(_numTokensSellToAddToLiquidity);
        }

        if(isExcludedFromFees(recipient) || isExcludedFromFees(sender))
        {
            _balances[sender] -= amount;
            _balances[recipient] += amount;
        }
        else
        {
            require(amount <= maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

            uint256 autoLPAmount = amount * liquidityPercent / 100 / 10**2;
            uint256 autoBurnAmount = amount * burnPercent / 100 / 10**2;
            uint256 autoChartiyAmount = amount * charityPercent / 100 / 10**2;
            uint256 autoMarketingAmount = amount * marketingPercent / 100 / 10**2;
            _balances[sender] -= amount;
            _balances[recipient] += amount - autoLPAmount - autoBurnAmount - autoChartiyAmount - autoMarketingAmount;
            _balances[_charity[0]] += autoChartiyAmount;
            _balances[_marketing[0]] += autoMarketingAmount;
            _balances[address(this)] += autoLPAmount;
            _totalSupply -= autoBurnAmount;
            _tCharityTotal += autoChartiyAmount;
            _tMarketingTotal += autoMarketingAmount;
            emit Transfer(sender, address(0), autoBurnAmount);
            emit Transfer(sender, _charity[0], autoChartiyAmount);
            emit Transfer(sender, _marketing[0], autoMarketingAmount);
        }
        
        emit Transfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

File 2 of 9: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 3 of 9: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

File 4 of 9: IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

File 5 of 9: IERC20Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC20.sol";

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

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

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

File 6 of 9: IUniswapV2Factory.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.5.0;

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

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

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

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

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

File 7 of 9: IUniswapV2Router01.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.6.2;

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

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

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

File 8 of 9: IUniswapV2Router02.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.6.2;

import './IUniswapV2Router01.sol';

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

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

File 9 of 9: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":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"},{"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"isCharity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isMarketing","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setAsCharityAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setAsMarketingAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnPercent","type":"uint256"}],"name":"setBurnPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_charityPercent","type":"uint256"}],"name":"setCharityPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityPercent","type":"uint256"}],"name":"setLiquidityPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingPercent","type":"uint256"}],"name":"setMarketingPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCharity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526040518060400160405280600681526020017f4e45573730300000000000000000000000000000000000000000000000000000815250600890805190602001906200005192919062000632565b506001600c60016101000a81548160ff02191690831515021790555060c8600d556032600e556101f4600f5560fa60105564174876e8006011553480156200009857600080fd5b506000620000ab620004af60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620001706200015d620004b760201b60201c565b655af3107a4000620004e060201b60201c565b6000739ac64cc6e4415144c455bd8e4837fea55603e5c390508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200020957600080fd5b505afa1580156200021e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002449190620006f9565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002a757600080fd5b505afa158015620002bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e29190620006f9565b6040518363ffffffff1660e01b81526004016200030192919062000789565b602060405180830381600087803b1580156200031c57600080fd5b505af115801562000331573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003579190620006f9565b90508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160036000620003a6620004b760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050506200094f565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000553576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200054a90620007b6565b60405180910390fd5b806009600082825462000567919062000806565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620005bf919062000806565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620006269190620007d8565b60405180910390a35050565b8280546200064090620008a1565b90600052602060002090601f016020900481019282620006645760008555620006b0565b82601f106200067f57805160ff1916838001178555620006b0565b82800160010185558215620006b0579182015b82811115620006af57825182559160200191906001019062000692565b5b509050620006bf9190620006c3565b5090565b5b80821115620006de576000816000905550600101620006c4565b5090565b600081519050620006f38162000935565b92915050565b6000602082840312156200070c57600080fd5b60006200071c84828501620006e2565b91505092915050565b620007308162000863565b82525050565b600062000745601f83620007f5565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b620007838162000897565b82525050565b6000604082019050620007a0600083018562000725565b620007af602083018462000725565b9392505050565b60006020820190508181036000830152620007d18162000736565b9050919050565b6000602082019050620007ef600083018462000778565b92915050565b600082825260208201905092915050565b6000620008138262000897565b9150620008208362000897565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620008585762000857620008d7565b5b828201905092915050565b6000620008708262000877565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006002820490506001821680620008ba57607f821691505b60208210811415620008d157620008d062000906565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620009408162000863565b81146200094c57600080fd5b50565b60805160601c60a05160601c613a12620009a5600039600081816115d20152611dfc0152600081816112d40152818161273c015281816128520152818161287901528181612915015261293c0152613a126000f3fe6080604052600436106102135760003560e01c8063735de9f711610118578063c816841b116100a0578063dce144511161006f578063dce14451146107ae578063dd62ed3e146107eb578063e81ffbef14610828578063ec28438a14610865578063f2fde38b1461088e5761021a565b8063c816841b14610704578063d608b3b21461072f578063d63cad221461075a578063d8020a18146107835761021a565b8063a457c2d7116100e7578063a457c2d71461060d578063a9059cbb1461064a578063b068375514610687578063c3f0d327146106b2578063c49b9a80146106db5761021a565b8063735de9f7146105615780638c0b5e221461058c5780638da5cb5b146105b757806395d89b41146105e25761021a565b8063395093511161019b5780634fbee1931161016a5780634fbee1931461047e5780635e6e47aa146104bb57806361209a25146104e457806370a082311461050d578063715018a61461054a5761021a565b806339509351146103c2578063457bdf6c146103ff5780634a74bb02146104285780634a8cbae1146104535761021a565b806318160ddd116101e257806318160ddd146102dd5780631a37225a1461030857806323b872dd146103315780632d4ed6501461036e578063313ce567146103975761021a565b806303807ee51461021f57806306fdde031461024a578063095ea7b3146102755780631233d83a146102b25761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b506102346108b7565b60405161024191906135d8565b60405180910390f35b34801561025657600080fd5b5061025f6108bd565b60405161026c91906133d6565b60405180910390f35b34801561028157600080fd5b5061029c60048036038101906102979190612b81565b61094f565b6040516102a991906133a0565b60405180910390f35b3480156102be57600080fd5b506102c761096d565b6040516102d491906135d8565b60405180910390f35b3480156102e957600080fd5b506102f2610977565b6040516102ff91906135d8565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190612be6565b610981565b005b34801561033d57600080fd5b5061035860048036038101906103539190612af6565b610a07565b60405161036591906133a0565b60405180910390f35b34801561037a57600080fd5b5061039560048036038101906103909190612be6565b610b08565b005b3480156103a357600080fd5b506103ac610bd2565b6040516103b99190613684565b60405180910390f35b3480156103ce57600080fd5b506103e960048036038101906103e49190612b81565b610bdb565b6040516103f691906133a0565b60405180910390f35b34801561040b57600080fd5b5061042660048036038101906104219190612a68565b610c87565b005b34801561043457600080fd5b5061043d610e4e565b60405161044a91906133a0565b60405180910390f35b34801561045f57600080fd5b50610468610e61565b60405161047591906135d8565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a09190612a68565b610e67565b6040516104b291906133a0565b60405180910390f35b3480156104c757600080fd5b506104e260048036038101906104dd9190612be6565b610ebd565b005b3480156104f057600080fd5b5061050b60048036038101906105069190612a68565b610f88565b005b34801561051957600080fd5b50610534600480360381019061052f9190612a68565b61114f565b60405161054191906135d8565b60405180910390f35b34801561055657600080fd5b5061055f611198565b005b34801561056d57600080fd5b506105766112d2565b60405161058391906133bb565b60405180910390f35b34801561059857600080fd5b506105a16112f6565b6040516105ae91906135d8565b60405180910390f35b3480156105c357600080fd5b506105cc6112fc565b6040516105d99190613324565b60405180910390f35b3480156105ee57600080fd5b506105f7611325565b60405161060491906133d6565b60405180910390f35b34801561061957600080fd5b50610634600480360381019061062f9190612b81565b611362565b60405161064191906133a0565b60405180910390f35b34801561065657600080fd5b50610671600480360381019061066c9190612b81565b611456565b60405161067e91906133a0565b60405180910390f35b34801561069357600080fd5b5061069c611474565b6040516106a991906135d8565b60405180910390f35b3480156106be57600080fd5b506106d960048036038101906106d49190612be6565b61147a565b005b3480156106e757600080fd5b5061070260048036038101906106fd9190612bbd565b611500565b005b34801561071057600080fd5b506107196115d0565b6040516107269190613324565b60405180910390f35b34801561073b57600080fd5b506107446115f4565b60405161075191906135d8565b60405180910390f35b34801561076657600080fd5b50610781600480360381019061077c9190612b45565b6115fe565b005b34801561078f57600080fd5b506107986116d5565b6040516107a591906135d8565b60405180910390f35b3480156107ba57600080fd5b506107d560048036038101906107d09190612a68565b6116db565b6040516107e291906133a0565b60405180910390f35b3480156107f757600080fd5b50610812600480360381019061080d9190612aba565b611731565b60405161081f91906135d8565b60405180910390f35b34801561083457600080fd5b5061084f600480360381019061084a9190612a68565b6117b8565b60405161085c91906133a0565b60405180910390f35b34801561087157600080fd5b5061088c60048036038101906108879190612be6565b61180e565b005b34801561089a57600080fd5b506108b560048036038101906108b09190612a68565b611894565b005b600e5481565b6060600880546108cc906138c7565b80601f01602080910402602001604051908101604052809291908181526020018280546108f8906138c7565b80156109455780601f1061091a57610100808354040283529160200191610945565b820191906000526020600020905b81548152906001019060200180831161092857829003601f168201915b5050505050905090565b600061096361095c611a3d565b8484611a45565b6001905092915050565b6000600b54905090565b6000600954905090565b610989611a3d565b73ffffffffffffffffffffffffffffffffffffffff166109a76112fc565b73ffffffffffffffffffffffffffffffffffffffff16146109fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f4906134f8565b60405180910390fd5b80600d8190555050565b6000610a14848484611c10565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a5f611a3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad6906134d8565b60405180910390fd5b610afc85610aeb611a3d565b8584610af791906137d5565b611a45565b60019150509392505050565b610b10611a3d565b73ffffffffffffffffffffffffffffffffffffffff16610b2e6112fc565b73ffffffffffffffffffffffffffffffffffffffff1614610b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7b906134f8565b60405180910390fd5b60fa811115610bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbf90613478565b60405180910390fd5b8060108190555050565b60006008905090565b6000610c7d610be8611a3d565b848460026000610bf6611a3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c7891906136f4565b611a45565b6001905092915050565b610c8f611a3d565b73ffffffffffffffffffffffffffffffffffffffff16610cad6112fc565b73ffffffffffffffffffffffffffffffffffffffff1614610d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfa906134f8565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8790613538565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60019054906101000a900460ff1681565b600f5481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ec5611a3d565b73ffffffffffffffffffffffffffffffffffffffff16610ee36112fc565b73ffffffffffffffffffffffffffffffffffffffff1614610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f30906134f8565b60405180910390fd5b6101f4811115610f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f75906134b8565b60405180910390fd5b80600f8190555050565b610f90611a3d565b73ffffffffffffffffffffffffffffffffffffffff16610fae6112fc565b73ffffffffffffffffffffffffffffffffffffffff1614611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb906134f8565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611091576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108890613598565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111a0611a3d565b73ffffffffffffffffffffffffffffffffffffffff166111be6112fc565b73ffffffffffffffffffffffffffffffffffffffff1614611214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120b906134f8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b7f000000000000000000000000000000000000000000000000000000000000000081565b60115481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600681526020017f4e45573730300000000000000000000000000000000000000000000000000000815250905090565b60008060026000611371611a3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561142e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611425906135b8565b60405180910390fd5b61144b611439611a3d565b85858461144691906137d5565b611a45565b600191505092915050565b600061146a611463611a3d565b8484611c10565b6001905092915050565b600d5481565b611482611a3d565b73ffffffffffffffffffffffffffffffffffffffff166114a06112fc565b73ffffffffffffffffffffffffffffffffffffffff16146114f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ed906134f8565b60405180910390fd5b80600e8190555050565b611508611a3d565b73ffffffffffffffffffffffffffffffffffffffff166115266112fc565b73ffffffffffffffffffffffffffffffffffffffff161461157c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611573906134f8565b60405180910390fd5b80600c60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516115c591906133a0565b60405180910390a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600a54905090565b611606611a3d565b73ffffffffffffffffffffffffffffffffffffffff166116246112fc565b73ffffffffffffffffffffffffffffffffffffffff161461167a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611671906134f8565b60405180910390fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611816611a3d565b73ffffffffffffffffffffffffffffffffffffffff166118346112fc565b73ffffffffffffffffffffffffffffffffffffffff161461188a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611881906134f8565b60405180910390fd5b8060118190555050565b61189c611a3d565b73ffffffffffffffffffffffffffffffffffffffff166118ba6112fc565b73ffffffffffffffffffffffffffffffffffffffff1614611910576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611907906134f8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197790613418565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aac90613578565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1c90613438565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c0391906135d8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7790613558565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce7906133f8565b60405180910390fd5b60008111611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a90613518565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac90613458565b60405180910390fd5b6000611dc03061114f565b90506011548110611dd15760115490505b6402540be4008110158015611df35750600c60009054906101000a900460ff16155b8015611e4b57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015611e635750600c60019054906101000a900460ff165b15611e7f576402540be4009050611e7e6402540be400612590565b5b611e8883610e67565b80611e985750611e9784610e67565b5b15611f4e5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611eec91906137d5565b9250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f4291906136f4565b92505081905550612525565b601154821115611f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8a90613498565b60405180910390fd5b6000606480600d5485611fa6919061377b565b611fb0919061374a565b611fba919061374a565b90506000606480600e5486611fcf919061377b565b611fd9919061374a565b611fe3919061374a565b90506000606480600f5487611ff8919061377b565b612002919061374a565b61200c919061374a565b9050600060648060105488612021919061377b565b61202b919061374a565b612035919061374a565b905085600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461208691906137d5565b92505081905550808284868961209c91906137d5565b6120a691906137d5565b6120b091906137d5565b6120ba91906137d5565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461210891906136f4565b925050819055508160016000600660008154811061214f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121c391906136f4565b925050819055508060016000600760008154811061220a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461227e91906136f4565b9250508190555083600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122d491906136f4565b9250508190555082600960008282546122ed91906137d5565b9250508190555081600a600082825461230691906136f4565b9250508190555080600b600082825461231f91906136f4565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161238491906135d8565b60405180910390a360066000815481106123c7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161244e91906135d8565b60405180910390a36007600081548110612491577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161251891906135d8565b60405180910390a3505050505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161258291906135d8565b60405180910390a350505050565b6001600c60006101000a81548160ff02191690831515021790555060006002826125ba919061374a565b9050600081836125ca91906137d5565b905060004790506125da83612651565b600081476125e891906137d5565b90506125f4838261290f565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516126279392919061364d565b60405180910390a1505050506000600c60006101000a81548160ff02191690831515021790555050565b6000600267ffffffffffffffff811115612694577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156126c25781602001602082028036833780820191505090505b5090503081600081518110612700577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156127a057600080fd5b505afa1580156127b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d89190612a91565b81600181518110612812577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612877307f000000000000000000000000000000000000000000000000000000000000000084611a45565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016128d99594939291906135f3565b600060405180830381600087803b1580156128f357600080fd5b505af1158015612907573d6000803e3d6000fd5b505050505050565b61293a307f000000000000000000000000000000000000000000000000000000000000000084611a45565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806129846112fc565b426040518863ffffffff1660e01b81526004016129a69695949392919061333f565b6060604051808303818588803b1580156129bf57600080fd5b505af11580156129d3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129f89190612c0f565b5050505050565b600081359050612a0e81613997565b92915050565b600081519050612a2381613997565b92915050565b600081359050612a38816139ae565b92915050565b600081359050612a4d816139c5565b92915050565b600081519050612a62816139c5565b92915050565b600060208284031215612a7a57600080fd5b6000612a88848285016129ff565b91505092915050565b600060208284031215612aa357600080fd5b6000612ab184828501612a14565b91505092915050565b60008060408385031215612acd57600080fd5b6000612adb858286016129ff565b9250506020612aec858286016129ff565b9150509250929050565b600080600060608486031215612b0b57600080fd5b6000612b19868287016129ff565b9350506020612b2a868287016129ff565b9250506040612b3b86828701612a3e565b9150509250925092565b60008060408385031215612b5857600080fd5b6000612b66858286016129ff565b9250506020612b7785828601612a29565b9150509250929050565b60008060408385031215612b9457600080fd5b6000612ba2858286016129ff565b9250506020612bb385828601612a3e565b9150509250929050565b600060208284031215612bcf57600080fd5b6000612bdd84828501612a29565b91505092915050565b600060208284031215612bf857600080fd5b6000612c0684828501612a3e565b91505092915050565b600080600060608486031215612c2457600080fd5b6000612c3286828701612a53565b9350506020612c4386828701612a53565b9250506040612c5486828701612a53565b9150509250925092565b6000612c6a8383612c76565b60208301905092915050565b612c7f81613809565b82525050565b612c8e81613809565b82525050565b6000612c9f826136af565b612ca981856136d2565b9350612cb48361369f565b8060005b83811015612ce5578151612ccc8882612c5e565b9750612cd7836136c5565b925050600181019050612cb8565b5085935050505092915050565b612cfb8161381b565b82525050565b612d0a8161385e565b82525050565b612d1981613882565b82525050565b6000612d2a826136ba565b612d3481856136e3565b9350612d44818560208601613894565b612d4d81613986565b840191505092915050565b6000612d656023836136e3565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612dcb6026836136e3565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612e316022836136e3565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612e976026836136e3565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612efd602d836136e3565b91507f4d61726b6574696e672070657263656e742063616e6e6f74206265206772656160008301527f746572207468616e20322e3525000000000000000000000000000000000000006020830152604082019050919050565b6000612f636028836136e3565b91507f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008301527f78416d6f756e742e0000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612fc96029836136e3565b91507f436861726974792070657263656e742063616e6e6f742062652067726561746560008301527f72207468616e20352500000000000000000000000000000000000000000000006020830152604082019050919050565b600061302f6028836136e3565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b60006130956020836136e3565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006130d56029836136e3565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b600061313b601f836136e3565b91507f4163636f756e74206973207468652063686172697479206163636f756e742e006000830152602082019050919050565b600061317b6025836136e3565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006131e16024836136e3565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006132476021836136e3565b91507f4163636f756e7420697320746865206d61726b6574696e67206163636f756e7460008301527f2e000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006132ad6025836136e3565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b61330f81613847565b82525050565b61331e81613851565b82525050565b60006020820190506133396000830184612c85565b92915050565b600060c0820190506133546000830189612c85565b6133616020830188613306565b61336e6040830187612d10565b61337b6060830186612d10565b6133886080830185612c85565b61339560a0830184613306565b979650505050505050565b60006020820190506133b56000830184612cf2565b92915050565b60006020820190506133d06000830184612d01565b92915050565b600060208201905081810360008301526133f08184612d1f565b905092915050565b6000602082019050818103600083015261341181612d58565b9050919050565b6000602082019050818103600083015261343181612dbe565b9050919050565b6000602082019050818103600083015261345181612e24565b9050919050565b6000602082019050818103600083015261347181612e8a565b9050919050565b6000602082019050818103600083015261349181612ef0565b9050919050565b600060208201905081810360008301526134b181612f56565b9050919050565b600060208201905081810360008301526134d181612fbc565b9050919050565b600060208201905081810360008301526134f181613022565b9050919050565b6000602082019050818103600083015261351181613088565b9050919050565b60006020820190508181036000830152613531816130c8565b9050919050565b600060208201905081810360008301526135518161312e565b9050919050565b600060208201905081810360008301526135718161316e565b9050919050565b60006020820190508181036000830152613591816131d4565b9050919050565b600060208201905081810360008301526135b18161323a565b9050919050565b600060208201905081810360008301526135d1816132a0565b9050919050565b60006020820190506135ed6000830184613306565b92915050565b600060a0820190506136086000830188613306565b6136156020830187612d10565b81810360408301526136278186612c94565b90506136366060830185612c85565b6136436080830184613306565b9695505050505050565b60006060820190506136626000830186613306565b61366f6020830185613306565b61367c6040830184613306565b949350505050565b60006020820190506136996000830184613315565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006136ff82613847565b915061370a83613847565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561373f5761373e6138f9565b5b828201905092915050565b600061375582613847565b915061376083613847565b9250826137705761376f613928565b5b828204905092915050565b600061378682613847565b915061379183613847565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156137ca576137c96138f9565b5b828202905092915050565b60006137e082613847565b91506137eb83613847565b9250828210156137fe576137fd6138f9565b5b828203905092915050565b600061381482613827565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061386982613870565b9050919050565b600061387b82613827565b9050919050565b600061388d82613847565b9050919050565b60005b838110156138b2578082015181840152602081019050613897565b838111156138c1576000848401525b50505050565b600060028204905060018216806138df57607f821691505b602082108114156138f3576138f2613957565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b6139a081613809565b81146139ab57600080fd5b50565b6139b78161381b565b81146139c257600080fd5b50565b6139ce81613847565b81146139d957600080fd5b5056fea2646970667358221220890ff52ff2bdbf97dbd92fd786d46ce2087f2f07b104b0fd024fe861e498c58b64736f6c63430008000033

Deployed ByteCode Sourcemap

314:16631:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1612:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5740:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7914:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5356:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6867:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3805:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8565:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4281:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6702:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9396:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3193:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1323:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1665:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4588:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4061:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3493:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7038:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1744:148:8;;;;;;;;;;;;;:::i;:::-;;1833:49:7;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1777:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1093:87:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5959:104:7;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10114:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7378:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1556:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3943:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11275:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1889:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5174:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5535:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1719:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4975:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7616:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4789:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3009:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2047:244:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1612:40:7;;;;:::o;5740:100::-;5794:13;5827:5;5820:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5740:100;:::o;7914:169::-;7997:4;8014:39;8023:12;:10;:12::i;:::-;8037:7;8046:6;8014:8;:39::i;:::-;8071:4;8064:11;;7914:169;;;;:::o;5356:98::-;5403:7;5430:16;;5423:23;;5356:98;:::o;6867:108::-;6928:7;6955:12;;6948:19;;6867:108;:::o;3805:132::-;1324:12:8;:10;:12::i;:::-;1313:23;;:7;:5;:7::i;:::-;:23;;;1305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3912:17:7::1;3893:16;:36;;;;3805:132:::0;:::o;8565:422::-;8671:4;8688:36;8698:6;8706:9;8717:6;8688:9;:36::i;:::-;8737:24;8764:11;:19;8776:6;8764:19;;;;;;;;;;;;;;;:33;8784:12;:10;:12::i;:::-;8764:33;;;;;;;;;;;;;;;;8737:60;;8836:6;8816:16;:26;;8808:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8898:57;8907:6;8915:12;:10;:12::i;:::-;8948:6;8929:16;:25;;;;:::i;:::-;8898:8;:57::i;:::-;8975:4;8968:11;;;8565:422;;;;;:::o;4281:230::-;1324:12:8;:10;:12::i;:::-;1313:23;;:7;:5;:7::i;:::-;:23;;;1305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4396:11:7::1;4377:17;:30;;4369:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;4486:17;4467:16;:36;;;;4281:230:::0;:::o;6702:100::-;6760:5;906:1;6778:16;;6702:100;:::o;9396:215::-;9484:4;9501:80;9510:12;:10;:12::i;:::-;9524:7;9570:10;9533:11;:25;9545:12;:10;:12::i;:::-;9533:25;;;;;;;;;;;;;;;:34;9559:7;9533:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9501:8;:80::i;:::-;9599:4;9592:11;;9396:215;;;;:::o;3193:220::-;1324:12:8;:10;:12::i;:::-;1313:23;;:7;:5;:7::i;:::-;:23;;;1305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3280:10:7::1;:19;3291:7;3280:19;;;;;;;;;;;;;;;;;;;;;;;;;3279:20;3271:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;3368:4;3346:10;:19;3357:7;3346:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;3383:8;3397:7;3383:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3193:220:::0;:::o;1323:40::-;;;;;;;;;;;;;:::o;1665:41::-;;;;:::o;4588:125::-;4653:4;4677:19;:28;4697:7;4677:28;;;;;;;;;;;;;;;;;;;;;;;;;4670:35;;4588:125;;;:::o;4061:214::-;1324:12:8;:10;:12::i;:::-;1313:23;;:7;:5;:7::i;:::-;:23;;;1305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4170:9:7::1;4153:15;:26;;4145:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4252:15;4235:14;:32;;;;4061:214:::0;:::o;3493:230::-;1324:12:8;:10;:12::i;:::-;1313:23;;:7;:5;:7::i;:::-;:23;;;1305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3582:12:7::1;:21;3595:7;3582:21;;;;;;;;;;;;;;;;;;;;;;;;;3581:22;3573:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3676:4;3652:12;:21;3665:7;3652:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;3691:10;3707:7;3691:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3493:230:::0;:::o;7038:127::-;7112:7;7139:9;:18;7149:7;7139:18;;;;;;;;;;;;;;;;7132:25;;7038:127;;;:::o;1744:148:8:-;1324:12;:10;:12::i;:::-;1313:23;;:7;:5;:7::i;:::-;:23;;;1305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1851:1:::1;1814:40;;1835:6;::::0;::::1;;;;;;;;1814:40;;;;;;;;;;;;1882:1;1865:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;1744:148::o:0;1833:49:7:-;;;:::o;1777:41::-;;;;:::o;1093:87:8:-;1139:7;1166:6;;;;;;;;;;;1159:13;;1093:87;:::o;5959:104:7:-;6015:13;6048:7;;;;;;;;;;;;;;;;;6041:14;;5959:104;:::o;10114:377::-;10207:4;10224:24;10251:11;:25;10263:12;:10;:12::i;:::-;10251:25;;;;;;;;;;;;;;;:34;10277:7;10251:34;;;;;;;;;;;;;;;;10224:61;;10324:15;10304:16;:35;;10296:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10392:67;10401:12;:10;:12::i;:::-;10415:7;10443:15;10424:16;:34;;;;:::i;:::-;10392:8;:67::i;:::-;10479:4;10472:11;;;10114:377;;;;:::o;7378:175::-;7464:4;7481:42;7491:12;:10;:12::i;:::-;7505:9;7516:6;7481:9;:42::i;:::-;7541:4;7534:11;;7378:175;;;;:::o;1556:43::-;;;;:::o;3943:112::-;1324:12:8;:10;:12::i;:::-;1313:23;;:7;:5;:7::i;:::-;:23;;;1305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4035:12:7::1;4021:11;:26;;;;3943:112:::0;:::o;11275:171::-;1324:12:8;:10;:12::i;:::-;1313:23;;:7;:5;:7::i;:::-;:23;;;1305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11376:8:7::1;11352:21;;:32;;;;;;;;;;;;;;;;;;11400:38;11429:8;11400:38;;;;;;:::i;:::-;;;;;;;;11275:171:::0;:::o;1889:36::-;;;:::o;5174:94::-;5219:7;5246:14;;5239:21;;5174:94;:::o;5535:131::-;1324:12:8;:10;:12::i;:::-;1313:23;;:7;:5;:7::i;:::-;:23;;;1305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5653:5:7::1;5622:19;:28;5642:7;5622:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;5535:131:::0;;:::o;1719:45::-;;;;:::o;4975:112::-;5034:4;5058:12;:21;5071:7;5058:21;;;;;;;;;;;;;;;;;;;;;;;;;5051:28;;4975:112;;;:::o;7616:151::-;7705:7;7732:11;:18;7744:5;7732:18;;;;;;;;;;;;;;;:27;7751:7;7732:27;;;;;;;;;;;;;;;;7725:34;;7616:151;;;;:::o;4789:108::-;4846:4;4870:10;:19;4881:7;4870:19;;;;;;;;;;;;;;;;;;;;;;;;;4863:26;;4789:108;;;:::o;3009:110::-;1324:12:8;:10;:12::i;:::-;1313:23;;:7;:5;:7::i;:::-;:23;;;1305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3099:12:7::1;3085:11;:26;;;;3009:110:::0;:::o;2047:244:8:-;1324:12;:10;:12::i;:::-;1313:23;;:7;:5;:7::i;:::-;:23;;;1305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2156:1:::1;2136:22;;:8;:22;;;;2128:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2246:8;2217:38;;2238:6;::::0;::::1;;;;;;;;2217:38;;;;;;;;;;;;2275:8;2266:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;2047:244:::0;:::o;601:98:1:-;654:7;681:10;674:17;;601:98;:::o;16596:346:7:-;16715:1;16698:19;;:5;:19;;;;16690:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16796:1;16777:21;;:7;:21;;;;16769:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16880:6;16850:11;:18;16862:5;16850:18;;;;;;;;;;;;;;;:27;16869:7;16850:27;;;;;;;;;;;;;;;:36;;;;16918:7;16902:32;;16911:5;16902:32;;;16927:6;16902:32;;;;;;:::i;:::-;;;;;;;;16596:346;;;:::o;12563:2272::-;12687:1;12669:20;;:6;:20;;;;12661:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12771:1;12750:23;;:9;:23;;;;12742:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12841:1;12832:6;:10;12824:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12928:6;12907:9;:17;12917:6;12907:17;;;;;;;;;;;;;;;;:27;;12899:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;12990:28;13021:24;13039:4;13021:9;:24::i;:::-;12990:55;;13083:11;;13059:20;:35;13056:110;;13143:11;;13120:34;;13056:110;1036:11;13182:20;:54;;:76;;;;;13241:17;;;;;;;;;;;13240:18;13182:76;:101;;;;;13272:11;13262:21;;:6;:21;;;;13182:101;:126;;;;;13287:21;;;;;;;;;;;13182:126;13178:274;;;1036:11;13325:53;;13393:47;1036:11;13393:15;:47::i;:::-;13178:274;13467:29;13486:9;13467:18;:29::i;:::-;:59;;;;13500:26;13519:6;13500:18;:26::i;:::-;13467:59;13464:1303;;;13573:6;13552:9;:17;13562:6;13552:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;13618:6;13594:9;:20;13604:9;13594:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;13464:1303;;;13693:11;;13683:6;:21;;13675:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;13766:20;13823:5;13817:3;13798:16;;13789:6;:25;;;;:::i;:::-;:31;;;;:::i;:::-;:39;;;;:::i;:::-;13766:62;;13843:22;13897:5;13891:3;13877:11;;13868:6;:20;;;;:::i;:::-;:26;;;;:::i;:::-;:34;;;;:::i;:::-;13843:59;;13917:25;13977:5;13971:3;13954:14;;13945:6;:23;;;;:::i;:::-;:29;;;;:::i;:::-;:37;;;;:::i;:::-;13917:65;;13997:27;14061:5;14055:3;14036:16;;14027:6;:25;;;;:::i;:::-;:31;;;;:::i;:::-;:39;;;;:::i;:::-;13997:69;;14102:6;14081:9;:17;14091:6;14081:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;14208:19;14188:17;14171:14;14156:12;14147:6;:21;;;;:::i;:::-;:38;;;;:::i;:::-;:58;;;;:::i;:::-;:80;;;;:::i;:::-;14123:9;:20;14133:9;14123:20;;;;;;;;;;;;;;;;:104;;;;;;;:::i;:::-;;;;;;;;14268:17;14242:9;:22;14252:8;14261:1;14252:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14242:22;;;;;;;;;;;;;;;;:43;;;;;;;:::i;:::-;;;;;;;;14328:19;14300:9;:24;14310:10;14321:1;14310:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14300:24;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;14390:12;14362:9;:24;14380:4;14362:24;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;14433:14;14417:12;;:30;;;;;;;:::i;:::-;;;;;;;;14480:17;14462:14;;:35;;;;;;;:::i;:::-;;;;;;;;14532:19;14512:16;;:39;;;;;;;:::i;:::-;;;;;;;;14596:1;14571:44;;14580:6;14571:44;;;14600:14;14571:44;;;;;;:::i;:::-;;;;;;;;14652:8;14661:1;14652:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14635:48;;14644:6;14635:48;;;14665:17;14635:48;;;;;;:::i;:::-;;;;;;;;14720:10;14731:1;14720:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14703:52;;14712:6;14703:52;;;14735:19;14703:52;;;;;;:::i;:::-;;;;;;;;13464:1303;;;;;14809:9;14792:35;;14801:6;14792:35;;;14820:6;14792:35;;;;;;:::i;:::-;;;;;;;;12563:2272;;;;:::o;11543:416::-;2041:4;2021:17;;:24;;;;;;;;;;;;;;;;;;11615:12:::1;11639:1;11630:6;:10;;;;:::i;:::-;11615:25;;11651:17;11680:4;11671:6;:13;;;;:::i;:::-;11651:33;;11695:22;11720:21;11695:46;;11752:23;11770:4;11752:17;:23::i;:::-;11786:18;11831:14;11807:21;:38;;;;:::i;:::-;11786:59;;11856:36;11870:9;11881:10;11856:13;:36::i;:::-;11908:43;11923:4;11929:10;11941:9;11908:43;;;;;;;;:::i;:::-;;;;;;;;2056:1;;;;2088:5:::0;2068:17;;:25;;;;;;;;;;;;;;;;;;11543:416;:::o;10552:377::-;10614:21;10652:1;10638:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10614:40;;10683:4;10665;10670:1;10665:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;10709:13;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10699:4;10704:1;10699:7;;;;;;;;;;;;;;;;;;;;;:30;;;;;;;;;;;10742:55;10759:4;10774:13;10790:6;10742:8;:55::i;:::-;10808:13;:64;;;10873:6;10881:1;10884:4;10898;10905:15;10808:113;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10552:377;;:::o;10999:268::-;11081:60;11098:4;11113:13;11129:11;11081:8;:60::i;:::-;11152:13;:29;;;11189:9;11208:4;11215:11;11228:1;11231;11234:7;:5;:7::i;:::-;11243:15;11152:107;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;10999:268;;:::o;7:139:9:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:143::-;;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;648:80;;;;:::o;734:262::-;;842:2;830:9;821:7;817:23;813:32;810:2;;;858:1;855;848:12;810:2;901:1;926:53;971:7;962:6;951:9;947:22;926:53;:::i;:::-;916:63;;872:117;800:196;;;;:::o;1002:284::-;;1121:2;1109:9;1100:7;1096:23;1092:32;1089:2;;;1137:1;1134;1127:12;1089:2;1180:1;1205:64;1261:7;1252:6;1241:9;1237:22;1205:64;:::i;:::-;1195:74;;1151:128;1079:207;;;;:::o;1292:407::-;;;1417:2;1405:9;1396:7;1392:23;1388:32;1385:2;;;1433:1;1430;1423:12;1385:2;1476:1;1501:53;1546:7;1537:6;1526:9;1522:22;1501:53;:::i;:::-;1491:63;;1447:117;1603:2;1629:53;1674:7;1665:6;1654:9;1650:22;1629:53;:::i;:::-;1619:63;;1574:118;1375:324;;;;;:::o;1705:552::-;;;;1847:2;1835:9;1826:7;1822:23;1818:32;1815:2;;;1863:1;1860;1853:12;1815:2;1906:1;1931:53;1976:7;1967:6;1956:9;1952:22;1931:53;:::i;:::-;1921:63;;1877:117;2033:2;2059:53;2104:7;2095:6;2084:9;2080:22;2059:53;:::i;:::-;2049:63;;2004:118;2161:2;2187:53;2232:7;2223:6;2212:9;2208:22;2187:53;:::i;:::-;2177:63;;2132:118;1805:452;;;;;:::o;2263:401::-;;;2385:2;2373:9;2364:7;2360:23;2356:32;2353:2;;;2401:1;2398;2391:12;2353:2;2444:1;2469:53;2514:7;2505:6;2494:9;2490:22;2469:53;:::i;:::-;2459:63;;2415:117;2571:2;2597:50;2639:7;2630:6;2619:9;2615:22;2597:50;:::i;:::-;2587:60;;2542:115;2343:321;;;;;:::o;2670:407::-;;;2795:2;2783:9;2774:7;2770:23;2766:32;2763:2;;;2811:1;2808;2801:12;2763:2;2854:1;2879:53;2924:7;2915:6;2904:9;2900:22;2879:53;:::i;:::-;2869:63;;2825:117;2981:2;3007:53;3052:7;3043:6;3032:9;3028:22;3007:53;:::i;:::-;2997:63;;2952:118;2753:324;;;;;:::o;3083:256::-;;3188:2;3176:9;3167:7;3163:23;3159:32;3156:2;;;3204:1;3201;3194:12;3156:2;3247:1;3272:50;3314:7;3305:6;3294:9;3290:22;3272:50;:::i;:::-;3262:60;;3218:114;3146:193;;;;:::o;3345:262::-;;3453:2;3441:9;3432:7;3428:23;3424:32;3421:2;;;3469:1;3466;3459:12;3421:2;3512:1;3537:53;3582:7;3573:6;3562:9;3558:22;3537:53;:::i;:::-;3527:63;;3483:117;3411:196;;;;:::o;3613:596::-;;;;3766:2;3754:9;3745:7;3741:23;3737:32;3734:2;;;3782:1;3779;3772:12;3734:2;3825:1;3850:64;3906:7;3897:6;3886:9;3882:22;3850:64;:::i;:::-;3840:74;;3796:128;3963:2;3989:64;4045:7;4036:6;4025:9;4021:22;3989:64;:::i;:::-;3979:74;;3934:129;4102:2;4128:64;4184:7;4175:6;4164:9;4160:22;4128:64;:::i;:::-;4118:74;;4073:129;3724:485;;;;;:::o;4215:179::-;;4305:46;4347:3;4339:6;4305:46;:::i;:::-;4383:4;4378:3;4374:14;4360:28;;4295:99;;;;:::o;4400:108::-;4477:24;4495:5;4477:24;:::i;:::-;4472:3;4465:37;4455:53;;:::o;4514:118::-;4601:24;4619:5;4601:24;:::i;:::-;4596:3;4589:37;4579:53;;:::o;4668:732::-;;4816:54;4864:5;4816:54;:::i;:::-;4886:86;4965:6;4960:3;4886:86;:::i;:::-;4879:93;;4996:56;5046:5;4996:56;:::i;:::-;5075:7;5106:1;5091:284;5116:6;5113:1;5110:13;5091:284;;;5192:6;5186:13;5219:63;5278:3;5263:13;5219:63;:::i;:::-;5212:70;;5305:60;5358:6;5305:60;:::i;:::-;5295:70;;5151:224;5138:1;5135;5131:9;5126:14;;5091:284;;;5095:14;5391:3;5384:10;;4792:608;;;;;;;:::o;5406:109::-;5487:21;5502:5;5487:21;:::i;:::-;5482:3;5475:34;5465:50;;:::o;5521:183::-;5634:63;5691:5;5634:63;:::i;:::-;5629:3;5622:76;5612:92;;:::o;5710:147::-;5805:45;5844:5;5805:45;:::i;:::-;5800:3;5793:58;5783:74;;:::o;5863:364::-;;5979:39;6012:5;5979:39;:::i;:::-;6034:71;6098:6;6093:3;6034:71;:::i;:::-;6027:78;;6114:52;6159:6;6154:3;6147:4;6140:5;6136:16;6114:52;:::i;:::-;6191:29;6213:6;6191:29;:::i;:::-;6186:3;6182:39;6175:46;;5955:272;;;;;:::o;6233:367::-;;6396:67;6460:2;6455:3;6396:67;:::i;:::-;6389:74;;6493:34;6489:1;6484:3;6480:11;6473:55;6559:5;6554:2;6549:3;6545:12;6538:27;6591:2;6586:3;6582:12;6575:19;;6379:221;;;:::o;6606:370::-;;6769:67;6833:2;6828:3;6769:67;:::i;:::-;6762:74;;6866:34;6862:1;6857:3;6853:11;6846:55;6932:8;6927:2;6922:3;6918:12;6911:30;6967:2;6962:3;6958:12;6951:19;;6752:224;;;:::o;6982:366::-;;7145:67;7209:2;7204:3;7145:67;:::i;:::-;7138:74;;7242:34;7238:1;7233:3;7229:11;7222:55;7308:4;7303:2;7298:3;7294:12;7287:26;7339:2;7334:3;7330:12;7323:19;;7128:220;;;:::o;7354:370::-;;7517:67;7581:2;7576:3;7517:67;:::i;:::-;7510:74;;7614:34;7610:1;7605:3;7601:11;7594:55;7680:8;7675:2;7670:3;7666:12;7659:30;7715:2;7710:3;7706:12;7699:19;;7500:224;;;:::o;7730:377::-;;7893:67;7957:2;7952:3;7893:67;:::i;:::-;7886:74;;7990:34;7986:1;7981:3;7977:11;7970:55;8056:15;8051:2;8046:3;8042:12;8035:37;8098:2;8093:3;8089:12;8082:19;;7876:231;;;:::o;8113:372::-;;8276:67;8340:2;8335:3;8276:67;:::i;:::-;8269:74;;8373:34;8369:1;8364:3;8360:11;8353:55;8439:10;8434:2;8429:3;8425:12;8418:32;8476:2;8471:3;8467:12;8460:19;;8259:226;;;:::o;8491:373::-;;8654:67;8718:2;8713:3;8654:67;:::i;:::-;8647:74;;8751:34;8747:1;8742:3;8738:11;8731:55;8817:11;8812:2;8807:3;8803:12;8796:33;8855:2;8850:3;8846:12;8839:19;;8637:227;;;:::o;8870:372::-;;9033:67;9097:2;9092:3;9033:67;:::i;:::-;9026:74;;9130:34;9126:1;9121:3;9117:11;9110:55;9196:10;9191:2;9186:3;9182:12;9175:32;9233:2;9228:3;9224:12;9217:19;;9016:226;;;:::o;9248:330::-;;9411:67;9475:2;9470:3;9411:67;:::i;:::-;9404:74;;9508:34;9504:1;9499:3;9495:11;9488:55;9569:2;9564:3;9560:12;9553:19;;9394:184;;;:::o;9584:373::-;;9747:67;9811:2;9806:3;9747:67;:::i;:::-;9740:74;;9844:34;9840:1;9835:3;9831:11;9824:55;9910:11;9905:2;9900:3;9896:12;9889:33;9948:2;9943:3;9939:12;9932:19;;9730:227;;;:::o;9963:329::-;;10126:67;10190:2;10185:3;10126:67;:::i;:::-;10119:74;;10223:33;10219:1;10214:3;10210:11;10203:54;10283:2;10278:3;10274:12;10267:19;;10109:183;;;:::o;10298:369::-;;10461:67;10525:2;10520:3;10461:67;:::i;:::-;10454:74;;10558:34;10554:1;10549:3;10545:11;10538:55;10624:7;10619:2;10614:3;10610:12;10603:29;10658:2;10653:3;10649:12;10642:19;;10444:223;;;:::o;10673:368::-;;10836:67;10900:2;10895:3;10836:67;:::i;:::-;10829:74;;10933:34;10929:1;10924:3;10920:11;10913:55;10999:6;10994:2;10989:3;10985:12;10978:28;11032:2;11027:3;11023:12;11016:19;;10819:222;;;:::o;11047:365::-;;11210:67;11274:2;11269:3;11210:67;:::i;:::-;11203:74;;11307:34;11303:1;11298:3;11294:11;11287:55;11373:3;11368:2;11363:3;11359:12;11352:25;11403:2;11398:3;11394:12;11387:19;;11193:219;;;:::o;11418:369::-;;11581:67;11645:2;11640:3;11581:67;:::i;:::-;11574:74;;11678:34;11674:1;11669:3;11665:11;11658:55;11744:7;11739:2;11734:3;11730:12;11723:29;11778:2;11773:3;11769:12;11762:19;;11564:223;;;:::o;11793:118::-;11880:24;11898:5;11880:24;:::i;:::-;11875:3;11868:37;11858:53;;:::o;11917:112::-;12000:22;12016:5;12000:22;:::i;:::-;11995:3;11988:35;11978:51;;:::o;12035:222::-;;12166:2;12155:9;12151:18;12143:26;;12179:71;12247:1;12236:9;12232:17;12223:6;12179:71;:::i;:::-;12133:124;;;;:::o;12263:807::-;;12550:3;12539:9;12535:19;12527:27;;12564:71;12632:1;12621:9;12617:17;12608:6;12564:71;:::i;:::-;12645:72;12713:2;12702:9;12698:18;12689:6;12645:72;:::i;:::-;12727:80;12803:2;12792:9;12788:18;12779:6;12727:80;:::i;:::-;12817;12893:2;12882:9;12878:18;12869:6;12817:80;:::i;:::-;12907:73;12975:3;12964:9;12960:19;12951:6;12907:73;:::i;:::-;12990;13058:3;13047:9;13043:19;13034:6;12990:73;:::i;:::-;12517:553;;;;;;;;;:::o;13076:210::-;;13201:2;13190:9;13186:18;13178:26;;13214:65;13276:1;13265:9;13261:17;13252:6;13214:65;:::i;:::-;13168:118;;;;:::o;13292:274::-;;13449:2;13438:9;13434:18;13426:26;;13462:97;13556:1;13545:9;13541:17;13532:6;13462:97;:::i;:::-;13416:150;;;;:::o;13572:313::-;;13723:2;13712:9;13708:18;13700:26;;13772:9;13766:4;13762:20;13758:1;13747:9;13743:17;13736:47;13800:78;13873:4;13864:6;13800:78;:::i;:::-;13792:86;;13690:195;;;;:::o;13891:419::-;;14095:2;14084:9;14080:18;14072:26;;14144:9;14138:4;14134:20;14130:1;14119:9;14115:17;14108:47;14172:131;14298:4;14172:131;:::i;:::-;14164:139;;14062:248;;;:::o;14316:419::-;;14520:2;14509:9;14505:18;14497:26;;14569:9;14563:4;14559:20;14555:1;14544:9;14540:17;14533:47;14597:131;14723:4;14597:131;:::i;:::-;14589:139;;14487:248;;;:::o;14741:419::-;;14945:2;14934:9;14930:18;14922:26;;14994:9;14988:4;14984:20;14980:1;14969:9;14965:17;14958:47;15022:131;15148:4;15022:131;:::i;:::-;15014:139;;14912:248;;;:::o;15166:419::-;;15370:2;15359:9;15355:18;15347:26;;15419:9;15413:4;15409:20;15405:1;15394:9;15390:17;15383:47;15447:131;15573:4;15447:131;:::i;:::-;15439:139;;15337:248;;;:::o;15591:419::-;;15795:2;15784:9;15780:18;15772:26;;15844:9;15838:4;15834:20;15830:1;15819:9;15815:17;15808:47;15872:131;15998:4;15872:131;:::i;:::-;15864:139;;15762:248;;;:::o;16016:419::-;;16220:2;16209:9;16205:18;16197:26;;16269:9;16263:4;16259:20;16255:1;16244:9;16240:17;16233:47;16297:131;16423:4;16297:131;:::i;:::-;16289:139;;16187:248;;;:::o;16441:419::-;;16645:2;16634:9;16630:18;16622:26;;16694:9;16688:4;16684:20;16680:1;16669:9;16665:17;16658:47;16722:131;16848:4;16722:131;:::i;:::-;16714:139;;16612:248;;;:::o;16866:419::-;;17070:2;17059:9;17055:18;17047:26;;17119:9;17113:4;17109:20;17105:1;17094:9;17090:17;17083:47;17147:131;17273:4;17147:131;:::i;:::-;17139:139;;17037:248;;;:::o;17291:419::-;;17495:2;17484:9;17480:18;17472:26;;17544:9;17538:4;17534:20;17530:1;17519:9;17515:17;17508:47;17572:131;17698:4;17572:131;:::i;:::-;17564:139;;17462:248;;;:::o;17716:419::-;;17920:2;17909:9;17905:18;17897:26;;17969:9;17963:4;17959:20;17955:1;17944:9;17940:17;17933:47;17997:131;18123:4;17997:131;:::i;:::-;17989:139;;17887:248;;;:::o;18141:419::-;;18345:2;18334:9;18330:18;18322:26;;18394:9;18388:4;18384:20;18380:1;18369:9;18365:17;18358:47;18422:131;18548:4;18422:131;:::i;:::-;18414:139;;18312:248;;;:::o;18566:419::-;;18770:2;18759:9;18755:18;18747:26;;18819:9;18813:4;18809:20;18805:1;18794:9;18790:17;18783:47;18847:131;18973:4;18847:131;:::i;:::-;18839:139;;18737:248;;;:::o;18991:419::-;;19195:2;19184:9;19180:18;19172:26;;19244:9;19238:4;19234:20;19230:1;19219:9;19215:17;19208:47;19272:131;19398:4;19272:131;:::i;:::-;19264:139;;19162:248;;;:::o;19416:419::-;;19620:2;19609:9;19605:18;19597:26;;19669:9;19663:4;19659:20;19655:1;19644:9;19640:17;19633:47;19697:131;19823:4;19697:131;:::i;:::-;19689:139;;19587:248;;;:::o;19841:419::-;;20045:2;20034:9;20030:18;20022:26;;20094:9;20088:4;20084:20;20080:1;20069:9;20065:17;20058:47;20122:131;20248:4;20122:131;:::i;:::-;20114:139;;20012:248;;;:::o;20266:222::-;;20397:2;20386:9;20382:18;20374:26;;20410:71;20478:1;20467:9;20463:17;20454:6;20410:71;:::i;:::-;20364:124;;;;:::o;20494:831::-;;20795:3;20784:9;20780:19;20772:27;;20809:71;20877:1;20866:9;20862:17;20853:6;20809:71;:::i;:::-;20890:80;20966:2;20955:9;20951:18;20942:6;20890:80;:::i;:::-;21017:9;21011:4;21007:20;21002:2;20991:9;20987:18;20980:48;21045:108;21148:4;21139:6;21045:108;:::i;:::-;21037:116;;21163:72;21231:2;21220:9;21216:18;21207:6;21163:72;:::i;:::-;21245:73;21313:3;21302:9;21298:19;21289:6;21245:73;:::i;:::-;20762:563;;;;;;;;:::o;21331:442::-;;21518:2;21507:9;21503:18;21495:26;;21531:71;21599:1;21588:9;21584:17;21575:6;21531:71;:::i;:::-;21612:72;21680:2;21669:9;21665:18;21656:6;21612:72;:::i;:::-;21694;21762:2;21751:9;21747:18;21738:6;21694:72;:::i;:::-;21485:288;;;;;;:::o;21779:214::-;;21906:2;21895:9;21891:18;21883:26;;21919:67;21983:1;21972:9;21968:17;21959:6;21919:67;:::i;:::-;21873:120;;;;:::o;21999:132::-;;22089:3;22081:11;;22119:4;22114:3;22110:14;22102:22;;22071:60;;;:::o;22137:114::-;;22238:5;22232:12;22222:22;;22211:40;;;:::o;22257:99::-;;22343:5;22337:12;22327:22;;22316:40;;;:::o;22362:113::-;;22464:4;22459:3;22455:14;22447:22;;22437:38;;;:::o;22481:184::-;;22614:6;22609:3;22602:19;22654:4;22649:3;22645:14;22630:29;;22592:73;;;;:::o;22671:169::-;;22789:6;22784:3;22777:19;22829:4;22824:3;22820:14;22805:29;;22767:73;;;;:::o;22846:305::-;;22905:20;22923:1;22905:20;:::i;:::-;22900:25;;22939:20;22957:1;22939:20;:::i;:::-;22934:25;;23093:1;23025:66;23021:74;23018:1;23015:81;23012:2;;;23099:18;;:::i;:::-;23012:2;23143:1;23140;23136:9;23129:16;;22890:261;;;;:::o;23157:185::-;;23214:20;23232:1;23214:20;:::i;:::-;23209:25;;23248:20;23266:1;23248:20;:::i;:::-;23243:25;;23287:1;23277:2;;23292:18;;:::i;:::-;23277:2;23334:1;23331;23327:9;23322:14;;23199:143;;;;:::o;23348:348::-;;23411:20;23429:1;23411:20;:::i;:::-;23406:25;;23445:20;23463:1;23445:20;:::i;:::-;23440:25;;23633:1;23565:66;23561:74;23558:1;23555:81;23550:1;23543:9;23536:17;23532:105;23529:2;;;23640:18;;:::i;:::-;23529:2;23688:1;23685;23681:9;23670:20;;23396:300;;;;:::o;23702:191::-;;23762:20;23780:1;23762:20;:::i;:::-;23757:25;;23796:20;23814:1;23796:20;:::i;:::-;23791:25;;23835:1;23832;23829:8;23826:2;;;23840:18;;:::i;:::-;23826:2;23885:1;23882;23878:9;23870:17;;23747:146;;;;:::o;23899:96::-;;23965:24;23983:5;23965:24;:::i;:::-;23954:35;;23944:51;;;:::o;24001:90::-;;24078:5;24071:13;24064:21;24053:32;;24043:48;;;:::o;24097:126::-;;24174:42;24167:5;24163:54;24152:65;;24142:81;;;:::o;24229:77::-;;24295:5;24284:16;;24274:32;;;:::o;24312:86::-;;24387:4;24380:5;24376:16;24365:27;;24355:43;;;:::o;24404:178::-;;24513:63;24570:5;24513:63;:::i;:::-;24500:76;;24490:92;;;:::o;24588:139::-;;24697:24;24715:5;24697:24;:::i;:::-;24684:37;;24674:53;;;:::o;24733:121::-;;24824:24;24842:5;24824:24;:::i;:::-;24811:37;;24801:53;;;:::o;24860:307::-;24928:1;24938:113;24952:6;24949:1;24946:13;24938:113;;;25037:1;25032:3;25028:11;25022:18;25018:1;25013:3;25009:11;25002:39;24974:2;24971:1;24967:10;24962:15;;24938:113;;;25069:6;25066:1;25063:13;25060:2;;;25149:1;25140:6;25135:3;25131:16;25124:27;25060:2;24909:258;;;;:::o;25173:320::-;;25254:1;25248:4;25244:12;25234:22;;25301:1;25295:4;25291:12;25322:18;25312:2;;25378:4;25370:6;25366:17;25356:27;;25312:2;25440;25432:6;25429:14;25409:18;25406:38;25403:2;;;25459:18;;:::i;:::-;25403:2;25224:269;;;;:::o;25499:180::-;25547:77;25544:1;25537:88;25644:4;25641:1;25634:15;25668:4;25665:1;25658:15;25685:180;25733:77;25730:1;25723:88;25830:4;25827:1;25820:15;25854:4;25851:1;25844:15;25871:180;25919:77;25916:1;25909:88;26016:4;26013:1;26006:15;26040:4;26037:1;26030:15;26057:102;;26149:2;26145:7;26140:2;26133:5;26129:14;26125:28;26115:38;;26105:54;;;:::o;26165:122::-;26238:24;26256:5;26238:24;:::i;:::-;26231:5;26228:35;26218:2;;26277:1;26274;26267:12;26218:2;26208:79;:::o;26293:116::-;26363:21;26378:5;26363:21;:::i;:::-;26356:5;26353:32;26343:2;;26399:1;26396;26389:12;26343:2;26333:76;:::o;26415:122::-;26488:24;26506:5;26488:24;:::i;:::-;26481:5;26478:35;26468:2;;26527:1;26524;26517:12;26468:2;26458:79;:::o

Swarm Source

ipfs://890ff52ff2bdbf97dbd92fd786d46ce2087f2f07b104b0fd024fe861e498c58b
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading