ETH Price: $3,482.64 (+1.86%)
Gas: 15 Gwei

Token

Hellraiser Shiba (HELSHI)
 

Overview

Max Total Supply

1,000,000,000 HELSHI

Holders

357

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
nonames.eth
Balance
467,289 HELSHI

Value
$0.00
0x56af52a9611afda072a73afd0e1ff4c4e35ee94a
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:
helshiContract

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 * Website: https://www.helshi.xyz/
 * TG:      https://t.me/helshi_shiba
 * Twitter: https://twitter.com/Helshi_Token
*/

// SPDX-License-Identifier: MIT

/**
 
*/


pragma solidity ^0.8.17;

/**
 * Abstract contract to easily change things when deploying new projects. Saves me having to find it everywhere.
 */
abstract contract Project {
    address public hellWallet = 0xeDF0e8523ac6210E4623a1155F45e7566f7F2F86;

    string constant _name = "Hellraiser Shiba";
    string constant _symbol = "HELSHI";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1 * 10**9 * 10**_decimals;

    uint256 public _maxTxAmount = (_totalSupply * 1000) / 1000; // (_totalSupply * 10) / 1000 [this equals 1%]
    uint256 public _maxWalletToken = (_totalSupply * 1000) / 1000; //

    uint256 public buyFee                = 4;
    uint256 public buyTotalFee           = buyFee;

    uint256 public hellFee               = 4;
    uint256 public swapTotalFee          = hellFee;

    uint256 public transFee           = 4;

    uint256 public feeDenominator     = 100;

}

/**
 * @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, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

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

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

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

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

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

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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


/**
 * @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.
 */
contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

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

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

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

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

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

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    //Unlocks the contract for owner when _lockTime is exceeded
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}


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

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

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

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

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



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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}


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




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


/**
 * MainContract
 */
contract helshiContract is Project, IERC20, Ownable {
    using SafeMath for uint256;

    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

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

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isMaxExempt;
    mapping (address => bool) isTimelockExempt;

    address public autoLiquidityReceiver;

    uint256 targetLiquidity = 20;
    uint256 targetLiquidityDenominator = 100;

    IUniswapV2Router02 public immutable contractRouter;
    address public immutable uniswapV2Pair;

    bool public tradingOpen = false;

    bool public buyCooldownEnabled = true;
    uint8 public cooldownTimerInterval = 10;
    mapping (address => uint) private cooldownTimer;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply * 30 / 10000;
    uint256 public swapAmount = _totalSupply * 30 / 10000;

    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //Mainnet & Testnet ETH
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        contractRouter = _uniswapV2Router;

        _allowances[address(this)][address(contractRouter)] = type(uint256).max;

        isFeeExempt[msg.sender] = true;
        isTxLimitExempt[msg.sender] = true;
        isMaxExempt[msg.sender] = true;

        isTimelockExempt[msg.sender] = true;
        isTimelockExempt[DEAD] = true;
        isTimelockExempt[address(this)] = true;

        isFeeExempt[hellWallet] = true;
        isMaxExempt[hellWallet] = true;
        isTxLimitExempt[hellWallet] = true;

        autoLiquidityReceiver = msg.sender;

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner(); }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function setMaxWalletPercent_base1000(uint256 maxWallPercent_base1000) external onlyOwner() {
        _maxWalletToken = (_totalSupply * maxWallPercent_base1000 ) / 1000;
    }
    function setMaxTxPercent_base1000(uint256 maxTXPercentage_base1000) external onlyOwner() {
        _maxTxAmount = (_totalSupply * maxTXPercentage_base1000 ) / 1000;
    }

    function setTxLimit(uint256 amount) external onlyOwner() {
        _maxTxAmount = amount;
    }

// *** 
// Functions for the burning mechanism 
// *** 

    /**
    * Burn an amount of tokens for the current wallet (if they have enough)
    */
    function burnTokens(uint256 amount) external {
        // does this user have enough tokens to perform the burn
        if(_balances[msg.sender] >= amount) {
            _basicTransfer(msg.sender, DEAD, amount);
        }
    }


// *** 
// End functions for the burning mechanism 
// *** 

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        if(sender != owner() && recipient != owner()){
            require(tradingOpen,"Trading not open yet");
        }

        bool inSell = (recipient == uniswapV2Pair);
        bool inTransfer = (recipient != uniswapV2Pair && sender != uniswapV2Pair);

        if (recipient != address(this) && 
            recipient != address(DEAD) && 
            recipient != uniswapV2Pair && 
            recipient != hellWallet && 
            recipient != autoLiquidityReceiver
        ){
            uint256 heldTokens = balanceOf(recipient);
            if(!isMaxExempt[recipient]) {
                require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");
            }
        }

        if (sender == uniswapV2Pair &&
            buyCooldownEnabled &&
            !isTimelockExempt[recipient]
        ){
            require(cooldownTimer[recipient] < block.timestamp,"Please wait for 1min between two buys");
            cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval;
        }

        // Checks max transaction limit
        // but no point if the recipient is exempt
        // this check ensures that someone that is buying and is txnExempt then they are able to buy any amount
        if(!isTxLimitExempt[recipient]) {
            checkTxLimit(sender, amount);
        }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = amount;

        // Do NOT take a fee if sender AND recipient are NOT the contract
        // i.e. you are doing a transfer
        if(inTransfer) {
            if(transFee > 0) {
                amountReceived = takeTransferFee(sender, amount);
            }
        } else {
            amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount, inSell) : amount;
            
            if(shouldSwapBack()){ swapBack(); }
        }

        _balances[recipient] = _balances[recipient].add(amountReceived);

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

