ETH Price: $3,387.46 (-1.58%)
Gas: 2 Gwei

Token

Kaeri (KAERI)
 

Overview

Max Total Supply

1,000,000,000 KAERI

Holders

1,456 (0.00%)

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

$99,420.00

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.000000001 KAERI

Value
$0.00 ( ~0 Eth) [0.0000%]
0x1cc543590b7e797f36fca5e007906cce847d3af5
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:
Kaeri

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-25
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

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

    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");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // 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
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

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

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

interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

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

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

    string constant _name = "Kaeri";
    string constant _symbol = "KAERI";
    uint8 constant _decimals = 9;

    uint256 _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 _maxTxAmount = 5; //0.5%
    uint256 _maxWalletSize = 10; //1%

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

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

    uint256 marketingFee = 40;
    uint256 marketingSellFee = 40;
    uint256 liquidityFee = 20;
    uint256 liquiditySellFee = 20;
    uint256 totalBuyFee = marketingFee + liquidityFee;
    uint256 totalSellFee = marketingSellFee + liquiditySellFee;
    uint256 feeDenominator = 1000;

    uint256 antiDumpTax = 200;
    uint256 antiDumpPeriod = 30 minutes;
    uint256 antiDumpThreshold = 21;
    bool antiDumpReserve0 = true;

    address public constant liquidityReceiver = DEAD;
    address payable public immutable marketingReceiver;

    uint256 targetLiquidity = 10;
    uint256 targetLiquidityDenominator = 100;

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

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

    address public pair;

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

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 400; //0.25%
    uint256 public swapMinimum = _totalSupply / 10000; //0.01%
    uint256 public maxSwapPercent = 75;

    uint256 public unlocksAt;
    address public locker;

    mapping (address => bool) public whitelist;
    bool public whitelistEnabled = true;

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

    constructor (address _liquidityProvider, address _marketingWallet) {
        marketingReceiver = payable(_marketingWallet);

        router = IDEXRouter(routerAddress);
        _allowances[_liquidityProvider][routerAddress] = type(uint256).max;
        _allowances[address(this)][routerAddress] = type(uint256).max;
        
        isFeeExempt[_liquidityProvider] = true;
        liquidityProviders[_liquidityProvider] = true;

        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[_liquidityProvider] = true;
        isTxLimitExempt[routerAddress] = true;

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

    receive() external payable { }

    function totalSupply() external view 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) {
        _approve(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 address(0)");
        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 address(0) address");
        require(spender != address(0), "ERC20: approve to the address(0) 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, "ERC20: transfer amount exceeds balance");
        require(amount > 0, "No tokens transferred");
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        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] || (whitelistEnabled && whitelist[recipient]), "Contract not launched yet."); }

        if(!liquidityPools[sender] && shouldTakeFee(sender) && _balances[sender] - amount == 0) {
            amount -= 1;
        }

        _balances[sender] -= amount;

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

        emit Transfer(sender, (recipient != DEAD ? recipient : address(0)), 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 {
        require(_balances[recipient] + amount <= getMaximumWallet(), "Transfer amount exceeds the bag size.");
    }

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

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

    function getTotalFee(bool selling) public view returns (uint256) {
        if(launchedAt + deadBlocks > block.number){ return feeDenominator - 1; }
        return (selling ? totalSellFee : totalBuyFee);
    }

    function checkImpactEstimate(uint256 amount) public view returns (uint256) {
        (uint112 reserve0, uint112 reserve1,) = IDEXPair(pair).getReserves();
        return amount * 1000 / ((antiDumpReserve0 ? reserve0 : reserve1) + amount);
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = 0;
        if(liquidityPools[recipient] && antiDumpTax > 0) {
            uint256 impactEstimate = checkImpactEstimate(amount);
            
            if (block.timestamp > lastSell[sender] + antiDumpPeriod) {
                lastSell[sender] = block.timestamp;
                lastSellAmount[sender] = 0;
            }
            
            lastSellAmount[sender] += impactEstimate;
            
            if (lastSellAmount[sender] >= antiDumpThreshold) {
                feeAmount = ((amount * totalSellFee * antiDumpTax) / 100) / feeDenominator;
            }
        }

        if (feeAmount == 0)
            feeAmount = (amount * getTotalFee(liquidityPools[recipient])) / feeDenominator;

        _balances[address(this)] += feeAmount;
        emit Transfer(sender, address(this), feeAmount);

        return amount - feeAmount;
    }

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

    function swapBack(uint256 amount) internal swapping {
        uint256 totalFee = totalBuyFee + totalSellFee;
        uint256 amountToSwap = amount - (amount * maxSwapPercent / 100) < swapThreshold ? amount * maxSwapPercent / 100 : swapThreshold;
        if (_balances[address(this)] < amountToSwap) amountToSwap = _balances[address(this)];
        
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee + liquiditySellFee;
        uint256 amountToLiquify = ((amountToSwap * dynamicLiquidityFee) / totalFee) / 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 / 2;

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

        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) {
            (bool sentMarketing, ) = marketingReceiver.call{value: amountMarketing}("");
            if(!sentMarketing) {
                //Failed to transfer to marketing wallet
            }
        }
    }

    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 {
        require(owner() == _msgSender(), "Caller is not authorized");
        isFeeExempt[owner()] = false;
        isTxLimitExempt[owner()] = false;
        liquidityProviders[owner()] = false;
        _allowances[owner()][routerAddress] = 0;
        super.transferOwnership(newOwner);
    }

    function lockContract(uint256 _weeks) external onlyOwner {
        require(locker == address(0), "Contract already locked");
        require(_weeks > 0, "No lock period specified");
        unlocksAt = block.timestamp + (_weeks * 1 weeks);
        locker = owner();
        super.renounceOwnership();
    }

    function unlockContract() external {
        require(locker != address(0) && (msg.sender == locker || liquidityProviders[msg.sender]), "Caller is not authorized");
        require(unlocksAt <= block.timestamp, "Contract still locked");
        super.transferOwnership(locker);
        locker = address(0);
        unlocksAt = 0;
    }

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

    function _checkOwner() internal view virtual override {
        require(owner() != address(0) && (owner() == _msgSender() || liquidityProviders[_msgSender()]), "Ownable: caller is not authorized");
    }

    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, bool _set) external onlyOwner {
        require(_provider != pair && _provider != routerAddress, "Can't alter trading contracts in this manner.");
        isFeeExempt[_provider] = _set;
        liquidityProviders[_provider] = _set;
        isTxLimitExempt[_provider] = _set;
        emit LiquidityProviderSet(_provider, _set);
    }

    function extractETH() external onlyOwner {
        uint256 bal = balanceOf(address(this));
            if(bal > 0) {
            (bool sent, ) = msg.sender.call{value: bal}("");
                require(sent,"Failed to transfer funds");
        }
    }

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

    function launch(uint256 _deadBlocks, bool _whitelistMode) external payable onlyOwner {
        require(launchedAt == 0 && _deadBlocks < 7);
        require(msg.value > 0, "Insufficient funds");
        uint256 toLP = msg.value;

        IDEXFactory factory = IDEXFactory(router.factory());
        address ETH = router.WETH();

        pair = factory.getPair(ETH, address(this));
        if(pair == address(0))
            pair = factory.createPair(ETH, address(this));

        liquidityPools[pair] = true;
        isFeeExempt[address(this)] = true;
        liquidityProviders[address(this)] = true;

        router.addLiquidityETH{value: toLP}(address(this),balanceOf(address(this)),0,0,msg.sender,block.timestamp);

        whitelistEnabled = _whitelistMode;

        if (!_whitelistMode) {
            deadBlocks = _deadBlocks;
            launchedAt = block.number;
            launchedTime = block.timestamp;
            emit TradingLaunched();
        }
    }

    function endWhitelist(uint256 _deadBlocks) external onlyOwner {
        require(!launched() && _deadBlocks < 7);
        deadBlocks = _deadBlocks;
        whitelistEnabled = false;
        launchedAt = block.number;
        launchedTime = block.timestamp;
        emit TradingLaunched();
    }

    function updateWhitelist(address[] calldata _addresses, bool _enabled) external onlyOwner {
        require(whitelistEnabled, "Whitelist disabled");
        for (uint256 i = 0; i < _addresses.length; i++) {
            whitelist[_addresses[i]] = _enabled;
        }
    }

    function setTxLimit(uint256 thousandths) external onlyOwner {
        require(thousandths > 0 , "Transaction limits too low");
        _maxTxAmount = thousandths;
        emit TransactionLimitSet(getTransactionLimit());
    }

    function getTransactionLimit() public view returns (uint256) {
        if(!launched()) return 0;
        return getCirculatingSupply() * _maxTxAmount / 1000;
    }
    
    function setMaxWallet(uint256 thousandths) external onlyOwner() {
        require(thousandths > 1, "Wallet limits too low");
        _maxWalletSize = thousandths;
        emit MaxWalletSet(getMaximumWallet());
    }

    function getMaximumWallet() public view returns (uint256) {
        if(!launched()) return 0;
        return getCirculatingSupply() * _maxWalletSize / 1000;
    }

    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 _liquiditySellFee, uint256 _marketingFee, uint256 _marketingSellFee, uint256 _feeDenominator) external onlyOwner {
        require((_liquidityFee / 2) * 2 == _liquidityFee, "Liquidity fee must be an even number due to rounding");
        require((_liquiditySellFee / 2) * 2 == _liquiditySellFee, "Liquidity fee must be an even number due to rounding");
        liquidityFee = _liquidityFee;
        liquiditySellFee = _liquiditySellFee;
        marketingFee = _marketingFee;
        marketingSellFee = _marketingSellFee;
        totalBuyFee = _liquidityFee + _marketingFee;
        totalSellFee = _liquiditySellFee + _marketingSellFee;
        feeDenominator = _feeDenominator;
        require(totalBuyFee + totalSellFee <= feeDenominator / 5, "Fees too high");
        emit FeesSet(totalBuyFee, totalSellFee, feeDenominator);
    }

    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));
        }
        swapEnabled = previousSwap;
        emit AirdropSent(msg.sender);
    }

    event AutoLiquify(uint256 amount, uint256 amountToken);
    event ProtectionSet(address indexed protection);
    event ProtectionDisabled();
    event LiquidityProviderSet(address indexed provider, bool isSet);
    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 totalBuyFees, uint256 totalSellFees, uint256 denominator);
    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":"_liquidityProvider","type":"address"},{"internalType":"address","name":"_marketingWallet","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":"totalBuyFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSellFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"denominator","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"},{"indexed":false,"internalType":"bool","name":"isSet","type":"bool"}],"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":"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":[{"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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"checkImpactEstimate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadBlocks","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":"disableProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"endWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"extractETH","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":"getMaximumWallet","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"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTransactionLimit","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":[{"internalType":"uint256","name":"_deadBlocks","type":"uint256"},{"internalType":"bool","name":"_whitelistMode","type":"bool"}],"name":"launch","outputs":[],"stateMutability":"payable","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":[{"internalType":"uint256","name":"_weeks","type":"uint256"}],"name":"lockContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"locker","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":"maxSwapPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"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":"_liquiditySellFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_marketingSellFee","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"},{"internalType":"bool","name":"_set","type":"bool"}],"name":"setLiquidityProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thousandths","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":"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":"thousandths","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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlockContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlocksAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052620000126009600a620003ab565b6200002290633b9aca00620003c3565b6001556005600255600a6003556028600a556028600b556014600c556014600d55600c54600a54620000559190620003dd565b600e55600d54600b546200006a9190620003dd565b600f556103e860105560c8601155610708601255601560138190556014805460ff19166001908117909155600a9091556064601655601d805462ffffff60a01b1916600160b01b17905554620000c49061019090620003f3565b601e55612710600154620000d99190620003f3565b601f55604b6020556024805460ff19166001179055348015620000fb57600080fd5b50604051620041f1380380620041f18339810160408190526200011e9162000433565b620001293362000246565b6001600160a01b03818116608052737a250d5630b4cf539739df2c5dacb4c659f2488d60a081905290831660008181526005602081815260408084208685528252808420600019908190553080865293835281852096855295825280842095909555838352600881528483208054600160ff19918216811790925560188352868520805482168317905592845260098252858420805484168217905584845285842080548416821790557fbaa441ac52505693dd98c7dd2f5bbf8f9349b7da9de72f9d52e5cac70e7da8ce805490931681179092559054600482528483208190559351938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350506200046b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620002ed578160001904821115620002d157620002d162000296565b80851615620002df57918102915b93841c9390800290620002b1565b509250929050565b6000826200030657506001620003a5565b816200031557506000620003a5565b81600181146200032e5760028114620003395762000359565b6001915050620003a5565b60ff8411156200034d576200034d62000296565b50506001821b620003a5565b5060208310610133831016604e8410600b84101617156200037e575081810a620003a5565b6200038a8383620002ac565b8060001904821115620003a157620003a162000296565b0290505b92915050565b6000620003bc60ff841683620002f5565b9392505050565b8082028115828204841417620003a557620003a562000296565b80820180821115620003a557620003a562000296565b6000826200041157634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160a01b03811681146200042e57600080fd5b919050565b600080604083850312156200044757600080fd5b620004528362000416565b9150620004626020840162000416565b90509250929050565b60805160a051613d2f620004c260003960008181610ae801528181611468015281816114ee01528181611702015281816132e20152818161339a015261347901526000818161087601526135470152613d2f6000f3fe6080604052600436106103a65760003560e01c80637516baec116101e7578063ceafd6da1161010d578063f1f3bca3116100a0578063f887ea401161006f578063f887ea4014610ad6578063f9eeb65d14610b0a578063fabb0b4f14610b1f578063fabb71d214610b3557600080fd5b8063f1f3bca314610a60578063f2fde38b14610a80578063f84ba65d14610aa0578063f8821a6214610ac057600080fd5b8063d7b96d4e116100dc578063d7b96d4e146109c4578063d9777142146109e4578063dd62ed3e146109fa578063e8f6ae2914610a4057600080fd5b8063ceafd6da14610944578063d088935814610964578063d51ed1c814610984578063d5d035f5146109a457600080fd5b8063a457c2d711610185578063aff177ca11610154578063aff177ca146108d8578063bf56b371146108f8578063c3743cff1461090e578063c5363caa1461092357600080fd5b8063a457c2d714610844578063a5949bcf14610864578063a8aa1b3114610898578063a9059cbb146108b857600080fd5b80638da5cb5b116101c15780638da5cb5b146107a857806395d89b41146107c65780639b19251a146107f45780639e0649931461082457600080fd5b80637516baec14610767578063882cfb3f14610788578063893d20e8146107a857600080fd5b8063421dd7c7116102cc5780635d0044ca1161026a578063672434821161023957806367243482146106db5780636ddd1713146106fb57806370a082311461071c578063715018a61461075257600080fd5b80635d0044ca14610672578063656016cd14610692578063658d4b7f146106a857806365c0bd4e146106c857600080fd5b806351fb012d116102a657806351fb012d14610602578063571ac8b01461061c5780635804f1e41461063c5780635c85974f1461065257600080fd5b8063421dd7c7146105ad57806345581344146105c2578063492a937b146105e257600080fd5b8063201e7991116103445780632b112e49116103135780632b112e491461053c578063313ce56714610551578063395093511461056d5780633dcd5c4a1461058d57600080fd5b8063201e7991146104b957806322f0f2f9146104d957806323b872dd146104ee578063264d26dd1461050e57600080fd5b8063095ea7b311610380578063095ea7b3146104345780630e049c54146104645780631161ae391461048457806318160ddd146104a457600080fd5b80630445b667146103b257806304a66b48146103db57806306fdde03146103fd57600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c8601e5481565b6040519081526020015b60405180910390f35b3480156103e757600080fd5b506103fb6103f63660046135d1565b610b4a565b005b34801561040957600080fd5b506040805180820190915260058152644b6165726960d81b60208201525b6040516103d2919061360c565b34801561044057600080fd5b5061045461044f36600461366f565b610c9d565b60405190151581526020016103d2565b34801561047057600080fd5b506103fb61047f3660046136a9565b610cb4565b34801561049057600080fd5b5061045461049f3660046136ea565b610da2565b3480156104b057600080fd5b506001546103c8565b3480156104c557600080fd5b506103fb6104d43660046136ea565b610db6565b3480156104e557600080fd5b506103fb610e14565b3480156104fa57600080fd5b5061045461050936600461370c565b610f0e565b34801561051a57600080fd5b5061052461dead81565b6040516001600160a01b0390911681526020016103d2565b34801561054857600080fd5b506103c8610fa3565b34801561055d57600080fd5b50604051600981526020016103d2565b34801561057957600080fd5b5061045461058836600461366f565b611011565b34801561059957600080fd5b506103c86105a836600461374d565b61104d565b3480156105b957600080fd5b506103fb611114565b3480156105ce57600080fd5b506103fb6105dd36600461374d565b61115a565b3480156105ee57600080fd5b506103fb6105fd366004613766565b6111be565b34801561060e57600080fd5b506024546104549060ff1681565b34801561062857600080fd5b5061045461063736600461379f565b61124c565b34801561064857600080fd5b506103c8601b5481565b34801561065e57600080fd5b506103fb61066d36600461374d565b61125a565b34801561067e57600080fd5b506103fb61068d36600461374d565b6112f5565b34801561069e57600080fd5b506103c860205481565b3480156106b457600080fd5b506103fb6106c3366004613766565b611373565b6103fb6106d63660046137bc565b6113f9565b3480156106e757600080fd5b506103fb6106f636600461382d565b6117d5565b34801561070757600080fd5b50601d5461045490600160b01b900460ff1681565b34801561072857600080fd5b506103c861073736600461379f565b6001600160a01b031660009081526004602052604090205490565b34801561075e57600080fd5b506103fb6119f3565b34801561077357600080fd5b50601d5461045490600160a01b900460ff1681565b34801561079457600080fd5b50601d54610524906001600160a01b031681565b3480156107b457600080fd5b506000546001600160a01b0316610524565b3480156107d257600080fd5b506040805180820190915260058152644b4145524960d81b6020820152610427565b34801561080057600080fd5b5061045461080f36600461379f565b60236020526000908152604090205460ff1681565b34801561083057600080fd5b506103fb61083f36600461374d565b611b1e565b34801561085057600080fd5b5061045461085f36600461366f565b611c16565b34801561087057600080fd5b506105247f000000000000000000000000000000000000000000000000000000000000000081565b3480156108a457600080fd5b50601954610524906001600160a01b031681565b3480156108c457600080fd5b506104546108d336600461366f565b611cb5565b3480156108e457600080fd5b506103fb6108f3366004613899565b611cc2565b34801561090457600080fd5b506103c8601a5481565b34801561091a57600080fd5b506103c8611d88565b34801561092f57600080fd5b50601d5461045490600160a81b900460ff1681565b34801561095057600080fd5b506103fb61095f3660046138f0565b611dc1565b34801561097057600080fd5b506103fb61097f36600461390d565b611e6c565b34801561099057600080fd5b506103c861099f36600461374d565b611f6e565b3480156109b057600080fd5b506103fb6109bf366004613766565b611fa7565b3480156109d057600080fd5b50602254610524906001600160a01b031681565b3480156109f057600080fd5b506103c860215481565b348015610a0657600080fd5b506103c8610a15366004613942565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610a4c57600080fd5b506103fb610a5b366004613766565b6120d6565b348015610a6c57600080fd5b506103c8610a7b3660046138f0565b6121f3565b348015610a8c57600080fd5b506103fb610a9b36600461379f565b612230565b348015610aac57600080fd5b506103fb610abb366004613766565b6123af565b348015610acc57600080fd5b506103c8601f5481565b348015610ae257600080fd5b506105247f000000000000000000000000000000000000000000000000000000000000000081565b348015610b1657600080fd5b506103c8612435565b348015610b2b57600080fd5b506103c8601c5481565b348015610b4157600080fd5b506103fb61245a565b610b52612514565b84610b5e600282613986565b610b699060026139a8565b14610b8f5760405162461bcd60e51b8152600401610b86906139bf565b60405180910390fd5b83610b9b600282613986565b610ba69060026139a8565b14610bc35760405162461bcd60e51b8152600401610b86906139bf565b600c859055600d849055600a839055600b829055610be18386613a13565b600e55610bee8285613a13565b600f556010819055610c01600582613986565b600f54600e54610c119190613a13565b1115610c4f5760405162461bcd60e51b815260206004820152600d60248201526c08ccacae640e8dede40d0d2ced609b1b6044820152606401610b86565b600e54600f5460105460408051938452602084019290925282820152517f01bae858246c904512695a3f6d48ab88abb7a0192fdd7c53b043e60317795f459181900360600190a15050505050565b6000610caa3384846125a7565b5060015b92915050565b610cbc612514565b600a8210158015610ccf575061012c8411155b8015610ce45750831580610ce4575060648410155b8015610cf25750610e108311155b610d3e5760405162461bcd60e51b815260206004820152601860248201527f506172616d6574657273206f7574206f6620626f756e647300000000000000006044820152606401610b86565b6011849055601283905560138290556014805460ff191682151517905560408051858152602081018590529081018390527fafe6c6a9d14f1da6e5642b5fa6236c37e9783e34bfe9c08cee0529af4c17bce59060600160405180910390a150505050565b600082610dae83611f6e565b119392505050565b610dbe612514565b601582905560168190557fcbbf6bb708b8b7c4daa8d4e1088db9965d8167c3fcb6bc1a21147bbca33c12cf81610df58460646139a8565b610dff9190613986565b60405190815260200160405180910390a15050565b6022546001600160a01b031615801590610e5157506022546001600160a01b0316331480610e5157503360009081526018602052604090205460ff165b610e985760405162461bcd60e51b815260206004820152601860248201527710d85b1b195c881a5cc81b9bdd08185d5d1a1bdc9a5e995960421b6044820152606401610b86565b426021541115610ee25760405162461bcd60e51b815260206004820152601560248201527410dbdb9d1c9858dd081cdd1a5b1b081b1bd8dad959605a1b6044820152606401610b86565b602254610ef7906001600160a01b03166126d8565b602280546001600160a01b03191690556000602155565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001914610f8e576001600160a01b0384166000908152600560209081526040808320338452909152902054610f69908390613a26565b6001600160a01b03851660009081526005602090815260408083203384529091529020555b610f9984848461274e565b90505b9392505050565b60046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec5461dead60009081527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd549091610fff91613a13565b60015461100c9190613a26565b905090565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610caa918590611048908690613a13565b6125a7565b6000806000601960009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156110a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c99190613a55565b506014549193509150849060ff166110e157816110e3565b825b6001600160701b03166110f69190613a13565b611102856103e86139a8565b61110c9190613986565b949350505050565b61111c612514565b601d805460ff60a81b1916600160a81b1790556040517fdd849d4f0ff64ab5cfef73f22ec29822c2713550b40bcded093282cc28f86c6090600090a1565b611162612514565b601a541580156111725750600781105b61117b57600080fd5b601c8190556024805460ff1916905543601a5542601b556040517fdd6364d871cb6036ca605660d590886ab96eb55b7dbb0051be1901a75794641590600090a150565b6111c6612514565b6001600160a01b0382166111ec5760405162461bcd60e51b8152600401610b8690613a9a565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527ffa4a2b2457d2065452473bed7d55c8fa2f65fc4a1eff1ebdaf14a1b7281e777391015b60405180910390a25050565b6000610cae82600019610c9d565b611262612514565b600081116112b25760405162461bcd60e51b815260206004820152601a60248201527f5472616e73616374696f6e206c696d69747320746f6f206c6f770000000000006044820152606401610b86565b60028190557f87d6222e218f03ac3f7ce8a320052f10fc0c196c444a04e403ccc4bbfb6a36246112e0611d88565b6040519081526020015b60405180910390a150565b6112fd612514565b600181116113455760405162461bcd60e51b815260206004820152601560248201527457616c6c6574206c696d69747320746f6f206c6f7760581b6044820152606401610b86565b60038190557fee4f0b388531b3b3cbe9a0fc02e17997304dcde94d38db4c65a1e896f7aca7886112e0612435565b61137b612514565b6001600160a01b0382166113a15760405162461bcd60e51b8152600401610b8690613a9a565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f5a8cf666a272afd6dec6788d33967c676fffa92e289eee1b38172982c4b4914d9101611240565b611401612514565b601a541580156114115750600782105b61141a57600080fd5b6000341161145f5760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b6044820152606401610b86565b600034905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e89190613ac3565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561154a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156e9190613ac3565b60405163e6a4390560e01b81526001600160a01b0380831660048301523060248301529192509083169063e6a4390590604401602060405180830381865afa1580156115be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e29190613ac3565b601980546001600160a01b0319166001600160a01b03929092169182179055611698576040516364e329cb60e11b81526001600160a01b03828116600483015230602483015283169063c9c65396906044016020604051808303816000875af1158015611653573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116779190613ac3565b601980546001600160a01b0319166001600160a01b03929092169190911790555b6019546001600160a01b0390811660009081526017602090815260408083208054600160ff19918216811790925530808652600885528386208054831684179055601885528386208054909216909217905560049283905281842054915163f305d71960e01b81527f00000000000000000000000000000000000000000000000000000000000000009095169463f305d71994899461173e949282913391429101613ae0565b60606040518083038185885af115801561175c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117819190613b1b565b50506024805460ff191686151517905550836117ce57601c85905543601a5542601b556040517fdd6364d871cb6036ca605660d590886ab96eb55b7dbb0051be1901a75794641590600090a15b5050505050565b6117dd612514565b82811461182c5760405162461bcd60e51b815260206004820152601960248201527f4172726179206c656e6774687320646f6e2774206d61746368000000000000006044820152606401610b86565b601d805460ff60b01b198116909155600160b01b900460ff1660005b848110156119a9576017600087878481811061186657611866613b49565b905060200201602081019061187b919061379f565b6001600160a01b0316815260208101919091526040016000205460ff161580156118d5575060008686838181106118b4576118b4613b49565b90506020020160208101906118c9919061379f565b6001600160a01b031614155b6119375760405162461bcd60e51b815260206004820152602d60248201527f43616e27742061697264726f7020746865206c697175696469747920706f6f6c60448201526c0206f722061646472657373203609c1b6064820152608401610b86565b6119963387878481811061194d5761194d613b49565b9050602002016020810190611962919061379f565b61196e6009600a613c43565b87878681811061198057611980613b49565b9050602002013561199191906139a8565b61274e565b50806119a181613c52565b915050611848565b50601d805460ff60b01b1916600160b01b8315150217905560405133907faf1f3c8f96bb5b6a68b1ca0c51b6ba0250cf4a56f5d088071f5fcf710707727390600090a25050505050565b6119fb612514565b600060086000611a136000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155600981611a556000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155601881611a976000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155600581611ad96000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d8252909252902055611b1c612ce5565b565b611b26612514565b6022546001600160a01b031615611b7f5760405162461bcd60e51b815260206004820152601760248201527f436f6e747261637420616c7265616479206c6f636b65640000000000000000006044820152606401610b86565b60008111611bcf5760405162461bcd60e51b815260206004820152601860248201527f4e6f206c6f636b20706572696f642073706563696669656400000000000000006044820152606401610b86565b611bdc8162093a806139a8565b611be69042613a13565b602155600054602280546001600160a01b0319166001600160a01b03909216919091179055611c13612ce5565b50565b3360009081526005602090815260408083206001600160a01b038616845290915281205482811015611c9e5760405162461bcd60e51b815260206004820152602b60248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201526a206164647265737328302960a81b6064820152608401610b86565b611cab33858584036125a7565b5060019392505050565b6000610f9c33848461274e565b611cca612514565b60245460ff16611d115760405162461bcd60e51b815260206004820152601260248201527115da1a5d195b1a5cdd08191a5cd8589b195960721b6044820152606401610b86565b60005b82811015611d82578160236000868685818110611d3357611d33613b49565b9050602002016020810190611d48919061379f565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611d7a81613c52565b915050611d14565b50505050565b6000611d95601a54151590565b611d9f5750600090565b6103e8600254611dad610fa3565b611db791906139a8565b61100c9190613986565b611dc9612514565b8015611e1f57601d54600160a81b900460ff1615611e1f5760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b6044820152606401610b86565b601d8054821515600160a01b0260ff60a01b199091161790556040517f96b2bfe55fa5f4032b9b4d922bd97bb17a7f025fce7fcecaefc955fd0111a966906112ea90831515815260200190565b611e74612514565b600082118015611e845750600081115b611edc5760405162461bcd60e51b815260206004820152602360248201527f44656e6f6d696e61746f7273206d75737420626520677265617465722074686160448201526206e20360ec1b6064820152608401610b86565b601d805460ff60b01b1916600160b01b85151502179055600154611f01908290613986565b601f55600154611f12908390613986565b601e819055601f54601d5460408051928352602083019390935260ff600160b01b9091041615158183015290517faa199f5aab08ad4ddee0140c8e7d13a4bebb822550aeb3d16e5f7bc485fba0f99181900360600190a1505050565b6000611f78610fa3565b6019546001600160a01b0316600090815260046020526040902054611f9d90846139a8565b610cae9190613986565b611faf612514565b601d546001600160a01b0383811691161461203057601d54600160a81b900460ff16156120145760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b6044820152606401610b86565b601d80546001600160a01b0319166001600160a01b0384161790555b801561209e57601d546019546040516366812dbb60e11b81523060048201526001600160a01b03918216602482015291169063cd025b7690604401600060405180830381600087803b15801561208557600080fd5b505af1158015612099573d6000803e3d6000fd5b505050505b6040516001600160a01b038316907f1ccf813789899d0a52466f1f5c4cabc2820e6818ad4eaca73837528653d00c3c90600090a25050565b6120de612514565b6019546001600160a01b0383811691161480159061211957506001600160a01b038216737a250d5630b4cf539739df2c5dacb4c659f2488d14155b61217b5760405162461bcd60e51b815260206004820152602d60248201527f43616e277420616c7465722074726164696e6720636f6e74726163747320696e60448201526c103a3434b99036b0b73732b91760991b6064820152608401610b86565b6001600160a01b0382166000818152600860209081526040808320805486151560ff199182168117909255601884528285208054821683179055600984529382902080549094168117909355519182527fc63b2cd57d159035214234fce2c910c2e679c9647b0afc09960d6e8cb1574f079101611240565b600043601c54601a546122069190613a13565b111561221b576001601054610cae9190613a26565b8161222857600e54610cae565b5050600f5490565b612238612514565b6000546001600160a01b0316331461228d5760405162461bcd60e51b815260206004820152601860248201527710d85b1b195c881a5cc81b9bdd08185d5d1a1bdc9a5e995960421b6044820152606401610b86565b6000600860006122a56000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556009816122e76000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556018816123296000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff199093169290921790915560058161236b6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d8252909252902055611c13816126d8565b6123b7612514565b6001600160a01b0382166123dd5760405162461bcd60e51b8152600401610b8690613a9a565b6001600160a01b038216600081815260096020908152604091829020805460ff191685151590811790915591519182527fe00fbc488e0ecd4458af11cf15f84d29b2cf621662aa8f46a48f3d29de95123d9101611240565b6000612442601a54151590565b61244c5750600090565b6103e8600354611dad610fa3565b612462612514565b306000908152600460205260409020548015611c1357604051600090339083908381818185875af1925050503d80600081146124ba576040519150601f19603f3d011682016040523d82523d6000602084013e6124bf565b606091505b50509050806125105760405162461bcd60e51b815260206004820152601860248201527f4661696c656420746f207472616e736665722066756e647300000000000000006044820152606401610b86565b5050565b6000546001600160a01b03161580159061255157506000546001600160a01b031633148061255157503360009081526018602052604090205460ff165b611b1c5760405162461bcd60e51b815260206004820152602160248201527f4f776e61626c653a2063616c6c6572206973206e6f7420617574686f72697a656044820152601960fa1b6064820152608401610b86565b6001600160a01b0383166126105760405162461bcd60e51b815260206004820152602a60248201527f45524332303a20617070726f76652066726f6d207468652061646472657373286044820152693029206164647265737360b01b6064820152608401610b86565b6001600160a01b0382166126775760405162461bcd60e51b815260206004820152602860248201527f45524332303a20617070726f766520746f207468652061646472657373283029604482015267206164647265737360c01b6064820152608401610b86565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6126e0612514565b6001600160a01b0381166127455760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b86565b611c1381612cf3565b6001600160a01b0383166000908152600460205260408120548211156127c55760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b86565b6000821161280d5760405162461bcd60e51b8152602060048201526015602482015274139bc81d1bdad95b9cc81d1c985b9cd9995c9c9959605a1b6044820152606401610b86565b6001600160a01b0384166128715760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b86565b6001600160a01b0383166128d35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b86565b602454610100900460ff16156128f5576128ee848484612d43565b9050610f9c565b6128ff8483612df8565b6001600160a01b03831660009081526017602052604090205460ff1615801561293357506001600160a01b03831661dead14155b15612962576001600160a01b03831660009081526009602052604090205460ff16612962576129628383612e66565b601a54612a24576001600160a01b03841660009081526018602052604090205460ff16806129a857506001600160a01b03831660009081526018602052604090205460ff165b806129d8575060245460ff1680156129d857506001600160a01b03831660009081526023602052604090205460ff165b612a245760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206e6f74206c61756e63686564207965742e0000000000006044820152606401610b86565b6001600160a01b03841660009081526017602052604090205460ff16158015612a6657506001600160a01b03841660009081526008602052604090205460ff16155b8015612a9357506001600160a01b038416600090815260046020526040902054612a91908390613a26565b155b15612aa657612aa3600183613a26565b91505b6001600160a01b03841660009081526004602052604081208054849290612ace908490613a26565b90915550506001600160a01b03841660009081526008602052604081205460ff16158015612b1557506001600160a01b03841660009081526008602052604090205460ff16155b612b1f5782612b2a565b612b2a858585612eee565b9050612b3685856130c5565b15612b4a578215612b4a57612b4a8361318a565b6001600160a01b03841661dead14612b8f576001600160a01b03841660009081526004602052604081208054839290612b84908490613a13565b90915550612ba79050565b8060016000828254612ba19190613a26565b90915550505b601a5415158015612bc15750601d54600160a01b900460ff165b8015612be657506001600160a01b03851660009081526008602052604090205460ff16155b15612c7257601d5460405163d7ccbd8360e01b81523360048201526001600160a01b0387811660248301528681166044830152606482018690529091169063d7ccbd83906084016020604051808303816000875af1158015612c4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c709190613c6b565b505b61deac196001600160a01b03851601612c8c576000612c8e565b835b6001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612cd291815260200190565b60405180910390a3506001949350505050565b612ced612514565b611b1c60005b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316600090815260046020526040812080548391908390612d6d908490613a26565b90915550506001600160a01b03831660009081526004602052604081208054849290612d9a908490613a13565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612de691815260200190565b60405180910390a35060019392505050565b612e00611d88565b81111580612e2657506001600160a01b03821660009081526009602052604090205460ff165b6125105760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b86565b612e6e612435565b6001600160a01b038316600090815260046020526040902054612e92908390613a13565b11156125105760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b6064820152608401610b86565b6001600160a01b038216600090815260176020526040812054819060ff168015612f1a57506000601154115b15613007576000612f2a8461104d565b6012546001600160a01b038816600090815260066020526040902054919250612f5291613a13565b421115612f80576001600160a01b038616600090815260066020908152604080832042905560079091528120555b6001600160a01b03861660009081526007602052604081208054839290612fa8908490613a13565b90915550506013546001600160a01b03871660009081526007602052604090205410613005576010546064601154600f5487612fe491906139a8565b612fee91906139a8565b612ff89190613986565b6130029190613986565b91505b505b8060000361304e576010546001600160a01b0385166000908152601760205260409020546130379060ff166121f3565b61304190856139a8565b61304b9190613986565b90505b306000908152600460205260408120805483929061306d908490613a13565b909155505060405181815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36130bc8184613a26565b95945050505050565b6001600160a01b03821660009081526017602052604081205460ff1615801561310757506001600160a01b03831660009081526008602052604090205460ff16155b801561311b5750602454610100900460ff16155b80156131305750601d54600160b01b900460ff165b801561315457506001600160a01b03821660009081526017602052604090205460ff165b80156131715750601f543060009081526004602052604090205410155b8015610f9c57506000600f54600e54610dae9190613a13565b6024805461ff001916610100179055600f54600e546000916131ab91613a13565b90506000601e546064602054856131c291906139a8565b6131cc9190613986565b6131d69085613a26565b106131e357601e546131fd565b6064602054846131f391906139a8565b6131fd9190613986565b306000908152600460205260409020549091508111156132295750306000908152600460205260409020545b6000613239601554601654610da2565b61325257600d54600c5461324d9190613a13565b613255565b60005b9050600060028461326684866139a8565b6132709190613986565b61327a9190613986565b90506132868184613a26565b604080516002808252606082018352929550600092909160208301908036833701905050905030816000815181106132c0576132c0613b49565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561333e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133629190613ac3565b8160018151811061337557613375613b49565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063791ac947906133da908790600090869030904290600401613c88565b600060405180830381600087803b1580156133f457600080fd5b505af1158015613408573d6000803e3d6000fd5b504792506000915061341d9050600286613986565b6134279088613a26565b9050600060028261343888866139a8565b6134429190613986565b61344c9190613986565b9050600061345a8285613a26565b9050851561353d5760405163f305d71960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f305d7199084906134bd9030908b90600090819061dead904290600401613ae0565b60606040518083038185885af11580156134db573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135009190613b1b565b505060408051848152602081018990527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b80156135ba5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168260405160006040518083038185875af1925050503d80600081146135b0576040519150601f19603f3d011682016040523d82523d6000602084013e6135b5565b606091505b505050505b50506024805461ff00191690555050505050505050565b600080600080600060a086880312156135e957600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b818110156136395785810183015185820160400152820161361d565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611c1357600080fd5b6000806040838503121561368257600080fd5b823561368d8161365a565b946020939093013593505050565b8015158114611c1357600080fd5b600080600080608085870312156136bf57600080fd5b84359350602085013592506040850135915060608501356136df8161369b565b939692955090935050565b600080604083850312156136fd57600080fd5b50508035926020909101359150565b60008060006060848603121561372157600080fd5b833561372c8161365a565b9250602084013561373c8161365a565b929592945050506040919091013590565b60006020828403121561375f57600080fd5b5035919050565b6000806040838503121561377957600080fd5b82356137848161365a565b915060208301356137948161369b565b809150509250929050565b6000602082840312156137b157600080fd5b8135610f9c8161365a565b600080604083850312156137cf57600080fd5b8235915060208301356137948161369b565b60008083601f8401126137f357600080fd5b50813567ffffffffffffffff81111561380b57600080fd5b6020830191508360208260051b850101111561382657600080fd5b9250929050565b6000806000806040858703121561384357600080fd5b843567ffffffffffffffff8082111561385b57600080fd5b613867888389016137e1565b9096509450602087013591508082111561388057600080fd5b5061388d878288016137e1565b95989497509550505050565b6000806000604084860312156138ae57600080fd5b833567ffffffffffffffff8111156138c557600080fd5b6138d1868287016137e1565b90945092505060208401356138e58161369b565b809150509250925092565b60006020828403121561390257600080fd5b8135610f9c8161369b565b60008060006060848603121561392257600080fd5b833561392d8161369b565b95602085013595506040909401359392505050565b6000806040838503121561395557600080fd5b82356139608161365a565b915060208301356137948161365a565b634e487b7160e01b600052601160045260246000fd5b6000826139a357634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610cae57610cae613970565b60208082526034908201527f4c697175696469747920666565206d75737420626520616e206576656e206e756040820152736d6265722064756520746f20726f756e64696e6760601b606082015260800190565b80820180821115610cae57610cae613970565b81810381811115610cae57610cae613970565b80516001600160701b0381168114613a5057600080fd5b919050565b600080600060608486031215613a6a57600080fd5b613a7384613a39565b9250613a8160208501613a39565b9150604084015163ffffffff811681146138e557600080fd5b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b600060208284031215613ad557600080fd5b8151610f9c8161365a565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613b3057600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b600181815b80851115613b9a578160001904821115613b8057613b80613970565b80851615613b8d57918102915b93841c9390800290613b64565b509250929050565b600082613bb157506001610cae565b81613bbe57506000610cae565b8160018114613bd45760028114613bde57613bfa565b6001915050610cae565b60ff841115613bef57613bef613970565b50506001821b610cae565b5060208310610133831016604e8410600b8410161715613c1d575081810a610cae565b613c278383613b5f565b8060001904821115613c3b57613c3b613970565b029392505050565b6000610f9c60ff841683613ba2565b600060018201613c6457613c64613970565b5060010190565b600060208284031215613c7d57600080fd5b8151610f9c8161369b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613cd85784516001600160a01b031683529383019391830191600101613cb3565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122067daeb64f3d81208cf4761c54ac0e0a067e4373556eed4be27c050669582d9b864736f6c634300081100330000000000000000000000007612f7276c95e472809ef6193f63252c8eadbd2c000000000000000000000000a721985fae98153158896e512779dc72aa636ae9

