ETH Price: $3,686.66 (+2.65%)

Token

ERC-20: Shikage (SHKG)
 

Overview

Max Total Supply

1,000,000,000 SHKG

Holders

561

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
134,823 SHKG

Value
$0.00
0x32782977d62608e3d1D67B4DaE79d54229d51599
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:
Shikage

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-19
*/

/*
Shikage SHKG

Telegram: https://t.me/shikageofficial
Website: https://shikage.space/
Facebook: https://www.facebook.com/Shikage.ETH/
Instagram: https://www.instagram.com/shikage_token/
Twitter: https://twitter.com/ShikageEth
*/

// SPDX-License-Identifier: None

pragma solidity 0.8.12;


library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * C U ON THE MOON
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

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

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

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

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

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

interface IDEXPair {
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}

interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IDEXRouter {
    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 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;
}

/**
 * @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;

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

interface IAntiSnipe {
  function setTokenOwner(address owner, address pair) external;

  function onPreTransferCheck(
    address from,
    address to,
    uint256 amount
  ) external returns (bool checked);
}

contract Shikage is IERC20, Ownable {
    using Address for address;
    
    address constant DEAD = 0x000000000000000000000000000000000000dEaD;

    string constant _name = "Shikage";
    string constant _symbol = "SHKG";
    uint8 constant _decimals = 9;

    uint256 constant _totalSupply = 1_000_000_000 * (10 ** _decimals);

    //For ease to the end-user these checks do not adjust for burnt tokens and should be set accordingly.
    uint256 public _maxTxAmount = (_totalSupply * 1) / 1000; //0.1%
    uint256 public _maxWalletSize = (_totalSupply * 1) / 500; //0.2%

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => uint256) lastBuy;
    mapping (address => uint256) lastSell;
    mapping (address => uint256) lastSellAmount;

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

    uint256 liquidityFee = 10;
    uint256 marketingFee = 40;
    uint256 devFee = 30;
    uint256 rewardFee = 10;
    uint256 totalFee = 90;
    uint256 sellBias = 0;

    //Higher tax for a period of time from the first purchase on an address
    uint256 sellPercent = 150;
    uint256 sellPeriod = 48 hours;

    uint256 antiDumpTax = 0;
    uint256 antiDumpPeriod = 30 minutes;
    uint256 antiDumpThreshold = 21;
    bool antiDumpReserve0 = true;
    uint256 feeDenominator = 1000;

    address public immutable liquidityReceiver;
    address public immutable rewardHolder;
    address payable public immutable marketingReceiver;
    address payable public immutable devReceiver;

    uint256 targetLiquidity = 25;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public immutable router;
    
    address constant routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    mapping (address => bool) liquidityPools;
    mapping (address => bool) liquidityProviders;

    address public immutable pair;

    uint256 public launchedAt;
    uint256 public launchedTime;
 
    IAntiSnipe public antisnipe;
    bool public protectionEnabled = true;
    bool public protectionDisabled = false;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 400; //0.25%
    uint256 public swapMinimum = _totalSupply / 10000; //0.01%
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor (address _lp, address _marketing, address _dev, address _rewards) {
        //Suggest setting liquidity receiver to DEAD to lock funds in the project and avoid centralization
        liquidityReceiver = _lp;
        marketingReceiver = payable(_marketing);
        devReceiver = payable(_dev);
        rewardHolder = _rewards;

        router = IDEXRouter(routerAddress);
        pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this));
        liquidityPools[pair] = true;
        _allowances[owner()][routerAddress] = type(uint256).max;
        _allowances[address(this)][routerAddress] = type(uint256).max;
        
        isFeeExempt[owner()] = true;
        isFeeExempt[rewardHolder] = true;
        liquidityProviders[owner()] = true;

        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[rewardHolder] = true;
        isTxLimitExempt[routerAddress] = true;

        _balances[owner()] = _totalSupply;
        emit Transfer(address(0), owner(), _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external pure override returns (uint256) { return _totalSupply; }
    function decimals() external pure returns (uint8) { return _decimals; }
    function symbol() external pure returns (string memory) { return _symbol; }
    function name() external pure returns (string memory) { return _name; }
    function getOwner() external view 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 increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }

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

        return true;
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function 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] - amount;
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(_balances[sender] >= amount, "Insufficient balance");
        require(amount > 0, "Zero amount transferred");

        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        checkTxLimit(sender, amount);
        
        if (!liquidityPools[recipient] && recipient != DEAD) {
            if (!isTxLimitExempt[recipient]) checkWalletLimit(recipient, amount);
        }

        if(!launched()){ require(liquidityProviders[sender] || liquidityProviders[recipient], "Contract not launched yet."); }

        _balances[sender] -= amount;

        uint256 amountReceived = shouldTakeFee(sender) && shouldTakeFee(recipient) ? takeFee(sender, recipient, amount) : amount;
        
        if(shouldSwapBack(sender, recipient)){ if (amount > 0) swapBack(amount); }
        
        _balances[recipient] += amountReceived;
            
        if(launched() && protectionEnabled)
            antisnipe.onPreTransferCheck(sender, recipient, amount);

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

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] -= amount;
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }
    
    function checkWalletLimit(address recipient, uint256 amount) internal view {
        uint256 walletLimit = _maxWalletSize;
        require(_balances[recipient] + amount <= walletLimit, "Transfer amount exceeds the bag size.");
    }

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

    function getTotalFee(bool selling, bool inHighPeriod) public view returns (uint256) {
        if(launchedAt == block.number){ return feeDenominator - 1; }
        if (selling) return inHighPeriod ? (totalFee * sellPercent) / 100 : totalFee + sellBias;
        return inHighPeriod ? (totalFee * sellPercent) / 100 : totalFee - sellBias;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = 0;
        bool highSellPeriod = !liquidityPools[sender] && lastBuy[sender] + sellPeriod > block.timestamp;
        if(liquidityPools[recipient] && antiDumpTax > 0) {
            (uint112 reserve0, uint112 reserve1,) = IDEXPair(pair).getReserves();
            uint256 impactEstimate = amount * 1000 / ((antiDumpReserve0 ? reserve0 : reserve1) + amount);
            
            if (block.timestamp > lastSell[sender] + antiDumpPeriod) {
                lastSell[sender] = block.timestamp;
                lastSellAmount[sender] = 0;
            }
            
            lastSellAmount[sender] += impactEstimate;
            
            if (lastSellAmount[sender] >= antiDumpThreshold) {
                feeAmount = ((amount * totalFee * antiDumpTax) / 100) / feeDenominator;
            }
        }

        if (feeAmount == 0)
            feeAmount = (amount * getTotalFee(liquidityPools[recipient], highSellPeriod)) / feeDenominator;
        
        if (liquidityPools[sender] && lastBuy[recipient] == 0)
            lastBuy[recipient] = block.timestamp;

        uint256 rewards = 0;
        if (rewardFee > 0) {
            rewards = feeAmount * rewardFee / totalFee;
            feeAmount -= rewards;
            _balances[rewardHolder] += feeAmount;
            emit Transfer(sender, rewardHolder, rewards);
        }
        _balances[address(this)] += feeAmount;
        emit Transfer(sender, address(this), feeAmount);

        return amount - (feeAmount + rewards);
    }

    function shouldSwapBack(address sender, address recipient) internal view returns (bool) {
        return !liquidityPools[sender]
        && !isFeeExempt[sender]
        && !inSwap
        && swapEnabled
        && liquidityPools[recipient]
        && _balances[address(this)] >= swapMinimum &&
        totalFee > 0;
    }

    function swapBack(uint256 amount) internal swapping {
        uint256 amountToSwap = amount < swapThreshold ? amount : swapThreshold;
        if (_balances[address(this)] < amountToSwap) amountToSwap = _balances[address(this)];
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = ((amountToSwap * dynamicLiquidityFee) / (totalFee - rewardFee)) / 2;
        amountToSwap -= amountToLiquify;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        
        //Guaranteed swap desired to prevent trade blockages
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 contractBalance = address(this).balance;
        uint256 totalETHFee = totalFee - (dynamicLiquidityFee + rewardFee) / 2;

        uint256 amountLiquidity = (contractBalance * dynamicLiquidityFee) / totalETHFee / 2;
        uint256 amountMarketing = (contractBalance * marketingFee) / totalETHFee;
        uint256 amountDev = contractBalance - (amountLiquidity + amountMarketing);

        if(amountToLiquify > 0) {
            //Guaranteed swap desired to prevent trade blockages, return values ignored
            router.addLiquidityETH{value: amountLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                liquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountLiquidity, amountToLiquify);
        }
        
        if (amountMarketing > 0)
            marketingReceiver.transfer(amountMarketing);
            
        if (amountDev > 0)
            devReceiver.transfer(amountDev);

    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply - (balanceOf(DEAD) + balanceOf(address(0)));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return (accuracy * balanceOf(pair)) / getCirculatingSupply();
    }

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

    function transferOwnership(address newOwner) public virtual override onlyOwner {
        isFeeExempt[owner()] = false;
        isTxLimitExempt[owner()] = false;
        liquidityProviders[owner()] = false;
        _allowances[owner()][routerAddress] = 0;
        super.transferOwnership(newOwner);
        isFeeExempt[newOwner] = true;
        isTxLimitExempt[newOwner] = true;
        liquidityProviders[newOwner] = true;
        _allowances[newOwner][routerAddress] = type(uint256).max;
    }

    function renounceOwnership() public virtual override onlyOwner {
        isFeeExempt[owner()] = false;
        isTxLimitExempt[owner()] = false;
        liquidityProviders[owner()] = false;
        _allowances[owner()][routerAddress] = 0;
        super.renounceOwnership();
    }

    function setProtectionEnabled(bool _protect) external onlyOwner {
        if (_protect)
            require(!protectionDisabled, "Protection disabled");
        protectionEnabled = _protect;
        emit ProtectionToggle(_protect);
    }
    
    function setProtection(address _protection, bool _call) external onlyOwner {
        if (_protection != address(antisnipe)){
            require(!protectionDisabled, "Protection disabled");
            antisnipe = IAntiSnipe(_protection);
        }
        if (_call)
            antisnipe.setTokenOwner(address(this), pair);
        
        emit ProtectionSet(_protection);
    }
    
    function disableProtection() external onlyOwner {
        protectionDisabled = true;
        emit ProtectionDisabled();
    }
    
    function setLiquidityProvider(address _provider) external onlyOwner {
        require(_provider != pair && _provider != routerAddress, "Can't alter trading contracts in this manner.");
        isFeeExempt[_provider] = true;
        liquidityProviders[_provider] = true;
        isTxLimitExempt[_provider] = true;
        emit LiquidityProviderSet(_provider);
    }

    function setSellPeriod(uint256 _sellPercentIncrease, uint256 _period) external onlyOwner {
        require((totalFee * _sellPercentIncrease) / 100 <= 400, "Sell tax too high");
        require(_sellPercentIncrease >= 100, "Can't make sells cheaper with this");
        require(antiDumpTax == 0 || _sellPercentIncrease <= antiDumpTax, "High period tax clashes with anti-dump tax");
        require(_period <= 7 days, "Sell period too long");
        sellPercent = _sellPercentIncrease;
        sellPeriod = _period;
        emit SellPeriodSet(_sellPercentIncrease, _period);
    }

    function setAntiDumpTax(uint256 _tax, uint256 _period, uint256 _threshold, bool _reserve0) external onlyOwner {
        require(_threshold >= 10 && _tax <= 400 && (_tax == 0 || _tax >= sellPercent) && _period <= 1 hours, "Parameters out of bounds");
        antiDumpTax = _tax;
        antiDumpPeriod = _period;
        antiDumpThreshold = _threshold;
        antiDumpReserve0 = _reserve0;
        emit AntiDumpTaxSet(_tax, _period, _threshold);
    }

    function launch() external onlyOwner {
        require (launchedAt == 0);
        launchedAt = block.number;
        launchedTime = block.timestamp;
        emit TradingLaunched();
    }

    function setTxLimit(uint256 numerator, uint256 divisor) external onlyOwner {
        require(numerator > 0 && divisor > 0 && (numerator * 1000) / divisor >= 5, "Transaction limits too low");
        _maxTxAmount = (_totalSupply * numerator) / divisor;
        emit TransactionLimitSet(_maxTxAmount);
    }
    
    function setMaxWallet(uint256 numerator, uint256 divisor) external onlyOwner() {
        require(divisor > 0 && divisor <= 10000, "Divisor must be greater than zero");
        _maxWalletSize = (_totalSupply * numerator) / divisor;
        emit MaxWalletSet(_maxWalletSize);
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        require(holder != address(0), "Invalid address");
        isFeeExempt[holder] = exempt;
        emit FeeExemptSet(holder, exempt);
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        require(holder != address(0), "Invalid address");
        isTxLimitExempt[holder] = exempt;
        emit TrasactionLimitExemptSet(holder, exempt);
    }

    function setFees(uint256 _liquidityFee, uint256 _marketingFee, uint256 _devFee, uint256 _rewardFee, uint256 _sellBias, uint256 _feeDenominator) external onlyOwner {
        require((_liquidityFee / 2) * 2 == _liquidityFee, "Liquidity fee must be an even number due to rounding");
        liquidityFee = _liquidityFee;
        marketingFee = _marketingFee;
        devFee = _devFee;
        rewardFee = _rewardFee;
        sellBias = _sellBias;
        totalFee = _liquidityFee + _marketingFee + _devFee + _rewardFee;
        feeDenominator = _feeDenominator;
        require(totalFee <= feeDenominator / 4, "Fees too high");
        require(sellBias <= totalFee, "Incorrect sell bias");
        emit FeesSet(totalFee, feeDenominator, sellBias);
    }

    function setSwapBackSettings(bool _enabled, uint256 _denominator, uint256 _denominatorMin) external onlyOwner {
        require(_denominator > 0 && _denominatorMin > 0, "Denominators must be greater than 0");
        swapEnabled = _enabled;
        swapMinimum = _totalSupply / _denominatorMin;
        swapThreshold = _totalSupply / _denominator;
        emit SwapSettingsSet(swapMinimum, swapThreshold, swapEnabled);
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
        emit TargetLiquiditySet(_target * 100 / _denominator);
    }

    function addLiquidityPool(address _pool, bool _enabled) external onlyOwner {
        require(_pool != address(0), "Invalid address");
        liquidityPools[_pool] = _enabled;
        emit LiquidityPoolSet(_pool, _enabled);
    }

	function airdrop(address[] calldata _addresses, uint256[] calldata _amount) external onlyOwner
    {
        require(_addresses.length == _amount.length, "Array lengths don't match");
        bool previousSwap = swapEnabled;
        swapEnabled = false;
        //This function may run out of gas intentionally to prevent partial airdrops
        for (uint256 i = 0; i < _addresses.length; i++) {
            require(!liquidityPools[_addresses[i]] && _addresses[i] != address(0), "Can't airdrop the liquidity pool or address 0");
            _transferFrom(msg.sender, _addresses[i], _amount[i] * (10 ** _decimals));
            lastBuy[_addresses[i]] = block.timestamp;
        }
        swapEnabled = previousSwap;
        emit AirdropSent(msg.sender);
    }

    event AutoLiquify(uint256 amount, uint256 amountToken);
    event ProtectionSet(address indexed protection);
    event ProtectionDisabled();
    event LiquidityProviderSet(address indexed provider);
    event SellPeriodSet(uint256 percent, uint256 period);
    event TradingLaunched();
    event TransactionLimitSet(uint256 limit);
    event MaxWalletSet(uint256 limit);
    event FeeExemptSet(address indexed wallet, bool isExempt);
    event TrasactionLimitExemptSet(address indexed wallet, bool isExempt);
    event FeesSet(uint256 totalFees, uint256 denominator, uint256 sellBias);
    event SwapSettingsSet(uint256 minimum, uint256 maximum, bool enabled);
    event LiquidityPoolSet(address indexed pool, bool enabled);
    event AirdropSent(address indexed from);
    event AntiDumpTaxSet(uint256 rate, uint256 period, uint256 threshold);
    event TargetLiquiditySet(uint256 percent);
    event ProtectionToggle(bool isEnabled);
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_lp","type":"address"},{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_dev","type":"address"},{"internalType":"address","name":"_rewards","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"}],"name":"AirdropSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"period","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"AntiDumpTaxSet","type":"event"},{"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":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"isExempt","type":"bool"}],"name":"FeeExemptSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"denominator","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellBias","type":"uint256"}],"name":"FeesSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"LiquidityPoolSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"}],"name":"LiquidityProviderSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"limit","type":"uint256"}],"name":"MaxWalletSet","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":[],"name":"ProtectionDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"protection","type":"address"}],"name":"ProtectionSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isEnabled","type":"bool"}],"name":"ProtectionToggle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"period","type":"uint256"}],"name":"SellPeriodSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minimum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maximum","type":"uint256"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapSettingsSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"}],"name":"TargetLiquiditySet","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingLaunched","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"limit","type":"uint256"}],"name":"TransactionLimitSet","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"isExempt","type":"bool"}],"name":"TrasactionLimitExemptSet","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"addLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"airdrop","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":[],"name":"antisnipe","outputs":[{"internalType":"contract IAntiSnipe","name":"","type":"address"}],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableProtection","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"bool","name":"selling","type":"bool"},{"internalType":"bool","name":"inHighPeriod","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardHolder","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"},{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"bool","name":"_reserve0","type":"bool"}],"name":"setAntiDumpTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_rewardFee","type":"uint256"},{"internalType":"uint256","name":"_sellBias","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","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":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_provider","type":"address"}],"name":"setLiquidityProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_protection","type":"address"},{"internalType":"bool","name":"_call","type":"bool"}],"name":"setProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_protect","type":"bool"}],"name":"setProtectionEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellPercentIncrease","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"setSellPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_denominator","type":"uint256"},{"internalType":"uint256","name":"_denominatorMin","type":"uint256"}],"name":"setSwapBackSettings","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":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMinimum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","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":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6101406040526103e8620000166009600a62000719565b6200002690633b9aca0062000731565b6200003390600162000731565b6200003f919062000753565b6001556101f4620000536009600a62000719565b6200006390633b9aca0062000731565b6200007090600162000731565b6200007c919062000753565b600255600a8080556028600b55601e600c55600d819055605a600e556000600f81905560966010556202a30060115560125561070860135560156014819055805460ff191660011790556103e860165560196017556064601855601d80546201000160a01b62ffffff60a01b1990911617905561019090620001019060099062000719565b6200011190633b9aca0062000731565b6200011d919062000753565b601e55612710620001316009600a62000719565b6200014190633b9aca0062000731565b6200014d919062000753565b601f553480156200015d57600080fd5b506040516200431838038062004318833981016040819052620001809162000793565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b0380851660805283811660c05282811660e052811660a052737a250d5630b4cf539739df2c5dacb4c659f2488d6101008190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000237573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025d9190620007f0565b6001600160a01b031663c9c65396610100516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d39190620007f0565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801562000320573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003469190620007f0565b6001600160a01b03166101208190526000908152601960205260408120805460ff1916600117905560001990600490620003886000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d80835290845282822094909455308152600483528181209381529290915281206000199055600190600890620003f96000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560a05190911681526008909252812080549092166001908117909255601a90620004596000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260099283905290812080549093166001908117909355620004b16000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560a0519091168152600992839052908120805484166001908117909155737a250d5630b4cf539739df2c5dacb4c659f2488d9091527fbaa441ac52505693dd98c7dd2f5bbf8f9349b7da9de72f9d52e5cac70e7da8ce8054909316179091556200054b90600a62000719565b6200055b90633b9aca0062000731565b60036000620005726000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556200059f6000546001600160a01b031690565b6001600160a01b031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620005d96009600a62000719565b620005e990633b9aca0062000731565b60405190815260200160405180910390a3505050506200080e565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200065b5781600019048211156200063f576200063f62000604565b808516156200064d57918102915b93841c93908002906200061f565b509250929050565b600082620006745750600162000713565b81620006835750600062000713565b81600181146200069c5760028114620006a757620006c7565b600191505062000713565b60ff841115620006bb57620006bb62000604565b50506001821b62000713565b5060208310610133831016604e8410600b8410161715620006ec575081810a62000713565b620006f883836200061a565b80600019048211156200070f576200070f62000604565b0290505b92915050565b60006200072a60ff84168362000663565b9392505050565b60008160001904831182151516156200074e576200074e62000604565b500290565b6000826200077157634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160a01b03811681146200078e57600080fd5b919050565b60008060008060808587031215620007aa57600080fd5b620007b58562000776565b9350620007c56020860162000776565b9250620007d56040860162000776565b9150620007e56060860162000776565b905092959194509250565b6000602082840312156200080357600080fd5b6200072a8262000776565b60805160a05160c05160e0516101005161012051613a66620008b26000396000818161080701528181611cdf01528181611df301528181611ebd0152612a7b0152600081816109ee01528181612fda0152818161309201526131f201526000818161065c015261330f0152600081816107d301526132b101526000818161057101528181612cff0152612d4b01526000818161049f01526131c40152613a666000f3fe6080604052600436106103035760003560e01c8063715018a611610190578063abe57e70116100dc578063d5d035f511610095578063f2fde38b1161006f578063f2fde38b14610986578063f84ba65d146109a6578063f8821a62146109c6578063f887ea40146109dc57600080fd5b8063d5d035f514610900578063dd62ed3e14610920578063e624c4bc1461096657600080fd5b8063abe57e7014610849578063bf56b37114610869578063c5363caa1461087f578063ceafd6da146108a0578063d0889358146108c0578063d51ed1c8146108e057600080fd5b80638da5cb5b11610149578063a457c2d711610123578063a457c2d7146107a1578063a5949bcf146107c1578063a8aa1b31146107f5578063a9059cbb1461082957600080fd5b80638da5cb5b146107405780638f9a55c01461075e57806395d89b411461077457600080fd5b8063715018a6146106b45780637516baec146106c95780637d1db4a5146106ea57806386f6c3c114610700578063882cfb3f14610720578063893d20e81461074057600080fd5b8063313ce5671161024f5780635804f1e41161020857806367243482116101e257806367243482146106095780636ddd1713146106295780636f9a880e1461064a57806370a082311461067e57600080fd5b80635804f1e4146105b35780636419b6f9146105c9578063658d4b7f146105e957600080fd5b8063313ce567146104ee578063395093511461050a578063421dd7c71461052a578063492a937b1461053f578063569c93d21461055f578063571ac8b01461059357600080fd5b80631161ae39116102bc578063201e799111610296578063201e79911461044d57806323b872dd1461046d578063264d26dd1461048d5780632b112e49146104d957600080fd5b80631161ae39146103f857806318160ddd146104185780631faf723b1461042d57600080fd5b806301339c211461030f5780630445b6671461032657806306fdde031461034f578063095ea7b3146103885780630e049c54146103b85780630f4f7bfe146103d857600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610a10565b005b34801561033257600080fd5b5061033c601e5481565b6040519081526020015b60405180910390f35b34801561035b57600080fd5b506040805180820190915260078152665368696b61676560c81b60208201525b6040516103469190613370565b34801561039457600080fd5b506103a86103a33660046133dd565b610a83565b6040519015158152602001610346565b3480156103c457600080fd5b506103246103d3366004613417565b610af0565b3480156103e457600080fd5b506103246103f3366004613458565b610c01565b34801561040457600080fd5b506103a8610413366004613458565b610de8565b34801561042457600080fd5b5061033c610dfc565b34801561043957600080fd5b50610324610448366004613458565b610e1d565b34801561045957600080fd5b50610324610468366004613458565b610f2b565b34801561047957600080fd5b506103a861048836600461347a565b610fa4565b34801561049957600080fd5b506104c17f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610346565b3480156104e557600080fd5b5061033c611039565b3480156104fa57600080fd5b5060405160098152602001610346565b34801561051657600080fd5b506103a86105253660046133dd565b6110b9565b34801561053657600080fd5b506103246110fe565b34801561054b57600080fd5b5061032461055a3660046134bb565b611166565b34801561056b57600080fd5b506104c17f000000000000000000000000000000000000000000000000000000000000000081565b34801561059f57600080fd5b506103a86105ae3660046134f4565b611216565b3480156105bf57600080fd5b5061033c601c5481565b3480156105d557600080fd5b5061033c6105e4366004613511565b611224565b3480156105f557600080fd5b506103246106043660046134bb565b6112b8565b34801561061557600080fd5b5061032461062436600461357b565b611360565b34801561063557600080fd5b50601d546103a890600160b01b900460ff1681565b34801561065657600080fd5b506104c17f000000000000000000000000000000000000000000000000000000000000000081565b34801561068a57600080fd5b5061033c6106993660046134f4565b6001600160a01b031660009081526003602052604090205490565b3480156106c057600080fd5b506103246115e6565b3480156106d557600080fd5b50601d546103a890600160a01b900460ff1681565b3480156106f657600080fd5b5061033c60015481565b34801561070c57600080fd5b5061032461071b3660046135e7565b611733565b34801561072c57600080fd5b50601d546104c1906001600160a01b031681565b34801561074c57600080fd5b506000546001600160a01b03166104c1565b34801561076a57600080fd5b5061033c60025481565b34801561078057600080fd5b5060408051808201909152600481526353484b4760e01b602082015261037b565b3480156107ad57600080fd5b506103a86107bc3660046133dd565b611904565b3480156107cd57600080fd5b506104c17f000000000000000000000000000000000000000000000000000000000000000081565b34801561080157600080fd5b506104c17f000000000000000000000000000000000000000000000000000000000000000081565b34801561083557600080fd5b506103a86108443660046133dd565b61199d565b34801561085557600080fd5b50610324610864366004613458565b6119aa565b34801561087557600080fd5b5061033c601b5481565b34801561088b57600080fd5b50601d546103a890600160a81b900460ff1681565b3480156108ac57600080fd5b506103246108bb36600461362a565b611aa1565b3480156108cc57600080fd5b506103246108db366004613647565b611b79565b3480156108ec57600080fd5b5061033c6108fb36600461367c565b611ccb565b34801561090c57600080fd5b5061032461091b3660046134bb565b611d22565b34801561092c57600080fd5b5061033c61093b366004613695565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561097257600080fd5b506103246109813660046134f4565b611e91565b34801561099257600080fd5b506103246109a13660046134f4565b611fee565b3480156109b257600080fd5b506103246109c13660046134bb565b6121ad565b3480156109d257600080fd5b5061033c601f5481565b3480156109e857600080fd5b506104c17f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b03163314610a435760405162461bcd60e51b8152600401610a3a906136c3565b60405180910390fd5b601b5415610a5057600080fd5b43601b5542601c556040517fdd6364d871cb6036ca605660d590886ab96eb55b7dbb0051be1901a75794641590600090a1565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ade9086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610b1a5760405162461bcd60e51b8152600401610a3a906136c3565b600a8210158015610b2d57506101908411155b8015610b435750831580610b4357506010548410155b8015610b515750610e108311155b610b9d5760405162461bcd60e51b815260206004820152601860248201527f506172616d6574657273206f7574206f6620626f756e647300000000000000006044820152606401610a3a565b6012849055601383905560148290556015805460ff191682151517905560408051858152602081018590529081018390527fafe6c6a9d14f1da6e5642b5fa6236c37e9783e34bfe9c08cee0529af4c17bce59060600160405180910390a150505050565b6000546001600160a01b03163314610c2b5760405162461bcd60e51b8152600401610a3a906136c3565b610190606483600e54610c3e919061370e565b610c48919061372d565b1115610c8a5760405162461bcd60e51b81526020600482015260116024820152700a6cad8d840e8c2f040e8dede40d0d2ced607b1b6044820152606401610a3a565b6064821015610ce65760405162461bcd60e51b815260206004820152602260248201527f43616e2774206d616b652073656c6c7320636865617065722077697468207468604482015261697360f01b6064820152608401610a3a565b6012541580610cf757506012548211155b610d565760405162461bcd60e51b815260206004820152602a60248201527f4869676820706572696f642074617820636c6173686573207769746820616e746044820152690d25ac8eadae040e8c2f60b31b6064820152608401610a3a565b62093a80811115610da05760405162461bcd60e51b815260206004820152601460248201527353656c6c20706572696f6420746f6f206c6f6e6760601b6044820152606401610a3a565b6010829055601181905560408051838152602081018390527fb45fbcb6061be03b34994516d5d8d4e38b21641de36e23c8f81217f153a4dbd891015b60405180910390a15050565b600082610df483611ccb565b119392505050565b6000610e0a6009600a613833565b610e1890633b9aca0061370e565b905090565b6000546001600160a01b03163314610e475760405162461bcd60e51b8152600401610a3a906136c3565b600082118015610e575750600081115b8015610e7a5750600581610e6d846103e861370e565b610e77919061372d565b10155b610ec65760405162461bcd60e51b815260206004820152601a60248201527f5472616e73616374696f6e206c696d69747320746f6f206c6f770000000000006044820152606401610a3a565b8082610ed46009600a613833565b610ee290633b9aca0061370e565b610eec919061370e565b610ef6919061372d565b60018190556040519081527f87d6222e218f03ac3f7ce8a320052f10fc0c196c444a04e403ccc4bbfb6a362490602001610ddc565b6000546001600160a01b03163314610f555760405162461bcd60e51b8152600401610a3a906136c3565b601782905560188190557fcbbf6bb708b8b7c4daa8d4e1088db9965d8167c3fcb6bc1a21147bbca33c12cf81610f8c84606461370e565b610f96919061372d565b604051908152602001610ddc565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914611024576001600160a01b0384166000908152600460209081526040808320338452909152902054610fff908390613842565b6001600160a01b03851660009081526004602090815260408083203384529091529020555b61102f848484612255565b90505b9392505050565b60036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff5461dead60009081527f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c54909161109591613859565b6110a16009600a613833565b6110af90633b9aca0061370e565b610e189190613842565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916110f59185906110f0908690613859565b6125d7565b50600192915050565b6000546001600160a01b031633146111285760405162461bcd60e51b8152600401610a3a906136c3565b601d805460ff60a81b1916600160a81b1790556040517fdd849d4f0ff64ab5cfef73f22ec29822c2713550b40bcded093282cc28f86c6090600090a1565b6000546001600160a01b031633146111905760405162461bcd60e51b8152600401610a3a906136c3565b6001600160a01b0382166111b65760405162461bcd60e51b8152600401610a3a90613871565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527ffa4a2b2457d2065452473bed7d55c8fa2f65fc4a1eff1ebdaf14a1b7281e777391015b60405180910390a25050565b6000610aea82600019610a83565b600043601b54141561124657600160165461123f9190613842565b9050610aea565b8215611282578161126657600f54600e546112619190613859565b61123f565b6064601054600e54611278919061370e565b61123f919061372d565b8161129c57600f54600e546112979190613842565b611032565b6064601054600e546112ae919061370e565b611032919061372d565b6000546001600160a01b031633146112e25760405162461bcd60e51b8152600401610a3a906136c3565b6001600160a01b0382166113085760405162461bcd60e51b8152600401610a3a90613871565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f5a8cf666a272afd6dec6788d33967c676fffa92e289eee1b38172982c4b4914d910161120a565b6000546001600160a01b0316331461138a5760405162461bcd60e51b8152600401610a3a906136c3565b8281146113d95760405162461bcd60e51b815260206004820152601960248201527f4172726179206c656e6774687320646f6e2774206d61746368000000000000006044820152606401610a3a565b601d805460ff60b01b198116909155600160b01b900460ff1660005b8481101561159c57601960008787848181106114135761141361389a565b905060200201602081019061142891906134f4565b6001600160a01b0316815260208101919091526040016000205460ff16158015611482575060008686838181106114615761146161389a565b905060200201602081019061147691906134f4565b6001600160a01b031614155b6114e45760405162461bcd60e51b815260206004820152602d60248201527f43616e27742061697264726f7020746865206c697175696469747920706f6f6c60448201526c0206f722061646472657373203609c1b6064820152608401610a3a565b611543338787848181106114fa576114fa61389a565b905060200201602081019061150f91906134f4565b61151b6009600a613833565b87878681811061152d5761152d61389a565b9050602002013561153e919061370e565b612255565b50426005600088888581811061155b5761155b61389a565b905060200201602081019061157091906134f4565b6001600160a01b0316815260208101919091526040016000205580611594816138b0565b9150506113f5565b50601d805460ff60b01b1916600160b01b8315150217905560405133907faf1f3c8f96bb5b6a68b1ca0c51b6ba0250cf4a56f5d088071f5fcf710707727390600090a25050505050565b6000546001600160a01b031633146116105760405162461bcd60e51b8152600401610a3a906136c3565b6000600860006116286000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff199093169290921790915560098161166a6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155601a816116ac6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556004816116ee6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d82529092529020556117316126fb565b565b6000546001600160a01b0316331461175d5760405162461bcd60e51b8152600401610a3a906136c3565b8561176960028261372d565b61177490600261370e565b146117de5760405162461bcd60e51b815260206004820152603460248201527f4c697175696469747920666565206d75737420626520616e206576656e206e756044820152736d6265722064756520746f20726f756e64696e6760601b6064820152608401610a3a565b600a869055600b859055600c849055600d839055600f82905582846118038789613859565b61180d9190613859565b6118179190613859565b600e55601681905561182a60048261372d565b600e54111561186b5760405162461bcd60e51b815260206004820152600d60248201526c08ccacae640e8dede40d0d2ced609b1b6044820152606401610a3a565b600e54600f5411156118b55760405162461bcd60e51b8152602060048201526013602482015272496e636f72726563742073656c6c206269617360681b6044820152606401610a3a565b600e54601654600f5460408051938452602084019290925282820152517f01bae858246c904512695a3f6d48ab88abb7a0192fdd7c53b043e60317795f459181900360600190a1505050505050565b3360009081526004602090815260408083206001600160a01b0386168452909152812054828110156119865760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a3a565b61199333858584036125d7565b5060019392505050565b6000611032338484612255565b6000546001600160a01b031633146119d45760405162461bcd60e51b8152600401610a3a906136c3565b6000811180156119e657506127108111155b611a3c5760405162461bcd60e51b815260206004820152602160248201527f44697669736f72206d7573742062652067726561746572207468616e207a65726044820152606f60f81b6064820152608401610a3a565b8082611a4a6009600a613833565b611a5890633b9aca0061370e565b611a62919061370e565b611a6c919061372d565b60028190556040519081527fee4f0b388531b3b3cbe9a0fc02e17997304dcde94d38db4c65a1e896f7aca78890602001610ddc565b6000546001600160a01b03163314611acb5760405162461bcd60e51b8152600401610a3a906136c3565b8015611b2157601d54600160a81b900460ff1615611b215760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b6044820152606401610a3a565b601d8054821515600160a01b0260ff60a01b199091161790556040517f96b2bfe55fa5f4032b9b4d922bd97bb17a7f025fce7fcecaefc955fd0111a96690611b6e90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611ba35760405162461bcd60e51b8152600401610a3a906136c3565b600082118015611bb35750600081115b611c0b5760405162461bcd60e51b815260206004820152602360248201527f44656e6f6d696e61746f7273206d75737420626520677265617465722074686160448201526206e20360ec1b6064820152608401610a3a565b601d805460ff60b01b1916600160b01b8515150217905580611c2f6009600a613833565b611c3d90633b9aca0061370e565b611c47919061372d565b601f5581611c576009600a613833565b611c6590633b9aca0061370e565b611c6f919061372d565b601e819055601f54601d5460408051928352602083019390935260ff600160b01b9091041615158183015290517faa199f5aab08ad4ddee0140c8e7d13a4bebb822550aeb3d16e5f7bc485fba0f99181900360600190a1505050565b6000611cd5611039565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600090815260036020526040902054611d18908461370e565b610aea919061372d565b6000546001600160a01b03163314611d4c5760405162461bcd60e51b8152600401610a3a906136c3565b601d546001600160a01b03838116911614611dcd57601d54600160a81b900460ff1615611db15760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b6044820152606401610a3a565b601d80546001600160a01b0319166001600160a01b0384161790555b8015611e5957601d546040516366812dbb60e11b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301529091169063cd025b7690604401600060405180830381600087803b158015611e4057600080fd5b505af1158015611e54573d6000803e3d6000fd5b505050505b6040516001600160a01b038316907f1ccf813789899d0a52466f1f5c4cabc2820e6818ad4eaca73837528653d00c3c90600090a25050565b6000546001600160a01b03163314611ebb5760405162461bcd60e51b8152600401610a3a906136c3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614158015611f1a57506001600160a01b038116737a250d5630b4cf539739df2c5dacb4c659f2488d14155b611f7c5760405162461bcd60e51b815260206004820152602d60248201527f43616e277420616c7465722074726164696e6720636f6e74726163747320696e60448201526c103a3434b99036b0b73732b91760991b6064820152608401610a3a565b6001600160a01b03811660008181526008602090815260408083208054600160ff199182168117909255601a845282852080548216831790556009909352818420805490931617909155517f96aa4fc7394e306de889dcb1b2730f2ff39e53b54dd11275bf141447c97802299190a250565b6000546001600160a01b031633146120185760405162461bcd60e51b8152600401610a3a906136c3565b6000600860006120306000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556009816120726000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155601a816120b46000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556004816120f66000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d825290925290205561213a8161276f565b6001600160a01b031660009081526008602090815260408083208054600160ff199182168117909255600984528285208054821683179055601a84528285208054909116909117905560048252808320737a250d5630b4cf539739df2c5dacb4c659f2488d845290915290206000199055565b6000546001600160a01b031633146121d75760405162461bcd60e51b8152600401610a3a906136c3565b6001600160a01b0382166121fd5760405162461bcd60e51b8152600401610a3a90613871565b6001600160a01b038216600081815260096020908152604091829020805460ff191685151590811790915591519182527fe00fbc488e0ecd4458af11cf15f84d29b2cf621662aa8f46a48f3d29de95123d910161120a565b6001600160a01b0383166000908152600360205260408120548211156122b45760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610a3a565b600082116123045760405162461bcd60e51b815260206004820152601760248201527f5a65726f20616d6f756e74207472616e736665727265640000000000000000006044820152606401610a3a565b60205460ff16156123215761231a848484612859565b9050611032565b61232b84836128fc565b6001600160a01b03831660009081526019602052604090205460ff1615801561235f57506001600160a01b03831661dead14155b1561238e576001600160a01b03831660009081526009602052604090205460ff1661238e5761238e8383612969565b601b54612420576001600160a01b0384166000908152601a602052604090205460ff16806123d457506001600160a01b0383166000908152601a602052604090205460ff165b6124205760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206e6f74206c61756e63686564207965742e0000000000006044820152606401610a3a565b6001600160a01b03841660009081526003602052604081208054849290612448908490613842565b90915550506001600160a01b03841660009081526008602052604081205460ff1615801561248f57506001600160a01b03841660009081526008602052604090205460ff16155b61249957826124a4565b6124a48585856129f3565b90506124b08585612e16565b156124c45782156124c4576124c483612ed0565b6001600160a01b038416600090815260036020526040812080548392906124ec908490613859565b9091555050601b541515801561250b5750601d54600160a01b900460ff165b1561259157601d5460405163090ec10b60e31b81526001600160a01b038781166004830152868116602483015260448201869052909116906348760858906064016020604051808303816000875af115801561256b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258f91906138cb565b505b836001600160a01b0316856001600160a01b0316600080516020613a11833981519152836040516125c491815260200190565b60405180910390a3506001949350505050565b6001600160a01b0383166126395760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a3a565b6001600160a01b03821661269a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a3a565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b031633146127255760405162461bcd60e51b8152600401610a3a906136c3565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146127995760405162461bcd60e51b8152600401610a3a906136c3565b6001600160a01b0381166127fe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a3a565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316600090815260036020526040812080548391908390612883908490613842565b90915550506001600160a01b038316600090815260036020526040812080548492906128b0908490613859565b92505081905550826001600160a01b0316846001600160a01b0316600080516020613a11833981519152846040516128ea91815260200190565b60405180910390a35060019392505050565b6001548111158061292557506001600160a01b03821660009081526009602052604090205460ff165b6129655760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610a3a565b5050565b6002546001600160a01b0383166000908152600360205260409020548190612992908490613859565b11156129ee5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b6064820152608401610a3a565b505050565b6001600160a01b0383166000908152601960205260408120548190819060ff16158015612a4457506011546001600160a01b0387166000908152600560205260409020544291612a4291613859565b115b6001600160a01b03861660009081526019602052604090205490915060ff168015612a7157506000601254115b15612c20576000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612ad7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afb9190613904565b506015549193509150600090879060ff16612b165782612b18565b835b6001600160701b0316612b2b9190613859565b612b37886103e861370e565b612b41919061372d565b6013546001600160a01b038b16600090815260066020526040902054919250612b6991613859565b421115612b97576001600160a01b038916600090815260066020908152604080832042905560079091528120555b6001600160a01b03891660009081526007602052604081208054839290612bbf908490613859565b90915550506014546001600160a01b038a1660009081526007602052604090205410612c1c576016546064601254600e548a612bfb919061370e565b612c05919061370e565b612c0f919061372d565b612c19919061372d565b94505b5050505b81612c65576016546001600160a01b038616600090815260196020526040902054612c4e9060ff1683611224565b612c58908661370e565b612c62919061372d565b91505b6001600160a01b03861660009081526019602052604090205460ff168015612ca357506001600160a01b038516600090815260056020526040902054155b15612cc4576001600160a01b03851660009081526005602052604090204290555b600d5460009015612da557600e54600d54612cdf908561370e565b612ce9919061372d565b9050612cf58184613842565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600090815260036020526040812080549295508592909190612d42908490613859565b925050819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b0316600080516020613a1183398151915283604051612d9c91815260200190565b60405180910390a35b3060009081526003602052604081208054859290612dc4908490613859565b909155505060405183815230906001600160a01b03891690600080516020613a118339815191529060200160405180910390a3612e018184613859565b612e0b9086613842565b979650505050505050565b6001600160a01b03821660009081526019602052604081205460ff16158015612e5857506001600160a01b03831660009081526008602052604090205460ff16155b8015612e67575060205460ff16155b8015612e7c5750601d54600160b01b900460ff165b8015612ea057506001600160a01b03821660009081526019602052604090205460ff165b8015612ebd5750601f543060009081526003602052604090205410155b8015611032575050600e54151592915050565b6020805460ff19166001179055601e546000908210612ef157601e54612ef3565b815b30600090815260036020526040902054909150811115612f1f5750306000908152600360205260409020545b6000612f2f601754601854610de8565b612f3b57600a54612f3e565b60005b905060006002600d54600e54612f549190613842565b612f5e848661370e565b612f68919061372d565b612f72919061372d565b9050612f7e8184613842565b60408051600280825260608201835292955060009290916020830190803683370190505090503081600081518110612fb857612fb861389a565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305a9190613954565b8160018151811061306d5761306d61389a565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063791ac947906130d2908790600090869030904290600401613971565b600060405180830381600087803b1580156130ec57600080fd5b505af1158015613100573d6000803e3d6000fd5b5050600d54479250600091506002906131199087613859565b613123919061372d565b600e546131309190613842565b90506000600282613141888661370e565b61314b919061372d565b613155919061372d565b9050600082600b5485613168919061370e565b613172919061372d565b905060006131808284613859565b61318a9086613842565b9050861561329e5760405163f305d71960e01b81523060048201526024810188905260006044820181905260648201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660848301524260a48301527f0000000000000000000000000000000000000000000000000000000000000000169063f305d71990859060c40160606040518083038185885af115801561323c573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061326191906139e2565b505060408051858152602081018a90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b81156132fc576040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169083156108fc029084906000818181858888f193505050501580156132fa573d6000803e3d6000fd5b505b801561335a576040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169082156108fc029083906000818181858888f19350505050158015613358573d6000803e3d6000fd5b505b50506020805460ff191690555050505050505050565b600060208083528351808285015260005b8181101561339d57858101830151858201604001528201613381565b818111156133af576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146133da57600080fd5b50565b600080604083850312156133f057600080fd5b82356133fb816133c5565b946020939093013593505050565b80151581146133da57600080fd5b6000806000806080858703121561342d57600080fd5b843593506020850135925060408501359150606085013561344d81613409565b939692955090935050565b6000806040838503121561346b57600080fd5b50508035926020909101359150565b60008060006060848603121561348f57600080fd5b833561349a816133c5565b925060208401356134aa816133c5565b929592945050506040919091013590565b600080604083850312156134ce57600080fd5b82356134d9816133c5565b915060208301356134e981613409565b809150509250929050565b60006020828403121561350657600080fd5b8135611032816133c5565b6000806040838503121561352457600080fd5b82356134d981613409565b60008083601f84011261354157600080fd5b50813567ffffffffffffffff81111561355957600080fd5b6020830191508360208260051b850101111561357457600080fd5b9250929050565b6000806000806040858703121561359157600080fd5b843567ffffffffffffffff808211156135a957600080fd5b6135b58883890161352f565b909650945060208701359150808211156135ce57600080fd5b506135db8782880161352f565b95989497509550505050565b60008060008060008060c0878903121561360057600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60006020828403121561363c57600080fd5b813561103281613409565b60008060006060848603121561365c57600080fd5b833561366781613409565b95602085013595506040909401359392505050565b60006020828403121561368e57600080fd5b5035919050565b600080604083850312156136a857600080fd5b82356136b3816133c5565b915060208301356134e9816133c5565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613728576137286136f8565b500290565b60008261374a57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561378a578160001904821115613770576137706136f8565b8085161561377d57918102915b93841c9390800290613754565b509250929050565b6000826137a157506001610aea565b816137ae57506000610aea565b81600181146137c457600281146137ce576137ea565b6001915050610aea565b60ff8411156137df576137df6136f8565b50506001821b610aea565b5060208310610133831016604e8410600b841016171561380d575081810a610aea565b613817838361374f565b806000190482111561382b5761382b6136f8565b029392505050565b600061103260ff841683613792565b600082821015613854576138546136f8565b500390565b6000821982111561386c5761386c6136f8565b500190565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156138c4576138c46136f8565b5060010190565b6000602082840312156138dd57600080fd5b815161103281613409565b80516001600160701b03811681146138ff57600080fd5b919050565b60008060006060848603121561391957600080fd5b613922846138e8565b9250613930602085016138e8565b9150604084015163ffffffff8116811461394957600080fd5b809150509250925092565b60006020828403121561396657600080fd5b8151611032816133c5565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139c15784516001600160a01b03168352938301939183019160010161399c565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156139f757600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212203d60c3ea738b3b6024c5c0d4546c523a568a46e118fce42c06fbc52cb22bdb4764736f6c634300080c0033000000000000000000000000ea46465322afb9827488fc6d56d92d129779832f000000000000000000000000acd2afd226ee1455b127289fcf3546a6886b15ab000000000000000000000000d149e426051ca9b404e71d1baa71592184c4fcba00000000000000000000000023d39b7abccb32b22633b25735940fffbcda22ff

Deployed Bytecode

0x6080604052600436106103035760003560e01c8063715018a611610190578063abe57e70116100dc578063d5d035f511610095578063f2fde38b1161006f578063f2fde38b14610986578063f84ba65d146109a6578063f8821a62146109c6578063f887ea40146109dc57600080fd5b8063d5d035f514610900578063dd62ed3e14610920578063e624c4bc1461096657600080fd5b8063abe57e7014610849578063bf56b37114610869578063c5363caa1461087f578063ceafd6da146108a0578063d0889358146108c0578063d51ed1c8146108e057600080fd5b80638da5cb5b11610149578063a457c2d711610123578063a457c2d7146107a1578063a5949bcf146107c1578063a8aa1b31146107f5578063a9059cbb1461082957600080fd5b80638da5cb5b146107405780638f9a55c01461075e57806395d89b411461077457600080fd5b8063715018a6146106b45780637516baec146106c95780637d1db4a5146106ea57806386f6c3c114610700578063882cfb3f14610720578063893d20e81461074057600080fd5b8063313ce5671161024f5780635804f1e41161020857806367243482116101e257806367243482146106095780636ddd1713146106295780636f9a880e1461064a57806370a082311461067e57600080fd5b80635804f1e4146105b35780636419b6f9146105c9578063658d4b7f146105e957600080fd5b8063313ce567146104ee578063395093511461050a578063421dd7c71461052a578063492a937b1461053f578063569c93d21461055f578063571ac8b01461059357600080fd5b80631161ae39116102bc578063201e799111610296578063201e79911461044d57806323b872dd1461046d578063264d26dd1461048d5780632b112e49146104d957600080fd5b80631161ae39146103f857806318160ddd146104185780631faf723b1461042d57600080fd5b806301339c211461030f5780630445b6671461032657806306fdde031461034f578063095ea7b3146103885780630e049c54146103b85780630f4f7bfe146103d857600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610a10565b005b34801561033257600080fd5b5061033c601e5481565b6040519081526020015b60405180910390f35b34801561035b57600080fd5b506040805180820190915260078152665368696b61676560c81b60208201525b6040516103469190613370565b34801561039457600080fd5b506103a86103a33660046133dd565b610a83565b6040519015158152602001610346565b3480156103c457600080fd5b506103246103d3366004613417565b610af0565b3480156103e457600080fd5b506103246103f3366004613458565b610c01565b34801561040457600080fd5b506103a8610413366004613458565b610de8565b34801561042457600080fd5b5061033c610dfc565b34801561043957600080fd5b50610324610448366004613458565b610e1d565b34801561045957600080fd5b50610324610468366004613458565b610f2b565b34801561047957600080fd5b506103a861048836600461347a565b610fa4565b34801561049957600080fd5b506104c17f000000000000000000000000ea46465322afb9827488fc6d56d92d129779832f81565b6040516001600160a01b039091168152602001610346565b3480156104e557600080fd5b5061033c611039565b3480156104fa57600080fd5b5060405160098152602001610346565b34801561051657600080fd5b506103a86105253660046133dd565b6110b9565b34801561053657600080fd5b506103246110fe565b34801561054b57600080fd5b5061032461055a3660046134bb565b611166565b34801561056b57600080fd5b506104c17f00000000000000000000000023d39b7abccb32b22633b25735940fffbcda22ff81565b34801561059f57600080fd5b506103a86105ae3660046134f4565b611216565b3480156105bf57600080fd5b5061033c601c5481565b3480156105d557600080fd5b5061033c6105e4366004613511565b611224565b3480156105f557600080fd5b506103246106043660046134bb565b6112b8565b34801561061557600080fd5b5061032461062436600461357b565b611360565b34801561063557600080fd5b50601d546103a890600160b01b900460ff1681565b34801561065657600080fd5b506104c17f000000000000000000000000d149e426051ca9b404e71d1baa71592184c4fcba81565b34801561068a57600080fd5b5061033c6106993660046134f4565b6001600160a01b031660009081526003602052604090205490565b3480156106c057600080fd5b506103246115e6565b3480156106d557600080fd5b50601d546103a890600160a01b900460ff1681565b3480156106f657600080fd5b5061033c60015481565b34801561070c57600080fd5b5061032461071b3660046135e7565b611733565b34801561072c57600080fd5b50601d546104c1906001600160a01b031681565b34801561074c57600080fd5b506000546001600160a01b03166104c1565b34801561076a57600080fd5b5061033c60025481565b34801561078057600080fd5b5060408051808201909152600481526353484b4760e01b602082015261037b565b3480156107ad57600080fd5b506103a86107bc3660046133dd565b611904565b3480156107cd57600080fd5b506104c17f000000000000000000000000acd2afd226ee1455b127289fcf3546a6886b15ab81565b34801561080157600080fd5b506104c17f000000000000000000000000b8c5fd81b2444e8139ee8bac88b11e3b5769751481565b34801561083557600080fd5b506103a86108443660046133dd565b61199d565b34801561085557600080fd5b50610324610864366004613458565b6119aa565b34801561087557600080fd5b5061033c601b5481565b34801561088b57600080fd5b50601d546103a890600160a81b900460ff1681565b3480156108ac57600080fd5b506103246108bb36600461362a565b611aa1565b3480156108cc57600080fd5b506103246108db366004613647565b611b79565b3480156108ec57600080fd5b5061033c6108fb36600461367c565b611ccb565b34801561090c57600080fd5b5061032461091b3660046134bb565b611d22565b34801561092c57600080fd5b5061033c61093b366004613695565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561097257600080fd5b506103246109813660046134f4565b611e91565b34801561099257600080fd5b506103246109a13660046134f4565b611fee565b3480156109b257600080fd5b506103246109c13660046134bb565b6121ad565b3480156109d257600080fd5b5061033c601f5481565b3480156109e857600080fd5b506104c17f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000546001600160a01b03163314610a435760405162461bcd60e51b8152600401610a3a906136c3565b60405180910390fd5b601b5415610a5057600080fd5b43601b5542601c556040517fdd6364d871cb6036ca605660d590886ab96eb55b7dbb0051be1901a75794641590600090a1565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ade9086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610b1a5760405162461bcd60e51b8152600401610a3a906136c3565b600a8210158015610b2d57506101908411155b8015610b435750831580610b4357506010548410155b8015610b515750610e108311155b610b9d5760405162461bcd60e51b815260206004820152601860248201527f506172616d6574657273206f7574206f6620626f756e647300000000000000006044820152606401610a3a565b6012849055601383905560148290556015805460ff191682151517905560408051858152602081018590529081018390527fafe6c6a9d14f1da6e5642b5fa6236c37e9783e34bfe9c08cee0529af4c17bce59060600160405180910390a150505050565b6000546001600160a01b03163314610c2b5760405162461bcd60e51b8152600401610a3a906136c3565b610190606483600e54610c3e919061370e565b610c48919061372d565b1115610c8a5760405162461bcd60e51b81526020600482015260116024820152700a6cad8d840e8c2f040e8dede40d0d2ced607b1b6044820152606401610a3a565b6064821015610ce65760405162461bcd60e51b815260206004820152602260248201527f43616e2774206d616b652073656c6c7320636865617065722077697468207468604482015261697360f01b6064820152608401610a3a565b6012541580610cf757506012548211155b610d565760405162461bcd60e51b815260206004820152602a60248201527f4869676820706572696f642074617820636c6173686573207769746820616e746044820152690d25ac8eadae040e8c2f60b31b6064820152608401610a3a565b62093a80811115610da05760405162461bcd60e51b815260206004820152601460248201527353656c6c20706572696f6420746f6f206c6f6e6760601b6044820152606401610a3a565b6010829055601181905560408051838152602081018390527fb45fbcb6061be03b34994516d5d8d4e38b21641de36e23c8f81217f153a4dbd891015b60405180910390a15050565b600082610df483611ccb565b119392505050565b6000610e0a6009600a613833565b610e1890633b9aca0061370e565b905090565b6000546001600160a01b03163314610e475760405162461bcd60e51b8152600401610a3a906136c3565b600082118015610e575750600081115b8015610e7a5750600581610e6d846103e861370e565b610e77919061372d565b10155b610ec65760405162461bcd60e51b815260206004820152601a60248201527f5472616e73616374696f6e206c696d69747320746f6f206c6f770000000000006044820152606401610a3a565b8082610ed46009600a613833565b610ee290633b9aca0061370e565b610eec919061370e565b610ef6919061372d565b60018190556040519081527f87d6222e218f03ac3f7ce8a320052f10fc0c196c444a04e403ccc4bbfb6a362490602001610ddc565b6000546001600160a01b03163314610f555760405162461bcd60e51b8152600401610a3a906136c3565b601782905560188190557fcbbf6bb708b8b7c4daa8d4e1088db9965d8167c3fcb6bc1a21147bbca33c12cf81610f8c84606461370e565b610f96919061372d565b604051908152602001610ddc565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914611024576001600160a01b0384166000908152600460209081526040808320338452909152902054610fff908390613842565b6001600160a01b03851660009081526004602090815260408083203384529091529020555b61102f848484612255565b90505b9392505050565b60036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff5461dead60009081527f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c54909161109591613859565b6110a16009600a613833565b6110af90633b9aca0061370e565b610e189190613842565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916110f59185906110f0908690613859565b6125d7565b50600192915050565b6000546001600160a01b031633146111285760405162461bcd60e51b8152600401610a3a906136c3565b601d805460ff60a81b1916600160a81b1790556040517fdd849d4f0ff64ab5cfef73f22ec29822c2713550b40bcded093282cc28f86c6090600090a1565b6000546001600160a01b031633146111905760405162461bcd60e51b8152600401610a3a906136c3565b6001600160a01b0382166111b65760405162461bcd60e51b8152600401610a3a90613871565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527ffa4a2b2457d2065452473bed7d55c8fa2f65fc4a1eff1ebdaf14a1b7281e777391015b60405180910390a25050565b6000610aea82600019610a83565b600043601b54141561124657600160165461123f9190613842565b9050610aea565b8215611282578161126657600f54600e546112619190613859565b61123f565b6064601054600e54611278919061370e565b61123f919061372d565b8161129c57600f54600e546112979190613842565b611032565b6064601054600e546112ae919061370e565b611032919061372d565b6000546001600160a01b031633146112e25760405162461bcd60e51b8152600401610a3a906136c3565b6001600160a01b0382166113085760405162461bcd60e51b8152600401610a3a90613871565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f5a8cf666a272afd6dec6788d33967c676fffa92e289eee1b38172982c4b4914d910161120a565b6000546001600160a01b0316331461138a5760405162461bcd60e51b8152600401610a3a906136c3565b8281146113d95760405162461bcd60e51b815260206004820152601960248201527f4172726179206c656e6774687320646f6e2774206d61746368000000000000006044820152606401610a3a565b601d805460ff60b01b198116909155600160b01b900460ff1660005b8481101561159c57601960008787848181106114135761141361389a565b905060200201602081019061142891906134f4565b6001600160a01b0316815260208101919091526040016000205460ff16158015611482575060008686838181106114615761146161389a565b905060200201602081019061147691906134f4565b6001600160a01b031614155b6114e45760405162461bcd60e51b815260206004820152602d60248201527f43616e27742061697264726f7020746865206c697175696469747920706f6f6c60448201526c0206f722061646472657373203609c1b6064820152608401610a3a565b611543338787848181106114fa576114fa61389a565b905060200201602081019061150f91906134f4565b61151b6009600a613833565b87878681811061152d5761152d61389a565b9050602002013561153e919061370e565b612255565b50426005600088888581811061155b5761155b61389a565b905060200201602081019061157091906134f4565b6001600160a01b0316815260208101919091526040016000205580611594816138b0565b9150506113f5565b50601d805460ff60b01b1916600160b01b8315150217905560405133907faf1f3c8f96bb5b6a68b1ca0c51b6ba0250cf4a56f5d088071f5fcf710707727390600090a25050505050565b6000546001600160a01b031633146116105760405162461bcd60e51b8152600401610a3a906136c3565b6000600860006116286000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff199093169290921790915560098161166a6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155601a816116ac6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556004816116ee6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d82529092529020556117316126fb565b565b6000546001600160a01b0316331461175d5760405162461bcd60e51b8152600401610a3a906136c3565b8561176960028261372d565b61177490600261370e565b146117de5760405162461bcd60e51b815260206004820152603460248201527f4c697175696469747920666565206d75737420626520616e206576656e206e756044820152736d6265722064756520746f20726f756e64696e6760601b6064820152608401610a3a565b600a869055600b859055600c849055600d839055600f82905582846118038789613859565b61180d9190613859565b6118179190613859565b600e55601681905561182a60048261372d565b600e54111561186b5760405162461bcd60e51b815260206004820152600d60248201526c08ccacae640e8dede40d0d2ced609b1b6044820152606401610a3a565b600e54600f5411156118b55760405162461bcd60e51b8152602060048201526013602482015272496e636f72726563742073656c6c206269617360681b6044820152606401610a3a565b600e54601654600f5460408051938452602084019290925282820152517f01bae858246c904512695a3f6d48ab88abb7a0192fdd7c53b043e60317795f459181900360600190a1505050505050565b3360009081526004602090815260408083206001600160a01b0386168452909152812054828110156119865760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a3a565b61199333858584036125d7565b5060019392505050565b6000611032338484612255565b6000546001600160a01b031633146119d45760405162461bcd60e51b8152600401610a3a906136c3565b6000811180156119e657506127108111155b611a3c5760405162461bcd60e51b815260206004820152602160248201527f44697669736f72206d7573742062652067726561746572207468616e207a65726044820152606f60f81b6064820152608401610a3a565b8082611a4a6009600a613833565b611a5890633b9aca0061370e565b611a62919061370e565b611a6c919061372d565b60028190556040519081527fee4f0b388531b3b3cbe9a0fc02e17997304dcde94d38db4c65a1e896f7aca78890602001610ddc565b6000546001600160a01b03163314611acb5760405162461bcd60e51b8152600401610a3a906136c3565b8015611b2157601d54600160a81b900460ff1615611b215760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b6044820152606401610a3a565b601d8054821515600160a01b0260ff60a01b199091161790556040517f96b2bfe55fa5f4032b9b4d922bd97bb17a7f025fce7fcecaefc955fd0111a96690611b6e90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611ba35760405162461bcd60e51b8152600401610a3a906136c3565b600082118015611bb35750600081115b611c0b5760405162461bcd60e51b815260206004820152602360248201527f44656e6f6d696e61746f7273206d75737420626520677265617465722074686160448201526206e20360ec1b6064820152608401610a3a565b601d805460ff60b01b1916600160b01b8515150217905580611c2f6009600a613833565b611c3d90633b9aca0061370e565b611c47919061372d565b601f5581611c576009600a613833565b611c6590633b9aca0061370e565b611c6f919061372d565b601e819055601f54601d5460408051928352602083019390935260ff600160b01b9091041615158183015290517faa199f5aab08ad4ddee0140c8e7d13a4bebb822550aeb3d16e5f7bc485fba0f99181900360600190a1505050565b6000611cd5611039565b6001600160a01b037f000000000000000000000000b8c5fd81b2444e8139ee8bac88b11e3b5769751416600090815260036020526040902054611d18908461370e565b610aea919061372d565b6000546001600160a01b03163314611d4c5760405162461bcd60e51b8152600401610a3a906136c3565b601d546001600160a01b03838116911614611dcd57601d54600160a81b900460ff1615611db15760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b6044820152606401610a3a565b601d80546001600160a01b0319166001600160a01b0384161790555b8015611e5957601d546040516366812dbb60e11b81523060048201526001600160a01b037f000000000000000000000000b8c5fd81b2444e8139ee8bac88b11e3b57697514811660248301529091169063cd025b7690604401600060405180830381600087803b158015611e4057600080fd5b505af1158015611e54573d6000803e3d6000fd5b505050505b6040516001600160a01b038316907f1ccf813789899d0a52466f1f5c4cabc2820e6818ad4eaca73837528653d00c3c90600090a25050565b6000546001600160a01b03163314611ebb5760405162461bcd60e51b8152600401610a3a906136c3565b7f000000000000000000000000b8c5fd81b2444e8139ee8bac88b11e3b576975146001600160a01b0316816001600160a01b031614158015611f1a57506001600160a01b038116737a250d5630b4cf539739df2c5dacb4c659f2488d14155b611f7c5760405162461bcd60e51b815260206004820152602d60248201527f43616e277420616c7465722074726164696e6720636f6e74726163747320696e60448201526c103a3434b99036b0b73732b91760991b6064820152608401610a3a565b6001600160a01b03811660008181526008602090815260408083208054600160ff199182168117909255601a845282852080548216831790556009909352818420805490931617909155517f96aa4fc7394e306de889dcb1b2730f2ff39e53b54dd11275bf141447c97802299190a250565b6000546001600160a01b031633146120185760405162461bcd60e51b8152600401610a3a906136c3565b6000600860006120306000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556009816120726000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155601a816120b46000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556004816120f66000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d825290925290205561213a8161276f565b6001600160a01b031660009081526008602090815260408083208054600160ff199182168117909255600984528285208054821683179055601a84528285208054909116909117905560048252808320737a250d5630b4cf539739df2c5dacb4c659f2488d845290915290206000199055565b6000546001600160a01b031633146121d75760405162461bcd60e51b8152600401610a3a906136c3565b6001600160a01b0382166121fd5760405162461bcd60e51b8152600401610a3a90613871565b6001600160a01b038216600081815260096020908152604091829020805460ff191685151590811790915591519182527fe00fbc488e0ecd4458af11cf15f84d29b2cf621662aa8f46a48f3d29de95123d910161120a565b6001600160a01b0383166000908152600360205260408120548211156122b45760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610a3a565b600082116123045760405162461bcd60e51b815260206004820152601760248201527f5a65726f20616d6f756e74207472616e736665727265640000000000000000006044820152606401610a3a565b60205460ff16156123215761231a848484612859565b9050611032565b61232b84836128fc565b6001600160a01b03831660009081526019602052604090205460ff1615801561235f57506001600160a01b03831661dead14155b1561238e576001600160a01b03831660009081526009602052604090205460ff1661238e5761238e8383612969565b601b54612420576001600160a01b0384166000908152601a602052604090205460ff16806123d457506001600160a01b0383166000908152601a602052604090205460ff165b6124205760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206e6f74206c61756e63686564207965742e0000000000006044820152606401610a3a565b6001600160a01b03841660009081526003602052604081208054849290612448908490613842565b90915550506001600160a01b03841660009081526008602052604081205460ff1615801561248f57506001600160a01b03841660009081526008602052604090205460ff16155b61249957826124a4565b6124a48585856129f3565b90506124b08585612e16565b156124c45782156124c4576124c483612ed0565b6001600160a01b038416600090815260036020526040812080548392906124ec908490613859565b9091555050601b541515801561250b5750601d54600160a01b900460ff165b1561259157601d5460405163090ec10b60e31b81526001600160a01b038781166004830152868116602483015260448201869052909116906348760858906064016020604051808303816000875af115801561256b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258f91906138cb565b505b836001600160a01b0316856001600160a01b0316600080516020613a11833981519152836040516125c491815260200190565b60405180910390a3506001949350505050565b6001600160a01b0383166126395760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a3a565b6001600160a01b03821661269a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a3a565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b031633146127255760405162461bcd60e51b8152600401610a3a906136c3565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146127995760405162461bcd60e51b8152600401610a3a906136c3565b6001600160a01b0381166127fe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a3a565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316600090815260036020526040812080548391908390612883908490613842565b90915550506001600160a01b038316600090815260036020526040812080548492906128b0908490613859565b92505081905550826001600160a01b0316846001600160a01b0316600080516020613a11833981519152846040516128ea91815260200190565b60405180910390a35060019392505050565b6001548111158061292557506001600160a01b03821660009081526009602052604090205460ff165b6129655760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610a3a565b5050565b6002546001600160a01b0383166000908152600360205260409020548190612992908490613859565b11156129ee5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b6064820152608401610a3a565b505050565b6001600160a01b0383166000908152601960205260408120548190819060ff16158015612a4457506011546001600160a01b0387166000908152600560205260409020544291612a4291613859565b115b6001600160a01b03861660009081526019602052604090205490915060ff168015612a7157506000601254115b15612c20576000807f000000000000000000000000b8c5fd81b2444e8139ee8bac88b11e3b576975146001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612ad7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afb9190613904565b506015549193509150600090879060ff16612b165782612b18565b835b6001600160701b0316612b2b9190613859565b612b37886103e861370e565b612b41919061372d565b6013546001600160a01b038b16600090815260066020526040902054919250612b6991613859565b421115612b97576001600160a01b038916600090815260066020908152604080832042905560079091528120555b6001600160a01b03891660009081526007602052604081208054839290612bbf908490613859565b90915550506014546001600160a01b038a1660009081526007602052604090205410612c1c576016546064601254600e548a612bfb919061370e565b612c05919061370e565b612c0f919061372d565b612c19919061372d565b94505b5050505b81612c65576016546001600160a01b038616600090815260196020526040902054612c4e9060ff1683611224565b612c58908661370e565b612c62919061372d565b91505b6001600160a01b03861660009081526019602052604090205460ff168015612ca357506001600160a01b038516600090815260056020526040902054155b15612cc4576001600160a01b03851660009081526005602052604090204290555b600d5460009015612da557600e54600d54612cdf908561370e565b612ce9919061372d565b9050612cf58184613842565b6001600160a01b037f00000000000000000000000023d39b7abccb32b22633b25735940fffbcda22ff16600090815260036020526040812080549295508592909190612d42908490613859565b925050819055507f00000000000000000000000023d39b7abccb32b22633b25735940fffbcda22ff6001600160a01b0316876001600160a01b0316600080516020613a1183398151915283604051612d9c91815260200190565b60405180910390a35b3060009081526003602052604081208054859290612dc4908490613859565b909155505060405183815230906001600160a01b03891690600080516020613a118339815191529060200160405180910390a3612e018184613859565b612e0b9086613842565b979650505050505050565b6001600160a01b03821660009081526019602052604081205460ff16158015612e5857506001600160a01b03831660009081526008602052604090205460ff16155b8015612e67575060205460ff16155b8015612e7c5750601d54600160b01b900460ff165b8015612ea057506001600160a01b03821660009081526019602052604090205460ff165b8015612ebd5750601f543060009081526003602052604090205410155b8015611032575050600e54151592915050565b6020805460ff19166001179055601e546000908210612ef157601e54612ef3565b815b30600090815260036020526040902054909150811115612f1f5750306000908152600360205260409020545b6000612f2f601754601854610de8565b612f3b57600a54612f3e565b60005b905060006002600d54600e54612f549190613842565b612f5e848661370e565b612f68919061372d565b612f72919061372d565b9050612f7e8184613842565b60408051600280825260608201835292955060009290916020830190803683370190505090503081600081518110612fb857612fb861389a565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305a9190613954565b8160018151811061306d5761306d61389a565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063791ac947906130d2908790600090869030904290600401613971565b600060405180830381600087803b1580156130ec57600080fd5b505af1158015613100573d6000803e3d6000fd5b5050600d54479250600091506002906131199087613859565b613123919061372d565b600e546131309190613842565b90506000600282613141888661370e565b61314b919061372d565b613155919061372d565b9050600082600b5485613168919061370e565b613172919061372d565b905060006131808284613859565b61318a9086613842565b9050861561329e5760405163f305d71960e01b81523060048201526024810188905260006044820181905260648201526001600160a01b037f000000000000000000000000ea46465322afb9827488fc6d56d92d129779832f811660848301524260a48301527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063f305d71990859060c40160606040518083038185885af115801561323c573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061326191906139e2565b505060408051858152602081018a90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b81156132fc576040516001600160a01b037f000000000000000000000000acd2afd226ee1455b127289fcf3546a6886b15ab169083156108fc029084906000818181858888f193505050501580156132fa573d6000803e3d6000fd5b505b801561335a576040516001600160a01b037f000000000000000000000000d149e426051ca9b404e71d1baa71592184c4fcba169082156108fc029083906000818181858888f19350505050158015613358573d6000803e3d6000fd5b505b50506020805460ff191690555050505050505050565b600060208083528351808285015260005b8181101561339d57858101830151858201604001528201613381565b818111156133af576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146133da57600080fd5b50565b600080604083850312156133f057600080fd5b82356133fb816133c5565b946020939093013593505050565b80151581146133da57600080fd5b6000806000806080858703121561342d57600080fd5b843593506020850135925060408501359150606085013561344d81613409565b939692955090935050565b6000806040838503121561346b57600080fd5b50508035926020909101359150565b60008060006060848603121561348f57600080fd5b833561349a816133c5565b925060208401356134aa816133c5565b929592945050506040919091013590565b600080604083850312156134ce57600080fd5b82356134d9816133c5565b915060208301356134e981613409565b809150509250929050565b60006020828403121561350657600080fd5b8135611032816133c5565b6000806040838503121561352457600080fd5b82356134d981613409565b60008083601f84011261354157600080fd5b50813567ffffffffffffffff81111561355957600080fd5b6020830191508360208260051b850101111561357457600080fd5b9250929050565b6000806000806040858703121561359157600080fd5b843567ffffffffffffffff808211156135a957600080fd5b6135b58883890161352f565b909650945060208701359150808211156135ce57600080fd5b506135db8782880161352f565b95989497509550505050565b60008060008060008060c0878903121561360057600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60006020828403121561363c57600080fd5b813561103281613409565b60008060006060848603121561365c57600080fd5b833561366781613409565b95602085013595506040909401359392505050565b60006020828403121561368e57600080fd5b5035919050565b600080604083850312156136a857600080fd5b82356136b3816133c5565b915060208301356134e9816133c5565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613728576137286136f8565b500290565b60008261374a57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561378a578160001904821115613770576137706136f8565b8085161561377d57918102915b93841c9390800290613754565b509250929050565b6000826137a157506001610aea565b816137ae57506000610aea565b81600181146137c457600281146137ce576137ea565b6001915050610aea565b60ff8411156137df576137df6136f8565b50506001821b610aea565b5060208310610133831016604e8410600b841016171561380d575081810a610aea565b613817838361374f565b806000190482111561382b5761382b6136f8565b029392505050565b600061103260ff841683613792565b600082821015613854576138546136f8565b500390565b6000821982111561386c5761386c6136f8565b500190565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156138c4576138c46136f8565b5060010190565b6000602082840312156138dd57600080fd5b815161103281613409565b80516001600160701b03811681146138ff57600080fd5b919050565b60008060006060848603121561391957600080fd5b613922846138e8565b9250613930602085016138e8565b9150604084015163ffffffff8116811461394957600080fd5b809150509250925092565b60006020828403121561396657600080fd5b8151611032816133c5565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139c15784516001600160a01b03168352938301939183019160010161399c565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156139f757600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212203d60c3ea738b3b6024c5c0d4546c523a568a46e118fce42c06fbc52cb22bdb4764736f6c634300080c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000ea46465322afb9827488fc6d56d92d129779832f000000000000000000000000acd2afd226ee1455b127289fcf3546a6886b15ab000000000000000000000000d149e426051ca9b404e71d1baa71592184c4fcba00000000000000000000000023d39b7abccb32b22633b25735940fffbcda22ff

-----Decoded View---------------
Arg [0] : _lp (address): 0xea46465322afB9827488Fc6d56D92D129779832F
Arg [1] : _marketing (address): 0xACd2AFd226Ee1455B127289fcf3546a6886b15AB
Arg [2] : _dev (address): 0xD149e426051Ca9b404E71d1bAa71592184c4fCbA
Arg [3] : _rewards (address): 0x23D39B7AbCcb32B22633B25735940FffbCda22fF

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000ea46465322afb9827488fc6d56d92d129779832f
Arg [1] : 000000000000000000000000acd2afd226ee1455b127289fcf3546a6886b15ab
Arg [2] : 000000000000000000000000d149e426051ca9b404e71d1baa71592184c4fcba
Arg [3] : 00000000000000000000000023d39b7abccb32b22633b25735940fffbcda22ff


Deployed Bytecode Sourcemap

13397:20735:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29407:191;;;;;;;;;;;;;:::i;:::-;;15628:49;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;15628:49:0;;;;;;;;17226:71;;;;;;;;;;-1:-1:-1;17289:5:0;;;;;;;;;;;;-1:-1:-1;;;17289:5:0;;;;17226:71;;;;;;;:::i;17632:216::-;;;;;;;;;;-1:-1:-1;17632:216:0;;;;;:::i;:::-;;:::i;:::-;;;1419:14:1;;1412:22;1394:41;;1382:2;1367:18;17632:216:0;1254:187:1;28941:458:0;;;;;;;;;;-1:-1:-1;28941:458:0;;;;;:::i;:::-;;:::i;28346:587::-;;;;;;;;;;-1:-1:-1;28346:587:0;;;;;:::i;:::-;;:::i;26209:150::-;;;;;;;;;;-1:-1:-1;26209:150:0;;;;;:::i;:::-;;:::i;16974:88::-;;;;;;;;;;;;;:::i;29606:309::-;;;;;;;;;;-1:-1:-1;29606:309:0;;;;;:::i;:::-;;:::i;31906:246::-;;;;;;;;;;-1:-1:-1;31906:246:0;;;;;:::i;:::-;;:::i;19144:341::-;;;;;;;;;;-1:-1:-1;19144:341:0;;;;;:::i;:::-;;:::i;14842:42::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2898:32:1;;;2880:51;;2868:2;2853:18;14842:42:0;2734:203:1;25893:144:0;;;;;;;;;;;;;:::i;17068:71::-;;;;;;;;;;-1:-1:-1;17068:71:0;;13659:1;3084:36:1;;3072:2;3057:18;17068:71:0;2942:184:1;17856:213:0;;;;;;;;;;-1:-1:-1;17856:213:0;;;;;:::i;:::-;;:::i;27828:128::-;;;;;;;;;;;;;:::i;32160:233::-;;;;;;;;;;-1:-1:-1;32160:233:0;;;;;:::i;:::-;;:::i;14891:37::-;;;;;;;;;;;;;;;18850:122;;;;;;;;;;-1:-1:-1;18850:122:0;;;;;:::i;:::-;;:::i;15430:27::-;;;;;;;;;;;;;;;;21497:345;;;;;;;;;;-1:-1:-1;21497:345:0;;;;;:::i;:::-;;:::i;30218:222::-;;;;;;;;;;-1:-1:-1;30218:222:0;;;;;:::i;:::-;;:::i;32398:772::-;;;;;;;;;;-1:-1:-1;32398:772:0;;;;;:::i;:::-;;:::i;15591:30::-;;;;;;;;;;-1:-1:-1;15591:30:0;;;;-1:-1:-1;;;15591:30:0;;;;;;14992:44;;;;;;;;;;;;;;;17380:105;;;;;;;;;;-1:-1:-1;17380:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;17464:18:0;17446:7;17464:18;;;:9;:18;;;;;;;17380:105;26879:285;;;;;;;;;;;;;:::i;15501:36::-;;;;;;;;;;-1:-1:-1;15501:36:0;;;;-1:-1:-1;;;15501:36:0;;;;;;13850:55;;;;;;;;;;;;;;;;30698:762;;;;;;;;;;-1:-1:-1;30698:762:0;;;;;:::i;:::-;;:::i;15467:27::-;;;;;;;;;;-1:-1:-1;15467:27:0;;;;-1:-1:-1;;;;;15467:27:0;;;17303:71;;;;;;;;;;-1:-1:-1;17346:7:0;12045:6;-1:-1:-1;;;;;12045:6:0;17303:71;16974:88;13919:56;;;;;;;;;;;;;;;;17145:75;;;;;;;;;;-1:-1:-1;17210:7:0;;;;;;;;;;;;-1:-1:-1;;;17210:7:0;;;;17145:75;;18077:411;;;;;;;;;;-1:-1:-1;18077:411:0;;;;;:::i;:::-;;:::i;14935:50::-;;;;;;;;;;;;;;;15360:29;;;;;;;;;;;;;;;18980:156;;;;;;;;;;-1:-1:-1;18980:156:0;;;;;:::i;:::-;;:::i;29927:283::-;;;;;;;;;;-1:-1:-1;29927:283:0;;;;;:::i;:::-;;:::i;15398:25::-;;;;;;;;;;;;;;;;15544:38;;;;;;;;;;-1:-1:-1;15544:38:0;;;;-1:-1:-1;;;15544:38:0;;;;;;27172:242;;;;;;;;;;-1:-1:-1;27172:242:0;;;;;:::i;:::-;;:::i;31468:430::-;;;;;;;;;;-1:-1:-1;31468:430:0;;;;;:::i;:::-;;:::i;26045:156::-;;;;;;;;;;-1:-1:-1;26045:156:0;;;;;:::i;:::-;;:::i;27426:390::-;;;;;;;;;;-1:-1:-1;27426:390:0;;;;;:::i;:::-;;:::i;17491:133::-;;;;;;;;;;-1:-1:-1;17491:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;17593:19:0;;;17575:7;17593:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;17491:133;27968:370;;;;;;;;;;-1:-1:-1;27968:370:0;;;;;:::i;:::-;;:::i;26367:504::-;;;;;;;;;;-1:-1:-1;26367:504:0;;;;;:::i;:::-;;:::i;30448:242::-;;;;;;;;;;-1:-1:-1;30448:242:0;;;;;:::i;:::-;;:::i;15692:49::-;;;;;;;;;;;;;;;;15129:34;;;;;;;;;;;;;;;29407:191;12192:6;;-1:-1:-1;;;;;12192:6:0;6540:10;12192:22;12184:67;;;;-1:-1:-1;;;12184:67:0;;;;;;;:::i;:::-;;;;;;;;;29464:10:::1;::::0;:15;29455:25:::1;;;::::0;::::1;;29504:12;29491:10;:25:::0;29542:15:::1;29527:12;:30:::0;29573:17:::1;::::0;::::1;::::0;-1:-1:-1;;29573:17:0::1;29407:191::o:0;17632:216::-;17736:10;17707:4;17724:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;17724:32:0;;;;;;;;;;:41;;;17781:37;17707:4;;17724:32;;17781:37;;;;17759:6;160:25:1;;148:2;133:18;;14:177;17781:37:0;;;;;;;;-1:-1:-1;17836:4:0;17632:216;;;;;:::o;28941:458::-;12192:6;;-1:-1:-1;;;;;12192:6:0;6540:10;12192:22;12184:67;;;;-1:-1:-1;;;12184:67:0;;;;;;;:::i;:::-;29084:2:::1;29070:10;:16;;:31;;;;;29098:3;29090:4;:11;;29070:31;:69;;;;-1:-1:-1::0;29106:9:0;;;:32:::1;;;29127:11;;29119:4;:19;;29106:32;29070:91;;;;;29154:7;29143;:18;;29070:91;29062:128;;;::::0;-1:-1:-1;;;29062:128:0;;8274:2:1;29062:128:0::1;::::0;::::1;8256:21:1::0;8313:2;8293:18;;;8286:30;8352:26;8332:18;;;8325:54;8396:18;;29062:128:0::1;8072:348:1::0;29062:128:0::1;29201:11;:18:::0;;;29230:14:::1;:24:::0;;;29265:17:::1;:30:::0;;;29306:16:::1;:28:::0;;-1:-1:-1;;29306:28:0::1;::::0;::::1;;;::::0;;29350:41:::1;::::0;;8627:25:1;;;8683:2;8668:18;;8661:34;;;8711:18;;;8704:34;;;29350:41:0::1;::::0;8615:2:1;8600:18;29350:41:0::1;;;;;;;28941:458:::0;;;;:::o;28346:587::-;12192:6;;-1:-1:-1;;;;;12192:6:0;6540:10;12192:22;12184:67;;;;-1:-1:-1;;;12184:67:0;;;;;;;:::i;:::-;28497:3:::1;28490;28466:20;28455:8;;:31;;;;:::i;:::-;28454:39;;;;:::i;:::-;:46;;28446:76;;;::::0;-1:-1:-1;;;28446:76:0;;9478:2:1;28446:76:0::1;::::0;::::1;9460:21:1::0;9517:2;9497:18;;;9490:30;-1:-1:-1;;;9536:18:1;;;9529:47;9593:18;;28446:76:0::1;9276:341:1::0;28446:76:0::1;28565:3;28541:20;:27;;28533:74;;;::::0;-1:-1:-1;;;28533:74:0;;9824:2:1;28533:74:0::1;::::0;::::1;9806:21:1::0;9863:2;9843:18;;;9836:30;9902:34;9882:18;;;9875:62;-1:-1:-1;;;9953:18:1;;;9946:32;9995:19;;28533:74:0::1;9622:398:1::0;28533:74:0::1;28626:11;::::0;:16;;:55:::1;;;28670:11;;28646:20;:35;;28626:55;28618:110;;;::::0;-1:-1:-1;;;28618:110:0;;10227:2:1;28618:110:0::1;::::0;::::1;10209:21:1::0;10266:2;10246:18;;;10239:30;10305:34;10285:18;;;10278:62;-1:-1:-1;;;10356:18:1;;;10349:40;10406:19;;28618:110:0::1;10025:406:1::0;28618:110:0::1;28758:6;28747:7;:17;;28739:50;;;::::0;-1:-1:-1;;;28739:50:0;;10638:2:1;28739:50:0::1;::::0;::::1;10620:21:1::0;10677:2;10657:18;;;10650:30;-1:-1:-1;;;10696:18:1;;;10689:50;10756:18;;28739:50:0::1;10436:344:1::0;28739:50:0::1;28800:11;:34:::0;;;28845:10:::1;:20:::0;;;28881:44:::1;::::0;;10959:25:1;;;11015:2;11000:18;;10993:34;;;28881:44:0::1;::::0;10932:18:1;28881:44:0::1;;;;;;;;28346:587:::0;;:::o;26209:150::-;26289:4;26345:6;26313:29;26333:8;26313:19;:29::i;:::-;:38;;26209:150;-1:-1:-1;;;26209:150:0:o;16974:88::-;17029:7;13718:15;13659:1;13718:2;:15;:::i;:::-;13701:33;;:13;:33;:::i;:::-;17040:19;;16974:88;:::o;29606:309::-;12192:6;;-1:-1:-1;;;;;12192:6:0;6540:10;12192:22;12184:67;;;;-1:-1:-1;;;12184:67:0;;;;;;;:::i;:::-;29712:1:::1;29700:9;:13;:28;;;;;29727:1;29717:7;:11;29700:28;:65;;;;-1:-1:-1::0;29764:1:0::1;29753:7:::0;29733:16:::1;:9:::0;29745:4:::1;29733:16;:::i;:::-;29732:28;;;;:::i;:::-;:33;;29700:65;29692:104;;;::::0;-1:-1:-1;;;29692:104:0;;12623:2:1;29692:104:0::1;::::0;::::1;12605:21:1::0;12662:2;12642:18;;;12635:30;12701:28;12681:18;;;12674:56;12747:18;;29692:104:0::1;12421:350:1::0;29692:104:0::1;29851:7:::0;29838:9;13718:15:::1;13659:1;13718:2;:15;:::i;:::-;13701:33;::::0;:13:::1;:33;:::i;:::-;29823:24;;;;:::i;:::-;29822:36;;;;:::i;:::-;29807:12;:51:::0;;;29874:33:::1;::::0;160:25:1;;;29874:33:0::1;::::0;148:2:1;133:18;29874:33:0::1;14:177:1::0;31906:246:0;12192:6;;-1:-1:-1;;;;;12192:6:0;6540:10;12192:22;12184:67;;;;-1:-1:-1;;;12184:67:0;;;;;;;:::i;:::-;32003:15:::1;:25:::0;;;32039:26:::1;:41:::0;;;32096:48:::1;32068:12:::0;32115:13:::1;32021:7:::0;32125:3:::1;32115:13;:::i;:::-;:28;;;;:::i;:::-;32096:48;::::0;160:25:1;;;148:2;133:18;32096:48:0::1;14:177:1::0;19144:341:0;-1:-1:-1;;;;;19264:19:0;;19244:4;19264:19;;;:11;:19;;;;;;;;19284:10;19264:31;;;;;;;;-1:-1:-1;;19264:52:0;19261:157;;-1:-1:-1;;;;;19366:19:0;;;;;;:11;:19;;;;;;;;19386:10;19366:31;;;;;;;;:40;;19400:6;;19366:40;:::i;:::-;-1:-1:-1;;;;;19332:19:0;;;;;;:11;:19;;;;;;;;19352:10;19332:31;;;;;;;:74;19261:157;19437:40;19451:6;19459:9;19470:6;19437:13;:40::i;:::-;19430:47;;19144:341;;;;;;:::o;25893:144::-;17464:9;:18;;;;13502:42;25946:7;17464:18;;;;;25946:7;;25989:39;;;:::i;:::-;13718:15;13659:1;13718:2;:15;:::i;:::-;13701:33;;:13;:33;:::i;:::-;25973:56;;;;:::i;17856:213::-;17972:10;17946:4;17993:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;17993:32:0;;;;;;;;;;17946:4;;17963:76;;17984:7;;17993:45;;18028:10;;17993:45;:::i;:::-;17963:8;:76::i;:::-;-1:-1:-1;18057:4:0;17856:213;;;;:::o;27828:128::-;12192:6;;-1:-1:-1;;;;;12192:6:0;6540:10;12192:22;12184:67;;;;-1:-1:-1;;;12184:67:0;;;;;;;:::i;:::-;27887:18:::1;:25:::0;;-1:-1:-1;;;;27887:25:0::1;-1:-1:-1::0;;;27887:25:0::1;::::0;;27928:20:::1;::::0;::::1;::::0;27887:25;;27928:20:::1;27828:128::o:0;32160:233::-;12192:6;;-1:-1:-1;;;;;12192:6:0;6540:10;12192:22;12184:67;;;;-1:-1:-1;;;12184:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32254:19:0;::::1;32246:47;;;;-1:-1:-1::0;;;32246:47:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32304:21:0;::::1;;::::0;;;:14:::1;:21;::::0;;;;;;;;:32;;-1:-1:-1;;32304:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;32352:33;;1394:41:1;;;32352:33:0::1;::::0;1367:18:1;32352:33:0::1;;;;;;;;32160:233:::0;;:::o;18850:122::-;18905:4;18929:35;18937:7;-1:-1:-1;;18929:7:0;:35::i;21497:345::-;21572:7;21609:12;21595:10;;:26;21592:60;;;21648:1;21631:14;;:18;;;;:::i;:::-;21624:25;;;;21592:60;21666:7;21662:87;;;21682:12;:67;;21741:8;;21730;;:19;;;;:::i;:::-;21682:67;;;21724:3;21709:11;;21698:8;;:22;;;;:::i;:::-;21697:30;;;;:::i;21662:87::-;21767:12;:67;;21826:8;;21815;;:19;;;;:::i;:::-;21767:67;;;21809:3;21794:11;;21783:8;;:22;;;;:::i;:::-;21782:30;;;;:::i;30218:222::-;12192:6;;-1:-1:-1;;;;;12192:6:0;6540:10;12192:22;12184:67;;;;-1:-1:-1;;;12184:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30309:20:0;::::1;30301:48;;;;-1:-1:-1::0;;;30301:48:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30360:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;;;;:28;;-1:-1:-1;;30360:28:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30404;;1394:41:1;;;30404:28:0::1;::::0;1367:18:1;30404:28:0::1;1254:187:1::0;32398:772:0;12192:6;;-1:-1:-1;;;;;12192:6:0;6540:10;12192:22;12184:67;;;;-1:-1:-1;;;12184:67:0;;;;;;;:::i;:::-;32517:35;;::::1;32509:73;;;::::0;-1:-1:-1;;;32509:73:0;;13585:2:1;32509:73:0::1;::::0;::::1;13567:21:1::0;13624:2;13604:18;;;13597:30;13663:27;13643:18;;;13636:55;13708:18;;32509:73:0::1;13383:349:1::0;32509:73:0::1;32613:11;::::0;;-1:-1:-1;;;;32635:19:0;::::1;::::0;;;-1:-1:-1;;;32613:11:0;::::1;;;-1:-1:-1::0;32751:336:0::1;32771:21:::0;;::::1;32751:336;;;32823:14;:29;32838:10;;32849:1;32838:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32823:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;32823:29:0;;::::1;;32822:30;:61:::0;::::1;;;-1:-1:-1::0;32881:1:0::1;32856:10:::0;;32867:1;32856:13;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32856:27:0::1;;;32822:61;32814:119;;;::::0;-1:-1:-1;;;32814:119:0;;14071:2:1;32814:119:0::1;::::0;::::1;14053:21:1::0;14110:2;14090:18;;;14083:30;14149:34;14129:18;;;14122:62;-1:-1:-1;;;14200:18:1;;;14193:43;14253:19;;32814:119:0::1;13869:409:1::0;32814:119:0::1;32948:72;32962:10;32974;;32985:1;32974:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;33003:15;13659:1;33003:2;:15;:::i;:::-;32989:7;;32997:1;32989:10;;;;;;;:::i;:::-;;;;;;;:30;;;;:::i;:::-;32948:13;:72::i;:::-;;33060:15;33035:7;:22;33043:10;;33054:1;33043:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33035:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;33035:22:0;:40;32794:3;::::1;::::0;::::1;:::i;:::-;;;;32751:336;;;-1:-1:-1::0;33097:11:0::1;:26:::0;;-1:-1:-1;;;;33097:26:0::1;-1:-1:-1::0;;;33097:26:0;::::1;;;;::::0;;33139:23:::1;::::0;33151:10:::1;::::0;33139:23:::1;::::0;-1:-1:-1;;33139:23:0::1;32498:672;32398:772:::0;;;;:::o;26879:285::-;12192:6;;-1:-1:-1;;;;;12192:6:0;6540:10;12192:22;12184:67;;;;-1:-1:-1;;;12184:67:0;;;;;;;:::i;:::-;26976:5:::1;26953:11;:20;26965:7;12018::::0;12045:6;-1:-1:-1;;;;;12045:6:0;;11980:79;26965:7:::1;-1:-1:-1::0;;;;;26953:20:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;26953:20:0;;;:28;;;::::1;;-1:-1:-1::0;;26953:28:0;;::::1;::::0;;;::::1;::::0;;;26992:15:::1;-1:-1:-1::0;27008:7:0::1;12018::::0;12045:6;-1:-1:-1;;;;;12045:6:0;;11980:79;27008:7:::1;-1:-1:-1::0;;;;;26992:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;26992:24:0;;;:32;;;::::1;;-1:-1:-1::0;;26992:32:0;;::::1;::::0;;;::::1;::::0;;;27035:18:::1;-1:-1:-1::0;27054:7:0::1;12018::::0;12045:6;-1:-1:-1;;;;;12045:6:0;;11980:79;27054:7:::1;-1:-1:-1::0;;;;;27035:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;27035:27:0;;;:35;;;::::1;;-1:-1:-1::0;;27035:35:0;;::::1;::::0;;;::::1;::::0;;;27081:11:::1;-1:-1:-1::0;27093:7:0::1;12018::::0;12045:6;-1:-1:-1;;;;;12045:6:0;;11980:79;27093:7:::1;-1:-1:-1::0;;;;;27081:20:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;27081:20:0;;;15209:42:::1;27081:35:::0;;;;;;;:39;27131:25:::1;:23;:25::i;:::-;26879:285::o:0;30698:762::-;12192:6;;-1:-1:-1;;;;;12192:6:0;6540:10;12192:22;12184:67;;;;-1:-1:-1;;;12184:67:0;;;;;;;:::i;:::-;30907:13;30881:17:::1;30897:1;30907:13:::0;30881:17:::1;:::i;:::-;30880:23;::::0;30902:1:::1;30880:23;:::i;:::-;:40;30872:105;;;::::0;-1:-1:-1;;;30872:105:0;;14625:2:1;30872:105:0::1;::::0;::::1;14607:21:1::0;14664:2;14644:18;;;14637:30;14703:34;14683:18;;;14676:62;-1:-1:-1;;;14754:18:1;;;14747:50;14814:19;;30872:105:0::1;14423:416:1::0;30872:105:0::1;30988:12;:28:::0;;;31027:12:::1;:28:::0;;;31066:6:::1;:16:::0;;;31093:9:::1;:22:::0;;;31126:8:::1;:20:::0;;;31105:10;31075:7;31168:29:::1;31042:13:::0;31003;31168:29:::1;:::i;:::-;:39;;;;:::i;:::-;:52;;;;:::i;:::-;31157:8;:63:::0;31231:14:::1;:32:::0;;;31294:18:::1;31311:1;31248:15:::0;31294:18:::1;:::i;:::-;31282:8;;:30;;31274:56;;;::::0;-1:-1:-1;;;31274:56:0;;15046:2:1;31274:56:0::1;::::0;::::1;15028:21:1::0;15085:2;15065:18;;;15058:30;-1:-1:-1;;;15104:18:1;;;15097:43;15157:18;;31274:56:0::1;14844:337:1::0;31274:56:0::1;31361:8;;31349;;:20;;31341:52;;;::::0;-1:-1:-1;;;31341:52:0;;15388:2:1;31341:52:0::1;::::0;::::1;15370:21:1::0;15427:2;15407:18;;;15400:30;-1:-1:-1;;;15446:18:1;;;15439:49;15505:18;;31341:52:0::1;15186:343:1::0;31341:52:0::1;31417:8;::::0;31427:14:::1;::::0;31443:8:::1;::::0;31409:43:::1;::::0;;8627:25:1;;;8683:2;8668:18;;8661:34;;;;8711:18;;;8704:34;31409:43:0;::::1;::::0;;;;8615:2:1;31409:43:0;;::::1;30698:762:::0;;;;;;:::o;18077:411::-;18228:10;18172:4;18216:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;18216:32:0;;;;;;;;;;18267:35;;;;18259:85;;;;-1:-1:-1;;;18259:85:0;;15736:2:1;18259:85:0;;;15718:21:1;15775:2;15755:18;;;15748:30;15814:34;15794:18;;;15787:62;-1:-1:-1;;;15865:18:1;;;15858:35;15910:19;;18259:85:0;15534:401:1;18259:85:0;18380:65;18389:10;18401:7;18429:15;18410:16;:34;18380:8;:65::i;:::-;-1:-1:-1;18476:4:0;;18077:411;-1:-1:-1;;;18077:411:0:o;18980:156::-;19060:4;19084:44;19098:10;19110:9;19121:6;19084:13;:44::i;29927:283::-;12192:6;;-1:-1:-1;;;;;12192:6:0;6540:10;12192:22;12184:67;;;;-1:-1:-1;;;12184:67:0;;;;;;;:::i;:::-;30035:1:::1;30025:7;:11;:31;;;;;30051:5;30040:7;:16;;30025:31;30017:77;;;::::0;-1:-1:-1;;;30017:77:0;;16142:2:1;30017:77:0::1;::::0;::::1;16124:21:1::0;16181:2;16161:18;;;16154:30;16220:34;16200:18;;;16193:62;-1:-1:-1;;;16271:18:1;;;16264:31;16312:19;;30017:77:0::1;15940:397:1::0;30017:77:0::1;30151:7:::0;30138:9;13718:15:::1;13659:1;13718:2;:15;:::i;:::-;13701:33;::::0;:13:::1;:33;:::i;:::-;30123:24;;;;:::i;:::-;30122:36;;;;:::i;:::-;30105:14;:53:::0;;;30174:28:::1;::::0;160:25:1;;;30174:28:0::1;::::0;148:2:1;133:18;30174:28:0::1;14:177:1::0;27172:242:0;12192:6;;-1:-1:-1;;;;;12192:6:0;6540:10;12192:22;12184:67;;;;-1:-1:-1;;;12184:67:0;;;;;;;:::i;:::-;27251:8:::1;27247:78;;;27283:18;::::0;-1:-1:-1;;;27283:18:0;::::1;;;27282:19;27274:51;;;::::0;-1:-1:-1;;;27274:51:0;;16544:2:1;27274:51:0::1;::::0;::::1;16526:21:1::0;16583:2;16563:18;;;16556:30;-1:-1:-1;;;16602:18:1;;;16595:49;16661:18;;27274:51:0::1;16342:343:1::0;27274:51:0::1;27336:17;:28:::0;;;::::1;;-1:-1:-1::0;;;27336:28:0::1;-1:-1:-1::0;;;;27336:28:0;;::::1;;::::0;;27380:26:::1;::::0;::::1;::::0;::::1;::::0;27356:8;1419:14:1;1412:22;1394:41;;1382:2;1367:18;;1254:187;27380:26:0::1;;;;;;;;27172:242:::0;:::o;31468:430::-;12192:6;;-1:-1:-1;;;;;12192:6:0;6540:10;12192:22;12184:67;;;;-1:-1:-1;;;12184:67:0;;;;;;;:::i;:::-;31612:1:::1;31597:12;:16;:39;;;;;31635:1;31617:15;:19;31597:39;31589:87;;;::::0;-1:-1:-1;;;31589:87:0;;16892:2:1;31589:87:0::1;::::0;::::1;16874:21:1::0;16931:2;16911:18;;;16904:30;16970:34;16950:18;;;16943:62;-1:-1:-1;;;17021:18:1;;;17014:33;17064:19;;31589:87:0::1;16690:399:1::0;31589:87:0::1;31687:11;:22:::0;;-1:-1:-1;;;;31687:22:0::1;-1:-1:-1::0;;;31687:22:0;::::1;;;;::::0;;31749:15;13718::::1;13659:1;13718:2;:15;:::i;:::-;13701:33;::::0;:13:::1;:33;:::i;:::-;31734:30;;;;:::i;:::-;31720:11;:44:::0;31806:12;13718:15:::1;13659:1;13718:2;:15;:::i;:::-;13701:33;::::0;:13:::1;:33;:::i;:::-;31791:27;;;;:::i;:::-;31775:13;:43:::0;;;31850:11:::1;::::0;31878::::1;::::0;31834:56:::1;::::0;;17290:25:1;;;17346:2;17331:18;;17324:34;;;;31878:11:0::1;-1:-1:-1::0;;;31878:11:0;;::::1;;17401:14:1::0;17394:22;17374:18;;;17367:50;31834:56:0;;::::1;::::0;;;;17278:2:1;31834:56:0;;::::1;31468:430:::0;;;:::o;26045:156::-;26113:7;26171:22;:20;:22::i;:::-;-1:-1:-1;;;;;26162:4:0;17464:18;17446:7;17464:18;;;:9;:18;;;;;;26141:26;;:8;:26;:::i;:::-;26140:53;;;;:::i;27426:390::-;12192:6;;-1:-1:-1;;;;;12192:6:0;6540:10;12192:22;12184:67;;;;-1:-1:-1;;;12184:67:0;;;;;;;:::i;:::-;27539:9:::1;::::0;-1:-1:-1;;;;;27516:33:0;;::::1;27539:9:::0;::::1;27516:33;27512:166;;27574:18;::::0;-1:-1:-1;;;27574:18:0;::::1;;;27573:19;27565:51;;;::::0;-1:-1:-1;;;27565:51:0;;16544:2:1;27565:51:0::1;::::0;::::1;16526:21:1::0;16583:2;16563:18;;;16556:30;-1:-1:-1;;;16602:18:1;;;16595:49;16661:18;;27565:51:0::1;16342:343:1::0;27565:51:0::1;27631:9;:35:::0;;-1:-1:-1;;;;;;27631:35:0::1;-1:-1:-1::0;;;;;27631:35:0;::::1;;::::0;;27512:166:::1;27692:5;27688:68;;;27712:9;::::0;:44:::1;::::0;-1:-1:-1;;;27712:44:0;;27744:4:::1;27712:44;::::0;::::1;17640:34:1::0;-1:-1:-1;;;;;27751:4:0::1;17710:15:1::0;;17690:18;;;17683:43;27712:9:0;;::::1;::::0;:23:::1;::::0;17575:18:1;;27712:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27688:68;27782:26;::::0;-1:-1:-1;;;;;27782:26:0;::::1;::::0;::::1;::::0;;;::::1;27426:390:::0;;:::o;27968:370::-;12192:6;;-1:-1:-1;;;;;12192:6:0;6540:10;12192:22;12184:67;;;;-1:-1:-1;;;12184:67:0;;;;;;;:::i;:::-;28068:4:::1;-1:-1:-1::0;;;;;28055:17:0::1;:9;-1:-1:-1::0;;;;;28055:17:0::1;;;:47;;;;-1:-1:-1::0;;;;;;28076:26:0;::::1;15209:42;28076:26;;28055:47;28047:105;;;::::0;-1:-1:-1;;;28047:105:0;;17939:2:1;28047:105:0::1;::::0;::::1;17921:21:1::0;17978:2;17958:18;;;17951:30;18017:34;17997:18;;;17990:62;-1:-1:-1;;;18068:18:1;;;18061:43;18121:19;;28047:105:0::1;17737:409:1::0;28047:105:0::1;-1:-1:-1::0;;;;;28163:22:0;::::1;;::::0;;;:11:::1;:22;::::0;;;;;;;:29;;28188:4:::1;-1:-1:-1::0;;28163:29:0;;::::1;::::0;::::1;::::0;;;28203:18:::1;:29:::0;;;;;:36;;;::::1;::::0;::::1;::::0;;28250:15:::1;:26:::0;;;;;;:33;;;;::::1;;::::0;;;28299:31;::::1;::::0;28163:22;28299:31:::1;27968:370:::0;:::o;26367:504::-;12192:6;;-1:-1:-1;;;;;12192:6:0;6540:10;12192:22;12184:67;;;;-1:-1:-1;;;12184:67:0;;;;;;;:::i;:::-;26480:5:::1;26457:11;:20;26469:7;12018::::0;12045:6;-1:-1:-1;;;;;12045:6:0;;11980:79;26469:7:::1;-1:-1:-1::0;;;;;26457:20:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;26457:20:0;;;:28;;;::::1;;-1:-1:-1::0;;26457:28:0;;::::1;::::0;;;::::1;::::0;;;26496:15:::1;-1:-1:-1::0;26512:7:0::1;12018::::0;12045:6;-1:-1:-1;;;;;12045:6:0;;11980:79;26512:7:::1;-1:-1:-1::0;;;;;26496:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;26496:24:0;;;:32;;;::::1;;-1:-1:-1::0;;26496:32:0;;::::1;::::0;;;::::1;::::0;;;26539:18:::1;-1:-1:-1::0;26558:7:0::1;12018::::0;12045:6;-1:-1:-1;;;;;12045:6:0;;11980:79;26558:7:::1;-1:-1:-1::0;;;;;26539:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;26539:27:0;;;:35;;;::::1;;-1:-1:-1::0;;26539:35:0;;::::1;::::0;;;::::1;::::0;;;26585:11:::1;-1:-1:-1::0;26597:7:0::1;12018::::0;12045:6;-1:-1:-1;;;;;12045:6:0;;11980:79;26597:7:::1;-1:-1:-1::0;;;;;26585:20:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;26585:20:0;;;15209:42:::1;26585:35:::0;;;;;;;:39;26635:33:::1;26659:8:::0;26635:23:::1;:33::i;:::-;-1:-1:-1::0;;;;;26679:21:0::1;;::::0;;;:11:::1;:21;::::0;;;;;;;:28;;26703:4:::1;-1:-1:-1::0;;26679:28:0;;::::1;::::0;::::1;::::0;;;26718:15:::1;:25:::0;;;;;:32;;;::::1;::::0;::::1;::::0;;26761:18:::1;:28:::0;;;;;:35;;;;::::1;::::0;;::::1;::::0;;26807:11:::1;:21:::0;;;;;15209:42:::1;26807:36:::0;;;;;;;-1:-1:-1;;26807:56:0;;26367:504::o;30448:242::-;12192:6;;-1:-1:-1;;;;;12192:6:0;6540:10;12192:22;12184:67;;;;-1:-1:-1;;;12184:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30543:20:0;::::1;30535:48;;;;-1:-1:-1::0;;;30535:48:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30594:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;;;;;:32;;-1:-1:-1;;30594:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30642:40;;1394:41:1;;;30642:40:0::1;::::0;1367:18:1;30642:40:0::1;1254:187:1::0;19493:1186:0;-1:-1:-1;;;;;19610:17:0;;19585:4;19610:17;;;:9;:17;;;;;;:27;-1:-1:-1;19610:27:0;19602:60;;;;-1:-1:-1;;;19602:60:0;;18353:2:1;19602:60:0;;;18335:21:1;18392:2;18372:18;;;18365:30;-1:-1:-1;;;18411:18:1;;;18404:50;18471:18;;19602:60:0;18151:344:1;19602:60:0;19690:1;19681:6;:10;19673:46;;;;-1:-1:-1;;;19673:46:0;;18702:2:1;19673:46:0;;;18684:21:1;18741:2;18721:18;;;18714:30;18780:25;18760:18;;;18753:53;18823:18;;19673:46:0;18500:347:1;19673:46:0;19735:6;;;;19732:63;;;19751:41;19766:6;19774:9;19785:6;19751:14;:41::i;:::-;19744:48;;;;19732:63;19807:28;19820:6;19828;19807:12;:28::i;:::-;-1:-1:-1;;;;;19861:25:0;;;;;;:14;:25;;;;;;;;19860:26;:47;;;;-1:-1:-1;;;;;;19890:17:0;;13502:42;19890:17;;19860:47;19856:148;;;-1:-1:-1;;;;;19929:26:0;;;;;;:15;:26;;;;;;;;19924:68;;19957:35;19974:9;19985:6;19957:16;:35::i;:::-;25862:10;;20016:118;;-1:-1:-1;;;;;20041:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;20071:29:0;;;;;;:18;:29;;;;;;;;20041:59;20033:98;;;;-1:-1:-1;;;20033:98:0;;19054:2:1;20033:98:0;;;19036:21:1;19093:2;19073:18;;;19066:30;19132:28;19112:18;;;19105:56;19178:18;;20033:98:0;18852:350:1;20033:98:0;-1:-1:-1;;;;;20146:17:0;;;;;;:9;:17;;;;;:27;;20167:6;;20146:17;:27;;20167:6;;20146:27;:::i;:::-;;;;-1:-1:-1;;;;;;;21462:19:0;;20186:22;21462:19;;;:11;:19;;;;;;;;21461:20;20211:49;;;;-1:-1:-1;;;;;;21462:19:0;;21437:4;21462:19;;;:11;:19;;;;;;;;21461:20;20236:24;20211:95;;20300:6;20211:95;;;20263:34;20271:6;20279:9;20290:6;20263:7;:34::i;:::-;20186:120;;20330:33;20345:6;20353:9;20330:14;:33::i;:::-;20327:74;;;20370:10;;20366:32;;20382:16;20391:6;20382:8;:16::i;:::-;-1:-1:-1;;;;;20421:20:0;;;;;;:9;:20;;;;;:38;;20445:14;;20421:20;:38;;20445:14;;20421:38;:::i;:::-;;;;-1:-1:-1;;25862:10:0;;:15;;20487:31;;;;-1:-1:-1;20501:17:0;;-1:-1:-1;;;20501:17:0;;;;20487:31;20484:104;;;20533:9;;:55;;-1:-1:-1;;;20533:55:0;;-1:-1:-1;;;;;19465:15:1;;;20533:55:0;;;19447:34:1;19517:15;;;19497:18;;;19490:43;19549:18;;;19542:34;;;20533:9:0;;;;:28;;19382:18:1;;20533:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20484:104;20623:9;-1:-1:-1;;;;;20606:43:0;20615:6;-1:-1:-1;;;;;20606:43:0;-1:-1:-1;;;;;;;;;;;20634:14:0;20606:43;;;;160:25:1;;148:2;133:18;;14:177;20606:43:0;;;;;;;;-1:-1:-1;20667:4:0;;19493:1186;-1:-1:-1;;;;19493:1186:0:o;18496:346::-;-1:-1:-1;;;;;18598:19:0;;18590:68;;;;-1:-1:-1;;;18590:68:0;;20039:2:1;18590:68:0;;;20021:21:1;20078:2;20058:18;;;20051:30;20117:34;20097:18;;;20090:62;-1:-1:-1;;;20168:18:1;;;20161:34;20212:19;;18590:68:0;19837:400:1;18590:68:0;-1:-1:-1;;;;;18677:21:0;;18669:68;;;;-1:-1:-1;;;18669:68:0;;20444:2:1;18669:68:0;;;20426:21:1;20483:2;20463:18;;;20456:30;20522:34;20502:18;;;20495:62;-1:-1:-1;;;20573:18:1;;;20566:32;20615:19;;18669:68:0;20242:398:1;18669:68:0;-1:-1:-1;;;;;18750:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18802:32;;160:25:1;;;18802:32:0;;133:18:1;18802:32:0;;;;;;;18496:346;;;:::o;12621:148::-;12192:6;;-1:-1:-1;;;;;12192:6:0;6540:10;12192:22;12184:67;;;;-1:-1:-1;;;12184:67:0;;;;;;;:::i;:::-;12728:1:::1;12712:6:::0;;12691:40:::1;::::0;-1:-1:-1;;;;;12712:6:0;;::::1;::::0;12691:40:::1;::::0;12728:1;;12691:40:::1;12759:1;12742:19:::0;;-1:-1:-1;;;;;;12742:19:0::1;::::0;;12621:148::o;12924:244::-;12192:6;;-1:-1:-1;;;;;12192:6:0;6540:10;12192:22;12184:67;;;;-1:-1:-1;;;12184:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13013:22:0;::::1;13005:73;;;::::0;-1:-1:-1;;;13005:73:0;;20847:2:1;13005:73:0::1;::::0;::::1;20829:21:1::0;20886:2;20866:18;;;20859:30;20925:34;20905:18;;;20898:62;-1:-1:-1;;;20976:18:1;;;20969:36;21022:19;;13005:73:0::1;20645:402:1::0;13005:73:0::1;13115:6;::::0;;13094:38:::1;::::0;-1:-1:-1;;;;;13094:38:0;;::::1;::::0;13115:6;::::1;::::0;13094:38:::1;::::0;::::1;13143:6;:17:::0;;-1:-1:-1;;;;;;13143:17:0::1;-1:-1:-1::0;;;;;13143:17:0;;;::::1;::::0;;;::::1;::::0;;12924:244::o;20687:259::-;-1:-1:-1;;;;;20797:17:0;;20780:4;20797:17;;;:9;:17;;;;;:27;;20818:6;;20797:17;20780:4;;20797:27;;20818:6;;20797:27;:::i;:::-;;;;-1:-1:-1;;;;;;;20835:20:0;;;;;;:9;:20;;;;;:30;;20859:6;;20835:20;:30;;20859:6;;20835:30;:::i;:::-;;;;;;;;20898:9;-1:-1:-1;;;;;20881:35:0;20890:6;-1:-1:-1;;;;;20881:35:0;-1:-1:-1;;;;;;;;;;;20909:6:0;20881:35;;;;160:25:1;;148:2;133:18;;14:177;20881:35:0;;;;;;;;-1:-1:-1;20934:4:0;20687:259;;;;;:::o;21201:166::-;21298:12;;21288:6;:22;;:49;;;-1:-1:-1;;;;;;21314:23:0;;;;;;:15;:23;;;;;;;;21288:49;21280:79;;;;-1:-1:-1;;;21280:79:0;;21254:2:1;21280:79:0;;;21236:21:1;21293:2;21273:18;;;21266:30;-1:-1:-1;;;21312:18:1;;;21305:47;21369:18;;21280:79:0;21052:341:1;21280:79:0;21201:166;;:::o;20958:235::-;21066:14;;-1:-1:-1;;;;;21099:20:0;;21044:19;21099:20;;;:9;:20;;;;;;21066:14;;21099:29;;21122:6;;21099:29;:::i;:::-;:44;;21091:94;;;;-1:-1:-1;;;21091:94:0;;21600:2:1;21091:94:0;;;21582:21:1;21639:2;21619:18;;;21612:30;21678:34;21658:18;;;21651:62;-1:-1:-1;;;21729:18:1;;;21722:35;21774:19;;21091:94:0;21398:401:1;21091:94:0;21033:160;20958:235;;:::o;21850:1648::-;-1:-1:-1;;;;;22011:22:0;;21936:7;22011:22;;;:14;:22;;;;;;21936:7;;;;22011:22;;22010:23;:73;;;;-1:-1:-1;22055:10:0;;-1:-1:-1;;;;;22037:15:0;;;;;;:7;:15;;;;;;22068;;22037:28;;;:::i;:::-;:46;22010:73;-1:-1:-1;;;;;22097:25:0;;;;;;:14;:25;;;;;;21988:95;;-1:-1:-1;22097:25:0;;:44;;;;;22140:1;22126:11;;:15;22097:44;22094:701;;;22159:16;22177;22207:4;-1:-1:-1;;;;;22198:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;22284:16:0;;22158:68;;-1:-1:-1;22158:68:0;-1:-1:-1;22241:22:0;;22326:6;;22284:16;;:38;;22314:8;22284:38;;;22303:8;22284:38;-1:-1:-1;;;;;22283:49:0;;;;;:::i;:::-;22266:13;:6;22275:4;22266:13;:::i;:::-;:67;;;;:::i;:::-;22403:14;;-1:-1:-1;;;;;22384:16:0;;;;;;:8;:16;;;;;;22241:92;;-1:-1:-1;22384:33:0;;;:::i;:::-;22366:15;:51;22362:171;;;-1:-1:-1;;;;;22438:16:0;;;;;;:8;:16;;;;;;;;22457:15;22438:34;;22491:14;:22;;;;;:26;22362:171;-1:-1:-1;;;;;22561:22:0;;;;;;:14;:22;;;;;:40;;22587:14;;22561:22;:40;;22587:14;;22561:40;:::i;:::-;;;;-1:-1:-1;;22660:17:0;;-1:-1:-1;;;;;22634:22:0;;;;;;:14;:22;;;;;;:43;22630:154;;22754:14;;22747:3;22732:11;;22721:8;;22712:6;:17;;;;:::i;:::-;:31;;;;:::i;:::-;22711:39;;;;:::i;:::-;22710:58;;;;:::i;:::-;22698:70;;22630:154;22143:652;;;22094:701;22811:14;22807:127;;22920:14;;-1:-1:-1;;;;;22874:25:0;;;;;;:14;:25;;;;;;22862:54;;22874:25;;22901:14;22862:11;:54::i;:::-;22853:63;;:6;:63;:::i;:::-;22852:82;;;;:::i;:::-;22840:94;;22807:127;-1:-1:-1;;;;;22959:22:0;;;;;;:14;:22;;;;;;;;:49;;;;-1:-1:-1;;;;;;22985:18:0;;;;;;:7;:18;;;;;;:23;22959:49;22955:104;;;-1:-1:-1;;;;;23023:18:0;;;;;;:7;:18;;;;;23044:15;23023:36;;22955:104;23106:9;;23072:15;;23106:13;23102:233;;23170:8;;23158:9;;23146:21;;:9;:21;:::i;:::-;:32;;;;:::i;:::-;23136:42;-1:-1:-1;23193:20:0;23136:42;23193:20;;:::i;:::-;-1:-1:-1;;;;;23238:12:0;23228:23;;;;;:9;:23;;;;;:36;;23193:20;;-1:-1:-1;23193:20:0;;23228:23;;;:36;;23193:20;;23228:36;:::i;:::-;;;;;;;;23301:12;-1:-1:-1;;;;;23284:39:0;23293:6;-1:-1:-1;;;;;23284:39:0;-1:-1:-1;;;;;;;;;;;23315:7:0;23284:39;;;;160:25:1;;148:2;133:18;;14:177;23284:39:0;;;;;;;;23102:233;23363:4;23345:24;;;;:9;:24;;;;;:37;;23373:9;;23345:24;:37;;23373:9;;23345:37;:::i;:::-;;;;-1:-1:-1;;23398:42:0;;160:25:1;;;23423:4:0;;-1:-1:-1;;;;;23398:42:0;;;-1:-1:-1;;;;;;;;;;;23398:42:0;148:2:1;133:18;23398:42:0;;;;;;;23470:19;23482:7;23470:9;:19;:::i;:::-;23460:30;;:6;:30;:::i;:::-;23453:37;21850:1648;-1:-1:-1;;;;;;;21850:1648:0:o;23506:329::-;-1:-1:-1;;;;;23613:22:0;;23588:4;23613:22;;;:14;:22;;;;;;;;23612:23;:56;;;;-1:-1:-1;;;;;;23649:19:0;;;;;;:11;:19;;;;;;;;23648:20;23612:56;:76;;;;-1:-1:-1;23682:6:0;;;;23681:7;23612:76;:100;;;;-1:-1:-1;23701:11:0;;-1:-1:-1;;;23701:11:0;;;;23612:100;:138;;;;-1:-1:-1;;;;;;23725:25:0;;;;;;:14;:25;;;;;;;;23612:138;:190;;;;-1:-1:-1;23791:11:0;;23781:4;23763:24;;;;:9;:24;;;;;;:39;;23612:190;:215;;;;-1:-1:-1;;23815:8:0;;:12;;;23506:329;-1:-1:-1;;23506:329:0:o;23843:1944::-;15796:6;:13;;-1:-1:-1;;15796:13:0;15805:4;15796:13;;;23938::::1;::::0;15796:6;;23929:22;::::1;:47;;23963:13;;23929:47;;;23954:6;23929:47;24009:4;23991:24;::::0;;;:9:::1;:24;::::0;;;;;23906:70;;-1:-1:-1;23991:39:0;-1:-1:-1;23987:84:0::1;;;-1:-1:-1::0;24065:4:0::1;24047:24;::::0;;;:9:::1;:24;::::0;;;;;23987:84:::1;24082:27;24112:60;24128:15;;24145:26;;24112:15;:60::i;:::-;:79;;24179:12;;24112:79;;;24175:1;24112:79;24082:109;;24202:23;24294:1;24280:9;;24269:8;;:20;;;;:::i;:::-;24230:34;24245:19:::0;24230:12;:34:::1;:::i;:::-;24229:61;;;;:::i;:::-;24228:67;;;;:::i;:::-;24202:93:::0;-1:-1:-1;24306:31:0::1;24202:93:::0;24306:31;::::1;:::i;:::-;24374:16;::::0;;24388:1:::1;24374:16:::0;;;;;::::1;::::0;;24306:31;;-1:-1:-1;24350:21:0::1;::::0;24374:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;24374:16:0::1;24350:40;;24419:4;24401;24406:1;24401:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;24401:23:0::1;;;-1:-1:-1::0;;;;;24401:23:0::1;;;::::0;::::1;24445:6;-1:-1:-1::0;;;;;24445:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24435:4;24440:1;24435:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24435:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;24541:188:::1;::::0;-1:-1:-1;;;24541:188:0;;:6:::1;:57:::0;;::::1;::::0;::::1;::::0;:188:::1;::::0;24613:12;;24640:1:::1;::::0;24656:4;;24683::::1;::::0;24703:15:::1;::::0;24541:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;24856:9:0::1;::::0;24768:21:::1;::::0;-1:-1:-1;24742:23:0::1;::::0;-1:-1:-1;24869:1:0::1;::::0;24834:31:::1;::::0;:19;:31:::1;:::i;:::-;24833:37;;;;:::i;:::-;24822:8;;:48;;;;:::i;:::-;24800:70:::0;-1:-1:-1;24883:23:0::1;24965:1;24800:70:::0;24910:37:::1;24928:19:::0;24910:15;:37:::1;:::i;:::-;24909:53;;;;:::i;:::-;:57;;;;:::i;:::-;24883:83;;24977:23;25038:11;25022:12;;25004:15;:30;;;;:::i;:::-;25003:46;;;;:::i;:::-;24977:72:::0;-1:-1:-1;25060:17:0::1;25099:33;24977:72:::0;25099:15;:33:::1;:::i;:::-;25080:53;::::0;:15;:53:::1;:::i;:::-;25060:73:::0;-1:-1:-1;25149:19:0;;25146:442:::1;;25274:237;::::0;-1:-1:-1;;;25274:237:0;;25347:4:::1;25274:237;::::0;::::1;24166:34:1::0;24216:18;;;24209:34;;;-1:-1:-1;24259:18:1;;;24252:34;;;24302:18;;;24295:34;-1:-1:-1;;;;;25445:17:0::1;24366:15:1::0;;24345:19;;;24338:44;25481:15:0::1;24398:19:1::0;;;24391:35;25274:6:0::1;:22;::::0;::::1;::::0;25304:15;;24100:19:1;;25274:237:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;25531:45:0::1;::::0;;10959:25:1;;;11015:2;11000:18;;10993:34;;;25531:45:0::1;::::0;-1:-1:-1;10932:18:1;25531:45:0::1;;;;;;;25146:442;25612:19:::0;;25608:81:::1;;25646:43;::::0;-1:-1:-1;;;;;25646:17:0::1;:26;::::0;:43;::::1;;;::::0;25673:15;;25646:43:::1;::::0;;;25673:15;25646:26;:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25608:81;25718:13:::0;;25714:63:::1;;25746:31;::::0;-1:-1:-1;;;;;25746:11:0::1;:20;::::0;:31;::::1;;;::::0;25767:9;;25746:31:::1;::::0;;;25767:9;25746:20;:31;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25714:63;-1:-1:-1::0;;15814:6:0;:14;;-1:-1:-1;;15814:14:0;;;-1:-1:-1;;;;;;;;23843:1944:0:o;196:597: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;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;798:131::-;-1:-1:-1;;;;;873:31:1;;863:42;;853:70;;919:1;916;909:12;853:70;798:131;:::o;934:315::-;1002:6;1010;1063:2;1051:9;1042:7;1038:23;1034:32;1031:52;;;1079:1;1076;1069:12;1031:52;1118:9;1105:23;1137:31;1162:5;1137:31;:::i;:::-;1187:5;1239:2;1224:18;;;;1211:32;;-1:-1:-1;;;934:315:1:o;1446:118::-;1532:5;1525:13;1518:21;1511:5;1508:32;1498:60;;1554:1;1551;1544:12;1569:446;1652:6;1660;1668;1676;1729:3;1717:9;1708:7;1704:23;1700:33;1697:53;;;1746:1;1743;1736:12;1697:53;1782:9;1769:23;1759:33;;1839:2;1828:9;1824:18;1811:32;1801:42;;1890:2;1879:9;1875:18;1862:32;1852:42;;1944:2;1933:9;1929:18;1916:32;1957:28;1979:5;1957:28;:::i;:::-;1569:446;;;;-1:-1:-1;1569:446:1;;-1:-1:-1;;1569:446:1:o;2020:248::-;2088:6;2096;2149:2;2137:9;2128:7;2124:23;2120:32;2117:52;;;2165:1;2162;2155:12;2117:52;-1:-1:-1;;2188:23:1;;;2258:2;2243:18;;;2230:32;;-1:-1:-1;2020:248:1:o;2273:456::-;2350:6;2358;2366;2419:2;2407:9;2398:7;2394:23;2390:32;2387:52;;;2435:1;2432;2425:12;2387:52;2474:9;2461:23;2493:31;2518:5;2493:31;:::i;:::-;2543:5;-1:-1:-1;2600:2:1;2585:18;;2572:32;2613:33;2572:32;2613:33;:::i;:::-;2273:456;;2665:7;;-1:-1:-1;;;2719:2:1;2704:18;;;;2691:32;;2273:456::o;3131:382::-;3196:6;3204;3257:2;3245:9;3236:7;3232:23;3228:32;3225:52;;;3273:1;3270;3263:12;3225:52;3312:9;3299:23;3331:31;3356:5;3331:31;:::i;:::-;3381:5;-1:-1:-1;3438:2:1;3423:18;;3410:32;3451:30;3410:32;3451:30;:::i;:::-;3500:7;3490:17;;;3131:382;;;;;:::o;3518:247::-;3577:6;3630:2;3618:9;3609:7;3605:23;3601:32;3598:52;;;3646:1;3643;3636:12;3598:52;3685:9;3672:23;3704:31;3729:5;3704:31;:::i;3770:376::-;3832:6;3840;3893:2;3881:9;3872:7;3868:23;3864:32;3861:52;;;3909:1;3906;3899:12;3861:52;3948:9;3935:23;3967:28;3989:5;3967:28;:::i;4151:367::-;4214:8;4224:6;4278:3;4271:4;4263:6;4259:17;4255:27;4245:55;;4296:1;4293;4286:12;4245:55;-1:-1:-1;4319:20:1;;4362:18;4351:30;;4348:50;;;4394:1;4391;4384:12;4348:50;4431:4;4423:6;4419:17;4407:29;;4491:3;4484:4;4474:6;4471:1;4467:14;4459:6;4455:27;4451:38;4448:47;4445:67;;;4508:1;4505;4498:12;4445:67;4151:367;;;;;:::o;4523:773::-;4645:6;4653;4661;4669;4722:2;4710:9;4701:7;4697:23;4693:32;4690:52;;;4738:1;4735;4728:12;4690:52;4778:9;4765:23;4807:18;4848:2;4840:6;4837:14;4834:34;;;4864:1;4861;4854:12;4834:34;4903:70;4965:7;4956:6;4945:9;4941:22;4903:70;:::i;:::-;4992:8;;-1:-1:-1;4877:96:1;-1:-1:-1;5080:2:1;5065:18;;5052:32;;-1:-1:-1;5096:16:1;;;5093:36;;;5125:1;5122;5115:12;5093:36;;5164:72;5228:7;5217:8;5206:9;5202:24;5164:72;:::i;:::-;4523:773;;;;-1:-1:-1;5255:8:1;-1:-1:-1;;;;4523:773:1:o;5525:523::-;5629:6;5637;5645;5653;5661;5669;5722:3;5710:9;5701:7;5697:23;5693:33;5690:53;;;5739:1;5736;5729:12;5690:53;-1:-1:-1;;5762:23:1;;;5832:2;5817:18;;5804:32;;-1:-1:-1;5883:2:1;5868:18;;5855:32;;5934:2;5919:18;;5906:32;;-1:-1:-1;5985:3:1;5970:19;;5957:33;;-1:-1:-1;6037:3:1;6022:19;6009:33;;-1:-1:-1;5525:523:1;-1:-1:-1;5525:523:1:o;6279:241::-;6335:6;6388:2;6376:9;6367:7;6363:23;6359:32;6356:52;;;6404:1;6401;6394:12;6356:52;6443:9;6430:23;6462:28;6484:5;6462:28;:::i;6525:377::-;6599:6;6607;6615;6668:2;6656:9;6647:7;6643:23;6639:32;6636:52;;;6684:1;6681;6674:12;6636:52;6723:9;6710:23;6742:28;6764:5;6742:28;:::i;:::-;6789:5;6841:2;6826:18;;6813:32;;-1:-1:-1;6892:2:1;6877:18;;;6864:32;;6525:377;-1:-1:-1;;;6525:377:1:o;6907:180::-;6966:6;7019:2;7007:9;6998:7;6994:23;6990:32;6987:52;;;7035:1;7032;7025:12;6987:52;-1:-1:-1;7058:23:1;;6907:180;-1:-1:-1;6907:180:1:o;7092:388::-;7160:6;7168;7221:2;7209:9;7200:7;7196:23;7192:32;7189:52;;;7237:1;7234;7227:12;7189:52;7276:9;7263:23;7295:31;7320:5;7295:31;:::i;:::-;7345:5;-1:-1:-1;7402:2:1;7387:18;;7374:32;7415:33;7374:32;7415:33;:::i;7711:356::-;7913:2;7895:21;;;7932:18;;;7925:30;7991:34;7986:2;7971:18;;7964:62;8058:2;8043:18;;7711:356::o;8749:127::-;8810:10;8805:3;8801:20;8798:1;8791:31;8841:4;8838:1;8831:15;8865:4;8862:1;8855:15;8881:168;8921:7;8987:1;8983;8979:6;8975:14;8972:1;8969:21;8964:1;8957:9;8950:17;8946:45;8943:71;;;8994:18;;:::i;:::-;-1:-1:-1;9034:9:1;;8881:168::o;9054:217::-;9094:1;9120;9110:132;;9164:10;9159:3;9155:20;9152:1;9145:31;9199:4;9196:1;9189:15;9227:4;9224:1;9217:15;9110:132;-1:-1:-1;9256:9:1;;9054:217::o;11038:422::-;11127:1;11170:5;11127:1;11184:270;11205:7;11195:8;11192:21;11184:270;;;11264:4;11260:1;11256:6;11252:17;11246:4;11243:27;11240:53;;;11273:18;;:::i;:::-;11323:7;11313:8;11309:22;11306:55;;;11343:16;;;;11306:55;11422:22;;;;11382:15;;;;11184:270;;;11188:3;11038:422;;;;;:::o;11465:806::-;11514:5;11544:8;11534:80;;-1:-1:-1;11585:1:1;11599:5;;11534:80;11633:4;11623:76;;-1:-1:-1;11670:1:1;11684:5;;11623:76;11715:4;11733:1;11728:59;;;;11801:1;11796:130;;;;11708:218;;11728:59;11758:1;11749:10;;11772:5;;;11796:130;11833:3;11823:8;11820:17;11817:43;;;11840:18;;:::i;:::-;-1:-1:-1;;11896:1:1;11882:16;;11911:5;;11708:218;;12010:2;12000:8;11997:16;11991:3;11985:4;11982:13;11978:36;11972:2;11962:8;11959:16;11954:2;11948:4;11945:12;11941:35;11938:77;11935:159;;;-1:-1:-1;12047:19:1;;;12079:5;;11935:159;12126:34;12151:8;12145:4;12126:34;:::i;:::-;12196:6;12192:1;12188:6;12184:19;12175:7;12172:32;12169:58;;;12207:18;;:::i;:::-;12245:20;;11465:806;-1:-1:-1;;;11465:806:1:o;12276:140::-;12334:5;12363:47;12404:4;12394:8;12390:19;12384:4;12363:47;:::i;12776:125::-;12816:4;12844:1;12841;12838:8;12835:34;;;12849:18;;:::i;:::-;-1:-1:-1;12886:9:1;;12776:125::o;12906:128::-;12946:3;12977:1;12973:6;12970:1;12967:13;12964:39;;;12983:18;;:::i;:::-;-1:-1:-1;13019:9:1;;12906:128::o;13039:339::-;13241:2;13223:21;;;13280:2;13260:18;;;13253:30;-1:-1:-1;;;13314:2:1;13299:18;;13292:45;13369:2;13354:18;;13039:339::o;13737:127::-;13798:10;13793:3;13789:20;13786:1;13779:31;13829:4;13826:1;13819:15;13853:4;13850:1;13843:15;14283:135;14322:3;-1:-1:-1;;14343:17:1;;14340:43;;;14363:18;;:::i;:::-;-1:-1:-1;14410:1:1;14399:13;;14283:135::o;19587:245::-;19654:6;19707:2;19695:9;19686:7;19682:23;19678:32;19675:52;;;19723:1;19720;19713:12;19675:52;19755:9;19749:16;19774:28;19796:5;19774:28;:::i;21804:188::-;21883:13;;-1:-1:-1;;;;;21925:42:1;;21915:53;;21905:81;;21982:1;21979;21972:12;21905:81;21804:188;;;:::o;21997:450::-;22084:6;22092;22100;22153:2;22141:9;22132:7;22128:23;22124:32;22121:52;;;22169:1;22166;22159:12;22121:52;22192:40;22222:9;22192:40;:::i;:::-;22182:50;;22251:49;22296:2;22285:9;22281:18;22251:49;:::i;:::-;22241:59;;22343:2;22332:9;22328:18;22322:25;22387:10;22380:5;22376:22;22369:5;22366:33;22356:61;;22413:1;22410;22403:12;22356:61;22436:5;22426:15;;;21997:450;;;;;:::o;22584:251::-;22654:6;22707:2;22695:9;22686:7;22682:23;22678:32;22675:52;;;22723:1;22720;22713:12;22675:52;22755:9;22749:16;22774:31;22799:5;22774:31;:::i;22840:980::-;23102:4;23150:3;23139:9;23135:19;23181:6;23170:9;23163:25;23207:2;23245:6;23240:2;23229:9;23225:18;23218:34;23288:3;23283:2;23272:9;23268:18;23261:31;23312:6;23347;23341:13;23378:6;23370;23363:22;23416:3;23405:9;23401:19;23394:26;;23455:2;23447:6;23443:15;23429:29;;23476:1;23486:195;23500:6;23497:1;23494:13;23486:195;;;23565:13;;-1:-1:-1;;;;;23561:39:1;23549:52;;23656:15;;;;23621:12;;;;23597:1;23515:9;23486:195;;;-1:-1:-1;;;;;;;23737:32:1;;;;23732:2;23717:18;;23710:60;-1:-1:-1;;;23801:3:1;23786:19;23779:35;23698:3;22840:980;-1:-1:-1;;;22840:980:1:o;24437:306::-;24525:6;24533;24541;24594:2;24582:9;24573:7;24569:23;24565:32;24562:52;;;24610:1;24607;24600:12;24562:52;24639:9;24633:16;24623:26;;24689:2;24678:9;24674:18;24668:25;24658:35;;24733:2;24722:9;24718:18;24712:25;24702:35;;24437:306;;;;;:::o

Swarm Source

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