// *** 
// Handle Fees
// *** 

    function takeTransferFee(address sender, uint256 amount) internal returns (uint256) {

        uint256 feeToTake = transFee;
        uint256 feeAmount = amount.mul(feeToTake).mul(100).div(feeDenominator * 100);
        
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function takeFee(address sender, uint256 amount, bool isSell) internal returns (uint256) {

        uint256 feeToTake = isSell ? swapTotalFee : buyTotalFee;
        uint256 feeAmount = amount.mul(feeToTake).mul(100).div(feeDenominator * 100);
        
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

// *** 
// End Handle Fees
// *** 

    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != uniswapV2Pair
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    function clearStuckBalance(uint256 amountPercentage) external onlyOwner() {
        uint256 amountETH = address(this).balance;
        payable(hellWallet).transfer(amountETH * amountPercentage / 100);
    }

    function clearStuckBalance_sender(uint256 amountPercentage) external onlyOwner() {
        uint256 amountETH = address(this).balance;
        payable(msg.sender).transfer(amountETH * amountPercentage / 100);
    }

    // switch Trading
    function tradingStatus(bool _status) public onlyOwner {
        tradingOpen = _status;
    }

    // enable cooldown between trades
    function cooldownEnabled(bool _status, uint8 _interval) public onlyOwner {
        buyCooldownEnabled = _status;
        cooldownTimerInterval = _interval;
    }

    function swapBack() internal swapping {

        uint256 amountToSwap = swapAmount;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = contractRouter.WETH();

        uint256 balanceBefore = address(this).balance;

        contractRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance.sub(balanceBefore);

        (bool tmpSuccess,) = payable(hellWallet).call{value: amountETH, gas: 30000}("");

        // Supress warning msg
        tmpSuccess = false;

    }

// *** 
// Various exempt functions
// *** 

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner() {
        isFeeExempt[holder] = exempt;
    }

    function setIsMaxExempt(address holder, bool exempt) external onlyOwner() {
        isMaxExempt[holder] = exempt;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner() {
        isTxLimitExempt[holder] = exempt;
    }

    function setIsTimelockExempt(address holder, bool exempt) external onlyOwner() {
        isTimelockExempt[holder] = exempt;
    }

// *** 
// End various exempt functions
// *** 


// ***
// Start fee things
// ***

    function setTransFee(uint256 fee) external onlyOwner() {
        transFee = fee;
    }

    function setHellFee(uint256 _newHellFee, uint256 _feeDenominator) external onlyOwner() {
        hellFee = _newHellFee;
        swapTotalFee = _newHellFee;
        feeDenominator = _feeDenominator;
        require(swapTotalFee < 90, "Fees cannot be that high");
    }

    function setBuyFee(uint256 buyTax) external onlyOwner() {
        buyTotalFee = buyTax;
    }

// ***
// end fee stuff§2e sw. 
// ***

    function setHellWallet(address _newWallet) external onlyOwner() {
        isFeeExempt[hellWallet] = false;
        isFeeExempt[_newWallet] = true;

        isMaxExempt[_newWallet] = true;

        hellWallet = _newWallet;
    }

    function setFeeReceiver(address _autoLiquidityReceiver, address _newHellWallet) external onlyOwner() {

        isFeeExempt[hellWallet] = false;
        isFeeExempt[_newHellWallet] = true;

        isMaxExempt[_newHellWallet] = true;

        autoLiquidityReceiver = _autoLiquidityReceiver;
        hellWallet = _newHellWallet;
    }

// ***
// Swap settings
// ***

    function setSwapThresholdAmount(uint256 _amount) external onlyOwner() {
        swapThreshold = _amount;
    }

    function setSwapAmount(uint256 _amount) external onlyOwner() {
        if(_amount > swapThreshold) {
            swapAmount = swapThreshold;
        } else {
            swapAmount = _amount;
        }        
    }

// ***
// End Swap settings
// ***

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner() {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(uniswapV2Pair).mul(2)).div(getCirculatingSupply());
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }

    /* Airdrop */
    function airDropCustom(address from, address[] calldata addresses, uint256[] calldata tokens) external onlyOwner {

        require(addresses.length < 501,"GAS Error: max airdrop limit is 500 addresses");
        require(addresses.length == tokens.length,"Mismatch between Address and token count");

        uint256 SCCC = 0;

        for(uint i=0; i < addresses.length; i++){
            SCCC = SCCC + tokens[i];
        }

        require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");

        for(uint i=0; i < addresses.length; i++){
            _basicTransfer(from,addresses[i],tokens[i]);
        }
        
    }

    function airDropFixed(address from, address[] calldata addresses, uint256 tokens) external onlyOwner {

        require(addresses.length < 801,"GAS Error: max airdrop limit is 800 addresses");

        uint256 SCCC = tokens * addresses.length;

        require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");

        for(uint i=0; i < addresses.length; i++){
            _basicTransfer(from,addresses[i],tokens);
        }
    }

    event AutoLiquify(uint256 amountETH, uint256 amountBOG);

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"airDropCustom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"airDropFixed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance_sender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint8","name":"_interval","type":"uint8"}],"name":"cooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hellWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_newHellWallet","type":"address"}],"name":"setFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newHellFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setHellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"setHellWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsMaxExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTXPercentage_base1000","type":"uint256"}],"name":"setMaxTxPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWalletPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setTransFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600080546001600160a01b03191673edf0e8523ac6210e4623a1155f45e7566f7f2f86179055620000386009600a62000544565b6200004890633b9aca006200055c565b6001556103e86001546103e86200006091906200055c565b6200006c919062000576565b6002556103e86001546103e86200008491906200055c565b62000090919062000576565b600355600480805560058190556006819055600781905560085560646009819055600d805461dead6001600160a01b031991821617909155600e8054909116905560146016556017556018805462ffffff1916620a0100179055601a805460ff1916600190811790915554612710906200010c90601e6200055c565b62000118919062000576565b601b55612710600154601e6200012f91906200055c565b6200013b919062000576565b601c553480156200014b57600080fd5b50600a80546001600160a01b0319163390811790915560405181906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020d919062000599565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000281919062000599565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f5919062000599565b6001600160a01b0390811660a052818116608081905230600081815260106020908152604080832094835293815283822060001990553380835260118083528584208054600160ff1991821681179092556012808652888720805483168417905560138087528988208054841685179055601487528988208054841685179055600d548b1688528988208054841685179055978752888720805483168417905586548a1687529285528786208054821683179055855489168652958452868520805487168217905584549097168452825284832080549094168617909355601580546001600160a01b031916841790559354828252600f85528382208190559251928352909290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350620005c4565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004865781600019048211156200046a576200046a6200042f565b808516156200047857918102915b93841c93908002906200044a565b509250929050565b6000826200049f575060016200053e565b81620004ae575060006200053e565b8160018114620004c75760028114620004d257620004f2565b60019150506200053e565b60ff841115620004e657620004e66200042f565b50506001821b6200053e565b5060208310610133831016604e8410600b841016171562000517575081810a6200053e565b62000523838362000445565b80600019048211156200053a576200053a6200042f565b0290505b92915050565b60006200055560ff8416836200048e565b9392505050565b80820281158282048414176200053e576200053e6200042f565b6000826200059457634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620005ac57600080fd5b81516001600160a01b03811681146200055557600080fd5b60805160a05161291f62000622600039600081816106860152818161167a01528181611a8d01528181611ac701528181611b2e01528181611c4f015261219e01526000818161079101528181612264015261231e015261291f6000f3fe60806040526004361061039b5760003560e01c806367ac77b4116101dc578063a9059cbb11610102578063dd62ed3e116100a0578063ee9ef29e1161006f578063ee9ef29e14610ab6578063f2fde38b14610ad6578063f84ba65d14610af6578063ffb54a9914610b1657600080fd5b8063dd62ed3e14610a1a578063e53c30b014610a60578063e632313c14610a76578063e66db25e14610a9657600080fd5b8063ca33e64c116100dc578063ca33e64c1461099a578063d51ed1c8146109ba578063dd395c63146109da578063dd467064146109fa57600080fd5b8063a9059cbb14610945578063b6c5232414610965578063bd9ab5371461097a57600080fd5b806378109e541161017a5780638da5cb5b116101495780638da5cb5b146108c35780639360dd7b146108e157806395d89b4114610901578063a69df4b51461093057600080fd5b806378109e54146108625780637d1db4a5146108785780638625c0871461088e578063893d20e8146108ae57600080fd5b806370a08231116101b657806370a08231146107ed578063713e4ae51461080d578063715018a61461082d578063722b62ad1461084257600080fd5b806367ac77b41461077f5780636d1b229d146107b35780636ddd1713146107d357600080fd5b80632d594567116102c1578063470624021161025f5780635c85974f1161022e5780635c85974f14610700578063617fe0ed14610720578063658d4b7f1461073f5780636601323d1461075f57600080fd5b8063470624021461065e57806349bd5a5e1461067457806350db71fb146106c0578063571ac8b0146106e057600080fd5b80633705b3921161029b5780633705b392146105f25780633c4dd87a14610608578063442a583d1461061e57806344a33fd21461063e57600080fd5b80632d5945671461059a5780632e8fa821146105ba578063313ce567146105d057600080fd5b8063180b0d7e11610339578063201e799111610308578063201e79911461052557806323b872dd1461054557806329e04b4a146105655780632b112e491461058557600080fd5b8063180b0d7e146104c457806318160ddd146104da5780631da1db5e146104ef5780631e25dc541461050f57600080fd5b8063095ea7b311610375578063095ea7b3146104345780630cc835a3146104645780630d295980146104845780631161ae39146104a457600080fd5b80630445b667146103a757806306fdde03146103d057806309302dc61461041257600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bd601b5481565b6040519081526020015b60405180910390f35b3480156103dc57600080fd5b5060408051808201909152601081526f48656c6c72616973657220536869626160801b60208201525b6040516103c7919061241f565b34801561041e57600080fd5b5061043261042d36600461246d565b610b30565b005b34801561044057600080fd5b5061045461044f36600461249b565b610b84565b60405190151581526020016103c7565b34801561047057600080fd5b5061043261047f36600461246d565b610bf1565b34801561049057600080fd5b5061043261049f3660046124dc565b610c20565b3480156104b057600080fd5b506104546104bf3660046124f7565b610c5d565b3480156104d057600080fd5b506103bd60095481565b3480156104e657600080fd5b506001546103bd565b3480156104fb57600080fd5b5061043261050a36600461246d565b610c71565b34801561051b57600080fd5b506103bd60085481565b34801561053157600080fd5b506104326105403660046124f7565b610cef565b34801561055157600080fd5b50610454610560366004612519565b610d24565b34801561057157600080fd5b5061043261058036600461246d565b610de6565b34801561059157600080fd5b506103bd610e15565b3480156105a657600080fd5b506104326105b536600461255a565b610e5e565b3480156105c657600080fd5b506103bd601c5481565b3480156105dc57600080fd5b5060095b60405160ff90911681526020016103c7565b3480156105fe57600080fd5b506103bd60055481565b34801561061457600080fd5b506103bd60065481565b34801561062a57600080fd5b506104326106393660046125e3565b610eb9565b34801561064a57600080fd5b5061043261065936600461246d565b611007565b34801561066a57600080fd5b506103bd60045481565b34801561068057600080fd5b506106a87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103c7565b3480156106cc57600080fd5b506104326106db36600461263f565b611042565b3480156106ec57600080fd5b506104546106fb366004612674565b611097565b34801561070c57600080fd5b5061043261071b36600461246d565b6110a5565b34801561072c57600080fd5b5060185461045490610100900460ff1681565b34801561074b57600080fd5b5061043261075a36600461263f565b6110d4565b34801561076b57600080fd5b5061043261077a366004612674565b611129565b34801561078b57600080fd5b506106a87f000000000000000000000000000000000000000000000000000000000000000081565b3480156107bf57600080fd5b506104326107ce36600461246d565b6111b5565b3480156107df57600080fd5b50601a546104549060ff1681565b3480156107f957600080fd5b506103bd610808366004612674565b6111e8565b34801561081957600080fd5b50610432610828366004612691565b611203565b34801561083957600080fd5b50610432611401565b34801561084e57600080fd5b506018546105e09062010000900460ff1681565b34801561086e57600080fd5b506103bd60035481565b34801561088457600080fd5b506103bd60025481565b34801561089a57600080fd5b506000546106a8906001600160a01b031681565b3480156108ba57600080fd5b506106a8611463565b3480156108cf57600080fd5b50600a546001600160a01b03166106a8565b3480156108ed57600080fd5b506104326108fc3660046124f7565b611477565b34801561090d57600080fd5b5060408051808201909152600681526548454c53484960d01b6020820152610405565b34801561093c57600080fd5b50610432611500565b34801561095157600080fd5b5061045461096036600461249b565b611608565b34801561097157600080fd5b50600c546103bd565b34801561098657600080fd5b5061043261099536600461246d565b611615565b3480156109a657600080fd5b506015546106a8906001600160a01b031681565b3480156109c657600080fd5b506103bd6109d536600461246d565b611660565b3480156109e657600080fd5b506104326109f536600461263f565b6116b1565b348015610a0657600080fd5b50610432610a1536600461246d565b611706565b348015610a2657600080fd5b506103bd610a35366004612714565b6001600160a01b03918216600090815260106020908152604080832093909416825291909152205490565b348015610a6c57600080fd5b506103bd60075481565b348015610a8257600080fd5b50610432610a9136600461246d565b61178b565b348015610aa257600080fd5b50610432610ab1366004612714565b6117cd565b348015610ac257600080fd5b50610432610ad136600461246d565b611868565b348015610ae257600080fd5b50610432610af1366004612674565b611897565b348015610b0257600080fd5b50610432610b1136600461263f565b611970565b348015610b2257600080fd5b506018546104549060ff1681565b600a546001600160a01b03163314610b635760405162461bcd60e51b8152600401610b5a90612742565b60405180910390fd5b6103e881600154610b74919061278d565b610b7e91906127a4565b60035550565b3360008181526010602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610bdf9086815260200190565b60405180910390a35060015b92915050565b600a546001600160a01b03163314610c1b5760405162461bcd60e51b8152600401610b5a90612742565b600555565b600a546001600160a01b03163314610c4a5760405162461bcd60e51b8152600401610b5a90612742565b6018805460ff1916911515919091179055565b600082610c6983611660565b119392505050565b600a546001600160a01b03163314610c9b5760405162461bcd60e51b8152600401610b5a90612742565b60005447906001600160a01b03166108fc6064610cb8858561278d565b610cc291906127a4565b6040518115909202916000818181858888f19350505050158015610cea573d6000803e3d6000fd5b505050565b600a546001600160a01b03163314610d195760405162461bcd60e51b8152600401610b5a90612742565b601691909155601755565b6001600160a01b038316600090815260106020908152604080832033845290915281205460001914610dd1576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152601082528381203382529091529190912054610dac9184906119c5565b6001600160a01b03851660009081526010602090815260408083203384529091529020555b610ddc8484846119f1565b90505b9392505050565b600a546001600160a01b03163314610e105760405162461bcd60e51b8152600401610b5a90612742565b601b55565b600e54600090610e5990610e31906001600160a01b03166111e8565b600d54610e5390610e4a906001600160a01b03166111e8565b60015490611edd565b90611edd565b905090565b600a546001600160a01b03163314610e885760405162461bcd60e51b8152600401610b5a90612742565b6018805462ffff0019166101009315159390930262ff00001916929092176201000060ff9290921691909102179055565b600a546001600160a01b03163314610ee35760405162461bcd60e51b8152600401610b5a90612742565b6103218210610f4a5760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3830302061646472657373657360981b6064820152608401610b5a565b6000610f56838361278d565b905080610f62866111e8565b1015610fb05760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b5a565b60005b83811015610fff57610fec86868684818110610fd157610fd16127c6565b9050602002016020810190610fe69190612674565b85611ee9565b5080610ff7816127dc565b915050610fb3565b505050505050565b600a546001600160a01b031633146110315760405162461bcd60e51b8152600401610b5a90612742565b47336108fc6064610cb8858561278d565b600a546001600160a01b0316331461106c5760405162461bcd60e51b8152600401610b5a90612742565b6001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055565b6000610beb82600019610b84565b600a546001600160a01b031633146110cf5760405162461bcd60e51b8152600401610b5a90612742565b600255565b600a546001600160a01b031633146110fe5760405162461bcd60e51b8152600401610b5a90612742565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b600a546001600160a01b031633146111535760405162461bcd60e51b8152600401610b5a90612742565b600080546001600160a01b039081168252601160209081526040808420805460ff1990811690915594909216808452828420805486166001908117909155601390925291832080549094161790925580546001600160a01b0319169091179055565b336000908152600f602052604090205481116111e557600d546111e39033906001600160a01b031683611ee9565b505b50565b6001600160a01b03166000908152600f602052604090205490565b600a546001600160a01b0316331461122d5760405162461bcd60e51b8152600401610b5a90612742565b6101f583106112945760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610b5a565b8281146112f45760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610b5a565b6000805b8481101561133857838382818110611312576113126127c6565b905060200201358261132491906127f5565b915080611330816127dc565b9150506112f8565b5080611343876111e8565b10156113915760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b5a565b60005b848110156113f8576113e5878787848181106113b2576113b26127c6565b90506020020160208101906113c79190612674565b8686858181106113d9576113d96127c6565b90506020020135611ee9565b50806113f0816127dc565b915050611394565b50505050505050565b600a546001600160a01b0316331461142b5760405162461bcd60e51b8152600401610b5a90612742565b600a546040516000916001600160a01b0316906000805160206128aa833981519152908390a3600a80546001600160a01b0319169055565b6000610e59600a546001600160a01b031690565b600a546001600160a01b031633146114a15760405162461bcd60e51b8152600401610b5a90612742565b600682905560078290556009819055605a82106111e35760405162461bcd60e51b815260206004820152601860248201527f466565732063616e6e6f742062652074686174206869676800000000000000006044820152606401610b5a565b600b546001600160a01b031633146115665760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610b5a565b600c5442116115b75760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610b5a565b600b54600a546040516001600160a01b0392831692909116906000805160206128aa83398151915290600090a3600b54600a80546001600160a01b0319166001600160a01b03909216919091179055565b6000610ddf3384846119f1565b600a546001600160a01b0316331461163f5760405162461bcd60e51b8152600401610b5a90612742565b6103e881600154611650919061278d565b61165a91906127a4565b60025550565b6000610beb61166d610e15565b6116ab6116a4600261169e7f00000000000000000000000000000000000000000000000000000000000000006111e8565b90611fbd565b8590611fbd565b90611fc9565b600a546001600160a01b031633146116db5760405162461bcd60e51b8152600401610b5a90612742565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b600a546001600160a01b031633146117305760405162461bcd60e51b8152600401610b5a90612742565b600a8054600b80546001600160a01b03199081166001600160a01b0384161790915516905561175f81426127f5565b600c55600a546040516000916001600160a01b0316906000805160206128aa833981519152908390a350565b600a546001600160a01b031633146117b55760405162461bcd60e51b8152600401610b5a90612742565b601b548111156117c857601b54601c5550565b601c55565b600a546001600160a01b031633146117f75760405162461bcd60e51b8152600401610b5a90612742565b600080546001600160a01b039081168252601160209081526040808420805460ff199081169091559483168085528185208054871660019081179091556013909352908420805490951690911790935560158054949091166001600160a01b03199485161790558054909216179055565b600a546001600160a01b031633146118925760405162461bcd60e51b8152600401610b5a90612742565b600855565b600a546001600160a01b031633146118c15760405162461bcd60e51b8152600401610b5a90612742565b6001600160a01b0381166119265760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b5a565b600a546040516001600160a01b038084169216906000805160206128aa83398151915290600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b0316331461199a5760405162461bcd60e51b8152600401610b5a90612742565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b600081848411156119e95760405162461bcd60e51b8152600401610b5a919061241f565b505050900390565b601d5460009060ff1615611a1157611a0a848484611ee9565b9050610ddf565b600a546001600160a01b03858116911614801590611a3d5750600a546001600160a01b03848116911614155b15611a8b5760185460ff16611a8b5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610b5a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116908416146000811582611afc57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614155b90506001600160a01b0385163014801590611b255750600d546001600160a01b03868116911614155b8015611b6357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015611b7d57506000546001600160a01b03868116911614155b8015611b9757506015546001600160a01b03868116911614155b15611c4d576000611ba7866111e8565b6001600160a01b03871660009081526013602052604090205490915060ff16611c4b57600354611bd786836127f5565b1115611c4b5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610b5a565b505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316148015611c955750601854610100900460ff165b8015611cba57506001600160a01b03851660009081526014602052604090205460ff16155b15611d64576001600160a01b0385166000908152601960205260409020544211611d345760405162461bcd60e51b815260206004820152602560248201527f506c65617365207761697420666f7220316d696e206265747765656e2074776f604482015264206275797360d81b6064820152608401610b5a565b601854611d4a9062010000900460ff16426127f5565b6001600160a01b0386166000908152601960205260409020555b6001600160a01b03851660009081526012602052604090205460ff16611d8e57611d8e8685611fd5565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389166000908152600f9091529190912054611de09186906119c5565b6001600160a01b0387166000908152600f6020526040902055838115611e1a5760085415611e1557611e12878661203e565b90505b611e63565b6001600160a01b03871660009081526011602052604090205460ff1615611e415784611e4c565b611e4c8786856120e0565b9050611e56612191565b15611e6357611e636121fd565b6001600160a01b0386166000908152600f6020526040902054611e869082612413565b6001600160a01b038088166000818152600f602052604090819020939093559151908916906000805160206128ca83398151915290611ec89085815260200190565b60405180910390a35060019695505050505050565b6000610ddf8284612808565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600f90915291822054611f3a9184906119c5565b6001600160a01b038086166000908152600f60205260408082209390935590851681522054611f699083612413565b6001600160a01b038085166000818152600f602052604090819020939093559151908616906000805160206128ca83398151915290611fab9086815260200190565b60405180910390a35060019392505050565b6000610ddf828461278d565b6000610ddf82846127a4565b60025481111580611ffe57506001600160a01b03821660009081526012602052604090205460ff165b6111e35760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b5a565b60008060085490506000612069600954606461205a919061278d565b6116ab606461169e8887611fbd565b306000908152600f60205260409020549091506120869082612413565b306000818152600f6020526040908190209290925590516001600160a01b038716906000805160206128ca833981519152906120c59085815260200190565b60405180910390a36120d78482611edd565b95945050505050565b600080826120f0576005546120f4565b6007545b90506000612119600954606461210a919061278d565b6116ab606461169e8987611fbd565b306000908152600f60205260409020549091506121369082612413565b306000818152600f6020526040908190209290925590516001600160a01b038816906000805160206128ca833981519152906121759085815260200190565b60405180910390a36121878582611edd565b9695505050505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906121cf5750601d5460ff16155b80156121dd5750601a5460ff165b8015610e59575050601b54306000908152600f6020526040902054101590565b601d805460ff19166001179055601c546040805160028082526060820183526000926020830190803683370190505090503081600081518110612242576122426127c6565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e4919061281b565b816001815181106122f7576122f76127c6565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b815247917f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061235c908690600090879030904290600401612838565b600060405180830381600087803b15801561237657600080fd5b505af115801561238a573d6000803e3d6000fd5b5050505060006123a38247611edd90919063ffffffff16565b6000805460405192935090916001600160a01b039091169061753090849084818181858888f193505050503d80600081146123fa576040519150601f19603f3d011682016040523d82523d6000602084013e6123ff565b606091505b5050601d805460ff19169055505050505050565b6000610ddf82846127f5565b600060208083528351808285015260005b8181101561244c57858101830151858201604001528201612430565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561247f57600080fd5b5035919050565b6001600160a01b03811681146111e557600080fd5b600080604083850312156124ae57600080fd5b82356124b981612486565b946020939093013593505050565b803580151581146124d757600080fd5b919050565b6000602082840312156124ee57600080fd5b610ddf826124c7565b6000806040838503121561250a57600080fd5b50508035926020909101359150565b60008060006060848603121561252e57600080fd5b833561253981612486565b9250602084013561254981612486565b929592945050506040919091013590565b6000806040838503121561256d57600080fd5b612576836124c7565b9150602083013560ff8116811461258c57600080fd5b809150509250929050565b60008083601f8401126125a957600080fd5b50813567ffffffffffffffff8111156125c157600080fd5b6020830191508360208260051b85010111156125dc57600080fd5b9250929050565b600080600080606085870312156125f957600080fd5b843561260481612486565b9350602085013567ffffffffffffffff81111561262057600080fd5b61262c87828801612597565b9598909750949560400135949350505050565b6000806040838503121561265257600080fd5b823561265d81612486565b915061266b602084016124c7565b90509250929050565b60006020828403121561268657600080fd5b8135610ddf81612486565b6000806000806000606086880312156126a957600080fd5b85356126b481612486565b9450602086013567ffffffffffffffff808211156126d157600080fd5b6126dd89838a01612597565b909650945060408801359150808211156126f657600080fd5b5061270388828901612597565b969995985093965092949392505050565b6000806040838503121561272757600080fd5b823561273281612486565b9150602083013561258c81612486565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610beb57610beb612777565b6000826127c157634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000600182016127ee576127ee612777565b5060010190565b80820180821115610beb57610beb612777565b81810381811115610beb57610beb612777565b60006020828403121561282d57600080fd5b8151610ddf81612486565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128885784516001600160a01b031683529383019391830191600101612863565b50506001600160a01b0396909616606085015250505060800152939250505056fe8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122091fe0177bc23a3e225b76a2139eeffa6d0a8c97f3f8461c06686f5e62eac62e164736f6c63430008120033

