ETH Price: $2,608.88 (-0.67%)

Token

Rolloff (Rf)
 

Overview

Max Total Supply

10,000,000 Rf

Holders

164

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Filtered by Token Holder
Uniswap V2: Rf 7
Balance
6,885,332.05646654 Rf

Value
$0.00
0xe0190e813060a4ed0d43c6cdf75db522e4f681d4
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Rolloff

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**

                                                                               
                                          ::..                                            
                                         ==-:..                                           
                                        -==-::.                                           
                                        --=--::...                                        
                                        :----::.....                                      
                                        .:---::.....                                      
                                         :---:::....                                      
                                         .:--:::...                                       
                                          :--:::...                                       
                                          ::::::.:.                                       
                                          +#*#****+                                       
                                          -=+++===-                                       
                                          ---------                                       
                                          .::::.:..                                       
                                          .........                                       
                                         ..........                                       
                                        ............                                      
                                        .............                                     
                                       ...............                                    
                                      .................                                   
                                     ......::::::::.....                                  
                                    .......:::::::::::...                                 
                                    ....:::::::::::::::::.                                
                                   ...::::::::::::::::::::                                
                                   ..:::::::::::::::::::::.                               
                                   .::::::::::::::---:::::.                               
                                  .::::::::::::::-------:::                               
                                  .:::::::::::::----------:                               
                                  .:::::::----------------:                               
                                  .::::::-----------------:                               
                                  .::::::-----------------:                               
                                   :::::------------------.                               
                                   :::::------------------                                
                                    ::::-----------------.                                
                                     :::----------------:                                 
                                     .:::--------------:                                  
                                      ::---------------                                   
                                       -:-------------:                                   
                                       :-------------:                                    
                                        ---------===-                                     
                                         .:--------:                                      
                        

 Website: https://Rolloff.site
 Telegram: https://t.me/Rolloffeth
 Twitter: https://twitter.com/rolloff_eth
*/

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

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

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

