ETH Price: $2,410.39 (-0.18%)

Token

Doont Pry (doont)
 

Overview

Max Total Supply

100,000,000 doont

Holders

34

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
DoontPry

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**

https://medium.com/@doont/a-fleeting-instance-has-passed-us-all-leaving-us-to-wonder-if-the-effort-was-woorth-the-reward-1bf50e74a425


,   .       ,           
| . | o     |           
| ) ) . ,-. | , ,-. ;-. 
|/|/  | |   |<  |-' |   
' '   ' `-' ' ` `-' '   
                        

*/

// SPDX-License-Identifier: MIT                                                                               
                                                    
pragma solidity 0.8.15;

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

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

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

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

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

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

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

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

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable;
    function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function removeLiquidityETH(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external returns (uint amountToken, uint amountETH);
}

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

interface IPriceFeed {
    function latestAnswer() external returns (int256);
}

contract DoontPry is ERC20, Ownable {

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWallet;

    IDexRouter public dexRouter;
    address public lpPair;

    IPriceFeed internal immutable priceFeed;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public operationsAddress;
    address public devAddress;
    address public futureOwner;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping (address => bool) public boughtEarly;
    address[] public earlyBuyers;
    uint256 public botsCaught;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public constant FEE_DIVISOR = 10000;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = false;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

    // floating liquidity settings
    bool public customLiquidityActive = false;
    uint256 public latestEthPrice = 0;
    uint256 public minimumBuyLiqPerc = 50;
    uint256 public minimumSellLiqPerc = 33;
    uint256 public maximumBuyLiqPerc = 80;
    uint256 public maximumSellLiqPerc = 50;
    uint256 public mcapComparisonValue = 10 * 1e6;

    
    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedOperationsAddress(address indexed newWallet);

    event UpdatedDevAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event AutoBurnLP(uint256 indexed tokensBurned);

    event ManualBurnLP(uint256 indexed tokensBurned);

    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20("Doont Pry", "doont") payable {
        
        address newOwner = msg.sender; // can leave alone if owner is deployer.
        address _dexRouter;
        address _priceFeed;

        if(block.chainid == 1){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
            _priceFeed = 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419;
        } else if(block.chainid == 4){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // Rinkeby ETH: Uniswap V2
            _priceFeed = 0x8A753747A1Fa494EC906cE90E9f37563A8AF630e;
        } else if(block.chainid == 56){
            _dexRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BNB Chain: PCS V2
            _priceFeed = 0x0567F2323251f0Aab15c8dFb1967E4e8A7D42aeE;
        } else if(block.chainid == 97){
            _dexRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BNB Chain Testnet: PCS V2
            _priceFeed = 0x2514895c72f50D8bd4B4F9b1110F0D6bD2c97526;
        } else if(block.chainid == 42161){
            _dexRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; // Arbitrum: SushiSwap
            _priceFeed = 0x639Fe6ab55C921f74e7fac1ee960C0B6293ba612;
        } else {
            revert("Chain not configured");
        }

        priceFeed = IPriceFeed(_priceFeed);
        require(priceFeed.latestAnswer() > 0, "wrong price feed");

        // initialize router
        dexRouter = IDexRouter(_dexRouter);

        uint256 totalSupply = 100 * 1e6 * (10 ** decimals());
        
        maxBuyAmount = totalSupply * 10 / 1000;
        maxSellAmount = totalSupply * 10 / 1000;
        maxWallet = totalSupply * 20 / 1000;
        swapTokensAtAmount = totalSupply * 25 / 100000;

        buyOperationsFee = 50;
        buyLiquidityFee = 50;
        buyDevFee = 50;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee;

        sellOperationsFee = 100;
        sellLiquidityFee = 100;
        sellDevFee = 100;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee;

        if(block.chainid == 1){
            operationsAddress = address(0xE5969ce4bf3e709fc83298ba6A30D57afC110F4C);
            devAddress = address(0x007a86626927424A80522041329DebEB8BbB36fa);
            futureOwner = address(0x007a86626927424A80522041329DebEB8BbB36fa);
        } else {
            operationsAddress = address(msg.sender);
            devAddress = address(msg.sender);
            futureOwner = address(msg.sender);
        }

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(address(operationsAddress), true);
        _excludeFromMaxTransaction(address(dexRouter), true);
        _excludeFromMaxTransaction(address(futureOwner), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(operationsAddress), true);
        excludeFromFees(address(dexRouter), true);
        excludeFromFees(address(futureOwner), true);

        
        _createInitialSupply(address(this), totalSupply * 89 / 100);  // update with % for LP
        _createInitialSupply(futureOwner, totalSupply - balanceOf(address(this)));
        transferOwnership(newOwner);
    }

    receive() external payable {}

    function setCustomLiquidityActive(bool active) external onlyOwner {
        customLiquidityActive = active;
    }
    
    function enableTrading(uint256 blocksForPenalty, address _lpPair) external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        require(blocksForPenalty <= 10, "Cannot make penalty blocks more than 10");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        
        // set pair
        lpPair = _lpPair;
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);

        emit EnabledTrading();
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {

        limitsInEffect = false;
        transferDelayEnabled = false;
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();

        emit RemovedLimits();
    }

    function getEarlyBuyers() external view returns (address[] memory){
        return earlyBuyers;
    }

    function massManageRestrictedWallets(address[] calldata accounts, bool restricted) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++){
            boughtEarly[accounts[i]] = restricted;
        }
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }
    
    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()), "Cannot set max buy amount lower than 0.1%");
        maxBuyAmount = newNum * (10 ** decimals());
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()), "Cannot set max sell amount lower than 0.1%");
        maxSellAmount = newNum * (10 ** decimals());
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100) / (10 ** decimals()), "Cannot set max sell amount lower than 1%");
        maxWallet = newNum * (10 ** decimals());
        emit UpdatedMaxWalletAmount(maxWallet);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 1 / 1000, "Swap amount cannot be higher than 0.1% total supply.");
  	    swapTokensAtAmount = newAmount;
  	}
    
    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        _excludeFromMaxTransaction(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 15 * FEE_DIVISOR / 100, "Must keep fees at 15% or less");
    }

    function updateSellFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 20 * FEE_DIVISOR / 100, "Must keep fees at 20% or less");
    }

    function massExcludeFromFees(address[] calldata accounts, bool excluded) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++){
            _isExcludedFromFees[accounts[i]] = excluded;
            emit ExcludeFromFees(accounts[i], excluded);
        }
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function _transfer(address from, address to, uint256 amount) internal override {

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");
        
        if(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
        }

        if(tradingActive){
            require((!boughtEarly[from] && !boughtEarly[to]) || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address.");
        }
        
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
                
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != address(dexRouter) && to != address(lpPair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number - 2 && _holderLastTransferTimestamp[to] < block.number - 2, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                    require(amount + balanceOf(to) <= maxWallet, "Max Wallet Exceeded");
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                } else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max Wallet Exceeded");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

        if(!swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from]){
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;

        if(customLiquidityActive && tradingActive && !swapping){
            latestEthPrice = uint256(priceFeed.latestAnswer());
            setCustomFees();
        }

        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.
            if(earlyBuyPenaltyInEffect() && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && !_isExcludedFromFees[to] && buyTotalFees > 0){
                
                if(!earlyBuyPenaltyInEffect()){
                    // reduce by 1 wei per max buy over what Uniswap will allow to revert bots as best as possible to limit erroneously blacklisted wallets. First bot will get in and be blacklisted, rest will be reverted (*cross fingers*)
                    maxBuyAmount -= 1;
                }

                if(!boughtEarly[to]){
                    boughtEarly[to] = true;
                    botsCaught += 1;
                    earlyBuyers.push(to);
                    emit CaughtEarlyBuyer(to);
                }

                fees = amount * buyTotalFees / FEE_DIVISOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / FEE_DIVISOR;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForOperations += fees * sellOperationsFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / FEE_DIVISOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function earlyBuyPenaltyInEffect() public view returns (bool){
        return block.number < blockForPenaltyEnd;
    }

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        _approve(address(this), address(dexRouter), tokenAmount);

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

        // add the liquidity
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations + tokensForDev;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 20){
            contractBalance = swapTokensAtAmount * 20;
        }

        bool success;
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        
        swapTokensForEth(contractBalance - liquidityTokens); 
        
        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForOperations = ethBalance * tokensForOperations / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForDev = ethBalance * tokensForDev / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForOperations + ethForDev;
            
        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForDev = 0;
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        (success,) = address(operationsAddress).call{value: address(this).balance}("");
    }

    function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this) || !tradingActive, "Can't withdraw native tokens while trading is active");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // withdraw ETH if stuck or someone sends to the address
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function setOperationsAddress(address _operationsAddress) external onlyOwner {
        require(_operationsAddress != address(0), "_operationsAddress address cannot be 0");
        operationsAddress = payable(_operationsAddress);
        emit UpdatedOperationsAddress(_operationsAddress);
    }
    
    function setDevAddress(address _devAddress) external onlyOwner {
        require(_devAddress != address(0), "_operationsAddress address cannot be 0");
        devAddress = payable(_devAddress);
        emit UpdatedDevAddress(_devAddress);
    }

    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction");
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }

    function launch(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");

        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), dexRouter.WETH());
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);
   
        // add the liquidity

        require(address(this).balance > 0, "Must have ETH on contract to launch");

        require(balanceOf(address(this)) > 0, "Must have Tokens on contract to launch");

        _approve(address(this), address(dexRouter), balanceOf(address(this)));
        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(futureOwner),
            block.timestamp
        );

        latestEthPrice = uint256(priceFeed.latestAnswer());

        //standard enable trading
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();
    }

    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }
    
    function autoBurnLiquidityPairTokens() internal {
        
        lastLpBurnTime = block.timestamp;
        
        lastManualLpBurnTime = block.timestamp;
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));
        uint256 tokenBalance = balanceOf(address(this));
        uint256 lpAmount = lpBalance * percentForLPBurn / 10000;
        uint256 initialEthBalance = address(this).balance;

        // approve token transfer to cover all possible scenarios
        IERC20(lpPair).approve(address(dexRouter), lpAmount);

        // remove the liquidity
        dexRouter.removeLiquidityETH(
            address(this),
            lpAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            address(this),
            block.timestamp
        );

        uint256 deltaTokenBalance = balanceOf(address(this)) - tokenBalance;
        if(deltaTokenBalance > 0){
            super._transfer(address(this), address(0xdead), deltaTokenBalance);
        }

        uint256 deltaEthBalance = address(this).balance - initialEthBalance;

        if(deltaEthBalance > 0){
            buyBackTokens(deltaEthBalance);
        }

        emit AutoBurnLP(lpAmount);
    }

    function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner {
        require(percent <= 5000, "May not burn more than 50% of contract's LP at a time");
        require(lastManualLpBurnTime <= block.timestamp - manualBurnFrequency, "Burn too soon");
        lastManualLpBurnTime = block.timestamp;
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));
        uint256 tokenBalance = balanceOf(address(this));
        uint256 lpAmount = lpBalance * percent / 10000;
        uint256 initialEthBalance = address(this).balance;

        // approve token transfer to cover all possible scenarios
        IERC20(lpPair).approve(address(dexRouter), lpAmount);

        // remove the liquidity
        dexRouter.removeLiquidityETH(
            address(this),
            lpAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            address(this),
            block.timestamp
        );

        uint256 deltaTokenBalance = balanceOf(address(this)) - tokenBalance;
        if(deltaTokenBalance > 0){
            super._transfer(address(this), address(0xdead), deltaTokenBalance);
        }

        uint256 deltaEthBalance = address(this).balance - initialEthBalance;

        if(deltaEthBalance > 0){
            buyBackTokens(deltaEthBalance);
        }

        emit ManualBurnLP(lpAmount);
    }

    function buyBackTokens(uint256 amountInWei) internal {
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}(
            0,
            path,
            address(0xdead),
            block.timestamp
        );
    }

    function getMcap() public view returns (uint256){
        return (IERC20(dexRouter.WETH()).balanceOf(address(lpPair)) * 1e18 * latestEthPrice / balanceOf(address(lpPair)) * (totalSupply()-balanceOf(address(0xdead))) / 1e18 / 1e8); 
    }

    function customLiquiditySettings(bool _customLiquidityActive, uint256 _minimumBuyLiqPerc, uint256 _maximumBuyLiqPerc, uint256 _minimumSellLiqPerc, uint256 _maximumSellLiqPerc, uint256 _mcapComparisonValue) external onlyOwner {
        require(_minimumBuyLiqPerc <= 100 && _maximumBuyLiqPerc <= 100 && _minimumBuyLiqPerc <= _maximumBuyLiqPerc, "Buy settings incorrect");
        require(_minimumSellLiqPerc <= 100 && _maximumSellLiqPerc <= 100 && _minimumSellLiqPerc <= _maximumSellLiqPerc, "Sell settings incorrect");
        customLiquidityActive = _customLiquidityActive;
        minimumBuyLiqPerc = _minimumBuyLiqPerc;
        maximumBuyLiqPerc = _maximumBuyLiqPerc;
        minimumSellLiqPerc = _minimumSellLiqPerc;
        maximumSellLiqPerc = _maximumSellLiqPerc;
        mcapComparisonValue = _mcapComparisonValue;
    }

    function setCustomFees() internal {
        uint256 mcap = getMcap();
        uint256 newLiquidityPercBuy = (mcap / mcapComparisonValue) * maximumBuyLiqPerc / 1e18 + minimumBuyLiqPerc;
        uint256 newLiquidityPercSell = (mcap / mcapComparisonValue) * maximumSellLiqPerc / 1e18 + minimumSellLiqPerc;
        if(newLiquidityPercBuy > maximumBuyLiqPerc){
            newLiquidityPercBuy = maximumBuyLiqPerc;
        }
        if(newLiquidityPercSell > maximumSellLiqPerc){
            newLiquidityPercSell = maximumSellLiqPerc;
        }
        buyLiquidityFee = buyTotalFees * newLiquidityPercBuy / 100;
        buyOperationsFee = (buyTotalFees - buyLiquidityFee) * 33 / 100;
        buyDevFee = buyTotalFees - buyOperationsFee - buyLiquidityFee;
            
        sellLiquidityFee = sellTotalFees * newLiquidityPercSell / 100;
        sellOperationsFee = (sellTotalFees - sellLiquidityFee) * 50 / 100;
        sellDevFee = sellTotalFees - sellOperationsFee - sellLiquidityFee;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokensBurned","type":"uint256"}],"name":"AutoBurnLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokensBurned","type":"uint256"}],"name":"ManualBurnLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedDevAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"customLiquidityActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_customLiquidityActive","type":"bool"},{"internalType":"uint256","name":"_minimumBuyLiqPerc","type":"uint256"},{"internalType":"uint256","name":"_maximumBuyLiqPerc","type":"uint256"},{"internalType":"uint256","name":"_minimumSellLiqPerc","type":"uint256"},{"internalType":"uint256","name":"_maximumSellLiqPerc","type":"uint256"},{"internalType":"uint256","name":"_mcapComparisonValue","type":"uint256"}],"name":"customLiquiditySettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earlyBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"},{"internalType":"address","name":"_lpPair","type":"address"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"futureOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMcap","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":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestEthPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"massExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"restricted","type":"bool"}],"name":"massManageRestrictedWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumBuyLiqPerc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumSellLiqPerc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mcapComparisonValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumBuyLiqPerc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumSellLiqPerc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"active","type":"bool"}],"name":"setCustomLiquidityActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","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":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600f8190556014805462ffffff191660019081179091556016805460ff19908116909217905560196022556023805482169055610e106024556107086026556028805490911690556029556032602a8190556021602b556050602c55602d5562989680602e55600960a090815268446f6f6e742050727960b81b60c052610120604052600560e090815264191bdbdb9d60da1b610100526003620000a68382620009ce565b506004620000b58282620009ce565b5050506000620000ca6200063660201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062005bc1833981519152908290a3503360008046600103620001475750737a250d5630b4cf539739df2c5dacb4c659f2488d9050735f4ec3df9cbd43714fe2740f5e3616155c5b841962000285565b46600403620001835750737a250d5630b4cf539739df2c5dacb4c659f2488d9050738a753747a1fa494ec906ce90e9f37563a8af630e62000285565b46603803620001bf57507310ed43c718714eb63d5aa57b78b54704e256024e9050730567f2323251f0aab15c8dfb1967e4e8a7d42aee62000285565b46606103620001fb575073d99d1c33f9fc3444f8101754abc46c52416550d19050732514895c72f50d8bd4b4f9b1110f0d6bd2c9752662000285565b4661a4b103620002385750731b02da8cb0d097eb8d57a175b88c7d8b47997506905073639fe6ab55c921f74e7fac1ee960c0b6293ba61262000285565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b0381166080819052604080516350d25bcd60e01b81529051600092916350d25bcd916004808301926020929190829003018187875af1158015620002d4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fa919062000a9a565b136200033c5760405162461bcd60e51b815260206004820152601060248201526f1ddc9bdb99c81c1c9a58d9481999595960821b60448201526064016200027c565b600980546001600160a01b0319166001600160a01b038416179055600062000362601290565b6200036f90600a62000bc9565b6200037f906305f5e10062000be1565b90506103e86200039182600a62000be1565b6200039d919062000c03565b6006556103e8620003b082600a62000be1565b620003bc919062000c03565b6007556103e8620003cf82601462000be1565b620003db919062000c03565b600855620186a0620003ef82601962000be1565b620003fb919062000c03565b600b55603260188190556019819055601a8190556200041b818062000c26565b62000427919062000c26565b6017556064601c819055601d819055601e81905562000447818062000c26565b62000453919062000c26565b601b5546600103620004b857600c80546001600160a01b031990811673e5969ce4bf3e709fc83298ba6a30d57afc110f4c17909155600d80548216727a86626927424a80522041329debeb8bbb36fa908117909155600e8054909216179055620004e5565b600c8054336001600160a01b03199182168117909255600d8054821683179055600e805490911690911790555b620004f28460016200063a565b620004ff3060016200063a565b6200050e61dead60016200063a565b600c5462000527906001600160a01b031660016200063a565b60095462000540906001600160a01b031660016200063a565b600e5462000559906001600160a01b031660016200063a565b620005668460016200069d565b620005733060016200069d565b6200058261dead60016200069d565b600c546200059b906001600160a01b031660016200069d565b600954620005b4906001600160a01b031660016200069d565b600e54620005cd906001600160a01b031660016200069d565b620005f3306064620005e184605962000be1565b620005ed919062000c03565b62000747565b600e543060009081526020819052604090205462000621916001600160a01b031690620005ed908462000c41565b6200062c846200082c565b5050505062000c5b565b3390565b6001600160a01b038216600081815260306020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b03163314620006e85760405162461bcd60e51b8152602060048201819052602482015260008051602062005ba183398151915260448201526064016200027c565b6001600160a01b0382166000818152602f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200079f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200027c565b8060026000828254620007b3919062000c26565b90915550506001600160a01b03821660009081526020819052604081208054839290620007e290849062000c26565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620008775760405162461bcd60e51b8152602060048201819052602482015260008051602062005ba183398151915260448201526064016200027c565b6001600160a01b038116620008de5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200027c565b6005546040516001600160a01b0380841692169060008051602062005bc183398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200095457607f821691505b6020821081036200097557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620009c957600081815260208120601f850160051c81016020861015620009a45750805b601f850160051c820191505b81811015620009c557828155600101620009b0565b5050505b505050565b81516001600160401b03811115620009ea57620009ea62000929565b62000a0281620009fb84546200093f565b846200097b565b602080601f83116001811462000a3a576000841562000a215750858301515b600019600386901b1c1916600185901b178555620009c5565b600085815260208120601f198616915b8281101562000a6b5788860151825594840194600190910190840162000a4a565b508582101562000a8a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000aad57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000b0b57816000190482111562000aef5762000aef62000ab4565b8085161562000afd57918102915b93841c939080029062000acf565b509250929050565b60008262000b245750600162000bc3565b8162000b335750600062000bc3565b816001811462000b4c576002811462000b575762000b77565b600191505062000bc3565b60ff84111562000b6b5762000b6b62000ab4565b50506001821b62000bc3565b5060208310610133831016604e8410600b841016171562000b9c575081810a62000bc3565b62000ba8838362000aca565b806000190482111562000bbf5762000bbf62000ab4565b0290505b92915050565b600062000bda60ff84168362000b13565b9392505050565b600081600019048311821515161562000bfe5762000bfe62000ab4565b500290565b60008262000c2157634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562000c3c5762000c3c62000ab4565b500190565b60008282101562000c565762000c5662000ab4565b500390565b608051614f2362000c7e60003960008181611ec001526138590152614f236000f3fe6080604052600436106104b95760003560e01c80638da5cb5b1161026b578063c18bc1951161014f578063ea4cfe12116100c1578063f5648a4f11610085578063f5648a4f14610de3578063f5f4a97d14610df8578063f637434214610e0e578063f8b45b0514610e24578063fb002c9714610e3a578063fe72b27a14610e5057600080fd5b8063ea4cfe1214610d57578063eb472fc414610d77578063ee40166e14610d97578063f11a24d314610dad578063f2fde38b14610dc357600080fd5b8063d85ba06311610113578063d85ba06314610c9a578063dc3f0d0f14610cb0578063dd62ed3e14610cd0578063e1ade1fe14610d16578063e2f4560514610d2c578063e884f26014610d4257600080fd5b8063c18bc19514610c0a578063c876d0b914610c2a578063d0d41fe114610c44578063d0e7d33f14610c64578063d257b34f14610c7a57600080fd5b8063a4c82a00116101e8578063b9e9d1aa116101ac578063b9e9d1aa14610b56578063bbc0c74214610b76578063bd5fb92014610b95578063c024666814610bb5578063c077ab4b14610bd5578063c17b5b8c14610bea57600080fd5b8063a4c82a0014610aba578063a62068ce14610ad0578063a9059cbb14610ae6578063b3e4c17914610b06578063b62496f514610b2657600080fd5b80639e93ad8e1161022f5780639e93ad8e14610a425780639ec22c0e14610a585780639fccce3214610a6e578063a0d82dc514610a84578063a457c2d714610a9a57600080fd5b80638da5cb5b146109b757806395d89b41146109d55780639a5bd2dd146109ea5780639a7a23d614610a0c5780639c3b4fdc14610a2c57600080fd5b8063452ed4f11161039d5780636ddd17131161030f5780637571336a116102d35780637571336a146108f15780638095d564146109115780638366e79a1461093157806385b12c7c1461095157806385ecfd281461097157806388e765ff146109a157600080fd5b80636ddd17131461086757806370a0823114610887578063715018a6146108a7578063730c1888146108bc578063751039fc146108dc57600080fd5b8063552fd14811610361578063552fd148146107d857806358a6d531146107f85780635a139dd41461080f57806366d602ae146108255780636a486a8e1461083b5780636b0a894c1461085157600080fd5b8063452ed4f114610753578063499b8394146107735780634a62bb65146107935780634f77f6c0146107ad57806351f205e4146107c357600080fd5b8063199ffc72116104365780632e82f1a0116103fa5780632e82f1a0146106a75780632f1ffebf146106c1578063313ce567146106e157806339509351146106fd5780633ad10ef61461071d57806342088f1e1461073d57600080fd5b8063199ffc72146106255780631a8145bb1461063b57806323b872dd146106515780632be32b61146106715780632c3e486c1461069157600080fd5b80630d3cbb221161047d5780630d3cbb221461058e57806310d5de53146105b05780631708da75146105e057806318160ddd146105fa578063184c16c51461060f57600080fd5b8063046f9c3f146104c557806306fdde03146104ee5780630758d92414610510578063095ea7b3146105485780630d3141e01461057857600080fd5b366104c057005b600080fd5b3480156104d157600080fd5b506104db602a5481565b6040519081526020015b60405180910390f35b3480156104fa57600080fd5b50610503610e70565b6040516104e59190614766565b34801561051c57600080fd5b50600954610530906001600160a01b031681565b6040516001600160a01b0390911681526020016104e5565b34801561055457600080fd5b506105686105633660046147d3565b610f02565b60405190151581526020016104e5565b34801561058457600080fd5b506104db602e5481565b34801561059a57600080fd5b506105ae6105a936600461480d565b610f19565b005b3480156105bc57600080fd5b506105686105cb366004614831565b60306020526000908152604090205460ff1681565b3480156105ec57600080fd5b506028546105689060ff1681565b34801561060657600080fd5b506002546104db565b34801561061b57600080fd5b506104db60265481565b34801561063157600080fd5b506104db60225481565b34801561064757600080fd5b506104db60205481565b34801561065d57600080fd5b5061056861066c36600461484e565b610f5f565b34801561067d57600080fd5b506105ae61068c36600461488f565b611009565b34801561069d57600080fd5b506104db60245481565b3480156106b357600080fd5b506023546105689060ff1681565b3480156106cd57600080fd5b506105ae6106dc3660046148a8565b61111d565b3480156106ed57600080fd5b50604051601281526020016104e5565b34801561070957600080fd5b506105686107183660046147d3565b611292565b34801561072957600080fd5b50600d54610530906001600160a01b031681565b34801561074957600080fd5b506104db60295481565b34801561075f57600080fd5b50600a54610530906001600160a01b031681565b34801561077f57600080fd5b506105ae61078e366004614831565b6112ce565b34801561079f57600080fd5b506014546105689060ff1681565b3480156107b957600080fd5b506104db601c5481565b3480156107cf57600080fd5b506105ae611368565b3480156107e457600080fd5b506105ae6107f33660046148d8565b611471565b34801561080457600080fd5b506010544310610568565b34801561081b57600080fd5b506104db60185481565b34801561083157600080fd5b506104db60075481565b34801561084757600080fd5b506104db601b5481565b34801561085d57600080fd5b506104db60135481565b34801561087357600080fd5b506014546105689062010000900460ff1681565b34801561089357600080fd5b506104db6108a2366004614831565b611512565b3480156108b357600080fd5b506105ae61152d565b3480156108c857600080fd5b506105ae6108d736600461495e565b6115a1565b3480156108e857600080fd5b506105ae6116ca565b3480156108fd57600080fd5b506105ae61090c36600461498c565b611741565b34801561091d57600080fd5b506105ae61092c3660046149ba565b611809565b34801561093d57600080fd5b5061056861094c3660046149e6565b6118c9565b34801561095d57600080fd5b506105ae61096c36600461488f565b611b03565b34801561097d57600080fd5b5061056861098c366004614831565b60116020526000908152604090205460ff1681565b3480156109ad57600080fd5b506104db60065481565b3480156109c357600080fd5b506005546001600160a01b0316610530565b3480156109e157600080fd5b50610503611f96565b3480156109f657600080fd5b506109ff611fa5565b6040516104e59190614a58565b348015610a1857600080fd5b506105ae610a2736600461498c565b612006565b348015610a3857600080fd5b506104db601a5481565b348015610a4e57600080fd5b506104db61271081565b348015610a6457600080fd5b506104db60275481565b348015610a7a57600080fd5b506104db60215481565b348015610a9057600080fd5b506104db601e5481565b348015610aa657600080fd5b50610568610ab53660046147d3565b6120fa565b348015610ac657600080fd5b506104db60255481565b348015610adc57600080fd5b506104db60105481565b348015610af257600080fd5b50610568610b013660046147d3565b612193565b348015610b1257600080fd5b506105ae610b21366004614a6b565b6121a0565b348015610b3257600080fd5b50610568610b41366004614831565b60316020526000908152604090205460ff1681565b348015610b6257600080fd5b50600e54610530906001600160a01b031681565b348015610b8257600080fd5b5060145461056890610100900460ff1681565b348015610ba157600080fd5b506105ae610bb03660046148d8565b6122c0565b348015610bc157600080fd5b506105ae610bd036600461498c565b6123c6565b348015610be157600080fd5b506104db61244f565b348015610bf657600080fd5b506105ae610c053660046149ba565b6125bc565b348015610c1657600080fd5b506105ae610c2536600461488f565b612677565b348015610c3657600080fd5b506016546105689060ff1681565b348015610c5057600080fd5b506105ae610c5f366004614831565b612782565b348015610c7057600080fd5b506104db602d5481565b348015610c8657600080fd5b506105ae610c9536600461488f565b61281c565b348015610ca657600080fd5b506104db60175481565b348015610cbc57600080fd5b506105ae610ccb36600461488f565b612967565b348015610cdc57600080fd5b506104db610ceb3660046149e6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d2257600080fd5b506104db602b5481565b348015610d3857600080fd5b506104db600b5481565b348015610d4e57600080fd5b506105ae612a75565b348015610d6357600080fd5b50600c54610530906001600160a01b031681565b348015610d8357600080fd5b50610530610d9236600461488f565b612aab565b348015610da357600080fd5b506104db600f5481565b348015610db957600080fd5b506104db60195481565b348015610dcf57600080fd5b506105ae610dde366004614831565b612ad5565b348015610def57600080fd5b506105ae612bc0565b348015610e0457600080fd5b506104db602c5481565b348015610e1a57600080fd5b506104db601d5481565b348015610e3057600080fd5b506104db60085481565b348015610e4657600080fd5b506104db601f5481565b348015610e5c57600080fd5b506105ae610e6b36600461488f565b612c2c565b606060038054610e7f90614ab7565b80601f0160208091040260200160405190810160405280929190818152602001828054610eab90614ab7565b8015610ef85780601f10610ecd57610100808354040283529160200191610ef8565b820191906000526020600020905b815481529060010190602001808311610edb57829003601f168201915b5050505050905090565b6000610f0f338484612f26565b5060015b92915050565b6005546001600160a01b03163314610f4c5760405162461bcd60e51b8152600401610f4390614af1565b60405180910390fd5b6028805460ff1916911515919091179055565b6000610f6c84848461304a565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610ff15760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610f43565b610ffe8533858403612f26565b506001949350505050565b6005546001600160a01b031633146110335760405162461bcd60e51b8152600401610f4390614af1565b61103f6012600a614c20565b6103e861104b60025490565b611056906001614c2f565b6110609190614c4e565b61106a9190614c4e565b8110156110cb5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610f43565b6110d76012600a614c20565b6110e19082614c2f565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b031633146111475760405162461bcd60e51b8152600401610f4390614af1565b601454610100900460ff161561119f5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610f43565b600a8211156112005760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610f43565b6014805462ffff0019166201010017905543600f819055611222908390614c70565b601055600a80546001600160a01b0319166001600160a01b03831690811790915561124e906001613cf5565b600a54611265906001600160a01b03166001613d58565b6040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a15050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f0f9185906112c9908690614c70565b612f26565b6005546001600160a01b031633146112f85760405162461bcd60e51b8152600401610f4390614af1565b6001600160a01b03811661131e5760405162461bcd60e51b8152600401610f4390614c88565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146113925760405162461bcd60e51b8152600401610f4390614af1565b600b5461139e30611512565b1015611414576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610f43565b600a805460ff60a01b1916600160a01b17905561142f613d86565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461149b5760405162461bcd60e51b8152600401610f4390614af1565b60005b8281101561150c5781601160008686858181106114bd576114bd614cce565b90506020020160208101906114d29190614831565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061150481614ce4565b91505061149e565b50505050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146115575760405162461bcd60e51b8152600401610f4390614af1565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146115cb5760405162461bcd60e51b8152600401610f4390614af1565b6102588310156116395760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610f43565b6103e88211158015611649575060015b6116ae5760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610f43565b6024929092556022556023805460ff1916911515919091179055565b6005546001600160a01b031633146116f45760405162461bcd60e51b8152600401610f4390614af1565b6014805460ff199081169091556016805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461176b5760405162461bcd60e51b8152600401610f4390614af1565b806117de57600a546001600160a01b03908116908316036117de5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610f43565b6001600160a01b03919091166000908152603060205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146118335760405162461bcd60e51b8152600401610f4390614af1565b60188390556019829055601a8190558061184d8385614c70565b6118579190614c70565b6017556064611869612710600f614c2f565b6118739190614c4e565b60175411156118c45760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610f43565b505050565b6005546000906001600160a01b031633146118f65760405162461bcd60e51b8152600401610f4390614af1565b6001600160a01b03831661194c5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610f43565b6001600160a01b0383163014158061196c5750601454610100900460ff16155b6119d55760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610f43565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611a1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a409190614cfd565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611a93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab79190614d16565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b03163314611b2d5760405162461bcd60e51b8152600401610f4390614af1565b601454610100900460ff1615611b995760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610f43565b600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c109190614d33565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c969190614d33565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611ce3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d079190614d33565b600a80546001600160a01b0319166001600160a01b03929092169182179055611d31906001613cf5565b600a54611d48906001600160a01b03166001613d58565b60004711611da45760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610f43565b6000611daf30611512565b11611e0b5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610f43565b600954611e269030906001600160a01b03166112c982611512565b6009546001600160a01b031663f305d7194730611e4281611512565b600e546040516001600160e01b031960e087901b168152611e7893929160009182916001600160a01b0316904290600401614d50565b60606040518083038185885af1158015611e96573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ebb9190614d8b565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f429190614cfd565b6029556014805462ffff0019166201010017905543600f819055611f67908290614c70565b6010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b606060048054610e7f90614ab7565b60606012805480602002602001604051908101604052809291908181526020018280548015610ef857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611fdf575050505050905090565b6005546001600160a01b031633146120305760405162461bcd60e51b8152600401610f4390614af1565b600a546001600160a01b03908116908316036120b45760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610f43565b6120be8282613d58565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561217c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610f43565b6121893385858403612f26565b5060019392505050565b6000610f0f33848461304a565b6005546001600160a01b031633146121ca5760405162461bcd60e51b8152600401610f4390614af1565b606485111580156121dc575060648411155b80156121e85750838511155b61222d5760405162461bcd60e51b8152602060048201526016602482015275109d5e481cd95d1d1a5b99dcc81a5b98dbdc9c9958dd60521b6044820152606401610f43565b6064831115801561223f575060648211155b801561224b5750818311155b6122975760405162461bcd60e51b815260206004820152601760248201527f53656c6c2073657474696e677320696e636f72726563740000000000000000006044820152606401610f43565b6028805460ff191696151596909617909555602a93909355602c91909155602b55602d55602e55565b6005546001600160a01b031633146122ea5760405162461bcd60e51b8152600401610f4390614af1565b60005b8281101561150c5781602f600086868581811061230c5761230c614cce565b90506020020160208101906123219190614831565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905583838281811061235b5761235b614cce565b90506020020160208101906123709190614831565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7836040516123ac911515815260200190565b60405180910390a2806123be81614ce4565b9150506122ed565b6005546001600160a01b031633146123f05760405162461bcd60e51b8152600401610f4390614af1565b6001600160a01b0382166000818152602f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b60006305f5e100670de0b6b3a764000061246a61dead611512565b6002546124779190614db9565b600a5461248c906001600160a01b0316611512565b602954600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125069190614d33565b600a546040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa15801561254f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125739190614cfd565b61258590670de0b6b3a7640000614c2f565b61258f9190614c2f565b6125999190614c4e565b6125a39190614c2f565b6125ad9190614c4e565b6125b79190614c4e565b905090565b6005546001600160a01b031633146125e65760405162461bcd60e51b8152600401610f4390614af1565b601c839055601d829055601e819055806126008385614c70565b61260a9190614c70565b601b55606461261c6127106014614c2f565b6126269190614c4e565b601b5411156118c45760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610f43565b6005546001600160a01b031633146126a15760405162461bcd60e51b8152600401610f4390614af1565b6126ad6012600a614c20565b60646126b860025490565b6126c3906001614c2f565b6126cd9190614c4e565b6126d79190614c4e565b8110156127375760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015267207468616e20312560c01b6064820152608401610f43565b6127436012600a614c20565b61274d9082614c2f565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611112565b6005546001600160a01b031633146127ac5760405162461bcd60e51b8152600401610f4390614af1565b6001600160a01b0381166127d25760405162461bcd60e51b8152600401610f4390614c88565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f804ec39c1aea0b9f2615a34c3fa437b6ddda2c72e6848abf0f23955589a7ad5490600090a250565b6005546001600160a01b031633146128465760405162461bcd60e51b8152600401610f4390614af1565b620186a061285360025490565b61285e906001614c2f565b6128689190614c4e565b8110156128d55760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610f43565b6103e86128e160025490565b6128ec906001614c2f565b6128f69190614c4e565b8111156129625760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610f43565b600b55565b6005546001600160a01b031633146129915760405162461bcd60e51b8152600401610f4390614af1565b61299d6012600a614c20565b6103e86129a960025490565b6129b4906001614c2f565b6129be9190614c4e565b6129c89190614c4e565b811015612a2a5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610f43565b612a366012600a614c20565b612a409082614c2f565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611112565b6005546001600160a01b03163314612a9f5760405162461bcd60e51b8152600401610f4390614af1565b6016805460ff19169055565b60128181548110612abb57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314612aff5760405162461bcd60e51b8152600401610f4390614af1565b6001600160a01b038116612b645760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f43565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314612bea5760405162461bcd60e51b8152600401610f4390614af1565b604051600090339047908381818185875af1925050503d806000811461150c576040519150601f19603f3d011682016040523d82523d6000602084013e61150c565b6005546001600160a01b03163314612c565760405162461bcd60e51b8152600401610f4390614af1565b611388811115612cc65760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20353025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610f43565b602654612cd39042614db9565b6027541115612d145760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610f43565b42602755600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612d61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d859190614cfd565b90506000612d9230611512565b90506000612710612da38585614c2f565b612dad9190614c4e565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015612e07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e2b9190614d16565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec90612e669030908690600190819084904290600401614d50565b60408051808303816000875af1158015612e84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea89190614dd0565b5050600083612eb630611512565b612ec09190614db9565b90508015612ed557612ed53061dead83613f39565b6000612ee18347614db9565b90508015612ef257612ef28161408e565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b038316612f885760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f43565b6001600160a01b038216612fe95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f43565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166130705760405162461bcd60e51b8152600401610f4390614df4565b6001600160a01b0382166130965760405162461bcd60e51b8152600401610f4390614e39565b600081116130e65760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610f43565b601454610100900460ff16613179576001600160a01b0383166000908152602f602052604090205460ff168061313457506001600160a01b0382166000908152602f602052604090205460ff165b6131795760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610f43565b601454610100900460ff1615613279576001600160a01b03831660009081526011602052604090205460ff161580156131cb57506001600160a01b03821660009081526011602052604090205460ff16155b806131e357506005546001600160a01b038381169116145b806131f857506001600160a01b03821661dead145b6132795760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610f43565b60145460ff161561366b576005546001600160a01b038481169116148015906132b057506005546001600160a01b03838116911614155b80156132c457506001600160a01b03821615155b80156132db57506001600160a01b03821661dead14155b801561330057506001600160a01b0383166000908152602f602052604090205460ff16155b801561332557506001600160a01b0382166000908152602f602052604090205460ff16155b1561366b5760165460ff161561343e576009546001600160a01b038381169116148015906133615750600a546001600160a01b03838116911614155b1561343e57613371600243614db9565b326000908152601560205260409020541080156133af5750613394600243614db9565b6001600160a01b038316600090815260156020526040902054105b6134195760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610f43565b3260009081526015602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526031602052604090205460ff16801561347f57506001600160a01b03821660009081526030602052604090205460ff16155b15613546576006548111156134e75760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610f43565b6008546134f383611512565b6134fd9083614c70565b11156135415760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610f43565b61366b565b6001600160a01b03821660009081526031602052604090205460ff16801561358757506001600160a01b03831660009081526030602052604090205460ff16155b156135f1576007548111156135415760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610f43565b6001600160a01b03821660009081526030602052604090205460ff1661366b5760085461361d83611512565b6136279083614c70565b111561366b5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610f43565b600061367630611512565b600b5490915081108015908190613695575060145462010000900460ff165b80156136ab5750600a54600160a01b900460ff16155b80156136d057506001600160a01b03851660009081526031602052604090205460ff16155b80156136f557506001600160a01b0385166000908152602f602052604090205460ff16155b801561371a57506001600160a01b0384166000908152602f602052604090205460ff16155b1561374857600a805460ff60a01b1916600160a01b17905561373a613d86565b600a805460ff60a01b191690555b600a54600160a01b900460ff1615801561377a57506001600160a01b03841660009081526031602052604090205460ff165b8015613788575060235460ff165b80156137a3575060245460255461379f9190614c70565b4210155b80156137c857506001600160a01b0385166000908152602f602052604090205460ff16155b156137d5576137d56141d8565b6001600160a01b0385166000908152602f602052604090205460019060ff168061381757506001600160a01b0385166000908152602f602052604090205460ff165b15613820575060005b60285460009060ff16801561383c5750601454610100900460ff165b80156138525750600a54600160a01b900460ff16155b156138e6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156138b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138db9190614cfd565b6029556138e66143f2565b8115613ce1576010544310801561391557506001600160a01b03871660009081526031602052604090205460ff165b801561393a57506001600160a01b03861660009081526031602052604090205460ff16155b801561395f57506001600160a01b0386166000908152602f602052604090205460ff16155b801561396d57506000601754115b15613b285760105443106139945760016006600082825461398e9190614db9565b90915550505b6001600160a01b03861660009081526011602052604090205460ff16613a74576001600160a01b0386166000908152601160205260408120805460ff1916600190811790915560138054919290916139ed908490614c70565b9091555050601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b61271060175486613a859190614c2f565b613a8f9190614c4e565b905060175460195482613aa29190614c2f565b613aac9190614c4e565b60206000828254613abd9190614c70565b9091555050601754601854613ad29083614c2f565b613adc9190614c4e565b601f6000828254613aed9190614c70565b9091555050601754601a54613b029083614c2f565b613b0c9190614c4e565b60216000828254613b1d9190614c70565b90915550613cc39050565b6001600160a01b03861660009081526031602052604090205460ff168015613b5257506000601b54115b15613be557612710601b5486613b689190614c2f565b613b729190614c4e565b9050601b54601d5482613b859190614c2f565b613b8f9190614c4e565b60206000828254613ba09190614c70565b9091555050601b54601c54613bb59083614c2f565b613bbf9190614c4e565b601f6000828254613bd09190614c70565b9091555050601b54601e54613b029083614c2f565b6001600160a01b03871660009081526031602052604090205460ff168015613c0f57506000601754115b15613cc35761271060175486613c259190614c2f565b613c2f9190614c4e565b905060175460195482613c429190614c2f565b613c4c9190614c4e565b60206000828254613c5d9190614c70565b9091555050601754601854613c729083614c2f565b613c7c9190614c4e565b601f6000828254613c8d9190614c70565b9091555050601754601a54613ca29083614c2f565b613cac9190614c4e565b60216000828254613cbd9190614c70565b90915550505b8015613cd457613cd4873083613f39565b613cde8186614db9565b94505b613cec878787613f39565b50505050505050565b6001600160a01b038216600081815260306020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152603160205260409020805460ff19168215151790556120be8282613cf5565b6000613d9130611512565b90506000602154601f54602054613da89190614c70565b613db29190614c70565b9050811580613dbf575080155b15613dc8575050565b600b54613dd6906014614c2f565b821115613dee57600b54613deb906014614c2f565b91505b60008060028360205486613e029190614c2f565b613e0c9190614c4e565b613e169190614c4e565b9050613e2a613e258286614db9565b61456d565b60205447908190600090613e4090600290614c4e565b613e4a9087614db9565b601f54613e579085614c2f565b613e619190614c4e565b905060006002602054613e749190614c4e565b613e7e9088614db9565b602154613e8b9086614c2f565b613e959190614c4e565b9050613ea18183614c70565b613eab9084614db9565b60006020819055601f81905560215592508415801590613ecb5750600083115b15613eda57613eda85846146c7565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114613f27576040519150601f19603f3d011682016040523d82523d6000602084013e613f2c565b606091505b5050505050505050505050565b6001600160a01b038316613f5f5760405162461bcd60e51b8152600401610f4390614df4565b6001600160a01b038216613f855760405162461bcd60e51b8152600401610f4390614e39565b6001600160a01b03831660009081526020819052604090205481811015613ffd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610f43565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290614034908490614c70565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161408091815260200190565b60405180910390a350505050565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156140f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061411c9190614d33565b8160008151811061412f5761412f614cce565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061416357614163614cce565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959084906141ab90600090869061dead904290600401614e7c565b6000604051808303818588803b1580156141c457600080fd5b505af1158015613cec573d6000803e3d6000fd5b426025819055602755600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561422a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424e9190614cfd565b9050600061425b30611512565b90506000612710602254846142709190614c2f565b61427a9190614c4e565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af11580156142d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f89190614d16565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec906143339030908690600190819084904290600401614d50565b60408051808303816000875af1158015614351573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143759190614dd0565b505060008361438330611512565b61438d9190614db9565b905080156143a2576143a23061dead83613f39565b60006143ae8347614db9565b905080156143bf576143bf8161408e565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b60006143fc61244f565b90506000602a54670de0b6b3a7640000602c54602e548561441d9190614c4e565b6144279190614c2f565b6144319190614c4e565b61443b9190614c70565b90506000602b54670de0b6b3a7640000602d54602e548661445c9190614c4e565b6144669190614c2f565b6144709190614c4e565b61447a9190614c70565b9050602c5482111561448c57602c5491505b602d5481111561449b5750602d545b6064826017546144ab9190614c2f565b6144b59190614c4e565b60198190556017546064916144c991614db9565b6144d4906021614c2f565b6144de9190614c4e565b601881905560195460175490916144f491614db9565b6144fe9190614db9565b601a55601b54606490614512908390614c2f565b61451c9190614c4e565b601d819055601b5460649161453091614db9565b61453b906032614c2f565b6145459190614c4e565b601c819055601d54601b54909161455b91614db9565b6145659190614db9565b601e55505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106145a2576145a2614cce565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156145fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061461f9190614d33565b8160018151811061463257614632614cce565b6001600160a01b0392831660209182029290920101526009546146589130911684612f26565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790614691908590600090869030904290600401614eb1565b600060405180830381600087803b1580156146ab57600080fd5b505af11580156146bf573d6000803e3d6000fd5b505050505050565b6009546146df9030906001600160a01b031684612f26565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d71990839061471c9030908790600090819084904290600401614d50565b60606040518083038185885af115801561473a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061475f9190614d8b565b5050505050565b600060208083528351808285015260005b8181101561479357858101830151858201604001528201614777565b818111156147a5576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146147d057600080fd5b50565b600080604083850312156147e657600080fd5b82356147f1816147bb565b946020939093013593505050565b80151581146147d057600080fd5b60006020828403121561481f57600080fd5b813561482a816147ff565b9392505050565b60006020828403121561484357600080fd5b813561482a816147bb565b60008060006060848603121561486357600080fd5b833561486e816147bb565b9250602084013561487e816147bb565b929592945050506040919091013590565b6000602082840312156148a157600080fd5b5035919050565b600080604083850312156148bb57600080fd5b8235915060208301356148cd816147bb565b809150509250929050565b6000806000604084860312156148ed57600080fd5b833567ffffffffffffffff8082111561490557600080fd5b818601915086601f83011261491957600080fd5b81358181111561492857600080fd5b8760208260051b850101111561493d57600080fd5b60209283019550935050840135614953816147ff565b809150509250925092565b60008060006060848603121561497357600080fd5b83359250602084013591506040840135614953816147ff565b6000806040838503121561499f57600080fd5b82356149aa816147bb565b915060208301356148cd816147ff565b6000806000606084860312156149cf57600080fd5b505081359360208301359350604090920135919050565b600080604083850312156149f957600080fd5b8235614a04816147bb565b915060208301356148cd816147bb565b600081518084526020808501945080840160005b83811015614a4d5781516001600160a01b031687529582019590820190600101614a28565b509495945050505050565b60208152600061482a6020830184614a14565b60008060008060008060c08789031215614a8457600080fd5b8635614a8f816147ff565b9860208801359850604088013597606081013597506080810135965060a00135945092505050565b600181811c90821680614acb57607f821691505b602082108103614aeb57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115614b77578160001904821115614b5d57614b5d614b26565b80851615614b6a57918102915b93841c9390800290614b41565b509250929050565b600082614b8e57506001610f13565b81614b9b57506000610f13565b8160018114614bb15760028114614bbb57614bd7565b6001915050610f13565b60ff841115614bcc57614bcc614b26565b50506001821b610f13565b5060208310610133831016604e8410600b8410161715614bfa575081810a610f13565b614c048383614b3c565b8060001904821115614c1857614c18614b26565b029392505050565b600061482a60ff841683614b7f565b6000816000190483118215151615614c4957614c49614b26565b500290565b600082614c6b57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115614c8357614c83614b26565b500190565b60208082526026908201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60408201526507420626520360d41b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060018201614cf657614cf6614b26565b5060010190565b600060208284031215614d0f57600080fd5b5051919050565b600060208284031215614d2857600080fd5b815161482a816147ff565b600060208284031215614d4557600080fd5b815161482a816147bb565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215614da057600080fd5b8351925060208401519150604084015190509250925092565b600082821015614dcb57614dcb614b26565b500390565b60008060408385031215614de357600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b848152608060208201526000614e956080830186614a14565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a060408201526000614ed060a0830186614a14565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220ef6a9fda1b02f7b0cb525948d69998919a990f7ff3a597a667a7cdc93bc2029b64736f6c634300080f00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106104b95760003560e01c80638da5cb5b1161026b578063c18bc1951161014f578063ea4cfe12116100c1578063f5648a4f11610085578063f5648a4f14610de3578063f5f4a97d14610df8578063f637434214610e0e578063f8b45b0514610e24578063fb002c9714610e3a578063fe72b27a14610e5057600080fd5b8063ea4cfe1214610d57578063eb472fc414610d77578063ee40166e14610d97578063f11a24d314610dad578063f2fde38b14610dc357600080fd5b8063d85ba06311610113578063d85ba06314610c9a578063dc3f0d0f14610cb0578063dd62ed3e14610cd0578063e1ade1fe14610d16578063e2f4560514610d2c578063e884f26014610d4257600080fd5b8063c18bc19514610c0a578063c876d0b914610c2a578063d0d41fe114610c44578063d0e7d33f14610c64578063d257b34f14610c7a57600080fd5b8063a4c82a00116101e8578063b9e9d1aa116101ac578063b9e9d1aa14610b56578063bbc0c74214610b76578063bd5fb92014610b95578063c024666814610bb5578063c077ab4b14610bd5578063c17b5b8c14610bea57600080fd5b8063a4c82a0014610aba578063a62068ce14610ad0578063a9059cbb14610ae6578063b3e4c17914610b06578063b62496f514610b2657600080fd5b80639e93ad8e1161022f5780639e93ad8e14610a425780639ec22c0e14610a585780639fccce3214610a6e578063a0d82dc514610a84578063a457c2d714610a9a57600080fd5b80638da5cb5b146109b757806395d89b41146109d55780639a5bd2dd146109ea5780639a7a23d614610a0c5780639c3b4fdc14610a2c57600080fd5b8063452ed4f11161039d5780636ddd17131161030f5780637571336a116102d35780637571336a146108f15780638095d564146109115780638366e79a1461093157806385b12c7c1461095157806385ecfd281461097157806388e765ff146109a157600080fd5b80636ddd17131461086757806370a0823114610887578063715018a6146108a7578063730c1888146108bc578063751039fc146108dc57600080fd5b8063552fd14811610361578063552fd148146107d857806358a6d531146107f85780635a139dd41461080f57806366d602ae146108255780636a486a8e1461083b5780636b0a894c1461085157600080fd5b8063452ed4f114610753578063499b8394146107735780634a62bb65146107935780634f77f6c0146107ad57806351f205e4146107c357600080fd5b8063199ffc72116104365780632e82f1a0116103fa5780632e82f1a0146106a75780632f1ffebf146106c1578063313ce567146106e157806339509351146106fd5780633ad10ef61461071d57806342088f1e1461073d57600080fd5b8063199ffc72146106255780631a8145bb1461063b57806323b872dd146106515780632be32b61146106715780632c3e486c1461069157600080fd5b80630d3cbb221161047d5780630d3cbb221461058e57806310d5de53146105b05780631708da75146105e057806318160ddd146105fa578063184c16c51461060f57600080fd5b8063046f9c3f146104c557806306fdde03146104ee5780630758d92414610510578063095ea7b3146105485780630d3141e01461057857600080fd5b366104c057005b600080fd5b3480156104d157600080fd5b506104db602a5481565b6040519081526020015b60405180910390f35b3480156104fa57600080fd5b50610503610e70565b6040516104e59190614766565b34801561051c57600080fd5b50600954610530906001600160a01b031681565b6040516001600160a01b0390911681526020016104e5565b34801561055457600080fd5b506105686105633660046147d3565b610f02565b60405190151581526020016104e5565b34801561058457600080fd5b506104db602e5481565b34801561059a57600080fd5b506105ae6105a936600461480d565b610f19565b005b3480156105bc57600080fd5b506105686105cb366004614831565b60306020526000908152604090205460ff1681565b3480156105ec57600080fd5b506028546105689060ff1681565b34801561060657600080fd5b506002546104db565b34801561061b57600080fd5b506104db60265481565b34801561063157600080fd5b506104db60225481565b34801561064757600080fd5b506104db60205481565b34801561065d57600080fd5b5061056861066c36600461484e565b610f5f565b34801561067d57600080fd5b506105ae61068c36600461488f565b611009565b34801561069d57600080fd5b506104db60245481565b3480156106b357600080fd5b506023546105689060ff1681565b3480156106cd57600080fd5b506105ae6106dc3660046148a8565b61111d565b3480156106ed57600080fd5b50604051601281526020016104e5565b34801561070957600080fd5b506105686107183660046147d3565b611292565b34801561072957600080fd5b50600d54610530906001600160a01b031681565b34801561074957600080fd5b506104db60295481565b34801561075f57600080fd5b50600a54610530906001600160a01b031681565b34801561077f57600080fd5b506105ae61078e366004614831565b6112ce565b34801561079f57600080fd5b506014546105689060ff1681565b3480156107b957600080fd5b506104db601c5481565b3480156107cf57600080fd5b506105ae611368565b3480156107e457600080fd5b506105ae6107f33660046148d8565b611471565b34801561080457600080fd5b506010544310610568565b34801561081b57600080fd5b506104db60185481565b34801561083157600080fd5b506104db60075481565b34801561084757600080fd5b506104db601b5481565b34801561085d57600080fd5b506104db60135481565b34801561087357600080fd5b506014546105689062010000900460ff1681565b34801561089357600080fd5b506104db6108a2366004614831565b611512565b3480156108b357600080fd5b506105ae61152d565b3480156108c857600080fd5b506105ae6108d736600461495e565b6115a1565b3480156108e857600080fd5b506105ae6116ca565b3480156108fd57600080fd5b506105ae61090c36600461498c565b611741565b34801561091d57600080fd5b506105ae61092c3660046149ba565b611809565b34801561093d57600080fd5b5061056861094c3660046149e6565b6118c9565b34801561095d57600080fd5b506105ae61096c36600461488f565b611b03565b34801561097d57600080fd5b5061056861098c366004614831565b60116020526000908152604090205460ff1681565b3480156109ad57600080fd5b506104db60065481565b3480156109c357600080fd5b506005546001600160a01b0316610530565b3480156109e157600080fd5b50610503611f96565b3480156109f657600080fd5b506109ff611fa5565b6040516104e59190614a58565b348015610a1857600080fd5b506105ae610a2736600461498c565b612006565b348015610a3857600080fd5b506104db601a5481565b348015610a4e57600080fd5b506104db61271081565b348015610a6457600080fd5b506104db60275481565b348015610a7a57600080fd5b506104db60215481565b348015610a9057600080fd5b506104db601e5481565b348015610aa657600080fd5b50610568610ab53660046147d3565b6120fa565b348015610ac657600080fd5b506104db60255481565b348015610adc57600080fd5b506104db60105481565b348015610af257600080fd5b50610568610b013660046147d3565b612193565b348015610b1257600080fd5b506105ae610b21366004614a6b565b6121a0565b348015610b3257600080fd5b50610568610b41366004614831565b60316020526000908152604090205460ff1681565b348015610b6257600080fd5b50600e54610530906001600160a01b031681565b348015610b8257600080fd5b5060145461056890610100900460ff1681565b348015610ba157600080fd5b506105ae610bb03660046148d8565b6122c0565b348015610bc157600080fd5b506105ae610bd036600461498c565b6123c6565b348015610be157600080fd5b506104db61244f565b348015610bf657600080fd5b506105ae610c053660046149ba565b6125bc565b348015610c1657600080fd5b506105ae610c2536600461488f565b612677565b348015610c3657600080fd5b506016546105689060ff1681565b348015610c5057600080fd5b506105ae610c5f366004614831565b612782565b348015610c7057600080fd5b506104db602d5481565b348015610c8657600080fd5b506105ae610c9536600461488f565b61281c565b348015610ca657600080fd5b506104db60175481565b348015610cbc57600080fd5b506105ae610ccb36600461488f565b612967565b348015610cdc57600080fd5b506104db610ceb3660046149e6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d2257600080fd5b506104db602b5481565b348015610d3857600080fd5b506104db600b5481565b348015610d4e57600080fd5b506105ae612a75565b348015610d6357600080fd5b50600c54610530906001600160a01b031681565b348015610d8357600080fd5b50610530610d9236600461488f565b612aab565b348015610da357600080fd5b506104db600f5481565b348015610db957600080fd5b506104db60195481565b348015610dcf57600080fd5b506105ae610dde366004614831565b612ad5565b348015610def57600080fd5b506105ae612bc0565b348015610e0457600080fd5b506104db602c5481565b348015610e1a57600080fd5b506104db601d5481565b348015610e3057600080fd5b506104db60085481565b348015610e4657600080fd5b506104db601f5481565b348015610e5c57600080fd5b506105ae610e6b36600461488f565b612c2c565b606060038054610e7f90614ab7565b80601f0160208091040260200160405190810160405280929190818152602001828054610eab90614ab7565b8015610ef85780601f10610ecd57610100808354040283529160200191610ef8565b820191906000526020600020905b815481529060010190602001808311610edb57829003601f168201915b5050505050905090565b6000610f0f338484612f26565b5060015b92915050565b6005546001600160a01b03163314610f4c5760405162461bcd60e51b8152600401610f4390614af1565b60405180910390fd5b6028805460ff1916911515919091179055565b6000610f6c84848461304a565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610ff15760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610f43565b610ffe8533858403612f26565b506001949350505050565b6005546001600160a01b031633146110335760405162461bcd60e51b8152600401610f4390614af1565b61103f6012600a614c20565b6103e861104b60025490565b611056906001614c2f565b6110609190614c4e565b61106a9190614c4e565b8110156110cb5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610f43565b6110d76012600a614c20565b6110e19082614c2f565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b031633146111475760405162461bcd60e51b8152600401610f4390614af1565b601454610100900460ff161561119f5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610f43565b600a8211156112005760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610f43565b6014805462ffff0019166201010017905543600f819055611222908390614c70565b601055600a80546001600160a01b0319166001600160a01b03831690811790915561124e906001613cf5565b600a54611265906001600160a01b03166001613d58565b6040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a15050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f0f9185906112c9908690614c70565b612f26565b6005546001600160a01b031633146112f85760405162461bcd60e51b8152600401610f4390614af1565b6001600160a01b03811661131e5760405162461bcd60e51b8152600401610f4390614c88565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146113925760405162461bcd60e51b8152600401610f4390614af1565b600b5461139e30611512565b1015611414576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610f43565b600a805460ff60a01b1916600160a01b17905561142f613d86565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461149b5760405162461bcd60e51b8152600401610f4390614af1565b60005b8281101561150c5781601160008686858181106114bd576114bd614cce565b90506020020160208101906114d29190614831565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061150481614ce4565b91505061149e565b50505050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146115575760405162461bcd60e51b8152600401610f4390614af1565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146115cb5760405162461bcd60e51b8152600401610f4390614af1565b6102588310156116395760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610f43565b6103e88211158015611649575060015b6116ae5760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610f43565b6024929092556022556023805460ff1916911515919091179055565b6005546001600160a01b031633146116f45760405162461bcd60e51b8152600401610f4390614af1565b6014805460ff199081169091556016805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461176b5760405162461bcd60e51b8152600401610f4390614af1565b806117de57600a546001600160a01b03908116908316036117de5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610f43565b6001600160a01b03919091166000908152603060205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146118335760405162461bcd60e51b8152600401610f4390614af1565b60188390556019829055601a8190558061184d8385614c70565b6118579190614c70565b6017556064611869612710600f614c2f565b6118739190614c4e565b60175411156118c45760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610f43565b505050565b6005546000906001600160a01b031633146118f65760405162461bcd60e51b8152600401610f4390614af1565b6001600160a01b03831661194c5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610f43565b6001600160a01b0383163014158061196c5750601454610100900460ff16155b6119d55760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610f43565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611a1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a409190614cfd565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611a93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab79190614d16565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b03163314611b2d5760405162461bcd60e51b8152600401610f4390614af1565b601454610100900460ff1615611b995760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610f43565b600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c109190614d33565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c969190614d33565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611ce3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d079190614d33565b600a80546001600160a01b0319166001600160a01b03929092169182179055611d31906001613cf5565b600a54611d48906001600160a01b03166001613d58565b60004711611da45760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610f43565b6000611daf30611512565b11611e0b5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610f43565b600954611e269030906001600160a01b03166112c982611512565b6009546001600160a01b031663f305d7194730611e4281611512565b600e546040516001600160e01b031960e087901b168152611e7893929160009182916001600160a01b0316904290600401614d50565b60606040518083038185885af1158015611e96573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ebb9190614d8b565b5050507f0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b84196001600160a01b03166350d25bcd6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f429190614cfd565b6029556014805462ffff0019166201010017905543600f819055611f67908290614c70565b6010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b606060048054610e7f90614ab7565b60606012805480602002602001604051908101604052809291908181526020018280548015610ef857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611fdf575050505050905090565b6005546001600160a01b031633146120305760405162461bcd60e51b8152600401610f4390614af1565b600a546001600160a01b03908116908316036120b45760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610f43565b6120be8282613d58565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561217c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610f43565b6121893385858403612f26565b5060019392505050565b6000610f0f33848461304a565b6005546001600160a01b031633146121ca5760405162461bcd60e51b8152600401610f4390614af1565b606485111580156121dc575060648411155b80156121e85750838511155b61222d5760405162461bcd60e51b8152602060048201526016602482015275109d5e481cd95d1d1a5b99dcc81a5b98dbdc9c9958dd60521b6044820152606401610f43565b6064831115801561223f575060648211155b801561224b5750818311155b6122975760405162461bcd60e51b815260206004820152601760248201527f53656c6c2073657474696e677320696e636f72726563740000000000000000006044820152606401610f43565b6028805460ff191696151596909617909555602a93909355602c91909155602b55602d55602e55565b6005546001600160a01b031633146122ea5760405162461bcd60e51b8152600401610f4390614af1565b60005b8281101561150c5781602f600086868581811061230c5761230c614cce565b90506020020160208101906123219190614831565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905583838281811061235b5761235b614cce565b90506020020160208101906123709190614831565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7836040516123ac911515815260200190565b60405180910390a2806123be81614ce4565b9150506122ed565b6005546001600160a01b031633146123f05760405162461bcd60e51b8152600401610f4390614af1565b6001600160a01b0382166000818152602f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b60006305f5e100670de0b6b3a764000061246a61dead611512565b6002546124779190614db9565b600a5461248c906001600160a01b0316611512565b602954600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125069190614d33565b600a546040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa15801561254f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125739190614cfd565b61258590670de0b6b3a7640000614c2f565b61258f9190614c2f565b6125999190614c4e565b6125a39190614c2f565b6125ad9190614c4e565b6125b79190614c4e565b905090565b6005546001600160a01b031633146125e65760405162461bcd60e51b8152600401610f4390614af1565b601c839055601d829055601e819055806126008385614c70565b61260a9190614c70565b601b55606461261c6127106014614c2f565b6126269190614c4e565b601b5411156118c45760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610f43565b6005546001600160a01b031633146126a15760405162461bcd60e51b8152600401610f4390614af1565b6126ad6012600a614c20565b60646126b860025490565b6126c3906001614c2f565b6126cd9190614c4e565b6126d79190614c4e565b8110156127375760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015267207468616e20312560c01b6064820152608401610f43565b6127436012600a614c20565b61274d9082614c2f565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611112565b6005546001600160a01b031633146127ac5760405162461bcd60e51b8152600401610f4390614af1565b6001600160a01b0381166127d25760405162461bcd60e51b8152600401610f4390614c88565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f804ec39c1aea0b9f2615a34c3fa437b6ddda2c72e6848abf0f23955589a7ad5490600090a250565b6005546001600160a01b031633146128465760405162461bcd60e51b8152600401610f4390614af1565b620186a061285360025490565b61285e906001614c2f565b6128689190614c4e565b8110156128d55760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610f43565b6103e86128e160025490565b6128ec906001614c2f565b6128f69190614c4e565b8111156129625760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610f43565b600b55565b6005546001600160a01b031633146129915760405162461bcd60e51b8152600401610f4390614af1565b61299d6012600a614c20565b6103e86129a960025490565b6129b4906001614c2f565b6129be9190614c4e565b6129c89190614c4e565b811015612a2a5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610f43565b612a366012600a614c20565b612a409082614c2f565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611112565b6005546001600160a01b03163314612a9f5760405162461bcd60e51b8152600401610f4390614af1565b6016805460ff19169055565b60128181548110612abb57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314612aff5760405162461bcd60e51b8152600401610f4390614af1565b6001600160a01b038116612b645760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f43565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314612bea5760405162461bcd60e51b8152600401610f4390614af1565b604051600090339047908381818185875af1925050503d806000811461150c576040519150601f19603f3d011682016040523d82523d6000602084013e61150c565b6005546001600160a01b03163314612c565760405162461bcd60e51b8152600401610f4390614af1565b611388811115612cc65760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20353025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610f43565b602654612cd39042614db9565b6027541115612d145760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610f43565b42602755600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612d61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d859190614cfd565b90506000612d9230611512565b90506000612710612da38585614c2f565b612dad9190614c4e565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015612e07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e2b9190614d16565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec90612e669030908690600190819084904290600401614d50565b60408051808303816000875af1158015612e84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea89190614dd0565b5050600083612eb630611512565b612ec09190614db9565b90508015612ed557612ed53061dead83613f39565b6000612ee18347614db9565b90508015612ef257612ef28161408e565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b038316612f885760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f43565b6001600160a01b038216612fe95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f43565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166130705760405162461bcd60e51b8152600401610f4390614df4565b6001600160a01b0382166130965760405162461bcd60e51b8152600401610f4390614e39565b600081116130e65760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610f43565b601454610100900460ff16613179576001600160a01b0383166000908152602f602052604090205460ff168061313457506001600160a01b0382166000908152602f602052604090205460ff165b6131795760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610f43565b601454610100900460ff1615613279576001600160a01b03831660009081526011602052604090205460ff161580156131cb57506001600160a01b03821660009081526011602052604090205460ff16155b806131e357506005546001600160a01b038381169116145b806131f857506001600160a01b03821661dead145b6132795760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610f43565b60145460ff161561366b576005546001600160a01b038481169116148015906132b057506005546001600160a01b03838116911614155b80156132c457506001600160a01b03821615155b80156132db57506001600160a01b03821661dead14155b801561330057506001600160a01b0383166000908152602f602052604090205460ff16155b801561332557506001600160a01b0382166000908152602f602052604090205460ff16155b1561366b5760165460ff161561343e576009546001600160a01b038381169116148015906133615750600a546001600160a01b03838116911614155b1561343e57613371600243614db9565b326000908152601560205260409020541080156133af5750613394600243614db9565b6001600160a01b038316600090815260156020526040902054105b6134195760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610f43565b3260009081526015602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526031602052604090205460ff16801561347f57506001600160a01b03821660009081526030602052604090205460ff16155b15613546576006548111156134e75760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610f43565b6008546134f383611512565b6134fd9083614c70565b11156135415760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610f43565b61366b565b6001600160a01b03821660009081526031602052604090205460ff16801561358757506001600160a01b03831660009081526030602052604090205460ff16155b156135f1576007548111156135415760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610f43565b6001600160a01b03821660009081526030602052604090205460ff1661366b5760085461361d83611512565b6136279083614c70565b111561366b5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610f43565b600061367630611512565b600b5490915081108015908190613695575060145462010000900460ff165b80156136ab5750600a54600160a01b900460ff16155b80156136d057506001600160a01b03851660009081526031602052604090205460ff16155b80156136f557506001600160a01b0385166000908152602f602052604090205460ff16155b801561371a57506001600160a01b0384166000908152602f602052604090205460ff16155b1561374857600a805460ff60a01b1916600160a01b17905561373a613d86565b600a805460ff60a01b191690555b600a54600160a01b900460ff1615801561377a57506001600160a01b03841660009081526031602052604090205460ff165b8015613788575060235460ff165b80156137a3575060245460255461379f9190614c70565b4210155b80156137c857506001600160a01b0385166000908152602f602052604090205460ff16155b156137d5576137d56141d8565b6001600160a01b0385166000908152602f602052604090205460019060ff168061381757506001600160a01b0385166000908152602f602052604090205460ff165b15613820575060005b60285460009060ff16801561383c5750601454610100900460ff165b80156138525750600a54600160a01b900460ff16155b156138e6577f0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b84196001600160a01b03166350d25bcd6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156138b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138db9190614cfd565b6029556138e66143f2565b8115613ce1576010544310801561391557506001600160a01b03871660009081526031602052604090205460ff165b801561393a57506001600160a01b03861660009081526031602052604090205460ff16155b801561395f57506001600160a01b0386166000908152602f602052604090205460ff16155b801561396d57506000601754115b15613b285760105443106139945760016006600082825461398e9190614db9565b90915550505b6001600160a01b03861660009081526011602052604090205460ff16613a74576001600160a01b0386166000908152601160205260408120805460ff1916600190811790915560138054919290916139ed908490614c70565b9091555050601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b61271060175486613a859190614c2f565b613a8f9190614c4e565b905060175460195482613aa29190614c2f565b613aac9190614c4e565b60206000828254613abd9190614c70565b9091555050601754601854613ad29083614c2f565b613adc9190614c4e565b601f6000828254613aed9190614c70565b9091555050601754601a54613b029083614c2f565b613b0c9190614c4e565b60216000828254613b1d9190614c70565b90915550613cc39050565b6001600160a01b03861660009081526031602052604090205460ff168015613b5257506000601b54115b15613be557612710601b5486613b689190614c2f565b613b729190614c4e565b9050601b54601d5482613b859190614c2f565b613b8f9190614c4e565b60206000828254613ba09190614c70565b9091555050601b54601c54613bb59083614c2f565b613bbf9190614c4e565b601f6000828254613bd09190614c70565b9091555050601b54601e54613b029083614c2f565b6001600160a01b03871660009081526031602052604090205460ff168015613c0f57506000601754115b15613cc35761271060175486613c259190614c2f565b613c2f9190614c4e565b905060175460195482613c429190614c2f565b613c4c9190614c4e565b60206000828254613c5d9190614c70565b9091555050601754601854613c729083614c2f565b613c7c9190614c4e565b601f6000828254613c8d9190614c70565b9091555050601754601a54613ca29083614c2f565b613cac9190614c4e565b60216000828254613cbd9190614c70565b90915550505b8015613cd457613cd4873083613f39565b613cde8186614db9565b94505b613cec878787613f39565b50505050505050565b6001600160a01b038216600081815260306020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152603160205260409020805460ff19168215151790556120be8282613cf5565b6000613d9130611512565b90506000602154601f54602054613da89190614c70565b613db29190614c70565b9050811580613dbf575080155b15613dc8575050565b600b54613dd6906014614c2f565b821115613dee57600b54613deb906014614c2f565b91505b60008060028360205486613e029190614c2f565b613e0c9190614c4e565b613e169190614c4e565b9050613e2a613e258286614db9565b61456d565b60205447908190600090613e4090600290614c4e565b613e4a9087614db9565b601f54613e579085614c2f565b613e619190614c4e565b905060006002602054613e749190614c4e565b613e7e9088614db9565b602154613e8b9086614c2f565b613e959190614c4e565b9050613ea18183614c70565b613eab9084614db9565b60006020819055601f81905560215592508415801590613ecb5750600083115b15613eda57613eda85846146c7565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114613f27576040519150601f19603f3d011682016040523d82523d6000602084013e613f2c565b606091505b5050505050505050505050565b6001600160a01b038316613f5f5760405162461bcd60e51b8152600401610f4390614df4565b6001600160a01b038216613f855760405162461bcd60e51b8152600401610f4390614e39565b6001600160a01b03831660009081526020819052604090205481811015613ffd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610f43565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290614034908490614c70565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161408091815260200190565b60405180910390a350505050565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156140f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061411c9190614d33565b8160008151811061412f5761412f614cce565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061416357614163614cce565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959084906141ab90600090869061dead904290600401614e7c565b6000604051808303818588803b1580156141c457600080fd5b505af1158015613cec573d6000803e3d6000fd5b426025819055602755600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561422a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424e9190614cfd565b9050600061425b30611512565b90506000612710602254846142709190614c2f565b61427a9190614c4e565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af11580156142d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f89190614d16565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec906143339030908690600190819084904290600401614d50565b60408051808303816000875af1158015614351573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143759190614dd0565b505060008361438330611512565b61438d9190614db9565b905080156143a2576143a23061dead83613f39565b60006143ae8347614db9565b905080156143bf576143bf8161408e565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b60006143fc61244f565b90506000602a54670de0b6b3a7640000602c54602e548561441d9190614c4e565b6144279190614c2f565b6144319190614c4e565b61443b9190614c70565b90506000602b54670de0b6b3a7640000602d54602e548661445c9190614c4e565b6144669190614c2f565b6144709190614c4e565b61447a9190614c70565b9050602c5482111561448c57602c5491505b602d5481111561449b5750602d545b6064826017546144ab9190614c2f565b6144b59190614c4e565b60198190556017546064916144c991614db9565b6144d4906021614c2f565b6144de9190614c4e565b601881905560195460175490916144f491614db9565b6144fe9190614db9565b601a55601b54606490614512908390614c2f565b61451c9190614c4e565b601d819055601b5460649161453091614db9565b61453b906032614c2f565b6145459190614c4e565b601c819055601d54601b54909161455b91614db9565b6145659190614db9565b601e55505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106145a2576145a2614cce565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156145fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061461f9190614d33565b8160018151811061463257614632614cce565b6001600160a01b0392831660209182029290920101526009546146589130911684612f26565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790614691908590600090869030904290600401614eb1565b600060405180830381600087803b1580156146ab57600080fd5b505af11580156146bf573d6000803e3d6000fd5b505050505050565b6009546146df9030906001600160a01b031684612f26565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d71990839061471c9030908790600090819084904290600401614d50565b60606040518083038185885af115801561473a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061475f9190614d8b565b5050505050565b600060208083528351808285015260005b8181101561479357858101830151858201604001528201614777565b818111156147a5576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146147d057600080fd5b50565b600080604083850312156147e657600080fd5b82356147f1816147bb565b946020939093013593505050565b80151581146147d057600080fd5b60006020828403121561481f57600080fd5b813561482a816147ff565b9392505050565b60006020828403121561484357600080fd5b813561482a816147bb565b60008060006060848603121561486357600080fd5b833561486e816147bb565b9250602084013561487e816147bb565b929592945050506040919091013590565b6000602082840312156148a157600080fd5b5035919050565b600080604083850312156148bb57600080fd5b8235915060208301356148cd816147bb565b809150509250929050565b6000806000604084860312156148ed57600080fd5b833567ffffffffffffffff8082111561490557600080fd5b818601915086601f83011261491957600080fd5b81358181111561492857600080fd5b8760208260051b850101111561493d57600080fd5b60209283019550935050840135614953816147ff565b809150509250925092565b60008060006060848603121561497357600080fd5b83359250602084013591506040840135614953816147ff565b6000806040838503121561499f57600080fd5b82356149aa816147bb565b915060208301356148cd816147ff565b6000806000606084860312156149cf57600080fd5b505081359360208301359350604090920135919050565b600080604083850312156149f957600080fd5b8235614a04816147bb565b915060208301356148cd816147bb565b600081518084526020808501945080840160005b83811015614a4d5781516001600160a01b031687529582019590820190600101614a28565b509495945050505050565b60208152600061482a6020830184614a14565b60008060008060008060c08789031215614a8457600080fd5b8635614a8f816147ff565b9860208801359850604088013597606081013597506080810135965060a00135945092505050565b600181811c90821680614acb57607f821691505b602082108103614aeb57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115614b77578160001904821115614b5d57614b5d614b26565b80851615614b6a57918102915b93841c9390800290614b41565b509250929050565b600082614b8e57506001610f13565b81614b9b57506000610f13565b8160018114614bb15760028114614bbb57614bd7565b6001915050610f13565b60ff841115614bcc57614bcc614b26565b50506001821b610f13565b5060208310610133831016604e8410600b8410161715614bfa575081810a610f13565b614c048383614b3c565b8060001904821115614c1857614c18614b26565b029392505050565b600061482a60ff841683614b7f565b6000816000190483118215151615614c4957614c49614b26565b500290565b600082614c6b57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115614c8357614c83614b26565b500190565b60208082526026908201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60408201526507420626520360d41b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060018201614cf657614cf6614b26565b5060010190565b600060208284031215614d0f57600080fd5b5051919050565b600060208284031215614d2857600080fd5b815161482a816147ff565b600060208284031215614d4557600080fd5b815161482a816147bb565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215614da057600080fd5b8351925060208401519150604084015190509250925092565b600082821015614dcb57614dcb614b26565b500390565b60008060408385031215614de357600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b848152608060208201526000614e956080830186614a14565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a060408201526000614ed060a0830186614a14565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220ef6a9fda1b02f7b0cb525948d69998919a990f7ff3a597a667a7cdc93bc2029b64736f6c634300080f0033