Deployed Bytecode

0x6080604052600436106103a65760003560e01c80637516baec116101e7578063ceafd6da1161010d578063f1f3bca3116100a0578063f887ea401161006f578063f887ea4014610ad6578063f9eeb65d14610b0a578063fabb0b4f14610b1f578063fabb71d214610b3557600080fd5b8063f1f3bca314610a60578063f2fde38b14610a80578063f84ba65d14610aa0578063f8821a6214610ac057600080fd5b8063d7b96d4e116100dc578063d7b96d4e146109c4578063d9777142146109e4578063dd62ed3e146109fa578063e8f6ae2914610a4057600080fd5b8063ceafd6da14610944578063d088935814610964578063d51ed1c814610984578063d5d035f5146109a457600080fd5b8063a457c2d711610185578063aff177ca11610154578063aff177ca146108d8578063bf56b371146108f8578063c3743cff1461090e578063c5363caa1461092357600080fd5b8063a457c2d714610844578063a5949bcf14610864578063a8aa1b3114610898578063a9059cbb146108b857600080fd5b80638da5cb5b116101c15780638da5cb5b146107a857806395d89b41146107c65780639b19251a146107f45780639e0649931461082457600080fd5b80637516baec14610767578063882cfb3f14610788578063893d20e8146107a857600080fd5b8063421dd7c7116102cc5780635d0044ca1161026a578063672434821161023957806367243482146106db5780636ddd1713146106fb57806370a082311461071c578063715018a61461075257600080fd5b80635d0044ca14610672578063656016cd14610692578063658d4b7f146106a857806365c0bd4e146106c857600080fd5b806351fb012d116102a657806351fb012d14610602578063571ac8b01461061c5780635804f1e41461063c5780635c85974f1461065257600080fd5b8063421dd7c7146105ad57806345581344146105c2578063492a937b146105e257600080fd5b8063201e7991116103445780632b112e49116103135780632b112e491461053c578063313ce56714610551578063395093511461056d5780633dcd5c4a1461058d57600080fd5b8063201e7991146104b957806322f0f2f9146104d957806323b872dd146104ee578063264d26dd1461050e57600080fd5b8063095ea7b311610380578063095ea7b3146104345780630e049c54146104645780631161ae391461048457806318160ddd146104a457600080fd5b80630445b667146103b257806304a66b48146103db57806306fdde03146103fd57600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c8601e5481565b6040519081526020015b60405180910390f35b3480156103e757600080fd5b506103fb6103f63660046135d1565b610b4a565b005b34801561040957600080fd5b506040805180820190915260058152644b6165726960d81b60208201525b6040516103d2919061360c565b34801561044057600080fd5b5061045461044f36600461366f565b610c9d565b60405190151581526020016103d2565b34801561047057600080fd5b506103fb61047f3660046136a9565b610cb4565b34801561049057600080fd5b5061045461049f3660046136ea565b610da2565b3480156104b057600080fd5b506001546103c8565b3480156104c557600080fd5b506103fb6104d43660046136ea565b610db6565b3480156104e557600080fd5b506103fb610e14565b3480156104fa57600080fd5b5061045461050936600461370c565b610f0e565b34801561051a57600080fd5b5061052461dead81565b6040516001600160a01b0390911681526020016103d2565b34801561054857600080fd5b506103c8610fa3565b34801561055d57600080fd5b50604051600981526020016103d2565b34801561057957600080fd5b5061045461058836600461366f565b611011565b34801561059957600080fd5b506103c86105a836600461374d565b61104d565b3480156105b957600080fd5b506103fb611114565b3480156105ce57600080fd5b506103fb6105dd36600461374d565b61115a565b3480156105ee57600080fd5b506103fb6105fd366004613766565b6111be565b34801561060e57600080fd5b506024546104549060ff1681565b34801561062857600080fd5b5061045461063736600461379f565b61124c565b34801561064857600080fd5b506103c8601b5481565b34801561065e57600080fd5b506103fb61066d36600461374d565b61125a565b34801561067e57600080fd5b506103fb61068d36600461374d565b6112f5565b34801561069e57600080fd5b506103c860205481565b3480156106b457600080fd5b506103fb6106c3366004613766565b611373565b6103fb6106d63660046137bc565b6113f9565b3480156106e757600080fd5b506103fb6106f636600461382d565b6117d5565b34801561070757600080fd5b50601d5461045490600160b01b900460ff1681565b34801561072857600080fd5b506103c861073736600461379f565b6001600160a01b031660009081526004602052604090205490565b34801561075e57600080fd5b506103fb6119f3565b34801561077357600080fd5b50601d5461045490600160a01b900460ff1681565b34801561079457600080fd5b50601d54610524906001600160a01b031681565b3480156107b457600080fd5b506000546001600160a01b0316610524565b3480156107d257600080fd5b506040805180820190915260058152644b4145524960d81b6020820152610427565b34801561080057600080fd5b5061045461080f36600461379f565b60236020526000908152604090205460ff1681565b34801561083057600080fd5b506103fb61083f36600461374d565b611b1e565b34801561085057600080fd5b5061045461085f36600461366f565b611c16565b34801561087057600080fd5b506105247f000000000000000000000000a721985fae98153158896e512779dc72aa636ae981565b3480156108a457600080fd5b50601954610524906001600160a01b031681565b3480156108c457600080fd5b506104546108d336600461366f565b611cb5565b3480156108e457600080fd5b506103fb6108f3366004613899565b611cc2565b34801561090457600080fd5b506103c8601a5481565b34801561091a57600080fd5b506103c8611d88565b34801561092f57600080fd5b50601d5461045490600160a81b900460ff1681565b34801561095057600080fd5b506103fb61095f3660046138f0565b611dc1565b34801561097057600080fd5b506103fb61097f36600461390d565b611e6c565b34801561099057600080fd5b506103c861099f36600461374d565b611f6e565b3480156109b057600080fd5b506103fb6109bf366004613766565b611fa7565b3480156109d057600080fd5b50602254610524906001600160a01b031681565b3480156109f057600080fd5b506103c860215481565b348015610a0657600080fd5b506103c8610a15366004613942565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610a4c57600080fd5b506103fb610a5b366004613766565b6120d6565b348015610a6c57600080fd5b506103c8610a7b3660046138f0565b6121f3565b348015610a8c57600080fd5b506103fb610a9b36600461379f565b612230565b348015610aac57600080fd5b506103fb610abb366004613766565b6123af565b348015610acc57600080fd5b506103c8601f5481565b348015610ae257600080fd5b506105247f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610b1657600080fd5b506103c8612435565b348015610b2b57600080fd5b506103c8601c5481565b348015610b4157600080fd5b506103fb61245a565b610b52612514565b84610b5e600282613986565b610b699060026139a8565b14610b8f5760405162461bcd60e51b8152600401610b86906139bf565b60405180910390fd5b83610b9b600282613986565b610ba69060026139a8565b14610bc35760405162461bcd60e51b8152600401610b86906139bf565b600c859055600d849055600a839055600b829055610be18386613a13565b600e55610bee8285613a13565b600f556010819055610c01600582613986565b600f54600e54610c119190613a13565b1115610c4f5760405162461bcd60e51b815260206004820152600d60248201526c08ccacae640e8dede40d0d2ced609b1b6044820152606401610b86565b600e54600f5460105460408051938452602084019290925282820152517f01bae858246c904512695a3f6d48ab88abb7a0192fdd7c53b043e60317795f459181900360600190a15050505050565b6000610caa3384846125a7565b5060015b92915050565b610cbc612514565b600a8210158015610ccf575061012c8411155b8015610ce45750831580610ce4575060648410155b8015610cf25750610e108311155b610d3e5760405162461bcd60e51b815260206004820152601860248201527f506172616d6574657273206f7574206f6620626f756e647300000000000000006044820152606401610b86565b6011849055601283905560138290556014805460ff191682151517905560408051858152602081018590529081018390527fafe6c6a9d14f1da6e5642b5fa6236c37e9783e34bfe9c08cee0529af4c17bce59060600160405180910390a150505050565b600082610dae83611f6e565b119392505050565b610dbe612514565b601582905560168190557fcbbf6bb708b8b7c4daa8d4e1088db9965d8167c3fcb6bc1a21147bbca33c12cf81610df58460646139a8565b610dff9190613986565b60405190815260200160405180910390a15050565b6022546001600160a01b031615801590610e5157506022546001600160a01b0316331480610e5157503360009081526018602052604090205460ff165b610e985760405162461bcd60e51b815260206004820152601860248201527710d85b1b195c881a5cc81b9bdd08185d5d1a1bdc9a5e995960421b6044820152606401610b86565b426021541115610ee25760405162461bcd60e51b815260206004820152601560248201527410dbdb9d1c9858dd081cdd1a5b1b081b1bd8dad959605a1b6044820152606401610b86565b602254610ef7906001600160a01b03166126d8565b602280546001600160a01b03191690556000602155565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001914610f8e576001600160a01b0384166000908152600560209081526040808320338452909152902054610f69908390613a26565b6001600160a01b03851660009081526005602090815260408083203384529091529020555b610f9984848461274e565b90505b9392505050565b60046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec5461dead60009081527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd549091610fff91613a13565b60015461100c9190613a26565b905090565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610caa918590611048908690613a13565b6125a7565b6000806000601960009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156110a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c99190613a55565b506014549193509150849060ff166110e157816110e3565b825b6001600160701b03166110f69190613a13565b611102856103e86139a8565b61110c9190613986565b949350505050565b61111c612514565b601d805460ff60a81b1916600160a81b1790556040517fdd849d4f0ff64ab5cfef73f22ec29822c2713550b40bcded093282cc28f86c6090600090a1565b611162612514565b601a541580156111725750600781105b61117b57600080fd5b601c8190556024805460ff1916905543601a5542601b556040517fdd6364d871cb6036ca605660d590886ab96eb55b7dbb0051be1901a75794641590600090a150565b6111c6612514565b6001600160a01b0382166111ec5760405162461bcd60e51b8152600401610b8690613a9a565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527ffa4a2b2457d2065452473bed7d55c8fa2f65fc4a1eff1ebdaf14a1b7281e777391015b60405180910390a25050565b6000610cae82600019610c9d565b611262612514565b600081116112b25760405162461bcd60e51b815260206004820152601a60248201527f5472616e73616374696f6e206c696d69747320746f6f206c6f770000000000006044820152606401610b86565b60028190557f87d6222e218f03ac3f7ce8a320052f10fc0c196c444a04e403ccc4bbfb6a36246112e0611d88565b6040519081526020015b60405180910390a150565b6112fd612514565b600181116113455760405162461bcd60e51b815260206004820152601560248201527457616c6c6574206c696d69747320746f6f206c6f7760581b6044820152606401610b86565b60038190557fee4f0b388531b3b3cbe9a0fc02e17997304dcde94d38db4c65a1e896f7aca7886112e0612435565b61137b612514565b6001600160a01b0382166113a15760405162461bcd60e51b8152600401610b8690613a9a565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f5a8cf666a272afd6dec6788d33967c676fffa92e289eee1b38172982c4b4914d9101611240565b611401612514565b601a541580156114115750600782105b61141a57600080fd5b6000341161145f5760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b6044820152606401610b86565b600034905060007f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e89190613ac3565b905060007f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561154a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156e9190613ac3565b60405163e6a4390560e01b81526001600160a01b0380831660048301523060248301529192509083169063e6a4390590604401602060405180830381865afa1580156115be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e29190613ac3565b601980546001600160a01b0319166001600160a01b03929092169182179055611698576040516364e329cb60e11b81526001600160a01b03828116600483015230602483015283169063c9c65396906044016020604051808303816000875af1158015611653573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116779190613ac3565b601980546001600160a01b0319166001600160a01b03929092169190911790555b6019546001600160a01b0390811660009081526017602090815260408083208054600160ff19918216811790925530808652600885528386208054831684179055601885528386208054909216909217905560049283905281842054915163f305d71960e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9095169463f305d71994899461173e949282913391429101613ae0565b60606040518083038185885af115801561175c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117819190613b1b565b50506024805460ff191686151517905550836117ce57601c85905543601a5542601b556040517fdd6364d871cb6036ca605660d590886ab96eb55b7dbb0051be1901a75794641590600090a15b5050505050565b6117dd612514565b82811461182c5760405162461bcd60e51b815260206004820152601960248201527f4172726179206c656e6774687320646f6e2774206d61746368000000000000006044820152606401610b86565b601d805460ff60b01b198116909155600160b01b900460ff1660005b848110156119a9576017600087878481811061186657611866613b49565b905060200201602081019061187b919061379f565b6001600160a01b0316815260208101919091526040016000205460ff161580156118d5575060008686838181106118b4576118b4613b49565b90506020020160208101906118c9919061379f565b6001600160a01b031614155b6119375760405162461bcd60e51b815260206004820152602d60248201527f43616e27742061697264726f7020746865206c697175696469747920706f6f6c60448201526c0206f722061646472657373203609c1b6064820152608401610b86565b6119963387878481811061194d5761194d613b49565b9050602002016020810190611962919061379f565b61196e6009600a613c43565b87878681811061198057611980613b49565b9050602002013561199191906139a8565b61274e565b50806119a181613c52565b915050611848565b50601d805460ff60b01b1916600160b01b8315150217905560405133907faf1f3c8f96bb5b6a68b1ca0c51b6ba0250cf4a56f5d088071f5fcf710707727390600090a25050505050565b6119fb612514565b600060086000611a136000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155600981611a556000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155601881611a976000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155600581611ad96000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d8252909252902055611b1c612ce5565b565b611b26612514565b6022546001600160a01b031615611b7f5760405162461bcd60e51b815260206004820152601760248201527f436f6e747261637420616c7265616479206c6f636b65640000000000000000006044820152606401610b86565b60008111611bcf5760405162461bcd60e51b815260206004820152601860248201527f4e6f206c6f636b20706572696f642073706563696669656400000000000000006044820152606401610b86565b611bdc8162093a806139a8565b611be69042613a13565b602155600054602280546001600160a01b0319166001600160a01b03909216919091179055611c13612ce5565b50565b3360009081526005602090815260408083206001600160a01b038616845290915281205482811015611c9e5760405162461bcd60e51b815260206004820152602b60248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201526a206164647265737328302960a81b6064820152608401610b86565b611cab33858584036125a7565b5060019392505050565b6000610f9c33848461274e565b611cca612514565b60245460ff16611d115760405162461bcd60e51b815260206004820152601260248201527115da1a5d195b1a5cdd08191a5cd8589b195960721b6044820152606401610b86565b60005b82811015611d82578160236000868685818110611d3357611d33613b49565b9050602002016020810190611d48919061379f565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611d7a81613c52565b915050611d14565b50505050565b6000611d95601a54151590565b611d9f5750600090565b6103e8600254611dad610fa3565b611db791906139a8565b61100c9190613986565b611dc9612514565b8015611e1f57601d54600160a81b900460ff1615611e1f5760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b6044820152606401610b86565b601d8054821515600160a01b0260ff60a01b199091161790556040517f96b2bfe55fa5f4032b9b4d922bd97bb17a7f025fce7fcecaefc955fd0111a966906112ea90831515815260200190565b611e74612514565b600082118015611e845750600081115b611edc5760405162461bcd60e51b815260206004820152602360248201527f44656e6f6d696e61746f7273206d75737420626520677265617465722074686160448201526206e20360ec1b6064820152608401610b86565b601d805460ff60b01b1916600160b01b85151502179055600154611f01908290613986565b601f55600154611f12908390613986565b601e819055601f54601d5460408051928352602083019390935260ff600160b01b9091041615158183015290517faa199f5aab08ad4ddee0140c8e7d13a4bebb822550aeb3d16e5f7bc485fba0f99181900360600190a1505050565b6000611f78610fa3565b6019546001600160a01b0316600090815260046020526040902054611f9d90846139a8565b610cae9190613986565b611faf612514565b601d546001600160a01b0383811691161461203057601d54600160a81b900460ff16156120145760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b6044820152606401610b86565b601d80546001600160a01b0319166001600160a01b0384161790555b801561209e57601d546019546040516366812dbb60e11b81523060048201526001600160a01b03918216602482015291169063cd025b7690604401600060405180830381600087803b15801561208557600080fd5b505af1158015612099573d6000803e3d6000fd5b505050505b6040516001600160a01b038316907f1ccf813789899d0a52466f1f5c4cabc2820e6818ad4eaca73837528653d00c3c90600090a25050565b6120de612514565b6019546001600160a01b0383811691161480159061211957506001600160a01b038216737a250d5630b4cf539739df2c5dacb4c659f2488d14155b61217b5760405162461bcd60e51b815260206004820152602d60248201527f43616e277420616c7465722074726164696e6720636f6e74726163747320696e60448201526c103a3434b99036b0b73732b91760991b6064820152608401610b86565b6001600160a01b0382166000818152600860209081526040808320805486151560ff199182168117909255601884528285208054821683179055600984529382902080549094168117909355519182527fc63b2cd57d159035214234fce2c910c2e679c9647b0afc09960d6e8cb1574f079101611240565b600043601c54601a546122069190613a13565b111561221b576001601054610cae9190613a26565b8161222857600e54610cae565b5050600f5490565b612238612514565b6000546001600160a01b0316331461228d5760405162461bcd60e51b815260206004820152601860248201527710d85b1b195c881a5cc81b9bdd08185d5d1a1bdc9a5e995960421b6044820152606401610b86565b6000600860006122a56000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556009816122e76000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556018816123296000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff199093169290921790915560058161236b6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d8252909252902055611c13816126d8565b6123b7612514565b6001600160a01b0382166123dd5760405162461bcd60e51b8152600401610b8690613a9a565b6001600160a01b038216600081815260096020908152604091829020805460ff191685151590811790915591519182527fe00fbc488e0ecd4458af11cf15f84d29b2cf621662aa8f46a48f3d29de95123d9101611240565b6000612442601a54151590565b61244c5750600090565b6103e8600354611dad610fa3565b612462612514565b306000908152600460205260409020548015611c1357604051600090339083908381818185875af1925050503d80600081146124ba576040519150601f19603f3d011682016040523d82523d6000602084013e6124bf565b606091505b50509050806125105760405162461bcd60e51b815260206004820152601860248201527f4661696c656420746f207472616e736665722066756e647300000000000000006044820152606401610b86565b5050565b6000546001600160a01b03161580159061255157506000546001600160a01b031633148061255157503360009081526018602052604090205460ff165b611b1c5760405162461bcd60e51b815260206004820152602160248201527f4f776e61626c653a2063616c6c6572206973206e6f7420617574686f72697a656044820152601960fa1b6064820152608401610b86565b6001600160a01b0383166126105760405162461bcd60e51b815260206004820152602a60248201527f45524332303a20617070726f76652066726f6d207468652061646472657373286044820152693029206164647265737360b01b6064820152608401610b86565b6001600160a01b0382166126775760405162461bcd60e51b815260206004820152602860248201527f45524332303a20617070726f766520746f207468652061646472657373283029604482015267206164647265737360c01b6064820152608401610b86565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6126e0612514565b6001600160a01b0381166127455760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b86565b611c1381612cf3565b6001600160a01b0383166000908152600460205260408120548211156127c55760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b86565b6000821161280d5760405162461bcd60e51b8152602060048201526015602482015274139bc81d1bdad95b9cc81d1c985b9cd9995c9c9959605a1b6044820152606401610b86565b6001600160a01b0384166128715760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b86565b6001600160a01b0383166128d35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b86565b602454610100900460ff16156128f5576128ee848484612d43565b9050610f9c565b6128ff8483612df8565b6001600160a01b03831660009081526017602052604090205460ff1615801561293357506001600160a01b03831661dead14155b15612962576001600160a01b03831660009081526009602052604090205460ff16612962576129628383612e66565b601a54612a24576001600160a01b03841660009081526018602052604090205460ff16806129a857506001600160a01b03831660009081526018602052604090205460ff165b806129d8575060245460ff1680156129d857506001600160a01b03831660009081526023602052604090205460ff165b612a245760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206e6f74206c61756e63686564207965742e0000000000006044820152606401610b86565b6001600160a01b03841660009081526017602052604090205460ff16158015612a6657506001600160a01b03841660009081526008602052604090205460ff16155b8015612a9357506001600160a01b038416600090815260046020526040902054612a91908390613a26565b155b15612aa657612aa3600183613a26565b91505b6001600160a01b03841660009081526004602052604081208054849290612ace908490613a26565b90915550506001600160a01b03841660009081526008602052604081205460ff16158015612b1557506001600160a01b03841660009081526008602052604090205460ff16155b612b1f5782612b2a565b612b2a858585612eee565b9050612b3685856130c5565b15612b4a578215612b4a57612b4a8361318a565b6001600160a01b03841661dead14612b8f576001600160a01b03841660009081526004602052604081208054839290612b84908490613a13565b90915550612ba79050565b8060016000828254612ba19190613a26565b90915550505b601a5415158015612bc15750601d54600160a01b900460ff165b8015612be657506001600160a01b03851660009081526008602052604090205460ff16155b15612c7257601d5460405163d7ccbd8360e01b81523360048201526001600160a01b0387811660248301528681166044830152606482018690529091169063d7ccbd83906084016020604051808303816000875af1158015612c4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c709190613c6b565b505b61deac196001600160a01b03851601612c8c576000612c8e565b835b6001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612cd291815260200190565b60405180910390a3506001949350505050565b612ced612514565b611b1c60005b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316600090815260046020526040812080548391908390612d6d908490613a26565b90915550506001600160a01b03831660009081526004602052604081208054849290612d9a908490613a13565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612de691815260200190565b60405180910390a35060019392505050565b612e00611d88565b81111580612e2657506001600160a01b03821660009081526009602052604090205460ff165b6125105760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b86565b612e6e612435565b6001600160a01b038316600090815260046020526040902054612e92908390613a13565b11156125105760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b6064820152608401610b86565b6001600160a01b038216600090815260176020526040812054819060ff168015612f1a57506000601154115b15613007576000612f2a8461104d565b6012546001600160a01b038816600090815260066020526040902054919250612f5291613a13565b421115612f80576001600160a01b038616600090815260066020908152604080832042905560079091528120555b6001600160a01b03861660009081526007602052604081208054839290612fa8908490613a13565b90915550506013546001600160a01b03871660009081526007602052604090205410613005576010546064601154600f5487612fe491906139a8565b612fee91906139a8565b612ff89190613986565b6130029190613986565b91505b505b8060000361304e576010546001600160a01b0385166000908152601760205260409020546130379060ff166121f3565b61304190856139a8565b61304b9190613986565b90505b306000908152600460205260408120805483929061306d908490613a13565b909155505060405181815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36130bc8184613a26565b95945050505050565b6001600160a01b03821660009081526017602052604081205460ff1615801561310757506001600160a01b03831660009081526008602052604090205460ff16155b801561311b5750602454610100900460ff16155b80156131305750601d54600160b01b900460ff165b801561315457506001600160a01b03821660009081526017602052604090205460ff165b80156131715750601f543060009081526004602052604090205410155b8015610f9c57506000600f54600e54610dae9190613a13565b6024805461ff001916610100179055600f54600e546000916131ab91613a13565b90506000601e546064602054856131c291906139a8565b6131cc9190613986565b6131d69085613a26565b106131e357601e546131fd565b6064602054846131f391906139a8565b6131fd9190613986565b306000908152600460205260409020549091508111156132295750306000908152600460205260409020545b6000613239601554601654610da2565b61325257600d54600c5461324d9190613a13565b613255565b60005b9050600060028461326684866139a8565b6132709190613986565b61327a9190613986565b90506132868184613a26565b604080516002808252606082018352929550600092909160208301908036833701905050905030816000815181106132c0576132c0613b49565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561333e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133629190613ac3565b8160018151811061337557613375613b49565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063791ac947906133da908790600090869030904290600401613c88565b600060405180830381600087803b1580156133f457600080fd5b505af1158015613408573d6000803e3d6000fd5b504792506000915061341d9050600286613986565b6134279088613a26565b9050600060028261343888866139a8565b6134429190613986565b61344c9190613986565b9050600061345a8285613a26565b9050851561353d5760405163f305d71960e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063f305d7199084906134bd9030908b90600090819061dead904290600401613ae0565b60606040518083038185885af11580156134db573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135009190613b1b565b505060408051848152602081018990527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b80156135ba5760007f000000000000000000000000a721985fae98153158896e512779dc72aa636ae96001600160a01b03168260405160006040518083038185875af1925050503d80600081146135b0576040519150601f19603f3d011682016040523d82523d6000602084013e6135b5565b606091505b505050505b50506024805461ff00191690555050505050505050565b600080600080600060a086880312156135e957600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b818110156136395785810183015185820160400152820161361d565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611c1357600080fd5b6000806040838503121561368257600080fd5b823561368d8161365a565b946020939093013593505050565b8015158114611c1357600080fd5b600080600080608085870312156136bf57600080fd5b84359350602085013592506040850135915060608501356136df8161369b565b939692955090935050565b600080604083850312156136fd57600080fd5b50508035926020909101359150565b60008060006060848603121561372157600080fd5b833561372c8161365a565b9250602084013561373c8161365a565b929592945050506040919091013590565b60006020828403121561375f57600080fd5b5035919050565b6000806040838503121561377957600080fd5b82356137848161365a565b915060208301356137948161369b565b809150509250929050565b6000602082840312156137b157600080fd5b8135610f9c8161365a565b600080604083850312156137cf57600080fd5b8235915060208301356137948161369b565b60008083601f8401126137f357600080fd5b50813567ffffffffffffffff81111561380b57600080fd5b6020830191508360208260051b850101111561382657600080fd5b9250929050565b6000806000806040858703121561384357600080fd5b843567ffffffffffffffff8082111561385b57600080fd5b613867888389016137e1565b9096509450602087013591508082111561388057600080fd5b5061388d878288016137e1565b95989497509550505050565b6000806000604084860312156138ae57600080fd5b833567ffffffffffffffff8111156138c557600080fd5b6138d1868287016137e1565b90945092505060208401356138e58161369b565b809150509250925092565b60006020828403121561390257600080fd5b8135610f9c8161369b565b60008060006060848603121561392257600080fd5b833561392d8161369b565b95602085013595506040909401359392505050565b6000806040838503121561395557600080fd5b82356139608161365a565b915060208301356137948161365a565b634e487b7160e01b600052601160045260246000fd5b6000826139a357634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610cae57610cae613970565b60208082526034908201527f4c697175696469747920666565206d75737420626520616e206576656e206e756040820152736d6265722064756520746f20726f756e64696e6760601b606082015260800190565b80820180821115610cae57610cae613970565b81810381811115610cae57610cae613970565b80516001600160701b0381168114613a5057600080fd5b919050565b600080600060608486031215613a6a57600080fd5b613a7384613a39565b9250613a8160208501613a39565b9150604084015163ffffffff811681146138e557600080fd5b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b600060208284031215613ad557600080fd5b8151610f9c8161365a565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613b3057600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b600181815b80851115613b9a578160001904821115613b8057613b80613970565b80851615613b8d57918102915b93841c9390800290613b64565b509250929050565b600082613bb157506001610cae565b81613bbe57506000610cae565b8160018114613bd45760028114613bde57613bfa565b6001915050610cae565b60ff841115613bef57613bef613970565b50506001821b610cae565b5060208310610133831016604e8410600b8410161715613c1d575081810a610cae565b613c278383613b5f565b8060001904821115613c3b57613c3b613970565b029392505050565b6000610f9c60ff841683613ba2565b600060018201613c6457613c64613970565b5060010190565b600060208284031215613c7d57600080fd5b8151610f9c8161369b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613cd85784516001600160a01b031683529383019391830191600101613cb3565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122067daeb64f3d81208cf4761c54ac0e0a067e4373556eed4be27c050669582d9b864736f6c63430008110033

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

