ETH Price: $3,393.64 (-1.40%)
Gas: 3 Gwei

Token

GM (GM ☕)
 

Overview

Max Total Supply

1,000,000 GM ☕

Holders

150 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
0.36 GM ☕

Value
$0.00
0x49978a2b6427fe1143aa45454fdedc0caaf21a52
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Gud mornin Coin iz a fun way to start ur day rite. U can gib special gud mornin coinz to frens and famly to show yu care bout them.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
GM

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-22
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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);
    }
}

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

contract GM is Context, Ownable {
    using SafeMath for uint256;

    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => uint256) private _balances;
    mapping (address => bool) private _isBot;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcludedFromLimits;

    address[] private _blacklistedWallets;

    address payable private _feeWallet;
    address payable private _devWallet;
    address private _uniswapV2Pair;

    bool private _allBuyersAreBots = true;
    bool private _forceGM = false;
    bool private _inSwap = false;
    bool private _gm = false;

    string private constant _name = unicode"GM";
    string private constant _symbol = unicode"GM ☕";

    int8 private _timezone = -5;

    IUniswapV2Router02 private _uniswapV2Router;

    uint256 private _currentTaxPercent = 4;
    uint256 private _decimals = 8;
    uint256 private _devTaxPercent = 1;
    uint256 private _daytimeTaxPercent = 3;
    uint256 private _gmTaxPercent = 0;
    uint256 private _gmHourStart = 9;
    uint256 private _gmHourEnd = 11;
    uint256 private _maxWalletPercent = 2;
    uint256 private _maxTransactionPercent = 1;
    
    uint256 private _currentTimestamp;
    uint256 private _tSupply = 1_000_000 * 10**_decimals;
    uint256 private _maxWallet;
    uint256 private _maxTransaction;

    event MaxTransactionAmountUpdated(uint256 maxTransaction);
    event MaxWalletAmountUpdated(uint256 maxWallet);
    event GMUpdated(bool on);

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


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

    constructor () {

        // used to be in openTrading()
        _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _approve(address(this), address(_uniswapV2Router), _tSupply);
        _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());

        _currentTimestamp                       = block.timestamp;
        _feeWallet                              = payable(0x54E7Bf842aCD9986D9AE0522247b6dFE4047f60f);
        _devWallet                              = payable(0x5d9A31749eA27Ce29a0d5234cD7C7185546c44D9);

        _balances[_msgSender()]                 = _tSupply;

        _isExcludedFromFee[owner()]             = true;
        _isExcludedFromFee[address(this)]       = true;
        _isExcludedFromFee[_feeWallet]          = true;
        _isExcludedFromFee[_devWallet]          = true;

        _isExcludedFromLimits[owner()]          = true;
        _isExcludedFromLimits[address(this)]    = true;
        _isExcludedFromLimits[_feeWallet]       = true;
        _isExcludedFromLimits[address(_uniswapV2Router)] = true;
        _isExcludedFromLimits[_uniswapV2Pair] = true;
        _isExcludedFromLimits[_devWallet] = true;

        

        _setTaxes();
        _setMaxWallet();
        _setMaxTransaction();
        
        emit Transfer(address(0), _msgSender(), _tSupply);
    }
    // ~~~~~~~~~~~~ accessors ~~~~~~~~~~~~ \\

    function name() public pure returns (string memory) {
        return _name;
    }

    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint256) {
        return _decimals;
    }

    function totalSupply() public view returns (uint256) {
        return _tSupply;
    }

    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }

    function feeWallet() public view returns (address) {
        return _feeWallet;
    }

    function gm() public view returns (bool) {
        return _gm;
    }

    function timezone() public view returns (int8) {
        return _timezone;
    }

    function currentTimestamp() public view returns (uint256) {
        return _currentTimestamp;
    }

    function maxWallet() public view returns (uint256) {
        return _maxWallet;
    }

    function maxTransaction () public view returns (uint256) {
        return _maxTransaction;
    }

    function taxPercent() public view returns (uint256) {
        return _currentTaxPercent;
    }

    function isBot(address a) public view returns (bool) {
        return _isBot[a];
    }

    function isExcludedFromFees(address a) public view returns (bool) {
        return _isExcludedFromFee[a];
    }

    function isExcludedFromLimits(address a) public view returns (bool) {
        return _isExcludedFromLimits[a];
    }

    function gmHourStart() public view returns (uint256) {
        return _gmHourStart;
    }

    function gmHourEnd() public view returns (uint256) {
        return _gmHourEnd;
    }

    function getOwner() public view returns (address) {
        return this.owner();
    }

    function getBlacklistedWallets() public view returns (address[] memory) {
        return _blacklistedWallets;
    }

    function getDevWallet() public view returns (address) {
        return _devWallet;
    }

    // ~~~~~~~~~~~~ mutators ~~~~~~~~~~~~ \\

    function setFeeWallet(address payable w) external {
        require(
            _msgSender() == _feeWallet || 
            _msgSender() == owner() ||
            _msgSender() == _devWallet);

        require(w != address(0), "Can't set fee wallet to burn addr.");
        _feeWallet = w;
    }

    function setDevWallet(address payable w) external {
        require(
            _msgSender() == _feeWallet || 
            _msgSender() == owner() ||
            _msgSender() == _devWallet);
        require(w != address(0), "Can't set dev wallet to burn addr.");
        _devWallet = w;
    }

    function setTimezone(int8 tz) external onlyOwner {
        /* changes the timezone where tz is interpreted as UTC-<tz>.
            parameters:
                tx (int8): a signed 8-bit int, used to represent when "morning" is.  
            
            returns:
                none
        */
        require(-12 < tz && tz < 13, "Timezone not recognized.");
        _timezone = tz;
    }

    function setMaxWallet(uint256 percent) external onlyOwner {
        /* changes the max wallet percent, and consequently, the max wallet size.
            parameters:
                percent (uint256): Represents the % of total supply a single wallet can hold.
            
            returns:
                none
        */
        require(percent < 101, "Max wallet cannot be larger than total supply.");
        _maxWalletPercent = percent;
        _setMaxWallet();
    }

    function setMaxTransaction(uint256 percent) external onlyOwner {
        /* changes the max transaction percent, and consequently, the max transaction size.
            parameters:
                percent (uint256): represents the % of total supply that can be sent in a single transaction.
            
            returns:
                none
        */
        require(percent < 101, "Max transaction cannot be larger than total supply.");
        _maxTransactionPercent = percent;
        _setMaxTransaction();
    }

    function setTaxPercent(uint256 percent) external onlyOwner {
        /* sets the tax during the daytime (non-gm) period.
            parameters:
                percent (uint256): represents the % of the transaction given to the contract as taxes.
            
            returns:
                none
        */
        require(percent <= 3, "Maximum tax of 3%.");
        _daytimeTaxPercent = percent;
    }

    function setDevTaxPercent(uint256 percent) external onlyOwner {
        /* sets the dev tax pecent.
            parameters:
                percent (uint256): represents the % of the transaction given to the contract as taxes.
            
            returns:
                none
        */
        require(percent <= 2, "Maximum tax of 2%.");
        _devTaxPercent = percent;
    }

    function setGMHourStart(uint256 hour) external onlyOwner {
        /* sets the hour that gm mode starts at.
            parameters:
                hour (uint256): the hour to change the gm start time to.
            
            returns:
                none
        */
        require(hour < _gmHourEnd, "GM mode has to start before it ends.");
        _gmHourStart = hour;
    }

    function setGMHourEnd(uint256 hour) external onlyOwner {
        /* sets the hour that gm mode ends at.
            parameters:
                hour (uint256): the hour to change the gm end time to.
            returns:
                none
        */
        require(hour > _gmHourStart, "GM mode has to end after it starts.");
        _gmHourEnd = hour;
    }

    function setForceGM(bool on) external onlyOwner {
        /* set the _forceGM mode flag.
            parameters:
                on (bool): whether we want _forceGM mode active or not.
            returns:
                none
        */
        _forceGM = on;
    }

    function disableBlacklist() external onlyOwner {
        //sets the flag _allBuyersAreBots to false, stopping the auto-blacklist of buyers
        _allBuyersAreBots = false;
    }

    // ~~~~~~~~~~~~ ierc20 functions ~~~~~~~~~~~~ \\

    function approve(address spender, uint256 amount) public returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }


    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function transfer(address recipient, uint256 amount) public returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    // ~~~~~~~~~~~~ custom functions ~~~~~~~~~~~~ \\

    function multisendToken( address[] memory addresses, uint256[] memory balances) external onlyOwner {
        
        for (uint8 i=0;i < addresses.length; i++) {
            _transferFeeless(owner(), addresses[i], balances[i]);
        }
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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 _transferFeeless(address sender, address recipient, uint256 amount) private {
        /* transfers tokens without taking fees.
            parameters:
                sender (address):
                recipient (address):
                amount (uint256): the amount of tokens (keep in mind theres _decimals more digits than you think).
            returns:
                none
        */
        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _transferSupportingFee(address sender, address recipient, uint256 amount) private {
        /* transfers tokens while taking fees.
            parameters:
                sender (address):
                recipient (address):
                amount (uint256):
            returns:
                none
        */
        uint256 taxedTokens = amount.mul(_currentTaxPercent).div(100);
        uint256 amountRecieved = amount.sub(taxedTokens);

        // subtract amt from sender and add to recipient
        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(amountRecieved);

        // handle taxes
        _balances[address(this)] = _balances[address(this)].add(taxedTokens);

        emit Transfer(sender, recipient, amount);
    }

    function _transfer(address sender, address recipient, uint256 amount) private {
        /* runs checks to ensure a valid transfer, then executes.
            first group of statements check that the zero address is not involved, and that the transfer amount is > 0.
            second group checks that a bot isn't involved (they aren't allowed to trade), and ensures trading has started.
            third group only applies when Uniswap is involved (buy/sell, not transfer) and when the involved addresses are not exempt from fees.
            the taxes are then set, which does the time check and sets the `_gm` flag.
            if: GM mode or there is an address exempt from fees involved,
                The helper function to transfer without fees is called.
            else:
                The contract balance of tokens is checked (using the ERC20.sol function balanceOf()), if its > 0, sell tokens.
                The helper function to transfer with fees is called.
            parameters:
                sender (address):
                recipient (address):
                amount (uint256):
            returns:
                none
        */

        bool buy = (sender == _uniswapV2Pair && recipient != address(_uniswapV2Router));
        bool uniInvolved = (
            sender == _uniswapV2Pair || 
            sender == address(_uniswapV2Router) ||
            recipient == _uniswapV2Pair ||
            recipient == address(_uniswapV2Router));

        // checks base transaction requirements
        require(sender != address(0), "ERC20: transfer from the zero address.");
        require(recipient != address(0), "ERC20: transfer to the zero address.");
        require(amount > 0, "Transfer amount must be greater than zero.");

        // checks that no one involved is a bot
        if (!buy) {
            require(!_isBot[sender] && !_isBot[recipient], "Address is labeled as a bot.  Transferring disabled.");
        }

        if (amount > _maxTransaction) {
            require(_isExcludedFromLimits[sender]);

            if (uniInvolved) {
                require(_isExcludedFromLimits[recipient]);
            }
        }

        if ((balanceOf(recipient) + amount) > _maxWallet) {
            require(_isExcludedFromLimits[recipient]);
        }

        _setTaxes();
        
        //TODO: ensure an address cannot map to both bots and exemptfromfee.
        // if sender/reciever is excluded from fees or it is GM mode.
        if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) {
            _transferFeeless(sender, recipient, amount);
            return;
        }

        // handles the contract collecting fees.
        uint256 contractTokenBalance = balanceOf(address(this));
        if (!_inSwap && sender != _uniswapV2Pair && contractTokenBalance > 0) {
            swapTokensForEth(contractTokenBalance);
            uint256 contractETHBalance = address(this).balance;
            if (contractETHBalance > 0) {
                uint256 _feeAmt = contractETHBalance.mul(_currentTaxPercent.sub(_devTaxPercent)).div(_currentTaxPercent);
                uint256 _devAmt = contractETHBalance.mul(_devTaxPercent).div(_currentTaxPercent);
                _feeWallet.transfer(_feeAmt);
                _devWallet.transfer(_devAmt);
            }
        }



        if (_allBuyersAreBots) {
            _blacklistedWallets.push(recipient);
            _addBot(recipient);
        }

        // send the tokens
        _transferSupportingFee(sender, recipient, amount);
    }

    function _setTaxes() private {
        // sets GM mode and consequently, the tax rate.
        bool gmChanged = _setGM();

        if (gmChanged) {
            _currentTaxPercent = _gm ? (_gmTaxPercent + _devTaxPercent) : (_daytimeTaxPercent + _devTaxPercent);
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapV2Router.WETH();
        _approve(address(this), address(_uniswapV2Router), tokenAmount);
        _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function manualSwap() external {
        require(
            _msgSender() == _feeWallet || 
            _msgSender() == owner() ||
            _msgSender() == _devWallet);
        swapTokensForEth(balanceOf(address(this)));
    }

    function manualSend() external {
        require(
            _msgSender() == _feeWallet || 
            _msgSender() == owner() ||
            _msgSender() == _devWallet);

        _feeWallet.transfer(address(this).balance);
    }

    function forceGM(bool g) external onlyOwner {
        _gm = g;
    }

    function addBot(address bot) external onlyOwner {
        _addBot(bot);
    }

    function addBots(address[] memory bots) external onlyOwner {
        for (uint256 i = 0; i < bots.length; i++ ) {
            _addBot(bots[i]);
        }
    }

    function _addBot(address bot) private {
        require(!_isExcludedFromFee[bot], "Cannot be excluded from fees and also be a bot.");
        require(!_isExcludedFromLimits[bot], "Cannot be excluded from limits and also be a bot.");
        _isBot[bot] = true;
    }

    function removeBot(address bot) external {
        require(
            _msgSender() == _feeWallet || 
            _msgSender() == owner() ||
            _msgSender() == _devWallet);
        _isBot[bot] = false;
    }

    function removeBots(address[] memory bots) external {
        require(
            _msgSender() == _feeWallet || 
            _msgSender() == owner() ||
            _msgSender() == _devWallet);

        for (uint256 i = 0; i < bots.length; i++) {
            _isBot[bots[i]] = false;
        }
    }

    function _setMaxWallet() private {
        _maxWallet = _tSupply.mul(_maxWalletPercent).div(100);
        emit MaxWalletAmountUpdated(_maxWallet);
    }

    function _setMaxTransaction() private {
        _maxTransaction = _tSupply.mul(_maxTransactionPercent).div(100);
        emit MaxTransactionAmountUpdated(_maxTransaction);
    }

    function _setGM() private returns (bool) {
        _currentTimestamp = block.timestamp;
        uint256 hour = uint256(int(_currentTimestamp.div(3600))+_timezone).mod(24);

        // checks whether we are currently between the hours of GM.
        bool newGM = (_gmHourStart <= hour  && hour < _gmHourEnd);

        // if the _gm value changes, we emit an event and return true
        if (_gm != newGM) {
            _gm = newGM;
            emit GMUpdated(newGM);
            return true;
        }
        return false;
    }
    
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"on","type":"bool"}],"name":"GMUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTransaction","type":"uint256"}],"name":"MaxTransactionAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"MaxWalletAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"bot","type":"address"}],"name":"addBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots","type":"address[]"}],"name":"addBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"g","type":"bool"}],"name":"forceGM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBlacklistedWallets","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDevWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gm","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gmHourEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gmHourStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"balances","type":"uint256[]"}],"name":"multisendToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"bot","type":"address"}],"name":"removeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots","type":"address[]"}],"name":"removeBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"setDevTaxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"w","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"w","type":"address"}],"name":"setFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"on","type":"bool"}],"name":"setForceGM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"hour","type":"uint256"}],"name":"setGMHourEnd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"hour","type":"uint256"}],"name":"setGMHourStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"setMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"setTaxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int8","name":"tz","type":"int8"}],"name":"setTimezone","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timezone","outputs":[{"internalType":"int8","name":"","type":"int8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600960146101000a81548160ff0219169083151502179055506000600960156101000a81548160ff0219169083151502179055506000600960166101000a81548160ff0219169083151502179055506000600960176101000a81548160ff0219169083151502179055507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb600960186101000a81548160ff021916908360000b60ff1602179055506004600b556008600c556001600d556003600e556000600f556009601055600b60115560026012556001601355600c54600a620000ec9190620010a9565b620f4240620000fc9190620010fa565b6015553480156200010c57600080fd5b506200012d62000121620009b160201b60201c565b620009b960201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001b930600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660155462000a7d60201b60201c565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000227573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024d9190620011c5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fd9190620011c5565b6040518363ffffffff1660e01b81526004016200031c92919062001208565b6020604051808303816000875af11580156200033c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003629190620011c5565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426014819055507354e7bf842acd9986d9ae0522247b6dfe4047f60f600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735d9a31749ea27ce29a0d5234cd7c7185546c44d9600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601554600260006200046a620009b160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160046000620004be62000c5060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560006200067162000c5060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200091262000c7960201b60201c565b6200092262000cde60201b60201c565b6200093262000d5960201b60201c565b62000942620009b160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601554604051620009a3919062001246565b60405180910390a362001582565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000af0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ae790620012ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000b63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b5a9062001382565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000c43919062001246565b60405180910390a3505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600062000c8b62000dd460201b60201c565b9050801562000cdb57600960179054906101000a900460ff1662000cc157600d54600e5462000cbb9190620013a4565b62000cd4565b600d54600f5462000cd39190620013a4565b5b600b819055505b50565b62000d16606462000d0260125460155462000ed460201b62001d461790919060201c565b62000eec60201b62001d5c1790919060201c565b6016819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00160165460405162000d4f919062001246565b60405180910390a1565b62000d91606462000d7d60135460155462000ed460201b62001d461790919060201c565b62000eec60201b62001d5c1790919060201c565b6017819055507f7c1cb3702d8e1fa6d24b12dd90670ab69c6d66d58233103d37da8b07d6b850ac60175460405162000dca919062001246565b60405180910390a1565b600042601481905550600062000e366018600960189054906101000a900460000b60000b62000e16610e1060145462000eec60201b62001d5c1790919060201c565b62000e2291906200140b565b62000f0460201b62001d721790919060201c565b90506000816010541115801562000e4e575060115482105b9050801515600960179054906101000a900460ff1615151462000eca5780600960176101000a81548160ff0219169083151502179055507f74b491e4baeda06b7ceae407eab65ee0f7aea1351af1e3acf4a945f7d701d4c18160405162000eb69190620014c6565b60405180910390a160019250505062000ed1565b6000925050505b90565b6000818362000ee49190620010fa565b905092915050565b6000818362000efc919062001512565b905092915050565b6000818362000f1491906200154a565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000faa5780860481111562000f825762000f8162000f1c565b5b600185161562000f925780820291505b808102905062000fa28562000f4b565b945062000f62565b94509492505050565b60008262000fc5576001905062001098565b8162000fd5576000905062001098565b816001811462000fee576002811462000ff9576200102f565b600191505062001098565b60ff8411156200100e576200100d62000f1c565b5b8360020a91508482111562001028576200102762000f1c565b5b5062001098565b5060208310610133831016604e8410600b8410161715620010695782820a90508381111562001063576200106262000f1c565b5b62001098565b62001078848484600162000f58565b9250905081840481111562001092576200109162000f1c565b5b81810290505b9392505050565b6000819050919050565b6000620010b6826200109f565b9150620010c3836200109f565b9250620010f27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000fb3565b905092915050565b600062001107826200109f565b915062001114836200109f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001150576200114f62000f1c565b5b828202905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200118d8262001160565b9050919050565b6200119f8162001180565b8114620011ab57600080fd5b50565b600081519050620011bf8162001194565b92915050565b600060208284031215620011de57620011dd6200115b565b5b6000620011ee84828501620011ae565b91505092915050565b620012028162001180565b82525050565b60006040820190506200121f6000830185620011f7565b6200122e6020830184620011f7565b9392505050565b62001240816200109f565b82525050565b60006020820190506200125d600083018462001235565b92915050565b600082825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000620012d260248362001263565b9150620012df8262001274565b604082019050919050565b600060208201905081810360008301526200130581620012c3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200136a60228362001263565b915062001377826200130c565b604082019050919050565b600060208201905081810360008301526200139d816200135b565b9050919050565b6000620013b1826200109f565b9150620013be836200109f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620013f657620013f562000f1c565b5b828201905092915050565b6000819050919050565b6000620014188262001401565b9150620014258362001401565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0383136000831215161562001463576200146262000f1c565b5b817f80000000000000000000000000000000000000000000000000000000000000000383126000831216156200149e576200149d62000f1c565b5b828201905092915050565b60008115159050919050565b620014c081620014a9565b82525050565b6000602082019050620014dd6000830184620014b5565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200151f826200109f565b91506200152c836200109f565b9250826200153f576200153e620014e3565b5b828204905092915050565b600062001557826200109f565b915062001564836200109f565b925082620015775762001576620014e3565b5b828206905092915050565b614a3280620015926000396000f3fe6080604052600436106102815760003560e01c8063893d20e81161014f578063c3f70b52116100c1578063ea43915e1161007a578063ea43915e1461098f578063f25f4b56146109a6578063f2fde38b146109d1578063f4293890146109fa578063f8b45b0514610a11578063ffecf51614610a3c57610288565b8063c3f70b5214610881578063c4148fe5146108ac578063d2d745b1146108d7578063d34628cc14610900578063dd62ed3e14610929578063ddb211b31461096657610288565b8063a4324f4b11610113578063a4324f4b1461076f578063a9059cbb1461079a578063ab5a1887146107d7578063b5ead9b714610800578063b70373261461082b578063c0129d431461085657610288565b8063893d20e81461069c5780638da5cb5b146106c757806390d49b9d146106f257806395d89b411461071b5780639ab2c29c1461074657610288565b80634fbee193116101f357806361178386116101ac57806361178386146105a25780636c3bbfd7146105cb57806370a08231146105f4578063715018a6146106315780637541f41c1461064857806381f494621461067357610288565b80634fbee1931461049657806351bc3c85146104d35780635cce86cd146104ea5780635d0044ca146105275780635d1db1e3146105505780635fecd9261461057957610288565b806323b872dd1161024557806323b872dd14610374578063313ce567146103b157806331cd85be146103dc5780633bbac579146104055780633e05fee114610442578063453dd97f1461046b57610288565b806306fdde031461028d578063095ea7b3146102b857806318160ddd146102f55780631e2ff94f146103205780631f53ac021461034b57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610a65565b6040516102af9190613443565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da919061350d565b610aa2565b6040516102ec9190613568565b60405180910390f35b34801561030157600080fd5b5061030a610ac0565b6040516103179190613592565b60405180910390f35b34801561032c57600080fd5b50610335610aca565b6040516103429190613592565b60405180910390f35b34801561035757600080fd5b50610372600480360381019061036d91906135eb565b610ad4565b005b34801561038057600080fd5b5061039b60048036038101906103969190613618565b610c8c565b6040516103a89190613568565b60405180910390f35b3480156103bd57600080fd5b506103c6610d65565b6040516103d39190613592565b60405180910390f35b3480156103e857600080fd5b5061040360048036038101906103fe919061366b565b610d6f565b005b34801561041157600080fd5b5061042c60048036038101906104279190613698565b610dc5565b6040516104399190613568565b60405180910390f35b34801561044e57600080fd5b50610469600480360381019061046491906136fe565b610e1b565b005b34801561047757600080fd5b50610480610eb8565b60405161048d919061373a565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190613698565b610ee2565b6040516104ca9190613568565b60405180910390f35b3480156104df57600080fd5b506104e8610f38565b005b3480156104f657600080fd5b50610511600480360381019061050c9190613698565b61104f565b60405161051e9190613568565b60405180910390f35b34801561053357600080fd5b5061054e6004803603810190610549919061366b565b6110a5565b005b34801561055c57600080fd5b5061057760048036038101906105729190613781565b611102565b005b34801561058557600080fd5b506105a0600480360381019061059b9190613698565b611127565b005b3480156105ae57600080fd5b506105c960048036038101906105c4919061366b565b611286565b005b3480156105d757600080fd5b506105f260048036038101906105ed91906138f6565b6112dc565b005b34801561060057600080fd5b5061061b60048036038101906106169190613698565b611475565b6040516106289190613592565b60405180910390f35b34801561063d57600080fd5b506106466114be565b005b34801561065457600080fd5b5061065d6114d2565b60405161066a9190613592565b60405180910390f35b34801561067f57600080fd5b5061069a60048036038101906106959190613781565b6114dc565b005b3480156106a857600080fd5b506106b1611501565b6040516106be919061373a565b60405180910390f35b3480156106d357600080fd5b506106dc611577565b6040516106e9919061373a565b60405180910390f35b3480156106fe57600080fd5b50610719600480360381019061071491906135eb565b6115a0565b005b34801561072757600080fd5b50610730611758565b60405161073d9190613443565b60405180910390f35b34801561075257600080fd5b5061076d6004803603810190610768919061366b565b611795565b005b34801561077b57600080fd5b506107846117eb565b6040516107919190613592565b60405180910390f35b3480156107a657600080fd5b506107c160048036038101906107bc919061350d565b6117f5565b6040516107ce9190613568565b60405180910390f35b3480156107e357600080fd5b506107fe60048036038101906107f9919061366b565b611813565b005b34801561080c57600080fd5b50610815611870565b6040516108229190613592565b60405180910390f35b34801561083757600080fd5b5061084061187a565b60405161084d91906139fd565b60405180910390f35b34801561086257600080fd5b5061086b611908565b6040516108789190613568565b60405180910390f35b34801561088d57600080fd5b5061089661191f565b6040516108a39190613592565b60405180910390f35b3480156108b857600080fd5b506108c1611929565b6040516108ce9190613a2e565b60405180910390f35b3480156108e357600080fd5b506108fe60048036038101906108f99190613b0c565b611940565b005b34801561090c57600080fd5b50610927600480360381019061092291906138f6565b6119bb565b005b34801561093557600080fd5b50610950600480360381019061094b9190613b84565b611a09565b60405161095d9190613592565b60405180910390f35b34801561097257600080fd5b5061098d6004803603810190610988919061366b565b611a90565b005b34801561099b57600080fd5b506109a4611ae6565b005b3480156109b257600080fd5b506109bb611b0b565b6040516109c8919061373a565b60405180910390f35b3480156109dd57600080fd5b506109f860048036038101906109f39190613698565b611b35565b005b348015610a0657600080fd5b50610a0f611bb9565b005b348015610a1d57600080fd5b50610a26611d28565b604051610a339190613592565b60405180910390f35b348015610a4857600080fd5b50610a636004803603810190610a5e9190613698565b611d32565b005b60606040518060400160405280600281526020017f474d000000000000000000000000000000000000000000000000000000000000815250905090565b6000610ab6610aaf611d88565b8484611d90565b6001905092915050565b6000601554905090565b6000601454905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610b15611d88565b73ffffffffffffffffffffffffffffffffffffffff161480610b705750610b3a611577565b73ffffffffffffffffffffffffffffffffffffffff16610b58611d88565b73ffffffffffffffffffffffffffffffffffffffff16145b80610bcf5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610bb7611d88565b73ffffffffffffffffffffffffffffffffffffffff16145b610bd857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3f90613c36565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610c99848484611f5b565b610d5a84610ca5611d88565b610d55856040518060600160405280602881526020016149d560289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d0b611d88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e09092919063ffffffff16565b611d90565b600190509392505050565b6000600c54905090565b610d77612835565b6002811115610dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db290613ca2565b60405180910390fd5b80600d8190555050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610e23612835565b8060000b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4128015610e585750600d8160000b125b610e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8e90613d0e565b60405180910390fd5b80600960186101000a81548160ff021916908360000b60ff16021790555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f79611d88565b73ffffffffffffffffffffffffffffffffffffffff161480610fd45750610f9e611577565b73ffffffffffffffffffffffffffffffffffffffff16610fbc611d88565b73ffffffffffffffffffffffffffffffffffffffff16145b806110335750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661101b611d88565b73ffffffffffffffffffffffffffffffffffffffff16145b61103c57600080fd5b61104d61104830611475565b6128b3565b565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110ad612835565b606581106110f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e790613da0565b60405180910390fd5b806012819055506110ff612b2c565b50565b61110a612835565b80600960176101000a81548160ff02191690831515021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611168611d88565b73ffffffffffffffffffffffffffffffffffffffff1614806111c3575061118d611577565b73ffffffffffffffffffffffffffffffffffffffff166111ab611d88565b73ffffffffffffffffffffffffffffffffffffffff16145b806112225750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661120a611d88565b73ffffffffffffffffffffffffffffffffffffffff16145b61122b57600080fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61128e612835565b60038111156112d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c990613e0c565b60405180910390fd5b80600e8190555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661131d611d88565b73ffffffffffffffffffffffffffffffffffffffff1614806113785750611342611577565b73ffffffffffffffffffffffffffffffffffffffff16611360611d88565b73ffffffffffffffffffffffffffffffffffffffff16145b806113d75750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166113bf611d88565b73ffffffffffffffffffffffffffffffffffffffff16145b6113e057600080fd5b60005b81518110156114715760006003600084848151811061140557611404613e2c565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061146990613e8a565b9150506113e3565b5050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114c6612835565b6114d06000612b97565b565b6000600b54905090565b6114e4612835565b80600960156101000a81548160ff02191690831515021790555050565b60003073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561154e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115729190613ee8565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166115e1611d88565b73ffffffffffffffffffffffffffffffffffffffff16148061163c5750611606611577565b73ffffffffffffffffffffffffffffffffffffffff16611624611d88565b73ffffffffffffffffffffffffffffffffffffffff16145b8061169b5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611683611d88565b73ffffffffffffffffffffffffffffffffffffffff16145b6116a457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170b90613f87565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606040518060400160405280600681526020017f474d20e298950000000000000000000000000000000000000000000000000000815250905090565b61179d612835565b60115481106117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d890614019565b60405180910390fd5b8060108190555050565b6000601154905090565b6000611809611802611d88565b8484611f5b565b6001905092915050565b61181b612835565b6065811061185e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611855906140ab565b60405180910390fd5b8060138190555061186d612c5b565b50565b6000601054905090565b606060068054806020026020016040519081016040528092919081815260200182805480156118fe57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116118b4575b5050505050905090565b6000600960179054906101000a900460ff16905090565b6000601754905090565b6000600960189054906101000a900460000b905090565b611948612835565b60005b82518160ff1610156119b6576119a3611962611577565b848360ff168151811061197857611977613e2c565b5b6020026020010151848460ff168151811061199657611995613e2c565b5b6020026020010151612cc6565b80806119ae906140d8565b91505061194b565b505050565b6119c3612835565b60005b8151811015611a05576119f28282815181106119e5576119e4613e2c565b5b6020026020010151612e5a565b80806119fd90613e8a565b9150506119c6565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611a98612835565b6010548111611adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad390614174565b60405180910390fd5b8060118190555050565b611aee612835565b6000600960146101000a81548160ff021916908315150217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b3d612835565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba490614206565b60405180910390fd5b611bb681612b97565b50565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611bfa611d88565b73ffffffffffffffffffffffffffffffffffffffff161480611c555750611c1f611577565b73ffffffffffffffffffffffffffffffffffffffff16611c3d611d88565b73ffffffffffffffffffffffffffffffffffffffff16145b80611cb45750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c9c611d88565b73ffffffffffffffffffffffffffffffffffffffff16145b611cbd57600080fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611d25573d6000803e3d6000fd5b50565b6000601654905090565b611d3a612835565b611d4381612e5a565b50565b60008183611d549190614226565b905092915050565b60008183611d6a91906142af565b905092915050565b60008183611d8091906142e0565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df790614383565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6790614415565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f4e9190613592565b60405180910390a3505050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156120085750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b90506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806120b55750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8061210d5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b806121655750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b9050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156121d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ce906144a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223e90614539565b60405180910390fd5b6000831161228a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612281906145cb565b60405180910390fd5b8161237357600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123335750600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612372576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123699061465d565b60405180910390fd5b5b60175483111561243157600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166123d357600080fd5b801561243057600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661242f57600080fd5b5b5b6016548361243e86611475565b612448919061467d565b11156124a557600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166124a457600080fd5b5b6124ad612fcf565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061254e5750600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156125655761255e858585612cc6565b50506127db565b600061257030611475565b9050600960169054906101000a900460ff161580156125dd5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b80156125e95750600081115b1561274a576125f7816128b3565b60004790506000811115612748576000612644600b54612636612627600d54600b5461302590919063ffffffff16565b85611d4690919063ffffffff16565b611d5c90919063ffffffff16565b90506000612671600b54612663600d5486611d4690919063ffffffff16565b611d5c90919063ffffffff16565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156126db573d6000803e3d6000fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612744573d6000803e3d6000fd5b5050505b505b600960149054906101000a900460ff16156127cc576006859080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506127cb85612e5a565b5b6127d786868661303b565b5050505b505050565b6000838311158290612828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281f9190613443565b60405180910390fd5b5082840390509392505050565b61283d611d88565b73ffffffffffffffffffffffffffffffffffffffff1661285b611577565b73ffffffffffffffffffffffffffffffffffffffff16146128b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a89061471f565b60405180910390fd5b565b6001600960166101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156128eb576128ea6137b3565b5b6040519080825280602002602001820160405280156129195781602001602082028036833780820191505090505b509050308160008151811061293157612930613e2c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129fc9190613ee8565b81600181518110612a1057612a0f613e2c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a7730600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d90565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612adb959493929190614784565b600060405180830381600087803b158015612af557600080fd5b505af1158015612b09573d6000803e3d6000fd5b50505050506000600960166101000a81548160ff02191690831515021790555050565b612b566064612b48601254601554611d4690919063ffffffff16565b611d5c90919063ffffffff16565b6016819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001601654604051612b8d9190613592565b60405180910390a1565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612c856064612c77601354601554611d4690919063ffffffff16565b611d5c90919063ffffffff16565b6017819055507f7c1cb3702d8e1fa6d24b12dd90670ab69c6d66d58233103d37da8b07d6b850ac601754604051612cbc9190613592565b60405180910390a1565b612d1881600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461302590919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612dad81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132a990919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612e4d9190613592565b60405180910390a3505050565b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ee7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ede90614850565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6b906148e2565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000612fd96132bf565b9050801561302257600960179054906101000a900460ff1661300a57600d54600e54613005919061467d565b61301b565b600d54600f5461301a919061467d565b5b600b819055505b50565b600081836130339190614902565b905092915050565b60006130656064613057600b5485611d4690919063ffffffff16565b611d5c90919063ffffffff16565b9050600061307c828461302590919063ffffffff16565b90506130d083600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461302590919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061316581600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132a990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131fa82600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132a990919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161329a9190613592565b60405180910390a35050505050565b600081836132b7919061467d565b905092915050565b60004260148190555060006133116018600960189054906101000a900460000b60000b6132f9610e10601454611d5c90919063ffffffff16565b6133039190614940565b611d7290919063ffffffff16565b905060008160105411158015613328575060115482105b9050801515600960179054906101000a900460ff161515146133a05780600960176101000a81548160ff0219169083151502179055507f74b491e4baeda06b7ceae407eab65ee0f7aea1351af1e3acf4a945f7d701d4c18160405161338d9190613568565b60405180910390a16001925050506133a7565b6000925050505b90565b600081519050919050565b600082825260208201905092915050565b60005b838110156133e45780820151818401526020810190506133c9565b838111156133f3576000848401525b50505050565b6000601f19601f8301169050919050565b6000613415826133aa565b61341f81856133b5565b935061342f8185602086016133c6565b613438816133f9565b840191505092915050565b6000602082019050818103600083015261345d818461340a565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134a482613479565b9050919050565b6134b481613499565b81146134bf57600080fd5b50565b6000813590506134d1816134ab565b92915050565b6000819050919050565b6134ea816134d7565b81146134f557600080fd5b50565b600081359050613507816134e1565b92915050565b600080604083850312156135245761352361346f565b5b6000613532858286016134c2565b9250506020613543858286016134f8565b9150509250929050565b60008115159050919050565b6135628161354d565b82525050565b600060208201905061357d6000830184613559565b92915050565b61358c816134d7565b82525050565b60006020820190506135a76000830184613583565b92915050565b60006135b882613479565b9050919050565b6135c8816135ad565b81146135d357600080fd5b50565b6000813590506135e5816135bf565b92915050565b6000602082840312156136015761360061346f565b5b600061360f848285016135d6565b91505092915050565b6000806000606084860312156136315761363061346f565b5b600061363f868287016134c2565b9350506020613650868287016134c2565b9250506040613661868287016134f8565b9150509250925092565b6000602082840312156136815761368061346f565b5b600061368f848285016134f8565b91505092915050565b6000602082840312156136ae576136ad61346f565b5b60006136bc848285016134c2565b91505092915050565b60008160000b9050919050565b6136db816136c5565b81146136e657600080fd5b50565b6000813590506136f8816136d2565b92915050565b6000602082840312156137145761371361346f565b5b6000613722848285016136e9565b91505092915050565b61373481613499565b82525050565b600060208201905061374f600083018461372b565b92915050565b61375e8161354d565b811461376957600080fd5b50565b60008135905061377b81613755565b92915050565b6000602082840312156137975761379661346f565b5b60006137a58482850161376c565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6137eb826133f9565b810181811067ffffffffffffffff8211171561380a576138096137b3565b5b80604052505050565b600061381d613465565b905061382982826137e2565b919050565b600067ffffffffffffffff821115613849576138486137b3565b5b602082029050602081019050919050565b600080fd5b600061387261386d8461382e565b613813565b905080838252602082019050602084028301858111156138955761389461385a565b5b835b818110156138be57806138aa88826134c2565b845260208401935050602081019050613897565b5050509392505050565b600082601f8301126138dd576138dc6137ae565b5b81356138ed84826020860161385f565b91505092915050565b60006020828403121561390c5761390b61346f565b5b600082013567ffffffffffffffff81111561392a57613929613474565b5b613936848285016138c8565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61397481613499565b82525050565b6000613986838361396b565b60208301905092915050565b6000602082019050919050565b60006139aa8261393f565b6139b4818561394a565b93506139bf8361395b565b8060005b838110156139f05781516139d7888261397a565b97506139e283613992565b9250506001810190506139c3565b5085935050505092915050565b60006020820190508181036000830152613a17818461399f565b905092915050565b613a28816136c5565b82525050565b6000602082019050613a436000830184613a1f565b92915050565b600067ffffffffffffffff821115613a6457613a636137b3565b5b602082029050602081019050919050565b6000613a88613a8384613a49565b613813565b90508083825260208201905060208402830185811115613aab57613aaa61385a565b5b835b81811015613ad45780613ac088826134f8565b845260208401935050602081019050613aad565b5050509392505050565b600082601f830112613af357613af26137ae565b5b8135613b03848260208601613a75565b91505092915050565b60008060408385031215613b2357613b2261346f565b5b600083013567ffffffffffffffff811115613b4157613b40613474565b5b613b4d858286016138c8565b925050602083013567ffffffffffffffff811115613b6e57613b6d613474565b5b613b7a85828601613ade565b9150509250929050565b60008060408385031215613b9b57613b9a61346f565b5b6000613ba9858286016134c2565b9250506020613bba858286016134c2565b9150509250929050565b7f43616e277420736574206465762077616c6c657420746f206275726e2061646460008201527f722e000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c206022836133b5565b9150613c2b82613bc4565b604082019050919050565b60006020820190508181036000830152613c4f81613c13565b9050919050565b7f4d6178696d756d20746178206f662032252e0000000000000000000000000000600082015250565b6000613c8c6012836133b5565b9150613c9782613c56565b602082019050919050565b60006020820190508181036000830152613cbb81613c7f565b9050919050565b7f54696d657a6f6e65206e6f74207265636f676e697a65642e0000000000000000600082015250565b6000613cf86018836133b5565b9150613d0382613cc2565b602082019050919050565b60006020820190508181036000830152613d2781613ceb565b9050919050565b7f4d61782077616c6c65742063616e6e6f74206265206c6172676572207468616e60008201527f20746f74616c20737570706c792e000000000000000000000000000000000000602082015250565b6000613d8a602e836133b5565b9150613d9582613d2e565b604082019050919050565b60006020820190508181036000830152613db981613d7d565b9050919050565b7f4d6178696d756d20746178206f662033252e0000000000000000000000000000600082015250565b6000613df66012836133b5565b9150613e0182613dc0565b602082019050919050565b60006020820190508181036000830152613e2581613de9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e95826134d7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ec857613ec7613e5b565b5b600182019050919050565b600081519050613ee2816134ab565b92915050565b600060208284031215613efe57613efd61346f565b5b6000613f0c84828501613ed3565b91505092915050565b7f43616e277420736574206665652077616c6c657420746f206275726e2061646460008201527f722e000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f716022836133b5565b9150613f7c82613f15565b604082019050919050565b60006020820190508181036000830152613fa081613f64565b9050919050565b7f474d206d6f64652068617320746f207374617274206265666f7265206974206560008201527f6e64732e00000000000000000000000000000000000000000000000000000000602082015250565b60006140036024836133b5565b915061400e82613fa7565b604082019050919050565b6000602082019050818103600083015261403281613ff6565b9050919050565b7f4d6178207472616e73616374696f6e2063616e6e6f74206265206c617267657260008201527f207468616e20746f74616c20737570706c792e00000000000000000000000000602082015250565b60006140956033836133b5565b91506140a082614039565b604082019050919050565b600060208201905081810360008301526140c481614088565b9050919050565b600060ff82169050919050565b60006140e3826140cb565b915060ff8214156140f7576140f6613e5b565b5b600182019050919050565b7f474d206d6f64652068617320746f20656e64206166746572206974207374617260008201527f74732e0000000000000000000000000000000000000000000000000000000000602082015250565b600061415e6023836133b5565b915061416982614102565b604082019050919050565b6000602082019050818103600083015261418d81614151565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141f06026836133b5565b91506141fb82614194565b604082019050919050565b6000602082019050818103600083015261421f816141e3565b9050919050565b6000614231826134d7565b915061423c836134d7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561427557614274613e5b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142ba826134d7565b91506142c5836134d7565b9250826142d5576142d4614280565b5b828204905092915050565b60006142eb826134d7565b91506142f6836134d7565b92508261430657614305614280565b5b828206905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061436d6024836133b5565b915061437882614311565b604082019050919050565b6000602082019050818103600083015261439c81614360565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006143ff6022836133b5565b915061440a826143a3565b604082019050919050565b6000602082019050818103600083015261442e816143f2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f64726573732e0000000000000000000000000000000000000000000000000000602082015250565b60006144916026836133b5565b915061449c82614435565b604082019050919050565b600060208201905081810360008301526144c081614484565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573732e00000000000000000000000000000000000000000000000000000000602082015250565b60006145236024836133b5565b915061452e826144c7565b604082019050919050565b6000602082019050818103600083015261455281614516565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f2e00000000000000000000000000000000000000000000602082015250565b60006145b5602a836133b5565b91506145c082614559565b604082019050919050565b600060208201905081810360008301526145e4816145a8565b9050919050565b7f41646472657373206973206c6162656c6564206173206120626f742e2020547260008201527f616e7366657272696e672064697361626c65642e000000000000000000000000602082015250565b60006146476034836133b5565b9150614652826145eb565b604082019050919050565b600060208201905081810360008301526146768161463a565b9050919050565b6000614688826134d7565b9150614693836134d7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146c8576146c7613e5b565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006147096020836133b5565b9150614714826146d3565b602082019050919050565b60006020820190508181036000830152614738816146fc565b9050919050565b6000819050919050565b6000819050919050565b600061476e6147696147648461473f565b614749565b6134d7565b9050919050565b61477e81614753565b82525050565b600060a0820190506147996000830188613583565b6147a66020830187614775565b81810360408301526147b8818661399f565b90506147c7606083018561372b565b6147d46080830184613583565b9695505050505050565b7f43616e6e6f74206265206578636c756465642066726f6d206665657320616e6460008201527f20616c736f206265206120626f742e0000000000000000000000000000000000602082015250565b600061483a602f836133b5565b9150614845826147de565b604082019050919050565b600060208201905081810360008301526148698161482d565b9050919050565b7f43616e6e6f74206265206578636c756465642066726f6d206c696d697473206160008201527f6e6420616c736f206265206120626f742e000000000000000000000000000000602082015250565b60006148cc6031836133b5565b91506148d782614870565b604082019050919050565b600060208201905081810360008301526148fb816148bf565b9050919050565b600061490d826134d7565b9150614918836134d7565b92508282101561492b5761492a613e5b565b5b828203905092915050565b6000819050919050565b600061494b82614936565b915061495683614936565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0383136000831215161561499157614990613e5b565b5b817f80000000000000000000000000000000000000000000000000000000000000000383126000831216156149c9576149c8613e5b565b5b82820190509291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220e2845f47e8e7333e68b44b82ad1fcbe4f2bbbb164e3c8731c3f0a077ad56b41964736f6c634300080c0033