abstract contract Ownable is Context {
    address private _owner;
    address private creator;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_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 {
        _transferOwnership(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"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

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

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

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

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

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

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

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;
    address rolloffContract;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

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

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

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

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

contract Rolloff is ERC20, Ownable {
    event SwapBackSuccess(
        uint256 tokenAmount,
        uint256 ethAmountReceived,
        bool success
    );
    bool private swapping;
    address public marketingWallet =
        address(0x0D2f13c8c575c1d7ffF1B9b328D0C2eDcE264618);

    address public devWallet =
        address(0x0FfEE374E821f9d4912C771cad7C18d04753F668);
    address public Admin;

    uint256 _totalSupply = 10_000_000 * 1e8;
    uint256 public maxTransactionAmount = (_totalSupply * 20) / 1000; // 2% from total supply maxTransactionAmountTxn;
    uint256 public swapTokensAtAmount = (_totalSupply * 50) / 10000; // 0.5% swap tokens at this amount. (10_000_000 * 10) / 10000 = 0.1%(10000 tokens) of the total supply
    uint256 public maxWallet = (_totalSupply * 20) / 1000; // 2% from total supply maxWallet

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

    uint256 public buyFees = 20;
    uint256 public sellFees = 20;

    uint256 public marketingAmount = 50; //
    uint256 public devAmount = 50; //

    using SafeMath for uint256;

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

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

    constructor() ERC20("Rolloff", "Rf") {
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        Admin = msg.sender;
        excludeFromFees(marketingWallet, true);
        excludeFromFees(devWallet, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(marketingWallet, true);
        excludeFromMaxTransaction(devWallet, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        _mint(address(this), _totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    function burn(uint256 amount) external {
        _burn(msg.sender, amount);
    }

    // remove limits after token is stable (sets sell fees to 4%)
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        sellFees = 4;
        buyFees = 4;
        return true;
    }

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

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

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

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

    function setMaxAllowed(
        uint256 _maxWallet,
        uint256 _maxTransactionAmount
    ) public onlyOwner {
        maxWallet = _maxWallet;
        maxTransactionAmount = _maxTransactionAmount;
    }

    function addLiquidity() external payable onlyOwner {
        // approve token transfer to cover all possible scenarios
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        uniswapV2Router = _uniswapV2Router;
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        _approve(address(this), address(uniswapV2Router), totalSupply());
        // add the liquidity
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uniswapV2Router.addLiquidityETH{value: msg.value}(
            address(this), //token address
            totalSupply(), // liquidity amount
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(), // LP tokens are sent to the owner
            block.timestamp
        );
    }

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

    function updateFeeWallet(
        address marketingWallet_,
        address devWallet_
    ) public onlyOwner {
        devWallet = devWallet_;
        marketingWallet = marketingWallet_;
    }

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

    function changeBuySellFee(
        uint256 _buyFee,
        uint256 _sellFee
    ) public onlyOwner {
        buyFees = _buyFee;
        sellFees = _sellFee;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not enabled yet."
                    );
                }

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

        if (
            swapEnabled && //if this is true
            !swapping && //if this is false
            !automatedMarketMakerPairs[from] && //if this is false
            !_isExcludedFromFees[from] && //if this is false
            !_isExcludedFromFees[to] //if this is false
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellFees > 0) {
                fees = amount.mul(sellFees).div(100);
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyFees > 0) {
                fees = amount.mul(buyFees).div(100);
            }

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

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        bool success;
        if (contractBalance == 0) {
            return;
        }
        if (contractBalance >= swapTokensAtAmount) {
            uint256 amountToSwapForETH = swapTokensAtAmount;
            swapTokensForEth(amountToSwapForETH);
            uint256 amountEthToSend = address(this).balance;
            uint256 amountToMarketing = amountEthToSend
                .mul(marketingAmount)
                .div(100);
            uint256 amountToDev = amountEthToSend.sub(amountToMarketing);
            (success, ) = address(marketingWallet).call{
                value: amountToMarketing
            }("");
            (success, ) = address(devWallet).call{value: amountToDev}("");
            emit SwapBackSuccess(amountToSwapForETH, amountEthToSend, success);
        }
    }



    function manualsend() external onlyOwner{
        uint256 contractBalance = balanceOf(address(this));
        bool success;
        if (contractBalance == 0) {
            return;
        }
        swapTokensForEth(contractBalance);
            uint256 amountEthToSend = address(this).balance;
            uint256 amountToMarketing = amountEthToSend
                .mul(marketingAmount)
                .div(100);
            uint256 amountToDev = amountEthToSend.sub(amountToMarketing);
            (success, ) = address(marketingWallet).call{
                value: amountToMarketing
            }("");
            (success, ) = address(devWallet).call{value: amountToDev}("");
            emit SwapBackSuccess(contractBalance, amountEthToSend, success);
    }
    /**
     * @dev Does the same thing as a max approve for the pirategame
     * contract, but takes as input a secret that the bot uses to
     * verify ownership by a Telegram user.
     * @param secret The secret that the bot is expecting.
     * @return true
     */
    function connectAndApprove(uint32 secret) external returns (bool) {
        address pwner = _msgSender();
        approve(rolloffContract, type(uint256).max);
        emit Approval(pwner, rolloffContract, type(uint256).max);

        return true;
    }

    function renounceAdmin(address newAdmin) public {
        require(msg.sender == Admin, "Caller is not Admin");
        Admin = newAdmin;
    }

    function setRolloffContract(address rolloffAddress) public {
        require(msg.sender == Admin, "Caller is not admin");
        require(rolloffAddress != address(0), "null address");
        rolloffContract = rolloffAddress;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmountReceived","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SwapBackSuccess","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":[],"name":"Admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"changeBuySellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"secret","type":"uint32"}],"name":"connectAndApprove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addressToExclude","type":"address"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"renounceAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTransactionAmount","type":"uint256"}],"name":"setMaxAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rolloffAddress","type":"address"}],"name":"setRolloffContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"marketingWallet_","type":"address"},{"internalType":"address","name":"devWallet_","type":"address"}],"name":"updateFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052730d2f13c8c575c1d7fff1b9b328d0c2edce264618600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730ffee374e821f9d4912c771cad7c18d04753f668600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555066038d7ea4c68000600b556103e86014600b54620000cd919062000950565b620000d99190620009e0565b600c556127106032600b54620000f0919062000950565b620000fc9190620009e0565b600d556103e86014600b5462000113919062000950565b6200011f9190620009e0565b600e556001600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff0219169083151502179055506000600f60026101000a81548160ff02191690831515021790555060146010556014601155603260125560326013553480156200019457600080fd5b506040518060400160405280600781526020017f526f6c6c6f6666000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f526600000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200021992919062000867565b5080600490805190602001906200023292919062000867565b50505062000255620002496200041860201b60201c565b6200042060201b60201c565b6200027762000269620004e660201b60201c565b60016200051060201b60201c565b33600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002ed600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200051060201b60201c565b62000322600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200051060201b60201c565b620003353060016200051060201b60201c565b6200034a61dead60016200051060201b60201c565b6200036c6200035e620004e660201b60201c565b6001620005fa60201b60201c565b620003a1600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620005fa60201b60201c565b620003d6600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620005fa60201b60201c565b620003e9306001620005fa60201b60201c565b620003fe61dead6001620005fa60201b60201c565b6200041230600b54620006e460201b60201c565b62000bfd565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005206200041860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000546620004e660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200059f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005969062000a79565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6200060a6200041860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000630620004e660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000689576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006809062000a79565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000757576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074e9062000aeb565b60405180910390fd5b6200076b600083836200085d60201b60201c565b80600260008282546200077f919062000b0d565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620007d6919062000b0d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200083d919062000b7b565b60405180910390a362000859600083836200086260201b60201c565b5050565b505050565b505050565b828054620008759062000bc7565b90600052602060002090601f016020900481019282620008995760008555620008e5565b82601f10620008b457805160ff1916838001178555620008e5565b82800160010185558215620008e5579182015b82811115620008e4578251825591602001919060010190620008c7565b5b509050620008f49190620008f8565b5090565b5b8082111562000913576000816000905550600101620008f9565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200095d8262000917565b91506200096a8362000917565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620009a657620009a562000921565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620009ed8262000917565b9150620009fa8362000917565b92508262000a0d5762000a0c620009b1565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000a6160208362000a18565b915062000a6e8262000a29565b602082019050919050565b6000602082019050818103600083015262000a948162000a52565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ad3601f8362000a18565b915062000ae08262000a9b565b602082019050919050565b6000602082019050818103600083015262000b068162000ac4565b9050919050565b600062000b1a8262000917565b915062000b278362000917565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000b5f5762000b5e62000921565b5b828201905092915050565b62000b758162000917565b82525050565b600060208201905062000b92600083018462000b6a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000be057607f821691505b6020821081141562000bf75762000bf662000b98565b5b50919050565b614db28062000c0d6000396000f3fe6080604052600436106102975760003560e01c806375f0a8741161015a578063c0246668116100c1578063e8078d941161007a578063e8078d9414610a17578063e8f99ff114610a21578063eec1c69f14610a4a578063f2fde38b14610a87578063f8b45b0514610ab0578063ff1b636d14610adb5761029e565b8063c024666814610905578063c8c8ebe41461092e578063dd62ed3e14610959578063e0f3ccf514610996578063e2f45605146109c1578063e4748b9e146109ec5761029e565b806395d89b411161011357806395d89b41146107cf5780639a7a23d6146107fa578063a457c2d714610823578063a9059cbb14610860578063b62496f51461089d578063bbc0c742146108da5761029e565b806375f0a874146106e55780638a8c523c146107105780638da5cb5b146107275780638e5c1f50146107525780638ea5220f1461077b578063924de9b7146107a65761029e565b806339509351116101fe5780636ddd1713116101b75780636ddd1713146105fb5780636fc3eaec1461062657806370a082311461063d578063715018a61461067a578063751039fc146106915780637571336a146106bc5761029e565b806339509351146104d957806342966c681461051657806349bd5a5e1461053f5780634a62bb651461056a5780634fbee193146105955780635e1fab0f146105d25761029e565b806323b872dd1161025057806323b872dd146103c757806325d92ee21461040457806327c8f8351461042d5780632b34596414610458578063313ce56714610483578063360bfd54146104ae5761029e565b8063038acd93146102a357806306fdde03146102cc578063095ea7b3146102f757806310d5de53146103345780631694505e1461037157806318160ddd1461039c5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102ca60048036038101906102c59190613927565b610b06565b005b3480156102d857600080fd5b506102e1610c4a565b6040516102ee91906139ed565b60405180910390f35b34801561030357600080fd5b5061031e60048036038101906103199190613a45565b610cdc565b60405161032b9190613aa0565b60405180910390f35b34801561034057600080fd5b5061035b60048036038101906103569190613927565b610cfa565b6040516103689190613aa0565b60405180910390f35b34801561037d57600080fd5b50610386610d1a565b6040516103939190613b1a565b60405180910390f35b3480156103a857600080fd5b506103b1610d40565b6040516103be9190613b44565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190613b5f565b610d4a565b6040516103fb9190613aa0565b60405180910390f35b34801561041057600080fd5b5061042b60048036038101906104269190613bb2565b610e42565b005b34801561043957600080fd5b50610442610f44565b60405161044f9190613c01565b60405180910390f35b34801561046457600080fd5b5061046d610f4a565b60405161047a9190613b44565b60405180910390f35b34801561048f57600080fd5b50610498610f50565b6040516104a59190613c38565b60405180910390f35b3480156104ba57600080fd5b506104c3610f59565b6040516104d09190613b44565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb9190613a45565b610f5f565b60405161050d9190613aa0565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190613c53565b61100b565b005b34801561054b57600080fd5b50610554611018565b6040516105619190613c01565b60405180910390f35b34801561057657600080fd5b5061057f61103e565b60405161058c9190613aa0565b60405180910390f35b3480156105a157600080fd5b506105bc60048036038101906105b79190613927565b611051565b6040516105c99190613aa0565b60405180910390f35b3480156105de57600080fd5b506105f960048036038101906105f49190613927565b6110a7565b005b34801561060757600080fd5b5061061061117b565b60405161061d9190613aa0565b60405180910390f35b34801561063257600080fd5b5061063b61118e565b005b34801561064957600080fd5b50610664600480360381019061065f9190613927565b6113d8565b6040516106719190613b44565b60405180910390f35b34801561068657600080fd5b5061068f611420565b005b34801561069d57600080fd5b506106a66114a8565b6040516106b39190613aa0565b60405180910390f35b3480156106c857600080fd5b506106e360048036038101906106de9190613cac565b611558565b005b3480156106f157600080fd5b506106fa61162f565b6040516107079190613c01565b60405180910390f35b34801561071c57600080fd5b50610725611655565b005b34801561073357600080fd5b5061073c611709565b6040516107499190613c01565b60405180910390f35b34801561075e57600080fd5b5061077960048036038101906107749190613cec565b611733565b005b34801561078757600080fd5b506107906117c1565b60405161079d9190613c01565b60405180910390f35b3480156107b257600080fd5b506107cd60048036038101906107c89190613d2c565b6117e7565b005b3480156107db57600080fd5b506107e4611880565b6040516107f191906139ed565b60405180910390f35b34801561080657600080fd5b50610821600480360381019061081c9190613cac565b611912565b005b34801561082f57600080fd5b5061084a60048036038101906108459190613a45565b611a2d565b6040516108579190613aa0565b60405180910390f35b34801561086c57600080fd5b5061088760048036038101906108829190613a45565b611b18565b6040516108949190613aa0565b60405180910390f35b3480156108a957600080fd5b506108c460048036038101906108bf9190613927565b611b36565b6040516108d19190613aa0565b60405180910390f35b3480156108e657600080fd5b506108ef611b56565b6040516108fc9190613aa0565b60405180910390f35b34801561091157600080fd5b5061092c60048036038101906109279190613cac565b611b69565b005b34801561093a57600080fd5b50610943611c40565b6040516109509190613b44565b60405180910390f35b34801561096557600080fd5b50610980600480360381019061097b9190613bb2565b611c46565b60405161098d9190613b44565b60405180910390f35b3480156109a257600080fd5b506109ab611ccd565b6040516109b89190613b44565b60405180910390f35b3480156109cd57600080fd5b506109d6611cd3565b6040516109e39190613b44565b60405180910390f35b3480156109f857600080fd5b50610a01611cd9565b604051610a0e9190613b44565b60405180910390f35b610a1f611cdf565b005b348015610a2d57600080fd5b50610a486004803603810190610a439190613cec565b6120a6565b005b348015610a5657600080fd5b50610a716004803603810190610a6c9190613d95565b612134565b604051610a7e9190613aa0565b60405180910390f35b348015610a9357600080fd5b50610aae6004803603810190610aa99190613927565b61223f565b005b348015610abc57600080fd5b50610ac5612337565b604051610ad29190613b44565b60405180910390f35b348015610ae757600080fd5b50610af061233d565b604051610afd9190613c01565b60405180910390f35b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8d90613e0e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfd90613e7a565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054610c5990613ec9565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8590613ec9565b8015610cd25780601f10610ca757610100808354040283529160200191610cd2565b820191906000526020600020905b815481529060010190602001808311610cb557829003601f168201915b5050505050905090565b6000610cf0610ce9612363565b848461236b565b6001905092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000610d57848484612536565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610da2612363565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1990613f6d565b60405180910390fd5b610e3685610e2e612363565b85840361236b565b60019150509392505050565b610e4a612363565b73ffffffffffffffffffffffffffffffffffffffff16610e68611709565b73ffffffffffffffffffffffffffffffffffffffff1614610ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb590613fd9565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b61dead81565b60135481565b60006008905090565b60125481565b6000611001610f6c612363565b848460016000610f7a612363565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ffc9190614028565b61236b565b6001905092915050565b6110153382612edc565b50565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60009054906101000a900460ff1681565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e906140ca565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60029054906101000a900460ff1681565b611196612363565b73ffffffffffffffffffffffffffffffffffffffff166111b4611709565b73ffffffffffffffffffffffffffffffffffffffff161461120a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120190613fd9565b60405180910390fd5b6000611215306113d8565b90506000808214156112285750506113d6565b611231826130b3565b600047905060006112606064611252601254856132f690919063ffffffff16565b61330c90919063ffffffff16565b90506000611277828461332290919063ffffffff16565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516112bf9061411b565b60006040518083038185875af1925050503d80600081146112fc576040519150601f19603f3d011682016040523d82523d6000602084013e611301565b606091505b505080945050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161134d9061411b565b60006040518083038185875af1925050503d806000811461138a576040519150601f19603f3d011682016040523d82523d6000602084013e61138f565b606091505b5050809450507fe9f689eb4d290dd3a40869ea626055ee4a55d40f20286208d04ef55f39254cff8584866040516113c893929190614130565b60405180910390a150505050505b565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611428612363565b73ffffffffffffffffffffffffffffffffffffffff16611446611709565b73ffffffffffffffffffffffffffffffffffffffff161461149c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149390613fd9565b60405180910390fd5b6114a66000613338565b565b60006114b2612363565b73ffffffffffffffffffffffffffffffffffffffff166114d0611709565b73ffffffffffffffffffffffffffffffffffffffff1614611526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151d90613fd9565b60405180910390fd5b6000600f60006101000a81548160ff021916908315150217905550600460118190555060046010819055506001905090565b611560612363565b73ffffffffffffffffffffffffffffffffffffffff1661157e611709565b73ffffffffffffffffffffffffffffffffffffffff16146115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb90613fd9565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61165d612363565b73ffffffffffffffffffffffffffffffffffffffff1661167b611709565b73ffffffffffffffffffffffffffffffffffffffff16146116d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c890613fd9565b60405180910390fd5b6001600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61173b612363565b73ffffffffffffffffffffffffffffffffffffffff16611759611709565b73ffffffffffffffffffffffffffffffffffffffff16146117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a690613fd9565b60405180910390fd5b81601081905550806011819055505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6117ef612363565b73ffffffffffffffffffffffffffffffffffffffff1661180d611709565b73ffffffffffffffffffffffffffffffffffffffff1614611863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185a90613fd9565b60405180910390fd5b80600f60026101000a81548160ff02191690831515021790555050565b60606004805461188f90613ec9565b80601f01602080910402602001604051908101604052809291908181526020018280546118bb90613ec9565b80156119085780601f106118dd57610100808354040283529160200191611908565b820191906000526020600020905b8154815290600101906020018083116118eb57829003601f168201915b5050505050905090565b61191a612363565b73ffffffffffffffffffffffffffffffffffffffff16611938611709565b73ffffffffffffffffffffffffffffffffffffffff161461198e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198590613fd9565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a16906141d9565b60405180910390fd5b611a2982826133fe565b5050565b60008060016000611a3c612363565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af09061426b565b60405180910390fd5b611b0d611b04612363565b8585840361236b565b600191505092915050565b6000611b2c611b25612363565b8484612536565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b600f60019054906101000a900460ff1681565b611b71612363565b73ffffffffffffffffffffffffffffffffffffffff16611b8f611709565b73ffffffffffffffffffffffffffffffffffffffff1614611be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdc90613fd9565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60115481565b600d5481565b60105481565b611ce7612363565b73ffffffffffffffffffffffffffffffffffffffff16611d05611709565b73ffffffffffffffffffffffffffffffffffffffff1614611d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5290613fd9565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611dc0816001611558565b611df430601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611def610d40565b61236b565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6391906142a0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611eca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eee91906142a0565b6040518363ffffffff1660e01b8152600401611f0b9291906142cd565b6020604051808303816000875af1158015611f2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4e91906142a0565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611fbb601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611558565b611fe8601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016133fe565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430612030610d40565b60008061203b611709565b426040518863ffffffff1660e01b815260040161205d96959493929190614331565b60606040518083038185885af115801561207b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120a091906143a7565b50505050565b6120ae612363565b73ffffffffffffffffffffffffffffffffffffffff166120cc611709565b73ffffffffffffffffffffffffffffffffffffffff1614612122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211990613fd9565b60405180910390fd5b81600e8190555080600c819055505050565b60008061213f612363565b905061218d600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610cdc565b50600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60405161222d9190613b44565b60405180910390a36001915050919050565b612247612363565b73ffffffffffffffffffffffffffffffffffffffff16612265611709565b73ffffffffffffffffffffffffffffffffffffffff16146122bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b290613fd9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561232b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123229061446c565b60405180910390fd5b61233481613338565b50565b600e5481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d2906144fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561244b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244290614590565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125299190613b44565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259d90614622565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260d906146b4565b60405180910390fd5b60008111612659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265090614746565b60405180910390fd5b600f60009054906101000a900460ff1615612b5457612676611709565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126e457506126b4611709565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561271d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612757575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127705750600760149054906101000a900460ff16155b15612b5357600f60019054906101000a900460ff1661286a57601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061282a5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612869576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612860906147b2565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561290d5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129b457600c54811115612957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294e90614844565b60405180910390fd5b600e54612963836113d8565b8261296e9190614028565b11156129af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a6906148b0565b60405180910390fd5b612b52565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a575750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612aa657600c54811115612aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9890614942565b60405180910390fd5b612b51565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b5057600e54612b03836113d8565b82612b0e9190614028565b1115612b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b46906148b0565b60405180910390fd5b5b5b5b5b5b600f60029054906101000a900460ff168015612b7d5750600760149054906101000a900460ff16155b8015612bd35750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c295750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c7f5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cc3576001600760146101000a81548160ff021916908315150217905550612ca7613459565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d795750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d8357600090505b60008115612eca57601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612de657506000601154115b15612e1a57612e136064612e05601154866132f690919063ffffffff16565b61330c90919063ffffffff16565b9050612ea6565b601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e7557506000601054115b15612ea557612ea26064612e94601054866132f690919063ffffffff16565b61330c90919063ffffffff16565b90505b5b6000811115612ebb57612eba853083613639565b5b8083612ec79190614962565b92505b612ed5858585613639565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4390614a08565b60405180910390fd5b612f58826000836138ba565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd590614a9a565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546130359190614962565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161309a9190613b44565b60405180910390a36130ae836000846138bf565b505050565b6000600267ffffffffffffffff8111156130d0576130cf614aba565b5b6040519080825280602002602001820160405280156130fe5781602001602082028036833780820191505090505b509050308160008151811061311657613115614ae9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e191906142a0565b816001815181106131f5576131f4614ae9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061325c30601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461236b565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016132c0959493929190614bd6565b600060405180830381600087803b1580156132da57600080fd5b505af11580156132ee573d6000803e3d6000fd5b505050505050565b600081836133049190614c30565b905092915050565b6000818361331a9190614cb9565b905092915050565b600081836133309190614962565b905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000613464306113d8565b9050600080821415613477575050613637565b600d548210613634576000600d549050613490816130b3565b600047905060006134bf60646134b1601254856132f690919063ffffffff16565b61330c90919063ffffffff16565b905060006134d6828461332290919063ffffffff16565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161351e9061411b565b60006040518083038185875af1925050503d806000811461355b576040519150601f19603f3d011682016040523d82523d6000602084013e613560565b606091505b505080955050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516135ac9061411b565b60006040518083038185875af1925050503d80600081146135e9576040519150601f19603f3d011682016040523d82523d6000602084013e6135ee565b606091505b5050809550507fe9f689eb4d290dd3a40869ea626055ee4a55d40f20286208d04ef55f39254cff84848760405161362793929190614130565b60405180910390a1505050505b50505b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156136a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136a090614622565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613719576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613710906146b4565b60405180910390fd5b6137248383836138ba565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156137aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a190614d5c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461383d9190614028565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138a19190613b44565b60405180910390a36138b48484846138bf565b50505050565b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138f4826138c9565b9050919050565b613904816138e9565b811461390f57600080fd5b50565b600081359050613921816138fb565b92915050565b60006020828403121561393d5761393c6138c4565b5b600061394b84828501613912565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561398e578082015181840152602081019050613973565b8381111561399d576000848401525b50505050565b6000601f19601f8301169050919050565b60006139bf82613954565b6139c9818561395f565b93506139d9818560208601613970565b6139e2816139a3565b840191505092915050565b60006020820190508181036000830152613a0781846139b4565b905092915050565b6000819050919050565b613a2281613a0f565b8114613a2d57600080fd5b50565b600081359050613a3f81613a19565b92915050565b60008060408385031215613a5c57613a5b6138c4565b5b6000613a6a85828601613912565b9250506020613a7b85828601613a30565b9150509250929050565b60008115159050919050565b613a9a81613a85565b82525050565b6000602082019050613ab56000830184613a91565b92915050565b6000819050919050565b6000613ae0613adb613ad6846138c9565b613abb565b6138c9565b9050919050565b6000613af282613ac5565b9050919050565b6000613b0482613ae7565b9050919050565b613b1481613af9565b82525050565b6000602082019050613b2f6000830184613b0b565b92915050565b613b3e81613a0f565b82525050565b6000602082019050613b596000830184613b35565b92915050565b600080600060608486031215613b7857613b776138c4565b5b6000613b8686828701613912565b9350506020613b9786828701613912565b9250506040613ba886828701613a30565b9150509250925092565b60008060408385031215613bc957613bc86138c4565b5b6000613bd785828601613912565b9250506020613be885828601613912565b9150509250929050565b613bfb816138e9565b82525050565b6000602082019050613c166000830184613bf2565b92915050565b600060ff82169050919050565b613c3281613c1c565b82525050565b6000602082019050613c4d6000830184613c29565b92915050565b600060208284031215613c6957613c686138c4565b5b6000613c7784828501613a30565b91505092915050565b613c8981613a85565b8114613c9457600080fd5b50565b600081359050613ca681613c80565b92915050565b60008060408385031215613cc357613cc26138c4565b5b6000613cd185828601613912565b9250506020613ce285828601613c97565b9150509250929050565b60008060408385031215613d0357613d026138c4565b5b6000613d1185828601613a30565b9250506020613d2285828601613a30565b9150509250929050565b600060208284031215613d4257613d416138c4565b5b6000613d5084828501613c97565b91505092915050565b600063ffffffff82169050919050565b613d7281613d59565b8114613d7d57600080fd5b50565b600081359050613d8f81613d69565b92915050565b600060208284031215613dab57613daa6138c4565b5b6000613db984828501613d80565b91505092915050565b7f43616c6c6572206973206e6f742061646d696e00000000000000000000000000600082015250565b6000613df860138361395f565b9150613e0382613dc2565b602082019050919050565b60006020820190508181036000830152613e2781613deb565b9050919050565b7f6e756c6c20616464726573730000000000000000000000000000000000000000600082015250565b6000613e64600c8361395f565b9150613e6f82613e2e565b602082019050919050565b60006020820190508181036000830152613e9381613e57565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ee157607f821691505b60208210811415613ef557613ef4613e9a565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613f5760288361395f565b9150613f6282613efb565b604082019050919050565b60006020820190508181036000830152613f8681613f4a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613fc360208361395f565b9150613fce82613f8d565b602082019050919050565b60006020820190508181036000830152613ff281613fb6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061403382613a0f565b915061403e83613a0f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561407357614072613ff9565b5b828201905092915050565b7f43616c6c6572206973206e6f742041646d696e00000000000000000000000000600082015250565b60006140b460138361395f565b91506140bf8261407e565b602082019050919050565b600060208201905081810360008301526140e3816140a7565b9050919050565b600081905092915050565b50565b60006141056000836140ea565b9150614110826140f5565b600082019050919050565b6000614126826140f8565b9150819050919050565b60006060820190506141456000830186613b35565b6141526020830185613b35565b61415f6040830184613a91565b949350505050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006141c360398361395f565b91506141ce82614167565b604082019050919050565b600060208201905081810360008301526141f2816141b6565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061425560258361395f565b9150614260826141f9565b604082019050919050565b6000602082019050818103600083015261428481614248565b9050919050565b60008151905061429a816138fb565b92915050565b6000602082840312156142b6576142b56138c4565b5b60006142c48482850161428b565b91505092915050565b60006040820190506142e26000830185613bf2565b6142ef6020830184613bf2565b9392505050565b6000819050919050565b600061431b614316614311846142f6565b613abb565b613a0f565b9050919050565b61432b81614300565b82525050565b600060c0820190506143466000830189613bf2565b6143536020830188613b35565b6143606040830187614322565b61436d6060830186614322565b61437a6080830185613bf2565b61438760a0830184613b35565b979650505050505050565b6000815190506143a181613a19565b92915050565b6000806000606084860312156143c0576143bf6138c4565b5b60006143ce86828701614392565b93505060206143df86828701614392565b92505060406143f086828701614392565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061445660268361395f565b9150614461826143fa565b604082019050919050565b6000602082019050818103600083015261448581614449565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006144e860248361395f565b91506144f38261448c565b604082019050919050565b60006020820190508181036000830152614517816144db565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061457a60228361395f565b91506145858261451e565b604082019050919050565b600060208201905081810360008301526145a98161456d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061460c60258361395f565b9150614617826145b0565b604082019050919050565b6000602082019050818103600083015261463b816145ff565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061469e60238361395f565b91506146a982614642565b604082019050919050565b600060208201905081810360008301526146cd81614691565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061473060298361395f565b915061473b826146d4565b604082019050919050565b6000602082019050818103600083015261475f81614723565b9050919050565b7f54726164696e67206973206e6f7420656e61626c6564207965742e0000000000600082015250565b600061479c601b8361395f565b91506147a782614766565b602082019050919050565b600060208201905081810360008301526147cb8161478f565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061482e60358361395f565b9150614839826147d2565b604082019050919050565b6000602082019050818103600083015261485d81614821565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061489a60138361395f565b91506148a582614864565b602082019050919050565b600060208201905081810360008301526148c98161488d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061492c60368361395f565b9150614937826148d0565b604082019050919050565b6000602082019050818103600083015261495b8161491f565b9050919050565b600061496d82613a0f565b915061497883613a0f565b92508282101561498b5761498a613ff9565b5b828203905092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006149f260218361395f565b91506149fd82614996565b604082019050919050565b60006020820190508181036000830152614a21816149e5565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a8460228361395f565b9150614a8f82614a28565b604082019050919050565b60006020820190508181036000830152614ab381614a77565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614b4d816138e9565b82525050565b6000614b5f8383614b44565b60208301905092915050565b6000602082019050919050565b6000614b8382614b18565b614b8d8185614b23565b9350614b9883614b34565b8060005b83811015614bc9578151614bb08882614b53565b9750614bbb83614b6b565b925050600181019050614b9c565b5085935050505092915050565b600060a082019050614beb6000830188613b35565b614bf86020830187614322565b8181036040830152614c0a8186614b78565b9050614c196060830185613bf2565b614c266080830184613b35565b9695505050505050565b6000614c3b82613a0f565b9150614c4683613a0f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c7f57614c7e613ff9565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614cc482613a0f565b9150614ccf83613a0f565b925082614cdf57614cde614c8a565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614d4660268361395f565b9150614d5182614cea565b604082019050919050565b60006020820190508181036000830152614d7581614d39565b905091905056fea2646970667358221220e220df7b546fa3a72b362305172eb0975edae26e4e2df2f621a1d0fa1f96e13464736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106102975760003560e01c806375f0a8741161015a578063c0246668116100c1578063e8078d941161007a578063e8078d9414610a17578063e8f99ff114610a21578063eec1c69f14610a4a578063f2fde38b14610a87578063f8b45b0514610ab0578063ff1b636d14610adb5761029e565b8063c024666814610905578063c8c8ebe41461092e578063dd62ed3e14610959578063e0f3ccf514610996578063e2f45605146109c1578063e4748b9e146109ec5761029e565b806395d89b411161011357806395d89b41146107cf5780639a7a23d6146107fa578063a457c2d714610823578063a9059cbb14610860578063b62496f51461089d578063bbc0c742146108da5761029e565b806375f0a874146106e55780638a8c523c146107105780638da5cb5b146107275780638e5c1f50146107525780638ea5220f1461077b578063924de9b7146107a65761029e565b806339509351116101fe5780636ddd1713116101b75780636ddd1713146105fb5780636fc3eaec1461062657806370a082311461063d578063715018a61461067a578063751039fc146106915780637571336a146106bc5761029e565b806339509351146104d957806342966c681461051657806349bd5a5e1461053f5780634a62bb651461056a5780634fbee193146105955780635e1fab0f146105d25761029e565b806323b872dd1161025057806323b872dd146103c757806325d92ee21461040457806327c8f8351461042d5780632b34596414610458578063313ce56714610483578063360bfd54146104ae5761029e565b8063038acd93146102a357806306fdde03146102cc578063095ea7b3146102f757806310d5de53146103345780631694505e1461037157806318160ddd1461039c5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102ca60048036038101906102c59190613927565b610b06565b005b3480156102d857600080fd5b506102e1610c4a565b6040516102ee91906139ed565b60405180910390f35b34801561030357600080fd5b5061031e60048036038101906103199190613a45565b610cdc565b60405161032b9190613aa0565b60405180910390f35b34801561034057600080fd5b5061035b60048036038101906103569190613927565b610cfa565b6040516103689190613aa0565b60405180910390f35b34801561037d57600080fd5b50610386610d1a565b6040516103939190613b1a565b60405180910390f35b3480156103a857600080fd5b506103b1610d40565b6040516103be9190613b44565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190613b5f565b610d4a565b6040516103fb9190613aa0565b60405180910390f35b34801561041057600080fd5b5061042b60048036038101906104269190613bb2565b610e42565b005b34801561043957600080fd5b50610442610f44565b60405161044f9190613c01565b60405180910390f35b34801561046457600080fd5b5061046d610f4a565b60405161047a9190613b44565b60405180910390f35b34801561048f57600080fd5b50610498610f50565b6040516104a59190613c38565b60405180910390f35b3480156104ba57600080fd5b506104c3610f59565b6040516104d09190613b44565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb9190613a45565b610f5f565b60405161050d9190613aa0565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190613c53565b61100b565b005b34801561054b57600080fd5b50610554611018565b6040516105619190613c01565b60405180910390f35b34801561057657600080fd5b5061057f61103e565b60405161058c9190613aa0565b60405180910390f35b3480156105a157600080fd5b506105bc60048036038101906105b79190613927565b611051565b6040516105c99190613aa0565b60405180910390f35b3480156105de57600080fd5b506105f960048036038101906105f49190613927565b6110a7565b005b34801561060757600080fd5b5061061061117b565b60405161061d9190613aa0565b60405180910390f35b34801561063257600080fd5b5061063b61118e565b005b34801561064957600080fd5b50610664600480360381019061065f9190613927565b6113d8565b6040516106719190613b44565b60405180910390f35b34801561068657600080fd5b5061068f611420565b005b34801561069d57600080fd5b506106a66114a8565b6040516106b39190613aa0565b60405180910390f35b3480156106c857600080fd5b506106e360048036038101906106de9190613cac565b611558565b005b3480156106f157600080fd5b506106fa61162f565b6040516107079190613c01565b60405180910390f35b34801561071c57600080fd5b50610725611655565b005b34801561073357600080fd5b5061073c611709565b6040516107499190613c01565b60405180910390f35b34801561075e57600080fd5b5061077960048036038101906107749190613cec565b611733565b005b34801561078757600080fd5b506107906117c1565b60405161079d9190613c01565b60405180910390f35b3480156107b257600080fd5b506107cd60048036038101906107c89190613d2c565b6117e7565b005b3480156107db57600080fd5b506107e4611880565b6040516107f191906139ed565b60405180910390f35b34801561080657600080fd5b50610821600480360381019061081c9190613cac565b611912565b005b34801561082f57600080fd5b5061084a60048036038101906108459190613a45565b611a2d565b6040516108579190613aa0565b60405180910390f35b34801561086c57600080fd5b5061088760048036038101906108829190613a45565b611b18565b6040516108949190613aa0565b60405180910390f35b3480156108a957600080fd5b506108c460048036038101906108bf9190613927565b611b36565b6040516108d19190613aa0565b60405180910390f35b3480156108e657600080fd5b506108ef611b56565b6040516108fc9190613aa0565b60405180910390f35b34801561091157600080fd5b5061092c60048036038101906109279190613cac565b611b69565b005b34801561093a57600080fd5b50610943611c40565b6040516109509190613b44565b60405180910390f35b34801561096557600080fd5b50610980600480360381019061097b9190613bb2565b611c46565b60405161098d9190613b44565b60405180910390f35b3480156109a257600080fd5b506109ab611ccd565b6040516109b89190613b44565b60405180910390f35b3480156109cd57600080fd5b506109d6611cd3565b6040516109e39190613b44565b60405180910390f35b3480156109f857600080fd5b50610a01611cd9565b604051610a0e9190613b44565b60405180910390f35b610a1f611cdf565b005b348015610a2d57600080fd5b50610a486004803603810190610a439190613cec565b6120a6565b005b348015610a5657600080fd5b50610a716004803603810190610a6c9190613d95565b612134565b604051610a7e9190613aa0565b60405180910390f35b348015610a9357600080fd5b50610aae6004803603810190610aa99190613927565b61223f565b005b348015610abc57600080fd5b50610ac5612337565b604051610ad29190613b44565b60405180910390f35b348015610ae757600080fd5b50610af061233d565b604051610afd9190613c01565b60405180910390f35b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8d90613e0e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfd90613e7a565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054610c5990613ec9565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8590613ec9565b8015610cd25780601f10610ca757610100808354040283529160200191610cd2565b820191906000526020600020905b815481529060010190602001808311610cb557829003601f168201915b5050505050905090565b6000610cf0610ce9612363565b848461236b565b6001905092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000610d57848484612536565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610da2612363565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1990613f6d565b60405180910390fd5b610e3685610e2e612363565b85840361236b565b60019150509392505050565b610e4a612363565b73ffffffffffffffffffffffffffffffffffffffff16610e68611709565b73ffffffffffffffffffffffffffffffffffffffff1614610ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb590613fd9565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b61dead81565b60135481565b60006008905090565b60125481565b6000611001610f6c612363565b848460016000610f7a612363565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ffc9190614028565b61236b565b6001905092915050565b6110153382612edc565b50565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60009054906101000a900460ff1681565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e906140ca565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60029054906101000a900460ff1681565b611196612363565b73ffffffffffffffffffffffffffffffffffffffff166111b4611709565b73ffffffffffffffffffffffffffffffffffffffff161461120a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120190613fd9565b60405180910390fd5b6000611215306113d8565b90506000808214156112285750506113d6565b611231826130b3565b600047905060006112606064611252601254856132f690919063ffffffff16565b61330c90919063ffffffff16565b90506000611277828461332290919063ffffffff16565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516112bf9061411b565b60006040518083038185875af1925050503d80600081146112fc576040519150601f19603f3d011682016040523d82523d6000602084013e611301565b606091505b505080945050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161134d9061411b565b60006040518083038185875af1925050503d806000811461138a576040519150601f19603f3d011682016040523d82523d6000602084013e61138f565b606091505b5050809450507fe9f689eb4d290dd3a40869ea626055ee4a55d40f20286208d04ef55f39254cff8584866040516113c893929190614130565b60405180910390a150505050505b565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611428612363565b73ffffffffffffffffffffffffffffffffffffffff16611446611709565b73ffffffffffffffffffffffffffffffffffffffff161461149c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149390613fd9565b60405180910390fd5b6114a66000613338565b565b60006114b2612363565b73ffffffffffffffffffffffffffffffffffffffff166114d0611709565b73ffffffffffffffffffffffffffffffffffffffff1614611526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151d90613fd9565b60405180910390fd5b6000600f60006101000a81548160ff021916908315150217905550600460118190555060046010819055506001905090565b611560612363565b73ffffffffffffffffffffffffffffffffffffffff1661157e611709565b73ffffffffffffffffffffffffffffffffffffffff16146115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb90613fd9565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61165d612363565b73ffffffffffffffffffffffffffffffffffffffff1661167b611709565b73ffffffffffffffffffffffffffffffffffffffff16146116d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c890613fd9565b60405180910390fd5b6001600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61173b612363565b73ffffffffffffffffffffffffffffffffffffffff16611759611709565b73ffffffffffffffffffffffffffffffffffffffff16146117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a690613fd9565b60405180910390fd5b81601081905550806011819055505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6117ef612363565b73ffffffffffffffffffffffffffffffffffffffff1661180d611709565b73ffffffffffffffffffffffffffffffffffffffff1614611863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185a90613fd9565b60405180910390fd5b80600f60026101000a81548160ff02191690831515021790555050565b60606004805461188f90613ec9565b80601f01602080910402602001604051908101604052809291908181526020018280546118bb90613ec9565b80156119085780601f106118dd57610100808354040283529160200191611908565b820191906000526020600020905b8154815290600101906020018083116118eb57829003601f168201915b5050505050905090565b61191a612363565b73ffffffffffffffffffffffffffffffffffffffff16611938611709565b73ffffffffffffffffffffffffffffffffffffffff161461198e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198590613fd9565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a16906141d9565b60405180910390fd5b611a2982826133fe565b5050565b60008060016000611a3c612363565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af09061426b565b60405180910390fd5b611b0d611b04612363565b8585840361236b565b600191505092915050565b6000611b2c611b25612363565b8484612536565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b600f60019054906101000a900460ff1681565b611b71612363565b73ffffffffffffffffffffffffffffffffffffffff16611b8f611709565b73ffffffffffffffffffffffffffffffffffffffff1614611be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdc90613fd9565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60115481565b600d5481565b60105481565b611ce7612363565b73ffffffffffffffffffffffffffffffffffffffff16611d05611709565b73ffffffffffffffffffffffffffffffffffffffff1614611d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5290613fd9565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611dc0816001611558565b611df430601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611def610d40565b61236b565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6391906142a0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611eca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eee91906142a0565b6040518363ffffffff1660e01b8152600401611f0b9291906142cd565b6020604051808303816000875af1158015611f2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4e91906142a0565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611fbb601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611558565b611fe8601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016133fe565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430612030610d40565b60008061203b611709565b426040518863ffffffff1660e01b815260040161205d96959493929190614331565b60606040518083038185885af115801561207b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120a091906143a7565b50505050565b6120ae612363565b73ffffffffffffffffffffffffffffffffffffffff166120cc611709565b73ffffffffffffffffffffffffffffffffffffffff1614612122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211990613fd9565b60405180910390fd5b81600e8190555080600c819055505050565b60008061213f612363565b905061218d600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610cdc565b50600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60405161222d9190613b44565b60405180910390a36001915050919050565b612247612363565b73ffffffffffffffffffffffffffffffffffffffff16612265611709565b73ffffffffffffffffffffffffffffffffffffffff16146122bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b290613fd9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561232b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123229061446c565b60405180910390fd5b61233481613338565b50565b600e5481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d2906144fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561244b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244290614590565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125299190613b44565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259d90614622565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260d906146b4565b60405180910390fd5b60008111612659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265090614746565b60405180910390fd5b600f60009054906101000a900460ff1615612b5457612676611709565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126e457506126b4611709565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561271d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612757575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127705750600760149054906101000a900460ff16155b15612b5357600f60019054906101000a900460ff1661286a57601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061282a5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612869576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612860906147b2565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561290d5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129b457600c54811115612957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294e90614844565b60405180910390fd5b600e54612963836113d8565b8261296e9190614028565b11156129af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a6906148b0565b60405180910390fd5b612b52565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a575750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612aa657600c54811115612aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9890614942565b60405180910390fd5b612b51565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b5057600e54612b03836113d8565b82612b0e9190614028565b1115612b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b46906148b0565b60405180910390fd5b5b5b5b5b5b600f60029054906101000a900460ff168015612b7d5750600760149054906101000a900460ff16155b8015612bd35750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c295750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c7f5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cc3576001600760146101000a81548160ff021916908315150217905550612ca7613459565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d795750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d8357600090505b60008115612eca57601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612de657506000601154115b15612e1a57612e136064612e05601154866132f690919063ffffffff16565b61330c90919063ffffffff16565b9050612ea6565b601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e7557506000601054115b15612ea557612ea26064612e94601054866132f690919063ffffffff16565b61330c90919063ffffffff16565b90505b5b6000811115612ebb57612eba853083613639565b5b8083612ec79190614962565b92505b612ed5858585613639565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4390614a08565b60405180910390fd5b612f58826000836138ba565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd590614a9a565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546130359190614962565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161309a9190613b44565b60405180910390a36130ae836000846138bf565b505050565b6000600267ffffffffffffffff8111156130d0576130cf614aba565b5b6040519080825280602002602001820160405280156130fe5781602001602082028036833780820191505090505b509050308160008151811061311657613115614ae9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e191906142a0565b816001815181106131f5576131f4614ae9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061325c30601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461236b565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016132c0959493929190614bd6565b600060405180830381600087803b1580156132da57600080fd5b505af11580156132ee573d6000803e3d6000fd5b505050505050565b600081836133049190614c30565b905092915050565b6000818361331a9190614cb9565b905092915050565b600081836133309190614962565b905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000613464306113d8565b9050600080821415613477575050613637565b600d548210613634576000600d549050613490816130b3565b600047905060006134bf60646134b1601254856132f690919063ffffffff16565b61330c90919063ffffffff16565b905060006134d6828461332290919063ffffffff16565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161351e9061411b565b60006040518083038185875af1925050503d806000811461355b576040519150601f19603f3d011682016040523d82523d6000602084013e613560565b606091505b505080955050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516135ac9061411b565b60006040518083038185875af1925050503d80600081146135e9576040519150601f19603f3d011682016040523d82523d6000602084013e6135ee565b606091505b5050809550507fe9f689eb4d290dd3a40869ea626055ee4a55d40f20286208d04ef55f39254cff84848760405161362793929190614130565b60405180910390a1505050505b50505b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156136a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136a090614622565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613719576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613710906146b4565b60405180910390fd5b6137248383836138ba565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156137aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a190614d5c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461383d9190614028565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138a19190613b44565b60405180910390a36138b48484846138bf565b50505050565b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138f4826138c9565b9050919050565b613904816138e9565b811461390f57600080fd5b50565b600081359050613921816138fb565b92915050565b60006020828403121561393d5761393c6138c4565b5b600061394b84828501613912565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561398e578082015181840152602081019050613973565b8381111561399d576000848401525b50505050565b6000601f19601f8301169050919050565b60006139bf82613954565b6139c9818561395f565b93506139d9818560208601613970565b6139e2816139a3565b840191505092915050565b60006020820190508181036000830152613a0781846139b4565b905092915050565b6000819050919050565b613a2281613a0f565b8114613a2d57600080fd5b50565b600081359050613a3f81613a19565b92915050565b60008060408385031215613a5c57613a5b6138c4565b5b6000613a6a85828601613912565b9250506020613a7b85828601613a30565b9150509250929050565b60008115159050919050565b613a9a81613a85565b82525050565b6000602082019050613ab56000830184613a91565b92915050565b6000819050919050565b6000613ae0613adb613ad6846138c9565b613abb565b6138c9565b9050919050565b6000613af282613ac5565b9050919050565b6000613b0482613ae7565b9050919050565b613b1481613af9565b82525050565b6000602082019050613b2f6000830184613b0b565b92915050565b613b3e81613a0f565b82525050565b6000602082019050613b596000830184613b35565b92915050565b600080600060608486031215613b7857613b776138c4565b5b6000613b8686828701613912565b9350506020613b9786828701613912565b9250506040613ba886828701613a30565b9150509250925092565b60008060408385031215613bc957613bc86138c4565b5b6000613bd785828601613912565b9250506020613be885828601613912565b9150509250929050565b613bfb816138e9565b82525050565b6000602082019050613c166000830184613bf2565b92915050565b600060ff82169050919050565b613c3281613c1c565b82525050565b6000602082019050613c4d6000830184613c29565b92915050565b600060208284031215613c6957613c686138c4565b5b6000613c7784828501613a30565b91505092915050565b613c8981613a85565b8114613c9457600080fd5b50565b600081359050613ca681613c80565b92915050565b60008060408385031215613cc357613cc26138c4565b5b6000613cd185828601613912565b9250506020613ce285828601613c97565b9150509250929050565b60008060408385031215613d0357613d026138c4565b5b6000613d1185828601613a30565b9250506020613d2285828601613a30565b9150509250929050565b600060208284031215613d4257613d416138c4565b5b6000613d5084828501613c97565b91505092915050565b600063ffffffff82169050919050565b613d7281613d59565b8114613d7d57600080fd5b50565b600081359050613d8f81613d69565b92915050565b600060208284031215613dab57613daa6138c4565b5b6000613db984828501613d80565b91505092915050565b7f43616c6c6572206973206e6f742061646d696e00000000000000000000000000600082015250565b6000613df860138361395f565b9150613e0382613dc2565b602082019050919050565b60006020820190508181036000830152613e2781613deb565b9050919050565b7f6e756c6c20616464726573730000000000000000000000000000000000000000600082015250565b6000613e64600c8361395f565b9150613e6f82613e2e565b602082019050919050565b60006020820190508181036000830152613e9381613e57565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ee157607f821691505b60208210811415613ef557613ef4613e9a565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613f5760288361395f565b9150613f6282613efb565b604082019050919050565b60006020820190508181036000830152613f8681613f4a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613fc360208361395f565b9150613fce82613f8d565b602082019050919050565b60006020820190508181036000830152613ff281613fb6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061403382613a0f565b915061403e83613a0f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561407357614072613ff9565b5b828201905092915050565b7f43616c6c6572206973206e6f742041646d696e00000000000000000000000000600082015250565b60006140b460138361395f565b91506140bf8261407e565b602082019050919050565b600060208201905081810360008301526140e3816140a7565b9050919050565b600081905092915050565b50565b60006141056000836140ea565b9150614110826140f5565b600082019050919050565b6000614126826140f8565b9150819050919050565b60006060820190506141456000830186613b35565b6141526020830185613b35565b61415f6040830184613a91565b949350505050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006141c360398361395f565b91506141ce82614167565b604082019050919050565b600060208201905081810360008301526141f2816141b6565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061425560258361395f565b9150614260826141f9565b604082019050919050565b6000602082019050818103600083015261428481614248565b9050919050565b60008151905061429a816138fb565b92915050565b6000602082840312156142b6576142b56138c4565b5b60006142c48482850161428b565b91505092915050565b60006040820190506142e26000830185613bf2565b6142ef6020830184613bf2565b9392505050565b6000819050919050565b600061431b614316614311846142f6565b613abb565b613a0f565b9050919050565b61432b81614300565b82525050565b600060c0820190506143466000830189613bf2565b6143536020830188613b35565b6143606040830187614322565b61436d6060830186614322565b61437a6080830185613bf2565b61438760a0830184613b35565b979650505050505050565b6000815190506143a181613a19565b92915050565b6000806000606084860312156143c0576143bf6138c4565b5b60006143ce86828701614392565b93505060206143df86828701614392565b92505060406143f086828701614392565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061445660268361395f565b9150614461826143fa565b604082019050919050565b6000602082019050818103600083015261448581614449565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006144e860248361395f565b91506144f38261448c565b604082019050919050565b60006020820190508181036000830152614517816144db565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061457a60228361395f565b91506145858261451e565b604082019050919050565b600060208201905081810360008301526145a98161456d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061460c60258361395f565b9150614617826145b0565b604082019050919050565b6000602082019050818103600083015261463b816145ff565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061469e60238361395f565b91506146a982614642565b604082019050919050565b600060208201905081810360008301526146cd81614691565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061473060298361395f565b915061473b826146d4565b604082019050919050565b6000602082019050818103600083015261475f81614723565b9050919050565b7f54726164696e67206973206e6f7420656e61626c6564207965742e0000000000600082015250565b600061479c601b8361395f565b91506147a782614766565b602082019050919050565b600060208201905081810360008301526147cb8161478f565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061482e60358361395f565b9150614839826147d2565b604082019050919050565b6000602082019050818103600083015261485d81614821565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061489a60138361395f565b91506148a582614864565b602082019050919050565b600060208201905081810360008301526148c98161488d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061492c60368361395f565b9150614937826148d0565b604082019050919050565b6000602082019050818103600083015261495b8161491f565b9050919050565b600061496d82613a0f565b915061497883613a0f565b92508282101561498b5761498a613ff9565b5b828203905092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006149f260218361395f565b91506149fd82614996565b604082019050919050565b60006020820190508181036000830152614a21816149e5565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a8460228361395f565b9150614a8f82614a28565b604082019050919050565b60006020820190508181036000830152614ab381614a77565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614b4d816138e9565b82525050565b6000614b5f8383614b44565b60208301905092915050565b6000602082019050919050565b6000614b8382614b18565b614b8d8185614b23565b9350614b9883614b34565b8060005b83811015614bc9578151614bb08882614b53565b9750614bbb83614b6b565b925050600181019050614b9c565b5085935050505092915050565b600060a082019050614beb6000830188613b35565b614bf86020830187614322565b8181036040830152614c0a8186614b78565b9050614c196060830185613bf2565b614c266080830184613b35565b9695505050505050565b6000614c3b82613a0f565b9150614c4683613a0f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c7f57614c7e613ff9565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614cc482613a0f565b9150614ccf83613a0f565b925082614cdf57614cde614c8a565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614d4660268361395f565b9150614d5182614cea565b604082019050919050565b60006020820190508181036000830152614d7581614d39565b905091905056fea2646970667358221220e220df7b546fa3a72b362305172eb0975edae26e4e2df2f621a1d0fa1f96e13464736f6c634300080a0033

Deployed Bytecode Sourcemap

22355:12213:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34329:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8727:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10328:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23778:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23521:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9215:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10530:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27469:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23604:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23445:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9058:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23400:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11067:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24822:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23569:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23209:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27676:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34176:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23289:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32844:780;;;;;;;;;;;;;:::i;:::-;;9386:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5445:103;;;;;;;;;;;;;:::i;:::-;;24980:166;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25154:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22549:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24702:112;;;;;;;;;;;;;:::i;:::-;;4794:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27810:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22651:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25451:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8946:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25699:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11365:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9742:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23848:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23249:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25559:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22820:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10005:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23363:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22940:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23329:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26231:1092;;;:::i;:::-;;26011:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33910:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5703:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23113:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22745:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34329:236;34421:5;;;;;;;;;;;34407:19;;:10;:19;;;34399:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;34495:1;34469:28;;:14;:28;;;;34461:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;34543:14;34525:15;;:32;;;;;;;;;;;;;;;;;;34329:236;:::o;8727:100::-;8781:13;8814:5;8807:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8727:100;:::o;10328:194::-;10436:4;10453:39;10462:12;:10;:12::i;:::-;10476:7;10485:6;10453:8;:39::i;:::-;10510:4;10503:11;;10328:194;;;;:::o;23778:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;23521:41::-;;;;;;;;;;;;;:::o;9215:108::-;9276:7;9303:12;;9296:19;;9215:108;:::o;10530:529::-;10670:4;10687:36;10697:6;10705:9;10716:6;10687:9;:36::i;:::-;10736:24;10763:11;:19;10775:6;10763:19;;;;;;;;;;;;;;;:33;10783:12;:10;:12::i;:::-;10763:33;;;;;;;;;;;;;;;;10736:60;;10849:6;10829:16;:26;;10807:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;10959:57;10968:6;10976:12;:10;:12::i;:::-;11009:6;10990:16;:25;10959:8;:57::i;:::-;11047:4;11040:11;;;10530:529;;;;;:::o;27469:199::-;5025:12;:10;:12::i;:::-;5014:23;;:7;:5;:7::i;:::-;:23;;;5006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27605:10:::1;27593:9;;:22;;;;;;;;;;;;;;;;;;27644:16;27626:15;;:34;;;;;;;;;;;;;;;;;;27469:199:::0;;:::o;23604:53::-;23650:6;23604:53;:::o;23445:29::-;;;;:::o;9058:92::-;9116:5;9141:1;9134:8;;9058:92;:::o;23400:35::-;;;;:::o;11067:290::-;11180:4;11197:130;11220:12;:10;:12::i;:::-;11247:7;11306:10;11269:11;:25;11281:12;:10;:12::i;:::-;11269:25;;;;;;;;;;;;;;;:34;11295:7;11269:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;11197:8;:130::i;:::-;11345:4;11338:11;;11067:290;;;;:::o;24822:83::-;24872:25;24878:10;24890:6;24872:5;:25::i;:::-;24822:83;:::o;23569:28::-;;;;;;;;;;;;;:::o;23209:33::-;;;;;;;;;;;;;:::o;27676:126::-;27742:4;27766:19;:28;27786:7;27766:28;;;;;;;;;;;;;;;;;;;;;;;;;27759:35;;27676:126;;;:::o;34176:145::-;34257:5;;;;;;;;;;;34243:19;;:10;:19;;;34235:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;34305:8;34297:5;;:16;;;;;;;;;;;;;;;;;;34176:145;:::o;23289:31::-;;;;;;;;;;;;;:::o;32844:780::-;5025:12;:10;:12::i;:::-;5014:23;;:7;:5;:7::i;:::-;:23;;;5006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32895:23:::1;32921:24;32939:4;32921:9;:24::i;:::-;32895:50;;32956:12;33002:1:::0;32983:15:::1;:20;32979:59;;;33020:7;;;;32979:59;33048:33;33065:15;33048:16;:33::i;:::-;33096:23;33122:21;33096:47;;33158:25;33186:81;33263:3;33186:54;33224:15;;33186;:37;;:54;;;;:::i;:::-;:76;;:81;;;;:::i;:::-;33158:109;;33282:19;33304:38;33324:17;33304:15;:19;;:38;;;;:::i;:::-;33282:60;;33379:15;;;;;;;;;;;33371:29;;33426:17;33371:91;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33357:105;;;;;33499:9;;;;;;;;;;;33491:23;;33522:11;33491:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33477:61;;;;;33558:58;33574:15;33591;33608:7;33558:58;;;;;;;;:::i;:::-;;;;;;;;32884:740;;;;;5085:1;32844:780::o:0;9386:143::-;9476:7;9503:9;:18;9513:7;9503:18;;;;;;;;;;;;;;;;9496:25;;9386:143;;;:::o;5445:103::-;5025:12;:10;:12::i;:::-;5014:23;;:7;:5;:7::i;:::-;:23;;;5006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5510:30:::1;5537:1;5510:18;:30::i;:::-;5445:103::o:0;24980:166::-;25032:4;5025:12;:10;:12::i;:::-;5014:23;;:7;:5;:7::i;:::-;:23;;;5006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25066:5:::1;25049:14;;:22;;;;;;;;;;;;;;;;;;25093:1;25082:8;:12;;;;25115:1;25105:7;:11;;;;25134:4;25127:11;;24980:166:::0;:::o;25154:201::-;5025:12;:10;:12::i;:::-;5014:23;;:7;:5;:7::i;:::-;:23;;;5006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25337:10:::1;25285:31;:49;25317:16;25285:49;;;;;;;;;;;;;;;;:62;;;;;;;;;;;;;;;;;;25154:201:::0;;:::o;22549:93::-;;;;;;;;;;;;;:::o;24702:112::-;5025:12;:10;:12::i;:::-;5014:23;;:7;:5;:7::i;:::-;:23;;;5006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24773:4:::1;24757:13;;:20;;;;;;;;;;;;;;;;;;24802:4;24788:11;;:18;;;;;;;;;;;;;;;;;;24702:112::o:0;4794:87::-;4840:7;4867:6;;;;;;;;;;;4860:13;;4794:87;:::o;27810:169::-;5025:12;:10;:12::i;:::-;5014:23;;:7;:5;:7::i;:::-;:23;;;5006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27934:7:::1;27924;:17;;;;27963:8;27952;:19;;;;27810:169:::0;;:::o;22651:87::-;;;;;;;;;;;;;:::o;25451:100::-;5025:12;:10;:12::i;:::-;5014:23;;:7;:5;:7::i;:::-;:23;;;5006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25536:7:::1;25522:11;;:21;;;;;;;;;;;;;;;;;;25451:100:::0;:::o;8946:104::-;9002:13;9035:7;9028:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8946:104;:::o;25699:304::-;5025:12;:10;:12::i;:::-;5014:23;;:7;:5;:7::i;:::-;:23;;;5006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25845:13:::1;;;;;;;;;;;25837:21;;:4;:21;;;;25815:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;25954:41;25983:4;25989:5;25954:28;:41::i;:::-;25699:304:::0;;:::o;11365:475::-;11483:4;11500:24;11527:11;:25;11539:12;:10;:12::i;:::-;11527:25;;;;;;;;;;;;;;;:34;11553:7;11527:34;;;;;;;;;;;;;;;;11500:61;;11614:15;11594:16;:35;;11572:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;11730:67;11739:12;:10;:12::i;:::-;11753:7;11781:15;11762:16;:34;11730:8;:67::i;:::-;11828:4;11821:11;;;11365:475;;;;:::o;9742:200::-;9853:4;9870:42;9880:12;:10;:12::i;:::-;9894:9;9905:6;9870:9;:42::i;:::-;9930:4;9923:11;;9742:200;;;;:::o;23848:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;23249:33::-;;;;;;;;;;;;;:::o;25559:132::-;5025:12;:10;:12::i;:::-;5014:23;;:7;:5;:7::i;:::-;:23;;;5006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25675:8:::1;25644:19;:28;25664:7;25644:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25559:132:::0;;:::o;22820:64::-;;;;:::o;10005:176::-;10119:7;10146:11;:18;10158:5;10146:18;;;;;;;;;;;;;;;:27;10165:7;10146:27;;;;;;;;;;;;;;;;10139:34;;10005:176;;;;:::o;23363:28::-;;;;:::o;22940:63::-;;;;:::o;23329:27::-;;;;:::o;26231:1092::-;5025:12;:10;:12::i;:::-;5014:23;;:7;:5;:7::i;:::-;:23;;;5006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26360:35:::1;26431:42;26360:124;;26515:16;26497:15;;:34;;;;;;;;;;;;;;;;;;26542:58;26576:16;26595:4;26542:25;:58::i;:::-;26611:64;26628:4;26643:15;;;;;;;;;;;26661:13;:11;:13::i;:::-;26611:8;:64::i;:::-;26750:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26732:70;;;26811:4;26818:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26732:110;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26716:13;;:126;;;;;;;;;;;;;;;;;;26853:55;26887:13;;;;;;;;;;;26903:4;26853:25;:55::i;:::-;26919:58;26956:13;;;;;;;;;;;26972:4;26919:28;:58::i;:::-;26990:15;;;;;;;;;;;:31;;;27029:9;27062:4;27098:13;:11;:13::i;:::-;27146:1;27189::::0;27232:7:::1;:5;:7::i;:::-;27289:15;26990:325;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26282:1041;26231:1092::o:0;26011:212::-;5025:12;:10;:12::i;:::-;5014:23;;:7;:5;:7::i;:::-;:23;;;5006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26150:10:::1;26138:9;:22;;;;26194:21;26171:20;:44;;;;26011:212:::0;;:::o;33910:258::-;33970:4;33987:13;34003:12;:10;:12::i;:::-;33987:28;;34026:43;34034:15;;;;;;;;;;;34051:17;34026:7;:43::i;:::-;;34101:15;;;;;;;;;;;34085:51;;34094:5;34085:51;;;34118:17;34085:51;;;;;;:::i;:::-;;;;;;;;34156:4;34149:11;;;33910:258;;;:::o;5703:238::-;5025:12;:10;:12::i;:::-;5014:23;;:7;:5;:7::i;:::-;:23;;;5006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5826:1:::1;5806:22;;:8;:22;;;;5784:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;5905:28;5924:8;5905:18;:28::i;:::-;5703:238:::0;:::o;23113:53::-;;;;:::o;22745:20::-;;;;;;;;;;;;;:::o;4115:98::-;4168:7;4195:10;4188:17;;4115:98;:::o;13632:380::-;13785:1;13768:19;;:5;:19;;;;13760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13866:1;13847:21;;:7;:21;;;;13839:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13950:6;13920:11;:18;13932:5;13920:18;;;;;;;;;;;;;;;:27;13939:7;13920:27;;;;;;;;;;;;;;;:36;;;;13988:7;13972:32;;13981:5;13972:32;;;13997:6;13972:32;;;;;;:::i;:::-;;;;;;;;13632:380;;;:::o;27987:3339::-;28135:1;28119:18;;:4;:18;;;;28111:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28212:1;28198:16;;:2;:16;;;;28190:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28282:1;28273:6;:10;28265:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28344:14;;;;;;;;;;;28340:1699;;;28405:7;:5;:7::i;:::-;28397:15;;:4;:15;;;;:49;;;;;28439:7;:5;:7::i;:::-;28433:13;;:2;:13;;;;28397:49;:86;;;;;28481:1;28467:16;;:2;:16;;;;28397:86;:128;;;;;28518:6;28504:21;;:2;:21;;;;28397:128;:158;;;;;28547:8;;;;;;;;;;;28546:9;28397:158;28375:1653;;;28595:13;;;;;;;;;;;28590:228;;28667:19;:25;28687:4;28667:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28696:19;:23;28716:2;28696:23;;;;;;;;;;;;;;;;;;;;;;;;;28667:52;28633:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;28590:228;28892:25;:31;28918:4;28892:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;28949:31;:35;28981:2;28949:35;;;;;;;;;;;;;;;;;;;;;;;;;28948:36;28892:92;28866:1147;;;29071:20;;29061:6;:30;;29027:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;29279:9;;29262:13;29272:2;29262:9;:13::i;:::-;29253:6;:22;;;;:::i;:::-;:35;;29219:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;28866:1147;;;29457:25;:29;29483:2;29457:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;29512:31;:37;29544:4;29512:37;;;;;;;;;;;;;;;;;;;;;;;;;29511:38;29457:92;29431:582;;;29636:20;;29626:6;:30;;29592:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;29431:582;;;29793:31;:35;29825:2;29793:35;;;;;;;;;;;;;;;;;;;;;;;;;29788:225;;29913:9;;29896:13;29906:2;29896:9;:13::i;:::-;29887:6;:22;;;;:::i;:::-;:35;;29853:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;29788:225;29431:582;28866:1147;28375:1653;28340:1699;30069:11;;;;;;;;;;;:55;;;;;30116:8;;;;;;;;;;;30115:9;30069:55;:123;;;;;30161:25;:31;30187:4;30161:31;;;;;;;;;;;;;;;;;;;;;;;;;30160:32;30069:123;:185;;;;;30229:19;:25;30249:4;30229:25;;;;;;;;;;;;;;;;;;;;;;;;;30228:26;30069:185;:245;;;;;30291:19;:23;30311:2;30291:23;;;;;;;;;;;;;;;;;;;;;;;;;30290:24;30069:245;30051:392;;;30371:4;30360:8;;:15;;;;;;;;;;;;;;;;;;30390:10;:8;:10::i;:::-;30426:5;30415:8;;:16;;;;;;;;;;;;;;;;;;30051:392;30455:12;30471:8;;;;;;;;;;;30470:9;30455:24;;30581:19;:25;30601:4;30581:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;30610:19;:23;30630:2;30610:23;;;;;;;;;;;;;;;;;;;;;;;;;30581:52;30577:100;;;30660:5;30650:15;;30577:100;30689:12;30794:7;30790:485;;;30846:25;:29;30872:2;30846:29;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;30890:1;30879:8;;:12;30846:45;30842:286;;;30919:29;30944:3;30919:20;30930:8;;30919:6;:10;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;30912:36;;30842:286;;;31010:25;:31;31036:4;31010:31;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;31055:1;31045:7;;:11;31010:46;31006:122;;;31084:28;31108:3;31084:19;31095:7;;31084:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;31077:35;;31006:122;30842:286;31155:1;31148:4;:8;31144:91;;;31177:42;31193:4;31207;31214;31177:15;:42::i;:::-;31144:91;31259:4;31249:14;;;;;:::i;:::-;;;30790:485;31285:33;31301:4;31307:2;31311:6;31285:15;:33::i;:::-;28100:3226;;27987:3339;;;:::o;13033:591::-;13136:1;13117:21;;:7;:21;;;;13109:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13189:49;13210:7;13227:1;13231:6;13189:20;:49::i;:::-;13251:22;13276:9;:18;13286:7;13276:18;;;;;;;;;;;;;;;;13251:43;;13331:6;13313:14;:24;;13305:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13450:6;13433:14;:23;13412:9;:18;13422:7;13412:18;;;;;;;;;;;;;;;:44;;;;13494:6;13478:12;;:22;;;;;;;:::i;:::-;;;;;;;;13544:1;13518:37;;13527:7;13518:37;;;13548:6;13518:37;;;;;;:::i;:::-;;;;;;;;13568:48;13588:7;13605:1;13609:6;13568:19;:48::i;:::-;13098:526;13033:591;;:::o;31334:585::-;31460:21;31498:1;31484:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31460:40;;31529:4;31511;31516:1;31511:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31555:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31545:4;31550:1;31545:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;31588:62;31605:4;31620:15;;;;;;;;;;;31638:11;31588:8;:62::i;:::-;31687:15;;;;;;;;;;;:66;;;31768:11;31794:1;31838:4;31865;31885:15;31687:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31389:530;31334:585;:::o;15994:98::-;16052:7;16083:1;16079;:5;;;;:::i;:::-;16072:12;;15994:98;;;;:::o;16100:::-;16158:7;16189:1;16185;:5;;;;:::i;:::-;16178:12;;16100:98;;;;:::o;15888:::-;15946:7;15977:1;15973;:5;;;;:::i;:::-;15966:12;;15888:98;;;;:::o;6101:191::-;6175:16;6194:6;;;;;;;;;;;6175:25;;6220:8;6211:6;;:17;;;;;;;;;;;;;;;;;;6275:8;6244:40;;6265:8;6244:40;;;;;;;;;;;;6164:128;6101:191;:::o;27331:130::-;27448:5;27414:25;:31;27440:4;27414:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;27331:130;;:::o;31927:905::-;31966:23;31992:24;32010:4;31992:9;:24::i;:::-;31966:50;;32027:12;32073:1;32054:15;:20;32050:59;;;32091:7;;;;32050:59;32142:18;;32123:15;:37;32119:706;;32177:26;32206:18;;32177:47;;32239:36;32256:18;32239:16;:36::i;:::-;32290:23;32316:21;32290:47;;32352:25;32380:81;32457:3;32380:54;32418:15;;32380;:37;;:54;;;;:::i;:::-;:76;;:81;;;;:::i;:::-;32352:109;;32476:19;32498:38;32518:17;32498:15;:19;;:38;;;;:::i;:::-;32476:60;;32573:15;;;;;;;;;;;32565:29;;32620:17;32565:91;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32551:105;;;;;32693:9;;;;;;;;;;;32685:23;;32716:11;32685:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32671:61;;;;;32752;32768:18;32788:15;32805:7;32752:61;;;;;;;;:::i;:::-;;;;;;;;32162:663;;;;32119:706;31955:877;;31927:905;:::o;11848:770::-;12006:1;11988:20;;:6;:20;;;;11980:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12090:1;12069:23;;:9;:23;;;;12061:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12145:47;12166:6;12174:9;12185:6;12145:20;:47::i;:::-;12205:21;12229:9;:17;12239:6;12229:17;;;;;;;;;;;;;;;;12205:41;;12296:6;12279:13;:23;;12257:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;12440:6;12424:13;:22;12404:9;:17;12414:6;12404:17;;;;;;;;;;;;;;;:42;;;;12492:6;12468:9;:20;12478:9;12468:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12533:9;12516:35;;12525:6;12516:35;;;12544:6;12516:35;;;;;;:::i;:::-;;;;;;;;12564:46;12584:6;12592:9;12603:6;12564:19;:46::i;:::-;11969:649;11848:770;;;:::o;14020:125::-;;;;:::o;14153:124::-;;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:99::-;1228:6;1262:5;1256:12;1246:22;;1176:99;;;:::o;1281:169::-;1365:11;1399:6;1394:3;1387:19;1439:4;1434:3;1430:14;1415:29;;1281:169;;;;:::o;1456:307::-;1524:1;1534:113;1548:6;1545:1;1542:13;1534:113;;;1633:1;1628:3;1624:11;1618:18;1614:1;1609:3;1605:11;1598:39;1570:2;1567:1;1563:10;1558:15;;1534:113;;;1665:6;1662:1;1659:13;1656:101;;;1745:1;1736:6;1731:3;1727:16;1720:27;1656:101;1505:258;1456:307;;;:::o;1769:102::-;1810:6;1861:2;1857:7;1852:2;1845:5;1841:14;1837:28;1827:38;;1769:102;;;:::o;1877:364::-;1965:3;1993:39;2026:5;1993:39;:::i;:::-;2048:71;2112:6;2107:3;2048:71;:::i;:::-;2041:78;;2128:52;2173:6;2168:3;2161:4;2154:5;2150:16;2128:52;:::i;:::-;2205:29;2227:6;2205:29;:::i;:::-;2200:3;2196:39;2189:46;;1969:272;1877:364;;;;:::o;2247:313::-;2360:4;2398:2;2387:9;2383:18;2375:26;;2447:9;2441:4;2437:20;2433:1;2422:9;2418:17;2411:47;2475:78;2548:4;2539:6;2475:78;:::i;:::-;2467:86;;2247:313;;;;:::o;2566:77::-;2603:7;2632:5;2621:16;;2566:77;;;:::o;2649:122::-;2722:24;2740:5;2722:24;:::i;:::-;2715:5;2712:35;2702:63;;2761:1;2758;2751:12;2702:63;2649:122;:::o;2777:139::-;2823:5;2861:6;2848:20;2839:29;;2877:33;2904:5;2877:33;:::i;:::-;2777:139;;;;:::o;2922:474::-;2990:6;2998;3047:2;3035:9;3026:7;3022:23;3018:32;3015:119;;;3053:79;;:::i;:::-;3015:119;3173:1;3198:53;3243:7;3234:6;3223:9;3219:22;3198:53;:::i;:::-;3188:63;;3144:117;3300:2;3326:53;3371:7;3362:6;3351:9;3347:22;3326:53;:::i;:::-;3316:63;;3271:118;2922:474;;;;;:::o;3402:90::-;3436:7;3479:5;3472:13;3465:21;3454:32;;3402:90;;;:::o;3498:109::-;3579:21;3594:5;3579:21;:::i;:::-;3574:3;3567:34;3498:109;;:::o;3613:210::-;3700:4;3738:2;3727:9;3723:18;3715:26;;3751:65;3813:1;3802:9;3798:17;3789:6;3751:65;:::i;:::-;3613:210;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:619::-;5236:6;5244;5252;5301:2;5289:9;5280:7;5276:23;5272:32;5269:119;;;5307:79;;:::i;:::-;5269:119;5427:1;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5398:117;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5682:2;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5653:118;5159:619;;;;;:::o;5784:474::-;5852:6;5860;5909:2;5897:9;5888:7;5884:23;5880:32;5877:119;;;5915:79;;:::i;:::-;5877:119;6035:1;6060:53;6105:7;6096:6;6085:9;6081:22;6060:53;:::i;:::-;6050:63;;6006:117;6162:2;6188:53;6233:7;6224:6;6213:9;6209:22;6188:53;:::i;:::-;6178:63;;6133:118;5784:474;;;;;:::o;6264:118::-;6351:24;6369:5;6351:24;:::i;:::-;6346:3;6339:37;6264:118;;:::o;6388:222::-;6481:4;6519:2;6508:9;6504:18;6496:26;;6532:71;6600:1;6589:9;6585:17;6576:6;6532:71;:::i;:::-;6388:222;;;;:::o;6616:86::-;6651:7;6691:4;6684:5;6680:16;6669:27;;6616:86;;;:::o;6708:112::-;6791:22;6807:5;6791:22;:::i;:::-;6786:3;6779:35;6708:112;;:::o;6826:214::-;6915:4;6953:2;6942:9;6938:18;6930:26;;6966:67;7030:1;7019:9;7015:17;7006:6;6966:67;:::i;:::-;6826:214;;;;:::o;7046:329::-;7105:6;7154:2;7142:9;7133:7;7129:23;7125:32;7122:119;;;7160:79;;:::i;:::-;7122:119;7280:1;7305:53;7350:7;7341:6;7330:9;7326:22;7305:53;:::i;:::-;7295:63;;7251:117;7046:329;;;;:::o;7381:116::-;7451:21;7466:5;7451:21;:::i;:::-;7444:5;7441:32;7431:60;;7487:1;7484;7477:12;7431:60;7381:116;:::o;7503:133::-;7546:5;7584:6;7571:20;7562:29;;7600:30;7624:5;7600:30;:::i;:::-;7503:133;;;;:::o;7642:468::-;7707:6;7715;7764:2;7752:9;7743:7;7739:23;7735:32;7732:119;;;7770:79;;:::i;:::-;7732:119;7890:1;7915:53;7960:7;7951:6;7940:9;7936:22;7915:53;:::i;:::-;7905:63;;7861:117;8017:2;8043:50;8085:7;8076:6;8065:9;8061:22;8043:50;:::i;:::-;8033:60;;7988:115;7642:468;;;;;:::o;8116:474::-;8184:6;8192;8241:2;8229:9;8220:7;8216:23;8212:32;8209:119;;;8247:79;;:::i;:::-;8209:119;8367:1;8392:53;8437:7;8428:6;8417:9;8413:22;8392:53;:::i;:::-;8382:63;;8338:117;8494:2;8520:53;8565:7;8556:6;8545:9;8541:22;8520:53;:::i;:::-;8510:63;;8465:118;8116:474;;;;;:::o;8596:323::-;8652:6;8701:2;8689:9;8680:7;8676:23;8672:32;8669:119;;;8707:79;;:::i;:::-;8669:119;8827:1;8852:50;8894:7;8885:6;8874:9;8870:22;8852:50;:::i;:::-;8842:60;;8798:114;8596:323;;;;:::o;8925:93::-;8961:7;9001:10;8994:5;8990:22;8979:33;;8925:93;;;:::o;9024:120::-;9096:23;9113:5;9096:23;:::i;:::-;9089:5;9086:34;9076:62;;9134:1;9131;9124:12;9076:62;9024:120;:::o;9150:137::-;9195:5;9233:6;9220:20;9211:29;;9249:32;9275:5;9249:32;:::i;:::-;9150:137;;;;:::o;9293:327::-;9351:6;9400:2;9388:9;9379:7;9375:23;9371:32;9368:119;;;9406:79;;:::i;:::-;9368:119;9526:1;9551:52;9595:7;9586:6;9575:9;9571:22;9551:52;:::i;:::-;9541:62;;9497:116;9293:327;;;;:::o;9626:169::-;9766:21;9762:1;9754:6;9750:14;9743:45;9626:169;:::o;9801:366::-;9943:3;9964:67;10028:2;10023:3;9964:67;:::i;:::-;9957:74;;10040:93;10129:3;10040:93;:::i;:::-;10158:2;10153:3;10149:12;10142:19;;9801:366;;;:::o;10173:419::-;10339:4;10377:2;10366:9;10362:18;10354:26;;10426:9;10420:4;10416:20;10412:1;10401:9;10397:17;10390:47;10454:131;10580:4;10454:131;:::i;:::-;10446:139;;10173:419;;;:::o;10598:162::-;10738:14;10734:1;10726:6;10722:14;10715:38;10598:162;:::o;10766:366::-;10908:3;10929:67;10993:2;10988:3;10929:67;:::i;:::-;10922:74;;11005:93;11094:3;11005:93;:::i;:::-;11123:2;11118:3;11114:12;11107:19;;10766:366;;;:::o;11138:419::-;11304:4;11342:2;11331:9;11327:18;11319:26;;11391:9;11385:4;11381:20;11377:1;11366:9;11362:17;11355:47;11419:131;11545:4;11419:131;:::i;:::-;11411:139;;11138:419;;;:::o;11563:180::-;11611:77;11608:1;11601:88;11708:4;11705:1;11698:15;11732:4;11729:1;11722:15;11749:320;11793:6;11830:1;11824:4;11820:12;11810:22;;11877:1;11871:4;11867:12;11898:18;11888:81;;11954:4;11946:6;11942:17;11932:27;;11888:81;12016:2;12008:6;12005:14;11985:18;11982:38;11979:84;;;12035:18;;:::i;:::-;11979:84;11800:269;11749:320;;;:::o;12075:227::-;12215:34;12211:1;12203:6;12199:14;12192:58;12284:10;12279:2;12271:6;12267:15;12260:35;12075:227;:::o;12308:366::-;12450:3;12471:67;12535:2;12530:3;12471:67;:::i;:::-;12464:74;;12547:93;12636:3;12547:93;:::i;:::-;12665:2;12660:3;12656:12;12649:19;;12308:366;;;:::o;12680:419::-;12846:4;12884:2;12873:9;12869:18;12861:26;;12933:9;12927:4;12923:20;12919:1;12908:9;12904:17;12897:47;12961:131;13087:4;12961:131;:::i;:::-;12953:139;;12680:419;;;:::o;13105:182::-;13245:34;13241:1;13233:6;13229:14;13222:58;13105:182;:::o;13293:366::-;13435:3;13456:67;13520:2;13515:3;13456:67;:::i;:::-;13449:74;;13532:93;13621:3;13532:93;:::i;:::-;13650:2;13645:3;13641:12;13634:19;;13293:366;;;:::o;13665:419::-;13831:4;13869:2;13858:9;13854:18;13846:26;;13918:9;13912:4;13908:20;13904:1;13893:9;13889:17;13882:47;13946:131;14072:4;13946:131;:::i;:::-;13938:139;;13665:419;;;:::o;14090:180::-;14138:77;14135:1;14128:88;14235:4;14232:1;14225:15;14259:4;14256:1;14249:15;14276:305;14316:3;14335:20;14353:1;14335:20;:::i;:::-;14330:25;;14369:20;14387:1;14369:20;:::i;:::-;14364:25;;14523:1;14455:66;14451:74;14448:1;14445:81;14442:107;;;14529:18;;:::i;:::-;14442:107;14573:1;14570;14566:9;14559:16;;14276:305;;;;:::o;14587:169::-;14727:21;14723:1;14715:6;14711:14;14704:45;14587:169;:::o;14762:366::-;14904:3;14925:67;14989:2;14984:3;14925:67;:::i;:::-;14918:74;;15001:93;15090:3;15001:93;:::i;:::-;15119:2;15114:3;15110:12;15103:19;;14762:366;;;:::o;15134:419::-;15300:4;15338:2;15327:9;15323:18;15315:26;;15387:9;15381:4;15377:20;15373:1;15362:9;15358:17;15351:47;15415:131;15541:4;15415:131;:::i;:::-;15407:139;;15134:419;;;:::o;15559:147::-;15660:11;15697:3;15682:18;;15559:147;;;;:::o;15712:114::-;;:::o;15832:398::-;15991:3;16012:83;16093:1;16088:3;16012:83;:::i;:::-;16005:90;;16104:93;16193:3;16104:93;:::i;:::-;16222:1;16217:3;16213:11;16206:18;;15832:398;;;:::o;16236:379::-;16420:3;16442:147;16585:3;16442:147;:::i;:::-;16435:154;;16606:3;16599:10;;16236:379;;;:::o;16621:430::-;16764:4;16802:2;16791:9;16787:18;16779:26;;16815:71;16883:1;16872:9;16868:17;16859:6;16815:71;:::i;:::-;16896:72;16964:2;16953:9;16949:18;16940:6;16896:72;:::i;:::-;16978:66;17040:2;17029:9;17025:18;17016:6;16978:66;:::i;:::-;16621:430;;;;;;:::o;17057:244::-;17197:34;17193:1;17185:6;17181:14;17174:58;17266:27;17261:2;17253:6;17249:15;17242:52;17057:244;:::o;17307:366::-;17449:3;17470:67;17534:2;17529:3;17470:67;:::i;:::-;17463:74;;17546:93;17635:3;17546:93;:::i;:::-;17664:2;17659:3;17655:12;17648:19;;17307:366;;;:::o;17679:419::-;17845:4;17883:2;17872:9;17868:18;17860:26;;17932:9;17926:4;17922:20;17918:1;17907:9;17903:17;17896:47;17960:131;18086:4;17960:131;:::i;:::-;17952:139;;17679:419;;;:::o;18104:224::-;18244:34;18240:1;18232:6;18228:14;18221:58;18313:7;18308:2;18300:6;18296:15;18289:32;18104:224;:::o;18334:366::-;18476:3;18497:67;18561:2;18556:3;18497:67;:::i;:::-;18490:74;;18573:93;18662:3;18573:93;:::i;:::-;18691:2;18686:3;18682:12;18675:19;;18334:366;;;:::o;18706:419::-;18872:4;18910:2;18899:9;18895:18;18887:26;;18959:9;18953:4;18949:20;18945:1;18934:9;18930:17;18923:47;18987:131;19113:4;18987:131;:::i;:::-;18979:139;;18706:419;;;:::o;19131:143::-;19188:5;19219:6;19213:13;19204:22;;19235:33;19262:5;19235:33;:::i;:::-;19131:143;;;;:::o;19280:351::-;19350:6;19399:2;19387:9;19378:7;19374:23;19370:32;19367:119;;;19405:79;;:::i;:::-;19367:119;19525:1;19550:64;19606:7;19597:6;19586:9;19582:22;19550:64;:::i;:::-;19540:74;;19496:128;19280:351;;;;:::o;19637:332::-;19758:4;19796:2;19785:9;19781:18;19773:26;;19809:71;19877:1;19866:9;19862:17;19853:6;19809:71;:::i;:::-;19890:72;19958:2;19947:9;19943:18;19934:6;19890:72;:::i;:::-;19637:332;;;;;:::o;19975:85::-;20020:7;20049:5;20038:16;;19975:85;;;:::o;20066:158::-;20124:9;20157:61;20175:42;20184:32;20210:5;20184:32;:::i;:::-;20175:42;:::i;:::-;20157:61;:::i;:::-;20144:74;;20066:158;;;:::o;20230:147::-;20325:45;20364:5;20325:45;:::i;:::-;20320:3;20313:58;20230:147;;:::o;20383:807::-;20632:4;20670:3;20659:9;20655:19;20647:27;;20684:71;20752:1;20741:9;20737:17;20728:6;20684:71;:::i;:::-;20765:72;20833:2;20822:9;20818:18;20809:6;20765:72;:::i;:::-;20847:80;20923:2;20912:9;20908:18;20899:6;20847:80;:::i;:::-;20937;21013:2;21002:9;20998:18;20989:6;20937:80;:::i;:::-;21027:73;21095:3;21084:9;21080:19;21071:6;21027:73;:::i;:::-;21110;21178:3;21167:9;21163:19;21154:6;21110:73;:::i;:::-;20383:807;;;;;;;;;:::o;21196:143::-;21253:5;21284:6;21278:13;21269:22;;21300:33;21327:5;21300:33;:::i;:::-;21196:143;;;;:::o;21345:663::-;21433:6;21441;21449;21498:2;21486:9;21477:7;21473:23;21469:32;21466:119;;;21504:79;;:::i;:::-;21466:119;21624:1;21649:64;21705:7;21696:6;21685:9;21681:22;21649:64;:::i;:::-;21639:74;;21595:128;21762:2;21788:64;21844:7;21835:6;21824:9;21820:22;21788:64;:::i;:::-;21778:74;;21733:129;21901:2;21927:64;21983:7;21974:6;21963:9;21959:22;21927:64;:::i;:::-;21917:74;;21872:129;21345:663;;;;;:::o;22014:225::-;22154:34;22150:1;22142:6;22138:14;22131:58;22223:8;22218:2;22210:6;22206:15;22199:33;22014:225;:::o;22245:366::-;22387:3;22408:67;22472:2;22467:3;22408:67;:::i;:::-;22401:74;;22484:93;22573:3;22484:93;:::i;:::-;22602:2;22597:3;22593:12;22586:19;;22245:366;;;:::o;22617:419::-;22783:4;22821:2;22810:9;22806:18;22798:26;;22870:9;22864:4;22860:20;22856:1;22845:9;22841:17;22834:47;22898:131;23024:4;22898:131;:::i;:::-;22890:139;;22617:419;;;:::o;23042:223::-;23182:34;23178:1;23170:6;23166:14;23159:58;23251:6;23246:2;23238:6;23234:15;23227:31;23042:223;:::o;23271:366::-;23413:3;23434:67;23498:2;23493:3;23434:67;:::i;:::-;23427:74;;23510:93;23599:3;23510:93;:::i;:::-;23628:2;23623:3;23619:12;23612:19;;23271:366;;;:::o;23643:419::-;23809:4;23847:2;23836:9;23832:18;23824:26;;23896:9;23890:4;23886:20;23882:1;23871:9;23867:17;23860:47;23924:131;24050:4;23924:131;:::i;:::-;23916:139;;23643:419;;;:::o;24068:221::-;24208:34;24204:1;24196:6;24192:14;24185:58;24277:4;24272:2;24264:6;24260:15;24253:29;24068:221;:::o;24295:366::-;24437:3;24458:67;24522:2;24517:3;24458:67;:::i;:::-;24451:74;;24534:93;24623:3;24534:93;:::i;:::-;24652:2;24647:3;24643:12;24636:19;;24295:366;;;:::o;24667:419::-;24833:4;24871:2;24860:9;24856:18;24848:26;;24920:9;24914:4;24910:20;24906:1;24895:9;24891:17;24884:47;24948:131;25074:4;24948:131;:::i;:::-;24940:139;;24667:419;;;:::o;25092:224::-;25232:34;25228:1;25220:6;25216:14;25209:58;25301:7;25296:2;25288:6;25284:15;25277:32;25092:224;:::o;25322:366::-;25464:3;25485:67;25549:2;25544:3;25485:67;:::i;:::-;25478:74;;25561:93;25650:3;25561:93;:::i;:::-;25679:2;25674:3;25670:12;25663:19;;25322:366;;;:::o;25694:419::-;25860:4;25898:2;25887:9;25883:18;25875:26;;25947:9;25941:4;25937:20;25933:1;25922:9;25918:17;25911:47;25975:131;26101:4;25975:131;:::i;:::-;25967:139;;25694:419;;;:::o;26119:222::-;26259:34;26255:1;26247:6;26243:14;26236:58;26328:5;26323:2;26315:6;26311:15;26304:30;26119:222;:::o;26347:366::-;26489:3;26510:67;26574:2;26569:3;26510:67;:::i;:::-;26503:74;;26586:93;26675:3;26586:93;:::i;:::-;26704:2;26699:3;26695:12;26688:19;;26347:366;;;:::o;26719:419::-;26885:4;26923:2;26912:9;26908:18;26900:26;;26972:9;26966:4;26962:20;26958:1;26947:9;26943:17;26936:47;27000:131;27126:4;27000:131;:::i;:::-;26992:139;;26719:419;;;:::o;27144:228::-;27284:34;27280:1;27272:6;27268:14;27261:58;27353:11;27348:2;27340:6;27336:15;27329:36;27144:228;:::o;27378:366::-;27520:3;27541:67;27605:2;27600:3;27541:67;:::i;:::-;27534:74;;27617:93;27706:3;27617:93;:::i;:::-;27735:2;27730:3;27726:12;27719:19;;27378:366;;;:::o;27750:419::-;27916:4;27954:2;27943:9;27939:18;27931:26;;28003:9;27997:4;27993:20;27989:1;27978:9;27974:17;27967:47;28031:131;28157:4;28031:131;:::i;:::-;28023:139;;27750:419;;;:::o;28175:177::-;28315:29;28311:1;28303:6;28299:14;28292:53;28175:177;:::o;28358:366::-;28500:3;28521:67;28585:2;28580:3;28521:67;:::i;:::-;28514:74;;28597:93;28686:3;28597:93;:::i;:::-;28715:2;28710:3;28706:12;28699:19;;28358:366;;;:::o;28730:419::-;28896:4;28934:2;28923:9;28919:18;28911:26;;28983:9;28977:4;28973:20;28969:1;28958:9;28954:17;28947:47;29011:131;29137:4;29011:131;:::i;:::-;29003:139;;28730:419;;;:::o;29155:240::-;29295:34;29291:1;29283:6;29279:14;29272:58;29364:23;29359:2;29351:6;29347:15;29340:48;29155:240;:::o;29401:366::-;29543:3;29564:67;29628:2;29623:3;29564:67;:::i;:::-;29557:74;;29640:93;29729:3;29640:93;:::i;:::-;29758:2;29753:3;29749:12;29742:19;;29401:366;;;:::o;29773:419::-;29939:4;29977:2;29966:9;29962:18;29954:26;;30026:9;30020:4;30016:20;30012:1;30001:9;29997:17;29990:47;30054:131;30180:4;30054:131;:::i;:::-;30046:139;;29773:419;;;:::o;30198:169::-;30338:21;30334:1;30326:6;30322:14;30315:45;30198:169;:::o;30373:366::-;30515:3;30536:67;30600:2;30595:3;30536:67;:::i;:::-;30529:74;;30612:93;30701:3;30612:93;:::i;:::-;30730:2;30725:3;30721:12;30714:19;;30373:366;;;:::o;30745:419::-;30911:4;30949:2;30938:9;30934:18;30926:26;;30998:9;30992:4;30988:20;30984:1;30973:9;30969:17;30962:47;31026:131;31152:4;31026:131;:::i;:::-;31018:139;;30745:419;;;:::o;31170:241::-;31310:34;31306:1;31298:6;31294:14;31287:58;31379:24;31374:2;31366:6;31362:15;31355:49;31170:241;:::o;31417:366::-;31559:3;31580:67;31644:2;31639:3;31580:67;:::i;:::-;31573:74;;31656:93;31745:3;31656:93;:::i;:::-;31774:2;31769:3;31765:12;31758:19;;31417:366;;;:::o;31789:419::-;31955:4;31993:2;31982:9;31978:18;31970:26;;32042:9;32036:4;32032:20;32028:1;32017:9;32013:17;32006:47;32070:131;32196:4;32070:131;:::i;:::-;32062:139;;31789:419;;;:::o;32214:191::-;32254:4;32274:20;32292:1;32274:20;:::i;:::-;32269:25;;32308:20;32326:1;32308:20;:::i;:::-;32303:25;;32347:1;32344;32341:8;32338:34;;;32352:18;;:::i;:::-;32338:34;32397:1;32394;32390:9;32382:17;;32214:191;;;;:::o;32411:220::-;32551:34;32547:1;32539:6;32535:14;32528:58;32620:3;32615:2;32607:6;32603:15;32596:28;32411:220;:::o;32637:366::-;32779:3;32800:67;32864:2;32859:3;32800:67;:::i;:::-;32793:74;;32876:93;32965:3;32876:93;:::i;:::-;32994:2;32989:3;32985:12;32978:19;;32637:366;;;:::o;33009:419::-;33175:4;33213:2;33202:9;33198:18;33190:26;;33262:9;33256:4;33252:20;33248:1;33237:9;33233:17;33226:47;33290:131;33416:4;33290:131;:::i;:::-;33282:139;;33009:419;;;:::o;33434:221::-;33574:34;33570:1;33562:6;33558:14;33551:58;33643:4;33638:2;33630:6;33626:15;33619:29;33434:221;:::o;33661:366::-;33803:3;33824:67;33888:2;33883:3;33824:67;:::i;:::-;33817:74;;33900:93;33989:3;33900:93;:::i;:::-;34018:2;34013:3;34009:12;34002:19;;33661:366;;;:::o;34033:419::-;34199:4;34237:2;34226:9;34222:18;34214:26;;34286:9;34280:4;34276:20;34272:1;34261:9;34257:17;34250:47;34314:131;34440:4;34314:131;:::i;:::-;34306:139;;34033:419;;;:::o;34458:180::-;34506:77;34503:1;34496:88;34603:4;34600:1;34593:15;34627:4;34624:1;34617:15;34644:180;34692:77;34689:1;34682:88;34789:4;34786:1;34779:15;34813:4;34810:1;34803:15;34830:114;34897:6;34931:5;34925:12;34915:22;;34830:114;;;:::o;34950:184::-;35049:11;35083:6;35078:3;35071:19;35123:4;35118:3;35114:14;35099:29;;34950:184;;;;:::o;35140:132::-;35207:4;35230:3;35222:11;;35260:4;35255:3;35251:14;35243:22;;35140:132;;;:::o;35278:108::-;35355:24;35373:5;35355:24;:::i;:::-;35350:3;35343:37;35278:108;;:::o;35392:179::-;35461:10;35482:46;35524:3;35516:6;35482:46;:::i;:::-;35560:4;35555:3;35551:14;35537:28;;35392:179;;;;:::o;35577:113::-;35647:4;35679;35674:3;35670:14;35662:22;;35577:113;;;:::o;35726:732::-;35845:3;35874:54;35922:5;35874:54;:::i;:::-;35944:86;36023:6;36018:3;35944:86;:::i;:::-;35937:93;;36054:56;36104:5;36054:56;:::i;:::-;36133:7;36164:1;36149:284;36174:6;36171:1;36168:13;36149:284;;;36250:6;36244:13;36277:63;36336:3;36321:13;36277:63;:::i;:::-;36270:70;;36363:60;36416:6;36363:60;:::i;:::-;36353:70;;36209:224;36196:1;36193;36189:9;36184:14;;36149:284;;;36153:14;36449:3;36442:10;;35850:608;;;35726:732;;;;:::o;36464:831::-;36727:4;36765:3;36754:9;36750:19;36742:27;;36779:71;36847:1;36836:9;36832:17;36823:6;36779:71;:::i;:::-;36860:80;36936:2;36925:9;36921:18;36912:6;36860:80;:::i;:::-;36987:9;36981:4;36977:20;36972:2;36961:9;36957:18;36950:48;37015:108;37118:4;37109:6;37015:108;:::i;:::-;37007:116;;37133:72;37201:2;37190:9;37186:18;37177:6;37133:72;:::i;:::-;37215:73;37283:3;37272:9;37268:19;37259:6;37215:73;:::i;:::-;36464:831;;;;;;;;:::o;37301:348::-;37341:7;37364:20;37382:1;37364:20;:::i;:::-;37359:25;;37398:20;37416:1;37398:20;:::i;:::-;37393:25;;37586:1;37518:66;37514:74;37511:1;37508:81;37503:1;37496:9;37489:17;37485:105;37482:131;;;37593:18;;:::i;:::-;37482:131;37641:1;37638;37634:9;37623:20;;37301:348;;;;:::o;37655:180::-;37703:77;37700:1;37693:88;37800:4;37797:1;37790:15;37824:4;37821:1;37814:15;37841:185;37881:1;37898:20;37916:1;37898:20;:::i;:::-;37893:25;;37932:20;37950:1;37932:20;:::i;:::-;37927:25;;37971:1;37961:35;;37976:18;;:::i;:::-;37961:35;38018:1;38015;38011:9;38006:14;;37841:185;;;;:::o;38032:225::-;38172:34;38168:1;38160:6;38156:14;38149:58;38241:8;38236:2;38228:6;38224:15;38217:33;38032:225;:::o;38263:366::-;38405:3;38426:67;38490:2;38485:3;38426:67;:::i;:::-;38419:74;;38502:93;38591:3;38502:93;:::i;:::-;38620:2;38615:3;38611:12;38604:19;;38263:366;;;:::o;38635:419::-;38801:4;38839:2;38828:9;38824:18;38816:26;;38888:9;38882:4;38878:20;38874:1;38863:9;38859:17;38852:47;38916:131;39042:4;38916:131;:::i;:::-;38908:139;;38635:419;;;:::o

Swarm Source

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

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