Deployed Bytecode Sourcemap

10071:29079:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11963:37;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;11963:37:0;;;;;;;;4387:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10218:27::-;;;;;;;;;;-1:-1:-1;10218:27:0;;;;-1:-1:-1;;;;;10218:27:0;;;;;;-1:-1:-1;;;;;980:32:1;;;962:51;;950:2;935:18;10218:27:0;798:221:1;5301:169:0;;;;;;;;;;-1:-1:-1;5301:169:0;;;;;:::i;:::-;;:::i;:::-;;;1645:14:1;;1638:22;1620:41;;1608:2;1593:18;5301:169:0;1480:187:1;12141:45:0;;;;;;;;;;;;;;;;17135:115;;;;;;;;;;-1:-1:-1;17135:115:0;;;;;:::i;:::-;;:::i;:::-;;12342:64;;;;;;;;;;-1:-1:-1;12342:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11875:41;;;;;;;;;;-1:-1:-1;11875:41:0;;;;;;;;4708:108;;;;;;;;;;-1:-1:-1;4796:12:0;;4708:108;;11741:47;;;;;;;;;;;;;;;;11551:36;;;;;;;;;;;;;;;;11475:33;;;;;;;;;;;;;;;;5478:492;;;;;;;;;;-1:-1:-1;5478:492:0;;;;;:::i;:::-;;:::i;18699:295::-;;;;;;;;;;-1:-1:-1;18699:295:0;;;;;:::i;:::-;;:::i;11647:45::-;;;;;;;;;;;;;;;;11607:33;;;;;;;;;;-1:-1:-1;11607:33:0;;;;;;;;17262:626;;;;;;;;;;-1:-1:-1;17262:626:0;;;;;:::i;:::-;;:::i;4607:93::-;;;;;;;;;;-1:-1:-1;4607:93:0;;4690:2;3401:36:1;;3389:2;3374:18;4607:93:0;3259:184:1;5978:215:0;;;;;;;;;;-1:-1:-1;5978:215:0;;;;;:::i;:::-;;:::i;10439:25::-;;;;;;;;;;-1:-1:-1;10439:25:0;;;;-1:-1:-1;;;;;10439:25:0;;;11923:33;;;;;;;;;;;;;;;;10252:21;;;;;;;;;;-1:-1:-1;10252:21:0;;;;-1:-1:-1;;;;;10252:21:0;;;31308:297;;;;;;;;;;-1:-1:-1;31308:297:0;;;;;:::i;:::-;;:::i;10743:33::-;;;;;;;;;;-1:-1:-1;10743:33:0;;;;;;;;11271:32;;;;;;;;;;;;;;;;31917:312;;;;;;;;;;;;;:::i;18300:228::-;;;;;;;;;;-1:-1:-1;18300:228:0;;;;;:::i;:::-;;:::i;27954:120::-;;;;;;;;;;-1:-1:-1;28048:18:0;;28033:12;:33;27954:120;;11128:31;;;;;;;;;;;;;;;;10150:28;;;;;;;;;;;;;;;;11236;;;;;;;;;;;;;;;;10709:25;;;;;;;;;;;;;;;;10823:31;;;;;;;;;;-1:-1:-1;10823:31:0;;;;;;;;;;;4824:127;;;;;;;;;;-1:-1:-1;4824:127:0;;;;;:::i;:::-;;:::i;8468:150::-;;;;;;;;;;;;;:::i;33534:447::-;;;;;;;;;;-1:-1:-1;33534:447:0;;;;;:::i;:::-;;:::i;17944:237::-;;;;;;;;;;;;;:::i;20254:260::-;;;;;;;;;;-1:-1:-1;20254:260:0;;;;;:::i;:::-;;:::i;21067:393::-;;;;;;;;;;-1:-1:-1;21067:393:0;;;;;:::i;:::-;;:::i;30572:498::-;;;;;;;;;;-1:-1:-1;30572:498:0;;;;;:::i;:::-;;:::i;32237:1289::-;;;;;;;;;;-1:-1:-1;32237:1289:0;;;;;:::i;:::-;;:::i;10623:44::-;;;;;;;;;;-1:-1:-1;10623:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10116:27;;;;;;;;;;;;;;;;8254:79;;;;;;;;;;-1:-1:-1;8319:6:0;;-1:-1:-1;;;;;8319:6:0;8254:79;;4495:104;;;;;;;;;;;;;:::i;18189:103::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20522:293::-;;;;;;;;;;-1:-1:-1;20522:293:0;;;;;:::i;:::-;;:::i;11203:24::-;;;;;;;;;;;;;;;;11382:43;;;;;;;;;;;;11420:5;11382:43;;11795:35;;;;;;;;;;;;;;;;11515:27;;;;;;;;;;;;;;;;11348:25;;;;;;;;;;;;;;;;6201:413;;;;;;;;;;-1:-1:-1;6201:413:0;;;;;:::i;:::-;;:::i;11699:29::-;;;;;;;;;;;;;;;;10583:33;;;;;;;;;;;;;;;;4959:175;;;;;;;;;;-1:-1:-1;4959:175:0;;;;;:::i;:::-;;:::i;37297:836::-;;;;;;;;;;-1:-1:-1;37297:836:0;;;;;:::i;:::-;;:::i;12564:58::-;;;;;;;;;;-1:-1:-1;12564:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10471:26;;;;;;;;;;-1:-1:-1;10471:26:0;;;;-1:-1:-1;;;;;10471:26:0;;;10783:33;;;;;;;;;;-1:-1:-1;10783:33:0;;;;;;;;;;;21878:282;;;;;;;;;;-1:-1:-1;21878:282:0;;;;;:::i;:::-;;:::i;22168:182::-;;;;;;;;;;-1:-1:-1;22168:182:0;;;;;:::i;:::-;;:::i;37050:239::-;;;;;;;;;;;;;:::i;21468:402::-;;;;;;;;;;-1:-1:-1;21468:402:0;;;;;:::i;:::-;;:::i;19314:293::-;;;;;;;;;;-1:-1:-1;19314:293:0;;;;;:::i;:::-;;:::i;11046:39::-;;;;;;;;;;-1:-1:-1;11046:39:0;;;;;;;;31617:248;;;;;;;;;;-1:-1:-1;31617:248:0;;;;;:::i;:::-;;:::i;12096:38::-;;;;;;;;;;;;;;;;19677:346;;;;;;;;;;-1:-1:-1;19677:346:0;;;;;:::i;:::-;;:::i;11094:27::-;;;;;;;;;;;;;;;;19006:300;;;;;;;;;;-1:-1:-1;19006:300:0;;;;;:::i;:::-;;:::i;5142:151::-;;;;;;;;;;-1:-1:-1;5142:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;5258:18:0;;;5231:7;5258:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5142:151;12007:38;;;;;;;;;;;;;;;;10358:33;;;;;;;;;;;;;;;;18589:98;;;;;;;;;;;;;:::i;10400:32::-;;;;;;;;;;-1:-1:-1;10400:32:0;;;;-1:-1:-1;;;;;10400:32:0;;;10674:28;;;;;;;;;;-1:-1:-1;10674:28:0;;;;;:::i;:::-;;:::i;10506:37::-;;;;;;;;;;;;;;;;11166:30;;;;;;;;;;;;;;;;8626:244;;;;;;;;;;-1:-1:-1;8626:244:0;;;;;:::i;:::-;;:::i;31140:160::-;;;;;;;;;;;;;:::i;12052:37::-;;;;;;;;;;;;;;;;11310:31;;;;;;;;;;;;;;;;10185:24;;;;;;;;;;;;;;;;11434:34;;;;;;;;;;;;;;;;35253:1399;;;;;;;;;;-1:-1:-1;35253:1399:0;;;;;:::i;:::-;;:::i;4387:100::-;4441:13;4474:5;4467:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4387:100;:::o;5301:169::-;5384:4;5401:39;616:10;5424:7;5433:6;5401:8;:39::i;:::-;-1:-1:-1;5458:4:0;5301:169;;;;;:::o;17135:115::-;8381:6;;-1:-1:-1;;;;;8381:6:0;616:10;8381:22;8373:67;;;;-1:-1:-1;;;8373:67:0;;;;;;;:::i;:::-;;;;;;;;;17212:21:::1;:30:::0;;-1:-1:-1;;17212:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17135:115::o;5478:492::-;5618:4;5635:36;5645:6;5653:9;5664:6;5635:9;:36::i;:::-;-1:-1:-1;;;;;5711:19:0;;5684:24;5711:19;;;:11;:19;;;;;;;;616:10;5711:33;;;;;;;;5763:26;;;;5755:79;;;;-1:-1:-1;;;5755:79:0;;8163:2:1;5755:79:0;;;8145:21:1;8202:2;8182:18;;;8175:30;8241:34;8221:18;;;8214:62;-1:-1:-1;;;8292:18:1;;;8285:38;8340:19;;5755:79:0;7961:404:1;5755:79:0;5870:57;5879:6;616:10;5920:6;5901:16;:25;5870:8;:57::i;:::-;-1:-1:-1;5958:4:0;;5478:492;-1:-1:-1;;;;5478:492:0:o;18699:295::-;8381:6;;-1:-1:-1;;;;;8381:6:0;616:10;8381:22;8373:67;;;;-1:-1:-1;;;8373:67:0;;;;;;;:::i;:::-;18821:16:::1;4690:2:::0;18821::::1;:16;:::i;:::-;18812:4;18792:13;4796:12:::0;;;4708:108;18792:13:::1;:17;::::0;18808:1:::1;18792:17;:::i;:::-;:24;;;;:::i;:::-;18791:47;;;;:::i;:::-;18781:6;:57;;18773:111;;;::::0;-1:-1:-1;;;18773:111:0;;10482:2:1;18773:111:0::1;::::0;::::1;10464:21:1::0;10521:2;10501:18;;;10494:30;10560:34;10540:18;;;10533:62;-1:-1:-1;;;10611:18:1;;;10604:39;10660:19;;18773:111:0::1;10280:405:1::0;18773:111:0::1;18920:16;4690:2:::0;18920::::1;:16;:::i;:::-;18910:27;::::0;:6;:27:::1;:::i;:::-;18895:12;:42:::0;;;18953:33:::1;::::0;160:25:1;;;18953:33:0::1;::::0;148:2:1;133:18;18953:33:0::1;;;;;;;;18699:295:::0;:::o;17262:626::-;8381:6;;-1:-1:-1;;;;;8381:6:0;616:10;8381:22;8373:67;;;;-1:-1:-1;;;8373:67:0;;;;;;;:::i;:::-;17367:13:::1;::::0;::::1;::::0;::::1;;;17366:14;17358:50;;;::::0;-1:-1:-1;;;17358:50:0;;10892:2:1;17358:50:0::1;::::0;::::1;10874:21:1::0;10931:2;10911:18;;;10904:30;10970:25;10950:18;;;10943:53;11013:18;;17358:50:0::1;10690:347:1::0;17358:50:0::1;17447:2;17427:16;:22;;17419:74;;;::::0;-1:-1:-1;;;17419:74:0;;11244:2:1;17419:74:0::1;::::0;::::1;11226:21:1::0;11283:2;11263:18;;;11256:30;11322:34;11302:18;;;11295:62;-1:-1:-1;;;11373:18:1;;;11366:37;11420:19;;17419:74:0::1;11042:403:1::0;17419:74:0::1;17504:13;:20:::0;;-1:-1:-1;;17535:18:0;;;;;17585:12:::1;17564:18;:33:::0;;;17629:37:::1;::::0;17650:16;;17629:37:::1;:::i;:::-;17608:18;:58:::0;17708:6:::1;:16:::0;;-1:-1:-1;;;;;;17708:16:0::1;-1:-1:-1::0;;;;;17708:16:0;::::1;::::0;;::::1;::::0;;;17735:49:::1;::::0;-1:-1:-1;17735:26:0::1;:49::i;:::-;17832:6;::::0;17795:51:::1;::::0;-1:-1:-1;;;;;17832:6:0::1;::::0;17795:28:::1;:51::i;:::-;17864:16;::::0;::::1;::::0;;;::::1;17262:626:::0;;:::o;5978:215::-;616:10;6066:4;6115:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6115:34:0;;;;;;;;;;6066:4;;6083:80;;6106:7;;6115:47;;6152:10;;6115:47;:::i;:::-;6083:8;:80::i;31308:297::-;8381:6;;-1:-1:-1;;;;;8381:6:0;616:10;8381:22;8373:67;;;;-1:-1:-1;;;8373:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31404:32:0;::::1;31396:83;;;;-1:-1:-1::0;;;31396:83:0::1;;;;;;;:::i;:::-;31490:17;:47:::0;;-1:-1:-1;;;;;;31490:47:0::1;-1:-1:-1::0;;;;;31490:47:0;::::1;::::0;;::::1;::::0;;;31553:44:::1;::::0;::::1;::::0;-1:-1:-1;;31553:44:0::1;31308:297:::0;:::o;31917:312::-;8381:6;;-1:-1:-1;;;;;8381:6:0;616:10;8381:22;8373:67;;;;-1:-1:-1;;;8373:67:0;;;;;;;:::i;:::-;32008:18:::1;;31980:24;31998:4;31980:9;:24::i;:::-;:46;;31972:123;;;::::0;;-1:-1:-1;;;31972:123:0;;12192:2:1;31972:123:0::1;::::0;::::1;12174:21:1::0;12211:18;;;12204:30;;;;12270:34;12250:18;;;12243:62;12341:34;12321:18;;;12314:62;12393:19;;31972:123:0::1;11990:428:1::0;31972:123:0::1;32106:8;:15:::0;;-1:-1:-1;;;;32106:15:0::1;-1:-1:-1::0;;;32106:15:0::1;::::0;;32132:10:::1;:8;:10::i;:::-;32153:8;:16:::0;;-1:-1:-1;;;;32153:16:0::1;::::0;;32185:36:::1;::::0;32205:15:::1;160:25:1::0;;32185:36:0::1;::::0;148:2:1;133:18;32185:36:0::1;;;;;;;31917:312::o:0;18300:228::-;8381:6;;-1:-1:-1;;;;;8381:6:0;616:10;8381:22;8373:67;;;;-1:-1:-1;;;8373:67:0;;;;;;;:::i;:::-;18417:9:::1;18413:108;18432:19:::0;;::::1;18413:108;;;18499:10;18472:11;:24;18484:8;;18493:1;18484:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18472:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18472:24:0;:37;;-1:-1:-1;;18472:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18453:3;::::1;::::0;::::1;:::i;:::-;;;;18413:108;;;;18300:228:::0;;;:::o;4824:127::-;-1:-1:-1;;;;;4925:18:0;4898:7;4925:18;;;;;;;;;;;;4824:127::o;8468:150::-;8381:6;;-1:-1:-1;;;;;8381:6:0;616:10;8381:22;8373:67;;;;-1:-1:-1;;;8373:67:0;;;;;;;:::i;:::-;8561:6:::1;::::0;8540:40:::1;::::0;8577:1:::1;::::0;-1:-1:-1;;;;;8561:6:0::1;::::0;8540:40:::1;::::0;8577:1;;8540:40:::1;8591:6;:19:::0;;-1:-1:-1;;;;;;8591:19:0::1;::::0;;8468:150::o;33534:447::-;8381:6;;-1:-1:-1;;;;;8381:6:0;616:10;8381:22;8373:67;;;;-1:-1:-1;;;8373:67:0;;;;;;;:::i;:::-;33688:3:::1;33665:19;:26;;33657:90;;;::::0;-1:-1:-1;;;33657:90:0;;12897:2:1;33657:90:0::1;::::0;::::1;12879:21:1::0;12936:2;12916:18;;;12909:30;12975:34;12955:18;;;12948:62;-1:-1:-1;;;13026:18:1;;;13019:49;13085:19;;33657:90:0::1;12695:415:1::0;33657:90:0::1;33778:4;33766:8;:16;;:33;;;;-1:-1:-1::0;33786:13:0;33766:33:::1;33758:94;;;::::0;-1:-1:-1;;;33758:94:0;;13317:2:1;33758:94:0::1;::::0;::::1;13299:21:1::0;13356:2;13336:18;;;13329:30;13395:34;13375:18;;;13368:62;-1:-1:-1;;;13446:18:1;;;13439:46;13502:19;;33758:94:0::1;13115:412:1::0;33758:94:0::1;33863:15;:37:::0;;;;33911:16:::1;:27:::0;33949:13:::1;:24:::0;;-1:-1:-1;;33949:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33534:447::o;17944:237::-;8381:6;;-1:-1:-1;;;;;8381:6:0;616:10;8381:22;8373:67;;;;-1:-1:-1;;;8373:67:0;;;;;;;:::i;:::-;18000:14:::1;:22:::0;;-1:-1:-1;;18000:22:0;;::::1;::::0;;;18033:20:::1;:28:::0;;;;::::1;::::0;;4796:12;;18072::::1;:28:::0;4796:12;;18111:13:::1;:29:::0;18158:15:::1;::::0;::::1;::::0;;;::::1;17944:237::o:0;20254:260::-;8381:6;;-1:-1:-1;;;;;8381:6:0;616:10;8381:22;8373:67;;;;-1:-1:-1;;;8373:67:0;;;;;;;:::i;:::-;20350:4:::1;20346:104;;20388:6;::::0;-1:-1:-1;;;;;20388:6:0;;::::1;20378:16:::0;;::::1;::::0;20370:68:::1;;;::::0;-1:-1:-1;;;20370:68:0;;13734:2:1;20370:68:0::1;::::0;::::1;13716:21:1::0;13773:2;13753:18;;;13746:30;13812:34;13792:18;;;13785:62;-1:-1:-1;;;13863:18:1;;;13856:37;13910:19;;20370:68:0::1;13532:403:1::0;20370:68:0::1;-1:-1:-1::0;;;;;20460:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;20460:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20254:260::o;21067:393::-;8381:6;;-1:-1:-1;;;;;8381:6:0;616:10;8381:22;8373:67;;;;-1:-1:-1;;;8373:67:0;;;;;;;:::i;:::-;21184:16:::1;:33:::0;;;21228:15:::1;:31:::0;;;21270:9:::1;:19:::0;;;21282:7;21315:34:::1;21246:13:::0;21203:14;21315:34:::1;:::i;:::-;:46;;;;:::i;:::-;21300:12;:61:::0;21415:3:::1;21396:16;11420:5;21396:2;:16;:::i;:::-;:22;;;;:::i;:::-;21380:12;;:38;;21372:80;;;::::0;-1:-1:-1;;;21372:80:0;;14142:2:1;21372:80:0::1;::::0;::::1;14124:21:1::0;14181:2;14161:18;;;14154:30;14220:31;14200:18;;;14193:59;14269:18;;21372:80:0::1;13940:353:1::0;21372:80:0::1;21067:393:::0;;;:::o;30572:498::-;8381:6;;30659:10;;-1:-1:-1;;;;;8381:6:0;616:10;8381:22;8373:67;;;;-1:-1:-1;;;8373:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30690:20:0;::::1;30682:59;;;::::0;-1:-1:-1;;;30682:59:0;;14500:2:1;30682:59:0::1;::::0;::::1;14482:21:1::0;14539:2;14519:18;;;14512:30;14578:28;14558:18;;;14551:56;14624:18;;30682:59:0::1;14298:350:1::0;30682:59:0::1;-1:-1:-1::0;;;;;30760:23:0;::::1;30778:4;30760:23;;::::0;:41:::1;;-1:-1:-1::0;30788:13:0::1;::::0;::::1;::::0;::::1;;;30787:14;30760:41;30752:106;;;::::0;-1:-1:-1;;;30752:106:0;;14855:2:1;30752:106:0::1;::::0;::::1;14837:21:1::0;14894:2;14874:18;;;14867:30;14933:34;14913:18;;;14906:62;-1:-1:-1;;;14984:18:1;;;14977:50;15044:19;;30752:106:0::1;14653:416:1::0;30752:106:0::1;30896:39;::::0;-1:-1:-1;;;30896:39:0;;30929:4:::1;30896:39;::::0;::::1;962:51:1::0;30869:24:0::1;::::0;-1:-1:-1;;;;;30896:24:0;::::1;::::0;::::1;::::0;935:18:1;;30896:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30954:46;::::0;-1:-1:-1;;;30954:46:0;;-1:-1:-1;;;;;15455:32:1;;;30954:46:0::1;::::0;::::1;15437:51:1::0;15504:18;;;15497:34;;;30869:66:0;;-1:-1:-1;30954:23:0;;::::1;::::0;::::1;::::0;15410:18:1;;30954:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31016;::::0;;-1:-1:-1;;;;;15455:32:1;;15437:51;;15519:2;15504:18;;15497:34;;;30946:54:0;;-1:-1:-1;31016:46:0::1;::::0;15410:18:1;31016:46:0::1;;;;;;;30671:399;30572:498:::0;;;;:::o;32237:1289::-;8381:6;;-1:-1:-1;;;;;8381:6:0;616:10;8381:22;8373:67;;;;-1:-1:-1;;;8373:67:0;;;;;;;:::i;:::-;32318:13:::1;::::0;::::1;::::0;::::1;;;32317:14;32309:70;;;::::0;-1:-1:-1;;;32309:70:0;;15994:2:1;32309:70:0::1;::::0;::::1;15976:21:1::0;16033:2;16013:18;;;16006:30;16072:34;16052:18;;;16045:62;-1:-1:-1;;;16123:18:1;;;16116:41;16174:19;;32309:70:0::1;15792:407:1::0;32309:70:0::1;32437:9;;;;;;;;;-1:-1:-1::0;;;;;32437:9:0::1;-1:-1:-1::0;;;;;32437:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32425:43:0::1;;32477:4;32484:9;;;;;;;;;-1:-1:-1::0;;;;;32484:9:0::1;-1:-1:-1::0;;;;;32484:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32425:76;::::0;-1:-1:-1;;;;;;32425:76:0::1;::::0;;;;;;-1:-1:-1;;;;;16690:15:1;;;32425:76:0::1;::::0;::::1;16672:34:1::0;16742:15;;16722:18;;;16715:43;16607:18;;32425:76:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32416:6;:85:::0;;-1:-1:-1;;;;;;32416:85:0::1;-1:-1:-1::0;;;;;32416:85:0;;;::::1;::::0;;::::1;::::0;;32512:49:::1;::::0;-1:-1:-1;32512:26:0::1;:49::i;:::-;32609:6;::::0;32572:51:::1;::::0;-1:-1:-1;;;;;32609:6:0::1;::::0;32572:28:::1;:51::i;:::-;32703:1;32679:21;:25;32671:73;;;::::0;-1:-1:-1;;;32671:73:0;;16971:2:1;32671:73:0::1;::::0;::::1;16953:21:1::0;17010:2;16990:18;;;16983:30;17049:34;17029:18;;;17022:62;-1:-1:-1;;;17100:18:1;;;17093:33;17143:19;;32671:73:0::1;16769:399:1::0;32671:73:0::1;32792:1;32765:24;32783:4;32765:9;:24::i;:::-;:28;32757:79;;;::::0;-1:-1:-1;;;32757:79:0;;17375:2:1;32757:79:0::1;::::0;::::1;17357:21:1::0;17414:2;17394:18;;;17387:30;17453:34;17433:18;;;17426:62;-1:-1:-1;;;17504:18:1;;;17497:36;17550:19;;32757:79:0::1;17173:402:1::0;32757:79:0::1;32881:9;::::0;32849:69:::1;::::0;32866:4:::1;::::0;-1:-1:-1;;;;;32881:9:0::1;32893:24;32866:4:::0;32893:9:::1;:24::i;32849:69::-;32929:9;::::0;-1:-1:-1;;;;;32929:9:0::1;:25;32962:21;33007:4;33027:24;33007:4:::0;33027:9:::1;:24::i;:::-;33160:11;::::0;32929:284:::1;::::0;-1:-1:-1;;;;;;32929:284:0::1;::::0;;;;;;::::1;::::0;;;33066:1:::1;::::0;;;-1:-1:-1;;;;;33160:11:0::1;::::0;33187:15:::1;::::0;32929:284:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33251:9;-1:-1:-1::0;;;;;33251:22:0::1;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33226:14;:50:::0;33324:13:::1;:20:::0;;-1:-1:-1;;33355:18:0;;;;;33405:12:::1;33384:18;:33:::0;;;33449:37:::1;::::0;33470:16;;33449:37:::1;:::i;:::-;33428:18;:58:::0;33502:16:::1;::::0;::::1;::::0;;;::::1;32237:1289:::0;:::o;4495:104::-;4551:13;4584:7;4577:14;;;;;:::i;18189:103::-;18238:16;18273:11;18266:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18266:18:0;;;;;;;;;;;;;;;;;;;;;;18189:103;:::o;20522:293::-;8381:6;;-1:-1:-1;;;;;8381:6:0;616:10;8381:22;8373:67;;;;-1:-1:-1;;;8373:67:0;;;;;;;:::i;:::-;20631:6:::1;::::0;-1:-1:-1;;;;;20631:6:0;;::::1;20623:14:::0;;::::1;::::0;20615:84:::1;;;::::0;-1:-1:-1;;;20615:84:0;;18893:2:1;20615:84:0::1;::::0;::::1;18875:21:1::0;18932:2;18912:18;;;18905:30;18971:34;18951:18;;;18944:62;19042:27;19022:18;;;19015:55;19087:19;;20615:84:0::1;18691:421:1::0;20615:84:0::1;20710:41;20739:4;20745:5;20710:28;:41::i;:::-;20767:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;20767:40:0;::::1;::::0;::::1;::::0;;;::::1;20522:293:::0;;:::o;6201:413::-;616:10;6294:4;6338:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6338:34:0;;;;;;;;;;6391:35;;;;6383:85;;;;-1:-1:-1;;;6383:85:0;;19319:2:1;6383:85:0;;;19301:21:1;19358:2;19338:18;;;19331:30;19397:34;19377:18;;;19370:62;-1:-1:-1;;;19448:18:1;;;19441:35;19493:19;;6383:85:0;19117:401:1;6383:85:0;6504:67;616:10;6527:7;6555:15;6536:16;:34;6504:8;:67::i;:::-;-1:-1:-1;6602:4:0;;6201:413;-1:-1:-1;;;6201:413:0:o;4959:175::-;5045:4;5062:42;616:10;5086:9;5097:6;5062:9;:42::i;37297:836::-;8381:6;;-1:-1:-1;;;;;8381:6:0;616:10;8381:22;8373:67;;;;-1:-1:-1;;;8373:67:0;;;;;;;:::i;:::-;37563:3:::1;37541:18;:25;;:54;;;;;37592:3;37570:18;:25;;37541:54;:98;;;;;37621:18;37599;:40;;37541:98;37533:133;;;::::0;-1:-1:-1;;;37533:133:0;;19725:2:1;37533:133:0::1;::::0;::::1;19707:21:1::0;19764:2;19744:18;;;19737:30;-1:-1:-1;;;19783:18:1;;;19776:52;19845:18;;37533:133:0::1;19523:346:1::0;37533:133:0::1;37708:3;37685:19;:26;;:56;;;;;37738:3;37715:19;:26;;37685:56;:102;;;;;37768:19;37745;:42;;37685:102;37677:138;;;::::0;-1:-1:-1;;;37677:138:0;;20076:2:1;37677:138:0::1;::::0;::::1;20058:21:1::0;20115:2;20095:18;;;20088:30;20154:25;20134:18;;;20127:53;20197:18;;37677:138:0::1;19874:347:1::0;37677:138:0::1;37826:21;:46:::0;;-1:-1:-1;;37826:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;37883:17:::1;:38:::0;;;;37932:17:::1;:38:::0;;;;37981:18:::1;:40:::0;38032:18:::1;:40:::0;38083:19:::1;:42:::0;37297:836::o;21878:282::-;8381:6;;-1:-1:-1;;;;;8381:6:0;616:10;8381:22;8373:67;;;;-1:-1:-1;;;8373:67:0;;;;;;;:::i;:::-;21985:9:::1;21981:172;22000:19:::0;;::::1;21981:172;;;22075:8;22040:19;:32;22060:8;;22069:1;22060:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22040:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;22040:32:0;:43;;-1:-1:-1;;22040:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22119:8;;22128:1;22119:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22103:38:0::1;;22132:8;22103:38;;;;1645:14:1::0;1638:22;1620:41;;1608:2;1593:18;;1480:187;22103:38:0::1;;;;;;;;22021:3:::0;::::1;::::0;::::1;:::i;:::-;;;;21981:172;;22168:182:::0;8381:6;;-1:-1:-1;;;;;8381:6:0;616:10;8381:22;8373:67;;;;-1:-1:-1;;;8373:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22253:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;22253:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22308:34;;1620:41:1;;;22308:34:0::1;::::0;1593:18:1;22308:34:0::1;;;;;;;22168:182:::0;;:::o;37050:239::-;37090:7;37276:3;37269:4;37239:26;37257:6;37239:9;:26::i;:::-;4796:12;;37225:40;;;;:::i;:::-;37213:6;;37195:26;;-1:-1:-1;;;;;37213:6:0;37195:9;:26::i;:::-;37178:14;;37124:9;;;;;;;;;-1:-1:-1;;;;;37124:9:0;-1:-1:-1;;;;;37124:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37160:6;;37117:51;;-1:-1:-1;;;37117:51:0;;-1:-1:-1;;;;;37160:6:0;;;37117:51;;;962::1;37117:34:0;;;;;935:18:1;;37117:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;37171:4;37117:58;:::i;:::-;:75;;;;:::i;:::-;:104;;;;:::i;:::-;:149;;;;:::i;:::-;:156;;;;:::i;:::-;:162;;;;:::i;:::-;37109:171;;37050:239;:::o;21468:402::-;8381:6;;-1:-1:-1;;;;;8381:6:0;616:10;8381:22;8373:67;;;;-1:-1:-1;;;8373:67:0;;;;;;;:::i;:::-;21586:17:::1;:34:::0;;;21631:16:::1;:32:::0;;;21674:10:::1;:20:::0;;;21687:7;21721:36:::1;21650:13:::0;21606:14;21721:36:::1;:::i;:::-;:49;;;;:::i;:::-;21705:13;:65:::0;21825:3:::1;21806:16;11420:5;21806:2;:16;:::i;:::-;:22;;;;:::i;:::-;21789:13;;:39;;21781:81;;;::::0;-1:-1:-1;;;21781:81:0;;20558:2:1;21781:81:0::1;::::0;::::1;20540:21:1::0;20597:2;20577:18;;;20570:30;20636:31;20616:18;;;20609:59;20685:18;;21781:81:0::1;20356:353:1::0;19314:293:0;8381:6;;-1:-1:-1;;;;;8381:6:0;616:10;8381:22;8373:67;;;;-1:-1:-1;;;8373:67:0;;;;;;;:::i;:::-;19438:16:::1;4690:2:::0;19438::::1;:16;:::i;:::-;19430:3;19410:13;4796:12:::0;;;4708:108;19410:13:::1;:17;::::0;19426:1:::1;19410:17;:::i;:::-;:23;;;;:::i;:::-;19409:46;;;;:::i;:::-;19399:6;:56;;19391:109;;;::::0;-1:-1:-1;;;19391:109:0;;20916:2:1;19391:109:0::1;::::0;::::1;20898:21:1::0;20955:2;20935:18;;;20928:30;20994:34;20974:18;;;20967:62;-1:-1:-1;;;21045:18:1;;;21038:38;21093:19;;19391:109:0::1;20714:404:1::0;19391:109:0::1;19533:16;4690:2:::0;19533::::1;:16;:::i;:::-;19523:27;::::0;:6;:27:::1;:::i;:::-;19511:9;:39:::0;;;19566:33:::1;::::0;160:25:1;;;19566:33:0::1;::::0;148:2:1;133:18;19566:33:0::1;14:177:1::0;31617:248:0;8381:6;;-1:-1:-1;;;;;8381:6:0;616:10;8381:22;8373:67;;;;-1:-1:-1;;;8373:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31699:25:0;::::1;31691:76;;;;-1:-1:-1::0;;;31691:76:0::1;;;;;;;:::i;:::-;31778:10;:33:::0;;-1:-1:-1;;;;;;31778:33:0::1;-1:-1:-1::0;;;;;31778:33:0;::::1;::::0;;::::1;::::0;;;31827:30:::1;::::0;::::1;::::0;-1:-1:-1;;31827:30:0::1;31617:248:::0;:::o;19677:346::-;8381:6;;-1:-1:-1;;;;;8381:6:0;616:10;8381:22;8373:67;;;;-1:-1:-1;;;8373:67:0;;;;;;;:::i;:::-;19800:6:::1;19780:13;4796:12:::0;;;4708:108;19780:13:::1;:17;::::0;19796:1:::1;19780:17;:::i;:::-;:26;;;;:::i;:::-;19767:9;:39;;19759:105;;;::::0;-1:-1:-1;;;19759:105:0;;21325:2:1;19759:105:0::1;::::0;::::1;21307:21:1::0;21364:2;21344:18;;;21337:30;21403:34;21383:18;;;21376:62;-1:-1:-1;;;21454:18:1;;;21447:51;21515:19;;19759:105:0::1;21123:417:1::0;19759:105:0::1;19915:4;19895:13;4796:12:::0;;;4708:108;19895:13:::1;:17;::::0;19911:1:::1;19895:17;:::i;:::-;:24;;;;:::i;:::-;19882:9;:37;;19874:102;;;::::0;-1:-1:-1;;;19874:102:0;;21747:2:1;19874:102:0::1;::::0;::::1;21729:21:1::0;21786:2;21766:18;;;21759:30;21825:34;21805:18;;;21798:62;-1:-1:-1;;;21876:18:1;;;21869:50;21936:19;;19874:102:0::1;21545:416:1::0;19874:102:0::1;19986:18;:30:::0;19677:346::o;19006:300::-;8381:6;;-1:-1:-1;;;;;8381:6:0;616:10;8381:22;8373:67;;;;-1:-1:-1;;;8373:67:0;;;;;;;:::i;:::-;19129:16:::1;4690:2:::0;19129::::1;:16;:::i;:::-;19120:4;19100:13;4796:12:::0;;;4708:108;19100:13:::1;:17;::::0;19116:1:::1;19100:17;:::i;:::-;:24;;;;:::i;:::-;19099:47;;;;:::i;:::-;19089:6;:57;;19081:112;;;::::0;-1:-1:-1;;;19081:112:0;;22168:2:1;19081:112:0::1;::::0;::::1;22150:21:1::0;22207:2;22187:18;;;22180:30;22246:34;22226:18;;;22219:62;-1:-1:-1;;;22297:18:1;;;22290:40;22347:19;;19081:112:0::1;21966:406:1::0;19081:112:0::1;19230:16;4690:2:::0;19230::::1;:16;:::i;:::-;19220:27;::::0;:6;:27:::1;:::i;:::-;19204:13;:43:::0;;;19263:35:::1;::::0;160:25:1;;;19263:35:0::1;::::0;148:2:1;133:18;19263:35:0::1;14:177:1::0;18589:98:0;8381:6;;-1:-1:-1;;;;;8381:6:0;616:10;8381:22;8373:67;;;;-1:-1:-1;;;8373:67:0;;;;;;;:::i;:::-;18651:20:::1;:28:::0;;-1:-1:-1;;18651:28:0::1;::::0;;18589:98::o;10674:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10674:28:0;;-1:-1:-1;10674:28:0;:::o;8626:244::-;8381:6;;-1:-1:-1;;;;;8381:6:0;616:10;8381:22;8373:67;;;;-1:-1:-1;;;8373:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8715:22:0;::::1;8707:73;;;::::0;-1:-1:-1;;;8707:73:0;;22579:2:1;8707:73:0::1;::::0;::::1;22561:21:1::0;22618:2;22598:18;;;22591:30;22657:34;22637:18;;;22630:62;-1:-1:-1;;;22708:18:1;;;22701:36;22754:19;;8707:73:0::1;22377:402:1::0;8707:73:0::1;8817:6;::::0;8796:38:::1;::::0;-1:-1:-1;;;;;8796:38:0;;::::1;::::0;8817:6:::1;::::0;8796:38:::1;::::0;8817:6:::1;::::0;8796:38:::1;8845:6;:17:::0;;-1:-1:-1;;;;;;8845:17:0::1;-1:-1:-1::0;;;;;8845:17:0;;;::::1;::::0;;;::::1;::::0;;8626:244::o;31140:160::-;8381:6;;-1:-1:-1;;;;;8381:6:0;616:10;8381:22;8373:67;;;;-1:-1:-1;;;8373:67:0;;;;;;;:::i;:::-;31234:58:::1;::::0;31198:12:::1;::::0;31242:10:::1;::::0;31266:21:::1;::::0;31198:12;31234:58;31198:12;31234:58;31266:21;31242:10;31234:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35253:1399:::0;8381:6;;-1:-1:-1;;;;;8381:6:0;616:10;8381:22;8373:67;;;;-1:-1:-1;;;8373:67:0;;;;;;;:::i;:::-;35358:4:::1;35347:7;:15;;35339:81;;;::::0;-1:-1:-1;;;35339:81:0;;23196:2:1;35339:81:0::1;::::0;::::1;23178:21:1::0;23235:2;23215:18;;;23208:30;23274:34;23254:18;;;23247:62;-1:-1:-1;;;23325:18:1;;;23318:51;23386:19;;35339:81:0::1;22994:417:1::0;35339:81:0::1;35481:19;::::0;35463:37:::1;::::0;:15:::1;:37;:::i;:::-;35439:20;;:61;;35431:87;;;::::0;-1:-1:-1;;;35431:87:0;;23618:2:1;35431:87:0::1;::::0;::::1;23600:21:1::0;23657:2;23637:18;;;23630:30;-1:-1:-1;;;23676:18:1;;;23669:43;23729:18;;35431:87:0::1;23416:337:1::0;35431:87:0::1;35552:15;35529:20;:38:::0;35605:6:::1;::::0;35598:39:::1;::::0;-1:-1:-1;;;35598:39:0;;35631:4:::1;35598:39;::::0;::::1;962:51:1::0;35578:17:0::1;::::0;-1:-1:-1;;;;;35605:6:0::1;::::0;35598:24:::1;::::0;935:18:1;;35598:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35578:59;;35648:20;35671:24;35689:4;35671:9;:24::i;:::-;35648:47:::0;-1:-1:-1;35706:16:0::1;35747:5;35725:19;35737:7:::0;35725:9;:19:::1;:::i;:::-;:27;;;;:::i;:::-;35899:6;::::0;35923:9:::1;::::0;35892:52:::1;::::0;-1:-1:-1;;;35892:52:0;;-1:-1:-1;;;;;35923:9:0;;::::1;35892:52;::::0;::::1;15437:51:1::0;15504:18;;;15497:34;;;35706:46:0;;-1:-1:-1;35791:21:0::1;::::0;35899:6;::::1;::::0;35892:22:::1;::::0;15410:18:1;;35892:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;35990:9:0::1;::::0;:234:::1;::::0;-1:-1:-1;;;35990:234:0;;-1:-1:-1;;;;;35990:9:0;;::::1;::::0;:28:::1;::::0;:234:::1;::::0;36041:4:::1;::::0;36061:8;;35990:9;;;;36041:4;;36198:15:::1;::::0;35990:234:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36237:25;36292:12;36265:24;36283:4;36265:9;:24::i;:::-;:39;;;;:::i;:::-;36237:67:::0;-1:-1:-1;36318:21:0;;36315:118:::1;;36355:66;36379:4;36394:6;36403:17;36355:15;:66::i;:::-;36445:23;36471:41;36495:17:::0;36471:21:::1;:41;:::i;:::-;36445:67:::0;-1:-1:-1;36528:19:0;;36525:80:::1;;36563:30;36577:15;36563:13;:30::i;:::-;36622:22;::::0;36635:8;;36622:22:::1;::::0;;;::::1;35328:1324;;;;;;35253:1399:::0;:::o;7543:380::-;-1:-1:-1;;;;;7679:19:0;;7671:68;;;;-1:-1:-1;;;7671:68:0;;24822:2:1;7671:68:0;;;24804:21:1;24861:2;24841:18;;;24834:30;24900:34;24880:18;;;24873:62;-1:-1:-1;;;24951:18:1;;;24944:34;24995:19;;7671:68:0;24620:400:1;7671:68:0;-1:-1:-1;;;;;7758:21:0;;7750:68;;;;-1:-1:-1;;;7750:68:0;;25227:2:1;7750:68:0;;;25209:21:1;25266:2;25246:18;;;25239:30;25305:34;25285:18;;;25278:62;-1:-1:-1;;;25356:18:1;;;25349:32;25398:19;;7750:68:0;25025:398:1;7750:68:0;-1:-1:-1;;;;;7831:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7883:32;;160:25:1;;;7883:32:0;;133:18:1;7883:32:0;;;;;;;7543:380;;;:::o;22358:5588::-;-1:-1:-1;;;;;22458:18:0;;22450:68;;;;-1:-1:-1;;;22450:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22537:16:0;;22529:64;;;;-1:-1:-1;;;22529:64:0;;;;;;;:::i;:::-;22621:1;22612:6;:10;22604:52;;;;-1:-1:-1;;;22604:52:0;;26440:2:1;22604:52:0;;;26422:21:1;26479:2;26459:18;;;26452:30;26518:31;26498:18;;;26491:59;26567:18;;22604:52:0;26238:353:1;22604:52:0;22681:13;;;;;;;22677:132;;-1:-1:-1;;;;;22718:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;22747:23:0;;;;;;:19;:23;;;;;;;;22718:52;22710:87;;;;-1:-1:-1;;;22710:87:0;;26798:2:1;22710:87:0;;;26780:21:1;26837:2;26817:18;;;26810:30;-1:-1:-1;;;26856:18:1;;;26849:52;26918:18;;22710:87:0;26596:346:1;22710:87:0;22824:13;;;;;;;22821:209;;;-1:-1:-1;;;;;22863:17:0;;;;;;:11;:17;;;;;;;;22862:18;:38;;;;-1:-1:-1;;;;;;22885:15:0;;;;;;:11;:15;;;;;;;;22884:16;22862:38;22861:57;;;-1:-1:-1;8319:6:0;;-1:-1:-1;;;;;22905:13:0;;;8319:6;;22905:13;22861:57;:82;;;-1:-1:-1;;;;;;22922:21:0;;22936:6;22922:21;22861:82;22853:165;;;;-1:-1:-1;;;22853:165:0;;27149:2:1;22853:165:0;;;27131:21:1;27188:2;27168:18;;;27161:30;27227:34;27207:18;;;27200:62;27298:34;27278:18;;;27271:62;-1:-1:-1;;;27349:19:1;;;27342:37;27396:19;;22853:165:0;26947:474:1;22853:165:0;23053:14;;;;23050:1634;;;8319:6;;-1:-1:-1;;;;;23087:15:0;;;8319:6;;23087:15;;;;:32;;-1:-1:-1;8319:6:0;;-1:-1:-1;;;;;23106:13:0;;;8319:6;;23106:13;;23087:32;:52;;;;-1:-1:-1;;;;;;23123:16:0;;;;23087:52;:77;;;;-1:-1:-1;;;;;;23143:21:0;;23157:6;23143:21;;23087:77;:107;;;;-1:-1:-1;;;;;;23169:25:0;;;;;;:19;:25;;;;;;;;23168:26;23087:107;:135;;;;-1:-1:-1;;;;;;23199:23:0;;;;;;:19;:23;;;;;;;;23198:24;23087:135;23083:1590;;;23398:20;;;;23394:506;;;23460:9;;-1:-1:-1;;;;;23446:24:0;;;23460:9;;23446:24;;;;:49;;-1:-1:-1;23488:6:0;;-1:-1:-1;;;;;23474:21:0;;;23488:6;;23474:21;;23446:49;23442:439;;;23573:16;23588:1;23573:12;:16;:::i;:::-;23560:9;23531:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;23628:16:0;23643:1;23628:12;:16;:::i;:::-;-1:-1:-1;;;;;23593:32:0;;;;;;:28;:32;;;;;;:51;23531:113;23523:179;;;;-1:-1:-1;;;23523:179:0;;27628:2:1;23523:179:0;;;27610:21:1;27667:2;27647:18;;;27640:30;27706:34;27686:18;;;27679:62;-1:-1:-1;;;27757:18:1;;;27750:51;27818:19;;23523:179:0;27426:417:1;23523:179:0;23758:9;23729:39;;;;:28;:39;;;;;;23771:12;23729:54;;;;-1:-1:-1;;;;;23810:32:0;;;;;;:47;23442:439;-1:-1:-1;;;;;23969:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;24005:35:0;;;;;;:31;:35;;;;;;;;24004:36;23969:71;23965:693;;;24083:12;;24073:6;:22;;24065:75;;;;-1:-1:-1;;;24065:75:0;;28050:2:1;24065:75:0;;;28032:21:1;28089:2;28069:18;;;28062:30;28128:34;28108:18;;;28101:62;-1:-1:-1;;;28179:18:1;;;28172:38;28227:19;;24065:75:0;27848:404:1;24065:75:0;24197:9;;24180:13;24190:2;24180:9;:13::i;:::-;24171:22;;:6;:22;:::i;:::-;:35;;24163:67;;;;-1:-1:-1;;;24163:67:0;;28459:2:1;24163:67:0;;;28441:21:1;28498:2;28478:18;;;28471:30;-1:-1:-1;;;28517:18:1;;;28510:49;28576:18;;24163:67:0;28257:343:1;24163:67:0;23965:693;;;-1:-1:-1;;;;;24307:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;24341:37:0;;;;;;:31;:37;;;;;;;;24340:38;24307:71;24303:355;;;24421:13;;24411:6;:23;;24403:78;;;;-1:-1:-1;;;24403:78:0;;28807:2:1;24403:78:0;;;28789:21:1;28846:2;28826:18;;;28819:30;28885:34;28865:18;;;28858:62;-1:-1:-1;;;28936:18:1;;;28929:40;28986:19;;24403:78:0;28605:406:1;24303:355:0;-1:-1:-1;;;;;24512:35:0;;;;;;:31;:35;;;;;;;;24507:151;;24605:9;;24588:13;24598:2;24588:9;:13::i;:::-;24579:22;;:6;:22;:::i;:::-;:35;;24571:67;;;;-1:-1:-1;;;24571:67:0;;28459:2:1;24571:67:0;;;28441:21:1;28498:2;28478:18;;;28471:30;-1:-1:-1;;;28517:18:1;;;28510:49;28576:18;;24571:67:0;28257:343:1;24571:67:0;24696:28;24727:24;24745:4;24727:9;:24::i;:::-;24811:18;;24696:55;;-1:-1:-1;24787:42:0;;;;;;;24845:22;;-1:-1:-1;24856:11:0;;;;;;;24845:22;:35;;;;-1:-1:-1;24872:8:0;;-1:-1:-1;;;24872:8:0;;;;24871:9;24845:35;:71;;;;-1:-1:-1;;;;;;24885:31:0;;;;;;:25;:31;;;;;;;;24884:32;24845:71;:101;;;;-1:-1:-1;;;;;;24921:25:0;;;;;;:19;:25;;;;;;;;24920:26;24845:101;:129;;;;-1:-1:-1;;;;;;24951:23:0;;;;;;:19;:23;;;;;;;;24950:24;24845:129;24842:232;;;24991:8;:15;;-1:-1:-1;;;;24991:15:0;-1:-1:-1;;;24991:15:0;;;25021:10;:8;:10::i;:::-;25046:8;:16;;-1:-1:-1;;;;25046:16:0;;;24842:232;25090:8;;-1:-1:-1;;;25090:8:0;;;;25089:9;:42;;;;-1:-1:-1;;;;;;25102:29:0;;;;;;:25;:29;;;;;;;;25089:42;:59;;;;-1:-1:-1;25135:13:0;;;;25089:59;:114;;;;;25188:15;;25171:14;;:32;;;;:::i;:::-;25152:15;:51;;25089:114;:144;;;;-1:-1:-1;;;;;;25208:25:0;;;;;;:19;:25;;;;;;;;25207:26;25089:144;25086:204;;;25249:29;:27;:29::i;:::-;-1:-1:-1;;;;;25420:25:0;;25302:12;25420:25;;;:19;:25;;;;;;25317:4;;25420:25;;;:52;;-1:-1:-1;;;;;;25449:23:0;;;;;;:19;:23;;;;;;;;25420:52;25417:99;;;-1:-1:-1;25499:5:0;25417:99;25568:21;;25536:12;;25568:21;;:38;;;;-1:-1:-1;25593:13:0;;;;;;;25568:38;:51;;;;-1:-1:-1;25611:8:0;;-1:-1:-1;;;25611:8:0;;;;25610:9;25568:51;25565:162;;;25660:9;-1:-1:-1;;;;;25660:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25635:14;:50;25700:15;:13;:15::i;:::-;25816:7;25813:2080;;;28048:18;;28033:12;:33;25878:60;;;;-1:-1:-1;;;;;;25907:31:0;;;;;;:25;:31;;;;;;;;25878:60;:94;;;;-1:-1:-1;;;;;;25943:29:0;;;;;;:25;:29;;;;;;;;25942:30;25878:94;:122;;;;-1:-1:-1;;;;;;25977:23:0;;;;;;:19;:23;;;;;;;;25976:24;25878:122;:142;;;;;26019:1;26004:12;;:16;25878:142;25875:1849;;;28048:18;;28033:12;:33;26058:330;;26367:1;26351:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;26058:330:0;-1:-1:-1;;;;;26412:15:0;;;;;;:11;:15;;;;;;;;26408:214;;-1:-1:-1;;;;;26451:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;26451:22:0;26469:4;26451:22;;;;;;26496:10;:15;;26469:4;;26496:10;;:15;;26469:4;;26496:15;:::i;:::-;;;;-1:-1:-1;;26534:11:0;:20;;;;;;;-1:-1:-1;26534:20:0;;;;;;;;-1:-1:-1;;;;;;26534:20:0;-1:-1:-1;;;;;26534:20:0;;;;;;;;26582;;962:51:1;;;26582:20:0;;950:2:1;935:18;26582:20:0;;;;;;;26408:214;11420:5;26658:12;;26649:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;26642:42;;26747:12;;26729:15;;26722:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;26700:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;26827:12:0;;26808:16;;26801:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;26778:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;26893:12:0;;26881:9;;26874:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;26858:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;25875:1849:0;;-1:-1:-1;25875:1849:0;;-1:-1:-1;;;;;26970:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;27019:1;27003:13;;:17;26970:50;26966:758;;;11420:5;27056:13;;27047:6;:22;;;;:::i;:::-;:36;;;;:::i;:::-;27040:43;;27150:13;;27131:16;;27124:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;27102:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27232:13:0;;27212:17;;27205:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;27182:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;27300:13:0;;27287:10;;27280:17;;:4;:17;:::i;26966:758::-;-1:-1:-1;;;;;27376:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;27426:1;27411:12;;:16;27376:51;27373:351;;;11420:5;27461:12;;27452:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;27445:42;;27550:12;;27532:15;;27525:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;27503:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;27630:12:0;;27611:16;;27604:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;27581:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27696:12:0;;27684:9;;27677:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;27661:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;27373:351:0;27755:8;;27752:93;;27787:42;27803:4;27817;27824;27787:15;:42::i;:::-;27867:14;27877:4;27867:14;;:::i;:::-;;;25813:2080;27905:33;27921:4;27927:2;27931:6;27905:15;:33::i;:::-;22437:5509;;;;22358:5588;;;:::o;20035:207::-;-1:-1:-1;;;;;20123:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;20123:52:0;;;;;;;;;;20191:43;;29184:51:1;;;29251:18;;;29244:50;20191:43:0;;29157:18:1;20191:43:0;;;;;;;20035:207;;:::o;20823:236::-;-1:-1:-1;;;;;20906:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;20906:39:0;;;;;;;20956;20906:31;:39;20956:26;:39::i;29182:1382::-;29223:23;29249:24;29267:4;29249:9;:24::i;:::-;29223:50;;29284:25;29355:12;;29333:19;;29312:18;;:40;;;;:::i;:::-;:55;;;;:::i;:::-;29284:83;-1:-1:-1;29391:20:0;;;:46;;-1:-1:-1;29415:22:0;;29391:46;29388:60;;;29440:7;;29182:1382::o;29388:60::-;29481:18;;:23;;29502:2;29481:23;:::i;:::-;29463:15;:41;29460:113;;;29538:18;;:23;;29559:2;29538:23;:::i;:::-;29520:41;;29460:113;29585:12;29667:23;29752:1;29732:17;29711:18;;29693:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;29667:86;-1:-1:-1;29774:51:0;29791:33;29667:86;29791:15;:33;:::i;:::-;29774:16;:51::i;:::-;30033:18;;29868:21;;;;29847:18;;30033:20;;30052:1;;30033:20;:::i;:::-;30012:42;;:17;:42;:::i;:::-;29989:19;;29976:32;;:10;:32;:::i;:::-;:79;;;;:::i;:::-;29949:106;;30066:17;30155:1;30136:18;;:20;;;;:::i;:::-;30115:42;;:17;:42;:::i;:::-;30099:12;;30086:25;;:10;:25;:::i;:::-;:72;;;;:::i;:::-;30066:92;-1:-1:-1;30190:28:0;30066:92;30190:16;:28;:::i;:::-;30171:47;;;;:::i;:::-;30264:1;30243:18;:22;;;30276:19;:23;;;30310:12;:16;30171:47;-1:-1:-1;30350:19:0;;;;;:42;;;30391:1;30373:15;:19;30350:42;30347:119;;;30408:46;30421:15;30438;30408:12;:46::i;:::-;30499:17;;30491:65;;-1:-1:-1;;;;;30499:17:0;;;;30530:21;;30491:65;;;;30530:21;30499:17;30491:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29182:1382:0:o;6622:614::-;-1:-1:-1;;;;;6762:20:0;;6754:70;;;;-1:-1:-1;;;6754:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6843:23:0;;6835:71;;;;-1:-1:-1;;;6835:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6943:17:0;;6919:21;6943:17;;;;;;;;;;;6979:23;;;;6971:74;;;;-1:-1:-1;;;6971:74:0;;29507:2:1;6971:74:0;;;29489:21:1;29546:2;29526:18;;;29519:30;29585:34;29565:18;;;29558:62;-1:-1:-1;;;29636:18:1;;;29629:36;29682:19;;6971:74:0;29305:402:1;6971:74:0;-1:-1:-1;;;;;7081:17:0;;;:9;:17;;;;;;;;;;;7101:22;;;7081:42;;7145:20;;;;;;;;:30;;7117:6;;7081:9;7145:30;;7117:6;;7145:30;:::i;:::-;;;;;;;;7210:9;-1:-1:-1;;;;;7193:35:0;7202:6;-1:-1:-1;;;;;7193:35:0;;7221:6;7193:35;;;;160:25:1;;148:2;133:18;;14:177;7193:35:0;;;;;;;;6743:493;6622:614;;;:::o;36660:382::-;36748:16;;;36762:1;36748:16;;;;;;;;36724:21;;36748:16;;;;;;;;-1:-1:-1;;36785:9:0;;:16;;;-1:-1:-1;;;36785:16:0;;;;36724:40;;-1:-1:-1;;;;;;36785:9:0;;;;:14;;-1:-1:-1;36785:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36775:4;36780:1;36775:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;36775:26:0;;;-1:-1:-1;;;;;36775:26:0;;;;;36830:4;36812;36817:1;36812:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36812:23:0;;;:7;;;;;;;;;:23;36848:9;;:186;;-1:-1:-1;;;36848:186:0;;:9;;;:60;;36916:11;;36848:186;;:9;;36959:4;;36986:6;;37008:15;;36848:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33993:1252;34079:15;34062:14;:32;;;34115:20;:38;34191:6;;34184:39;;-1:-1:-1;;;34184:39:0;;34217:4;34184:39;;;962:51:1;-1:-1:-1;;;;;;;34191:6:0;;34184:24;;935:18:1;;34184:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34164:59;;34234:20;34257:24;34275:4;34257:9;:24::i;:::-;34234:47;;34292:16;34342:5;34323:16;;34311:9;:28;;;;:::i;:::-;:36;;;;:::i;:::-;34494:6;;34518:9;;34487:52;;-1:-1:-1;;;34487:52:0;;-1:-1:-1;;;;;34518:9:0;;;34487:52;;;15437:51:1;15504:18;;;15497:34;;;34292:55:0;;-1:-1:-1;34386:21:0;;34494:6;;;34487:22;;15410:18:1;;34487:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;34585:9:0;;:234;;-1:-1:-1;;;34585:234:0;;-1:-1:-1;;;;;34585:9:0;;;;:28;;:234;;34636:4;;34656:8;;34585:9;;;;34636:4;;34793:15;;34585:234;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34832:25;34887:12;34860:24;34878:4;34860:9;:24::i;:::-;:39;;;;:::i;:::-;34832:67;-1:-1:-1;34913:21:0;;34910:118;;34950:66;34974:4;34989:6;34998:17;34950:15;:66::i;:::-;35040:23;35066:41;35090:17;35066:21;:41;:::i;:::-;35040:67;-1:-1:-1;35123:19:0;;35120:80;;35158:30;35172:15;35158:13;:30::i;:::-;35217:20;;35228:8;;35217:20;;;;;34041:1204;;;;;;33993:1252::o;38141:1006::-;38186:12;38201:9;:7;:9::i;:::-;38186:24;;38221:27;38309:17;;38302:4;38282:17;;38259:19;;38252:4;:26;;;;:::i;:::-;38251:48;;;;:::i;:::-;:55;;;;:::i;:::-;:75;;;;:::i;:::-;38221:105;;38337:28;38427:18;;38420:4;38399:18;;38376:19;;38369:4;:26;;;;:::i;:::-;38368:49;;;;:::i;:::-;:56;;;;:::i;:::-;:77;;;;:::i;:::-;38337:108;;38481:17;;38459:19;:39;38456:109;;;38536:17;;38514:39;;38456:109;38601:18;;38578:20;:41;38575:113;;;-1:-1:-1;38658:18:0;;38575:113;38753:3;38731:19;38716:12;;:34;;;;:::i;:::-;:40;;;;:::i;:::-;38698:15;:58;;;38787:12;;38826:3;;38787:30;;;:::i;:::-;38786:37;;38821:2;38786:37;:::i;:::-;:43;;;;:::i;:::-;38767:16;:62;;;38886:15;;38852:12;;38886:15;;38852:31;;;:::i;:::-;:49;;;;:::i;:::-;38840:9;:61;38945:13;;38984:3;;38945:36;;38961:20;;38945:36;:::i;:::-;:42;;;;:::i;:::-;38926:16;:61;;;39019:13;;39060:3;;39019:32;;;:::i;:::-;39018:39;;39055:2;39018:39;:::i;:::-;:45;;;;:::i;:::-;38998:17;:65;;;39123:16;;39087:13;;39123:16;;39087:33;;;:::i;:::-;:52;;;;:::i;:::-;39074:10;:65;-1:-1:-1;;;38141:1006:0:o;28082:573::-;28234:16;;;28248:1;28234:16;;;;;;;;28210:21;;28234:16;;;;;;;;;;-1:-1:-1;28234:16:0;28210:40;;28279:4;28261;28266:1;28261:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28261:23:0;;;:7;;;;;;;;;;:23;;;;28305:9;;:16;;;-1:-1:-1;;;28305:16:0;;;;:9;;;;;:14;;:16;;;;;28261:7;;28305:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28295:4;28300:1;28295:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28295:26:0;;;:7;;;;;;;;;:26;28366:9;;28334:56;;28351:4;;28366:9;28378:11;28334:8;:56::i;:::-;28429:9;;:218;;-1:-1:-1;;;28429:218:0;;-1:-1:-1;;;;;28429:9:0;;;;:60;;:218;;28504:11;;28429:9;;28574:4;;28601;;28621:15;;28429:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28137:518;28082:573;:::o;28667:507::-;28847:9;;28815:56;;28832:4;;-1:-1:-1;;;;;28847:9:0;28859:11;28815:8;:56::i;:::-;28914:9;;:252;;-1:-1:-1;;;28914:252:0;;-1:-1:-1;;;;;28914:9:0;;;;:25;;28947:9;;28914:252;;28980:4;;29000:11;;28914:9;;;;28980:4;;29140:15;;28914:252;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28667:507;;:::o;196:597:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;1024:131::-;-1:-1:-1;;;;;1099:31:1;;1089:42;;1079:70;;1145:1;1142;1135:12;1079:70;1024:131;:::o;1160:315::-;1228:6;1236;1289:2;1277:9;1268:7;1264:23;1260:32;1257:52;;;1305:1;1302;1295:12;1257:52;1344:9;1331:23;1363:31;1388:5;1363:31;:::i;:::-;1413:5;1465:2;1450:18;;;;1437:32;;-1:-1:-1;;;1160:315:1:o;1672:118::-;1758:5;1751:13;1744:21;1737:5;1734:32;1724:60;;1780:1;1777;1770:12;1795:241;1851:6;1904:2;1892:9;1883:7;1879:23;1875:32;1872:52;;;1920:1;1917;1910:12;1872:52;1959:9;1946:23;1978:28;2000:5;1978:28;:::i;:::-;2025:5;1795:241;-1:-1:-1;;;1795:241:1:o;2041:247::-;2100:6;2153:2;2141:9;2132:7;2128:23;2124:32;2121:52;;;2169:1;2166;2159:12;2121:52;2208:9;2195:23;2227:31;2252:5;2227:31;:::i;2293:456::-;2370:6;2378;2386;2439:2;2427:9;2418:7;2414:23;2410:32;2407:52;;;2455:1;2452;2445:12;2407:52;2494:9;2481:23;2513:31;2538:5;2513:31;:::i;:::-;2563:5;-1:-1:-1;2620:2:1;2605:18;;2592:32;2633:33;2592:32;2633:33;:::i;:::-;2293:456;;2685:7;;-1:-1:-1;;;2739:2:1;2724:18;;;;2711:32;;2293:456::o;2754:180::-;2813:6;2866:2;2854:9;2845:7;2841:23;2837:32;2834:52;;;2882:1;2879;2872:12;2834:52;-1:-1:-1;2905:23:1;;2754:180;-1:-1:-1;2754:180:1:o;2939:315::-;3007:6;3015;3068:2;3056:9;3047:7;3043:23;3039:32;3036:52;;;3084:1;3081;3074:12;3036:52;3120:9;3107:23;3097:33;;3180:2;3169:9;3165:18;3152:32;3193:31;3218:5;3193:31;:::i;:::-;3243:5;3233:15;;;2939:315;;;;;:::o;3656:750::-;3748:6;3756;3764;3817:2;3805:9;3796:7;3792:23;3788:32;3785:52;;;3833:1;3830;3823:12;3785:52;3873:9;3860:23;3902:18;3943:2;3935:6;3932:14;3929:34;;;3959:1;3956;3949:12;3929:34;3997:6;3986:9;3982:22;3972:32;;4042:7;4035:4;4031:2;4027:13;4023:27;4013:55;;4064:1;4061;4054:12;4013:55;4104:2;4091:16;4130:2;4122:6;4119:14;4116:34;;;4146:1;4143;4136:12;4116:34;4201:7;4194:4;4184:6;4181:1;4177:14;4173:2;4169:23;4165:34;4162:47;4159:67;;;4222:1;4219;4212:12;4159:67;4253:4;4245:13;;;;-1:-1:-1;4277:6:1;-1:-1:-1;;4318:20:1;;4305:34;4348:28;4305:34;4348:28;:::i;:::-;4395:5;4385:15;;;3656:750;;;;;:::o;4411:377::-;4485:6;4493;4501;4554:2;4542:9;4533:7;4529:23;4525:32;4522:52;;;4570:1;4567;4560:12;4522:52;4606:9;4593:23;4583:33;;4663:2;4652:9;4648:18;4635:32;4625:42;;4717:2;4706:9;4702:18;4689:32;4730:28;4752:5;4730:28;:::i;4793:382::-;4858:6;4866;4919:2;4907:9;4898:7;4894:23;4890:32;4887:52;;;4935:1;4932;4925:12;4887:52;4974:9;4961:23;4993:31;5018:5;4993:31;:::i;:::-;5043:5;-1:-1:-1;5100:2:1;5085:18;;5072:32;5113:30;5072:32;5113:30;:::i;5180:316::-;5257:6;5265;5273;5326:2;5314:9;5305:7;5301:23;5297:32;5294:52;;;5342:1;5339;5332:12;5294:52;-1:-1:-1;;5365:23:1;;;5435:2;5420:18;;5407:32;;-1:-1:-1;5486:2:1;5471:18;;;5458:32;;5180:316;-1:-1:-1;5180:316:1:o;5501:388::-;5569:6;5577;5630:2;5618:9;5609:7;5605:23;5601:32;5598:52;;;5646:1;5643;5636:12;5598:52;5685:9;5672:23;5704:31;5729:5;5704:31;:::i;:::-;5754:5;-1:-1:-1;5811:2:1;5796:18;;5783:32;5824:33;5783:32;5824:33;:::i;5894:461::-;5947:3;5985:5;5979:12;6012:6;6007:3;6000:19;6038:4;6067:2;6062:3;6058:12;6051:19;;6104:2;6097:5;6093:14;6125:1;6135:195;6149:6;6146:1;6143:13;6135:195;;;6214:13;;-1:-1:-1;;;;;6210:39:1;6198:52;;6270:12;;;;6305:15;;;;6246:1;6164:9;6135:195;;;-1:-1:-1;6346:3:1;;5894:461;-1:-1:-1;;;;;5894:461:1:o;6360:261::-;6539:2;6528:9;6521:21;6502:4;6559:56;6611:2;6600:9;6596:18;6588:6;6559:56;:::i;6626:584::-;6727:6;6735;6743;6751;6759;6767;6820:3;6808:9;6799:7;6795:23;6791:33;6788:53;;;6837:1;6834;6827:12;6788:53;6876:9;6863:23;6895:28;6917:5;6895:28;:::i;:::-;6942:5;6994:2;6979:18;;6966:32;;-1:-1:-1;7045:2:1;7030:18;;7017:32;;7096:2;7081:18;;7068:32;;-1:-1:-1;7147:3:1;7132:19;;7119:33;;-1:-1:-1;7199:3:1;7184:19;7171:33;;-1:-1:-1;6626:584:1;-1:-1:-1;;;6626:584:1:o;7215:380::-;7294:1;7290:12;;;;7337;;;7358:61;;7412:4;7404:6;7400:17;7390:27;;7358:61;7465:2;7457:6;7454:14;7434:18;7431:38;7428:161;;7511:10;7506:3;7502:20;7499:1;7492:31;7546:4;7543:1;7536:15;7574:4;7571:1;7564:15;7428:161;;7215:380;;;:::o;7600:356::-;7802:2;7784:21;;;7821:18;;;7814:30;7880:34;7875:2;7860:18;;7853:62;7947:2;7932:18;;7600:356::o;8370:127::-;8431:10;8426:3;8422:20;8419:1;8412:31;8462:4;8459:1;8452:15;8486:4;8483:1;8476:15;8502:422;8591:1;8634:5;8591:1;8648:270;8669:7;8659:8;8656:21;8648:270;;;8728:4;8724:1;8720:6;8716:17;8710:4;8707:27;8704:53;;;8737:18;;:::i;:::-;8787:7;8777:8;8773:22;8770:55;;;8807:16;;;;8770:55;8886:22;;;;8846:15;;;;8648:270;;;8652:3;8502:422;;;;;:::o;8929:806::-;8978:5;9008:8;8998:80;;-1:-1:-1;9049:1:1;9063:5;;8998:80;9097:4;9087:76;;-1:-1:-1;9134:1:1;9148:5;;9087:76;9179:4;9197:1;9192:59;;;;9265:1;9260:130;;;;9172:218;;9192:59;9222:1;9213:10;;9236:5;;;9260:130;9297:3;9287:8;9284:17;9281:43;;;9304:18;;:::i;:::-;-1:-1:-1;;9360:1:1;9346:16;;9375:5;;9172:218;;9474:2;9464:8;9461:16;9455:3;9449:4;9446:13;9442:36;9436:2;9426:8;9423:16;9418:2;9412:4;9409:12;9405:35;9402:77;9399:159;;;-1:-1:-1;9511:19:1;;;9543:5;;9399:159;9590:34;9615:8;9609:4;9590:34;:::i;:::-;9660:6;9656:1;9652:6;9648:19;9639:7;9636:32;9633:58;;;9671:18;;:::i;:::-;9709:20;;8929:806;-1:-1:-1;;;8929:806:1:o;9740:140::-;9798:5;9827:47;9868:4;9858:8;9854:19;9848:4;9827:47;:::i;9885:168::-;9925:7;9991:1;9987;9983:6;9979:14;9976:1;9973:21;9968:1;9961:9;9954:17;9950:45;9947:71;;;9998:18;;:::i;:::-;-1:-1:-1;10038:9:1;;9885:168::o;10058:217::-;10098:1;10124;10114:132;;10168:10;10163:3;10159:20;10156:1;10149:31;10203:4;10200:1;10193:15;10231:4;10228:1;10221:15;10114:132;-1:-1:-1;10260:9:1;;10058:217::o;11450:128::-;11490:3;11521:1;11517:6;11514:1;11511:13;11508:39;;;11527:18;;:::i;:::-;-1:-1:-1;11563:9:1;;11450:128::o;11583:402::-;11785:2;11767:21;;;11824:2;11804:18;;;11797:30;11863:34;11858:2;11843:18;;11836:62;-1:-1:-1;;;11929:2:1;11914:18;;11907:36;11975:3;11960:19;;11583:402::o;12423:127::-;12484:10;12479:3;12475:20;12472:1;12465:31;12515:4;12512:1;12505:15;12539:4;12536:1;12529:15;12555:135;12594:3;12615:17;;;12612:43;;12635:18;;:::i;:::-;-1:-1:-1;12682:1:1;12671:13;;12555:135::o;15074:184::-;15144:6;15197:2;15185:9;15176:7;15172:23;15168:32;15165:52;;;15213:1;15210;15203:12;15165:52;-1:-1:-1;15236:16:1;;15074:184;-1:-1:-1;15074:184:1:o;15542:245::-;15609:6;15662:2;15650:9;15641:7;15637:23;15633:32;15630:52;;;15678:1;15675;15668:12;15630:52;15710:9;15704:16;15729:28;15751:5;15729:28;:::i;16204:251::-;16274:6;16327:2;16315:9;16306:7;16302:23;16298:32;16295:52;;;16343:1;16340;16333:12;16295:52;16375:9;16369:16;16394:31;16419:5;16394:31;:::i;17580:607::-;-1:-1:-1;;;;;17939:15:1;;;17921:34;;17986:2;17971:18;;17964:34;;;;18029:2;18014:18;;18007:34;;;;18072:2;18057:18;;18050:34;;;;18121:15;;;18115:3;18100:19;;18093:44;17901:3;18153:19;;18146:35;;;;17870:3;17855:19;;17580:607::o;18192:306::-;18280:6;18288;18296;18349:2;18337:9;18328:7;18324:23;18320:32;18317:52;;;18365:1;18362;18355:12;18317:52;18394:9;18388:16;18378:26;;18444:2;18433:9;18429:18;18423:25;18413:35;;18488:2;18477:9;18473:18;18467:25;18457:35;;18192:306;;;;;:::o;20226:125::-;20266:4;20294:1;20291;20288:8;20285:34;;;20299:18;;:::i;:::-;-1:-1:-1;20336:9:1;;20226:125::o;24370:245::-;24449:6;24457;24510:2;24498:9;24489:7;24485:23;24481:32;24478:52;;;24526:1;24523;24516:12;24478:52;-1:-1:-1;;24549:16:1;;24605:2;24590:18;;;24584:25;24549:16;;24584:25;;-1:-1:-1;24370:245:1:o;25428:401::-;25630:2;25612:21;;;25669:2;25649:18;;;25642:30;25708:34;25703:2;25688:18;;25681:62;-1:-1:-1;;;25774:2:1;25759:18;;25752:35;25819:3;25804:19;;25428:401::o;25834:399::-;26036:2;26018:21;;;26075:2;26055:18;;;26048:30;26114:34;26109:2;26094:18;;26087:62;-1:-1:-1;;;26180:2:1;26165:18;;26158:33;26223:3;26208:19;;25834:399::o;29844:510::-;30115:6;30104:9;30097:25;30158:3;30153:2;30142:9;30138:18;30131:31;30078:4;30179:57;30231:3;30220:9;30216:19;30208:6;30179:57;:::i;:::-;-1:-1:-1;;;;;30272:32:1;;;;30267:2;30252:18;;30245:60;-1:-1:-1;30336:2:1;30321:18;30314:34;30171:65;29844:510;-1:-1:-1;;29844:510:1:o;30359:582::-;30658:6;30647:9;30640:25;30701:6;30696:2;30685:9;30681:18;30674:34;30744:3;30739:2;30728:9;30724:18;30717:31;30621:4;30765:57;30817:3;30806:9;30802:19;30794:6;30765:57;:::i;:::-;-1:-1:-1;;;;;30858:32:1;;;;30853:2;30838:18;;30831:60;-1:-1:-1;30922:3:1;30907:19;30900:35;30757:65;30359:582;-1:-1:-1;;;30359:582:1:o

Swarm Source

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