Deployed Bytecode

0x6080604052600436106102815760003560e01c8063893d20e81161014f578063c3f70b52116100c1578063ea43915e1161007a578063ea43915e1461098f578063f25f4b56146109a6578063f2fde38b146109d1578063f4293890146109fa578063f8b45b0514610a11578063ffecf51614610a3c57610288565b8063c3f70b5214610881578063c4148fe5146108ac578063d2d745b1146108d7578063d34628cc14610900578063dd62ed3e14610929578063ddb211b31461096657610288565b8063a4324f4b11610113578063a4324f4b1461076f578063a9059cbb1461079a578063ab5a1887146107d7578063b5ead9b714610800578063b70373261461082b578063c0129d431461085657610288565b8063893d20e81461069c5780638da5cb5b146106c757806390d49b9d146106f257806395d89b411461071b5780639ab2c29c1461074657610288565b80634fbee193116101f357806361178386116101ac57806361178386146105a25780636c3bbfd7146105cb57806370a08231146105f4578063715018a6146106315780637541f41c1461064857806381f494621461067357610288565b80634fbee1931461049657806351bc3c85146104d35780635cce86cd146104ea5780635d0044ca146105275780635d1db1e3146105505780635fecd9261461057957610288565b806323b872dd1161024557806323b872dd14610374578063313ce567146103b157806331cd85be146103dc5780633bbac579146104055780633e05fee114610442578063453dd97f1461046b57610288565b806306fdde031461028d578063095ea7b3146102b857806318160ddd146102f55780631e2ff94f146103205780631f53ac021461034b57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610a65565b6040516102af9190613443565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da919061350d565b610aa2565b6040516102ec9190613568565b60405180910390f35b34801561030157600080fd5b5061030a610ac0565b6040516103179190613592565b60405180910390f35b34801561032c57600080fd5b50610335610aca565b6040516103429190613592565b60405180910390f35b34801561035757600080fd5b50610372600480360381019061036d91906135eb565b610ad4565b005b34801561038057600080fd5b5061039b60048036038101906103969190613618565b610c8c565b6040516103a89190613568565b60405180910390f35b3480156103bd57600080fd5b506103c6610d65565b6040516103d39190613592565b60405180910390f35b3480156103e857600080fd5b5061040360048036038101906103fe919061366b565b610d6f565b005b34801561041157600080fd5b5061042c60048036038101906104279190613698565b610dc5565b6040516104399190613568565b60405180910390f35b34801561044e57600080fd5b50610469600480360381019061046491906136fe565b610e1b565b005b34801561047757600080fd5b50610480610eb8565b60405161048d919061373a565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190613698565b610ee2565b6040516104ca9190613568565b60405180910390f35b3480156104df57600080fd5b506104e8610f38565b005b3480156104f657600080fd5b50610511600480360381019061050c9190613698565b61104f565b60405161051e9190613568565b60405180910390f35b34801561053357600080fd5b5061054e6004803603810190610549919061366b565b6110a5565b005b34801561055c57600080fd5b5061057760048036038101906105729190613781565b611102565b005b34801561058557600080fd5b506105a0600480360381019061059b9190613698565b611127565b005b3480156105ae57600080fd5b506105c960048036038101906105c4919061366b565b611286565b005b3480156105d757600080fd5b506105f260048036038101906105ed91906138f6565b6112dc565b005b34801561060057600080fd5b5061061b60048036038101906106169190613698565b611475565b6040516106289190613592565b60405180910390f35b34801561063d57600080fd5b506106466114be565b005b34801561065457600080fd5b5061065d6114d2565b60405161066a9190613592565b60405180910390f35b34801561067f57600080fd5b5061069a60048036038101906106959190613781565b6114dc565b005b3480156106a857600080fd5b506106b1611501565b6040516106be919061373a565b60405180910390f35b3480156106d357600080fd5b506106dc611577565b6040516106e9919061373a565b60405180910390f35b3480156106fe57600080fd5b50610719600480360381019061071491906135eb565b6115a0565b005b34801561072757600080fd5b50610730611758565b60405161073d9190613443565b60405180910390f35b34801561075257600080fd5b5061076d6004803603810190610768919061366b565b611795565b005b34801561077b57600080fd5b506107846117eb565b6040516107919190613592565b60405180910390f35b3480156107a657600080fd5b506107c160048036038101906107bc919061350d565b6117f5565b6040516107ce9190613568565b60405180910390f35b3480156107e357600080fd5b506107fe60048036038101906107f9919061366b565b611813565b005b34801561080c57600080fd5b50610815611870565b6040516108229190613592565b60405180910390f35b34801561083757600080fd5b5061084061187a565b60405161084d91906139fd565b60405180910390f35b34801561086257600080fd5b5061086b611908565b6040516108789190613568565b60405180910390f35b34801561088d57600080fd5b5061089661191f565b6040516108a39190613592565b60405180910390f35b3480156108b857600080fd5b506108c1611929565b6040516108ce9190613a2e565b60405180910390f35b3480156108e357600080fd5b506108fe60048036038101906108f99190613b0c565b611940565b005b34801561090c57600080fd5b50610927600480360381019061092291906138f6565b6119bb565b005b34801561093557600080fd5b50610950600480360381019061094b9190613b84565b611a09565b60405161095d9190613592565b60405180910390f35b34801561097257600080fd5b5061098d6004803603810190610988919061366b565b611a90565b005b34801561099b57600080fd5b506109a4611ae6565b005b3480156109b257600080fd5b506109bb611b0b565b6040516109c8919061373a565b60405180910390f35b3480156109dd57600080fd5b506109f860048036038101906109f39190613698565b611b35565b005b348015610a0657600080fd5b50610a0f611bb9565b005b348015610a1d57600080fd5b50610a26611d28565b604051610a339190613592565b60405180910390f35b348015610a4857600080fd5b50610a636004803603810190610a5e9190613698565b611d32565b005b60606040518060400160405280600281526020017f474d000000000000000000000000000000000000000000000000000000000000815250905090565b6000610ab6610aaf611d88565b8484611d90565b6001905092915050565b6000601554905090565b6000601454905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610b15611d88565b73ffffffffffffffffffffffffffffffffffffffff161480610b705750610b3a611577565b73ffffffffffffffffffffffffffffffffffffffff16610b58611d88565b73ffffffffffffffffffffffffffffffffffffffff16145b80610bcf5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610bb7611d88565b73ffffffffffffffffffffffffffffffffffffffff16145b610bd857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3f90613c36565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610c99848484611f5b565b610d5a84610ca5611d88565b610d55856040518060600160405280602881526020016149d560289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d0b611d88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e09092919063ffffffff16565b611d90565b600190509392505050565b6000600c54905090565b610d77612835565b6002811115610dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db290613ca2565b60405180910390fd5b80600d8190555050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610e23612835565b8060000b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4128015610e585750600d8160000b125b610e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8e90613d0e565b60405180910390fd5b80600960186101000a81548160ff021916908360000b60ff16021790555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f79611d88565b73ffffffffffffffffffffffffffffffffffffffff161480610fd45750610f9e611577565b73ffffffffffffffffffffffffffffffffffffffff16610fbc611d88565b73ffffffffffffffffffffffffffffffffffffffff16145b806110335750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661101b611d88565b73ffffffffffffffffffffffffffffffffffffffff16145b61103c57600080fd5b61104d61104830611475565b6128b3565b565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110ad612835565b606581106110f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e790613da0565b60405180910390fd5b806012819055506110ff612b2c565b50565b61110a612835565b80600960176101000a81548160ff02191690831515021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611168611d88565b73ffffffffffffffffffffffffffffffffffffffff1614806111c3575061118d611577565b73ffffffffffffffffffffffffffffffffffffffff166111ab611d88565b73ffffffffffffffffffffffffffffffffffffffff16145b806112225750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661120a611d88565b73ffffffffffffffffffffffffffffffffffffffff16145b61122b57600080fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61128e612835565b60038111156112d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c990613e0c565b60405180910390fd5b80600e8190555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661131d611d88565b73ffffffffffffffffffffffffffffffffffffffff1614806113785750611342611577565b73ffffffffffffffffffffffffffffffffffffffff16611360611d88565b73ffffffffffffffffffffffffffffffffffffffff16145b806113d75750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166113bf611d88565b73ffffffffffffffffffffffffffffffffffffffff16145b6113e057600080fd5b60005b81518110156114715760006003600084848151811061140557611404613e2c565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061146990613e8a565b9150506113e3565b5050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114c6612835565b6114d06000612b97565b565b6000600b54905090565b6114e4612835565b80600960156101000a81548160ff02191690831515021790555050565b60003073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561154e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115729190613ee8565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166115e1611d88565b73ffffffffffffffffffffffffffffffffffffffff16148061163c5750611606611577565b73ffffffffffffffffffffffffffffffffffffffff16611624611d88565b73ffffffffffffffffffffffffffffffffffffffff16145b8061169b5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611683611d88565b73ffffffffffffffffffffffffffffffffffffffff16145b6116a457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170b90613f87565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606040518060400160405280600681526020017f474d20e298950000000000000000000000000000000000000000000000000000815250905090565b61179d612835565b60115481106117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d890614019565b60405180910390fd5b8060108190555050565b6000601154905090565b6000611809611802611d88565b8484611f5b565b6001905092915050565b61181b612835565b6065811061185e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611855906140ab565b60405180910390fd5b8060138190555061186d612c5b565b50565b6000601054905090565b606060068054806020026020016040519081016040528092919081815260200182805480156118fe57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116118b4575b5050505050905090565b6000600960179054906101000a900460ff16905090565b6000601754905090565b6000600960189054906101000a900460000b905090565b611948612835565b60005b82518160ff1610156119b6576119a3611962611577565b848360ff168151811061197857611977613e2c565b5b6020026020010151848460ff168151811061199657611995613e2c565b5b6020026020010151612cc6565b80806119ae906140d8565b91505061194b565b505050565b6119c3612835565b60005b8151811015611a05576119f28282815181106119e5576119e4613e2c565b5b6020026020010151612e5a565b80806119fd90613e8a565b9150506119c6565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611a98612835565b6010548111611adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad390614174565b60405180910390fd5b8060118190555050565b611aee612835565b6000600960146101000a81548160ff021916908315150217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b3d612835565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba490614206565b60405180910390fd5b611bb681612b97565b50565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611bfa611d88565b73ffffffffffffffffffffffffffffffffffffffff161480611c555750611c1f611577565b73ffffffffffffffffffffffffffffffffffffffff16611c3d611d88565b73ffffffffffffffffffffffffffffffffffffffff16145b80611cb45750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c9c611d88565b73ffffffffffffffffffffffffffffffffffffffff16145b611cbd57600080fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611d25573d6000803e3d6000fd5b50565b6000601654905090565b611d3a612835565b611d4381612e5a565b50565b60008183611d549190614226565b905092915050565b60008183611d6a91906142af565b905092915050565b60008183611d8091906142e0565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df790614383565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6790614415565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f4e9190613592565b60405180910390a3505050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156120085750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b90506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806120b55750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8061210d5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b806121655750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b9050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156121d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ce906144a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223e90614539565b60405180910390fd5b6000831161228a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612281906145cb565b60405180910390fd5b8161237357600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123335750600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612372576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123699061465d565b60405180910390fd5b5b60175483111561243157600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166123d357600080fd5b801561243057600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661242f57600080fd5b5b5b6016548361243e86611475565b612448919061467d565b11156124a557600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166124a457600080fd5b5b6124ad612fcf565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061254e5750600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156125655761255e858585612cc6565b50506127db565b600061257030611475565b9050600960169054906101000a900460ff161580156125dd5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b80156125e95750600081115b1561274a576125f7816128b3565b60004790506000811115612748576000612644600b54612636612627600d54600b5461302590919063ffffffff16565b85611d4690919063ffffffff16565b611d5c90919063ffffffff16565b90506000612671600b54612663600d5486611d4690919063ffffffff16565b611d5c90919063ffffffff16565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156126db573d6000803e3d6000fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612744573d6000803e3d6000fd5b5050505b505b600960149054906101000a900460ff16156127cc576006859080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506127cb85612e5a565b5b6127d786868661303b565b5050505b505050565b6000838311158290612828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281f9190613443565b60405180910390fd5b5082840390509392505050565b61283d611d88565b73ffffffffffffffffffffffffffffffffffffffff1661285b611577565b73ffffffffffffffffffffffffffffffffffffffff16146128b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a89061471f565b60405180910390fd5b565b6001600960166101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156128eb576128ea6137b3565b5b6040519080825280602002602001820160405280156129195781602001602082028036833780820191505090505b509050308160008151811061293157612930613e2c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129fc9190613ee8565b81600181518110612a1057612a0f613e2c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a7730600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d90565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612adb959493929190614784565b600060405180830381600087803b158015612af557600080fd5b505af1158015612b09573d6000803e3d6000fd5b50505050506000600960166101000a81548160ff02191690831515021790555050565b612b566064612b48601254601554611d4690919063ffffffff16565b611d5c90919063ffffffff16565b6016819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001601654604051612b8d9190613592565b60405180910390a1565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612c856064612c77601354601554611d4690919063ffffffff16565b611d5c90919063ffffffff16565b6017819055507f7c1cb3702d8e1fa6d24b12dd90670ab69c6d66d58233103d37da8b07d6b850ac601754604051612cbc9190613592565b60405180910390a1565b612d1881600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461302590919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612dad81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132a990919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612e4d9190613592565b60405180910390a3505050565b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ee7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ede90614850565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6b906148e2565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000612fd96132bf565b9050801561302257600960179054906101000a900460ff1661300a57600d54600e54613005919061467d565b61301b565b600d54600f5461301a919061467d565b5b600b819055505b50565b600081836130339190614902565b905092915050565b60006130656064613057600b5485611d4690919063ffffffff16565b611d5c90919063ffffffff16565b9050600061307c828461302590919063ffffffff16565b90506130d083600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461302590919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061316581600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132a990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131fa82600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132a990919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161329a9190613592565b60405180910390a35050505050565b600081836132b7919061467d565b905092915050565b60004260148190555060006133116018600960189054906101000a900460000b60000b6132f9610e10601454611d5c90919063ffffffff16565b6133039190614940565b611d7290919063ffffffff16565b905060008160105411158015613328575060115482105b9050801515600960179054906101000a900460ff161515146133a05780600960176101000a81548160ff0219169083151502179055507f74b491e4baeda06b7ceae407eab65ee0f7aea1351af1e3acf4a945f7d701d4c18160405161338d9190613568565b60405180910390a16001925050506133a7565b6000925050505b90565b600081519050919050565b600082825260208201905092915050565b60005b838110156133e45780820151818401526020810190506133c9565b838111156133f3576000848401525b50505050565b6000601f19601f8301169050919050565b6000613415826133aa565b61341f81856133b5565b935061342f8185602086016133c6565b613438816133f9565b840191505092915050565b6000602082019050818103600083015261345d818461340a565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134a482613479565b9050919050565b6134b481613499565b81146134bf57600080fd5b50565b6000813590506134d1816134ab565b92915050565b6000819050919050565b6134ea816134d7565b81146134f557600080fd5b50565b600081359050613507816134e1565b92915050565b600080604083850312156135245761352361346f565b5b6000613532858286016134c2565b9250506020613543858286016134f8565b9150509250929050565b60008115159050919050565b6135628161354d565b82525050565b600060208201905061357d6000830184613559565b92915050565b61358c816134d7565b82525050565b60006020820190506135a76000830184613583565b92915050565b60006135b882613479565b9050919050565b6135c8816135ad565b81146135d357600080fd5b50565b6000813590506135e5816135bf565b92915050565b6000602082840312156136015761360061346f565b5b600061360f848285016135d6565b91505092915050565b6000806000606084860312156136315761363061346f565b5b600061363f868287016134c2565b9350506020613650868287016134c2565b9250506040613661868287016134f8565b9150509250925092565b6000602082840312156136815761368061346f565b5b600061368f848285016134f8565b91505092915050565b6000602082840312156136ae576136ad61346f565b5b60006136bc848285016134c2565b91505092915050565b60008160000b9050919050565b6136db816136c5565b81146136e657600080fd5b50565b6000813590506136f8816136d2565b92915050565b6000602082840312156137145761371361346f565b5b6000613722848285016136e9565b91505092915050565b61373481613499565b82525050565b600060208201905061374f600083018461372b565b92915050565b61375e8161354d565b811461376957600080fd5b50565b60008135905061377b81613755565b92915050565b6000602082840312156137975761379661346f565b5b60006137a58482850161376c565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6137eb826133f9565b810181811067ffffffffffffffff8211171561380a576138096137b3565b5b80604052505050565b600061381d613465565b905061382982826137e2565b919050565b600067ffffffffffffffff821115613849576138486137b3565b5b602082029050602081019050919050565b600080fd5b600061387261386d8461382e565b613813565b905080838252602082019050602084028301858111156138955761389461385a565b5b835b818110156138be57806138aa88826134c2565b845260208401935050602081019050613897565b5050509392505050565b600082601f8301126138dd576138dc6137ae565b5b81356138ed84826020860161385f565b91505092915050565b60006020828403121561390c5761390b61346f565b5b600082013567ffffffffffffffff81111561392a57613929613474565b5b613936848285016138c8565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61397481613499565b82525050565b6000613986838361396b565b60208301905092915050565b6000602082019050919050565b60006139aa8261393f565b6139b4818561394a565b93506139bf8361395b565b8060005b838110156139f05781516139d7888261397a565b97506139e283613992565b9250506001810190506139c3565b5085935050505092915050565b60006020820190508181036000830152613a17818461399f565b905092915050565b613a28816136c5565b82525050565b6000602082019050613a436000830184613a1f565b92915050565b600067ffffffffffffffff821115613a6457613a636137b3565b5b602082029050602081019050919050565b6000613a88613a8384613a49565b613813565b90508083825260208201905060208402830185811115613aab57613aaa61385a565b5b835b81811015613ad45780613ac088826134f8565b845260208401935050602081019050613aad565b5050509392505050565b600082601f830112613af357613af26137ae565b5b8135613b03848260208601613a75565b91505092915050565b60008060408385031215613b2357613b2261346f565b5b600083013567ffffffffffffffff811115613b4157613b40613474565b5b613b4d858286016138c8565b925050602083013567ffffffffffffffff811115613b6e57613b6d613474565b5b613b7a85828601613ade565b9150509250929050565b60008060408385031215613b9b57613b9a61346f565b5b6000613ba9858286016134c2565b9250506020613bba858286016134c2565b9150509250929050565b7f43616e277420736574206465762077616c6c657420746f206275726e2061646460008201527f722e000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c206022836133b5565b9150613c2b82613bc4565b604082019050919050565b60006020820190508181036000830152613c4f81613c13565b9050919050565b7f4d6178696d756d20746178206f662032252e0000000000000000000000000000600082015250565b6000613c8c6012836133b5565b9150613c9782613c56565b602082019050919050565b60006020820190508181036000830152613cbb81613c7f565b9050919050565b7f54696d657a6f6e65206e6f74207265636f676e697a65642e0000000000000000600082015250565b6000613cf86018836133b5565b9150613d0382613cc2565b602082019050919050565b60006020820190508181036000830152613d2781613ceb565b9050919050565b7f4d61782077616c6c65742063616e6e6f74206265206c6172676572207468616e60008201527f20746f74616c20737570706c792e000000000000000000000000000000000000602082015250565b6000613d8a602e836133b5565b9150613d9582613d2e565b604082019050919050565b60006020820190508181036000830152613db981613d7d565b9050919050565b7f4d6178696d756d20746178206f662033252e0000000000000000000000000000600082015250565b6000613df66012836133b5565b9150613e0182613dc0565b602082019050919050565b60006020820190508181036000830152613e2581613de9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e95826134d7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ec857613ec7613e5b565b5b600182019050919050565b600081519050613ee2816134ab565b92915050565b600060208284031215613efe57613efd61346f565b5b6000613f0c84828501613ed3565b91505092915050565b7f43616e277420736574206665652077616c6c657420746f206275726e2061646460008201527f722e000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f716022836133b5565b9150613f7c82613f15565b604082019050919050565b60006020820190508181036000830152613fa081613f64565b9050919050565b7f474d206d6f64652068617320746f207374617274206265666f7265206974206560008201527f6e64732e00000000000000000000000000000000000000000000000000000000602082015250565b60006140036024836133b5565b915061400e82613fa7565b604082019050919050565b6000602082019050818103600083015261403281613ff6565b9050919050565b7f4d6178207472616e73616374696f6e2063616e6e6f74206265206c617267657260008201527f207468616e20746f74616c20737570706c792e00000000000000000000000000602082015250565b60006140956033836133b5565b91506140a082614039565b604082019050919050565b600060208201905081810360008301526140c481614088565b9050919050565b600060ff82169050919050565b60006140e3826140cb565b915060ff8214156140f7576140f6613e5b565b5b600182019050919050565b7f474d206d6f64652068617320746f20656e64206166746572206974207374617260008201527f74732e0000000000000000000000000000000000000000000000000000000000602082015250565b600061415e6023836133b5565b915061416982614102565b604082019050919050565b6000602082019050818103600083015261418d81614151565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141f06026836133b5565b91506141fb82614194565b604082019050919050565b6000602082019050818103600083015261421f816141e3565b9050919050565b6000614231826134d7565b915061423c836134d7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561427557614274613e5b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142ba826134d7565b91506142c5836134d7565b9250826142d5576142d4614280565b5b828204905092915050565b60006142eb826134d7565b91506142f6836134d7565b92508261430657614305614280565b5b828206905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061436d6024836133b5565b915061437882614311565b604082019050919050565b6000602082019050818103600083015261439c81614360565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006143ff6022836133b5565b915061440a826143a3565b604082019050919050565b6000602082019050818103600083015261442e816143f2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f64726573732e0000000000000000000000000000000000000000000000000000602082015250565b60006144916026836133b5565b915061449c82614435565b604082019050919050565b600060208201905081810360008301526144c081614484565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573732e00000000000000000000000000000000000000000000000000000000602082015250565b60006145236024836133b5565b915061452e826144c7565b604082019050919050565b6000602082019050818103600083015261455281614516565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f2e00000000000000000000000000000000000000000000602082015250565b60006145b5602a836133b5565b91506145c082614559565b604082019050919050565b600060208201905081810360008301526145e4816145a8565b9050919050565b7f41646472657373206973206c6162656c6564206173206120626f742e2020547260008201527f616e7366657272696e672064697361626c65642e000000000000000000000000602082015250565b60006146476034836133b5565b9150614652826145eb565b604082019050919050565b600060208201905081810360008301526146768161463a565b9050919050565b6000614688826134d7565b9150614693836134d7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146c8576146c7613e5b565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006147096020836133b5565b9150614714826146d3565b602082019050919050565b60006020820190508181036000830152614738816146fc565b9050919050565b6000819050919050565b6000819050919050565b600061476e6147696147648461473f565b614749565b6134d7565b9050919050565b61477e81614753565b82525050565b600060a0820190506147996000830188613583565b6147a66020830187614775565b81810360408301526147b8818661399f565b90506147c7606083018561372b565b6147d46080830184613583565b9695505050505050565b7f43616e6e6f74206265206578636c756465642066726f6d206665657320616e6460008201527f20616c736f206265206120626f742e0000000000000000000000000000000000602082015250565b600061483a602f836133b5565b9150614845826147de565b604082019050919050565b600060208201905081810360008301526148698161482d565b9050919050565b7f43616e6e6f74206265206578636c756465642066726f6d206c696d697473206160008201527f6e6420616c736f206265206120626f742e000000000000000000000000000000602082015250565b60006148cc6031836133b5565b91506148d782614870565b604082019050919050565b600060208201905081810360008301526148fb816148bf565b9050919050565b600061490d826134d7565b9150614918836134d7565b92508282101561492b5761492a613e5b565b5b828203905092915050565b6000819050919050565b600061494b82614936565b915061495683614936565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0383136000831215161561499157614990613e5b565b5b817f80000000000000000000000000000000000000000000000000000000000000000383126000831216156149c9576149c8613e5b565b5b82820190509291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220e2845f47e8e7333e68b44b82ad1fcbe4f2bbbb164e3c8731c3f0a077ad56b41964736f6c634300080c0033