Deployed Bytecode

0x60806040526004361061039b5760003560e01c806367ac77b4116101dc578063a9059cbb11610102578063dd62ed3e116100a0578063ee9ef29e1161006f578063ee9ef29e14610ab6578063f2fde38b14610ad6578063f84ba65d14610af6578063ffb54a9914610b1657600080fd5b8063dd62ed3e14610a1a578063e53c30b014610a60578063e632313c14610a76578063e66db25e14610a9657600080fd5b8063ca33e64c116100dc578063ca33e64c1461099a578063d51ed1c8146109ba578063dd395c63146109da578063dd467064146109fa57600080fd5b8063a9059cbb14610945578063b6c5232414610965578063bd9ab5371461097a57600080fd5b806378109e541161017a5780638da5cb5b116101495780638da5cb5b146108c35780639360dd7b146108e157806395d89b4114610901578063a69df4b51461093057600080fd5b806378109e54146108625780637d1db4a5146108785780638625c0871461088e578063893d20e8146108ae57600080fd5b806370a08231116101b657806370a08231146107ed578063713e4ae51461080d578063715018a61461082d578063722b62ad1461084257600080fd5b806367ac77b41461077f5780636d1b229d146107b35780636ddd1713146107d357600080fd5b80632d594567116102c1578063470624021161025f5780635c85974f1161022e5780635c85974f14610700578063617fe0ed14610720578063658d4b7f1461073f5780636601323d1461075f57600080fd5b8063470624021461065e57806349bd5a5e1461067457806350db71fb146106c0578063571ac8b0146106e057600080fd5b80633705b3921161029b5780633705b392146105f25780633c4dd87a14610608578063442a583d1461061e57806344a33fd21461063e57600080fd5b80632d5945671461059a5780632e8fa821146105ba578063313ce567146105d057600080fd5b8063180b0d7e11610339578063201e799111610308578063201e79911461052557806323b872dd1461054557806329e04b4a146105655780632b112e491461058557600080fd5b8063180b0d7e146104c457806318160ddd146104da5780631da1db5e146104ef5780631e25dc541461050f57600080fd5b8063095ea7b311610375578063095ea7b3146104345780630cc835a3146104645780630d295980146104845780631161ae39146104a457600080fd5b80630445b667146103a757806306fdde03146103d057806309302dc61461041257600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bd601b5481565b6040519081526020015b60405180910390f35b3480156103dc57600080fd5b5060408051808201909152601081526f48656c6c72616973657220536869626160801b60208201525b6040516103c7919061241f565b34801561041e57600080fd5b5061043261042d36600461246d565b610b30565b005b34801561044057600080fd5b5061045461044f36600461249b565b610b84565b60405190151581526020016103c7565b34801561047057600080fd5b5061043261047f36600461246d565b610bf1565b34801561049057600080fd5b5061043261049f3660046124dc565b610c20565b3480156104b057600080fd5b506104546104bf3660046124f7565b610c5d565b3480156104d057600080fd5b506103bd60095481565b3480156104e657600080fd5b506001546103bd565b3480156104fb57600080fd5b5061043261050a36600461246d565b610c71565b34801561051b57600080fd5b506103bd60085481565b34801561053157600080fd5b506104326105403660046124f7565b610cef565b34801561055157600080fd5b50610454610560366004612519565b610d24565b34801561057157600080fd5b5061043261058036600461246d565b610de6565b34801561059157600080fd5b506103bd610e15565b3480156105a657600080fd5b506104326105b536600461255a565b610e5e565b3480156105c657600080fd5b506103bd601c5481565b3480156105dc57600080fd5b5060095b60405160ff90911681526020016103c7565b3480156105fe57600080fd5b506103bd60055481565b34801561061457600080fd5b506103bd60065481565b34801561062a57600080fd5b506104326106393660046125e3565b610eb9565b34801561064a57600080fd5b5061043261065936600461246d565b611007565b34801561066a57600080fd5b506103bd60045481565b34801561068057600080fd5b506106a87f000000000000000000000000b0c41ad80e4d1f334707bfebec0785fece83685881565b6040516001600160a01b0390911681526020016103c7565b3480156106cc57600080fd5b506104326106db36600461263f565b611042565b3480156106ec57600080fd5b506104546106fb366004612674565b611097565b34801561070c57600080fd5b5061043261071b36600461246d565b6110a5565b34801561072c57600080fd5b5060185461045490610100900460ff1681565b34801561074b57600080fd5b5061043261075a36600461263f565b6110d4565b34801561076b57600080fd5b5061043261077a366004612674565b611129565b34801561078b57600080fd5b506106a87f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156107bf57600080fd5b506104326107ce36600461246d565b6111b5565b3480156107df57600080fd5b50601a546104549060ff1681565b3480156107f957600080fd5b506103bd610808366004612674565b6111e8565b34801561081957600080fd5b50610432610828366004612691565b611203565b34801561083957600080fd5b50610432611401565b34801561084e57600080fd5b506018546105e09062010000900460ff1681565b34801561086e57600080fd5b506103bd60035481565b34801561088457600080fd5b506103bd60025481565b34801561089a57600080fd5b506000546106a8906001600160a01b031681565b3480156108ba57600080fd5b506106a8611463565b3480156108cf57600080fd5b50600a546001600160a01b03166106a8565b3480156108ed57600080fd5b506104326108fc3660046124f7565b611477565b34801561090d57600080fd5b5060408051808201909152600681526548454c53484960d01b6020820152610405565b34801561093c57600080fd5b50610432611500565b34801561095157600080fd5b5061045461096036600461249b565b611608565b34801561097157600080fd5b50600c546103bd565b34801561098657600080fd5b5061043261099536600461246d565b611615565b3480156109a657600080fd5b506015546106a8906001600160a01b031681565b3480156109c657600080fd5b506103bd6109d536600461246d565b611660565b3480156109e657600080fd5b506104326109f536600461263f565b6116b1565b348015610a0657600080fd5b50610432610a1536600461246d565b611706565b348015610a2657600080fd5b506103bd610a35366004612714565b6001600160a01b03918216600090815260106020908152604080832093909416825291909152205490565b348015610a6c57600080fd5b506103bd60075481565b348015610a8257600080fd5b50610432610a9136600461246d565b61178b565b348015610aa257600080fd5b50610432610ab1366004612714565b6117cd565b348015610ac257600080fd5b50610432610ad136600461246d565b611868565b348015610ae257600080fd5b50610432610af1366004612674565b611897565b348015610b0257600080fd5b50610432610b1136600461263f565b611970565b348015610b2257600080fd5b506018546104549060ff1681565b600a546001600160a01b03163314610b635760405162461bcd60e51b8152600401610b5a90612742565b60405180910390fd5b6103e881600154610b74919061278d565b610b7e91906127a4565b60035550565b3360008181526010602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610bdf9086815260200190565b60405180910390a35060015b92915050565b600a546001600160a01b03163314610c1b5760405162461bcd60e51b8152600401610b5a90612742565b600555565b600a546001600160a01b03163314610c4a5760405162461bcd60e51b8152600401610b5a90612742565b6018805460ff1916911515919091179055565b600082610c6983611660565b119392505050565b600a546001600160a01b03163314610c9b5760405162461bcd60e51b8152600401610b5a90612742565b60005447906001600160a01b03166108fc6064610cb8858561278d565b610cc291906127a4565b6040518115909202916000818181858888f19350505050158015610cea573d6000803e3d6000fd5b505050565b600a546001600160a01b03163314610d195760405162461bcd60e51b8152600401610b5a90612742565b601691909155601755565b6001600160a01b038316600090815260106020908152604080832033845290915281205460001914610dd1576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152601082528381203382529091529190912054610dac9184906119c5565b6001600160a01b03851660009081526010602090815260408083203384529091529020555b610ddc8484846119f1565b90505b9392505050565b600a546001600160a01b03163314610e105760405162461bcd60e51b8152600401610b5a90612742565b601b55565b600e54600090610e5990610e31906001600160a01b03166111e8565b600d54610e5390610e4a906001600160a01b03166111e8565b60015490611edd565b90611edd565b905090565b600a546001600160a01b03163314610e885760405162461bcd60e51b8152600401610b5a90612742565b6018805462ffff0019166101009315159390930262ff00001916929092176201000060ff9290921691909102179055565b600a546001600160a01b03163314610ee35760405162461bcd60e51b8152600401610b5a90612742565b6103218210610f4a5760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3830302061646472657373657360981b6064820152608401610b5a565b6000610f56838361278d565b905080610f62866111e8565b1015610fb05760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b5a565b60005b83811015610fff57610fec86868684818110610fd157610fd16127c6565b9050602002016020810190610fe69190612674565b85611ee9565b5080610ff7816127dc565b915050610fb3565b505050505050565b600a546001600160a01b031633146110315760405162461bcd60e51b8152600401610b5a90612742565b47336108fc6064610cb8858561278d565b600a546001600160a01b0316331461106c5760405162461bcd60e51b8152600401610b5a90612742565b6001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055565b6000610beb82600019610b84565b600a546001600160a01b031633146110cf5760405162461bcd60e51b8152600401610b5a90612742565b600255565b600a546001600160a01b031633146110fe5760405162461bcd60e51b8152600401610b5a90612742565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b600a546001600160a01b031633146111535760405162461bcd60e51b8152600401610b5a90612742565b600080546001600160a01b039081168252601160209081526040808420805460ff1990811690915594909216808452828420805486166001908117909155601390925291832080549094161790925580546001600160a01b0319169091179055565b336000908152600f602052604090205481116111e557600d546111e39033906001600160a01b031683611ee9565b505b50565b6001600160a01b03166000908152600f602052604090205490565b600a546001600160a01b0316331461122d5760405162461bcd60e51b8152600401610b5a90612742565b6101f583106112945760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610b5a565b8281146112f45760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610b5a565b6000805b8481101561133857838382818110611312576113126127c6565b905060200201358261132491906127f5565b915080611330816127dc565b9150506112f8565b5080611343876111e8565b10156113915760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b5a565b60005b848110156113f8576113e5878787848181106113b2576113b26127c6565b90506020020160208101906113c79190612674565b8686858181106113d9576113d96127c6565b90506020020135611ee9565b50806113f0816127dc565b915050611394565b50505050505050565b600a546001600160a01b0316331461142b5760405162461bcd60e51b8152600401610b5a90612742565b600a546040516000916001600160a01b0316906000805160206128aa833981519152908390a3600a80546001600160a01b0319169055565b6000610e59600a546001600160a01b031690565b600a546001600160a01b031633146114a15760405162461bcd60e51b8152600401610b5a90612742565b600682905560078290556009819055605a82106111e35760405162461bcd60e51b815260206004820152601860248201527f466565732063616e6e6f742062652074686174206869676800000000000000006044820152606401610b5a565b600b546001600160a01b031633146115665760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610b5a565b600c5442116115b75760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610b5a565b600b54600a546040516001600160a01b0392831692909116906000805160206128aa83398151915290600090a3600b54600a80546001600160a01b0319166001600160a01b03909216919091179055565b6000610ddf3384846119f1565b600a546001600160a01b0316331461163f5760405162461bcd60e51b8152600401610b5a90612742565b6103e881600154611650919061278d565b61165a91906127a4565b60025550565b6000610beb61166d610e15565b6116ab6116a4600261169e7f000000000000000000000000b0c41ad80e4d1f334707bfebec0785fece8368586111e8565b90611fbd565b8590611fbd565b90611fc9565b600a546001600160a01b031633146116db5760405162461bcd60e51b8152600401610b5a90612742565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b600a546001600160a01b031633146117305760405162461bcd60e51b8152600401610b5a90612742565b600a8054600b80546001600160a01b03199081166001600160a01b0384161790915516905561175f81426127f5565b600c55600a546040516000916001600160a01b0316906000805160206128aa833981519152908390a350565b600a546001600160a01b031633146117b55760405162461bcd60e51b8152600401610b5a90612742565b601b548111156117c857601b54601c5550565b601c55565b600a546001600160a01b031633146117f75760405162461bcd60e51b8152600401610b5a90612742565b600080546001600160a01b039081168252601160209081526040808420805460ff199081169091559483168085528185208054871660019081179091556013909352908420805490951690911790935560158054949091166001600160a01b03199485161790558054909216179055565b600a546001600160a01b031633146118925760405162461bcd60e51b8152600401610b5a90612742565b600855565b600a546001600160a01b031633146118c15760405162461bcd60e51b8152600401610b5a90612742565b6001600160a01b0381166119265760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b5a565b600a546040516001600160a01b038084169216906000805160206128aa83398151915290600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b0316331461199a5760405162461bcd60e51b8152600401610b5a90612742565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b600081848411156119e95760405162461bcd60e51b8152600401610b5a919061241f565b505050900390565b601d5460009060ff1615611a1157611a0a848484611ee9565b9050610ddf565b600a546001600160a01b03858116911614801590611a3d5750600a546001600160a01b03848116911614155b15611a8b5760185460ff16611a8b5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610b5a565b7f000000000000000000000000b0c41ad80e4d1f334707bfebec0785fece8368586001600160a01b03908116908416146000811582611afc57507f000000000000000000000000b0c41ad80e4d1f334707bfebec0785fece8368586001600160a01b0316866001600160a01b031614155b90506001600160a01b0385163014801590611b255750600d546001600160a01b03868116911614155b8015611b6357507f000000000000000000000000b0c41ad80e4d1f334707bfebec0785fece8368586001600160a01b0316856001600160a01b031614155b8015611b7d57506000546001600160a01b03868116911614155b8015611b9757506015546001600160a01b03868116911614155b15611c4d576000611ba7866111e8565b6001600160a01b03871660009081526013602052604090205490915060ff16611c4b57600354611bd786836127f5565b1115611c4b5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610b5a565b505b7f000000000000000000000000b0c41ad80e4d1f334707bfebec0785fece8368586001600160a01b0316866001600160a01b0316148015611c955750601854610100900460ff165b8015611cba57506001600160a01b03851660009081526014602052604090205460ff16155b15611d64576001600160a01b0385166000908152601960205260409020544211611d345760405162461bcd60e51b815260206004820152602560248201527f506c65617365207761697420666f7220316d696e206265747765656e2074776f604482015264206275797360d81b6064820152608401610b5a565b601854611d4a9062010000900460ff16426127f5565b6001600160a01b0386166000908152601960205260409020555b6001600160a01b03851660009081526012602052604090205460ff16611d8e57611d8e8685611fd5565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389166000908152600f9091529190912054611de09186906119c5565b6001600160a01b0387166000908152600f6020526040902055838115611e1a5760085415611e1557611e12878661203e565b90505b611e63565b6001600160a01b03871660009081526011602052604090205460ff1615611e415784611e4c565b611e4c8786856120e0565b9050611e56612191565b15611e6357611e636121fd565b6001600160a01b0386166000908152600f6020526040902054611e869082612413565b6001600160a01b038088166000818152600f602052604090819020939093559151908916906000805160206128ca83398151915290611ec89085815260200190565b60405180910390a35060019695505050505050565b6000610ddf8284612808565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600f90915291822054611f3a9184906119c5565b6001600160a01b038086166000908152600f60205260408082209390935590851681522054611f699083612413565b6001600160a01b038085166000818152600f602052604090819020939093559151908616906000805160206128ca83398151915290611fab9086815260200190565b60405180910390a35060019392505050565b6000610ddf828461278d565b6000610ddf82846127a4565b60025481111580611ffe57506001600160a01b03821660009081526012602052604090205460ff165b6111e35760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b5a565b60008060085490506000612069600954606461205a919061278d565b6116ab606461169e8887611fbd565b306000908152600f60205260409020549091506120869082612413565b306000818152600f6020526040908190209290925590516001600160a01b038716906000805160206128ca833981519152906120c59085815260200190565b60405180910390a36120d78482611edd565b95945050505050565b600080826120f0576005546120f4565b6007545b90506000612119600954606461210a919061278d565b6116ab606461169e8987611fbd565b306000908152600f60205260409020549091506121369082612413565b306000818152600f6020526040908190209290925590516001600160a01b038816906000805160206128ca833981519152906121759085815260200190565b60405180910390a36121878582611edd565b9695505050505050565b6000336001600160a01b037f000000000000000000000000b0c41ad80e4d1f334707bfebec0785fece83685816148015906121cf5750601d5460ff16155b80156121dd5750601a5460ff165b8015610e59575050601b54306000908152600f6020526040902054101590565b601d805460ff19166001179055601c546040805160028082526060820183526000926020830190803683370190505090503081600081518110612242576122426127c6565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e4919061281b565b816001815181106122f7576122f76127c6565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b815247917f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061235c908690600090879030904290600401612838565b600060405180830381600087803b15801561237657600080fd5b505af115801561238a573d6000803e3d6000fd5b5050505060006123a38247611edd90919063ffffffff16565b6000805460405192935090916001600160a01b039091169061753090849084818181858888f193505050503d80600081146123fa576040519150601f19603f3d011682016040523d82523d6000602084013e6123ff565b606091505b5050601d805460ff19169055505050505050565b6000610ddf82846127f5565b600060208083528351808285015260005b8181101561244c57858101830151858201604001528201612430565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561247f57600080fd5b5035919050565b6001600160a01b03811681146111e557600080fd5b600080604083850312156124ae57600080fd5b82356124b981612486565b946020939093013593505050565b803580151581146124d757600080fd5b919050565b6000602082840312156124ee57600080fd5b610ddf826124c7565b6000806040838503121561250a57600080fd5b50508035926020909101359150565b60008060006060848603121561252e57600080fd5b833561253981612486565b9250602084013561254981612486565b929592945050506040919091013590565b6000806040838503121561256d57600080fd5b612576836124c7565b9150602083013560ff8116811461258c57600080fd5b809150509250929050565b60008083601f8401126125a957600080fd5b50813567ffffffffffffffff8111156125c157600080fd5b6020830191508360208260051b85010111156125dc57600080fd5b9250929050565b600080600080606085870312156125f957600080fd5b843561260481612486565b9350602085013567ffffffffffffffff81111561262057600080fd5b61262c87828801612597565b9598909750949560400135949350505050565b6000806040838503121561265257600080fd5b823561265d81612486565b915061266b602084016124c7565b90509250929050565b60006020828403121561268657600080fd5b8135610ddf81612486565b6000806000806000606086880312156126a957600080fd5b85356126b481612486565b9450602086013567ffffffffffffffff808211156126d157600080fd5b6126dd89838a01612597565b909650945060408801359150808211156126f657600080fd5b5061270388828901612597565b969995985093965092949392505050565b6000806040838503121561272757600080fd5b823561273281612486565b9150602083013561258c81612486565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610beb57610beb612777565b6000826127c157634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000600182016127ee576127ee612777565b5060010190565b80820180821115610beb57610beb612777565b81810381811115610beb57610beb612777565b60006020828403121561282d57600080fd5b8151610ddf81612486565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128885784516001600160a01b031683529383019391830191600101612863565b50506001600160a01b0396909616606085015250505060800152939250505056fe8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122091fe0177bc23a3e225b76a2139eeffa6d0a8c97f3f8461c06686f5e62eac62e164736f6c63430008120033

