ETH Price: $2,469.75 (+0.62%)
 

Overview

Max Total Supply

1,000,000,000,000 DOKU

Holders

69

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
856,630,922,055.924720406073252351 DOKU

Value
$0.00
0x9a04b4808fc1f0b5014fad6ba77f80f45d7664e5
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
DOKU

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-13
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

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

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

    /**
     * @dev Returns the 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;
        }
    }
}

pragma solidity >=0.5.0;

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

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

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

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

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

pragma solidity >=0.6.2;

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

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

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

pragma solidity >=0.6.2;

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

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

contract DOKU is Context, IERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 private _uniswapV2Router;

    mapping (address => uint) private _cooldown;

    mapping (address => uint256) private _balances;

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

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedMaxTransactionAmount;
    mapping (address => bool) private _isBlacklisted;

    bool public tradingOpen;
    bool private _swapping;
    bool public swapEnabled = false;
    bool public cooldownEnabled = false;
    bool public feesEnabled = true;

    string private constant _name = "ONE EYED SHIBA";
    string private constant _symbol = "DOKU";

    uint8 private constant _decimals = 18;

    uint256 private constant _totalSupply = 1_000_000_000_000 * (10**_decimals);

    uint256 public maxBuyAmount = _totalSupply;
    uint256 public maxSellAmount = _totalSupply;
    uint256 public maxWalletAmount = _totalSupply;

    uint256 public tradingOpenBlock = 0;
    uint256 private _blocksToBlacklist = 0;
    uint256 private _cooldownBlocks = 1;

    uint256 public constant FEE_DIVISOR = 1000;

    uint256 public opsBuyFee = 50;
    uint256 private _previousOpsBuyFee = opsBuyFee;
    uint256 public opsSellFee = 50;
    uint256 private _previousOpsSellFee = opsSellFee;

    uint256 private _tokensForTreasury;
    uint256 private _swapTokensAtAmount = 0;

    address payable private opsWalletAddress;
    address private _uniswapV2Pair;
    address private DEAD = 0x000000000000000000000000000000000000dEaD;
    address private ZERO = 0x0000000000000000000000000000000000000000;
    
    constructor () {
        opsWalletAddress = payable(_msgSender());

        _balances[_msgSender()] = _totalSupply;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;

        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[DEAD] = true;

        emit Transfer(ZERO, _msgSender(), _totalSupply);
    }

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

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

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() public pure override returns (uint256) {
        return _totalSupply;
    }

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

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

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

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

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

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != ZERO, "ERC20: approve from the zero address");
        require(spender != ZERO, "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(address from, address to, uint256 amount) private {
        require(from != ZERO, "ERC20: transfer from the zero address");
        require(to != ZERO, "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        bool takeFee = true;
        bool shouldSwap = false;
        if (from != owner() && to != owner() && to != ZERO && to != DEAD && !_swapping) {
            require(!_isBlacklisted[from] && !_isBlacklisted[to]);

            if(!tradingOpen) require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not allowed yet.");

            if (cooldownEnabled) {
                if (to != address(_uniswapV2Router) && to != address(_uniswapV2Pair)) {
                    require(_cooldown[tx.origin] < block.number - _cooldownBlocks && _cooldown[to] < block.number - _cooldownBlocks, "Transfer delay enabled. Try again later.");
                    _cooldown[tx.origin] = block.number;
                    _cooldown[to] = block.number;
                }
            }

            if (from == _uniswapV2Pair && to != address(_uniswapV2Router) && !_isExcludedMaxTransactionAmount[to]) {
                require(amount <= maxBuyAmount, "Transfer amount exceeds the maxBuyAmount.");
                require(balanceOf(to) + amount <= maxWalletAmount, "Exceeds maximum wallet token amount.");
            }
            
            if (to == _uniswapV2Pair && from != address(_uniswapV2Router) && !_isExcludedMaxTransactionAmount[from]) {
                require(amount <= maxSellAmount, "Transfer amount exceeds the maxSellAmount.");
                shouldSwap = true;
            }
        }

        if(_isExcludedFromFees[from] || _isExcludedFromFees[to] || !feesEnabled) takeFee = false;

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = (contractTokenBalance > _swapTokensAtAmount) && shouldSwap;

        if (canSwap && swapEnabled && !_swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            _swapping = true;
            swapBack();
            _swapping = false;
        }

        _tokenTransfer(from, to, amount, takeFee, shouldSwap);
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        bool success;
        
        if (contractBalance == 0 || _tokensForTreasury == 0) return;

        if (contractBalance > _swapTokensAtAmount * 5) contractBalance = _swapTokensAtAmount * 5;

        swapTokensForETH(contractBalance); 
        
        _tokensForTreasury = 0;
        
        (success,) = address(opsWalletAddress).call{value: address(this).balance}("");
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        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 sendETHToFee(uint256 amount) private {
        opsWalletAddress.transfer(amount);
    }

    function isBlacklisted(address wallet) external view returns (bool) {
        return _isBlacklisted[wallet];
    }

    function removeAllFee() private {
        if (opsBuyFee == 0 && opsSellFee == 0) return;

        _previousOpsBuyFee = opsBuyFee;
        _previousOpsSellFee = opsSellFee;
        
        opsBuyFee = 0;
        opsSellFee = 0;
    }
    
    function restoreAllFee() private {
        opsBuyFee = _previousOpsBuyFee;
        opsSellFee = _previousOpsSellFee;
    }
        
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee, bool isSell) private {
        if (!takeFee) removeAllFee();
        else amount = _takeFees(sender, amount, isSell);

        _transferStandard(sender, recipient, amount);
        
        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        _balances[sender] = _balances[sender].sub(tAmount);
        _balances[recipient] = _balances[recipient].add(tAmount);
        emit Transfer(sender, recipient, tAmount);
    }

    function _takeFees(address sender, uint256 amount, bool isSell) private returns (uint256) {
        uint256 _totalFees;
        if (tradingOpenBlock + _blocksToBlacklist >= block.number) _totalFees = _getBotFees();
        else _totalFees = _getTotalFees(isSell);
        
        uint256 fees;
        if (_totalFees > 0) {
            fees = amount.mul(_totalFees).div(FEE_DIVISOR);
            _tokensForTreasury += fees * _totalFees / _totalFees;
        }
            
        if (fees > 0) _transferStandard(sender, address(this), fees);
            
        return amount -= fees;
    }

    function _getTotalFees(bool isSell) private view returns(uint256) {
        if (isSell) return opsSellFee;
        return opsBuyFee;
    }

    function _getBotFees() private pure returns(uint256) {
        return 899;
    }

    receive() external payable {}
    fallback() external payable {}

    function okayLetsGo(uint256 blocks) public onlyOwner {
        require(!tradingOpen,"Trading is already open");
        _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _approve(address(this), address(_uniswapV2Router), _totalSupply);
        _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
        swapEnabled = true;
        cooldownEnabled = true;
        maxBuyAmount = _totalSupply.mul(75).div(10000);
        maxSellAmount = _totalSupply.mul(75).div(10000);
        maxWalletAmount = _totalSupply.mul(150).div(10000);
        _swapTokensAtAmount = _totalSupply.mul(5).div(10000);
        tradingOpen = true;
        tradingOpenBlock = block.number;
        _blocksToBlacklist = blocks;
        IERC20(_uniswapV2Pair).approve(address(_uniswapV2Router), type(uint).max);
    }
    
    function CONFIG_CooldownEnabled(bool onoff) public onlyOwner {
        cooldownEnabled = onoff;
    }

    function CONFIG_SwapEnabled(bool onoff) public onlyOwner {
        swapEnabled = onoff;
    }

    function CONFIG_FeesEnabled(bool onoff) public onlyOwner {
        feesEnabled = onoff;
    }    
    
    function CONFIG_MaxBuyAmount(uint256 maxBuy) public onlyOwner {
        require(maxBuy >= (totalSupply().mul(1).div(10000)), "Max buy amount cannot be lower than 0.01% total supply.");
        maxBuyAmount = maxBuy;
    }

    function CONFIG_MaxSellAmount(uint256 maxSell) public onlyOwner {
        require(maxSell >= (totalSupply().mul(1).div(10000)), "Max sell amount cannot be lower than 0.01% total supply.");
        maxSellAmount = maxSell;
    }
    
    function CONFIG_MaxWalletAmount(uint256 maxToken) public onlyOwner {
        require(maxToken >= (totalSupply().mul(1).div(1000)), "Max wallet amount cannot be lower than 0.1% total supply.");
        maxWalletAmount = maxToken;
    }
    
    function CONFIG_SwapTokensAtAmount(uint256 swapAmount) public onlyOwner {
        require(swapAmount >= (totalSupply().mul(1).div(100000)), "Swap amount cannot be lower than 0.001% total supply.");
        require(swapAmount <= (totalSupply().mul(5).div(1000)), "Swap amount cannot be higher than 0.5% total supply.");
        _swapTokensAtAmount = swapAmount;
    }

    function CONFIG_OperationsWalletAddress(address opsWalletAddy) public onlyOwner {
        require(opsWalletAddy != ZERO, "opsWalletAddress address cannot be 0");
        _isExcludedFromFees[opsWalletAddress] = false;
        _isExcludedMaxTransactionAmount[opsWalletAddress] = false;
        opsWalletAddress = payable(opsWalletAddy);
        _isExcludedFromFees[opsWalletAddress] = true;
        _isExcludedMaxTransactionAmount[opsWalletAddress] = true;
    }

    function CONFIG_BuyFee(uint256 newOpsBuyFee) public onlyOwner {
        require(newOpsBuyFee <= 100, "Must keep buy taxes below 10%");
        opsBuyFee = newOpsBuyFee;
    }

    function CONFIG_SellFee(uint256 newOpsSellFee) public onlyOwner {
        require(newOpsSellFee <= 100, "Must keep sell taxes below 10%");
        opsSellFee = newOpsSellFee;
    }

    function CONFIG_CooldownBlocks(uint256 blocks) public onlyOwner {
        _cooldownBlocks = blocks;
    }

    function CONFIG_RemoveLimits() public onlyOwner {
        maxBuyAmount = _totalSupply;
        maxSellAmount = _totalSupply;
        maxWalletAmount = _totalSupply;
        cooldownEnabled = false;
    }

    function AC_ExcludedFromFees(address[] memory accounts, bool isEx) public onlyOwner {
        for (uint i = 0; i < accounts.length; i++) _isExcludedFromFees[accounts[i]] = isEx;
    }
    
    function AC_setExcludeFromMaxTransaction(address[] memory accounts, bool isEx) public onlyOwner {
        for (uint i = 0; i < accounts.length; i++) _isExcludedMaxTransactionAmount[accounts[i]] = isEx;
    }
    
    function AC_setBlacklisted(address[] memory accounts, bool exempt) public onlyOwner {
        for (uint i = 0; i < accounts.length; i++) _isBlacklisted[accounts[i]] = exempt;
    }

    function UTILS_unclog() public {
        require(msg.sender == opsWalletAddress, "Access unauthorized.");
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForETH(contractBalance);
    }
    
    function UTILS_distributeFees() public {
        require(msg.sender == opsWalletAddress, "Access unauthorized.");
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }

    function UTILS_rescueETH() public {
        require(msg.sender == opsWalletAddress, "Access unauthorized.");
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function UTILS_rescueTokens(address tkn) public {
        require(msg.sender == opsWalletAddress, "Access unauthorized.");
        require(tkn != address(this), "Cannot withdraw this token");
        require(IERC20(tkn).balanceOf(address(this)) > 0, "No tokens");
        uint amount = IERC20(tkn).balanceOf(address(this));
        IERC20(tkn).transfer(msg.sender, amount);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"AC_ExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"AC_setBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"AC_setExcludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newOpsBuyFee","type":"uint256"}],"name":"CONFIG_BuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocks","type":"uint256"}],"name":"CONFIG_CooldownBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"CONFIG_CooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"CONFIG_FeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"}],"name":"CONFIG_MaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSell","type":"uint256"}],"name":"CONFIG_MaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxToken","type":"uint256"}],"name":"CONFIG_MaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"opsWalletAddy","type":"address"}],"name":"CONFIG_OperationsWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"CONFIG_RemoveLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newOpsSellFee","type":"uint256"}],"name":"CONFIG_SellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"CONFIG_SwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapAmount","type":"uint256"}],"name":"CONFIG_SwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UTILS_distributeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"UTILS_rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tkn","type":"address"}],"name":"UTILS_rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"UTILS_unclog","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":"cooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"feesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocks","type":"uint256"}],"name":"okayLetsGo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"opsBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"opsSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpenBlock","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"}]

60806040526008805464ffffff00001916640100000000179055620000276012600a6200036a565b620000389064e8d4a5100062000462565b600955620000496012600a6200036a565b6200005a9064e8d4a5100062000462565b600a556012600a6200006d91906200036a565b6200007e9064e8d4a5100062000462565b600b556000600c819055600d8190556001600e556032600f81905560108190556011819055601255601455601780546001600160a01b031990811661dead17909155601880549091169055348015620000d657600080fd5b50620000eb620000e5620002b1565b620002b5565b620000f5620002b1565b601580546001600160a01b0319166001600160a01b0392909216919091179055620001236012600a6200036a565b620001349064e8d4a5100062000462565b6003600062000142620002b1565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506001600560006200017c6200030560201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526005909352818320805485166001908117909155601754909116835290822080549093168117909255600690620001e362000305565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600690935281832080548516600190811790915560175490911683529120805490921617905562000244620002b1565b6018546001600160a01b0391821691167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620002836012600a6200036a565b620002949064e8d4a5100062000462565b604051620002a3919062000314565b60405180910390a36200049a565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031690565b90815260200190565b80825b600180861162000331575062000361565b81870482111562000346576200034662000484565b808616156200035457918102915b9490941c93800262000320565b94509492505050565b60006200037e60001960ff85168462000385565b9392505050565b60008262000396575060016200037e565b81620003a5575060006200037e565b8160018114620003be5760028114620003c957620003fd565b60019150506200037e565b60ff841115620003dd57620003dd62000484565b6001841b915084821115620003f657620003f662000484565b506200037e565b5060208310610133831016604e8410600b841016171562000435575081810a838111156200042f576200042f62000484565b6200037e565b6200044484848460016200031d565b80860482111562000459576200045962000484565b02949350505050565b60008160001904831182151516156200047f576200047f62000484565b500290565b634e487b7160e01b600052601160045260246000fd5b612cb080620004aa6000396000f3fe60806040526004361061026a5760003560e01c80638da5cb5b11610144578063bef4fcd2116100b6578063e2dcfc5d1161007a578063e2dcfc5d146106ac578063e4996940146106cc578063e8611bf6146106ec578063f2fde38b14610701578063fe575a8714610721578063ffb54a991461074157610271565b8063bef4fcd214610617578063c3e7f64e14610637578063c5e5d88514610657578063cc6f32561461066c578063dd62ed3e1461068c57610271565b80639e93ad8e116101085780639e93ad8e1461058e578063a64e4f8a146105a3578063a9059cbb146105b8578063a985ceef146105d8578063aa4bde28146105ed578063bdc4d8631461060257610271565b80638da5cb5b146104f7578063931742da14610519578063931815cb1461053957806395d89b4114610559578063976fbe821461056e57610271565b806340ce31c7116101dd5780636ddd1713116101a15780636ddd17131461045857806370a082311461046d578063715018a61461048d57806372b14fad146104a2578063824b3673146104c257806388e765ff146104e257610271565b806340ce31c7146103ce578063430ee829146103ee578063447b3b19146104035780635db6086b1461042357806366d602ae1461044357610271565b806318160ddd1161022f57806318160ddd146103225780631ca143991461033757806323b872dd146103575780632aaf76e214610377578063313ce567146103975780633e87cced146103b957610271565b806204120b14610273578063034e912a1461029357806306fdde03146102a8578063095ea7b3146102d35780630e23500e1461030057610271565b3661027157005b005b34801561027f57600080fd5b5061027161028e366004612243565b610756565b34801561029f57600080fd5b5061027161078d565b3480156102b457600080fd5b506102bd6107d0565b6040516102ca9190612330565b60405180910390f35b3480156102df57600080fd5b506102f36102ee36600461210d565b6107f8565b6040516102ca9190612325565b34801561030c57600080fd5b50610315610815565b6040516102ca91906129dc565b34801561032e57600080fd5b5061031561081b565b34801561034357600080fd5b50610271610352366004612138565b61083d565b34801561036357600080fd5b506102f36103723660046120cd565b6108bf565b34801561038357600080fd5b5061027161039236600461220b565b610947565b3480156103a357600080fd5b506103ac61096b565b6040516102ca9190612a55565b3480156103c557600080fd5b50610271610970565b3480156103da57600080fd5b506102716103e9366004612243565b6109fb565b3480156103fa57600080fd5b50610271610a46565b34801561040f57600080fd5b5061027161041e36600461205d565b610a7a565b34801561042f57600080fd5b5061027161043e366004612243565b610c6b565b34801561044f57600080fd5b50610315610cdd565b34801561046457600080fd5b506102f3610ce3565b34801561047957600080fd5b5061031561048836600461205d565b610cf2565b34801561049957600080fd5b50610271610d11565b3480156104ae57600080fd5b506102716104bd366004612243565b610d25565b3480156104ce57600080fd5b506102716104dd366004612138565b611120565b3480156104ee57600080fd5b5061031561119d565b34801561050357600080fd5b5061050c6111a3565b6040516102ca91906122a3565b34801561052557600080fd5b5061027161053436600461220b565b6111b2565b34801561054557600080fd5b50610271610554366004612243565b6111da565b34801561056557600080fd5b506102bd6111e7565b34801561057a57600080fd5b50610271610589366004612243565b611205565b34801561059a57600080fd5b50610315611233565b3480156105af57600080fd5b506102f3611239565b3480156105c457600080fd5b506102f36105d336600461210d565b61124a565b3480156105e457600080fd5b506102f361125e565b3480156105f957600080fd5b5061031561126e565b34801561060e57600080fd5b50610315611274565b34801561062357600080fd5b50610271610632366004612138565b61127a565b34801561064357600080fd5b5061027161065236600461205d565b6112f7565b34801561066357600080fd5b506103156113ae565b34801561067857600080fd5b50610271610687366004612243565b6113b4565b34801561069857600080fd5b506103156106a7366004612095565b6113f3565b3480156106b857600080fd5b506102716106c7366004612243565b61141e565b3480156106d857600080fd5b506102716106e736600461220b565b61145d565b3480156106f857600080fd5b50610271611483565b34801561070d57600080fd5b5061027161071c36600461205d565b6114f6565b34801561072d57600080fd5b506102f361073c36600461205d565b61152d565b34801561074d57600080fd5b506102f361154b565b61075e611554565b60648111156107885760405162461bcd60e51b815260040161077f906125e1565b60405180910390fd5b600f55565b6015546001600160a01b031633146107b75760405162461bcd60e51b815260040161077f906129ae565b60006107c230610cf2565b90506107cd81611593565b50565b60408051808201909152600e81526d4f4e45204559454420534849424160901b602082015290565b600061080c610805611718565b848461171c565b50600192915050565b600c5481565b60006108296012600a612ae1565b6108389064e8d4a51000612bb2565b905090565b610845611554565b60005b82518110156108ba57816005600085848151811061087657634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806108b281612be8565b915050610848565b505050565b60006108cc8484846117e0565b61093c846108d8611718565b61093785604051806060016040528060288152602001612c53602891396001600160a01b038a16600090815260046020526040812090610916611718565b6001600160a01b031681526020810191909152604001600020549190611cc6565b61171c565b5060015b9392505050565b61094f611554565b60088054911515620100000262ff000019909216919091179055565b601290565b6015546001600160a01b0316331461099a5760405162461bcd60e51b815260040161077f906129ae565b6000336001600160a01b0316476040516109b3906122a0565b60006040518083038185875af1925050503d80600081146109f0576040519150601f19603f3d011682016040523d82523d6000602084013e6109f5565b606091505b50505050565b610a03611554565b610a226103e8610a1c6001610a1661081b565b90611cf2565b90611cfe565b811015610a415760405162461bcd60e51b815260040161077f90612584565b600b55565b6015546001600160a01b03163314610a705760405162461bcd60e51b815260040161077f906129ae565b476107cd81611d0a565b6015546001600160a01b03163314610aa45760405162461bcd60e51b815260040161077f906129ae565b6001600160a01b038116301415610acd5760405162461bcd60e51b815260040161077f906127fe565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190610afc9030906004016122a3565b60206040518083038186803b158015610b1457600080fd5b505afa158015610b28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4c919061225b565b11610b695760405162461bcd60e51b815260040161077f90612383565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190610b989030906004016122a3565b60206040518083038186803b158015610bb057600080fd5b505afa158015610bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be8919061225b565b60405163a9059cbb60e01b81529091506001600160a01b0383169063a9059cbb90610c1990339085906004016122d1565b602060405180830381600087803b158015610c3357600080fd5b505af1158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ba9190612227565b610c73611554565b610c87620186a0610a1c6001610a1661081b565b811015610ca65760405162461bcd60e51b815260040161077f9061264f565b610cb96103e8610a1c6005610a1661081b565b811115610cd85760405162461bcd60e51b815260040161077f906126a4565b601455565b600a5481565b60085462010000900460ff1681565b6001600160a01b0381166000908152600360205260409020545b919050565b610d19611554565b610d236000611d44565b565b610d2d611554565b60085460ff1615610d505760405162461bcd60e51b815260040161077f906124ce565b600180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790819055610da29030906001600160a01b0316610d936012600a612ae1565b6109379064e8d4a51000612bb2565b600160009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610df057600080fd5b505afa158015610e04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e289190612079565b6001600160a01b031663c9c6539630600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610e8557600080fd5b505afa158015610e99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebd9190612079565b6040518363ffffffff1660e01b8152600401610eda9291906122b7565b602060405180830381600087803b158015610ef457600080fd5b505af1158015610f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2c9190612079565b601680546001600160a01b0319166001600160a01b039283161790556001541663f305d7194730610f5c81610cf2565b600080610f676111a3565b426040518863ffffffff1660e01b8152600401610f89969594939291906122ea565b6060604051808303818588803b158015610fa257600080fd5b505af1158015610fb6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610fdb9190612273565b50506008805463ff0000001962ff000019909116620100001716630100000017905550611024612710610a1c604b6110156012600a612ae1565b610a169064e8d4a51000612bb2565b60095561103e612710610a1c604b6110156012600a612ae1565b600a8190555061105d612710610a1c60966012600a6110159190612ae1565b600b55611077612710610a1c60056110156012600a612ae1565b6014556008805460ff1916600190811790915543600c55600d829055601654905460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926110ca92911690600019906004016122d1565b602060405180830381600087803b1580156110e457600080fd5b505af11580156110f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111c9190612227565b5050565b611128611554565b60005b82518110156108ba57816007600085848151811061115957634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061119581612be8565b91505061112b565b60095481565b6000546001600160a01b031690565b6111ba611554565b600880549115156401000000000264ff0000000019909216919091179055565b6111e2611554565b600e55565b604080518082019091526004815263444f4b5560e01b602082015290565b61120d611554565b606481111561122e5760405162461bcd60e51b815260040161077f90612618565b601155565b6103e881565b600854640100000000900460ff1681565b600061080c611257611718565b84846117e0565b6008546301000000900460ff1681565b600b5481565b600f5481565b611282611554565b60005b82518110156108ba5781600660008584815181106112b357634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806112ef81612be8565b915050611285565b6112ff611554565b6018546001600160a01b038281169116141561132d5760405162461bcd60e51b815260040161077f906126f8565b601580546001600160a01b039081166000908152600560208181526040808420805460ff19908116909155865486168552600680845282862080548316905587546001600160a01b03191698871698909817808855861685529282528084208054841660019081179091559554909416835294909452208054909216179055565b60115481565b6113bc611554565b6113cf612710610a1c6001610a1661081b565b8110156113ee5760405162461bcd60e51b815260040161077f906128c3565b600955565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b611426611554565b611439612710610a1c6001610a1661081b565b8110156114585760405162461bcd60e51b815260040161077f90612471565b600a55565b611465611554565b6008805491151563010000000263ff00000019909216919091179055565b61148b611554565b6114976012600a612ae1565b6114a69064e8d4a51000612bb2565b6009556114b56012600a612ae1565b6114c49064e8d4a51000612bb2565b600a9081556114d590601290612ae1565b6114e49064e8d4a51000612bb2565b600b556008805463ff00000019169055565b6114fe611554565b6001600160a01b0381166115245760405162461bcd60e51b815260040161077f906123e9565b6107cd81611d44565b6001600160a01b031660009081526007602052604090205460ff1690565b60085460ff1681565b61155c611718565b6001600160a01b031661156d6111a3565b6001600160a01b031614610d235760405162461bcd60e51b815260040161077f906127c9565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106115d657634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561162a57600080fd5b505afa15801561163e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116629190612079565b8160018151811061168357634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526001546116a9913091168461171c565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac947906116e29085906000908690309042906004016129e5565b600060405180830381600087803b1580156116fc57600080fd5b505af1158015611710573d6000803e3d6000fd5b505050505050565b3390565b6018546001600160a01b038481169116141561174a5760405162461bcd60e51b815260040161077f90612920565b6018546001600160a01b03838116911614156117785760405162461bcd60e51b815260040161077f9061242f565b6001600160a01b0380841660008181526004602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906117d39085906129dc565b60405180910390a3505050565b6018546001600160a01b038481169116141561180e5760405162461bcd60e51b815260040161077f9061287e565b6018546001600160a01b038381169116141561183c5760405162461bcd60e51b815260040161077f906123a6565b6000811161185c5760405162461bcd60e51b815260040161077f90612835565b600160006118686111a3565b6001600160a01b0316856001600160a01b0316141580156118a2575061188c6111a3565b6001600160a01b0316846001600160a01b031614155b80156118bc57506018546001600160a01b03858116911614155b80156118d657506017546001600160a01b03858116911614155b80156118ea5750600854610100900460ff16155b15611b97576001600160a01b03851660009081526007602052604090205460ff1615801561193157506001600160a01b03841660009081526007602052604090205460ff16155b61193a57600080fd5b60085460ff1661199f576001600160a01b03851660009081526005602052604090205460ff168061198357506001600160a01b03841660009081526005602052604090205460ff165b61199f5760405162461bcd60e51b815260040161077f9061254d565b6008546301000000900460ff1615611a70576001546001600160a01b038581169116148015906119dd57506016546001600160a01b03858116911614155b15611a7057600e546119ef9043612bd1565b32600090815260026020526040902054108015611a2f5750600e54611a149043612bd1565b6001600160a01b038516600090815260026020526040902054105b611a4b5760405162461bcd60e51b815260040161077f90612505565b3260009081526002602052604080822043908190556001600160a01b03871683529120555b6016546001600160a01b038681169116148015611a9b57506001546001600160a01b03858116911614155b8015611ac057506001600160a01b03841660009081526006602052604090205460ff16155b15611b1c57600954831115611ae75760405162461bcd60e51b815260040161077f90612780565b600b5483611af486610cf2565b611afe9190612a63565b1115611b1c5760405162461bcd60e51b815260040161077f9061273c565b6016546001600160a01b038581169116148015611b4757506001546001600160a01b03868116911614155b8015611b6c57506001600160a01b03851660009081526006602052604090205460ff16155b15611b9757600a54831115611b935760405162461bcd60e51b815260040161077f90612964565b5060015b6001600160a01b03851660009081526005602052604090205460ff1680611bd657506001600160a01b03841660009081526005602052604090205460ff165b80611bec5750600854640100000000900460ff16155b15611bf657600091505b6000611c0130610cf2565b9050600060145482118015611c135750825b9050808015611c2a575060085462010000900460ff165b8015611c3e5750600854610100900460ff16155b8015611c6357506001600160a01b03871660009081526005602052604090205460ff16155b8015611c8857506001600160a01b03861660009081526005602052604090205460ff16155b15611cb0576008805461ff001916610100179055611ca4611d94565b6008805461ff00191690555b611cbd8787878787611e56565b50505050505050565b60008184841115611cea5760405162461bcd60e51b815260040161077f9190612330565b505050900390565b60006109408284612bb2565b60006109408284612a7b565b6015546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561111c573d6000803e3d6000fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000611d9f30610cf2565b90506000811580611db05750601354155b15611dbc575050610d23565b601454611dca906005612bb2565b821115611de257601454611ddf906005612bb2565b91505b611deb82611593565b60006013556015546040516001600160a01b03909116904790611e0d906122a0565b60006040518083038185875af1925050503d8060008114611e4a576040519150601f19603f3d011682016040523d82523d6000602084013e611e4f565b606091505b5050505050565b81611e6857611e63611e8e565b611e76565b611e73858483611ebf565b92505b611e81858585611f5e565b81611e4f57611e4f612002565b600f54158015611e9e5750601154155b15611ea857610d23565b600f80546010556011805460125560009182905555565b60008043600d54600c54611ed39190612a63565b10611ee757611ee0612010565b9050611ef3565b611ef083612016565b90505b60008115611f3957611f0b6103e8610a1c8785611cf2565b905081611f188183612bb2565b611f229190612a7b565b60136000828254611f339190612a63565b90915550505b8015611f4a57611f4a863083611f5e565b611f548186612bd1565b9695505050505050565b6001600160a01b038316600090815260036020526040902054611f81908261202f565b6001600160a01b038085166000908152600360205260408082209390935590841681522054611fb0908261203b565b6001600160a01b0380841660008181526003602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906117d39085906129dc565b601054600f55601254601155565b61038390565b600081156120275750601154610d0c565b5050600f5490565b60006109408284612bd1565b60006109408284612a63565b8035610d0c81612c2f565b8035610d0c81612c44565b60006020828403121561206e578081fd5b813561094081612c2f565b60006020828403121561208a578081fd5b815161094081612c2f565b600080604083850312156120a7578081fd5b82356120b281612c2f565b915060208301356120c281612c2f565b809150509250929050565b6000806000606084860312156120e1578081fd5b83356120ec81612c2f565b925060208401356120fc81612c2f565b929592945050506040919091013590565b6000806040838503121561211f578182fd5b823561212a81612c2f565b946020939093013593505050565b6000806040838503121561214a578182fd5b823567ffffffffffffffff80821115612161578384fd5b818501915085601f830112612174578384fd5b813560208282111561218857612188612c19565b808202604051828282010181811086821117156121a7576121a7612c19565b604052838152828101945085830182870184018b10156121c5578889fd5b8896505b848710156121ee576121da81612047565b8652600196909601959483019483016121c9565b5096506121fe9050878201612052565b9450505050509250929050565b60006020828403121561221c578081fd5b813561094081612c44565b600060208284031215612238578081fd5b815161094081612c44565b600060208284031215612254578081fd5b5035919050565b60006020828403121561226c578081fd5b5051919050565b600080600060608486031215612287578283fd5b8351925060208401519150604084015190509250925092565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b8181101561235c57858101830151858201604001528201612340565b8181111561236d5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600990820152684e6f20746f6b656e7360b81b604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526038908201527f4d61782073656c6c20616d6f756e742063616e6e6f74206265206c6f7765722060408201527f7468616e20302e30312520746f74616c20737570706c792e0000000000000000606082015260800190565b60208082526017908201527f54726164696e6720697320616c7265616479206f70656e000000000000000000604082015260600190565b60208082526028908201527f5472616e736665722064656c617920656e61626c65642e20547279206167616960408201526737103630ba32b91760c11b606082015260800190565b6020808252601b908201527f54726164696e67206973206e6f7420616c6c6f776564207965742e0000000000604082015260600190565b60208082526039908201527f4d61782077616c6c657420616d6f756e742063616e6e6f74206265206c6f776560408201527f72207468616e20302e312520746f74616c20737570706c792e00000000000000606082015260800190565b6020808252601d908201527f4d757374206b656570206275792074617865732062656c6f7720313025000000604082015260600190565b6020808252601e908201527f4d757374206b6565702073656c6c2074617865732062656c6f77203130250000604082015260600190565b60208082526035908201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60408201527410181718181892903a37ba30b61039bab838363c9760591b606082015260800190565b60208082526034908201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604082015273371018171a92903a37ba30b61039bab838363c9760611b606082015260800190565b60208082526024908201527f6f707357616c6c65744164647265737320616464726573732063616e6e6f74206040820152630626520360e41b606082015260800190565b60208082526024908201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6040820152633ab73a1760e11b606082015260800190565b60208082526029908201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178426040820152683abca0b6b7bab73a1760b91b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f43616e6e6f74207769746864726177207468697320746f6b656e000000000000604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526037908201527f4d61782062757920616d6f756e742063616e6e6f74206265206c6f776572207460408201527f68616e20302e30312520746f74616c20737570706c792e000000000000000000606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252602a908201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785360408201526932b63620b6b7bab73a1760b11b606082015260800190565b60208082526014908201527320b1b1b2b9b9903ab730baba3437b934bd32b21760611b604082015260600190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612a345784516001600160a01b031683529383019391830191600101612a0f565b50506001600160a01b03969096166060850152505050608001529392505050565b60ff91909116815260200190565b60008219821115612a7657612a76612c03565b500190565b600082612a9657634e487b7160e01b81526012600452602481fd5b500490565b80825b6001808611612aad5750612ad8565b818704821115612abf57612abf612c03565b80861615612acc57918102915b9490941c938002612a9e565b94509492505050565b600061094060001960ff851684600082612afd57506001610940565b81612b0a57506000610940565b8160018114612b205760028114612b2a57612b57565b6001915050610940565b60ff841115612b3b57612b3b612c03565b6001841b915084821115612b5157612b51612c03565b50610940565b5060208310610133831016604e8410600b8410161715612b8a575081810a83811115612b8557612b85612c03565b610940565b612b978484846001612a9b565b808604821115612ba957612ba9612c03565b02949350505050565b6000816000190483118215151615612bcc57612bcc612c03565b500290565b600082821015612be357612be3612c03565b500390565b6000600019821415612bfc57612bfc612c03565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146107cd57600080fd5b80151581146107cd57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220bacab1f37892edf664c88fb1d28804ceba09edbc185197447e5e8a7a36ae319a64736f6c63430008000033

Deployed Bytecode

0x60806040526004361061026a5760003560e01c80638da5cb5b11610144578063bef4fcd2116100b6578063e2dcfc5d1161007a578063e2dcfc5d146106ac578063e4996940146106cc578063e8611bf6146106ec578063f2fde38b14610701578063fe575a8714610721578063ffb54a991461074157610271565b8063bef4fcd214610617578063c3e7f64e14610637578063c5e5d88514610657578063cc6f32561461066c578063dd62ed3e1461068c57610271565b80639e93ad8e116101085780639e93ad8e1461058e578063a64e4f8a146105a3578063a9059cbb146105b8578063a985ceef146105d8578063aa4bde28146105ed578063bdc4d8631461060257610271565b80638da5cb5b146104f7578063931742da14610519578063931815cb1461053957806395d89b4114610559578063976fbe821461056e57610271565b806340ce31c7116101dd5780636ddd1713116101a15780636ddd17131461045857806370a082311461046d578063715018a61461048d57806372b14fad146104a2578063824b3673146104c257806388e765ff146104e257610271565b806340ce31c7146103ce578063430ee829146103ee578063447b3b19146104035780635db6086b1461042357806366d602ae1461044357610271565b806318160ddd1161022f57806318160ddd146103225780631ca143991461033757806323b872dd146103575780632aaf76e214610377578063313ce567146103975780633e87cced146103b957610271565b806204120b14610273578063034e912a1461029357806306fdde03146102a8578063095ea7b3146102d35780630e23500e1461030057610271565b3661027157005b005b34801561027f57600080fd5b5061027161028e366004612243565b610756565b34801561029f57600080fd5b5061027161078d565b3480156102b457600080fd5b506102bd6107d0565b6040516102ca9190612330565b60405180910390f35b3480156102df57600080fd5b506102f36102ee36600461210d565b6107f8565b6040516102ca9190612325565b34801561030c57600080fd5b50610315610815565b6040516102ca91906129dc565b34801561032e57600080fd5b5061031561081b565b34801561034357600080fd5b50610271610352366004612138565b61083d565b34801561036357600080fd5b506102f36103723660046120cd565b6108bf565b34801561038357600080fd5b5061027161039236600461220b565b610947565b3480156103a357600080fd5b506103ac61096b565b6040516102ca9190612a55565b3480156103c557600080fd5b50610271610970565b3480156103da57600080fd5b506102716103e9366004612243565b6109fb565b3480156103fa57600080fd5b50610271610a46565b34801561040f57600080fd5b5061027161041e36600461205d565b610a7a565b34801561042f57600080fd5b5061027161043e366004612243565b610c6b565b34801561044f57600080fd5b50610315610cdd565b34801561046457600080fd5b506102f3610ce3565b34801561047957600080fd5b5061031561048836600461205d565b610cf2565b34801561049957600080fd5b50610271610d11565b3480156104ae57600080fd5b506102716104bd366004612243565b610d25565b3480156104ce57600080fd5b506102716104dd366004612138565b611120565b3480156104ee57600080fd5b5061031561119d565b34801561050357600080fd5b5061050c6111a3565b6040516102ca91906122a3565b34801561052557600080fd5b5061027161053436600461220b565b6111b2565b34801561054557600080fd5b50610271610554366004612243565b6111da565b34801561056557600080fd5b506102bd6111e7565b34801561057a57600080fd5b50610271610589366004612243565b611205565b34801561059a57600080fd5b50610315611233565b3480156105af57600080fd5b506102f3611239565b3480156105c457600080fd5b506102f36105d336600461210d565b61124a565b3480156105e457600080fd5b506102f361125e565b3480156105f957600080fd5b5061031561126e565b34801561060e57600080fd5b50610315611274565b34801561062357600080fd5b50610271610632366004612138565b61127a565b34801561064357600080fd5b5061027161065236600461205d565b6112f7565b34801561066357600080fd5b506103156113ae565b34801561067857600080fd5b50610271610687366004612243565b6113b4565b34801561069857600080fd5b506103156106a7366004612095565b6113f3565b3480156106b857600080fd5b506102716106c7366004612243565b61141e565b3480156106d857600080fd5b506102716106e736600461220b565b61145d565b3480156106f857600080fd5b50610271611483565b34801561070d57600080fd5b5061027161071c36600461205d565b6114f6565b34801561072d57600080fd5b506102f361073c36600461205d565b61152d565b34801561074d57600080fd5b506102f361154b565b61075e611554565b60648111156107885760405162461bcd60e51b815260040161077f906125e1565b60405180910390fd5b600f55565b6015546001600160a01b031633146107b75760405162461bcd60e51b815260040161077f906129ae565b60006107c230610cf2565b90506107cd81611593565b50565b60408051808201909152600e81526d4f4e45204559454420534849424160901b602082015290565b600061080c610805611718565b848461171c565b50600192915050565b600c5481565b60006108296012600a612ae1565b6108389064e8d4a51000612bb2565b905090565b610845611554565b60005b82518110156108ba57816005600085848151811061087657634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806108b281612be8565b915050610848565b505050565b60006108cc8484846117e0565b61093c846108d8611718565b61093785604051806060016040528060288152602001612c53602891396001600160a01b038a16600090815260046020526040812090610916611718565b6001600160a01b031681526020810191909152604001600020549190611cc6565b61171c565b5060015b9392505050565b61094f611554565b60088054911515620100000262ff000019909216919091179055565b601290565b6015546001600160a01b0316331461099a5760405162461bcd60e51b815260040161077f906129ae565b6000336001600160a01b0316476040516109b3906122a0565b60006040518083038185875af1925050503d80600081146109f0576040519150601f19603f3d011682016040523d82523d6000602084013e6109f5565b606091505b50505050565b610a03611554565b610a226103e8610a1c6001610a1661081b565b90611cf2565b90611cfe565b811015610a415760405162461bcd60e51b815260040161077f90612584565b600b55565b6015546001600160a01b03163314610a705760405162461bcd60e51b815260040161077f906129ae565b476107cd81611d0a565b6015546001600160a01b03163314610aa45760405162461bcd60e51b815260040161077f906129ae565b6001600160a01b038116301415610acd5760405162461bcd60e51b815260040161077f906127fe565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190610afc9030906004016122a3565b60206040518083038186803b158015610b1457600080fd5b505afa158015610b28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4c919061225b565b11610b695760405162461bcd60e51b815260040161077f90612383565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190610b989030906004016122a3565b60206040518083038186803b158015610bb057600080fd5b505afa158015610bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be8919061225b565b60405163a9059cbb60e01b81529091506001600160a01b0383169063a9059cbb90610c1990339085906004016122d1565b602060405180830381600087803b158015610c3357600080fd5b505af1158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ba9190612227565b610c73611554565b610c87620186a0610a1c6001610a1661081b565b811015610ca65760405162461bcd60e51b815260040161077f9061264f565b610cb96103e8610a1c6005610a1661081b565b811115610cd85760405162461bcd60e51b815260040161077f906126a4565b601455565b600a5481565b60085462010000900460ff1681565b6001600160a01b0381166000908152600360205260409020545b919050565b610d19611554565b610d236000611d44565b565b610d2d611554565b60085460ff1615610d505760405162461bcd60e51b815260040161077f906124ce565b600180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790819055610da29030906001600160a01b0316610d936012600a612ae1565b6109379064e8d4a51000612bb2565b600160009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610df057600080fd5b505afa158015610e04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e289190612079565b6001600160a01b031663c9c6539630600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610e8557600080fd5b505afa158015610e99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebd9190612079565b6040518363ffffffff1660e01b8152600401610eda9291906122b7565b602060405180830381600087803b158015610ef457600080fd5b505af1158015610f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2c9190612079565b601680546001600160a01b0319166001600160a01b039283161790556001541663f305d7194730610f5c81610cf2565b600080610f676111a3565b426040518863ffffffff1660e01b8152600401610f89969594939291906122ea565b6060604051808303818588803b158015610fa257600080fd5b505af1158015610fb6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610fdb9190612273565b50506008805463ff0000001962ff000019909116620100001716630100000017905550611024612710610a1c604b6110156012600a612ae1565b610a169064e8d4a51000612bb2565b60095561103e612710610a1c604b6110156012600a612ae1565b600a8190555061105d612710610a1c60966012600a6110159190612ae1565b600b55611077612710610a1c60056110156012600a612ae1565b6014556008805460ff1916600190811790915543600c55600d829055601654905460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926110ca92911690600019906004016122d1565b602060405180830381600087803b1580156110e457600080fd5b505af11580156110f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111c9190612227565b5050565b611128611554565b60005b82518110156108ba57816007600085848151811061115957634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061119581612be8565b91505061112b565b60095481565b6000546001600160a01b031690565b6111ba611554565b600880549115156401000000000264ff0000000019909216919091179055565b6111e2611554565b600e55565b604080518082019091526004815263444f4b5560e01b602082015290565b61120d611554565b606481111561122e5760405162461bcd60e51b815260040161077f90612618565b601155565b6103e881565b600854640100000000900460ff1681565b600061080c611257611718565b84846117e0565b6008546301000000900460ff1681565b600b5481565b600f5481565b611282611554565b60005b82518110156108ba5781600660008584815181106112b357634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806112ef81612be8565b915050611285565b6112ff611554565b6018546001600160a01b038281169116141561132d5760405162461bcd60e51b815260040161077f906126f8565b601580546001600160a01b039081166000908152600560208181526040808420805460ff19908116909155865486168552600680845282862080548316905587546001600160a01b03191698871698909817808855861685529282528084208054841660019081179091559554909416835294909452208054909216179055565b60115481565b6113bc611554565b6113cf612710610a1c6001610a1661081b565b8110156113ee5760405162461bcd60e51b815260040161077f906128c3565b600955565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b611426611554565b611439612710610a1c6001610a1661081b565b8110156114585760405162461bcd60e51b815260040161077f90612471565b600a55565b611465611554565b6008805491151563010000000263ff00000019909216919091179055565b61148b611554565b6114976012600a612ae1565b6114a69064e8d4a51000612bb2565b6009556114b56012600a612ae1565b6114c49064e8d4a51000612bb2565b600a9081556114d590601290612ae1565b6114e49064e8d4a51000612bb2565b600b556008805463ff00000019169055565b6114fe611554565b6001600160a01b0381166115245760405162461bcd60e51b815260040161077f906123e9565b6107cd81611d44565b6001600160a01b031660009081526007602052604090205460ff1690565b60085460ff1681565b61155c611718565b6001600160a01b031661156d6111a3565b6001600160a01b031614610d235760405162461bcd60e51b815260040161077f906127c9565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106115d657634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561162a57600080fd5b505afa15801561163e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116629190612079565b8160018151811061168357634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526001546116a9913091168461171c565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac947906116e29085906000908690309042906004016129e5565b600060405180830381600087803b1580156116fc57600080fd5b505af1158015611710573d6000803e3d6000fd5b505050505050565b3390565b6018546001600160a01b038481169116141561174a5760405162461bcd60e51b815260040161077f90612920565b6018546001600160a01b03838116911614156117785760405162461bcd60e51b815260040161077f9061242f565b6001600160a01b0380841660008181526004602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906117d39085906129dc565b60405180910390a3505050565b6018546001600160a01b038481169116141561180e5760405162461bcd60e51b815260040161077f9061287e565b6018546001600160a01b038381169116141561183c5760405162461bcd60e51b815260040161077f906123a6565b6000811161185c5760405162461bcd60e51b815260040161077f90612835565b600160006118686111a3565b6001600160a01b0316856001600160a01b0316141580156118a2575061188c6111a3565b6001600160a01b0316846001600160a01b031614155b80156118bc57506018546001600160a01b03858116911614155b80156118d657506017546001600160a01b03858116911614155b80156118ea5750600854610100900460ff16155b15611b97576001600160a01b03851660009081526007602052604090205460ff1615801561193157506001600160a01b03841660009081526007602052604090205460ff16155b61193a57600080fd5b60085460ff1661199f576001600160a01b03851660009081526005602052604090205460ff168061198357506001600160a01b03841660009081526005602052604090205460ff165b61199f5760405162461bcd60e51b815260040161077f9061254d565b6008546301000000900460ff1615611a70576001546001600160a01b038581169116148015906119dd57506016546001600160a01b03858116911614155b15611a7057600e546119ef9043612bd1565b32600090815260026020526040902054108015611a2f5750600e54611a149043612bd1565b6001600160a01b038516600090815260026020526040902054105b611a4b5760405162461bcd60e51b815260040161077f90612505565b3260009081526002602052604080822043908190556001600160a01b03871683529120555b6016546001600160a01b038681169116148015611a9b57506001546001600160a01b03858116911614155b8015611ac057506001600160a01b03841660009081526006602052604090205460ff16155b15611b1c57600954831115611ae75760405162461bcd60e51b815260040161077f90612780565b600b5483611af486610cf2565b611afe9190612a63565b1115611b1c5760405162461bcd60e51b815260040161077f9061273c565b6016546001600160a01b038581169116148015611b4757506001546001600160a01b03868116911614155b8015611b6c57506001600160a01b03851660009081526006602052604090205460ff16155b15611b9757600a54831115611b935760405162461bcd60e51b815260040161077f90612964565b5060015b6001600160a01b03851660009081526005602052604090205460ff1680611bd657506001600160a01b03841660009081526005602052604090205460ff165b80611bec5750600854640100000000900460ff16155b15611bf657600091505b6000611c0130610cf2565b9050600060145482118015611c135750825b9050808015611c2a575060085462010000900460ff165b8015611c3e5750600854610100900460ff16155b8015611c6357506001600160a01b03871660009081526005602052604090205460ff16155b8015611c8857506001600160a01b03861660009081526005602052604090205460ff16155b15611cb0576008805461ff001916610100179055611ca4611d94565b6008805461ff00191690555b611cbd8787878787611e56565b50505050505050565b60008184841115611cea5760405162461bcd60e51b815260040161077f9190612330565b505050900390565b60006109408284612bb2565b60006109408284612a7b565b6015546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561111c573d6000803e3d6000fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000611d9f30610cf2565b90506000811580611db05750601354155b15611dbc575050610d23565b601454611dca906005612bb2565b821115611de257601454611ddf906005612bb2565b91505b611deb82611593565b60006013556015546040516001600160a01b03909116904790611e0d906122a0565b60006040518083038185875af1925050503d8060008114611e4a576040519150601f19603f3d011682016040523d82523d6000602084013e611e4f565b606091505b5050505050565b81611e6857611e63611e8e565b611e76565b611e73858483611ebf565b92505b611e81858585611f5e565b81611e4f57611e4f612002565b600f54158015611e9e5750601154155b15611ea857610d23565b600f80546010556011805460125560009182905555565b60008043600d54600c54611ed39190612a63565b10611ee757611ee0612010565b9050611ef3565b611ef083612016565b90505b60008115611f3957611f0b6103e8610a1c8785611cf2565b905081611f188183612bb2565b611f229190612a7b565b60136000828254611f339190612a63565b90915550505b8015611f4a57611f4a863083611f5e565b611f548186612bd1565b9695505050505050565b6001600160a01b038316600090815260036020526040902054611f81908261202f565b6001600160a01b038085166000908152600360205260408082209390935590841681522054611fb0908261203b565b6001600160a01b0380841660008181526003602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906117d39085906129dc565b601054600f55601254601155565b61038390565b600081156120275750601154610d0c565b5050600f5490565b60006109408284612bd1565b60006109408284612a63565b8035610d0c81612c2f565b8035610d0c81612c44565b60006020828403121561206e578081fd5b813561094081612c2f565b60006020828403121561208a578081fd5b815161094081612c2f565b600080604083850312156120a7578081fd5b82356120b281612c2f565b915060208301356120c281612c2f565b809150509250929050565b6000806000606084860312156120e1578081fd5b83356120ec81612c2f565b925060208401356120fc81612c2f565b929592945050506040919091013590565b6000806040838503121561211f578182fd5b823561212a81612c2f565b946020939093013593505050565b6000806040838503121561214a578182fd5b823567ffffffffffffffff80821115612161578384fd5b818501915085601f830112612174578384fd5b813560208282111561218857612188612c19565b808202604051828282010181811086821117156121a7576121a7612c19565b604052838152828101945085830182870184018b10156121c5578889fd5b8896505b848710156121ee576121da81612047565b8652600196909601959483019483016121c9565b5096506121fe9050878201612052565b9450505050509250929050565b60006020828403121561221c578081fd5b813561094081612c44565b600060208284031215612238578081fd5b815161094081612c44565b600060208284031215612254578081fd5b5035919050565b60006020828403121561226c578081fd5b5051919050565b600080600060608486031215612287578283fd5b8351925060208401519150604084015190509250925092565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b8181101561235c57858101830151858201604001528201612340565b8181111561236d5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600990820152684e6f20746f6b656e7360b81b604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526038908201527f4d61782073656c6c20616d6f756e742063616e6e6f74206265206c6f7765722060408201527f7468616e20302e30312520746f74616c20737570706c792e0000000000000000606082015260800190565b60208082526017908201527f54726164696e6720697320616c7265616479206f70656e000000000000000000604082015260600190565b60208082526028908201527f5472616e736665722064656c617920656e61626c65642e20547279206167616960408201526737103630ba32b91760c11b606082015260800190565b6020808252601b908201527f54726164696e67206973206e6f7420616c6c6f776564207965742e0000000000604082015260600190565b60208082526039908201527f4d61782077616c6c657420616d6f756e742063616e6e6f74206265206c6f776560408201527f72207468616e20302e312520746f74616c20737570706c792e00000000000000606082015260800190565b6020808252601d908201527f4d757374206b656570206275792074617865732062656c6f7720313025000000604082015260600190565b6020808252601e908201527f4d757374206b6565702073656c6c2074617865732062656c6f77203130250000604082015260600190565b60208082526035908201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60408201527410181718181892903a37ba30b61039bab838363c9760591b606082015260800190565b60208082526034908201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604082015273371018171a92903a37ba30b61039bab838363c9760611b606082015260800190565b60208082526024908201527f6f707357616c6c65744164647265737320616464726573732063616e6e6f74206040820152630626520360e41b606082015260800190565b60208082526024908201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6040820152633ab73a1760e11b606082015260800190565b60208082526029908201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178426040820152683abca0b6b7bab73a1760b91b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f43616e6e6f74207769746864726177207468697320746f6b656e000000000000604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526037908201527f4d61782062757920616d6f756e742063616e6e6f74206265206c6f776572207460408201527f68616e20302e30312520746f74616c20737570706c792e000000000000000000606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252602a908201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785360408201526932b63620b6b7bab73a1760b11b606082015260800190565b60208082526014908201527320b1b1b2b9b9903ab730baba3437b934bd32b21760611b604082015260600190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612a345784516001600160a01b031683529383019391830191600101612a0f565b50506001600160a01b03969096166060850152505050608001529392505050565b60ff91909116815260200190565b60008219821115612a7657612a76612c03565b500190565b600082612a9657634e487b7160e01b81526012600452602481fd5b500490565b80825b6001808611612aad5750612ad8565b818704821115612abf57612abf612c03565b80861615612acc57918102915b9490941c938002612a9e565b94509492505050565b600061094060001960ff851684600082612afd57506001610940565b81612b0a57506000610940565b8160018114612b205760028114612b2a57612b57565b6001915050610940565b60ff841115612b3b57612b3b612c03565b6001841b915084821115612b5157612b51612c03565b50610940565b5060208310610133831016604e8410600b8410161715612b8a575081810a83811115612b8557612b85612c03565b610940565b612b978484846001612a9b565b808604821115612ba957612ba9612c03565b02949350505050565b6000816000190483118215151615612bcc57612bcc612c03565b500290565b600082821015612be357612be3612c03565b500390565b6000600019821415612bfc57612bfc612c03565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146107cd57600080fd5b80151581146107cd57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220bacab1f37892edf664c88fb1d28804ceba09edbc185197447e5e8a7a36ae319a64736f6c63430008000033

Deployed Bytecode Sourcemap

18934:14706:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31243:177;;;;;;;;;;-1:-1:-1;31243:177:0;;;;;:::i;:::-;;:::i;32558:218::-;;;;;;;;;;;;;:::i;21212:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22050:161;;;;;;;;;;-1:-1:-1;22050:161:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;20009:35::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;21489:100::-;;;;;;;;;;;;;:::i;31950:185::-;;;;;;;;;;-1:-1:-1;31950:185:0;;;;;:::i;:::-;;:::i;22219:313::-;;;;;;;;;;-1:-1:-1;22219:313:0;;;;;:::i;:::-;;:::i;29453:95::-;;;;;;;;;;-1:-1:-1;29453:95:0;;;;;:::i;:::-;;:::i;21398:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;33021:221::-;;;;;;;;;;;;;:::i;30141:237::-;;;;;;;;;;-1:-1:-1;30141:237:0;;;;;:::i;:::-;;:::i;32788:225::-;;;;;;;;;;;;;:::i;33250:385::-;;;;;;;;;;-1:-1:-1;33250:385:0;;;;;:::i;:::-;;:::i;30390:370::-;;;;;;;;;;-1:-1:-1;30390:370:0;;;;;:::i;:::-;;:::i;19905:43::-;;;;;;;;;;;;;:::i;19503:31::-;;;;;;;;;;;;;:::i;21597:119::-;;;;;;;;;;-1:-1:-1;21597:119:0;;;;;:::i;:::-;;:::i;2723:103::-;;;;;;;;;;;;;:::i;28285:1045::-;;;;;;;;;;-1:-1:-1;28285:1045:0;;;;;:::i;:::-;;:::i;32368:182::-;;;;;;;;;;-1:-1:-1;32368:182:0;;;;;:::i;:::-;;:::i;19856:42::-;;;;;;;;;;;;;:::i;2075:87::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;29556:95::-;;;;;;;;;;-1:-1:-1;29556:95:0;;;;;:::i;:::-;;:::i;31619:107::-;;;;;;;;;;-1:-1:-1;31619:107:0;;;;;:::i;:::-;;:::i;21303:87::-;;;;;;;;;;;;;:::i;31428:183::-;;;;;;;;;;-1:-1:-1;31428:183:0;;;;;:::i;:::-;;:::i;20140:42::-;;;;;;;;;;;;;:::i;19583:30::-;;;;;;;;;;;;;:::i;21724:167::-;;;;;;;;;;-1:-1:-1;21724:167:0;;;;;:::i;:::-;;:::i;19541:35::-;;;;;;;;;;;;;:::i;19955:45::-;;;;;;;;;;;;;:::i;20191:29::-;;;;;;;;;;;;;:::i;32147:209::-;;;;;;;;;;-1:-1:-1;32147:209:0;;;;;:::i;:::-;;:::i;30768:467::-;;;;;;;;;;-1:-1:-1;30768:467:0;;;;;:::i;:::-;;:::i;20280:30::-;;;;;;;;;;;;;:::i;29667:224::-;;;;;;;;;;-1:-1:-1;29667:224:0;;;;;:::i;:::-;;:::i;21899:143::-;;;;;;;;;;-1:-1:-1;21899:143:0;;;;;:::i;:::-;;:::i;29899:230::-;;;;;;;;;;-1:-1:-1;29899:230:0;;;;;:::i;:::-;;:::i;29342:103::-;;;;;;;;;;-1:-1:-1;29342:103:0;;;;;:::i;:::-;;:::i;31734:208::-;;;;;;;;;;;;;:::i;2981:201::-;;;;;;;;;;-1:-1:-1;2981:201:0;;;;;:::i;:::-;;:::i;26227:116::-;;;;;;;;;;-1:-1:-1;26227:116:0;;;;;:::i;:::-;;:::i;19444:23::-;;;;;;;;;;;;;:::i;31243:177::-;1961:13;:11;:13::i;:::-;31340:3:::1;31324:12;:19;;31316:61;;;;-1:-1:-1::0;;;31316:61:0::1;;;;;;;:::i;:::-;;;;;;;;;31388:9;:24:::0;31243:177::o;32558:218::-;32622:16;;-1:-1:-1;;;;;32622:16:0;32608:10;:30;32600:63;;;;-1:-1:-1;;;32600:63:0;;;;;;;:::i;:::-;32674:23;32700:24;32718:4;32700:9;:24::i;:::-;32674:50;;32735:33;32752:15;32735:16;:33::i;:::-;32558:218;:::o;21212:83::-;21282:5;;;;;;;;;;;;-1:-1:-1;;;21282:5:0;;;;21212:83;:::o;22050:161::-;22125:4;22142:39;22151:12;:10;:12::i;:::-;22165:7;22174:6;22142:8;:39::i;:::-;-1:-1:-1;22199:4:0;22050:161;;;;:::o;20009:35::-;;;;:::o;21489:100::-;21542:7;19833:13;19761:2;19833;:13;:::i;:::-;19812:35;;:17;:35;:::i;:::-;21562:19;;21489:100;:::o;31950:185::-;1961:13;:11;:13::i;:::-;32050:6:::1;32045:82;32066:8;:15;32062:1;:19;32045:82;;;32123:4;32088:19;:32;32108:8;32117:1;32108:11;;;;;;-1:-1:-1::0;;;32108:11:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;32088:32:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;32088:32:0;:39;;-1:-1:-1;;32088:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32083:3;::::1;::::0;::::1;:::i;:::-;;;;32045:82;;;;31950:185:::0;;:::o;22219:313::-;22317:4;22334:36;22344:6;22352:9;22363:6;22334:9;:36::i;:::-;22381:121;22390:6;22398:12;:10;:12::i;:::-;22412:89;22450:6;22412:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22412:19:0;;;;;;:11;:19;;;;;;22432:12;:10;:12::i;:::-;-1:-1:-1;;;;;22412:33:0;;;;;;;;;;;;-1:-1:-1;22412:33:0;;;:89;:37;:89::i;:::-;22381:8;:121::i;:::-;-1:-1:-1;22520:4:0;22219:313;;;;;;:::o;29453:95::-;1961:13;:11;:13::i;:::-;29521:11:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;29521:19:0;;::::1;::::0;;;::::1;::::0;;29453:95::o;21398:83::-;19761:2;21398:83;:::o;33021:221::-;33088:16;;-1:-1:-1;;;;;33088:16:0;33074:10;:30;33066:63;;;;-1:-1:-1;;;33066:63:0;;;;;;;:::i;:::-;33140:12;33184:10;-1:-1:-1;;;;;33176:24:0;33208:21;33176:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;33021:221:0:o;30141:237::-;1961:13;:11;:13::i;:::-;30240:30:::1;30265:4;30240:20;30258:1;30240:13;:11;:13::i;:::-;:17:::0;::::1;:20::i;:::-;:24:::0;::::1;:30::i;:::-;30227:8;:44;;30219:114;;;;-1:-1:-1::0;;;30219:114:0::1;;;;;;;:::i;:::-;30344:15;:26:::0;30141:237::o;32788:225::-;32860:16;;-1:-1:-1;;;;;32860:16:0;32846:10;:30;32838:63;;;;-1:-1:-1;;;32838:63:0;;;;;;;:::i;:::-;32941:21;32973:32;32941:21;32973:12;:32::i;33250:385::-;33331:16;;-1:-1:-1;;;;;33331:16:0;33317:10;:30;33309:63;;;;-1:-1:-1;;;33309:63:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33391:20:0;;33406:4;33391:20;;33383:59;;;;-1:-1:-1;;;33383:59:0;;;;;;;:::i;:::-;33461:36;;-1:-1:-1;;;33461:36:0;;33500:1;;-1:-1:-1;;;;;33461:21:0;;;;;:36;;33491:4;;33461:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;33453:62;;;;-1:-1:-1;;;33453:62:0;;;;;;;:::i;:::-;33540:36;;-1:-1:-1;;;33540:36:0;;33526:11;;-1:-1:-1;;;;;33540:21:0;;;;;:36;;33570:4;;33540:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33587:40;;-1:-1:-1;;;33587:40:0;;33526:50;;-1:-1:-1;;;;;;33587:20:0;;;;;:40;;33608:10;;33526:50;;33587:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30390:370::-;1961:13;:11;:13::i;:::-;30496:32:::1;30521:6;30496:20;30514:1;30496:13;:11;:13::i;:32::-;30481:10;:48;;30473:114;;;;-1:-1:-1::0;;;30473:114:0::1;;;;;;;:::i;:::-;30621:30;30646:4;30621:20;30639:1;30621:13;:11;:13::i;:30::-;30606:10;:46;;30598:111;;;;-1:-1:-1::0;;;30598:111:0::1;;;;;;;:::i;:::-;30720:19;:32:::0;30390:370::o;19905:43::-;;;;:::o;19503:31::-;;;;;;;;;:::o;21597:119::-;-1:-1:-1;;;;;21690:18:0;;21663:7;21690:18;;;:9;:18;;;;;;21597:119;;;;:::o;2723:103::-;1961:13;:11;:13::i;:::-;2788:30:::1;2815:1;2788:18;:30::i;:::-;2723:103::o:0;28285:1045::-;1961:13;:11;:13::i;:::-;28358:11:::1;::::0;::::1;;28357:12;28349:47;;;;-1:-1:-1::0;;;28349:47:0::1;;;;;;;:::i;:::-;28407:16;:81:::0;;-1:-1:-1;;;;;;28407:81:0::1;28445:42;28407:81;::::0;;;;28499:64:::1;::::0;28516:4:::1;::::0;-1:-1:-1;;;;;28531:16:0::1;19833:13;19761:2;19833;:13;:::i;:::-;19812:35;::::0;:17:::1;:35;:::i;28499:64::-;28609:16;;;;;;;;;-1:-1:-1::0;;;;;28609:16:0::1;-1:-1:-1::0;;;;;28609:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28591:56:0::1;;28656:4;28663:16;;;;;;;;;-1:-1:-1::0;;;;;28663:16:0::1;-1:-1:-1::0;;;;;28663:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28591:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28574:14;:113:::0;;-1:-1:-1;;;;;;28574:113:0::1;-1:-1:-1::0;;;;;28574:113:0;;::::1;;::::0;;-1:-1:-1;28698:16:0;::::1;:32;28738:21;28769:4;28775:24;28769:4:::0;28775:9:::1;:24::i;:::-;28800:1;28802::::0;28804:7:::1;:5;:7::i;:::-;28812:15;28698:130;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;28839:11:0::1;:18:::0;;-1:-1:-1;;;;28839:18:0;;::::1;::::0;::::1;28868:22;::::0;::::1;::::0;;-1:-1:-1;28916:31:0::1;28941:5;28916:20;28933:2;19833:13;19761:2;19833;:13;:::i;:::-;19812:35;::::0;:17:::1;:35;:::i;28916:31::-;28901:12;:46:::0;28974:31:::1;28999:5;28974:20;28991:2;19833:13;19761:2;19833;:13;:::i;28974:31::-;28958:13;:47;;;;29034:32;29060:5;29034:21;29051:3;19761:2;19833;:13;;;;:::i;29034:32::-;29016:15;:50:::0;29099:30:::1;29123:5;29099:19;29116:1;19833:13;19761:2;19833;:13;:::i;29099:30::-;29077:19;:52:::0;29140:11:::1;:18:::0;;-1:-1:-1;;29140:18:0::1;29154:4;29140:18:::0;;::::1;::::0;;;29188:12:::1;-1:-1:-1::0;29169:31:0;29211:18:::1;:27:::0;;;29256:14:::1;::::0;29288:16;;29249:73:::1;::::0;-1:-1:-1;;;29249:73:0;;-1:-1:-1;;;;;29256:14:0;;::::1;::::0;29249:30:::1;::::0;:73:::1;::::0;29288:16;::::1;::::0;-1:-1:-1;;;29249:73:0::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28285:1045:::0;:::o;32368:182::-;1961:13;:11;:13::i;:::-;32468:6:::1;32463:79;32484:8;:15;32480:1;:19;32463:79;;;32536:6;32506:14;:27;32521:8;32530:1;32521:11;;;;;;-1:-1:-1::0;;;32521:11:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;32506:27:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;32506:27:0;:36;;-1:-1:-1;;32506:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32501:3;::::1;::::0;::::1;:::i;:::-;;;;32463:79;;19856:42:::0;;;;:::o;2075:87::-;2121:7;2148:6;-1:-1:-1;;;;;2148:6:0;2075:87;:::o;29556:95::-;1961:13;:11;:13::i;:::-;29624:11:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;29624:19:0;;::::1;::::0;;;::::1;::::0;;29556:95::o;31619:107::-;1961:13;:11;:13::i;:::-;31694:15:::1;:24:::0;31619:107::o;21303:87::-;21375:7;;;;;;;;;;;;-1:-1:-1;;;21375:7:0;;;;21303:87;:::o;31428:183::-;1961:13;:11;:13::i;:::-;31528:3:::1;31511:13;:20;;31503:63;;;;-1:-1:-1::0;;;31503:63:0::1;;;;;;;:::i;:::-;31577:10;:26:::0;31428:183::o;20140:42::-;20178:4;20140:42;:::o;19583:30::-;;;;;;;;;:::o;21724:167::-;21802:4;21819:42;21829:12;:10;:12::i;:::-;21843:9;21854:6;21819:9;:42::i;19541:35::-;;;;;;;;;:::o;19955:45::-;;;;:::o;20191:29::-;;;;:::o;32147:209::-;1961:13;:11;:13::i;:::-;32259:6:::1;32254:94;32275:8;:15;32271:1;:19;32254:94;;;32344:4;32297:31;:44;32329:8;32338:1;32329:11;;;;;;-1:-1:-1::0;;;32329:11:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;32297:44:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;32297:44:0;:51;;-1:-1:-1;;32297:51:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32292:3;::::1;::::0;::::1;:::i;:::-;;;;32254:94;;30768:467:::0;1961:13;:11;:13::i;:::-;30884:4:::1;::::0;-1:-1:-1;;;;;30867:21:0;;::::1;30884:4:::0;::::1;30867:21;;30859:70;;;;-1:-1:-1::0;;;30859:70:0::1;;;;;;;:::i;:::-;30960:16;::::0;;-1:-1:-1;;;;;30960:16:0;;::::1;30980:5;30940:37:::0;;;:19:::1;:37;::::0;;;;;;;:45;;-1:-1:-1;;30940:45:0;;::::1;::::0;;;31028:16;;;::::1;30996:49:::0;;:31:::1;:49:::0;;;;;;:57;;;::::1;::::0;;31064:41;;-1:-1:-1;;;;;;31064:41:0::1;::::0;;::::1;::::0;;;::::1;::::0;;;31136:16;::::1;31116:37:::0;;;;;;;;:44;;;::::1;-1:-1:-1::0;31116:44:0;;::::1;::::0;;;31203:16;;;;::::1;31171:49:::0;;;;;;;:56;;;;::::1;;::::0;;30768:467::o;20280:30::-;;;;:::o;29667:224::-;1961:13;:11;:13::i;:::-;29759:31:::1;29784:5;29759:20;29777:1;29759:13;:11;:13::i;:31::-;29748:6;:43;;29740:111;;;;-1:-1:-1::0;;;29740:111:0::1;;;;;;;:::i;:::-;29862:12;:21:::0;29667:224::o;21899:143::-;-1:-1:-1;;;;;22007:18:0;;;21980:7;22007:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21899:143::o;29899:230::-;1961:13;:11;:13::i;:::-;29994:31:::1;30019:5;29994:20;30012:1;29994:13;:11;:13::i;:31::-;29982:7;:44;;29974:113;;;;-1:-1:-1::0;;;29974:113:0::1;;;;;;;:::i;:::-;30098:13;:23:::0;29899:230::o;29342:103::-;1961:13;:11;:13::i;:::-;29414:15:::1;:23:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;29414:23:0;;::::1;::::0;;;::::1;::::0;;29342:103::o;31734:208::-;1961:13;:11;:13::i;:::-;19833::::1;19761:2;19833;:13;:::i;:::-;19812:35;::::0;:17:::1;:35;:::i;:::-;31793:12;:27:::0;19833:13:::1;19761:2;19833;:13;:::i;:::-;19812:35;::::0;:17:::1;:35;:::i;:::-;31831:13;:28:::0;;;19833:13:::1;::::0;19761:2:::1;::::0;19833:13:::1;:::i;:::-;19812:35;::::0;:17:::1;:35;:::i;:::-;31870:15;:30:::0;31911:15:::1;:23:::0;;-1:-1:-1;;31911:23:0::1;::::0;;31734:208::o;2981:201::-;1961:13;:11;:13::i;:::-;-1:-1:-1;;;;;3070:22:0;::::1;3062:73;;;;-1:-1:-1::0;;;3062:73:0::1;;;;;;;:::i;:::-;3146:28;3165:8;3146:18;:28::i;26227:116::-:0;-1:-1:-1;;;;;26313:22:0;26289:4;26313:22;;;:14;:22;;;;;;;;;26227:116::o;19444:23::-;;;;;;:::o;2240:132::-;2315:12;:10;:12::i;:::-;-1:-1:-1;;;;;2304:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2304:23:0;;2296:68;;;;-1:-1:-1;;;2296:68:0;;;;;;;:::i;25631:474::-;25721:16;;;25735:1;25721:16;;;;;;;;25697:21;;25721:16;;;;;;;;;;-1:-1:-1;25721:16:0;25697:40;;25766:4;25748;25753:1;25748:7;;;;;;-1:-1:-1;;;25748:7:0;;;;;;;;;-1:-1:-1;;;;;25748:23:0;;;:7;;;;;;;;;;:23;;;;25792:16;;:23;;;-1:-1:-1;;;25792:23:0;;;;:16;;;;;:21;;:23;;;;;25748:7;;25792:23;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25782:4;25787:1;25782:7;;;;;;-1:-1:-1;;;25782:7:0;;;;;;;;;-1:-1:-1;;;;;25782:33:0;;;:7;;;;;;;;;:33;25858:16;;25826:63;;25843:4;;25858:16;25877:11;25826:8;:63::i;:::-;25900:16;;:197;;-1:-1:-1;;;25900:197:0;;-1:-1:-1;;;;;25900:16:0;;;;:67;;:197;;25982:11;;25900:16;;26024:4;;26051;;26071:15;;25900:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25631:474;;:::o;685:98::-;765:10;685:98;:::o;22540:323::-;22642:4;;-1:-1:-1;;;;;22633:13:0;;;22642:4;;22633:13;;22625:62;;;;-1:-1:-1;;;22625:62:0;;;;;;;:::i;:::-;22717:4;;-1:-1:-1;;;;;22706:15:0;;;22717:4;;22706:15;;22698:62;;;;-1:-1:-1;;;22698:62:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22771:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;22823:32;;;;;22801:6;;22823:32;:::i;:::-;;;;;;;;22540:323;;;:::o;22871:2255::-;22967:4;;-1:-1:-1;;;;;22959:12:0;;;22967:4;;22959:12;;22951:62;;;;-1:-1:-1;;;22951:62:0;;;;;;;:::i;:::-;23038:4;;-1:-1:-1;;;;;23032:10:0;;;23038:4;;23032:10;;23024:58;;;;-1:-1:-1;;;23024:58:0;;;;;;;:::i;:::-;23110:1;23101:6;:10;23093:64;;;;-1:-1:-1;;;23093:64:0;;;;;;;:::i;:::-;23183:4;23168:12;23244:7;:5;:7::i;:::-;-1:-1:-1;;;;;23236:15:0;:4;-1:-1:-1;;;;;23236:15:0;;;:32;;;;;23261:7;:5;:7::i;:::-;-1:-1:-1;;;;;23255:13:0;:2;-1:-1:-1;;;;;23255:13:0;;;23236:32;:46;;;;-1:-1:-1;23278:4:0;;-1:-1:-1;;;;;23272:10:0;;;23278:4;;23272:10;;23236:46;:60;;;;-1:-1:-1;23292:4:0;;-1:-1:-1;;;;;23286:10:0;;;23292:4;;23286:10;;23236:60;:74;;;;-1:-1:-1;23301:9:0;;;;;;;23300:10;23236:74;23232:1356;;;-1:-1:-1;;;;;23336:20:0;;;;;;:14;:20;;;;;;;;23335:21;:44;;;;-1:-1:-1;;;;;;23361:18:0;;;;;;:14;:18;;;;;;;;23360:19;23335:44;23327:53;;;;;;23401:11;;;;23397:109;;-1:-1:-1;;;;;23422:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;23451:23:0;;;;;;:19;:23;;;;;;;;23422:52;23414:92;;;;-1:-1:-1;;;23414:92:0;;;;;;;:::i;:::-;23527:15;;;;;;;23523:433;;;23581:16;;-1:-1:-1;;;;;23567:31:0;;;23581:16;;23567:31;;;;:64;;-1:-1:-1;23616:14:0;;-1:-1:-1;;;;;23602:29:0;;;23616:14;;23602:29;;23567:64;23563:378;;;23702:15;;23687:30;;:12;:30;:::i;:::-;23674:9;23664:20;;;;:9;:20;;;;;;:53;:103;;;;-1:-1:-1;23752:15:0;;23737:30;;:12;:30;:::i;:::-;-1:-1:-1;;;;;23721:13:0;;;;;;:9;:13;;;;;;:46;23664:103;23656:156;;;;-1:-1:-1;;;23656:156:0;;;;;;;:::i;:::-;23845:9;23835:20;;;;:9;:20;;;;;;23858:12;23835:35;;;;-1:-1:-1;;;;;23893:13:0;;;;;;:28;23563:378;23984:14;;-1:-1:-1;;;;;23976:22:0;;;23984:14;;23976:22;:57;;;;-1:-1:-1;24016:16:0;;-1:-1:-1;;;;;24002:31:0;;;24016:16;;24002:31;;23976:57;:97;;;;-1:-1:-1;;;;;;24038:35:0;;;;;;:31;:35;;;;;;;;24037:36;23976:97;23972:323;;;24112:12;;24102:6;:22;;24094:76;;;;-1:-1:-1;;;24094:76:0;;;;;;;:::i;:::-;24223:15;;24213:6;24197:13;24207:2;24197:9;:13::i;:::-;:22;;;;:::i;:::-;:41;;24189:90;;;;-1:-1:-1;;;24189:90:0;;;;;;;:::i;:::-;24333:14;;-1:-1:-1;;;;;24327:20:0;;;24333:14;;24327:20;:57;;;;-1:-1:-1;24367:16:0;;-1:-1:-1;;;;;24351:33:0;;;24367:16;;24351:33;;24327:57;:99;;;;-1:-1:-1;;;;;;24389:37:0;;;;;;:31;:37;;;;;;;;24388:38;24327:99;24323:254;;;24465:13;;24455:6;:23;;24447:78;;;;-1:-1:-1;;;24447:78:0;;;;;;;:::i;:::-;-1:-1:-1;24557:4:0;24323:254;-1:-1:-1;;;;;24603:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;24632:23:0;;;;;;:19;:23;;;;;;;;24603:52;:68;;;-1:-1:-1;24660:11:0;;;;;;;24659:12;24603:68;24600:88;;;24683:5;24673:15;;24600:88;24701:28;24732:24;24750:4;24732:9;:24::i;:::-;24701:55;;24767:12;24806:19;;24783:20;:42;24782:58;;;;;24830:10;24782:58;24767:73;;24857:7;:22;;;;-1:-1:-1;24868:11:0;;;;;;;24857:22;:36;;;;-1:-1:-1;24884:9:0;;;;;;;24883:10;24857:36;:66;;;;-1:-1:-1;;;;;;24898:25:0;;;;;;:19;:25;;;;;;;;24897:26;24857:66;:94;;;;-1:-1:-1;;;;;;24928:23:0;;;;;;:19;:23;;;;;;;;24927:24;24857:94;24853:200;;;24968:9;:16;;-1:-1:-1;;24968:16:0;;;;;24999:10;:8;:10::i;:::-;25024:9;:17;;-1:-1:-1;;25024:17:0;;;24853:200;25065:53;25080:4;25086:2;25090:6;25098:7;25107:10;25065:14;:53::i;:::-;22871:2255;;;;;;;:::o;11451:240::-;11571:7;11632:12;11624:6;;;;11616:29;;;;-1:-1:-1;;;11616:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;11667:5:0;;;11451:240::o;9910:98::-;9968:7;9995:5;9999:1;9995;:5;:::i;10309:98::-;10367:7;10394:5;10398:1;10394;:5;:::i;26121:98::-;26178:16;;:33;;-1:-1:-1;;;;;26178:16:0;;;;:33;;;;;26204:6;;26178:16;:33;:16;:33;26204:6;26178:16;:33;;;;;;;;;;;;;;;;;;;3342:191;3416:16;3435:6;;-1:-1:-1;;;;;3452:17:0;;;-1:-1:-1;;;;;;3452:17:0;;;;;;3485:40;;3435:6;;;;;;;3485:40;;3416:16;3485:40;3342:191;;:::o;25134:489::-;25173:23;25199:24;25217:4;25199:9;:24::i;:::-;25173:50;-1:-1:-1;25234:12:0;25271:20;;;:47;;-1:-1:-1;25295:18:0;;:23;25271:47;25267:60;;;25320:7;;;;25267:60;25361:19;;:23;;25383:1;25361:23;:::i;:::-;25343:15;:41;25339:88;;;25404:19;;:23;;25426:1;25404:23;:::i;:::-;25386:41;;25339:88;25440:33;25457:15;25440:16;:33::i;:::-;25516:1;25495:18;:22;25559:16;;25551:64;;-1:-1:-1;;;;;25559:16:0;;;;25589:21;;25551:64;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25134:489:0:o;26745:322::-;26871:7;26866:86;;26880:14;:12;:14::i;:::-;26866:86;;;26919:33;26929:6;26937;26945;26919:9;:33::i;:::-;26910:42;;26866:86;26965:44;26983:6;26991:9;27002:6;26965:17;:44::i;:::-;27035:7;27030:29;;27044:15;:13;:15::i;26351:241::-;26398:9;;:14;:33;;;;-1:-1:-1;26416:10:0;;:15;26398:33;26394:46;;;26433:7;;26394:46;26473:9;;;26452:18;:30;26515:10;;;26493:19;:32;-1:-1:-1;26546:13:0;;;;26570:14;26351:241::o;27358:607::-;27439:7;27459:18;27533:12;27511:18;;27492:16;;:37;;;;:::i;:::-;:53;27488:135;;27560:13;:11;:13::i;:::-;27547:26;;27488:135;;;27602:21;27616:6;27602:13;:21::i;:::-;27589:34;;27488:135;27644:12;27671:14;;27667:160;;27709:39;20178:4;27709:22;:6;27720:10;27709;:22::i;:39::-;27702:46;-1:-1:-1;27805:10:0;27785:17;27805:10;27702:46;27785:17;:::i;:::-;:30;;;;:::i;:::-;27763:18;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;27667:160:0;27855:8;;27851:60;;27865:46;27883:6;27899:4;27906;27865:17;:46::i;:::-;27943:14;27953:4;27943:14;;:::i;:::-;;27358:607;-1:-1:-1;;;;;;27358:607:0:o;27075:275::-;-1:-1:-1;;;;;27193:17:0;;;;;;:9;:17;;;;;;:30;;27215:7;27193:21;:30::i;:::-;-1:-1:-1;;;;;27173:17:0;;;;;;;:9;:17;;;;;;:50;;;;27257:20;;;;;;;:33;;27282:7;27257:24;:33::i;:::-;-1:-1:-1;;;;;27234:20:0;;;;;;;:9;:20;;;;;;;:56;;;;27306:36;;;;;;;;;;27334:7;;27306:36;:::i;26604:125::-;26660:18;;26648:9;:30;26702:19;;26689:10;:32;26604:125::o;28122:82::-;28193:3;28122:82;:::o;27973:141::-;28030:7;28054:6;28050:29;;;-1:-1:-1;28069:10:0;;28062:17;;28050:29;-1:-1:-1;;28097:9:0;;;27973:141::o;9553:98::-;9611:7;9638:5;9642:1;9638;:5;:::i;9172:98::-;9230:7;9257:5;9261:1;9257;:5;:::i;14:138:1:-;84:20;;113:33;84:20;113:33;:::i;157:132::-;224:20;;253:30;224:20;253:30;:::i;294:259::-;;406:2;394:9;385:7;381:23;377:32;374:2;;;427:6;419;412:22;374:2;471:9;458:23;490:33;517:5;490:33;:::i;558:263::-;;681:2;669:9;660:7;656:23;652:32;649:2;;;702:6;694;687:22;649:2;739:9;733:16;758:33;785:5;758:33;:::i;826:402::-;;;955:2;943:9;934:7;930:23;926:32;923:2;;;976:6;968;961:22;923:2;1020:9;1007:23;1039:33;1066:5;1039:33;:::i;:::-;1091:5;-1:-1:-1;1148:2:1;1133:18;;1120:32;1161:35;1120:32;1161:35;:::i;:::-;1215:7;1205:17;;;913:315;;;;;:::o;1233:470::-;;;;1379:2;1367:9;1358:7;1354:23;1350:32;1347:2;;;1400:6;1392;1385:22;1347:2;1444:9;1431:23;1463:33;1490:5;1463:33;:::i;:::-;1515:5;-1:-1:-1;1572:2:1;1557:18;;1544:32;1585:35;1544:32;1585:35;:::i;:::-;1337:366;;1639:7;;-1:-1:-1;;;1693:2:1;1678:18;;;;1665:32;;1337:366::o;1708:327::-;;;1837:2;1825:9;1816:7;1812:23;1808:32;1805:2;;;1858:6;1850;1843:22;1805:2;1902:9;1889:23;1921:33;1948:5;1921:33;:::i;:::-;1973:5;2025:2;2010:18;;;;1997:32;;-1:-1:-1;;;1795:240:1:o;2040:1238::-;;;2191:2;2179:9;2170:7;2166:23;2162:32;2159:2;;;2212:6;2204;2197:22;2159:2;2257:9;2244:23;2286:18;2327:2;2319:6;2316:14;2313:2;;;2348:6;2340;2333:22;2313:2;2391:6;2380:9;2376:22;2366:32;;2436:7;2429:4;2425:2;2421:13;2417:27;2407:2;;2463:6;2455;2448:22;2407:2;2504;2491:16;2526:4;2549:2;2545;2542:10;2539:2;;;2555:18;;:::i;:::-;2602:2;2598;2594:11;2634:2;2628:9;2685:2;2680;2672:6;2668:15;2664:24;2738:6;2726:10;2723:22;2718:2;2706:10;2703:18;2700:46;2697:2;;;2749:18;;:::i;:::-;2785:2;2778:22;2835:18;;;2869:15;;;;-1:-1:-1;2904:11:1;;;2934;;;2930:20;;2927:33;-1:-1:-1;2924:2:1;;;2978:6;2970;2963:22;2924:2;3005:6;2996:15;;3020:171;3034:2;3031:1;3028:9;3020:171;;;3091:25;3112:3;3091:25;:::i;:::-;3079:38;;3052:1;3045:9;;;;;3137:12;;;;3169;;3020:171;;;-1:-1:-1;3210:6:1;-1:-1:-1;3235:37:1;;-1:-1:-1;3253:18:1;;;3235:37;:::i;:::-;3225:47;;;;;;2149:1129;;;;;:::o;3283:253::-;;3392:2;3380:9;3371:7;3367:23;3363:32;3360:2;;;3413:6;3405;3398:22;3360:2;3457:9;3444:23;3476:30;3500:5;3476:30;:::i;3541:257::-;;3661:2;3649:9;3640:7;3636:23;3632:32;3629:2;;;3682:6;3674;3667:22;3629:2;3719:9;3713:16;3738:30;3762:5;3738:30;:::i;3803:190::-;;3915:2;3903:9;3894:7;3890:23;3886:32;3883:2;;;3936:6;3928;3921:22;3883:2;-1:-1:-1;3964:23:1;;3873:120;-1:-1:-1;3873:120:1:o;3998:194::-;;4121:2;4109:9;4100:7;4096:23;4092:32;4089:2;;;4142:6;4134;4127:22;4089:2;-1:-1:-1;4170:16:1;;4079:113;-1:-1:-1;4079:113:1:o;4197:316::-;;;;4354:2;4342:9;4333:7;4329:23;4325:32;4322:2;;;4375:6;4367;4360:22;4322:2;4409:9;4403:16;4393:26;;4459:2;4448:9;4444:18;4438:25;4428:35;;4503:2;4492:9;4488:18;4482:25;4472:35;;4312:201;;;;;:::o;4518:205::-;4718:3;4709:14::o;4728:203::-;-1:-1:-1;;;;;4892:32:1;;;;4874:51;;4862:2;4847:18;;4829:102::o;4936:304::-;-1:-1:-1;;;;;5166:15:1;;;5148:34;;5218:15;;5213:2;5198:18;;5191:43;5098:2;5083:18;;5065:175::o;5245:274::-;-1:-1:-1;;;;;5437:32:1;;;;5419:51;;5501:2;5486:18;;5479:34;5407:2;5392:18;;5374:145::o;5524:607::-;-1:-1:-1;;;;;5883:15:1;;;5865:34;;5930:2;5915:18;;5908:34;;;;5973:2;5958:18;;5951:34;;;;6016:2;6001:18;;5994:34;;;;6065:15;;;6059:3;6044:19;;6037:44;5845:3;6097:19;;6090:35;;;;5814:3;5799:19;;5781:350::o;6136:187::-;6301:14;;6294:22;6276:41;;6264:2;6249:18;;6231:92::o;6328:603::-;;6469:2;6498;6487:9;6480:21;6530:6;6524:13;6573:6;6568:2;6557:9;6553:18;6546:34;6598:4;6611:140;6625:6;6622:1;6619:13;6611:140;;;6720:14;;;6716:23;;6710:30;6686:17;;;6705:2;6682:26;6675:66;6640:10;;6611:140;;;6769:6;6766:1;6763:13;6760:2;;;6839:4;6834:2;6825:6;6814:9;6810:22;6806:31;6799:45;6760:2;-1:-1:-1;6915:2:1;6894:15;-1:-1:-1;;6890:29:1;6875:45;;;;6922:2;6871:54;;6449:482;-1:-1:-1;;;6449:482:1:o;6936:332::-;7138:2;7120:21;;;7177:1;7157:18;;;7150:29;-1:-1:-1;;;7210:2:1;7195:18;;7188:39;7259:2;7244:18;;7110:158::o;7273:399::-;7475:2;7457:21;;;7514:2;7494:18;;;7487:30;7553:34;7548:2;7533:18;;7526:62;-1:-1:-1;;;7619:2:1;7604:18;;7597:33;7662:3;7647:19;;7447:225::o;7677:402::-;7879:2;7861:21;;;7918:2;7898:18;;;7891:30;7957:34;7952:2;7937:18;;7930:62;-1:-1:-1;;;8023:2:1;8008:18;;8001:36;8069:3;8054:19;;7851:228::o;8084:398::-;8286:2;8268:21;;;8325:2;8305:18;;;8298:30;8364:34;8359:2;8344:18;;8337:62;-1:-1:-1;;;8430:2:1;8415:18;;8408:32;8472:3;8457:19;;8258:224::o;8487:420::-;8689:2;8671:21;;;8728:2;8708:18;;;8701:30;8767:34;8762:2;8747:18;;8740:62;8838:26;8833:2;8818:18;;8811:54;8897:3;8882:19;;8661:246::o;8912:347::-;9114:2;9096:21;;;9153:2;9133:18;;;9126:30;9192:25;9187:2;9172:18;;9165:53;9250:2;9235:18;;9086:173::o;9264:404::-;9466:2;9448:21;;;9505:2;9485:18;;;9478:30;9544:34;9539:2;9524:18;;9517:62;-1:-1:-1;;;9610:2:1;9595:18;;9588:38;9658:3;9643:19;;9438:230::o;9673:351::-;9875:2;9857:21;;;9914:2;9894:18;;;9887:30;9953:29;9948:2;9933:18;;9926:57;10015:2;10000:18;;9847:177::o;10029:421::-;10231:2;10213:21;;;10270:2;10250:18;;;10243:30;10309:34;10304:2;10289:18;;10282:62;10380:27;10375:2;10360:18;;10353:55;10440:3;10425:19;;10203:247::o;10455:353::-;10657:2;10639:21;;;10696:2;10676:18;;;10669:30;10735:31;10730:2;10715:18;;10708:59;10799:2;10784:18;;10629:179::o;10813:354::-;11015:2;10997:21;;;11054:2;11034:18;;;11027:30;11093:32;11088:2;11073:18;;11066:60;11158:2;11143:18;;10987:180::o;11172:417::-;11374:2;11356:21;;;11413:2;11393:18;;;11386:30;11452:34;11447:2;11432:18;;11425:62;-1:-1:-1;;;11518:2:1;11503:18;;11496:51;11579:3;11564:19;;11346:243::o;11594:416::-;11796:2;11778:21;;;11835:2;11815:18;;;11808:30;11874:34;11869:2;11854:18;;11847:62;-1:-1:-1;;;11940:2:1;11925:18;;11918:50;12000:3;11985:19;;11768:242::o;12015:400::-;12217:2;12199:21;;;12256:2;12236:18;;;12229:30;12295:34;12290:2;12275:18;;12268:62;-1:-1:-1;;;12361:2:1;12346:18;;12339:34;12405:3;12390:19;;12189:226::o;12420:400::-;12622:2;12604:21;;;12661:2;12641:18;;;12634:30;12700:34;12695:2;12680:18;;12673:62;-1:-1:-1;;;12766:2:1;12751:18;;12744:34;12810:3;12795:19;;12594:226::o;12825:405::-;13027:2;13009:21;;;13066:2;13046:18;;;13039:30;13105:34;13100:2;13085:18;;13078:62;-1:-1:-1;;;13171:2:1;13156:18;;13149:39;13220:3;13205:19;;12999:231::o;13235:356::-;13437:2;13419:21;;;13456:18;;;13449:30;13515:34;13510:2;13495:18;;13488:62;13582:2;13567:18;;13409:182::o;13596:350::-;13798:2;13780:21;;;13837:2;13817:18;;;13810:30;13876:28;13871:2;13856:18;;13849:56;13937:2;13922:18;;13770:176::o;13951:405::-;14153:2;14135:21;;;14192:2;14172:18;;;14165:30;14231:34;14226:2;14211:18;;14204:62;-1:-1:-1;;;14297:2:1;14282:18;;14275:39;14346:3;14331:19;;14125:231::o;14361:401::-;14563:2;14545:21;;;14602:2;14582:18;;;14575:30;14641:34;14636:2;14621:18;;14614:62;-1:-1:-1;;;14707:2:1;14692:18;;14685:35;14752:3;14737:19;;14535:227::o;14767:419::-;14969:2;14951:21;;;15008:2;14988:18;;;14981:30;15047:34;15042:2;15027:18;;15020:62;15118:25;15113:2;15098:18;;15091:53;15176:3;15161:19;;14941:245::o;15191:400::-;15393:2;15375:21;;;15432:2;15412:18;;;15405:30;15471:34;15466:2;15451:18;;15444:62;-1:-1:-1;;;15537:2:1;15522:18;;15515:34;15581:3;15566:19;;15365:226::o;15596:406::-;15798:2;15780:21;;;15837:2;15817:18;;;15810:30;15876:34;15871:2;15856:18;;15849:62;-1:-1:-1;;;15942:2:1;15927:18;;15920:40;15992:3;15977:19;;15770:232::o;16007:344::-;16209:2;16191:21;;;16248:2;16228:18;;;16221:30;-1:-1:-1;;;16282:2:1;16267:18;;16260:50;16342:2;16327:18;;16181:170::o;16356:177::-;16502:25;;;16490:2;16475:18;;16457:76::o;16538:983::-;;16848:3;16837:9;16833:19;16879:6;16868:9;16861:25;16905:2;16943:6;16938:2;16927:9;16923:18;16916:34;16986:3;16981:2;16970:9;16966:18;16959:31;17010:6;17045;17039:13;17076:6;17068;17061:22;17114:3;17103:9;17099:19;17092:26;;17153:2;17145:6;17141:15;17127:29;;17174:4;17187:195;17201:6;17198:1;17195:13;17187:195;;;17266:13;;-1:-1:-1;;;;;17262:39:1;17250:52;;17357:15;;;;17322:12;;;;17298:1;17216:9;17187:195;;;-1:-1:-1;;;;;;;17438:32:1;;;;17433:2;17418:18;;17411:60;-1:-1:-1;;;17502:3:1;17487:19;17480:35;17399:3;16809:712;-1:-1:-1;;;16809:712:1:o;17526:184::-;17698:4;17686:17;;;;17668:36;;17656:2;17641:18;;17623:87::o;17715:128::-;;17786:1;17782:6;17779:1;17776:13;17773:2;;;17792:18;;:::i;:::-;-1:-1:-1;17828:9:1;;17763:80::o;17848:217::-;;17914:1;17904:2;;-1:-1:-1;;;17939:31:1;;17993:4;17990:1;17983:15;18021:4;17946:1;18011:15;17904:2;-1:-1:-1;18050:9:1;;17894:171::o;18070:453::-;18166:6;18189:5;18203:314;18252:1;18289:2;18279:8;18276:16;18266:2;;18296:5;;;18266:2;18337:4;18332:3;18328:14;18322:4;18319:24;18316:2;;;18346:18;;:::i;:::-;18396:2;18386:8;18382:17;18379:2;;;18411:16;;;;18379:2;18490:17;;;;;18450:15;;18203:314;;;18147:376;;;;;;;:::o;18528:148::-;;18615:55;-1:-1:-1;;18656:4:1;18642:19;;18636:4;18681:922;18765:8;18755:2;;-1:-1:-1;18806:1:1;18820:5;;18755:2;18854:4;18844:2;;-1:-1:-1;18891:1:1;18905:5;;18844:2;18936:4;18954:1;18949:59;;;;19022:1;19017:183;;;;18929:271;;18949:59;18979:1;18970:10;;18993:5;;;19017:183;19054:3;19044:8;19041:17;19038:2;;;19061:18;;:::i;:::-;19117:1;19107:8;19103:16;19094:25;;19145:3;19138:5;19135:14;19132:2;;;19152:18;;:::i;:::-;19185:5;;;18929:271;;19284:2;19274:8;19271:16;19265:3;19259:4;19256:13;19252:36;19246:2;19236:8;19233:16;19228:2;19222:4;19219:12;19215:35;19212:77;19209:2;;;-1:-1:-1;19321:19:1;;;19356:14;;;19353:2;;;19373:18;;:::i;:::-;19406:5;;19209:2;19453:42;19491:3;19481:8;19475:4;19472:1;19453:42;:::i;:::-;19528:6;19523:3;19519:16;19510:7;19507:29;19504:2;;;19539:18;;:::i;:::-;19577:20;;18745:858;-1:-1:-1;;;;18745:858:1:o;19608:168::-;;19714:1;19710;19706:6;19702:14;19699:1;19696:21;19691:1;19684:9;19677:17;19673:45;19670:2;;;19721:18;;:::i;:::-;-1:-1:-1;19761:9:1;;19660:116::o;19781:125::-;;19849:1;19846;19843:8;19840:2;;;19854:18;;:::i;:::-;-1:-1:-1;19891:9:1;;19830:76::o;19911:135::-;;-1:-1:-1;;19971:17:1;;19968:2;;;19991:18;;:::i;:::-;-1:-1:-1;20038:1:1;20027:13;;19958:88::o;20051:127::-;20112:10;20107:3;20103:20;20100:1;20093:31;20143:4;20140:1;20133:15;20167:4;20164:1;20157:15;20183:127;20244:10;20239:3;20235:20;20232:1;20225:31;20275:4;20272:1;20265:15;20299:4;20296:1;20289:15;20315:133;-1:-1:-1;;;;;20392:31:1;;20382:42;;20372:2;;20438:1;20435;20428:12;20453:120;20541:5;20534:13;20527:21;20520:5;20517:32;20507:2;;20563:1;20560;20553:12

Swarm Source

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