0000000000000000000000007612f7276c95e472809ef6193f63252c8eadbd2c000000000000000000000000a721985fae98153158896e512779dc72aa636ae9

-----Decoded View---------------
Arg [0] : _liquidityProvider (address): 0x7612f7276C95E472809EF6193f63252c8EAdBd2C
Arg [1] : _marketingWallet (address): 0xa721985FAE98153158896e512779Dc72AA636Ae9

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007612f7276c95e472809ef6193f63252c8eadbd2c
Arg [1] : 000000000000000000000000a721985fae98153158896e512779dc72aa636ae9


Deployed Bytecode Sourcemap

7766:22413:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9752:49;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;9752:49:0;;;;;;;;26709:892;;;;;;;;;;-1:-1:-1;26709:892:0;;;;;:::i;:::-;;:::i;:::-;;11178:71;;;;;;;;;;-1:-1:-1;11241:5:0;;;;;;;;;;;;-1:-1:-1;;;11241:5:0;;;;11178:71;;;;;;;:::i;11584:159::-;;;;;;;;;;-1:-1:-1;11584:159:0;;;;;:::i;:::-;;:::i;:::-;;;1829:14:1;;1822:22;1804:41;;1792:2;1777:18;11584:159:0;1664:187:1;23364:450:0;;;;;;;;;;-1:-1:-1;23364:450:0;;;;;:::i;:::-;;:::i;20188:150::-;;;;;;;;;;-1:-1:-1;20188:150:0;;;;;:::i;:::-;;:::i;10926:88::-;;;;;;;;;;-1:-1:-1;10999:12:0;;10926:88;;28047:246;;;;;;;;;;-1:-1:-1;28047:246:0;;;;;:::i;:::-;;:::i;21054:340::-;;;;;;;;;;;;;:::i;13057:341::-;;;;;;;;;;-1:-1:-1;13057:341:0;;;;;:::i;:::-;;:::i;9032:48::-;;;;;;;;;;;;7869:42;9032:48;;;;;-1:-1:-1;;;;;3308:32:1;;;3290:51;;3278:2;3263:18;9032:48:0;3144:203:1;19872:144:0;;;;;;;;;;;;;:::i;11020:71::-;;;;;;;;;;-1:-1:-1;11020:71:0;;8025:1;3494:36:1;;3482:2;3467:18;11020:71:0;3352:184:1;11751:213:0;;;;;;;;;;-1:-1:-1;11751:213:0;;;;;:::i;:::-;;:::i;16128:247::-;;;;;;;;;;-1:-1:-1;16128:247:0;;;;;:::i;:::-;;:::i;22564:128::-;;;;;;;;;;;;;:::i;24822:300::-;;;;;;;;;;-1:-1:-1;24822:300:0;;;;;:::i;:::-;;:::i;28301:233::-;;;;;;;;;;-1:-1:-1;28301:233:0;;;;;:::i;:::-;;:::i;10033:35::-;;;;;;;;;;-1:-1:-1;10033:35:0;;;;;;;;12763:122;;;;;;;;;;-1:-1:-1;12763:122:0;;;;;:::i;:::-;;:::i;9521:27::-;;;;;;;;;;;;;;;;25414:229;;;;;;;;;;-1:-1:-1;25414:229:0;;;;;:::i;:::-;;:::i;25829:219::-;;;;;;;;;;-1:-1:-1;25829:219:0;;;;;:::i;:::-;;:::i;9880:34::-;;;;;;;;;;;;;;;;26229:222;;;;;;;;;;-1:-1:-1;26229:222:0;;;;;:::i;:::-;;:::i;23822:992::-;;;;;;:::i;:::-;;:::i;28539:717::-;;;;;;;;;;-1:-1:-1;28539:717:0;;;;;:::i;:::-;;:::i;9715:30::-;;;;;;;;;;-1:-1:-1;9715:30:0;;;;-1:-1:-1;;;9715:30:0;;;;;;11332:105;;;;;;;;;;-1:-1:-1;11332:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;11416:18:0;11398:7;11416:18;;;:9;:18;;;;;;;11332:105;21402:285;;;;;;;;;;;;;:::i;9624:37::-;;;;;;;;;;-1:-1:-1;9624:37:0;;;;-1:-1:-1;;;9624:37:0;;;;;;9590:27;;;;;;;;;;-1:-1:-1;9590:27:0;;;;-1:-1:-1;;;;;9590:27:0;;;11255:71;;;;;;;;;;-1:-1:-1;11298:7:0;6843:6;-1:-1:-1;;;;;6843:6:0;11255:71;19872:144;11097:75;;;;;;;;;;-1:-1:-1;11162:7:0;;;;;;;;;;;;-1:-1:-1;;;11162:7:0;;;;11097:75;;9984:42;;;;;;;;;;-1:-1:-1;9984:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20734:312;;;;;;;;;;-1:-1:-1;20734:312:0;;;;;:::i;:::-;;:::i;11972:417::-;;;;;;;;;;-1:-1:-1;11972:417:0;;;;;:::i;:::-;;:::i;9087:50::-;;;;;;;;;;;;;;;9461:19;;;;;;;;;;-1:-1:-1;9461:19:0;;;;-1:-1:-1;;;;;9461:19:0;;;12893:156;;;;;;;;;;-1:-1:-1;12893:156:0;;;;;:::i;:::-;;:::i;25130:276::-;;;;;;;;;;-1:-1:-1;25130:276:0;;;;;:::i;:::-;;:::i;9489:25::-;;;;;;;;;;;;;;;;25651:166;;;;;;;;;;;;;:::i;9668:38::-;;;;;;;;;;-1:-1:-1;9668:38:0;;;;-1:-1:-1;;;9668:38:0;;;;;;21908:242;;;;;;;;;;-1:-1:-1;21908:242:0;;;;;:::i;:::-;;:::i;27609:430::-;;;;;;;;;;-1:-1:-1;27609:430:0;;;;;:::i;:::-;;:::i;20024:156::-;;;;;;;;;;-1:-1:-1;20024:156:0;;;;;:::i;:::-;;:::i;22162:390::-;;;;;;;;;;-1:-1:-1;22162:390:0;;;;;:::i;:::-;;:::i;9954:21::-;;;;;;;;;;-1:-1:-1;9954:21:0;;;;-1:-1:-1;;;;;9954:21:0;;;9923:24;;;;;;;;;;;;;;;;11443:133;;;;;;;;;;-1:-1:-1;11443:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;11545:19:0;;;11527:7;11545:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;11443:133;22704:387;;;;;;;;;;-1:-1:-1;22704:387:0;;;;;:::i;:::-;;:::i;15909:211::-;;;;;;;;;;-1:-1:-1;15909:211:0;;;;;:::i;:::-;;:::i;20346:380::-;;;;;;;;;;-1:-1:-1;20346:380:0;;;;;:::i;:::-;;:::i;26459:242::-;;;;;;;;;;-1:-1:-1;26459:242:0;;;;;:::i;:::-;;:::i;9816:49::-;;;;;;;;;;;;;;;;9230:34;;;;;;;;;;;;;;;26056:165;;;;;;;;;;;;;:::i;9555:25::-;;;;;;;;;;;;;;;;23099:257;;;;;;;;;;;;;:::i;26709:892::-;6729:13;:11;:13::i;:::-;26916;26890:17:::1;26906:1;26916:13:::0;26890:17:::1;:::i;:::-;26889:23;::::0;26911:1:::1;26889:23;:::i;:::-;:40;26881:105;;;;-1:-1:-1::0;;;26881:105:0::1;;;;;;;:::i;:::-;;;;;;;;;27036:17:::0;27006:21:::1;27026:1;27036:17:::0;27006:21:::1;:::i;:::-;27005:27;::::0;27031:1:::1;27005:27;:::i;:::-;:48;26997:113;;;;-1:-1:-1::0;;;26997:113:0::1;;;;;;;:::i;:::-;27121:12;:28:::0;;;27160:16:::1;:36:::0;;;27207:12:::1;:28:::0;;;27246:16:::1;:36:::0;;;27307:29:::1;27222:13:::0;27136;27307:29:::1;:::i;:::-;27293:11;:43:::0;27362:37:::1;27382:17:::0;27362;:37:::1;:::i;:::-;27347:12;:52:::0;27410:14:::1;:32:::0;;;27491:18:::1;27508:1;27427:15:::0;27491:18:::1;:::i;:::-;27475:12;;27461:11;;:26;;;;:::i;:::-;:48;;27453:74;;;::::0;-1:-1:-1;;;27453:74:0;;9377:2:1;27453:74:0::1;::::0;::::1;9359:21:1::0;9416:2;9396:18;;;9389:30;-1:-1:-1;;;9435:18:1;;;9428:43;9488:18;;27453:74:0::1;9175:337:1::0;27453:74:0::1;27551:11;::::0;27564:12:::1;::::0;27578:14:::1;::::0;27543:50:::1;::::0;;9719:25:1;;;9775:2;9760:18;;9753:34;;;;9803:18;;;9796:34;27543:50:0;::::1;::::0;;;;9707:2:1;27543:50:0;;::::1;26709:892:::0;;;;;:::o;11584:159::-;11659:4;11676:37;11685:10;11697:7;11706:6;11676:8;:37::i;:::-;-1:-1:-1;11731:4:0;11584:159;;;;;:::o;23364:450::-;6729:13;:11;:13::i;:::-;23507:2:::1;23493:10;:16;;:31;;;;;23521:3;23513:4;:11;;23493:31;:61;;;;-1:-1:-1::0;23529:9:0;;;:24:::1;;;23550:3;23542:4;:11;;23529:24;23493:83;;;;;23569:7;23558;:18;;23493:83;23485:120;;;::::0;-1:-1:-1;;;23485:120:0;;10043:2:1;23485:120:0::1;::::0;::::1;10025:21:1::0;10082:2;10062:18;;;10055:30;10121:26;10101:18;;;10094:54;10165:18;;23485:120:0::1;9841:348:1::0;23485:120:0::1;23616:11;:18:::0;;;23645:14:::1;:24:::0;;;23680:17:::1;:30:::0;;;23721:16:::1;:28:::0;;-1:-1:-1;;23721:28:0::1;::::0;::::1;;;::::0;;23765:41:::1;::::0;;9719:25:1;;;9775:2;9760:18;;9753:34;;;9803:18;;;9796:34;;;23765:41:0::1;::::0;9707:2:1;9692:18;23765:41:0::1;;;;;;;23364:450:::0;;;;:::o;20188:150::-;20268:4;20324:6;20292:29;20312:8;20292:19;:29::i;:::-;:38;;20188:150;-1:-1:-1;;;20188:150:0:o;28047:246::-;6729:13;:11;:13::i;:::-;28144:15:::1;:25:::0;;;28180:26:::1;:41:::0;;;28237:48:::1;28209:12:::0;28256:13:::1;28162:7:::0;28266:3:::1;28256:13;:::i;:::-;:28;;;;:::i;:::-;28237:48;::::0;160:25:1;;;148:2;133:18;28237:48:0::1;;;;;;;28047:246:::0;;:::o;21054:340::-;21108:6;;-1:-1:-1;;;;;21108:6:0;:20;;;;:80;;-1:-1:-1;21147:6:0;;-1:-1:-1;;;;;21147:6:0;21133:10;:20;;:54;;-1:-1:-1;21176:10:0;21157:30;;;;:18;:30;;;;;;;;21133:54;21100:117;;;;-1:-1:-1;;;21100:117:0;;10396:2:1;21100:117:0;;;10378:21:1;10435:2;10415:18;;;10408:30;-1:-1:-1;;;10454:18:1;;;10447:54;10518:18;;21100:117:0;10194:348:1;21100:117:0;21249:15;21236:9;;:28;;21228:62;;;;-1:-1:-1;;;21228:62:0;;10749:2:1;21228:62:0;;;10731:21:1;10788:2;10768:18;;;10761:30;-1:-1:-1;;;10807:18:1;;;10800:51;10868:18;;21228:62:0;10547:345:1;21228:62:0;21325:6;;21301:31;;-1:-1:-1;;;;;21325:6:0;21301:23;:31::i;:::-;21343:6;:19;;-1:-1:-1;;;;;;21343:19:0;;;21360:1;21373:9;:13;21054:340::o;13057:341::-;-1:-1:-1;;;;;13177:19:0;;13157:4;13177:19;;;:11;:19;;;;;;;;13197:10;13177:31;;;;;;;;-1:-1:-1;;13177:52:0;13174:157;;-1:-1:-1;;;;;13279:19:0;;;;;;:11;:19;;;;;;;;13299:10;13279:31;;;;;;;;:40;;13313:6;;13279:40;:::i;:::-;-1:-1:-1;;;;;13245:19:0;;;;;;:11;:19;;;;;;;;13265:10;13245:31;;;;;;;:74;13174:157;13350:40;13364:6;13372:9;13383:6;13350:13;:40::i;:::-;13343:47;;13057:341;;;;;;:::o;19872:144::-;11416:9;:18;;;;7869:42;19925:7;11416:18;;;;;19925:7;;19968:39;;;:::i;:::-;19952:12;;:56;;;;:::i;:::-;19945:63;;19872:144;:::o;11751:213::-;11867:10;11841:4;11888:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;11888:32:0;;;;;;;;;;11841:4;;11858:76;;11879:7;;11888:45;;11923:10;;11888:45;:::i;:::-;11858:8;:76::i;16128:247::-;16194:7;16215:16;16233;16263:4;;;;;;;;;-1:-1:-1;;;;;16263:4:0;-1:-1:-1;;;;;16254:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16318:16:0;;16214:68;;-1:-1:-1;16214:68:0;-1:-1:-1;16360:6:0;;16318:16;;:38;;16348:8;16318:38;;;16337:8;16318:38;-1:-1:-1;;;;;16317:49:0;;;;;:::i;:::-;16300:13;:6;16309:4;16300:13;:::i;:::-;:67;;;;:::i;:::-;16293:74;16128:247;-1:-1:-1;;;;16128:247:0:o;22564:128::-;6729:13;:11;:13::i;:::-;22623:18:::1;:25:::0;;-1:-1:-1;;;;22623:25:0::1;-1:-1:-1::0;;;22623:25:0::1;::::0;;22664:20:::1;::::0;::::1;::::0;22623:25;;22664:20:::1;22564:128::o:0;24822:300::-;6729:13;:11;:13::i;:::-;19841:10;;:15;;;24903:30:::1;;;24932:1;24918:11;:15;24903:30;24895:39;;;::::0;::::1;;24945:10;:24:::0;;;24980:16:::1;:24:::0;;-1:-1:-1;;24980:24:0::1;::::0;;25028:12:::1;25015:10;:25:::0;25066:15:::1;25051:12;:30:::0;25097:17:::1;::::0;::::1;::::0;24999:5:::1;::::0;25097:17:::1;24822:300:::0;:::o;28301:233::-;6729:13;:11;:13::i;:::-;-1:-1:-1;;;;;28395:19:0;::::1;28387:47;;;;-1:-1:-1::0;;;28387:47:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28445:21:0;::::1;;::::0;;;:14:::1;:21;::::0;;;;;;;;:32;;-1:-1:-1;;28445:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;28493:33;;1804:41:1;;;28493:33:0::1;::::0;1777:18:1;28493:33:0::1;;;;;;;;28301:233:::0;;:::o;12763:122::-;12818:4;12842:35;12850:7;-1:-1:-1;;12842:7:0;:35::i;25414:229::-;6729:13;:11;:13::i;:::-;25507:1:::1;25493:11;:15;25485:55;;;::::0;-1:-1:-1;;;25485:55:0;;12224:2:1;25485:55:0::1;::::0;::::1;12206:21:1::0;12263:2;12243:18;;;12236:30;12302:28;12282:18;;;12275:56;12348:18;;25485:55:0::1;12022:350:1::0;25485:55:0::1;25551:12;:26:::0;;;25593:42:::1;25613:21;:19;:21::i;:::-;25593:42;::::0;160:25:1;;;148:2;133:18;25593:42:0::1;;;;;;;;25414:229:::0;:::o;25829:219::-;6729:13;:11;:13::i;:::-;25926:1:::1;25912:11;:15;25904:49;;;::::0;-1:-1:-1;;;25904:49:0;;12579:2:1;25904:49:0::1;::::0;::::1;12561:21:1::0;12618:2;12598:18;;;12591:30;-1:-1:-1;;;12637:18:1;;;12630:51;12698:18;;25904:49:0::1;12377:345:1::0;25904:49:0::1;25964:14;:28:::0;;;26008:32:::1;26021:18;:16;:18::i;26229:222::-:0;6729:13;:11;:13::i;:::-;-1:-1:-1;;;;;26320:20:0;::::1;26312:48;;;;-1:-1:-1::0;;;26312:48:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26371:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;;;;:28;;-1:-1:-1;;26371:28:0::1;::::0;::::1;;::::0;;::::1;::::0;;;26415;;1804:41:1;;;26415:28:0::1;::::0;1777:18:1;26415:28:0::1;1664:187:1::0;23822:992:0;6729:13;:11;:13::i;:::-;23926:10:::1;::::0;:15;:34;::::1;;;;23959:1;23945:11;:15;23926:34;23918:43;;;::::0;::::1;;23992:1;23980:9;:13;23972:44;;;::::0;-1:-1:-1;;;23972:44:0;;12929:2:1;23972:44:0::1;::::0;::::1;12911:21:1::0;12968:2;12948:18;;;12941:30;-1:-1:-1;;;12987:18:1;;;12980:48;13045:18;;23972:44:0::1;12727:342:1::0;23972:44:0::1;24027:12;24042:9;24027:24;;24064:19;24098:6;-1:-1:-1::0;;;;;24098:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24064:51;;24126:11;24140:6;-1:-1:-1::0;;;;;24140:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24173:35;::::0;-1:-1:-1;;;24173:35:0;;-1:-1:-1;;;;;13560:15:1;;;24173:35:0::1;::::0;::::1;13542:34:1::0;24202:4:0::1;13592:18:1::0;;;13585:43;24126:27:0;;-1:-1:-1;24173:15:0;;::::1;::::0;::::1;::::0;13477:18:1;;24173:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24166:4;:42:::0;;-1:-1:-1;;;;;;24166:42:0::1;-1:-1:-1::0;;;;;24166:42:0;;;::::1;::::0;;::::1;::::0;;24219:81:::1;;24262:38;::::0;-1:-1:-1;;;24262:38:0;;-1:-1:-1;;;;;13560:15:1;;;24262:38:0::1;::::0;::::1;13542:34:1::0;24294:4:0::1;13592:18:1::0;;;13585:43;24262:18:0;::::1;::::0;::::1;::::0;13477::1;;24262:38:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24255:4;:45:::0;;-1:-1:-1;;;;;;24255:45:0::1;-1:-1:-1::0;;;;;24255:45:0;;;::::1;::::0;;;::::1;::::0;;24219:81:::1;24328:4;::::0;-1:-1:-1;;;;;24328:4:0;;::::1;24313:20;::::0;;;:14:::1;:20;::::0;;;;;;;:27;;24336:4:::1;-1:-1:-1::0;;24313:27:0;;::::1;::::0;::::1;::::0;;;24371:4:::1;24351:26:::0;;;:11:::1;:26:::0;;;;;:33;;;::::1;::::0;::::1;::::0;;24395:18:::1;:33:::0;;;;;:40;;;;::::1;::::0;;::::1;::::0;;11416:9;:18;;;;;;;;24448:106;;-1:-1:-1;;;24448:106:0;;:6:::1;:22:::0;;::::1;::::0;::::1;::::0;24478:4;;24448:106:::1;::::0;11416:18;24313:20;;24527:10:::1;::::0;24538:15:::1;::::0;24448:106:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;24567:16:0::1;:33:::0;;-1:-1:-1;;24567:33:0::1;::::0;::::1;;;::::0;;-1:-1:-1;24567:33:0;24613:194:::1;;24649:10;:24:::0;;;24701:12:::1;24688:10;:25:::0;24743:15:::1;24728:12;:30:::0;24778:17:::1;::::0;::::1;::::0;-1:-1:-1;;24778:17:0::1;24613:194;23907:907;;;23822:992:::0;;:::o;28539:717::-;6729:13;:11;:13::i;:::-;28658:35;;::::1;28650:73;;;::::0;-1:-1:-1;;;28650:73:0;;14764:2:1;28650:73:0::1;::::0;::::1;14746:21:1::0;14803:2;14783:18;;;14776:30;14842:27;14822:18;;;14815:55;14887:18;;28650:73:0::1;14562:349:1::0;28650:73:0::1;28754:11;::::0;;-1:-1:-1;;;;28776:19:0;::::1;::::0;;;-1:-1:-1;;;28754:11:0;::::1;;;-1:-1:-1::0;28892:281:0::1;28912:21:::0;;::::1;28892:281;;;28964:14;:29;28979:10;;28990:1;28979:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28964:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;28964:29:0;;::::1;;28963:30;:61:::0;::::1;;;-1:-1:-1::0;29022:1:0::1;28997:10:::0;;29008:1;28997:13;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28997:27:0::1;;;28963:61;28955:119;;;::::0;-1:-1:-1;;;28955:119:0;;15250:2:1;28955:119:0::1;::::0;::::1;15232:21:1::0;15289:2;15269:18;;;15262:30;15328:34;15308:18;;;15301:62;-1:-1:-1;;;15379:18:1;;;15372:43;15432:19;;28955:119:0::1;15048:409:1::0;28955:119:0::1;29089:72;29103:10;29115;;29126:1;29115:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;29144:15;8025:1;29144:2;:15;:::i;:::-;29130:7;;29138:1;29130:10;;;;;;;:::i;:::-;;;;;;;:30;;;;:::i;:::-;29089:13;:72::i;:::-;-1:-1:-1::0;28935:3:0;::::1;::::0;::::1;:::i;:::-;;;;28892:281;;;-1:-1:-1::0;29183:11:0::1;:26:::0;;-1:-1:-1;;;;29183:26:0::1;-1:-1:-1::0;;;29183:26:0;::::1;;;;::::0;;29225:23:::1;::::0;29237:10:::1;::::0;29225:23:::1;::::0;-1:-1:-1;;29225:23:0::1;28639:617;28539:717:::0;;;;:::o;21402:285::-;6729:13;:11;:13::i;:::-;21499:5:::1;21476:11;:20;21488:7;6816::::0;6843:6;-1:-1:-1;;;;;6843:6:0;;6770:87;21488:7:::1;-1:-1:-1::0;;;;;21476:20:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;21476:20:0;;;:28;;;::::1;;-1:-1:-1::0;;21476:28:0;;::::1;::::0;;;::::1;::::0;;;21515:15:::1;-1:-1:-1::0;21531:7:0::1;6816::::0;6843:6;-1:-1:-1;;;;;6843:6:0;;6770:87;21531:7:::1;-1:-1:-1::0;;;;;21515:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;21515:24:0;;;:32;;;::::1;;-1:-1:-1::0;;21515:32:0;;::::1;::::0;;;::::1;::::0;;;21558:18:::1;-1:-1:-1::0;21577:7:0::1;6816::::0;6843:6;-1:-1:-1;;;;;6843:6:0;;6770:87;21577:7:::1;-1:-1:-1::0;;;;;21558:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;21558:27:0;;;:35;;;::::1;;-1:-1:-1::0;;21558:35:0;;::::1;::::0;;;::::1;::::0;;;21604:11:::1;-1:-1:-1::0;21616:7:0::1;6816::::0;6843:6;-1:-1:-1;;;;;6843:6:0;;6770:87;21616:7:::1;-1:-1:-1::0;;;;;21604:20:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;21604:20:0;;;9310:42:::1;21604:35:::0;;;;;;;:39;21654:25:::1;:23;:25::i;:::-;21402:285::o:0;20734:312::-;6729:13;:11;:13::i;:::-;20810:6:::1;::::0;-1:-1:-1;;;;;20810:6:0::1;:20:::0;20802:56:::1;;;::::0;-1:-1:-1;;;20802:56:0;;17187:2:1;20802:56:0::1;::::0;::::1;17169:21:1::0;17226:2;17206:18;;;17199:30;17265:25;17245:18;;;17238:53;17308:18;;20802:56:0::1;16985:347:1::0;20802:56:0::1;20886:1;20877:6;:10;20869:47;;;::::0;-1:-1:-1;;;20869:47:0;;17539:2:1;20869:47:0::1;::::0;::::1;17521:21:1::0;17578:2;17558:18;;;17551:30;17617:26;17597:18;;;17590:54;17661:18;;20869:47:0::1;17337:348:1::0;20869:47:0::1;20958:16;:6:::0;20967:7:::1;20958:16;:::i;:::-;20939:36;::::0;:15:::1;:36;:::i;:::-;20927:9;:48:::0;6816:7;6843:6;20986::::1;:16:::0;;-1:-1:-1;;;;;;20986:16:0::1;-1:-1:-1::0;;;;;6843:6:0;;;20986:16;;;::::1;::::0;;21013:25:::1;:23;:25::i;:::-;20734:312:::0;:::o;11972:417::-;12123:10;12067:4;12111:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;12111:32:0;;;;;;;;;;12162:35;;;;12154:91;;;;-1:-1:-1;;;12154:91:0;;17892:2:1;12154:91:0;;;17874:21:1;17931:2;17911:18;;;17904:30;17970:34;17950:18;;;17943:62;-1:-1:-1;;;18021:18:1;;;18014:41;18072:19;;12154:91:0;17690:407:1;12154:91:0;12281:65;12290:10;12302:7;12330:15;12311:16;:34;12281:8;:65::i;:::-;-1:-1:-1;12377:4:0;;11972:417;-1:-1:-1;;;11972:417:0:o;12893:156::-;12973:4;12997:44;13011:10;13023:9;13034:6;12997:13;:44::i;25130:276::-;6729:13;:11;:13::i;:::-;25239:16:::1;::::0;::::1;;25231:47;;;::::0;-1:-1:-1;;;25231:47:0;;18304:2:1;25231:47:0::1;::::0;::::1;18286:21:1::0;18343:2;18323:18;;;18316:30;-1:-1:-1;;;18362:18:1;;;18355:48;18420:18;;25231:47:0::1;18102:342:1::0;25231:47:0::1;25294:9;25289:110;25309:21:::0;;::::1;25289:110;;;25379:8;25352:9;:24;25362:10;;25373:1;25362:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25352:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;25352:24:0;:35;;-1:-1:-1;;25352:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25332:3;::::1;::::0;::::1;:::i;:::-;;;;25289:110;;;;25130:276:::0;;;:::o;25651:166::-;25703:7;25727:10;19841;;:15;;;19774:90;25727:10;25723:24;;-1:-1:-1;25746:1:0;;25651:166::o;25723:24::-;25805:4;25790:12;;25765:22;:20;:22::i;:::-;:37;;;;:::i;:::-;:44;;;;:::i;21908:242::-;6729:13;:11;:13::i;:::-;21987:8:::1;21983:78;;;22019:18;::::0;-1:-1:-1;;;22019:18:0;::::1;;;22018:19;22010:51;;;::::0;-1:-1:-1;;;22010:51:0;;18651:2:1;22010:51:0::1;::::0;::::1;18633:21:1::0;18690:2;18670:18;;;18663:30;-1:-1:-1;;;18709:18:1;;;18702:49;18768:18;;22010:51:0::1;18449:343:1::0;22010:51:0::1;22072:17;:28:::0;;;::::1;;-1:-1:-1::0;;;22072:28:0::1;-1:-1:-1::0;;;;22072:28:0;;::::1;;::::0;;22116:26:::1;::::0;::::1;::::0;::::1;::::0;22092:8;1829:14:1;1822:22;1804:41;;1792:2;1777:18;;1664:187;27609:430:0;6729:13;:11;:13::i;:::-;27753:1:::1;27738:12;:16;:39;;;;;27776:1;27758:15;:19;27738:39;27730:87;;;::::0;-1:-1:-1;;;27730:87:0;;18999:2:1;27730:87:0::1;::::0;::::1;18981:21:1::0;19038:2;19018:18;;;19011:30;19077:34;19057:18;;;19050:62;-1:-1:-1;;;19128:18:1;;;19121:33;19171:19;;27730:87:0::1;18797:399:1::0;27730:87:0::1;27828:11;:22:::0;;-1:-1:-1;;;;27828:22:0::1;-1:-1:-1::0;;;27828:22:0;::::1;;;;::::0;;-1:-1:-1;27875:12:0;:30:::1;::::0;27890:15;;27875:30:::1;:::i;:::-;27861:11;:44:::0;27932:12:::1;::::0;:27:::1;::::0;27947:12;;27932:27:::1;:::i;:::-;27916:13;:43:::0;;;27991:11:::1;::::0;28019::::1;::::0;27975:56:::1;::::0;;19397:25:1;;;19453:2;19438:18;;19431:34;;;;28019:11:0::1;-1:-1:-1::0;;;28019:11:0;;::::1;;19508:14:1::0;19501:22;19481:18;;;19474:50;27975:56:0;;::::1;::::0;;;;19385:2:1;27975:56:0;;::::1;27609:430:::0;;;:::o;20024:156::-;20092:7;20150:22;:20;:22::i;:::-;20141:4;;-1:-1:-1;;;;;20141:4:0;11398:7;11416:18;;;:9;:18;;;;;;20120:26;;:8;:26;:::i;:::-;20119:53;;;;:::i;22162:390::-;6729:13;:11;:13::i;:::-;22275:9:::1;::::0;-1:-1:-1;;;;;22252:33:0;;::::1;22275:9:::0;::::1;22252:33;22248:166;;22310:18;::::0;-1:-1:-1;;;22310:18:0;::::1;;;22309:19;22301:51;;;::::0;-1:-1:-1;;;22301:51:0;;18651:2:1;22301:51:0::1;::::0;::::1;18633:21:1::0;18690:2;18670:18;;;18663:30;-1:-1:-1;;;18709:18:1;;;18702:49;18768:18;;22301:51:0::1;18449:343:1::0;22301:51:0::1;22367:9;:35:::0;;-1:-1:-1;;;;;;22367:35:0::1;-1:-1:-1::0;;;;;22367:35:0;::::1;;::::0;;22248:166:::1;22428:5;22424:68;;;22448:9;::::0;22487:4:::1;::::0;22448:44:::1;::::0;-1:-1:-1;;;22448:44:0;;22480:4:::1;22448:44;::::0;::::1;13542:34:1::0;-1:-1:-1;;;;;22487:4:0;;::::1;13592:18:1::0;;;13585:43;22448:9:0;::::1;::::0;:23:::1;::::0;13477:18:1;;22448:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22424:68;22518:26;::::0;-1:-1:-1;;;;;22518:26:0;::::1;::::0;::::1;::::0;;;::::1;22162:390:::0;;:::o;22704:387::-;6729:13;:11;:13::i;:::-;22815:4:::1;::::0;-1:-1:-1;;;;;22802:17:0;;::::1;22815:4:::0;::::1;22802:17;::::0;::::1;::::0;:47:::1;;-1:-1:-1::0;;;;;;22823:26:0;::::1;9310:42;22823:26;;22802:47;22794:105;;;::::0;-1:-1:-1;;;22794:105:0;;19737:2:1;22794:105:0::1;::::0;::::1;19719:21:1::0;19776:2;19756:18;;;19749:30;19815:34;19795:18;;;19788:62;-1:-1:-1;;;19866:18:1;;;19859:43;19919:19;;22794:105:0::1;19535:409:1::0;22794:105:0::1;-1:-1:-1::0;;;;;22910:22:0;::::1;;::::0;;;:11:::1;:22;::::0;;;;;;;:29;;;::::1;;-1:-1:-1::0;;22910:29:0;;::::1;::::0;::::1;::::0;;;22950:18:::1;:29:::0;;;;;:36;;;::::1;::::0;::::1;::::0;;22997:15:::1;:26:::0;;;;;;:33;;;;::::1;::::0;::::1;::::0;;;23046:37;1804:41:1;;;23046:37:0::1;::::0;1777:18:1;23046:37:0::1;1664:187:1::0;15909:211:0;15965:7;16014:12;16001:10;;15988;;:23;;;;:::i;:::-;:38;15985:72;;;16053:1;16036:14;;:18;;;;:::i;15985:72::-;16075:7;:36;;16100:11;;16075:36;;;-1:-1:-1;;16085:12:0;;;15909:211::o;20346:380::-;6729:13;:11;:13::i;:::-;6816:7;6843:6;-1:-1:-1;;;;;6843:6:0;4429:10;20444:23:::1;20436:60;;;::::0;-1:-1:-1;;;20436:60:0;;10396:2:1;20436:60:0::1;::::0;::::1;10378:21:1::0;10435:2;10415:18;;;10408:30;-1:-1:-1;;;10454:18:1;;;10447:54;10518:18;;20436:60:0::1;10194:348:1::0;20436:60:0::1;20530:5;20507:11;:20;20519:7;6816::::0;6843:6;-1:-1:-1;;;;;6843:6:0;;6770:87;20519:7:::1;-1:-1:-1::0;;;;;20507:20:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;20507:20:0;;;:28;;;::::1;;-1:-1:-1::0;;20507:28:0;;::::1;::::0;;;::::1;::::0;;;20546:15:::1;-1:-1:-1::0;20562:7:0::1;6816::::0;6843:6;-1:-1:-1;;;;;6843:6:0;;6770:87;20562:7:::1;-1:-1:-1::0;;;;;20546:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;20546:24:0;;;:32;;;::::1;;-1:-1:-1::0;;20546:32:0;;::::1;::::0;;;::::1;::::0;;;20589:18:::1;-1:-1:-1::0;20608:7:0::1;6816::::0;6843:6;-1:-1:-1;;;;;6843:6:0;;6770:87;20608:7:::1;-1:-1:-1::0;;;;;20589:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;20589:27:0;;;:35;;;::::1;;-1:-1:-1::0;;20589:35:0;;::::1;::::0;;;::::1;::::0;;;20635:11:::1;-1:-1:-1::0;20647:7:0::1;6816::::0;6843:6;-1:-1:-1;;;;;6843:6:0;;6770:87;20647:7:::1;-1:-1:-1::0;;;;;20635:20:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;20635:20:0;;;9310:42:::1;20635:35:::0;;;;;;;:39;20685:33:::1;20709:8:::0;20685:23:::1;:33::i;26459:242::-:0;6729:13;:11;:13::i;:::-;-1:-1:-1;;;;;26554:20:0;::::1;26546:48;;;;-1:-1:-1::0;;;26546:48:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26605:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;;;;;:32;;-1:-1:-1;;26605:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;26653:40;;1804:41:1;;;26653:40:0::1;::::0;1777:18:1;26653:40:0::1;1664:187:1::0;26056:165:0;26105:7;26129:10;19841;;:15;;;19774:90;26129:10;26125:24;;-1:-1:-1;26148:1:0;;26056:165::o;26125:24::-;26209:4;26192:14;;26167:22;:20;:22::i;23099:257::-;6729:13;:11;:13::i;:::-;23183:4:::1;23151:11;11416:18:::0;;;:9;:18;;;;;;23207:7;;23204:145:::1;;23247:31;::::0;23232:9:::1;::::0;23247:10:::1;::::0;23270:3;;23232:9;23247:31;23232:9;23247:31;23270:3;23247:10;:31:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23231:47;;;23305:4;23297:40;;;::::0;-1:-1:-1;;;23297:40:0;;20361:2:1;23297:40:0::1;::::0;::::1;20343:21:1::0;20400:2;20380:18;;;20373:30;20439:26;20419:18;;;20412:54;20483:18;;23297:40:0::1;20159:348:1::0;23297:40:0::1;23216:133;23140:216;23099:257::o:0;21695:205::-;21787:1;6843:6;-1:-1:-1;;;;;6843:6:0;21768:21;;;;:86;;-1:-1:-1;6816:7:0;6843:6;-1:-1:-1;;;;;6843:6:0;4429:10;21794:23;;:59;;-1:-1:-1;4429:10:0;21821:32;;;;:18;:32;;;;;;;;21794:59;21760:132;;;;-1:-1:-1;;;21760:132:0;;20714:2:1;21760:132:0;;;20696:21:1;20753:2;20733:18;;;20726:30;20792:34;20772:18;;;20765:62;-1:-1:-1;;;20843:18:1;;;20836:31;20884:19;;21760:132:0;20512:397:1;12397:358:0;-1:-1:-1;;;;;12499:19:0;;12491:74;;;;-1:-1:-1;;;12491:74:0;;21116:2:1;12491:74:0;;;21098:21:1;21155:2;21135:18;;;21128:30;21194:34;21174:18;;;21167:62;-1:-1:-1;;;21245:18:1;;;21238:40;21295:19;;12491:74:0;20914:406:1;12491:74:0;-1:-1:-1;;;;;12584:21:0;;12576:74;;;;-1:-1:-1;;;12576:74:0;;21527:2:1;12576:74:0;;;21509:21:1;21566:2;21546:18;;;21539:30;21605:34;21585:18;;;21578:62;-1:-1:-1;;;21656:18:1;;;21649:38;21704:19;;12576:74:0;21325:404:1;12576:74:0;-1:-1:-1;;;;;12663:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12715:32;;160:25:1;;;12715:32:0;;133:18:1;12715:32:0;;;;;;;12397:358;;;:::o;7116:201::-;6729:13;:11;:13::i;:::-;-1:-1:-1;;;;;7205:22:0;::::1;7197:73;;;::::0;-1:-1:-1;;;7197:73:0;;21936:2:1;7197:73:0::1;::::0;::::1;21918:21:1::0;21975:2;21955:18;;;21948:30;22014:34;21994:18;;;21987:62;-1:-1:-1;;;22065:18:1;;;22058:36;22111:19;;7197:73:0::1;21734:402:1::0;7197:73:0::1;7281:28;7300:8;7281:18;:28::i;13406:1716::-:0;-1:-1:-1;;;;;13523:17:0;;13498:4;13523:17;;;:9;:17;;;;;;:27;-1:-1:-1;13523:27:0;13515:78;;;;-1:-1:-1;;;13515:78:0;;22343:2:1;13515:78:0;;;22325:21:1;22382:2;22362:18;;;22355:30;22421:34;22401:18;;;22394:62;-1:-1:-1;;;22472:18:1;;;22465:36;22518:19;;13515:78:0;22141:402:1;13515:78:0;13621:1;13612:6;:10;13604:44;;;;-1:-1:-1;;;13604:44:0;;22750:2:1;13604:44:0;;;22732:21:1;22789:2;22769:18;;;22762:30;-1:-1:-1;;;22808:18:1;;;22801:51;22869:18;;13604:44:0;22548:345:1;13604:44:0;-1:-1:-1;;;;;13667:20:0;;13659:70;;;;-1:-1:-1;;;13659:70:0;;23100:2:1;13659:70:0;;;23082:21:1;23139:2;23119:18;;;23112:30;23178:34;23158:18;;;23151:62;-1:-1:-1;;;23229:18:1;;;23222:35;23274:19;;13659:70:0;22898:401:1;13659:70:0;-1:-1:-1;;;;;13748:23:0;;13740:71;;;;-1:-1:-1;;;13740:71:0;;23506:2:1;13740:71:0;;;23488:21:1;23545:2;23525:18;;;23518:30;23584:34;23564:18;;;23557:62;-1:-1:-1;;;23635:18:1;;;23628:33;23678:19;;13740:71:0;23304:399:1;13740:71:0;13827:6;;;;;;;13824:63;;;13843:41;13858:6;13866:9;13877:6;13843:14;:41::i;:::-;13836:48;;;;13824:63;13899:28;13912:6;13920;13899:12;:28::i;:::-;-1:-1:-1;;;;;13953:25:0;;;;;;:14;:25;;;;;;;;13952:26;:47;;;;-1:-1:-1;;;;;;13982:17:0;;7869:42;13982:17;;13952:47;13948:148;;;-1:-1:-1;;;;;14021:26:0;;;;;;:15;:26;;;;;;;;14016:68;;14049:35;14066:9;14077:6;14049:16;:35::i;:::-;19841:10;;14108:164;;-1:-1:-1;;;;;14133:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;14163:29:0;;;;;;:18;:29;;;;;;;;14133:59;:105;;;-1:-1:-1;14197:16:0;;;;:40;;;;-1:-1:-1;;;;;;14217:20:0;;;;;;:9;:20;;;;;;;;14197:40;14125:144;;;;-1:-1:-1;;;14125:144:0;;23910:2:1;14125:144:0;;;23892:21:1;23949:2;23929:18;;;23922:30;23988:28;23968:18;;;23961:56;24034:18;;14125:144:0;23708:350:1;14125:144:0;-1:-1:-1;;;;;14288:22:0;;;;;;:14;:22;;;;;;;;14287:23;:48;;;;-1:-1:-1;;;;;;15874:19:0;;15849:4;15874:19;;;:11;:19;;;;;;;;15873:20;14314:21;14287:83;;;;-1:-1:-1;;;;;;14339:17:0;;;;;;:9;:17;;;;;;:26;;14359:6;;14339:26;:::i;:::-;:31;14287:83;14284:126;;;14387:11;14397:1;14387:11;;:::i;:::-;;;14284:126;-1:-1:-1;;;;;14422:17:0;;;;;;:9;:17;;;;;:27;;14443:6;;14422:17;:27;;14443:6;;14422:27;:::i;:::-;;;;-1:-1:-1;;;;;;;15874:19:0;;14462:22;15874:19;;;:11;:19;;;;;;;;15873:20;14487:49;;;;-1:-1:-1;;;;;;15874:19:0;;15849:4;15874:19;;;:11;:19;;;;;;;;15873:20;14512:24;14487:95;;14576:6;14487:95;;;14539:34;14547:6;14555:9;14566:6;14539:7;:34::i;:::-;14462:120;;14606:33;14621:6;14629:9;14606:14;:33::i;:::-;14603:74;;;14646:10;;14642:32;;14658:16;14667:6;14658:8;:16::i;:::-;-1:-1:-1;;;;;14700:17:0;;7869:42;14700:17;14697:132;;-1:-1:-1;;;;;14732:20:0;;;;;;:9;:20;;;;;:38;;14756:14;;14732:20;:38;;14756:14;;14732:38;:::i;:::-;;;;-1:-1:-1;14697:132:0;;-1:-1:-1;14697:132:0;;14815:14;14799:12;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;14697:132:0;19841:10;;:15;;14858:31;;;;-1:-1:-1;14872:17:0;;-1:-1:-1;;;14872:17:0;;;;14858:31;:56;;;;-1:-1:-1;;;;;;15874:19:0;;15849:4;15874:19;;;:11;:19;;;;;;;;15873:20;14893:21;14854:142;;;14929:9;;:67;;-1:-1:-1;;;14929:67:0;;14958:10;14929:67;;;24332:34:1;-1:-1:-1;;;;;24402:15:1;;;24382:18;;;24375:43;24454:15;;;24434:18;;;24427:43;24486:18;;;24479:34;;;14929:9:0;;;;:28;;24266:19:1;;14929:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14854:142;-1:-1:-1;;;;;;;15032:17:0;;;:42;;15072:1;15032:42;;;15052:9;15032:42;-1:-1:-1;;;;;15014:78:0;15023:6;-1:-1:-1;;;;;15014:78:0;;15077:14;15014:78;;;;160:25:1;;148:2;133:18;;14:177;15014:78:0;;;;;;;;-1:-1:-1;15110:4:0;;13406:1716;-1:-1:-1;;;;13406:1716:0:o;7005:103::-;6729:13;:11;:13::i;:::-;7070:30:::1;7097:1;7325:191:::0;7399:16;7418:6;;-1:-1:-1;;;;;7435:17:0;;;-1:-1:-1;;;;;;7435:17:0;;;;;;7468:40;;7418:6;;;;;;;7468:40;;7399:16;7468:40;7388:128;7325:191;:::o;15130:259::-;-1:-1:-1;;;;;15240:17:0;;15223:4;15240:17;;;:9;:17;;;;;:27;;15261:6;;15240:17;15223:4;;15240:27;;15261:6;;15240:27;:::i;:::-;;;;-1:-1:-1;;;;;;;15278:20:0;;;;;;:9;:20;;;;;:30;;15302:6;;15278:20;:30;;15302:6;;15278:30;:::i;:::-;;;;;;;;15341:9;-1:-1:-1;;;;;15324:35:0;15333:6;-1:-1:-1;;;;;15324:35:0;;15352:6;15324:35;;;;160:25:1;;148:2;133:18;;14:177;15324:35:0;;;;;;;;-1:-1:-1;15377:4:0;15130:259;;;;;:::o;15604:175::-;15701:21;:19;:21::i;:::-;15691:6;:31;;:58;;;-1:-1:-1;;;;;;15726:23:0;;;;;;:15;:23;;;;;;;;15691:58;15683:88;;;;-1:-1:-1;;;15683:88:0;;24976:2:1;15683:88:0;;;24958:21:1;25015:2;24995:18;;;24988:30;-1:-1:-1;;;25034:18:1;;;25027:47;25091:18;;15683:88:0;24774:341:1;15401:195:0;15528:18;:16;:18::i;:::-;-1:-1:-1;;;;;15495:20:0;;;;;;:9;:20;;;;;;:29;;15518:6;;15495:29;:::i;:::-;:51;;15487:101;;;;-1:-1:-1;;;15487:101:0;;25322:2:1;15487:101:0;;;25304:21:1;25361:2;25341:18;;;25334:30;25400:34;25380:18;;;25373:62;-1:-1:-1;;;25451:18:1;;;25444:35;25496:19;;15487:101:0;25120:401:1;16383:997:0;-1:-1:-1;;;;;16524:25:0;;16469:7;16524:25;;;:14;:25;;;;;;16469:7;;16524:25;;:44;;;;;16567:1;16553:11;;:15;16524:44;16521:582;;;16585:22;16610:27;16630:6;16610:19;:27::i;:::-;16707:14;;-1:-1:-1;;;;;16688:16:0;;;;;;:8;:16;;;;;;16585:52;;-1:-1:-1;16688:33:0;;;:::i;:::-;16670:15;:51;16666:171;;;-1:-1:-1;;;;;16742:16:0;;;;;;:8;:16;;;;;;;;16761:15;16742:34;;16795:14;:22;;;;;:26;16666:171;-1:-1:-1;;;;;16865:22:0;;;;;;:14;:22;;;;;:40;;16891:14;;16865:22;:40;;16891:14;;16865:40;:::i;:::-;;;;-1:-1:-1;;16964:17:0;;-1:-1:-1;;;;;16938:22:0;;;;;;:14;:22;;;;;;:43;16934:158;;17062:14;;17055:3;17040:11;;17025:12;;17016:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;17015:43;;;;:::i;:::-;17014:62;;;;:::i;:::-;17002:74;;16934:158;16570:533;16521:582;17119:9;17132:1;17119:14;17115:111;;17212:14;;-1:-1:-1;;;;;17182:25:0;;;;;;:14;:25;;;;;;17170:38;;17182:25;;17170:11;:38::i;:::-;17161:47;;:6;:47;:::i;:::-;17160:66;;;;:::i;:::-;17148:78;;17115:111;17257:4;17239:24;;;;:9;:24;;;;;:37;;17267:9;;17239:24;:37;;17267:9;;17239:37;:::i;:::-;;;;-1:-1:-1;;17292:42:0;;160:25:1;;;17317:4:0;;-1:-1:-1;;;;;17292:42:0;;;;;148:2:1;133:18;17292:42:0;;;;;;;17354:18;17363:9;17354:6;:18;:::i;:::-;17347:25;16383:997;-1:-1:-1;;;;;16383:997:0:o;17388:347::-;-1:-1:-1;;;;;17495:22:0;;17470:4;17495:22;;;:14;:22;;;;;;;;17494:23;:56;;;;-1:-1:-1;;;;;;17531:19:0;;;;;;:11;:19;;;;;;;;17530:20;17494:56;:76;;;;-1:-1:-1;17564:6:0;;;;;;;17563:7;17494:76;:100;;;;-1:-1:-1;17583:11:0;;-1:-1:-1;;;17583:11:0;;;;17494:100;:138;;;;-1:-1:-1;;;;;;17607:25:0;;;;;;:14;:25;;;;;;;;17494:138;:190;;;;-1:-1:-1;17673:11:0;;17663:4;17645:24;;;;:9;:24;;;;;;:39;;17494:190;:233;;;;;17726:1;17711:12;;17697:11;;:26;;;;:::i;17743:2023::-;10117:6;:13;;-1:-1:-1;;10117:13:0;;;;;17839:12:::1;::::0;17825:11:::1;::::0;10117:13;;17825:26:::1;::::0;::::1;:::i;:::-;17806:45;;17862:20;17928:13;;17921:3;17904:14;;17895:6;:23;;;;:::i;:::-;:29;;;;:::i;:::-;17885:40;::::0;:6;:40:::1;:::i;:::-;:56;:104;;17976:13;;17885:104;;;17970:3;17953:14;;17944:6;:23;;;;:::i;:::-;:29;;;;:::i;:::-;18022:4;18004:24;::::0;;;:9:::1;:24;::::0;;;;;17862:127;;-1:-1:-1;18004:39:0;-1:-1:-1;18000:84:0::1;;;-1:-1:-1::0;18078:4:0::1;18060:24;::::0;;;:9:::1;:24;::::0;;;;;18000:84:::1;18105:27;18135:60;18151:15;;18168:26;;18135:15;:60::i;:::-;:98;;18217:16;;18202:12;;:31;;;;:::i;:::-;18135:98;;;18198:1;18135:98;18105:128:::0;-1:-1:-1;18244:23:0::1;18322:1;18310:8:::0;18272:34:::1;18105:128:::0;18272:12;:34:::1;:::i;:::-;18271:47;;;;:::i;:::-;18270:53;;;;:::i;:::-;18244:79:::0;-1:-1:-1;18334:31:0::1;18244:79:::0;18334:31;::::1;:::i;:::-;18402:16;::::0;;18416:1:::1;18402:16:::0;;;;;::::1;::::0;;18334:31;;-1:-1:-1;18378:21:0::1;::::0;18402:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;18402:16:0::1;18378:40;;18447:4;18429;18434:1;18429:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;18429:23:0::1;;;-1:-1:-1::0;;;;;18429:23:0::1;;;::::0;::::1;18473:6;-1:-1:-1::0;;;;;18473:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18463:4;18468:1;18463:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18463:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;18569:188:::1;::::0;-1:-1:-1;;;18569:188:0;;:6:::1;:57:::0;;::::1;::::0;::::1;::::0;:188:::1;::::0;18641:12;;18668:1:::1;::::0;18684:4;;18711::::1;::::0;18731:15:::1;::::0;18569:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;18796:21:0::1;::::0;-1:-1:-1;18770:23:0::1;::::0;-1:-1:-1;18861:23:0::1;::::0;-1:-1:-1;18883:1:0::1;18861:19:::0;:23:::1;:::i;:::-;18850:34;::::0;:8;:34:::1;:::i;:::-;18828:56:::0;-1:-1:-1;18897:23:0::1;18979:1;18828:56:::0;18924:37:::1;18942:19:::0;18924:15;:37:::1;:::i;:::-;18923:53;;;;:::i;:::-;:57;;;;:::i;:::-;18897:83:::0;-1:-1:-1;18991:23:0::1;19017:33;18897:83:::0;19017:15;:33:::1;:::i;:::-;18991:59:::0;-1:-1:-1;19066:19:0;;19063:442:::1;;19191:237;::::0;-1:-1:-1;;;19191:237:0;;-1:-1:-1;;;;;19191:6:0::1;:22;::::0;::::1;::::0;19221:15;;19191:237:::1;::::0;19264:4:::1;::::0;19288:15;;19322:1:::1;::::0;;;7869:42:::1;::::0;19398:15:::1;::::0;19191:237:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;19448:45:0::1;::::0;;26817:25:1;;;26873:2;26858:18;;26851:34;;;19448:45:0::1;::::0;-1:-1:-1;26790:18:1;19448:45:0::1;;;;;;;19063:442;19529:19:::0;;19525:234:::1;;19566:18;19590:17;-1:-1:-1::0;;;;;19590:22:0::1;19620:15;19590:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;19525:234:0::1;-1:-1:-1::0;;10135:6:0;:14;;-1:-1:-1;;10135:14:0;;;-1:-1:-1;;;;;;;;17743:2023:0:o;196:454:1:-;291:6;299;307;315;323;376:3;364:9;355:7;351:23;347:33;344:53;;;393:1;390;383:12;344:53;-1:-1:-1;;416:23:1;;;486:2;471:18;;458:32;;-1:-1:-1;537:2:1;522:18;;509:32;;588:2;573:18;;560:32;;-1:-1:-1;639:3:1;624:19;611:33;;-1:-1:-1;196:454:1;-1:-1:-1;196:454:1:o;655:548::-;767:4;796:2;825;814:9;807:21;857:6;851:13;900:6;895:2;884:9;880:18;873:34;925:1;935:140;949:6;946:1;943:13;935:140;;;1044:14;;;1040:23;;1034:30;1010:17;;;1029:2;1006:26;999:66;964:10;;935:140;;;939:3;1124:1;1119:2;1110:6;1099:9;1095:22;1091:31;1084:42;1194:2;1187;1183:7;1178:2;1170:6;1166:15;1162:29;1151:9;1147:45;1143:54;1135:62;;;;655:548;;;;:::o;1208:131::-;-1:-1:-1;;;;;1283:31:1;;1273:42;;1263:70;;1329:1;1326;1319:12;1344:315;1412:6;1420;1473:2;1461:9;1452:7;1448:23;1444:32;1441:52;;;1489:1;1486;1479:12;1441:52;1528:9;1515:23;1547:31;1572:5;1547:31;:::i;:::-;1597:5;1649:2;1634:18;;;;1621:32;;-1:-1:-1;;;1344:315:1:o;1856:118::-;1942:5;1935:13;1928:21;1921:5;1918:32;1908:60;;1964:1;1961;1954:12;1979:446;2062:6;2070;2078;2086;2139:3;2127:9;2118:7;2114:23;2110:33;2107:53;;;2156:1;2153;2146:12;2107:53;2192:9;2179:23;2169:33;;2249:2;2238:9;2234:18;2221:32;2211:42;;2300:2;2289:9;2285:18;2272:32;2262:42;;2354:2;2343:9;2339:18;2326:32;2367:28;2389:5;2367:28;:::i;:::-;1979:446;;;;-1:-1:-1;1979:446:1;;-1:-1:-1;;1979:446:1:o;2430:248::-;2498:6;2506;2559:2;2547:9;2538:7;2534:23;2530:32;2527:52;;;2575:1;2572;2565:12;2527:52;-1:-1:-1;;2598:23:1;;;2668:2;2653:18;;;2640:32;;-1:-1:-1;2430:248:1:o;2683:456::-;2760:6;2768;2776;2829:2;2817:9;2808:7;2804:23;2800:32;2797:52;;;2845:1;2842;2835:12;2797:52;2884:9;2871:23;2903:31;2928:5;2903:31;:::i;:::-;2953:5;-1:-1:-1;3010:2:1;2995:18;;2982:32;3023:33;2982:32;3023:33;:::i;:::-;2683:456;;3075:7;;-1:-1:-1;;;3129:2:1;3114:18;;;;3101:32;;2683:456::o;3541:180::-;3600:6;3653:2;3641:9;3632:7;3628:23;3624:32;3621:52;;;3669:1;3666;3659:12;3621:52;-1:-1:-1;3692:23:1;;3541:180;-1:-1:-1;3541:180:1:o;3726:382::-;3791:6;3799;3852:2;3840:9;3831:7;3827:23;3823:32;3820:52;;;3868:1;3865;3858:12;3820:52;3907:9;3894:23;3926:31;3951:5;3926:31;:::i;:::-;3976:5;-1:-1:-1;4033:2:1;4018:18;;4005:32;4046:30;4005:32;4046:30;:::i;:::-;4095:7;4085:17;;;3726:382;;;;;:::o;4113:247::-;4172:6;4225:2;4213:9;4204:7;4200:23;4196:32;4193:52;;;4241:1;4238;4231:12;4193:52;4280:9;4267:23;4299:31;4324:5;4299:31;:::i;4365:309::-;4430:6;4438;4491:2;4479:9;4470:7;4466:23;4462:32;4459:52;;;4507:1;4504;4497:12;4459:52;4543:9;4530:23;4520:33;;4603:2;4592:9;4588:18;4575:32;4616:28;4638:5;4616:28;:::i;4679:367::-;4742:8;4752:6;4806:3;4799:4;4791:6;4787:17;4783:27;4773:55;;4824:1;4821;4814:12;4773:55;-1:-1:-1;4847:20:1;;4890:18;4879:30;;4876:50;;;4922:1;4919;4912:12;4876:50;4959:4;4951:6;4947:17;4935:29;;5019:3;5012:4;5002:6;4999:1;4995:14;4987:6;4983:27;4979:38;4976:47;4973:67;;;5036:1;5033;5026:12;4973:67;4679:367;;;;;:::o;5051:773::-;5173:6;5181;5189;5197;5250:2;5238:9;5229:7;5225:23;5221:32;5218:52;;;5266:1;5263;5256:12;5218:52;5306:9;5293:23;5335:18;5376:2;5368:6;5365:14;5362:34;;;5392:1;5389;5382:12;5362:34;5431:70;5493:7;5484:6;5473:9;5469:22;5431:70;:::i;:::-;5520:8;;-1:-1:-1;5405:96:1;-1:-1:-1;5608:2:1;5593:18;;5580:32;;-1:-1:-1;5624:16:1;;;5621:36;;;5653:1;5650;5643:12;5621:36;;5692:72;5756:7;5745:8;5734:9;5730:24;5692:72;:::i;:::-;5051:773;;;;-1:-1:-1;5783:8:1;-1:-1:-1;;;;5051:773:1:o;6279:566::-;6371:6;6379;6387;6440:2;6428:9;6419:7;6415:23;6411:32;6408:52;;;6456:1;6453;6446:12;6408:52;6496:9;6483:23;6529:18;6521:6;6518:30;6515:50;;;6561:1;6558;6551:12;6515:50;6600:70;6662:7;6653:6;6642:9;6638:22;6600:70;:::i;:::-;6689:8;;-1:-1:-1;6574:96:1;-1:-1:-1;;6774:2:1;6759:18;;6746:32;6787:28;6746:32;6787:28;:::i;:::-;6834:5;6824:15;;;6279:566;;;;;:::o;6850:241::-;6906:6;6959:2;6947:9;6938:7;6934:23;6930:32;6927:52;;;6975:1;6972;6965:12;6927:52;7014:9;7001:23;7033:28;7055:5;7033:28;:::i;7096:377::-;7170:6;7178;7186;7239:2;7227:9;7218:7;7214:23;7210:32;7207:52;;;7255:1;7252;7245:12;7207:52;7294:9;7281:23;7313:28;7335:5;7313:28;:::i;:::-;7360:5;7412:2;7397:18;;7384:32;;-1:-1:-1;7463:2:1;7448:18;;;7435:32;;7096:377;-1:-1:-1;;;7096:377:1:o;7478:388::-;7546:6;7554;7607:2;7595:9;7586:7;7582:23;7578:32;7575:52;;;7623:1;7620;7613:12;7575:52;7662:9;7649:23;7681:31;7706:5;7681:31;:::i;:::-;7731:5;-1:-1:-1;7788:2:1;7773:18;;7760:32;7801:33;7760:32;7801:33;:::i;8097:127::-;8158:10;8153:3;8149:20;8146:1;8139:31;8189:4;8186:1;8179:15;8213:4;8210:1;8203:15;8229:217;8269:1;8295;8285:132;;8339:10;8334:3;8330:20;8327:1;8320:31;8374:4;8371:1;8364:15;8402:4;8399:1;8392:15;8285:132;-1:-1:-1;8431:9:1;;8229:217::o;8451:168::-;8524:9;;;8555;;8572:15;;;8566:22;;8552:37;8542:71;;8593:18;;:::i;8624:416::-;8826:2;8808:21;;;8865:2;8845:18;;;8838:30;8904:34;8899:2;8884:18;;8877:62;-1:-1:-1;;;8970:2:1;8955:18;;8948:50;9030:3;9015:19;;8624:416::o;9045:125::-;9110:9;;;9131:10;;;9128:36;;;9144:18;;:::i;10897:128::-;10964:9;;;10985:11;;;10982:37;;;10999:18;;:::i;11030:188::-;11109:13;;-1:-1:-1;;;;;11151:42:1;;11141:53;;11131:81;;11208:1;11205;11198:12;11131:81;11030:188;;;:::o;11223:450::-;11310:6;11318;11326;11379:2;11367:9;11358:7;11354:23;11350:32;11347:52;;;11395:1;11392;11385:12;11347:52;11418:40;11448:9;11418:40;:::i;:::-;11408:50;;11477:49;11522:2;11511:9;11507:18;11477:49;:::i;:::-;11467:59;;11569:2;11558:9;11554:18;11548:25;11613:10;11606:5;11602:22;11595:5;11592:33;11582:61;;11639:1;11636;11629:12;11678:339;11880:2;11862:21;;;11919:2;11899:18;;;11892:30;-1:-1:-1;;;11953:2:1;11938:18;;11931:45;12008:2;11993:18;;11678:339::o;13074:251::-;13144:6;13197:2;13185:9;13176:7;13172:23;13168:32;13165:52;;;13213:1;13210;13203:12;13165:52;13245:9;13239:16;13264:31;13289:5;13264:31;:::i;13639:607::-;-1:-1:-1;;;;;13998:15:1;;;13980:34;;14045:2;14030:18;;14023:34;;;;14088:2;14073:18;;14066:34;;;;14131:2;14116:18;;14109:34;;;;14180:15;;;14174:3;14159:19;;14152:44;13960:3;14212:19;;14205:35;;;;13929:3;13914:19;;13639:607::o;14251:306::-;14339:6;14347;14355;14408:2;14396:9;14387:7;14383:23;14379:32;14376:52;;;14424:1;14421;14414:12;14376:52;14453:9;14447:16;14437:26;;14503:2;14492:9;14488:18;14482:25;14472:35;;14547:2;14536:9;14532:18;14526:25;14516:35;;14251:306;;;;;:::o;14916:127::-;14977:10;14972:3;14968:20;14965:1;14958:31;15008:4;15005:1;14998:15;15032:4;15029:1;15022:15;15462:422;15551:1;15594:5;15551:1;15608:270;15629:7;15619:8;15616:21;15608:270;;;15688:4;15684:1;15680:6;15676:17;15670:4;15667:27;15664:53;;;15697:18;;:::i;:::-;15747:7;15737:8;15733:22;15730:55;;;15767:16;;;;15730:55;15846:22;;;;15806:15;;;;15608:270;;;15612:3;15462:422;;;;;:::o;15889:806::-;15938:5;15968:8;15958:80;;-1:-1:-1;16009:1:1;16023:5;;15958:80;16057:4;16047:76;;-1:-1:-1;16094:1:1;16108:5;;16047:76;16139:4;16157:1;16152:59;;;;16225:1;16220:130;;;;16132:218;;16152:59;16182:1;16173:10;;16196:5;;;16220:130;16257:3;16247:8;16244:17;16241:43;;;16264:18;;:::i;:::-;-1:-1:-1;;16320:1:1;16306:16;;16335:5;;16132:218;;16434:2;16424:8;16421:16;16415:3;16409:4;16406:13;16402:36;16396:2;16386:8;16383:16;16378:2;16372:4;16369:12;16365:35;16362:77;16359:159;;;-1:-1:-1;16471:19:1;;;16503:5;;16359:159;16550:34;16575:8;16569:4;16550:34;:::i;:::-;16620:6;16616:1;16612:6;16608:19;16599:7;16596:32;16593:58;;;16631:18;;:::i;:::-;16669:20;;15889:806;-1:-1:-1;;;15889:806:1:o;16700:140::-;16758:5;16787:47;16828:4;16818:8;16814:19;16808:4;16787:47;:::i;16845:135::-;16884:3;16905:17;;;16902:43;;16925:18;;:::i;:::-;-1:-1:-1;16972:1:1;16961:13;;16845:135::o;24524:245::-;24591:6;24644:2;24632:9;24623:7;24619:23;24615:32;24612:52;;;24660:1;24657;24650:12;24612:52;24692:9;24686:16;24711:28;24733:5;24711:28;:::i;25658:980::-;25920:4;25968:3;25957:9;25953:19;25999:6;25988:9;25981:25;26025:2;26063:6;26058:2;26047:9;26043:18;26036:34;26106:3;26101:2;26090:9;26086:18;26079:31;26130:6;26165;26159:13;26196:6;26188;26181:22;26234:3;26223:9;26219:19;26212:26;;26273:2;26265:6;26261:15;26247:29;;26294:1;26304:195;26318:6;26315:1;26312:13;26304:195;;;26383:13;;-1:-1:-1;;;;;26379:39:1;26367:52;;26474:15;;;;26439:12;;;;26415:1;26333:9;26304:195;;;-1:-1:-1;;;;;;;26555:32:1;;;;26550:2;26535:18;;26528:60;-1:-1:-1;;;26619:3:1;26604:19;26597:35;26516:3;25658:980;-1:-1:-1;;;25658:980:1:o

Swarm Source

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