Deployed Bytecode Sourcemap

18174:14566:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19156:56;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;19156:56:0;;;;;;;;20765:80;;;;;;;;;;-1:-1:-1;20837:5:0;;;;;;;;;;;;-1:-1:-1;;;20837:5:0;;;;20765:80;;;;;;;:::i;22085:177::-;;;;;;;;;;-1:-1:-1;22085:177:0;;;;;:::i;:::-;;:::i;:::-;;21189:216;;;;;;;;;;-1:-1:-1;21189:216:0;;;;;:::i;:::-;;:::i;:::-;;;1555:14:1;;1548:22;1530:41;;1518:2;1503:18;21189:216:0;1390:187:1;29698:95:0;;;;;;;;;;-1:-1:-1;29698:95:0;;;;;:::i;:::-;;:::i;27606:94::-;;;;;;;;;;-1:-1:-1;27606:94:0;;;;;:::i;:::-;;:::i;31389:150::-;;;;;;;;;;-1:-1:-1;31389:150:0;;;;;:::i;:::-;;:::i;1066:39::-;;;;;;;;;;;;;;;;20495:88;;;;;;;;;;-1:-1:-1;20568:12:0;;20495:88;;27142:209;;;;;;;;;;-1:-1:-1;27142:209:0;;;;;:::i;:::-;;:::i;1020:37::-;;;;;;;;;;;;;;;;30863:184;;;;;;;;;;-1:-1:-1;30863:184:0;;;;;:::i;:::-;;:::i;21707:370::-;;;;;;;;;;-1:-1:-1;21707:370:0;;;;;:::i;:::-;;:::i;30474:112::-;;;;;;;;;;-1:-1:-1;30474:112:0;;;;;:::i;:::-;;:::i;31055:142::-;;;;;;;;;;;;;:::i;27747:164::-;;;;;;;;;;-1:-1:-1;27747:164:0;;;;;:::i;:::-;;:::i;19219:53::-;;;;;;;;;;;;;;;;20589:80;;;;;;;;;;-1:-1:-1;565:1:0;20589:80;;;3160:4:1;3148:17;;;3130:36;;3118:2;3103:18;20589:80:0;2988:184:1;864:45:0;;;;;;;;;;;;;;;;918:40;;;;;;;;;;;;;;;;32222:449;;;;;;;;;;-1:-1:-1;32222:449:0;;;;;:::i;:::-;;:::i;27359:216::-;;;;;;;;;;-1:-1:-1;27359:216:0;;;;;:::i;:::-;;:::i;817:40::-;;;;;;;;;;;;;;;;18886:38;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4358:32:1;;;4340:51;;4328:2;4313:18;18886:38:0;4194:203:1;29089:131:0;;;;;;;;;;-1:-1:-1;29089:131:0;;;;;:::i;:::-;;:::i;21413:122::-;;;;;;;;;;-1:-1:-1;21413:122:0;;;;;:::i;:::-;;:::i;22448:97::-;;;;;;;;;;-1:-1:-1;22448:97:0;;;;;:::i;:::-;;:::i;18973:37::-;;;;;;;;;;-1:-1:-1;18973:37:0;;;;;;;;;;;28694:121;;;;;;;;;;-1:-1:-1;28694:121:0;;;;;:::i;:::-;;:::i;29846:234::-;;;;;;;;;;-1:-1:-1;29846:234:0;;;;;:::i;:::-;;:::i;18829:50::-;;;;;;;;;;;;;;;22708:232;;;;;;;;;;-1:-1:-1;22708:232:0;;;;;:::i;:::-;;:::i;19119:30::-;;;;;;;;;;-1:-1:-1;19119:30:0;;;;;;;;20937:105;;;;;;;;;;-1:-1:-1;20937:105:0;;;;;:::i;:::-;;:::i;31566:648::-;;;;;;;;;;-1:-1:-1;31566:648:0;;;;;:::i;:::-;;:::i;8833:148::-;;;;;;;;;;;;;:::i;19017:39::-;;;;;;;;;;-1:-1:-1;19017:39:0;;;;;;;;;;;744:61;;;;;;;;;;;;;;;;632:58;;;;;;;;;;;;;;;;369:70;;;;;;;;;;-1:-1:-1;369:70:0;;;;-1:-1:-1;;;;;369:70:0;;;20851:80;;;;;;;;;;;;;:::i;8190:79::-;;;;;;;;;;-1:-1:-1;8255:6:0;;-1:-1:-1;;;;;8255:6:0;8190:79;;29418:272;;;;;;;;;;-1:-1:-1;29418:272:0;;;;;:::i;:::-;;:::i;20675:84::-;;;;;;;;;;-1:-1:-1;20749:7:0;;;;;;;;;;;;-1:-1:-1;;;20749:7:0;;;;20675:84;;9856:305;;;;;;;;;;;;;:::i;21543:156::-;;;;;;;;;;-1:-1:-1;21543:156:0;;;;;:::i;:::-;;:::i;9388:89::-;;;;;;;;;;-1:-1:-1;9460:9:0;;9388:89;;22268:172;;;;;;;;;;-1:-1:-1;22268:172:0;;;;;:::i;:::-;;:::i;18700:36::-;;;;;;;;;;-1:-1:-1;18700:36:0;;;;-1:-1:-1;;;;;18700:36:0;;;31205:176;;;;;;;;;;-1:-1:-1;31205:176:0;;;;;:::i;:::-;;:::i;28823:121::-;;;;;;;;;;-1:-1:-1;28823:121:0;;;;;:::i;:::-;;:::i;9553:226::-;;;;;;;;;;-1:-1:-1;9553:226:0;;;;;:::i;:::-;;:::i;21048:133::-;;;;;;;;;;-1:-1:-1;21048:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;21150:19:0;;;21132:7;21150:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;21048:133;965:46;;;;;;;;;;;;;;;;30594:221;;;;;;;;;;-1:-1:-1;30594:221:0;;;;;:::i;:::-;;:::i;30088:342::-;;;;;;;;;;-1:-1:-1;30088:342:0;;;;;:::i;:::-;;:::i;29322:88::-;;;;;;;;;;-1:-1:-1;29322:88:0;;;;;:::i;:::-;;:::i;9136:244::-;;;;;;;;;;-1:-1:-1;9136:244:0;;;;;:::i;:::-;;:::i;28952:129::-;;;;;;;;;;-1:-1:-1;28952:129:0;;;;;:::i;:::-;;:::i;18933:31::-;;;;;;;;;;-1:-1:-1;18933:31:0;;;;;;;;22085:177;8402:6;;-1:-1:-1;;;;;8402:6:0;6854:10;8402:22;8394:67;;;;-1:-1:-1;;;8394:67:0;;;;;;;:::i;:::-;;;;;;;;;22250:4:::1;22222:23;22207:12;;:38;;;;:::i;:::-;22206:48;;;;:::i;:::-;22188:15;:66:::0;-1:-1:-1;22085:177:0:o;21189:216::-;21293:10;21264:4;21281:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;21281:32:0;;;;;;;;;;:41;;;21338:37;21264:4;;21281:32;;21338:37;;;;21316:6;160:25:1;;148:2;133:18;;14:177;21338:37:0;;;;;;;;-1:-1:-1;21393:4:0;21189:216;;;;;:::o;29698:95::-;8402:6;;-1:-1:-1;;;;;8402:6:0;6854:10;8402:22;8394:67;;;;-1:-1:-1;;;8394:67:0;;;;;;;:::i;:::-;29765:11:::1;:20:::0;29698:95::o;27606:94::-;8402:6;;-1:-1:-1;;;;;8402:6:0;6854:10;8402:22;8394:67;;;;-1:-1:-1;;;8394:67:0;;;;;;;:::i;:::-;27671:11:::1;:21:::0;;-1:-1:-1;;27671:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27606:94::o;31389:150::-;31469:4;31525:6;31493:29;31513:8;31493:19;:29::i;:::-;:38;;31389:150;-1:-1:-1;;;31389:150:0:o;27142:209::-;8402:6;;-1:-1:-1;;;;;8402:6:0;6854:10;8402:22;8394:67;;;;-1:-1:-1;;;8394:67:0;;;;;;;:::i;:::-;27227:17:::1;27287:10:::0;27247:21:::1;::::0;-1:-1:-1;;;;;27287:10:0::1;27279:64;27339:3;27308:28;27320:16:::0;27247:21;27308:28:::1;:::i;:::-;:34;;;;:::i;:::-;27279:64;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27216:135;27142:209:::0;:::o;30863:184::-;8402:6;;-1:-1:-1;;;;;8402:6:0;6854:10;8402:22;8394:67;;;;-1:-1:-1;;;8394:67:0;;;;;;;:::i;:::-;30962:15:::1;:25:::0;;;;30998:26:::1;:41:::0;30863:184::o;21707:370::-;-1:-1:-1;;;;;21827:19:0;;21807:4;21827:19;;;:11;:19;;;;;;;;21847:10;21827:31;;;;;;;;-1:-1:-1;;21827:52:0;21824:186;;21929:69;;;;;;;;;;;-1:-1:-1;;;21929:69:0;;;;;;;;-1:-1:-1;;;;;21929:19:0;;-1:-1:-1;21929:19:0;;;:11;:19;;;;;21949:10;21929:31;;;;;;;;;;:69;;21965:6;;21929:35;:69::i;:::-;-1:-1:-1;;;;;21895:19:0;;;;;;:11;:19;;;;;;;;21915:10;21895:31;;;;;;;:103;21824:186;22029:40;22043:6;22051:9;22062:6;22029:13;:40::i;:::-;22022:47;;21707:370;;;;;;:::o;30474:112::-;8402:6;;-1:-1:-1;;;;;8402:6:0;6854:10;8402:22;8394:67;;;;-1:-1:-1;;;8394:67:0;;;;;;;:::i;:::-;30555:13:::1;:23:::0;30474:112::o;31055:142::-;31183:4;;31108:7;;31135:54;;31173:15;;-1:-1:-1;;;;;31183:4:0;31173:9;:15::i;:::-;31162:4;;31135:33;;31152:15;;-1:-1:-1;;;;;31162:4:0;31152:9;:15::i;:::-;31135:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;31128:61;;31055:142;:::o;27747:164::-;8402:6;;-1:-1:-1;;;;;8402:6:0;6854:10;8402:22;8394:67;;;;-1:-1:-1;;;8394:67:0;;;;;;;:::i;:::-;27831:18:::1;:28:::0;;-1:-1:-1;;27870:33:0;27831:28:::1;::::0;::::1;;::::0;;;::::1;-1:-1:-1::0;;27870:33:0;;;;;;27831:28:::1;27870:33:::0;;;::::1;::::0;;;::::1;;::::0;;27747:164::o;32222:449::-;8402:6;;-1:-1:-1;;;;;8402:6:0;6854:10;8402:22;8394:67;;;;-1:-1:-1;;;8394:67:0;;;;;;;:::i;:::-;32363:3:::1;32344:22:::0;::::1;32336:79;;;::::0;-1:-1:-1;;;32336:79:0;;7605:2:1;32336:79:0::1;::::0;::::1;7587:21:1::0;7644:2;7624:18;;;7617:30;7683:34;7663:18;;;7656:62;-1:-1:-1;;;7734:18:1;;;7727:43;7787:19;;32336:79:0::1;7403:409:1::0;32336:79:0::1;32428:12;32443:25;32452:9:::0;32443:6;:25:::1;:::i;:::-;32428:40;;32508:4;32489:15;32499:4;32489:9;:15::i;:::-;:23;;32481:63;;;::::0;-1:-1:-1;;;32481:63:0;;8019:2:1;32481:63:0::1;::::0;::::1;8001:21:1::0;8058:2;8038:18;;;8031:30;8097:29;8077:18;;;8070:57;8144:18;;32481:63:0::1;7817:351:1::0;32481:63:0::1;32561:6;32557:107;32571:20:::0;;::::1;32557:107;;;32612:40;32627:4;32632:9;;32642:1;32632:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;32645:6;32612:14;:40::i;:::-;-1:-1:-1::0;32593:3:0;::::1;::::0;::::1;:::i;:::-;;;;32557:107;;;;32323:348;32222:449:::0;;;;:::o;27359:216::-;8402:6;;-1:-1:-1;;;;;8402:6:0;6854:10;8402:22;8394:67;;;;-1:-1:-1;;;8394:67:0;;;;;;;:::i;:::-;27471:21:::1;27511:10;27503:64;27563:3;27532:28;27544:16:::0;27471:21;27532:28:::1;:::i;29089:131::-:0;8402:6;;-1:-1:-1;;;;;8402:6:0;6854:10;8402:22;8394:67;;;;-1:-1:-1;;;8394:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29179:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;29179:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29089:131::o;21413:122::-;21468:4;21492:35;21500:7;-1:-1:-1;;21492:7:0;:35::i;22448:97::-;8402:6;;-1:-1:-1;;;;;8402:6:0;6854:10;8402:22;8394:67;;;;-1:-1:-1;;;8394:67:0;;;;;;;:::i;:::-;22516:12:::1;:21:::0;22448:97::o;28694:121::-;8402:6;;-1:-1:-1;;;;;8402:6:0;6854:10;8402:22;8394:67;;;;-1:-1:-1;;;8394:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28779:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;28779:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28694:121::o;29846:234::-;8402:6;;-1:-1:-1;;;;;8402:6:0;6854:10;8402:22;8394:67;;;;-1:-1:-1;;;8394:67:0;;;;;;;:::i;:::-;29947:5:::1;29933:10:::0;;-1:-1:-1;;;;;29933:10:0;;::::1;29921:23:::0;;:11:::1;:23;::::0;;;;;;;:31;;-1:-1:-1;;29921:31:0;;::::1;::::0;;;29963:23;;;::::1;::::0;;;;;;:30;;;::::1;29933:10:::0;29963:30;;::::1;::::0;;;30006:11:::1;:23:::0;;;;;;:30;;;;::::1;;::::0;;;30049:23;;-1:-1:-1;;;;;;30049:23:0::1;::::0;;::::1;::::0;;29846:234::o;22708:232::-;22843:10;22833:21;;;;:9;:21;;;;;;:31;-1:-1:-1;22830:103:0;;22908:4;;22881:40;;22896:10;;-1:-1:-1;;;;;22908:4:0;22914:6;22881:14;:40::i;:::-;;22830:103;22708:232;:::o;20937:105::-;-1:-1:-1;;;;;21021:18:0;21003:7;21021:18;;;:9;:18;;;;;;;20937:105::o;31566:648::-;8402:6;;-1:-1:-1;;;;;8402:6:0;6854:10;8402:22;8394:67;;;;-1:-1:-1;;;8394:67:0;;;;;;;:::i;:::-;31719:3:::1;31700:22:::0;::::1;31692:79;;;::::0;-1:-1:-1;;;31692:79:0;;8647:2:1;31692:79:0::1;::::0;::::1;8629:21:1::0;8686:2;8666:18;;;8659:30;8725:34;8705:18;;;8698:62;-1:-1:-1;;;8776:18:1;;;8769:43;8829:19;;31692:79:0::1;8445:409:1::0;31692:79:0::1;31790:33:::0;;::::1;31782:85;;;::::0;-1:-1:-1;;;31782:85:0;;9061:2:1;31782:85:0::1;::::0;::::1;9043:21:1::0;9100:2;9080:18;;;9073:30;9139:34;9119:18;;;9112:62;-1:-1:-1;;;9190:18:1;;;9183:38;9238:19;;31782:85:0::1;8859:404:1::0;31782:85:0::1;31880:12;31913:6:::0;31909:90:::1;31923:20:::0;;::::1;31909:90;;;31978:6;;31985:1;31978:9;;;;;;;:::i;:::-;;;;;;;31971:4;:16;;;;:::i;:::-;31964:23:::0;-1:-1:-1;31945:3:0;::::1;::::0;::::1;:::i;:::-;;;;31909:90;;;;32038:4;32019:15;32029:4;32019:9;:15::i;:::-;:23;;32011:63;;;::::0;-1:-1:-1;;;32011:63:0;;8019:2:1;32011:63:0::1;::::0;::::1;8001:21:1::0;8058:2;8038:18;;;8031:30;8097:29;8077:18;;;8070:57;8144:18;;32011:63:0::1;7817:351:1::0;32011:63:0::1;32091:6;32087:110;32101:20:::0;;::::1;32087:110;;;32142:43;32157:4;32162:9;;32172:1;32162:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;32175:6;;32182:1;32175:9;;;;;;;:::i;:::-;;;;;;;32142:14;:43::i;:::-;-1:-1:-1::0;32123:3:0;::::1;::::0;::::1;:::i;:::-;;;;32087:110;;;;31679:535;31566:648:::0;;;;;:::o;8833:148::-;8402:6;;-1:-1:-1;;;;;8402:6:0;6854:10;8402:22;8394:67;;;;-1:-1:-1;;;8394:67:0;;;;;;;:::i;:::-;8924:6:::1;::::0;8903:40:::1;::::0;8940:1:::1;::::0;-1:-1:-1;;;;;8924:6:0::1;::::0;-1:-1:-1;;;;;;;;;;;8903:40:0;8940:1;;8903:40:::1;8954:6;:19:::0;;-1:-1:-1;;;;;;8954:19:0::1;::::0;;8833:148::o;20851:80::-;20903:7;20921;8255:6;;-1:-1:-1;;;;;8255:6:0;;8190:79;29418:272;8402:6;;-1:-1:-1;;;;;8402:6:0;6854:10;8402:22;8394:67;;;;-1:-1:-1;;;8394:67:0;;;;;;;:::i;:::-;29516:7:::1;:21:::0;;;29548:12:::1;:26:::0;;;29585:14:::1;:32:::0;;;29651:2:::1;29636:17:::0;::::1;29628:54;;;::::0;-1:-1:-1;;;29628:54:0;;9600:2:1;29628:54:0::1;::::0;::::1;9582:21:1::0;9639:2;9619:18;;;9612:30;9678:26;9658:18;;;9651:54;9722:18;;29628:54:0::1;9398:348:1::0;9856:305:0;9908:14;;-1:-1:-1;;;;;9908:14:0;9926:10;9908:28;9900:76;;;;-1:-1:-1;;;9900:76:0;;9953:2:1;9900:76:0;;;9935:21:1;9992:2;9972:18;;;9965:30;10031:34;10011:18;;;10004:62;-1:-1:-1;;;10082:18:1;;;10075:33;10125:19;;9900:76:0;9751:399:1;9900:76:0;10013:9;;9995:15;:27;9987:72;;;;-1:-1:-1;;;9987:72:0;;10357:2:1;9987:72:0;;;10339:21:1;10396:2;10376:18;;;10369:30;10435:33;10415:18;;;10408:61;10486:18;;9987:72:0;10155:355:1;9987:72:0;10104:14;;10096:6;;10075:44;;-1:-1:-1;;;;;10104:14:0;;;;10096:6;;;;-1:-1:-1;;;;;;;;;;;10075:44:0;10104:14;;10075:44;10139:14;;10130:6;:23;;-1:-1:-1;;;;;;10130:23:0;-1:-1:-1;;;;;10139:14:0;;;10130:23;;;;;;9856:305::o;21543:156::-;21623:4;21647:44;21661:10;21673:9;21684:6;21647:13;:44::i;22268:172::-;8402:6;;-1:-1:-1;;;;;8402:6:0;6854:10;8402:22;8394:67;;;;-1:-1:-1;;;8394:67:0;;;;;;;:::i;:::-;22428:4:::1;22399:24;22384:12;;:39;;;;:::i;:::-;22383:49;;;;:::i;:::-;22368:12;:64:::0;-1:-1:-1;22268:172:0:o;31205:176::-;31273:7;31300:73;31350:22;:20;:22::i;:::-;31300:45;31313:31;31342:1;31313:24;31323:13;31313:9;:24::i;:::-;:28;;:31::i;:::-;31300:8;;:12;:45::i;:::-;:49;;:73::i;28823:121::-;8402:6;;-1:-1:-1;;;;;8402:6:0;6854:10;8402:22;8394:67;;;;-1:-1:-1;;;8394:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28908:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;28908:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28823:121::o;9553:226::-;8402:6;;-1:-1:-1;;;;;8402:6:0;6854:10;8402:22;8394:67;;;;-1:-1:-1;;;8394:67:0;;;;;;;:::i;:::-;9634:6:::1;::::0;;9617:14:::1;:23:::0;;-1:-1:-1;;;;;;9617:23:0;;::::1;-1:-1:-1::0;;;;;9634:6:0;::::1;9617:23;::::0;;;9651:19:::1;::::0;;9693:22:::1;9711:4:::0;9693:15:::1;:22;:::i;:::-;9681:9;:34:::0;9752:6:::1;::::0;9731:40:::1;::::0;9768:1:::1;::::0;-1:-1:-1;;;;;9752:6:0::1;::::0;-1:-1:-1;;;;;;;;;;;9731:40:0;9768:1;;9731:40:::1;9553:226:::0;:::o;30594:221::-;8402:6;;-1:-1:-1;;;;;8402:6:0;6854:10;8402:22;8394:67;;;;-1:-1:-1;;;8394:67:0;;;;;;;:::i;:::-;30679:13:::1;;30669:7;:23;30666:134;;;30722:13;::::0;30709:10:::1;:26:::0;22708:232;:::o;30666:134::-:1;30768:10;:20:::0;30594:221::o;30088:342::-;8402:6;;-1:-1:-1;;;;;8402:6:0;6854:10;8402:22;8394:67;;;;-1:-1:-1;;;8394:67:0;;;;;;;:::i;:::-;30228:5:::1;30214:10:::0;;-1:-1:-1;;;;;30214:10:0;;::::1;30202:23:::0;;:11:::1;:23;::::0;;;;;;;:31;;-1:-1:-1;;30202:31:0;;::::1;::::0;;;30244:27;;::::1;::::0;;;;;;:34;;;::::1;30214:10:::0;30244:34;;::::1;::::0;;;30291:11:::1;:27:::0;;;;;;:34;;;;::::1;::::0;;::::1;::::0;;;30338:21:::1;:46:::0;;;;;::::1;-1:-1:-1::0;;;;;;30338:46:0;;::::1;;::::0;;30395:27;;;;::::1;;::::0;;30088:342::o;29322:88::-;8402:6;;-1:-1:-1;;;;;8402:6:0;6854:10;8402:22;8394:67;;;;-1:-1:-1;;;8394:67:0;;;;;;;:::i;:::-;29388:8:::1;:14:::0;29322:88::o;9136:244::-;8402:6;;-1:-1:-1;;;;;8402:6:0;6854:10;8402:22;8394:67;;;;-1:-1:-1;;;8394:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9225:22:0;::::1;9217:73;;;::::0;-1:-1:-1;;;9217:73:0;;10717:2:1;9217:73:0::1;::::0;::::1;10699:21:1::0;10756:2;10736:18;;;10729:30;10795:34;10775:18;;;10768:62;-1:-1:-1;;;10846:18:1;;;10839:36;10892:19;;9217:73:0::1;10515:402:1::0;9217:73:0::1;9327:6;::::0;9306:38:::1;::::0;-1:-1:-1;;;;;9306:38:0;;::::1;::::0;9327:6:::1;::::0;-1:-1:-1;;;;;;;;;;;9306:38:0;9327:6:::1;::::0;9306:38:::1;9355:6;:17:::0;;-1:-1:-1;;;;;;9355:17:0::1;-1:-1:-1::0;;;;;9355:17:0;;;::::1;::::0;;;::::1;::::0;;9136:244::o;28952:129::-;8402:6;;-1:-1:-1;;;;;8402:6:0;6854:10;8402:22;8394:67;;;;-1:-1:-1;;;8394:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29041:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;29041:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28952:129::o;3862:240::-;3982:7;4043:12;4035:6;;;;4027:29;;;;-1:-1:-1;;;4027:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;4078:5:0;;;3862:240::o;23015:2335::-;23127:6;;23107:4;;23127:6;;23124:63;;;23143:41;23158:6;23166:9;23177:6;23143:14;:41::i;:::-;23136:48;;;;23124:63;8255:6;;-1:-1:-1;;;;;23202:17:0;;;8255:6;;23202:17;;;;:41;;-1:-1:-1;8255:6:0;;-1:-1:-1;;;;;23223:20:0;;;8255:6;;23223:20;;23202:41;23199:115;;;23267:11;;;;23259:43;;;;-1:-1:-1;;;23259:43:0;;11124:2:1;23259:43:0;;;11106:21:1;11163:2;11143:18;;;11136:30;-1:-1:-1;;;11182:18:1;;;11175:50;11242:18;;23259:43:0;10922:344:1;23259:43:0;23354:13;-1:-1:-1;;;;;23341:26:0;;;;;;;23326:11;23398:26;;23341;23398:53;;;23438:13;-1:-1:-1;;;;;23428:23:0;:6;-1:-1:-1;;;;;23428:23:0;;;23398:53;23379:73;-1:-1:-1;;;;;;23469:26:0;;23490:4;23469:26;;;;:70;;-1:-1:-1;23534:4:0;;-1:-1:-1;;;;;23513:26:0;;;23534:4;;23513:26;;23469:70;:114;;;;;23570:13;-1:-1:-1;;;;;23557:26:0;:9;-1:-1:-1;;;;;23557:26:0;;;23469:114;:155;;;;-1:-1:-1;23614:10:0;;-1:-1:-1;;;;;23601:23:0;;;23614:10;;23601:23;;23469:155;:207;;;;-1:-1:-1;23655:21:0;;-1:-1:-1;;;;;23642:34:0;;;23655:21;;23642:34;;23469:207;23465:481;;;23702:18;23723:20;23733:9;23723;:20::i;:::-;-1:-1:-1;;;;;23762:22:0;;;;;;:11;:22;;;;;;23702:41;;-1:-1:-1;23762:22:0;;23758:177;;23838:15;;23814:19;23827:6;23814:10;:19;:::i;:::-;23813:40;;23805:114;;;;-1:-1:-1;;;23805:114:0;;11473:2:1;23805:114:0;;;11455:21:1;11512:2;11492:18;;;11485:30;11551:34;11531:18;;;11524:62;11622:32;11602:18;;;11595:60;11672:19;;23805:114:0;11271:426:1;23805:114:0;23687:259;23465:481;23972:13;-1:-1:-1;;;;;23962:23:0;:6;-1:-1:-1;;;;;23962:23:0;;:58;;;;-1:-1:-1;24002:18:0;;;;;;;23962:58;:103;;;;-1:-1:-1;;;;;;24038:27:0;;;;;;:16;:27;;;;;;;;24037:28;23962:103;23958:317;;;-1:-1:-1;;;;;24099:24:0;;;;;;:13;:24;;;;;;24126:15;-1:-1:-1;24091:91:0;;;;-1:-1:-1;;;24091:91:0;;11904:2:1;24091:91:0;;;11886:21:1;11943:2;11923:18;;;11916:30;11982:34;11962:18;;;11955:62;-1:-1:-1;;;12033:18:1;;;12026:35;12078:19;;24091:91:0;11702:401:1;24091:91:0;24242:21;;24224:39;;24242:21;;;;;24224:15;:39;:::i;:::-;-1:-1:-1;;;;;24197:24:0;;;;;;:13;:24;;;;;:66;23958:317;-1:-1:-1;;;;;24497:26:0;;;;;;:15;:26;;;;;;;;24493:87;;24540:28;24553:6;24561;24540:12;:28::i;:::-;24639:53;;;;;;;;;;;-1:-1:-1;;;24639:53:0;;;;;;;;-1:-1:-1;;;;;24639:17:0;;-1:-1:-1;24639:17:0;;;:9;:17;;;;;;;;:53;;24661:6;;24639:21;:53::i;:::-;-1:-1:-1;;;;;24619:17:0;;;;;;:9;:17;;;;;:73;24730:6;24866:318;;;;24899:8;;:12;24896:100;;24949:31;24965:6;24973;24949:15;:31::i;:::-;24932:48;;24896:100;24866:318;;;-1:-1:-1;;;;;25957:19:0;;25932:4;25957:19;;;:11;:19;;;;;;;;25956:20;25045:64;;25103:6;25045:64;;;25069:31;25077:6;25085;25093;25069:7;:31::i;:::-;25028:81;;25141:16;:14;:16::i;:::-;25138:35;;;25160:10;:8;:10::i;:::-;-1:-1:-1;;;;;25219:20:0;;;;;;:9;:20;;;;;;:40;;25244:14;25219:24;:40::i;:::-;-1:-1:-1;;;;;25196:20:0;;;;;;;:9;:20;;;;;;;:63;;;;25277:43;;;;;;-1:-1:-1;;;;;;;;;;;25277:43:0;;;25305:14;160:25:1;;148:2;133:18;;14:177;25277:43:0;;;;;;;;-1:-1:-1;25338:4:0;;23015:2335;-1:-1:-1;;;;;;23015:2335:0:o;1964:98::-;2022:7;2049:5;2053:1;2049;:5;:::i;25358:330::-;25488:53;;;;;;;;;;;-1:-1:-1;;;25488:53:0;;;;;;;;-1:-1:-1;;;;;25488:17:0;;25451:4;25488:17;;;:9;:17;;;;;;;:53;;25510:6;;25488:21;:53::i;:::-;-1:-1:-1;;;;;25468:17:0;;;;;;;:9;:17;;;;;;:73;;;;25575:20;;;;;;;:32;;25600:6;25575:24;:32::i;:::-;-1:-1:-1;;;;;25552:20:0;;;;;;;:9;:20;;;;;;;:55;;;;25623:35;;;;;;-1:-1:-1;;;;;;;;;;;25623:35:0;;;25651:6;160:25:1;;148:2;133:18;;14:177;25623:35:0;;;;;;;;-1:-1:-1;25676:4:0;25358:330;;;;;:::o;2321:98::-;2379:7;2406:5;2410:1;2406;:5;:::i;2720:98::-;2778:7;2805:5;2809:1;2805;:5;:::i;25696:166::-;25793:12;;25783:6;:22;;:49;;;-1:-1:-1;;;;;;25809:23:0;;;;;;:15;:23;;;;;;;;25783:49;25775:79;;;;-1:-1:-1;;;25775:79:0;;12443:2:1;25775:79:0;;;12425:21:1;12482:2;12462:18;;;12455:30;-1:-1:-1;;;12501:18:1;;;12494:47;12558:18;;25775:79:0;12241:341:1;26028:406:0;26103:7;26125:17;26145:8;;26125:28;;26164:17;26184:56;26219:14;;26236:3;26219:20;;;;:::i;:::-;26184:30;26210:3;26184:21;:6;26195:9;26184:10;:21::i;:56::-;26306:4;26288:24;;;;:9;:24;;;;;;26164:76;;-1:-1:-1;26288:39:0;;26164:76;26288:28;:39::i;:::-;26279:4;26261:24;;;;:9;:24;;;;;;;:66;;;;26343:42;;-1:-1:-1;;;;;26343:42:0;;;-1:-1:-1;;;;;;;;;;;26343:42:0;;;26375:9;160:25:1;;148:2;133:18;;14:177;26343:42:0;;;;;;;;26405:21;:6;26416:9;26405:10;:21::i;:::-;26398:28;26028:406;-1:-1:-1;;;;;26028:406:0:o;26442:438::-;26522:7;26544:17;26564:6;:35;;26588:11;;26564:35;;;26573:12;;26564:35;26544:55;;26610:17;26630:56;26665:14;;26682:3;26665:20;;;;:::i;:::-;26630:30;26656:3;26630:21;:6;26641:9;26630:10;:21::i;:56::-;26752:4;26734:24;;;;:9;:24;;;;;;26610:76;;-1:-1:-1;26734:39:0;;26610:76;26734:28;:39::i;:::-;26725:4;26707:24;;;;:9;:24;;;;;;;:66;;;;26789:42;;-1:-1:-1;;;;;26789:42:0;;;-1:-1:-1;;;;;;;;;;;26789:42:0;;;26821:9;160:25:1;;148:2;133:18;;14:177;26789:42:0;;;;;;;;26851:21;:6;26862:9;26851:10;:21::i;:::-;26844:28;26442:438;-1:-1:-1;;;;;;26442:438:0:o;26928:206::-;26977:4;27001:10;-1:-1:-1;;;;;27015:13:0;27001:27;;;;;:47;;-1:-1:-1;27042:6:0;;;;27041:7;27001:47;:71;;;;-1:-1:-1;27061:11:0;;;;27001:71;:125;;;;-1:-1:-1;;27113:13:0;;27103:4;27085:24;;;;:9;:24;;;;;;:41;;;26928:206::o;27919:718::-;19321:6;:13;;-1:-1:-1;;19321:13:0;19330:4;19321:13;;;27993:10:::1;::::0;28040:16:::1;::::0;;28054:1:::1;28040:16:::0;;;;;::::1;::::0;;-1:-1:-1;;28040:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;28040:16:0::1;28016:40;;28085:4;28067;28072:1;28067:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;28067:23:0::1;;;-1:-1:-1::0;;;;;28067:23:0::1;;;::::0;::::1;28111:14;-1:-1:-1::0;;;;;28111:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28101:4;28106:1;28101:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28101:31:0;;::::1;:7;::::0;;::::1;::::0;;;;;:31;28203:196:::1;::::0;-1:-1:-1;;;28203:196:0;;28169:21:::1;::::0;28203:14:::1;:65;::::0;::::1;::::0;:196:::1;::::0;28283:12;;28145:21:::1;::::0;28326:4;;28353::::1;::::0;28373:15:::1;::::0;28203:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28412:17;28432:40;28458:13;28432:21;:25;;:40;;;;:::i;:::-;28486:15;28514:10:::0;;28506:58:::1;::::0;28412:60;;-1:-1:-1;28486:15:0;;-1:-1:-1;;;;;28514:10:0;;::::1;::::0;28554:5:::1;::::0;28412:60;;28486:15;28506:58;28486:15;28506:58;28412:60;28514:10;28554:5;28506:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;19339:6:0;:14;;-1:-1:-1;;19339:14:0;;;-1:-1:-1;;;;;;27919:718:0:o;1583:98::-;1641:7;1668:5;1672:1;1668;:5;:::i;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:180::-;808:6;861:2;849:9;840:7;836:23;832:32;829:52;;;877:1;874;867:12;829:52;-1:-1:-1;900:23:1;;749:180;-1:-1:-1;749:180:1:o;934:131::-;-1:-1:-1;;;;;1009:31:1;;999:42;;989:70;;1055:1;1052;1045:12;1070:315;1138:6;1146;1199:2;1187:9;1178:7;1174:23;1170:32;1167:52;;;1215:1;1212;1205:12;1167:52;1254:9;1241:23;1273:31;1298:5;1273:31;:::i;:::-;1323:5;1375:2;1360:18;;;;1347:32;;-1:-1:-1;;;1070:315:1:o;1582:160::-;1647:20;;1703:13;;1696:21;1686:32;;1676:60;;1732:1;1729;1722:12;1676:60;1582:160;;;:::o;1747:180::-;1803:6;1856:2;1844:9;1835:7;1831:23;1827:32;1824:52;;;1872:1;1869;1862:12;1824:52;1895:26;1911:9;1895:26;:::i;1932:248::-;2000:6;2008;2061:2;2049:9;2040:7;2036:23;2032:32;2029:52;;;2077:1;2074;2067:12;2029:52;-1:-1:-1;;2100:23:1;;;2170:2;2155:18;;;2142:32;;-1:-1:-1;1932:248:1:o;2185:456::-;2262:6;2270;2278;2331:2;2319:9;2310:7;2306:23;2302:32;2299:52;;;2347:1;2344;2337:12;2299:52;2386:9;2373:23;2405:31;2430:5;2405:31;:::i;:::-;2455:5;-1:-1:-1;2512:2:1;2497:18;;2484:32;2525:33;2484:32;2525:33;:::i;:::-;2185:456;;2577:7;;-1:-1:-1;;;2631:2:1;2616:18;;;;2603:32;;2185:456::o;2646:337::-;2709:6;2717;2770:2;2758:9;2749:7;2745:23;2741:32;2738:52;;;2786:1;2783;2776:12;2738:52;2809:26;2825:9;2809:26;:::i;:::-;2799:36;;2885:2;2874:9;2870:18;2857:32;2929:4;2922:5;2918:16;2911:5;2908:27;2898:55;;2949:1;2946;2939:12;2898:55;2972:5;2962:15;;;2646:337;;;;;:::o;3177:367::-;3240:8;3250:6;3304:3;3297:4;3289:6;3285:17;3281:27;3271:55;;3322:1;3319;3312:12;3271:55;-1:-1:-1;3345:20:1;;3388:18;3377:30;;3374:50;;;3420:1;3417;3410:12;3374:50;3457:4;3449:6;3445:17;3433:29;;3517:3;3510:4;3500:6;3497:1;3493:14;3485:6;3481:27;3477:38;3474:47;3471:67;;;3534:1;3531;3524:12;3471:67;3177:367;;;;;:::o;3549:640::-;3653:6;3661;3669;3677;3730:2;3718:9;3709:7;3705:23;3701:32;3698:52;;;3746:1;3743;3736:12;3698:52;3785:9;3772:23;3804:31;3829:5;3804:31;:::i;:::-;3854:5;-1:-1:-1;3910:2:1;3895:18;;3882:32;3937:18;3926:30;;3923:50;;;3969:1;3966;3959:12;3923:50;4008:70;4070:7;4061:6;4050:9;4046:22;4008:70;:::i;:::-;3549:640;;4097:8;;-1:-1:-1;3982:96:1;;4179:2;4164:18;4151:32;;3549:640;-1:-1:-1;;;;3549:640:1:o;4402:315::-;4467:6;4475;4528:2;4516:9;4507:7;4503:23;4499:32;4496:52;;;4544:1;4541;4534:12;4496:52;4583:9;4570:23;4602:31;4627:5;4602:31;:::i;:::-;4652:5;-1:-1:-1;4676:35:1;4707:2;4692:18;;4676:35;:::i;:::-;4666:45;;4402:315;;;;;:::o;4722:247::-;4781:6;4834:2;4822:9;4813:7;4809:23;4805:32;4802:52;;;4850:1;4847;4840:12;4802:52;4889:9;4876:23;4908:31;4933:5;4908:31;:::i;5209:908::-;5340:6;5348;5356;5364;5372;5425:2;5413:9;5404:7;5400:23;5396:32;5393:52;;;5441:1;5438;5431:12;5393:52;5480:9;5467:23;5499:31;5524:5;5499:31;:::i;:::-;5549:5;-1:-1:-1;5605:2:1;5590:18;;5577:32;5628:18;5658:14;;;5655:34;;;5685:1;5682;5675:12;5655:34;5724:70;5786:7;5777:6;5766:9;5762:22;5724:70;:::i;:::-;5813:8;;-1:-1:-1;5698:96:1;-1:-1:-1;5901:2:1;5886:18;;5873:32;;-1:-1:-1;5917:16:1;;;5914:36;;;5946:1;5943;5936:12;5914:36;;5985:72;6049:7;6038:8;6027:9;6023:24;5985:72;:::i;:::-;5209:908;;;;-1:-1:-1;5209:908:1;;-1:-1:-1;6076:8:1;;5959:98;5209:908;-1:-1:-1;;;5209:908:1:o;6122:388::-;6190:6;6198;6251:2;6239:9;6230:7;6226:23;6222:32;6219:52;;;6267:1;6264;6257:12;6219:52;6306:9;6293:23;6325:31;6350:5;6325:31;:::i;:::-;6375:5;-1:-1:-1;6432:2:1;6417:18;;6404:32;6445:33;6404:32;6445:33;:::i;6515:356::-;6717:2;6699:21;;;6736:18;;;6729:30;6795:34;6790:2;6775:18;;6768:62;6862:2;6847:18;;6515:356::o;6876:127::-;6937:10;6932:3;6928:20;6925:1;6918:31;6968:4;6965:1;6958:15;6992:4;6989:1;6982:15;7008:168;7081:9;;;7112;;7129:15;;;7123:22;;7109:37;7099:71;;7150:18;;:::i;7181:217::-;7221:1;7247;7237:132;;7291:10;7286:3;7282:20;7279:1;7272:31;7326:4;7323:1;7316:15;7354:4;7351:1;7344:15;7237:132;-1:-1:-1;7383:9:1;;7181:217::o;8173:127::-;8234:10;8229:3;8225:20;8222:1;8215:31;8265:4;8262:1;8255:15;8289:4;8286:1;8279:15;8305:135;8344:3;8365:17;;;8362:43;;8385:18;;:::i;:::-;-1:-1:-1;8432:1:1;8421:13;;8305:135::o;9268:125::-;9333:9;;;9354:10;;;9351:36;;;9367:18;;:::i;12108:128::-;12175:9;;;12196:11;;;12193:37;;;12210:18;;:::i;12719:251::-;12789:6;12842:2;12830:9;12821:7;12817:23;12813:32;12810:52;;;12858:1;12855;12848:12;12810:52;12890:9;12884:16;12909:31;12934:5;12909:31;:::i;12975:980::-;13237:4;13285:3;13274:9;13270:19;13316:6;13305:9;13298:25;13342:2;13380:6;13375:2;13364:9;13360:18;13353:34;13423:3;13418:2;13407:9;13403:18;13396:31;13447:6;13482;13476:13;13513:6;13505;13498:22;13551:3;13540:9;13536:19;13529:26;;13590:2;13582:6;13578:15;13564:29;;13611:1;13621:195;13635:6;13632:1;13629:13;13621:195;;;13700:13;;-1:-1:-1;;;;;13696:39:1;13684:52;;13791:15;;;;13756:12;;;;13732:1;13650:9;13621:195;;;-1:-1:-1;;;;;;;13872:32:1;;;;13867:2;13852:18;;13845:60;-1:-1:-1;;;13936:3:1;13921:19;13914:35;13833:3;12975:980;-1:-1:-1;;;12975:980:1:o

Swarm Source

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