Deployed Bytecode Sourcemap

11429:19470:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14771:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21183:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15050:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15668:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17296:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21345:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14957:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19475:395;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16082:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17604:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16840:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16178:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28310:236;;;;;;;;;;;;;:::i;:::-;;16299:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18013:486;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28800:70;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29414:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19047:420;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29645:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15145:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2809:103;;;;;;;;;;;;;:::i;:::-;;15978:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20655:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16619:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2161:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16986:302;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14862:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19878:391;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16524:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21657:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18507:532;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16425:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16715:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15500:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15872:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15578:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21879:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28965:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15263:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20277:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20937:182;;;;;;;;;;;;;:::i;:::-;;15405:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3067:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28554:238;;;;;;;;;;;;;:::i;:::-;;15777:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28878:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14771:83;14808:13;14841:5;;;;;;;;;;;;;;;;;14834:12;;14771:83;:::o;21183:152::-;21249:4;21266:39;21275:12;:10;:12::i;:::-;21289:7;21298:6;21266:8;:39::i;:::-;21323:4;21316:11;;21183:152;;;;:::o;15050:87::-;15094:7;15121:8;;15114:15;;15050:87;:::o;15668:101::-;15717:7;15744:17;;15737:24;;15668:101;:::o;17296:300::-;17395:10;;;;;;;;;;;17379:26;;:12;:10;:12::i;:::-;:26;;;:67;;;;17439:7;:5;:7::i;:::-;17423:23;;:12;:10;:12::i;:::-;:23;;;17379:67;:110;;;;17479:10;;;;;;;;;;;17463:26;;:12;:10;:12::i;:::-;:26;;;17379:110;17357:133;;;;;;17522:1;17509:15;;:1;:15;;;;17501:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;17587:1;17574:10;;:14;;;;;;;;;;;;;;;;;;17296:300;:::o;21345:304::-;21434:4;21451:36;21461:6;21469:9;21480:6;21451:9;:36::i;:::-;21498:121;21507:6;21515:12;:10;:12::i;:::-;21529:89;21567:6;21529:89;;;;;;;;;;;;;;;;;:11;:19;21541:6;21529:19;;;;;;;;;;;;;;;:33;21549:12;:10;:12::i;:::-;21529:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;21498:8;:121::i;:::-;21637:4;21630:11;;21345:304;;;;;:::o;14957:85::-;14998:7;15025:9;;15018:16;;14957:85;:::o;19475:395::-;2047:13;:11;:13::i;:::-;19803:1:::1;19792:7;:12;;19784:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;19855:7;19838:14;:24;;;;19475:395:::0;:::o;16082:88::-;16129:4;16153:6;:9;16160:1;16153:9;;;;;;;;;;;;;;;;;;;;;;;;;16146:16;;16082:88;;;:::o;17604:401::-;2047:13;:11;:13::i;:::-;17930:2:::1;17924:8;;:3;:8;:19;;;;;17941:2;17936;:7;;;17924:19;17916:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;17995:2;17983:9;;:14;;;;;;;;;;;;;;;;;;;;17604:401:::0;:::o;16840:90::-;16885:7;16912:10;;;;;;;;;;;16905:17;;16840:90;:::o;16178:113::-;16238:4;16262:18;:21;16281:1;16262:21;;;;;;;;;;;;;;;;;;;;;;;;;16255:28;;16178:113;;;:::o;28310:236::-;28390:10;;;;;;;;;;;28374:26;;:12;:10;:12::i;:::-;:26;;;:67;;;;28434:7;:5;:7::i;:::-;28418:23;;:12;:10;:12::i;:::-;:23;;;28374:67;:110;;;;28474:10;;;;;;;;;;;28458:26;;:12;:10;:12::i;:::-;:26;;;28374:110;28352:133;;;;;;28496:42;28513:24;28531:4;28513:9;:24::i;:::-;28496:16;:42::i;:::-;28310:236::o;16299:118::-;16361:4;16385:21;:24;16407:1;16385:24;;;;;;;;;;;;;;;;;;;;;;;;;16378:31;;16299:118;;;:::o;18013:486::-;2047:13;:11;:13::i;:::-;18373:3:::1;18363:7;:13;18355:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;18458:7;18438:17;:27;;;;18476:15;:13;:15::i;:::-;18013:486:::0;:::o;28800:70::-;2047:13;:11;:13::i;:::-;28861:1:::1;28855:3;;:7;;;;;;;;;;;;;;;;;;28800:70:::0;:::o;29414:223::-;29504:10;;;;;;;;;;;29488:26;;:12;:10;:12::i;:::-;:26;;;:67;;;;29548:7;:5;:7::i;:::-;29532:23;;:12;:10;:12::i;:::-;:23;;;29488:67;:110;;;;29588:10;;;;;;;;;;;29572:26;;:12;:10;:12::i;:::-;:26;;;29488:110;29466:133;;;;;;29624:5;29610:6;:11;29617:3;29610:11;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;;;;;;;29414:223;:::o;19047:420::-;2047:13;:11;:13::i;:::-;19396:1:::1;19385:7;:12;;19377:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;19452:7;19431:18;:28;;;;19047:420:::0;:::o;29645:308::-;29746:10;;;;;;;;;;;29730:26;;:12;:10;:12::i;:::-;:26;;;:67;;;;29790:7;:5;:7::i;:::-;29774:23;;:12;:10;:12::i;:::-;:23;;;29730:67;:110;;;;29830:10;;;;;;;;;;;29814:26;;:12;:10;:12::i;:::-;:26;;;29730:110;29708:133;;;;;;29859:9;29854:92;29878:4;:11;29874:1;:15;29854:92;;;29929:5;29911:6;:15;29918:4;29923:1;29918:7;;;;;;;;:::i;:::-;;;;;;;;29911:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;29891:3;;;;;:::i;:::-;;;;29854:92;;;;29645:308;:::o;15145:110::-;15202:7;15229:9;:18;15239:7;15229:18;;;;;;;;;;;;;;;;15222:25;;15145:110;;;:::o;2809:103::-;2047:13;:11;:13::i;:::-;2874:30:::1;2901:1;2874:18;:30::i;:::-;2809:103::o:0;15978:96::-;16021:7;16048:18;;16041:25;;15978:96;:::o;20655:274::-;2047:13;:11;:13::i;:::-;20919:2:::1;20908:8;;:13;;;;;;;;;;;;;;;;;;20655:274:::0;:::o;16619:88::-;16660:7;16687:4;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16680:19;;16619:88;:::o;2161:87::-;2207:7;2234:6;;;;;;;;;;;2227:13;;2161:87;:::o;16986:302::-;17085:10;;;;;;;;;;;17069:26;;:12;:10;:12::i;:::-;:26;;;:67;;;;17129:7;:5;:7::i;:::-;17113:23;;:12;:10;:12::i;:::-;:23;;;17069:67;:110;;;;17169:10;;;;;;;;;;;17153:26;;:12;:10;:12::i;:::-;:26;;;17069:110;17047:133;;;;;;17214:1;17201:15;;:1;:15;;;;17193:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;17279:1;17266:10;;:14;;;;;;;;;;;;;;;;;;16986:302;:::o;14862:87::-;14901:13;14934:7;;;;;;;;;;;;;;;;;14927:14;;14862:87;:::o;19878:391::-;2047:13;:11;:13::i;:::-;20180:10:::1;;20173:4;:17;20165:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;20257:4;20242:12;:19;;;;19878:391:::0;:::o;16524:87::-;16566:7;16593:10;;16586:17;;16524:87;:::o;21657:158::-;21726:4;21743:42;21753:12;:10;:12::i;:::-;21767:9;21778:6;21743:9;:42::i;:::-;21803:4;21796:11;;21657:158;;;;:::o;18507:532::-;2047:13;:11;:13::i;:::-;18898:3:::1;18888:7;:13;18880:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;18993:7;18968:22;:32;;;;19011:20;:18;:20::i;:::-;18507:532:::0;:::o;16425:91::-;16469:7;16496:12;;16489:19;;16425:91;:::o;16715:117::-;16769:16;16805:19;16798:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16715:117;:::o;15500:70::-;15535:4;15559:3;;;;;;;;;;;15552:10;;15500:70;:::o;15872:98::-;15920:7;15947:15;;15940:22;;15872:98;:::o;15578:82::-;15619:4;15643:9;;;;;;;;;;;15636:16;;15578:82;:::o;21879:248::-;2047:13;:11;:13::i;:::-;22004:7:::1;21999:121;22018:9;:16;22014:1;:20;;;21999:121;;;22056:52;22073:7;:5;:7::i;:::-;22082:9;22092:1;22082:12;;;;;;;;;;:::i;:::-;;;;;;;;22096:8;22105:1;22096:11;;;;;;;;;;:::i;:::-;;;;;;;;22056:16;:52::i;:::-;22036:3;;;;;:::i;:::-;;;;21999:121;;;;21879:248:::0;;:::o;28965:163::-;2047:13;:11;:13::i;:::-;29040:9:::1;29035:86;29059:4;:11;29055:1;:15;29035:86;;;29093:16;29101:4;29106:1;29101:7;;;;;;;;:::i;:::-;;;;;;;;29093;:16::i;:::-;29072:3;;;;;:::i;:::-;;;;29035:86;;;;28965:163:::0;:::o;15263:134::-;15335:7;15362:11;:18;15374:5;15362:18;;;;;;;;;;;;;;;:27;15381:7;15362:27;;;;;;;;;;;;;;;;15355:34;;15263:134;;;;:::o;20277:370::-;2047:13;:11;:13::i;:::-;20559:12:::1;;20552:4;:19;20544:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20635:4;20622:10;:17;;;;20277:370:::0;:::o;20937:182::-;2047:13;:11;:13::i;:::-;21106:5:::1;21086:17;;:25;;;;;;;;;;;;;;;;;;20937:182::o:0;15405:87::-;15447:7;15474:10;;;;;;;;;;;15467:17;;15405:87;:::o;3067:201::-;2047:13;:11;:13::i;:::-;3176:1:::1;3156:22;;:8;:22;;;;3148:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3232:28;3251:8;3232:18;:28::i;:::-;3067:201:::0;:::o;28554:238::-;28634:10;;;;;;;;;;;28618:26;;:12;:10;:12::i;:::-;:26;;;:67;;;;28678:7;:5;:7::i;:::-;28662:23;;:12;:10;:12::i;:::-;:23;;;28618:67;:110;;;;28718:10;;;;;;;;;;;28702:26;;:12;:10;:12::i;:::-;:26;;;28618:110;28596:133;;;;;;28742:10;;;;;;;;;;;:19;;:42;28762:21;28742:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28554:238::o;15777:87::-;15819:7;15846:10;;15839:17;;15777:87;:::o;28878:79::-;2047:13;:11;:13::i;:::-;28937:12:::1;28945:3;28937:7;:12::i;:::-;28878:79:::0;:::o;6714:98::-;6772:7;6803:1;6799;:5;;;;:::i;:::-;6792:12;;6714:98;;;;:::o;7113:::-;7171:7;7202:1;7198;:5;;;;:::i;:::-;7191:12;;7113:98;;;;:::o;7678:::-;7736:7;7767:1;7763;:5;;;;:::i;:::-;7756:12;;7678:98;;;;:::o;712:::-;765:7;792:10;785:17;;712:98;:::o;22135:335::-;22245:1;22228:19;;:5;:19;;;;22220:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22326:1;22307:21;;:7;:21;;;;22299:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22408:6;22378:11;:18;22390:5;22378:18;;;;;;;;;;;;;;;:27;22397:7;22378:27;;;;;;;;;;;;;;;:36;;;;22446:7;22430:32;;22439:5;22430:32;;;22455:6;22430:32;;;;;;:::i;:::-;;;;;;;;22135:335;;;:::o;23904:3613::-;25095:8;25117:14;;;;;;;;;;;25107:24;;:6;:24;;;:66;;;;;25156:16;;;;;;;;;;;25135:38;;:9;:38;;;;25107:66;25095:79;;25185:16;25229:14;;;;;;;;;;;25219:24;;:6;:24;;;:77;;;;25279:16;;;;;;;;;;;25261:35;;:6;:35;;;25219:77;:121;;;;25326:14;;;;;;;;;;;25313:27;;:9;:27;;;25219:121;:176;;;;25378:16;;;;;;;;;;;25357:38;;:9;:38;;;25219:176;25185:211;;25484:1;25466:20;;:6;:20;;;;25458:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25569:1;25548:23;;:9;:23;;;;25540:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;25640:1;25631:6;:10;25623:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;25755:3;25750:139;;25784:6;:14;25791:6;25784:14;;;;;;;;;;;;;;;;;;;;;;;;;25783:15;:37;;;;;25803:6;:17;25810:9;25803:17;;;;;;;;;;;;;;;;;;;;;;;;;25802:18;25783:37;25775:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;25750:139;25914:15;;25905:6;:24;25901:204;;;25954:21;:29;25976:6;25954:29;;;;;;;;;;;;;;;;;;;;;;;;;25946:38;;;;;;26005:11;26001:93;;;26045:21;:32;26067:9;26045:32;;;;;;;;;;;;;;;;;;;;;;;;;26037:41;;;;;;26001:93;25901:204;26155:10;;26145:6;26122:20;26132:9;26122;:20::i;:::-;:29;;;;:::i;:::-;26121:44;26117:118;;;26190:21;:32;26212:9;26190:32;;;;;;;;;;;;;;;;;;;;;;;;;26182:41;;;;;;26117:118;26247:11;:9;:11::i;:::-;26432:18;:26;26451:6;26432:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;26462:18;:29;26481:9;26462:29;;;;;;;;;;;;;;;;;;;;;;;;;26432:59;26428:156;;;26508:43;26525:6;26533:9;26544:6;26508:16;:43::i;:::-;26566:7;;;;26428:156;26646:28;26677:24;26695:4;26677:9;:24::i;:::-;26646:55;;26717:7;;;;;;;;;;;26716:8;:36;;;;;26738:14;;;;;;;;;;;26728:24;;:6;:24;;;;26716:36;:64;;;;;26779:1;26756:20;:24;26716:64;26712:574;;;26797:38;26814:20;26797:16;:38::i;:::-;26850:26;26879:21;26850:50;;26940:1;26919:18;:22;26915:360;;;26962:15;26980:86;27047:18;;26980:62;27003:38;27026:14;;27003:18;;:22;;:38;;;;:::i;:::-;26980:18;:22;;:62;;;;:::i;:::-;:66;;:86;;;;:::i;:::-;26962:104;;27085:15;27103:62;27146:18;;27103:38;27126:14;;27103:18;:22;;:38;;;;:::i;:::-;:42;;:62;;;;:::i;:::-;27085:80;;27184:10;;;;;;;;;;;:19;;:28;27204:7;27184:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27231:10;;;;;;;;;;;:19;;:28;27251:7;27231:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26943:332;;26915:360;26782:504;26712:574;27306:17;;;;;;;;;;;27302:118;;;27340:19;27365:9;27340:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27390:18;27398:9;27390:7;:18::i;:::-;27302:118;27460:49;27483:6;27491:9;27502:6;27460:22;:49::i;:::-;23982:3535;;;23904:3613;;;;:::o;8255:240::-;8375:7;8433:1;8428;:6;;8436:12;8420:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8475:1;8471;:5;8464:12;;8255:240;;;;;:::o;2326:132::-;2401:12;:10;:12::i;:::-;2390:23;;:7;:5;:7::i;:::-;:23;;;2382:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2326:132::o;27816:486::-;13227:4;13217:7;;:14;;;;;;;;;;;;;;;;;;27894:21:::1;27932:1;27918:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27894:40;;27963:4;27945;27950:1;27945:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;27989:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27979:4;27984:1;27979:7;;;;;;;;:::i;:::-;;;;;;;:33;;;;;;;;;::::0;::::1;28023:63;28040:4;28055:16;;;;;;;;;;;28074:11;28023:8;:63::i;:::-;28097:16;;;;;;;;;;;:67;;;28179:11;28205:1;28221:4;28248;28268:15;28097:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27883:419;13264:5:::0;13254:7;;:15;;;;;;;;;;;;;;;;;;27816:486;:::o;29961:155::-;30018:40;30054:3;30018:31;30031:17;;30018:8;;:12;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;30005:10;:53;;;;30074:34;30097:10;;30074:34;;;;;;:::i;:::-;;;;;;;;29961:155::o;3428:191::-;3502:16;3521:6;;;;;;;;;;;3502:25;;3547:8;3538:6;;:17;;;;;;;;;;;;;;;;;;3602:8;3571:40;;3592:8;3571:40;;;;;;;;;;;;3491:128;3428:191;:::o;30124:180::-;30191:45;30232:3;30191:36;30204:22;;30191:8;;:12;;:36;;;;:::i;:::-;:40;;:45;;;;:::i;:::-;30173:15;:63;;;;30252:44;30280:15;;30252:44;;;;;;:::i;:::-;;;;;;;;30124:180::o;22478:590::-;22914:29;22936:6;22914:9;:17;22924:6;22914:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;22894:9;:17;22904:6;22894:17;;;;;;;;;;;;;;;:49;;;;22977:32;23002:6;22977:9;:20;22987:9;22977:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;22954:9;:20;22964:9;22954:20;;;;;;;;;;;;;;;:55;;;;23042:9;23025:35;;23034:6;23025:35;;;23053:6;23025:35;;;;;;:::i;:::-;;;;;;;;22478:590;;;:::o;29136:270::-;29194:18;:23;29213:3;29194:23;;;;;;;;;;;;;;;;;;;;;;;;;29193:24;29185:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;29289:21;:26;29311:3;29289:26;;;;;;;;;;;;;;;;;;;;;;;;;29288:27;29280:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;29394:4;29380:6;:11;29387:3;29380:11;;;;;;;;;;;;;;;;:18;;;;;;;;;;;;;;;;;;29136:270;:::o;27525:283::-;27622:14;27639:8;:6;:8::i;:::-;27622:25;;27664:9;27660:141;;;27711:3;;;;;;;;;;;:78;;27774:14;;27753:18;;:35;;;;:::i;:::-;27711:78;;;27734:14;;27718:13;;:30;;;;:::i;:::-;27711:78;27690:18;:99;;;;27660:141;27554:254;27525:283::o;6357:98::-;6415:7;6446:1;6442;:5;;;;:::i;:::-;6435:12;;6357:98;;;;:::o;23076:820::-;23415:19;23437:39;23472:3;23437:30;23448:18;;23437:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;23415:61;;23487:22;23512:23;23523:11;23512:6;:10;;:23;;;;:::i;:::-;23487:48;;23626:29;23648:6;23626:9;:17;23636:6;23626:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;23606:9;:17;23616:6;23606:17;;;;;;;;;;;;;;;:49;;;;23689:40;23714:14;23689:9;:20;23699:9;23689:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;23666:9;:20;23676:9;23666:20;;;;;;;;;;;;;;;:63;;;;23794:41;23823:11;23794:9;:24;23812:4;23794:24;;;;;;;;;;;;;;;;:28;;:41;;;;:::i;:::-;23767:9;:24;23785:4;23767:24;;;;;;;;;;;;;;;:68;;;;23870:9;23853:35;;23862:6;23853:35;;;23881:6;23853:35;;;;;;:::i;:::-;;;;;;;;23167:729;;23076:820;;;:::o;5976:98::-;6034:7;6065:1;6061;:5;;;;:::i;:::-;6054:12;;5976:98;;;;:::o;30312:543::-;30347:4;30384:15;30364:17;:35;;;;30410:12;30425:59;30481:2;30466:9;;;;;;;;;;;30433:42;;30437:27;30459:4;30437:17;;:21;;:27;;;;:::i;:::-;30433:42;;;;:::i;:::-;30425:55;;:59;;;;:::i;:::-;30410:74;;30566:10;30596:4;30580:12;;:20;;:42;;;;;30612:10;;30605:4;:17;30580:42;30566:57;;30718:5;30711:12;;:3;;;;;;;;;;;:12;;;30707:118;;30746:5;30740:3;;:11;;;;;;;;;;;;;;;;;;30771:16;30781:5;30771:16;;;;;;:::i;:::-;;;;;;;;30809:4;30802:11;;;;;;30707:118;30842:5;30835:12;;;;30312:543;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:75::-;1430:6;1463:2;1457:9;1447:19;;1397:75;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:104::-;3891:7;3920:24;3938:5;3920:24;:::i;:::-;3909:35;;3846:104;;;:::o;3956:138::-;4037:32;4063:5;4037:32;:::i;:::-;4030:5;4027:43;4017:71;;4084:1;4081;4074:12;4017:71;3956:138;:::o;4100:155::-;4154:5;4192:6;4179:20;4170:29;;4208:41;4243:5;4208:41;:::i;:::-;4100:155;;;;:::o;4261:345::-;4328:6;4377:2;4365:9;4356:7;4352:23;4348:32;4345:119;;;4383:79;;:::i;:::-;4345:119;4503:1;4528:61;4581:7;4572:6;4561:9;4557:22;4528:61;:::i;:::-;4518:71;;4474:125;4261:345;;;;:::o;4612:619::-;4689:6;4697;4705;4754:2;4742:9;4733:7;4729:23;4725:32;4722:119;;;4760:79;;:::i;:::-;4722:119;4880:1;4905:53;4950:7;4941:6;4930:9;4926:22;4905:53;:::i;:::-;4895:63;;4851:117;5007:2;5033:53;5078:7;5069:6;5058:9;5054:22;5033:53;:::i;:::-;5023:63;;4978:118;5135:2;5161:53;5206:7;5197:6;5186:9;5182:22;5161:53;:::i;:::-;5151:63;;5106:118;4612:619;;;;;:::o;5237:329::-;5296:6;5345:2;5333:9;5324:7;5320:23;5316:32;5313:119;;;5351:79;;:::i;:::-;5313:119;5471:1;5496:53;5541:7;5532:6;5521:9;5517:22;5496:53;:::i;:::-;5486:63;;5442:117;5237:329;;;;:::o;5572:::-;5631:6;5680:2;5668:9;5659:7;5655:23;5651:32;5648:119;;;5686:79;;:::i;:::-;5648:119;5806:1;5831:53;5876:7;5867:6;5856:9;5852:22;5831:53;:::i;:::-;5821:63;;5777:117;5572:329;;;;:::o;5907:89::-;5941:7;5984:5;5981:1;5970:20;5959:31;;5907:89;;;:::o;6002:116::-;6072:21;6087:5;6072:21;:::i;:::-;6065:5;6062:32;6052:60;;6108:1;6105;6098:12;6052:60;6002:116;:::o;6124:133::-;6167:5;6205:6;6192:20;6183:29;;6221:30;6245:5;6221:30;:::i;:::-;6124:133;;;;:::o;6263:323::-;6319:6;6368:2;6356:9;6347:7;6343:23;6339:32;6336:119;;;6374:79;;:::i;:::-;6336:119;6494:1;6519:50;6561:7;6552:6;6541:9;6537:22;6519:50;:::i;:::-;6509:60;;6465:114;6263:323;;;;:::o;6592:118::-;6679:24;6697:5;6679:24;:::i;:::-;6674:3;6667:37;6592:118;;:::o;6716:222::-;6809:4;6847:2;6836:9;6832:18;6824:26;;6860:71;6928:1;6917:9;6913:17;6904:6;6860:71;:::i;:::-;6716:222;;;;:::o;6944:116::-;7014:21;7029:5;7014:21;:::i;:::-;7007:5;7004:32;6994:60;;7050:1;7047;7040:12;6994:60;6944:116;:::o;7066:133::-;7109:5;7147:6;7134:20;7125:29;;7163:30;7187:5;7163:30;:::i;:::-;7066:133;;;;:::o;7205:323::-;7261:6;7310:2;7298:9;7289:7;7285:23;7281:32;7278:119;;;7316:79;;:::i;:::-;7278:119;7436:1;7461:50;7503:7;7494:6;7483:9;7479:22;7461:50;:::i;:::-;7451:60;;7407:114;7205:323;;;;:::o;7534:117::-;7643:1;7640;7633:12;7657:180;7705:77;7702:1;7695:88;7802:4;7799:1;7792:15;7826:4;7823:1;7816:15;7843:281;7926:27;7948:4;7926:27;:::i;:::-;7918:6;7914:40;8056:6;8044:10;8041:22;8020:18;8008:10;8005:34;8002:62;7999:88;;;8067:18;;:::i;:::-;7999:88;8107:10;8103:2;8096:22;7886:238;7843:281;;:::o;8130:129::-;8164:6;8191:20;;:::i;:::-;8181:30;;8220:33;8248:4;8240:6;8220:33;:::i;:::-;8130:129;;;:::o;8265:311::-;8342:4;8432:18;8424:6;8421:30;8418:56;;;8454:18;;:::i;:::-;8418:56;8504:4;8496:6;8492:17;8484:25;;8564:4;8558;8554:15;8546:23;;8265:311;;;:::o;8582:117::-;8691:1;8688;8681:12;8722:710;8818:5;8843:81;8859:64;8916:6;8859:64;:::i;:::-;8843:81;:::i;:::-;8834:90;;8944:5;8973:6;8966:5;8959:21;9007:4;9000:5;8996:16;8989:23;;9060:4;9052:6;9048:17;9040:6;9036:30;9089:3;9081:6;9078:15;9075:122;;;9108:79;;:::i;:::-;9075:122;9223:6;9206:220;9240:6;9235:3;9232:15;9206:220;;;9315:3;9344:37;9377:3;9365:10;9344:37;:::i;:::-;9339:3;9332:50;9411:4;9406:3;9402:14;9395:21;;9282:144;9266:4;9261:3;9257:14;9250:21;;9206:220;;;9210:21;8824:608;;8722:710;;;;;:::o;9455:370::-;9526:5;9575:3;9568:4;9560:6;9556:17;9552:27;9542:122;;9583:79;;:::i;:::-;9542:122;9700:6;9687:20;9725:94;9815:3;9807:6;9800:4;9792:6;9788:17;9725:94;:::i;:::-;9716:103;;9532:293;9455:370;;;;:::o;9831:539::-;9915:6;9964:2;9952:9;9943:7;9939:23;9935:32;9932:119;;;9970:79;;:::i;:::-;9932:119;10118:1;10107:9;10103:17;10090:31;10148:18;10140:6;10137:30;10134:117;;;10170:79;;:::i;:::-;10134:117;10275:78;10345:7;10336:6;10325:9;10321:22;10275:78;:::i;:::-;10265:88;;10061:302;9831:539;;;;:::o;10376:114::-;10443:6;10477:5;10471:12;10461:22;;10376:114;;;:::o;10496:184::-;10595:11;10629:6;10624:3;10617:19;10669:4;10664:3;10660:14;10645:29;;10496:184;;;;:::o;10686:132::-;10753:4;10776:3;10768:11;;10806:4;10801:3;10797:14;10789:22;;10686:132;;;:::o;10824:108::-;10901:24;10919:5;10901:24;:::i;:::-;10896:3;10889:37;10824:108;;:::o;10938:179::-;11007:10;11028:46;11070:3;11062:6;11028:46;:::i;:::-;11106:4;11101:3;11097:14;11083:28;;10938:179;;;;:::o;11123:113::-;11193:4;11225;11220:3;11216:14;11208:22;;11123:113;;;:::o;11272:732::-;11391:3;11420:54;11468:5;11420:54;:::i;:::-;11490:86;11569:6;11564:3;11490:86;:::i;:::-;11483:93;;11600:56;11650:5;11600:56;:::i;:::-;11679:7;11710:1;11695:284;11720:6;11717:1;11714:13;11695:284;;;11796:6;11790:13;11823:63;11882:3;11867:13;11823:63;:::i;:::-;11816:70;;11909:60;11962:6;11909:60;:::i;:::-;11899:70;;11755:224;11742:1;11739;11735:9;11730:14;;11695:284;;;11699:14;11995:3;11988:10;;11396:608;;;11272:732;;;;:::o;12010:373::-;12153:4;12191:2;12180:9;12176:18;12168:26;;12240:9;12234:4;12230:20;12226:1;12215:9;12211:17;12204:47;12268:108;12371:4;12362:6;12268:108;:::i;:::-;12260:116;;12010:373;;;;:::o;12389:109::-;12470:21;12485:5;12470:21;:::i;:::-;12465:3;12458:34;12389:109;;:::o;12504:210::-;12591:4;12629:2;12618:9;12614:18;12606:26;;12642:65;12704:1;12693:9;12689:17;12680:6;12642:65;:::i;:::-;12504:210;;;;:::o;12720:311::-;12797:4;12887:18;12879:6;12876:30;12873:56;;;12909:18;;:::i;:::-;12873:56;12959:4;12951:6;12947:17;12939:25;;13019:4;13013;13009:15;13001:23;;12720:311;;;:::o;13054:710::-;13150:5;13175:81;13191:64;13248:6;13191:64;:::i;:::-;13175:81;:::i;:::-;13166:90;;13276:5;13305:6;13298:5;13291:21;13339:4;13332:5;13328:16;13321:23;;13392:4;13384:6;13380:17;13372:6;13368:30;13421:3;13413:6;13410:15;13407:122;;;13440:79;;:::i;:::-;13407:122;13555:6;13538:220;13572:6;13567:3;13564:15;13538:220;;;13647:3;13676:37;13709:3;13697:10;13676:37;:::i;:::-;13671:3;13664:50;13743:4;13738:3;13734:14;13727:21;;13614:144;13598:4;13593:3;13589:14;13582:21;;13538:220;;;13542:21;13156:608;;13054:710;;;;;:::o;13787:370::-;13858:5;13907:3;13900:4;13892:6;13888:17;13884:27;13874:122;;13915:79;;:::i;:::-;13874:122;14032:6;14019:20;14057:94;14147:3;14139:6;14132:4;14124:6;14120:17;14057:94;:::i;:::-;14048:103;;13864:293;13787:370;;;;:::o;14163:894::-;14281:6;14289;14338:2;14326:9;14317:7;14313:23;14309:32;14306:119;;;14344:79;;:::i;:::-;14306:119;14492:1;14481:9;14477:17;14464:31;14522:18;14514:6;14511:30;14508:117;;;14544:79;;:::i;:::-;14508:117;14649:78;14719:7;14710:6;14699:9;14695:22;14649:78;:::i;:::-;14639:88;;14435:302;14804:2;14793:9;14789:18;14776:32;14835:18;14827:6;14824:30;14821:117;;;14857:79;;:::i;:::-;14821:117;14962:78;15032:7;15023:6;15012:9;15008:22;14962:78;:::i;:::-;14952:88;;14747:303;14163:894;;;;;:::o;15063:474::-;15131:6;15139;15188:2;15176:9;15167:7;15163:23;15159:32;15156:119;;;15194:79;;:::i;:::-;15156:119;15314:1;15339:53;15384:7;15375:6;15364:9;15360:22;15339:53;:::i;:::-;15329:63;;15285:117;15441:2;15467:53;15512:7;15503:6;15492:9;15488:22;15467:53;:::i;:::-;15457:63;;15412:118;15063:474;;;;;:::o;15543:221::-;15683:34;15679:1;15671:6;15667:14;15660:58;15752:4;15747:2;15739:6;15735:15;15728:29;15543:221;:::o;15770:366::-;15912:3;15933:67;15997:2;15992:3;15933:67;:::i;:::-;15926:74;;16009:93;16098:3;16009:93;:::i;:::-;16127:2;16122:3;16118:12;16111:19;;15770:366;;;:::o;16142:419::-;16308:4;16346:2;16335:9;16331:18;16323:26;;16395:9;16389:4;16385:20;16381:1;16370:9;16366:17;16359:47;16423:131;16549:4;16423:131;:::i;:::-;16415:139;;16142:419;;;:::o;16567:168::-;16707:20;16703:1;16695:6;16691:14;16684:44;16567:168;:::o;16741:366::-;16883:3;16904:67;16968:2;16963:3;16904:67;:::i;:::-;16897:74;;16980:93;17069:3;16980:93;:::i;:::-;17098:2;17093:3;17089:12;17082:19;;16741:366;;;:::o;17113:419::-;17279:4;17317:2;17306:9;17302:18;17294:26;;17366:9;17360:4;17356:20;17352:1;17341:9;17337:17;17330:47;17394:131;17520:4;17394:131;:::i;:::-;17386:139;;17113:419;;;:::o;17538:174::-;17678:26;17674:1;17666:6;17662:14;17655:50;17538:174;:::o;17718:366::-;17860:3;17881:67;17945:2;17940:3;17881:67;:::i;:::-;17874:74;;17957:93;18046:3;17957:93;:::i;:::-;18075:2;18070:3;18066:12;18059:19;;17718:366;;;:::o;18090:419::-;18256:4;18294:2;18283:9;18279:18;18271:26;;18343:9;18337:4;18333:20;18329:1;18318:9;18314:17;18307:47;18371:131;18497:4;18371:131;:::i;:::-;18363:139;;18090:419;;;:::o;18515:233::-;18655:34;18651:1;18643:6;18639:14;18632:58;18724:16;18719:2;18711:6;18707:15;18700:41;18515:233;:::o;18754:366::-;18896:3;18917:67;18981:2;18976:3;18917:67;:::i;:::-;18910:74;;18993:93;19082:3;18993:93;:::i;:::-;19111:2;19106:3;19102:12;19095:19;;18754:366;;;:::o;19126:419::-;19292:4;19330:2;19319:9;19315:18;19307:26;;19379:9;19373:4;19369:20;19365:1;19354:9;19350:17;19343:47;19407:131;19533:4;19407:131;:::i;:::-;19399:139;;19126:419;;;:::o;19551:168::-;19691:20;19687:1;19679:6;19675:14;19668:44;19551:168;:::o;19725:366::-;19867:3;19888:67;19952:2;19947:3;19888:67;:::i;:::-;19881:74;;19964:93;20053:3;19964:93;:::i;:::-;20082:2;20077:3;20073:12;20066:19;;19725:366;;;:::o;20097:419::-;20263:4;20301:2;20290:9;20286:18;20278:26;;20350:9;20344:4;20340:20;20336:1;20325:9;20321:17;20314:47;20378:131;20504:4;20378:131;:::i;:::-;20370:139;;20097:419;;;:::o;20522:180::-;20570:77;20567:1;20560:88;20667:4;20664:1;20657:15;20691:4;20688:1;20681:15;20708:180;20756:77;20753:1;20746:88;20853:4;20850:1;20843:15;20877:4;20874:1;20867:15;20894:233;20933:3;20956:24;20974:5;20956:24;:::i;:::-;20947:33;;21002:66;20995:5;20992:77;20989:103;;;21072:18;;:::i;:::-;20989:103;21119:1;21112:5;21108:13;21101:20;;20894:233;;;:::o;21133:143::-;21190:5;21221:6;21215:13;21206:22;;21237:33;21264:5;21237:33;:::i;:::-;21133:143;;;;:::o;21282:351::-;21352:6;21401:2;21389:9;21380:7;21376:23;21372:32;21369:119;;;21407:79;;:::i;:::-;21369:119;21527:1;21552:64;21608:7;21599:6;21588:9;21584:22;21552:64;:::i;:::-;21542:74;;21498:128;21282:351;;;;:::o;21639:221::-;21779:34;21775:1;21767:6;21763:14;21756:58;21848:4;21843:2;21835:6;21831:15;21824:29;21639:221;:::o;21866:366::-;22008:3;22029:67;22093:2;22088:3;22029:67;:::i;:::-;22022:74;;22105:93;22194:3;22105:93;:::i;:::-;22223:2;22218:3;22214:12;22207:19;;21866:366;;;:::o;22238:419::-;22404:4;22442:2;22431:9;22427:18;22419:26;;22491:9;22485:4;22481:20;22477:1;22466:9;22462:17;22455:47;22519:131;22645:4;22519:131;:::i;:::-;22511:139;;22238:419;;;:::o;22663:223::-;22803:34;22799:1;22791:6;22787:14;22780:58;22872:6;22867:2;22859:6;22855:15;22848:31;22663:223;:::o;22892:366::-;23034:3;23055:67;23119:2;23114:3;23055:67;:::i;:::-;23048:74;;23131:93;23220:3;23131:93;:::i;:::-;23249:2;23244:3;23240:12;23233:19;;22892:366;;;:::o;23264:419::-;23430:4;23468:2;23457:9;23453:18;23445:26;;23517:9;23511:4;23507:20;23503:1;23492:9;23488:17;23481:47;23545:131;23671:4;23545:131;:::i;:::-;23537:139;;23264:419;;;:::o;23689:238::-;23829:34;23825:1;23817:6;23813:14;23806:58;23898:21;23893:2;23885:6;23881:15;23874:46;23689:238;:::o;23933:366::-;24075:3;24096:67;24160:2;24155:3;24096:67;:::i;:::-;24089:74;;24172:93;24261:3;24172:93;:::i;:::-;24290:2;24285:3;24281:12;24274:19;;23933:366;;;:::o;24305:419::-;24471:4;24509:2;24498:9;24494:18;24486:26;;24558:9;24552:4;24548:20;24544:1;24533:9;24529:17;24522:47;24586:131;24712:4;24586:131;:::i;:::-;24578:139;;24305:419;;;:::o;24730:86::-;24765:7;24805:4;24798:5;24794:16;24783:27;;24730:86;;;:::o;24822:167::-;24859:3;24882:22;24898:5;24882:22;:::i;:::-;24873:31;;24926:4;24919:5;24916:15;24913:41;;;24934:18;;:::i;:::-;24913:41;24981:1;24974:5;24970:13;24963:20;;24822:167;;;:::o;24995:222::-;25135:34;25131:1;25123:6;25119:14;25112:58;25204:5;25199:2;25191:6;25187:15;25180:30;24995:222;:::o;25223:366::-;25365:3;25386:67;25450:2;25445:3;25386:67;:::i;:::-;25379:74;;25462:93;25551:3;25462:93;:::i;:::-;25580:2;25575:3;25571:12;25564:19;;25223:366;;;:::o;25595:419::-;25761:4;25799:2;25788:9;25784:18;25776:26;;25848:9;25842:4;25838:20;25834:1;25823:9;25819:17;25812:47;25876:131;26002:4;25876:131;:::i;:::-;25868:139;;25595:419;;;:::o;26020:225::-;26160:34;26156:1;26148:6;26144:14;26137:58;26229:8;26224:2;26216:6;26212:15;26205:33;26020:225;:::o;26251:366::-;26393:3;26414:67;26478:2;26473:3;26414:67;:::i;:::-;26407:74;;26490:93;26579:3;26490:93;:::i;:::-;26608:2;26603:3;26599:12;26592:19;;26251:366;;;:::o;26623:419::-;26789:4;26827:2;26816:9;26812:18;26804:26;;26876:9;26870:4;26866:20;26862:1;26851:9;26847:17;26840:47;26904:131;27030:4;26904:131;:::i;:::-;26896:139;;26623:419;;;:::o;27048:348::-;27088:7;27111:20;27129:1;27111:20;:::i;:::-;27106:25;;27145:20;27163:1;27145:20;:::i;:::-;27140:25;;27333:1;27265:66;27261:74;27258:1;27255:81;27250:1;27243:9;27236:17;27232:105;27229:131;;;27340:18;;:::i;:::-;27229:131;27388:1;27385;27381:9;27370:20;;27048:348;;;;:::o;27402:180::-;27450:77;27447:1;27440:88;27547:4;27544:1;27537:15;27571:4;27568:1;27561:15;27588:185;27628:1;27645:20;27663:1;27645:20;:::i;:::-;27640:25;;27679:20;27697:1;27679:20;:::i;:::-;27674:25;;27718:1;27708:35;;27723:18;;:::i;:::-;27708:35;27765:1;27762;27758:9;27753:14;;27588:185;;;;:::o;27779:176::-;27811:1;27828:20;27846:1;27828:20;:::i;:::-;27823:25;;27862:20;27880:1;27862:20;:::i;:::-;27857:25;;27901:1;27891:35;;27906:18;;:::i;:::-;27891:35;27947:1;27944;27940:9;27935:14;;27779:176;;;;:::o;27961:223::-;28101:34;28097:1;28089:6;28085:14;28078:58;28170:6;28165:2;28157:6;28153:15;28146:31;27961:223;:::o;28190:366::-;28332:3;28353:67;28417:2;28412:3;28353:67;:::i;:::-;28346:74;;28429:93;28518:3;28429:93;:::i;:::-;28547:2;28542:3;28538:12;28531:19;;28190:366;;;:::o;28562:419::-;28728:4;28766:2;28755:9;28751:18;28743:26;;28815:9;28809:4;28805:20;28801:1;28790:9;28786:17;28779:47;28843:131;28969:4;28843:131;:::i;:::-;28835:139;;28562:419;;;:::o;28987:221::-;29127:34;29123:1;29115:6;29111:14;29104:58;29196:4;29191:2;29183:6;29179:15;29172:29;28987:221;:::o;29214:366::-;29356:3;29377:67;29441:2;29436:3;29377:67;:::i;:::-;29370:74;;29453:93;29542:3;29453:93;:::i;:::-;29571:2;29566:3;29562:12;29555:19;;29214:366;;;:::o;29586:419::-;29752:4;29790:2;29779:9;29775:18;29767:26;;29839:9;29833:4;29829:20;29825:1;29814:9;29810:17;29803:47;29867:131;29993:4;29867:131;:::i;:::-;29859:139;;29586:419;;;:::o;30011:225::-;30151:34;30147:1;30139:6;30135:14;30128:58;30220:8;30215:2;30207:6;30203:15;30196:33;30011:225;:::o;30242:366::-;30384:3;30405:67;30469:2;30464:3;30405:67;:::i;:::-;30398:74;;30481:93;30570:3;30481:93;:::i;:::-;30599:2;30594:3;30590:12;30583:19;;30242:366;;;:::o;30614:419::-;30780:4;30818:2;30807:9;30803:18;30795:26;;30867:9;30861:4;30857:20;30853:1;30842:9;30838:17;30831:47;30895:131;31021:4;30895:131;:::i;:::-;30887:139;;30614:419;;;:::o;31039:223::-;31179:34;31175:1;31167:6;31163:14;31156:58;31248:6;31243:2;31235:6;31231:15;31224:31;31039:223;:::o;31268:366::-;31410:3;31431:67;31495:2;31490:3;31431:67;:::i;:::-;31424:74;;31507:93;31596:3;31507:93;:::i;:::-;31625:2;31620:3;31616:12;31609:19;;31268:366;;;:::o;31640:419::-;31806:4;31844:2;31833:9;31829:18;31821:26;;31893:9;31887:4;31883:20;31879:1;31868:9;31864:17;31857:47;31921:131;32047:4;31921:131;:::i;:::-;31913:139;;31640:419;;;:::o;32065:229::-;32205:34;32201:1;32193:6;32189:14;32182:58;32274:12;32269:2;32261:6;32257:15;32250:37;32065:229;:::o;32300:366::-;32442:3;32463:67;32527:2;32522:3;32463:67;:::i;:::-;32456:74;;32539:93;32628:3;32539:93;:::i;:::-;32657:2;32652:3;32648:12;32641:19;;32300:366;;;:::o;32672:419::-;32838:4;32876:2;32865:9;32861:18;32853:26;;32925:9;32919:4;32915:20;32911:1;32900:9;32896:17;32889:47;32953:131;33079:4;32953:131;:::i;:::-;32945:139;;32672:419;;;:::o;33097:239::-;33237:34;33233:1;33225:6;33221:14;33214:58;33306:22;33301:2;33293:6;33289:15;33282:47;33097:239;:::o;33342:366::-;33484:3;33505:67;33569:2;33564:3;33505:67;:::i;:::-;33498:74;;33581:93;33670:3;33581:93;:::i;:::-;33699:2;33694:3;33690:12;33683:19;;33342:366;;;:::o;33714:419::-;33880:4;33918:2;33907:9;33903:18;33895:26;;33967:9;33961:4;33957:20;33953:1;33942:9;33938:17;33931:47;33995:131;34121:4;33995:131;:::i;:::-;33987:139;;33714:419;;;:::o;34139:305::-;34179:3;34198:20;34216:1;34198:20;:::i;:::-;34193:25;;34232:20;34250:1;34232:20;:::i;:::-;34227:25;;34386:1;34318:66;34314:74;34311:1;34308:81;34305:107;;;34392:18;;:::i;:::-;34305:107;34436:1;34433;34429:9;34422:16;;34139:305;;;;:::o;34450:182::-;34590:34;34586:1;34578:6;34574:14;34567:58;34450:182;:::o;34638:366::-;34780:3;34801:67;34865:2;34860:3;34801:67;:::i;:::-;34794:74;;34877:93;34966:3;34877:93;:::i;:::-;34995:2;34990:3;34986:12;34979:19;;34638:366;;;:::o;35010:419::-;35176:4;35214:2;35203:9;35199:18;35191:26;;35263:9;35257:4;35253:20;35249:1;35238:9;35234:17;35227:47;35291:131;35417:4;35291:131;:::i;:::-;35283:139;;35010:419;;;:::o;35435:85::-;35480:7;35509:5;35498:16;;35435:85;;;:::o;35526:60::-;35554:3;35575:5;35568:12;;35526:60;;;:::o;35592:158::-;35650:9;35683:61;35701:42;35710:32;35736:5;35710:32;:::i;:::-;35701:42;:::i;:::-;35683:61;:::i;:::-;35670:74;;35592:158;;;:::o;35756:147::-;35851:45;35890:5;35851:45;:::i;:::-;35846:3;35839:58;35756:147;;:::o;35909:831::-;36172:4;36210:3;36199:9;36195:19;36187:27;;36224:71;36292:1;36281:9;36277:17;36268:6;36224:71;:::i;:::-;36305:80;36381:2;36370:9;36366:18;36357:6;36305:80;:::i;:::-;36432:9;36426:4;36422:20;36417:2;36406:9;36402:18;36395:48;36460:108;36563:4;36554:6;36460:108;:::i;:::-;36452:116;;36578:72;36646:2;36635:9;36631:18;36622:6;36578:72;:::i;:::-;36660:73;36728:3;36717:9;36713:19;36704:6;36660:73;:::i;:::-;35909:831;;;;;;;;:::o;36746:234::-;36886:34;36882:1;36874:6;36870:14;36863:58;36955:17;36950:2;36942:6;36938:15;36931:42;36746:234;:::o;36986:366::-;37128:3;37149:67;37213:2;37208:3;37149:67;:::i;:::-;37142:74;;37225:93;37314:3;37225:93;:::i;:::-;37343:2;37338:3;37334:12;37327:19;;36986:366;;;:::o;37358:419::-;37524:4;37562:2;37551:9;37547:18;37539:26;;37611:9;37605:4;37601:20;37597:1;37586:9;37582:17;37575:47;37639:131;37765:4;37639:131;:::i;:::-;37631:139;;37358:419;;;:::o;37783:236::-;37923:34;37919:1;37911:6;37907:14;37900:58;37992:19;37987:2;37979:6;37975:15;37968:44;37783:236;:::o;38025:366::-;38167:3;38188:67;38252:2;38247:3;38188:67;:::i;:::-;38181:74;;38264:93;38353:3;38264:93;:::i;:::-;38382:2;38377:3;38373:12;38366:19;;38025:366;;;:::o;38397:419::-;38563:4;38601:2;38590:9;38586:18;38578:26;;38650:9;38644:4;38640:20;38636:1;38625:9;38621:17;38614:47;38678:131;38804:4;38678:131;:::i;:::-;38670:139;;38397:419;;;:::o;38822:191::-;38862:4;38882:20;38900:1;38882:20;:::i;:::-;38877:25;;38916:20;38934:1;38916:20;:::i;:::-;38911:25;;38955:1;38952;38949:8;38946:34;;;38960:18;;:::i;:::-;38946:34;39005:1;39002;38998:9;38990:17;;38822:191;;;;:::o;39019:76::-;39055:7;39084:5;39073:16;;39019:76;;;:::o;39101:525::-;39140:3;39159:19;39176:1;39159:19;:::i;:::-;39154:24;;39192:19;39209:1;39192:19;:::i;:::-;39187:24;;39380:1;39312:66;39308:74;39305:1;39301:82;39296:1;39293;39289:9;39282:17;39278:106;39275:132;;;39387:18;;:::i;:::-;39275:132;39567:1;39499:66;39495:74;39492:1;39488:82;39484:1;39481;39477:9;39473:98;39470:124;;;39574:18;;:::i;:::-;39470:124;39618:1;39615;39611:9;39604:16;;39101:525;;;;:::o

Swarm Source

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