ETH Price: $3,107.30 (-0.27%)

Token

Green Text (GREEN)
 

Overview

Max Total Supply

100,000,000,000 GREEN

Holders

196

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
ninjaklan.eth
Balance
190,000,000 GREEN

Value
$0.00
0xa8da5912dB11C6cAA2762473f0B5D3Dba6Aff992
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:
gtxt

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-21
*/

//https://t.me/GreentextERC20
//https://greentext.lol/
//https://twitter.com/greentexterc

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

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 _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), 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
        );
}

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

contract gtxt is ERC20, Ownable {

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address operationsAddress;
    address devAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping (address => bool) public boughtEarly;
    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 = false;

    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 tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

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

    // 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 UpdatedOperationsADD(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event BuyBackTriggered(uint256 amount);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

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

    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20("Green Text", "GREEN") {

        address newOwner = msg.sender; // can leave alone if owner is deployer.

        IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dexRouter = _dexRouter;

        // create pair
        lpPair = IDexFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);

        uint256 totalSupply = 100000000000 * 1e18;

        maxBuyAmount = totalSupply * 5 / 1000;
        maxSellAmount = totalSupply * 5 / 1000;
        maxWalletAmount = totalSupply * 1 / 100;
        swapTokensAtAmount = totalSupply * 3 / 1000;

        buyOperationsFee = 15;
        buyLiquidityFee = 0;
        buyDevFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee;

        sellOperationsFee = 35;
        sellLiquidityFee = 0;
        sellDevFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee;

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        operationsAddress = address(newOwner);
        devAddress = address(newOwner);

        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    // only enable if no plan to airdrop

    function startTrading(uint256 deadBlocks) external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + deadBlocks;
        emit EnabledTrading();
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        emit RemovedLimits();
    }

    function manageBoughtEarly(address wallet, bool flag) external onlyOwner {
        boughtEarly[wallet] = flag;
    }

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

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 2 / 1000)/1e18, "Cannot set max buy amount lower than 0.2%");
        maxBuyAmount = newNum * (10**18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

    function UpdateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 2 / 1000)/1e18, "Cannot set max sell amount lower than 0.2%");
        maxSellAmount = newNum * (10**18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 3 / 1000)/1e18, "Cannot set max wallet amount lower than 0.3%");
        maxWalletAmount = newNum * (10**18);
        emit UpdatedMaxWalletAmount(maxWalletAmount);
    }

    // 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 airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 600, "Can only airdrop 600 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i];
            super._transfer(msg.sender, wallet, amount);
        }
    }

    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 updateBuyTaxes(uint256 _operationsFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee;
    }

    function updateSellTaxes(uint256 _operationsFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee;
    }

    function lowerfees() external onlyOwner {
        sellOperationsFee = 1;
        sellLiquidityFee = 0;
        sellDevFee = 1;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee;

        buyOperationsFee = 1;
        buyLiquidityFee = 0;
        buyDevFee = 1;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee;
    }

    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(blockForPenaltyEnd > 0){
            require(!boughtEarly[from] || 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) <= maxWalletAmount, "Cannot Exceed max wallet");
                }
                //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) <= maxWalletAmount, "Cannot Exceed max wallet");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.
            if(earlyBuyPenaltyInEffect() && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && buyTotalFees > 0){

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

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

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

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / 100;
        	    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(operationsAddress),
            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(devAddress).call{value: ethForDev}("");

        (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), "Can't withdraw native tokens");
        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 setOperationsADD(address _operationsAddress) external onlyOwner {
        require(_operationsAddress != address(0), "_operationsAddress address cannot be 0");
        operationsAddress = payable(_operationsAddress);
    }

    function setDevADD(address _devAddress) external onlyOwner {
        require(_devAddress != address(0), "_devAddress address cannot be 0");
        devAddress = payable(_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);
    }

    // useful for buybacks or to reclaim any ETH on the contract in a way that helps holders.
    function buyBackTokens(uint256 amountInWei) external onlyOwner {
        require(amountInWei <= 10 ether, "May not buy more than 10 ETH in a single buy to reduce sandwich attacks");

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

        // make the swap
        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}(
            0, // accept any amount of Ethereum
            path,
            address(0xdead),
            block.timestamp
        );
        emit BuyBackTriggered(amountInWei);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","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":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":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":"UpdatedOperationsADD","type":"event"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"SetAllBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"UpdateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":[{"internalType":"uint256","name":"amountInWei","type":"uint256"}],"name":"buyBackTokens","outputs":[],"stateMutability":"nonpayable","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":"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":"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":"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":[{"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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lowerfees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"manageBoughtEarly","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":"maxWalletAmount","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevADD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsADD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"deadBlocks","type":"uint256"}],"name":"startTrading","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":"updateBuyTaxes","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":"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":"updateSellTaxes","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"}]

60806040526000600e556012805462ffffff191660011790556014805460ff191690553480156200002f57600080fd5b506040518060400160405280600a81526020016911dc99595b8815195e1d60b21b8152506040518060400160405280600581526020016423a922a2a760d91b81525081600390816200008291906200082c565b5060046200009182826200082c565b5050506000620000a66200042660201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062004434833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa1580156200014d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001739190620008f8565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e79190620008f8565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000235573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025b9190620008f8565b600a80546001600160a01b0319166001600160a01b03929092169182179055620002879060016200042a565b600a54620002a0906001600160a01b031660016200048d565b6c01431e0fae6d7217caa00000006103e8620002be82600562000940565b620002ca919062000960565b6006556103e8620002dd82600562000940565b620002e9919062000960565b6007556064620002fb82600162000940565b62000307919062000960565b6008556103e86200031a82600362000940565b62000326919062000960565b600b55600f6016819055600060178190556018819055906200034a90829062000983565b62000356919062000983565b6015556023601a8190556000601b819055601c819055906200037a90829062000983565b62000386919062000983565b601955620003968360016200042a565b620003a33060016200042a565b620003b261dead60016200042a565b620003bf836001620004f9565b620003cc306001620004f9565b620003db61dead6001620004f9565b600c80546001600160a01b0385166001600160a01b03199182168117909255600d80549091169091179055620004128382620005a5565b6200041d836200068a565b50505062000999565b3390565b6001600160a01b038216600081815260216020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602260205260409020805460ff1916821515179055620004bd82826200042a565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620005485760405162461bcd60e51b815260206004820181905260248201526000805160206200441483398151915260448201526064015b60405180910390fd5b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005fd5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200053f565b806002600082825462000611919062000983565b90915550506001600160a01b038216600090815260208190526040812080548392906200064090849062000983565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006d55760405162461bcd60e51b815260206004820181905260248201526000805160206200441483398151915260448201526064016200053f565b6001600160a01b0381166200073c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200053f565b6005546040516001600160a01b038084169216906000805160206200443483398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007b257607f821691505b602082108103620007d357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200082757600081815260208120601f850160051c81016020861015620008025750805b601f850160051c820191505b8181101562000823578281556001016200080e565b5050505b505050565b81516001600160401b0381111562000848576200084862000787565b62000860816200085984546200079d565b84620007d9565b602080601f8311600181146200089857600084156200087f5750858301515b600019600386901b1c1916600185901b17855562000823565b600085815260208120601f198616915b82811015620008c957888601518255948401946001909101908401620008a8565b5085821015620008e85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200090b57600080fd5b81516001600160a01b03811681146200092357600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200095a576200095a6200092a565b92915050565b6000826200097e57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200095a576200095a6200092a565b613a6b80620009a96000396000f3fe6080604052600436106103c75760003560e01c80638da5cb5b116101f2578063c876d0b91161010d578063ecea07b4116100a0578063f5648a4f1161006f578063f5648a4f14610af5578063f637434214610b0a578063fb002c9714610b20578063fc155d1d14610b3657600080fd5b8063ecea07b414610a94578063ee40166e14610aa9578063f11a24d314610abf578063f2fde38b14610ad557600080fd5b8063e2f45605116100dc578063e2f4560514610a29578063e800dff714610a3f578063e884f26014610a5f578063e9ee183014610a7457600080fd5b8063c876d0b914610993578063d257b34f146109ad578063d85ba063146109cd578063dd62ed3e146109e357600080fd5b8063a62068ce11610185578063b62496f511610154578063b62496f514610904578063bbc0c74214610934578063c024666814610953578063c18bc1951461097357600080fd5b8063a62068ce14610898578063a9059cbb146108ae578063aa4bde28146108ce578063b4337b4e146108e457600080fd5b80639cf8384b116101c15780639cf8384b1461082c5780639fccce321461084c578063a0d82dc514610862578063a457c2d71461087857600080fd5b80638da5cb5b146107c357806395d89b41146107e15780639a7a23d6146107f65780639c3b4fdc1461081657600080fd5b806351f205e4116102e2578063715018a6116102755780638508956011610244578063850895601461073d57806385ecfd281461075d57806388e765ff1461078d5780638c374ac1146107a357600080fd5b8063715018a6146106d3578063751039fc146106e85780637571336a146106fd5780638366e79a1461071d57600080fd5b80636a486a8e116102b15780636a486a8e146106515780636b0a894c146106675780636ddd17131461067d57806370a082311461069d57600080fd5b806351f205e4146105f957806358a6d5311461060e5780635a139dd41461062557806366d602ae1461063b57600080fd5b80632307b4411161035a57806339509351116103295780633950935114610589578063452ed4f1146105a95780634a62bb65146105c95780634f77f6c0146105e357600080fd5b80632307b4411461050d57806323b872dd1461052d5780632be32b611461054d578063313ce5671461056d57600080fd5b8063095ea7b311610396578063095ea7b31461047857806310d5de53146104a857806318160ddd146104d85780631a8145bb146104f757600080fd5b806302d2b353146103d357806306a1409f146103f557806306fdde03146104155780630758d9241461044057600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103f36103ee366004613395565b610b56565b005b34801561040157600080fd5b506103f3610410366004613395565b610c6d565b34801561042157600080fd5b5061042a610d40565b60405161043791906133ae565b60405180910390f35b34801561044c57600080fd5b50600954610460906001600160a01b031681565b6040516001600160a01b039091168152602001610437565b34801561048457600080fd5b50610498610493366004613414565b610dd2565b6040519015158152602001610437565b3480156104b457600080fd5b506104986104c3366004613440565b60216020526000908152604090205460ff1681565b3480156104e457600080fd5b506002545b604051908152602001610437565b34801561050357600080fd5b506104e9601e5481565b34801561051957600080fd5b506103f361052836600461353a565b610de9565b34801561053957600080fd5b506104986105483660046135fc565b610f42565b34801561055957600080fd5b506103f3610568366004613395565b610fec565b34801561057957600080fd5b5060405160128152602001610437565b34801561059557600080fd5b506104986105a4366004613414565b6110f2565b3480156105b557600080fd5b50600a54610460906001600160a01b031681565b3480156105d557600080fd5b506012546104989060ff1681565b3480156105ef57600080fd5b506104e9601a5481565b34801561060557600080fd5b506103f361112e565b34801561061a57600080fd5b50600f544310610498565b34801561063157600080fd5b506104e960165481565b34801561064757600080fd5b506104e960075481565b34801561065d57600080fd5b506104e960195481565b34801561067357600080fd5b506104e960115481565b34801561068957600080fd5b506012546104989062010000900460ff1681565b3480156106a957600080fd5b506104e96106b8366004613440565b6001600160a01b031660009081526020819052604090205490565b3480156106df57600080fd5b506103f361123e565b3480156106f457600080fd5b506103f36112b2565b34801561070957600080fd5b506103f361071836600461364b565b61131d565b34801561072957600080fd5b50610498610738366004613684565b6113e5565b34801561074957600080fd5b506103f3610758366004613440565b6115ee565b34801561076957600080fd5b50610498610778366004613440565b60106020526000908152604090205460ff1681565b34801561079957600080fd5b506104e960065481565b3480156107af57600080fd5b506103f36107be3660046136b2565b611690565b3480156107cf57600080fd5b506005546001600160a01b0316610460565b3480156107ed57600080fd5b5061042a6116e6565b34801561080257600080fd5b506103f361081136600461364b565b6116f5565b34801561082257600080fd5b506104e960185481565b34801561083857600080fd5b506103f3610847366004613440565b6117e9565b34801561085857600080fd5b506104e9601f5481565b34801561086e57600080fd5b506104e9601c5481565b34801561088457600080fd5b50610498610893366004613414565b61189a565b3480156108a457600080fd5b506104e9600f5481565b3480156108ba57600080fd5b506104986108c9366004613414565b611933565b3480156108da57600080fd5b506104e960085481565b3480156108f057600080fd5b506103f36108ff3660046136b2565b611940565b34801561091057600080fd5b5061049861091f366004613440565b60226020526000908152604090205460ff1681565b34801561094057600080fd5b5060125461049890610100900460ff1681565b34801561095f57600080fd5b506103f361096e36600461364b565b611996565b34801561097f57600080fd5b506103f361098e366004613395565b611a1d565b34801561099f57600080fd5b506014546104989060ff1681565b3480156109b957600080fd5b506103f36109c8366004613395565b611b26565b3480156109d957600080fd5b506104e960155481565b3480156109ef57600080fd5b506104e96109fe366004613684565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a3557600080fd5b506104e9600b5481565b348015610a4b57600080fd5b506103f3610a5a36600461364b565b611c71565b348015610a6b57600080fd5b506103f3611cc6565b348015610a8057600080fd5b506103f3610a8f3660046136de565b611cfc565b348015610aa057600080fd5b506103f3611d9d565b348015610ab557600080fd5b506104e9600e5481565b348015610acb57600080fd5b506104e960175481565b348015610ae157600080fd5b506103f3610af0366004613440565b611e1d565b348015610b0157600080fd5b506103f3611f08565b348015610b1657600080fd5b506104e9601b5481565b348015610b2c57600080fd5b506104e9601d5481565b348015610b4257600080fd5b506103f3610b51366004613395565b611f74565b6005546001600160a01b03163314610b895760405162461bcd60e51b8152600401610b8090613764565b60405180910390fd5b670de0b6b3a76400006103e8610b9e60025490565b610ba99060026137af565b610bb391906137c6565b610bbd91906137c6565b811015610c1f5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610b80565b610c3181670de0b6b3a76400006137af565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e906020015b60405180910390a150565b6005546001600160a01b03163314610c975760405162461bcd60e51b8152600401610b8090613764565b601254610100900460ff1615610cef5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610b80565b6012805462ffff0019166201010017905543600e819055610d119082906137e8565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b606060038054610d4f906137fb565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7b906137fb565b8015610dc85780601f10610d9d57610100808354040283529160200191610dc8565b820191906000526020600020905b815481529060010190602001808311610dab57829003601f168201915b5050505050905090565b6000610ddf3384846121b8565b5060015b92915050565b6005546001600160a01b03163314610e135760405162461bcd60e51b8152600401610b8090613764565b8051825114610e645760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610b80565b610258825110610ed55760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610b80565b60005b8251811015610f3d576000838281518110610ef557610ef5613835565b602002602001015190506000838381518110610f1357610f13613835565b60200260200101519050610f283383836122dc565b50508080610f359061384b565b915050610ed8565b505050565b6000610f4f848484612431565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610fd45760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b80565b610fe185338584036121b8565b506001949350505050565b6005546001600160a01b031633146110165760405162461bcd60e51b8152600401610b8090613764565b670de0b6b3a76400006103e861102b60025490565b6110369060026137af565b61104091906137c6565b61104a91906137c6565b8110156110ab5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610b80565b6110bd81670de0b6b3a76400006137af565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001610c62565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ddf9185906111299086906137e8565b6121b8565b6005546001600160a01b031633146111585760405162461bcd60e51b8152600401610b8090613764565b600b543060009081526020819052604090205410156111e1576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610b80565b600a805460ff60a01b1916600160a01b1790556111fc612ef0565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146112685760405162461bcd60e51b8152600401610b8090613764565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146112dc5760405162461bcd60e51b8152600401610b8090613764565b6012805460ff199081169091556014805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146113475760405162461bcd60e51b8152600401610b8090613764565b806113ba57600a546001600160a01b03908116908316036113ba5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610b80565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6005546000906001600160a01b031633146114125760405162461bcd60e51b8152600401610b8090613764565b6001600160a01b0383166114685760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b80565b306001600160a01b038416036114c05760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610b80565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611507573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152b9190613864565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561157e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a2919061387d565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146116185760405162461bcd60e51b8152600401610b8090613764565b6001600160a01b03811661166e5760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610b80565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146116ba5760405162461bcd60e51b8152600401610b8090613764565b601683905560178290556018819055806116d483856137e8565b6116de91906137e8565b601555505050565b606060048054610d4f906137fb565b6005546001600160a01b0316331461171f5760405162461bcd60e51b8152600401610b8090613764565b600a546001600160a01b03908116908316036117a35760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b80565b6117ad82826130fd565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146118135760405162461bcd60e51b8152600401610b8090613764565b6001600160a01b0381166118785760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610b80565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561191c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b80565b61192933858584036121b8565b5060019392505050565b6000610ddf338484612431565b6005546001600160a01b0316331461196a5760405162461bcd60e51b8152600401610b8090613764565b601a839055601b829055601c8190558061198483856137e8565b61198e91906137e8565b601955505050565b6005546001600160a01b031633146119c05760405162461bcd60e51b8152600401610b8090613764565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611a475760405162461bcd60e51b8152600401610b8090613764565b670de0b6b3a76400006103e8611a5c60025490565b611a679060036137af565b611a7191906137c6565b611a7b91906137c6565b811015611adf5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610b80565b611af181670de0b6b3a76400006137af565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610c62565b6005546001600160a01b03163314611b505760405162461bcd60e51b8152600401610b8090613764565b620186a0611b5d60025490565b611b689060016137af565b611b7291906137c6565b811015611bdf5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b80565b6103e8611beb60025490565b611bf69060016137af565b611c0091906137c6565b811115611c6c5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610b80565b600b55565b6005546001600160a01b03163314611c9b5760405162461bcd60e51b8152600401610b8090613764565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611cf05760405162461bcd60e51b8152600401610b8090613764565b6014805460ff19169055565b6005546001600160a01b03163314611d265760405162461bcd60e51b8152600401610b8090613764565b60005b82811015611d97578160106000868685818110611d4857611d48613835565b9050602002016020810190611d5d9190613440565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611d8f8161384b565b915050611d29565b50505050565b6005546001600160a01b03163314611dc75760405162461bcd60e51b8152600401610b8090613764565b6001601a8190556000601b819055601c829055611de490826137e8565b611dee91906137e8565b60195560016016819055600060178190556018829055611e0e90826137e8565b611e1891906137e8565b601555565b6005546001600160a01b03163314611e475760405162461bcd60e51b8152600401610b8090613764565b6001600160a01b038116611eac5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b80565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611f325760405162461bcd60e51b8152600401610b8090613764565b604051600090339047908381818185875af1925050503d8060008114611d97576040519150601f19603f3d011682016040523d82523d6000602084013e611d97565b6005546001600160a01b03163314611f9e5760405162461bcd60e51b8152600401610b8090613764565b678ac7230489e8000081111561202c5760405162461bcd60e51b815260206004820152604760248201527f4d6179206e6f7420627579206d6f7265207468616e2031302045544820696e2060448201527f612073696e676c652062757920746f207265647563652073616e64776963682060648201526661747461636b7360c81b608482015260a401610b80565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612096573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ba919061389a565b816000815181106120cd576120cd613835565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061210157612101613835565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de9590849061214990600090869061dead9042906004016138fb565b6000604051808303818588803b15801561216257600080fd5b505af1158015612176573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d684820568826040516121ac91815260200190565b60405180910390a15050565b6001600160a01b03831661221a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b80565b6001600160a01b03821661227b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b80565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123025760405162461bcd60e51b8152600401610b8090613930565b6001600160a01b0382166123285760405162461bcd60e51b8152600401610b8090613975565b6001600160a01b038316600090815260208190526040902054818110156123a05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b80565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906123d79084906137e8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161242391815260200190565b60405180910390a350505050565b6001600160a01b0383166124575760405162461bcd60e51b8152600401610b8090613930565b6001600160a01b03821661247d5760405162461bcd60e51b8152600401610b8090613975565b600081116124cd5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610b80565b601254610100900460ff1661255e576001600160a01b038316600090815260208052604090205460ff168061251957506001600160a01b038216600090815260208052604090205460ff165b61255e5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b80565b600f5415612631576001600160a01b03831660009081526010602052604090205460ff16158061259b57506005546001600160a01b038381169116145b806125b057506001600160a01b03821661dead145b6126315760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610b80565b60125460ff1615612a4b576005546001600160a01b0384811691161480159061266857506005546001600160a01b03838116911614155b801561267c57506001600160a01b03821615155b801561269357506001600160a01b03821661dead14155b80156126b757506001600160a01b038316600090815260208052604090205460ff16155b80156126db57506001600160a01b038216600090815260208052604090205460ff16155b15612a4b5760145460ff16156127f4576009546001600160a01b038381169116148015906127175750600a546001600160a01b03838116911614155b156127f4576127276002436139b8565b32600090815260136020526040902054108015612765575061274a6002436139b8565b6001600160a01b038316600090815260136020526040902054105b6127cf5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610b80565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526022602052604090205460ff16801561283557506001600160a01b03821660009081526021602052604090205460ff16155b156129115760065481111561289d5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610b80565b6008546001600160a01b0383166000908152602081905260409020546128c390836137e8565b111561290c5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610b80565b612a4b565b6001600160a01b03821660009081526022602052604090205460ff16801561295257506001600160a01b03831660009081526021602052604090205460ff16155b156129bc5760075481111561290c5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610b80565b6001600160a01b03821660009081526021602052604090205460ff16612a4b576008546001600160a01b038316600090815260208190526040902054612a0290836137e8565b1115612a4b5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610b80565b30600090815260208190526040902054600b5481108015908190612a77575060125462010000900460ff165b8015612a8d5750600a54600160a01b900460ff16155b8015612ab257506001600160a01b03851660009081526022602052604090205460ff16155b8015612ad657506001600160a01b038516600090815260208052604090205460ff16155b8015612afa57506001600160a01b038416600090815260208052604090205460ff16155b15612b2857600a805460ff60a01b1916600160a01b179055612b1a612ef0565b600a805460ff60a01b191690555b6001600160a01b038516600090815260208052604090205460019060ff1680612b6857506001600160a01b038516600090815260208052604090205460ff165b15612b71575060005b60008115612edc57600f5443108015612ba257506001600160a01b03871660009081526022602052604090205460ff165b8015612bc757506001600160a01b03861660009081526022602052604090205460ff16155b8015612bd557506000601554115b15612d25576001600160a01b03861660009081526010602052604090205460ff16612c75576001600160a01b0386166000908152601060205260408120805460ff191660019081179091556011805491929091612c339084906137e8565b90915550506040516001600160a01b03871681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064612c8286600a6137af565b612c8c91906137c6565b905060155460175482612c9f91906137af565b612ca991906137c6565b601e6000828254612cba91906137e8565b9091555050601554601654612ccf90836137af565b612cd991906137c6565b601d6000828254612cea91906137e8565b9091555050601554601854612cff90836137af565b612d0991906137c6565b601f6000828254612d1a91906137e8565b90915550612ebe9050565b6001600160a01b03861660009081526022602052604090205460ff168015612d4f57506000601954115b15612de157606460195486612d6491906137af565b612d6e91906137c6565b9050601954601b5482612d8191906137af565b612d8b91906137c6565b601e6000828254612d9c91906137e8565b9091555050601954601a54612db190836137af565b612dbb91906137c6565b601d6000828254612dcc91906137e8565b9091555050601954601c54612cff90836137af565b6001600160a01b03871660009081526022602052604090205460ff168015612e0b57506000601554115b15612ebe57606460155486612e2091906137af565b612e2a91906137c6565b905060155460175482612e3d91906137af565b612e4791906137c6565b601e6000828254612e5891906137e8565b9091555050601554601654612e6d90836137af565b612e7791906137c6565b601d6000828254612e8891906137e8565b9091555050601554601854612e9d90836137af565b612ea791906137c6565b601f6000828254612eb891906137e8565b90915550505b8015612ecf57612ecf8730836122dc565b612ed981866139b8565b94505b612ee78787876122dc565b50505050505050565b3060009081526020819052604081205490506000601f54601d54601e54612f1791906137e8565b612f2191906137e8565b9050811580612f2e575080155b15612f37575050565b600b54612f459060146137af565b821115612f5d57600b54612f5a9060146137af565b91505b600080600283601e5486612f7191906137af565b612f7b91906137c6565b612f8591906137c6565b9050612f99612f9482866139b8565b61312b565b601e5447908190600090612faf906002906137c6565b612fb990876139b8565b601d54612fc690856137af565b612fd091906137c6565b905060006002601e54612fe391906137c6565b612fed90886139b8565b601f54612ffa90866137af565b61300491906137c6565b905061301081836137e8565b61301a90846139b8565b6000601e819055601d819055601f559250841580159061303a5750600083115b15613049576130498584613285565b600d546040516001600160a01b03909116908290600081818185875af1925050503d8060008114613096576040519150601f19603f3d011682016040523d82523d6000602084013e61309b565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d80600081146130eb576040519150601f19603f3d011682016040523d82523d6000602084013e6130f0565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602260205260409020805460ff19168215151790556117ad8282613339565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061316057613160613835565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156131b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131dd919061389a565b816001815181106131f0576131f0613835565b6001600160a01b03928316602091820292909201015260095461321691309116846121b8565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac9479061324f9085906000908690309042906004016139cb565b600060405180830381600087803b15801561326957600080fd5b505af115801561327d573d6000803e3d6000fd5b505050505050565b60095461329d9030906001600160a01b0316846121b8565b600954600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561330d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133329190613a07565b5050505050565b6001600160a01b038216600081815260216020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd674691016121ac565b6000602082840312156133a757600080fd5b5035919050565b600060208083528351808285015260005b818110156133db578581018301518582016040015282016133bf565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461341157600080fd5b50565b6000806040838503121561342757600080fd5b8235613432816133fc565b946020939093013593505050565b60006020828403121561345257600080fd5b813561345d816133fc565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156134a3576134a3613464565b604052919050565b600067ffffffffffffffff8211156134c5576134c5613464565b5060051b60200190565b600082601f8301126134e057600080fd5b813560206134f56134f0836134ab565b61347a565b82815260059290921b8401810191818101908684111561351457600080fd5b8286015b8481101561352f5780358352918301918301613518565b509695505050505050565b6000806040838503121561354d57600080fd5b823567ffffffffffffffff8082111561356557600080fd5b818501915085601f83011261357957600080fd5b813560206135896134f0836134ab565b82815260059290921b840181019181810190898411156135a857600080fd5b948201945b838610156135cf5785356135c0816133fc565b825294820194908201906135ad565b965050860135925050808211156135e557600080fd5b506135f2858286016134cf565b9150509250929050565b60008060006060848603121561361157600080fd5b833561361c816133fc565b9250602084013561362c816133fc565b929592945050506040919091013590565b801515811461341157600080fd5b6000806040838503121561365e57600080fd5b8235613669816133fc565b915060208301356136798161363d565b809150509250929050565b6000806040838503121561369757600080fd5b82356136a2816133fc565b91506020830135613679816133fc565b6000806000606084860312156136c757600080fd5b505081359360208301359350604090920135919050565b6000806000604084860312156136f357600080fd5b833567ffffffffffffffff8082111561370b57600080fd5b818601915086601f83011261371f57600080fd5b81358181111561372e57600080fd5b8760208260051b850101111561374357600080fd5b602092830195509350508401356137598161363d565b809150509250925092565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610de357610de3613799565b6000826137e357634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610de357610de3613799565b600181811c9082168061380f57607f821691505b60208210810361382f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b60006001820161385d5761385d613799565b5060010190565b60006020828403121561387657600080fd5b5051919050565b60006020828403121561388f57600080fd5b815161345d8161363d565b6000602082840312156138ac57600080fd5b815161345d816133fc565b600081518084526020808501945080840160005b838110156138f05781516001600160a01b0316875295820195908201906001016138cb565b509495945050505050565b84815260806020820152600061391460808301866138b7565b6001600160a01b03949094166040830152506060015292915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610de357610de3613799565b85815284602082015260a0604082015260006139ea60a08301866138b7565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613a1c57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220d1cefaaf40118b68411a299d4540d9976e9958ece48e43ed96fed6dbfbffc61d64736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103c75760003560e01c80638da5cb5b116101f2578063c876d0b91161010d578063ecea07b4116100a0578063f5648a4f1161006f578063f5648a4f14610af5578063f637434214610b0a578063fb002c9714610b20578063fc155d1d14610b3657600080fd5b8063ecea07b414610a94578063ee40166e14610aa9578063f11a24d314610abf578063f2fde38b14610ad557600080fd5b8063e2f45605116100dc578063e2f4560514610a29578063e800dff714610a3f578063e884f26014610a5f578063e9ee183014610a7457600080fd5b8063c876d0b914610993578063d257b34f146109ad578063d85ba063146109cd578063dd62ed3e146109e357600080fd5b8063a62068ce11610185578063b62496f511610154578063b62496f514610904578063bbc0c74214610934578063c024666814610953578063c18bc1951461097357600080fd5b8063a62068ce14610898578063a9059cbb146108ae578063aa4bde28146108ce578063b4337b4e146108e457600080fd5b80639cf8384b116101c15780639cf8384b1461082c5780639fccce321461084c578063a0d82dc514610862578063a457c2d71461087857600080fd5b80638da5cb5b146107c357806395d89b41146107e15780639a7a23d6146107f65780639c3b4fdc1461081657600080fd5b806351f205e4116102e2578063715018a6116102755780638508956011610244578063850895601461073d57806385ecfd281461075d57806388e765ff1461078d5780638c374ac1146107a357600080fd5b8063715018a6146106d3578063751039fc146106e85780637571336a146106fd5780638366e79a1461071d57600080fd5b80636a486a8e116102b15780636a486a8e146106515780636b0a894c146106675780636ddd17131461067d57806370a082311461069d57600080fd5b806351f205e4146105f957806358a6d5311461060e5780635a139dd41461062557806366d602ae1461063b57600080fd5b80632307b4411161035a57806339509351116103295780633950935114610589578063452ed4f1146105a95780634a62bb65146105c95780634f77f6c0146105e357600080fd5b80632307b4411461050d57806323b872dd1461052d5780632be32b611461054d578063313ce5671461056d57600080fd5b8063095ea7b311610396578063095ea7b31461047857806310d5de53146104a857806318160ddd146104d85780631a8145bb146104f757600080fd5b806302d2b353146103d357806306a1409f146103f557806306fdde03146104155780630758d9241461044057600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103f36103ee366004613395565b610b56565b005b34801561040157600080fd5b506103f3610410366004613395565b610c6d565b34801561042157600080fd5b5061042a610d40565b60405161043791906133ae565b60405180910390f35b34801561044c57600080fd5b50600954610460906001600160a01b031681565b6040516001600160a01b039091168152602001610437565b34801561048457600080fd5b50610498610493366004613414565b610dd2565b6040519015158152602001610437565b3480156104b457600080fd5b506104986104c3366004613440565b60216020526000908152604090205460ff1681565b3480156104e457600080fd5b506002545b604051908152602001610437565b34801561050357600080fd5b506104e9601e5481565b34801561051957600080fd5b506103f361052836600461353a565b610de9565b34801561053957600080fd5b506104986105483660046135fc565b610f42565b34801561055957600080fd5b506103f3610568366004613395565b610fec565b34801561057957600080fd5b5060405160128152602001610437565b34801561059557600080fd5b506104986105a4366004613414565b6110f2565b3480156105b557600080fd5b50600a54610460906001600160a01b031681565b3480156105d557600080fd5b506012546104989060ff1681565b3480156105ef57600080fd5b506104e9601a5481565b34801561060557600080fd5b506103f361112e565b34801561061a57600080fd5b50600f544310610498565b34801561063157600080fd5b506104e960165481565b34801561064757600080fd5b506104e960075481565b34801561065d57600080fd5b506104e960195481565b34801561067357600080fd5b506104e960115481565b34801561068957600080fd5b506012546104989062010000900460ff1681565b3480156106a957600080fd5b506104e96106b8366004613440565b6001600160a01b031660009081526020819052604090205490565b3480156106df57600080fd5b506103f361123e565b3480156106f457600080fd5b506103f36112b2565b34801561070957600080fd5b506103f361071836600461364b565b61131d565b34801561072957600080fd5b50610498610738366004613684565b6113e5565b34801561074957600080fd5b506103f3610758366004613440565b6115ee565b34801561076957600080fd5b50610498610778366004613440565b60106020526000908152604090205460ff1681565b34801561079957600080fd5b506104e960065481565b3480156107af57600080fd5b506103f36107be3660046136b2565b611690565b3480156107cf57600080fd5b506005546001600160a01b0316610460565b3480156107ed57600080fd5b5061042a6116e6565b34801561080257600080fd5b506103f361081136600461364b565b6116f5565b34801561082257600080fd5b506104e960185481565b34801561083857600080fd5b506103f3610847366004613440565b6117e9565b34801561085857600080fd5b506104e9601f5481565b34801561086e57600080fd5b506104e9601c5481565b34801561088457600080fd5b50610498610893366004613414565b61189a565b3480156108a457600080fd5b506104e9600f5481565b3480156108ba57600080fd5b506104986108c9366004613414565b611933565b3480156108da57600080fd5b506104e960085481565b3480156108f057600080fd5b506103f36108ff3660046136b2565b611940565b34801561091057600080fd5b5061049861091f366004613440565b60226020526000908152604090205460ff1681565b34801561094057600080fd5b5060125461049890610100900460ff1681565b34801561095f57600080fd5b506103f361096e36600461364b565b611996565b34801561097f57600080fd5b506103f361098e366004613395565b611a1d565b34801561099f57600080fd5b506014546104989060ff1681565b3480156109b957600080fd5b506103f36109c8366004613395565b611b26565b3480156109d957600080fd5b506104e960155481565b3480156109ef57600080fd5b506104e96109fe366004613684565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a3557600080fd5b506104e9600b5481565b348015610a4b57600080fd5b506103f3610a5a36600461364b565b611c71565b348015610a6b57600080fd5b506103f3611cc6565b348015610a8057600080fd5b506103f3610a8f3660046136de565b611cfc565b348015610aa057600080fd5b506103f3611d9d565b348015610ab557600080fd5b506104e9600e5481565b348015610acb57600080fd5b506104e960175481565b348015610ae157600080fd5b506103f3610af0366004613440565b611e1d565b348015610b0157600080fd5b506103f3611f08565b348015610b1657600080fd5b506104e9601b5481565b348015610b2c57600080fd5b506104e9601d5481565b348015610b4257600080fd5b506103f3610b51366004613395565b611f74565b6005546001600160a01b03163314610b895760405162461bcd60e51b8152600401610b8090613764565b60405180910390fd5b670de0b6b3a76400006103e8610b9e60025490565b610ba99060026137af565b610bb391906137c6565b610bbd91906137c6565b811015610c1f5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610b80565b610c3181670de0b6b3a76400006137af565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e906020015b60405180910390a150565b6005546001600160a01b03163314610c975760405162461bcd60e51b8152600401610b8090613764565b601254610100900460ff1615610cef5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610b80565b6012805462ffff0019166201010017905543600e819055610d119082906137e8565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b606060038054610d4f906137fb565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7b906137fb565b8015610dc85780601f10610d9d57610100808354040283529160200191610dc8565b820191906000526020600020905b815481529060010190602001808311610dab57829003601f168201915b5050505050905090565b6000610ddf3384846121b8565b5060015b92915050565b6005546001600160a01b03163314610e135760405162461bcd60e51b8152600401610b8090613764565b8051825114610e645760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610b80565b610258825110610ed55760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610b80565b60005b8251811015610f3d576000838281518110610ef557610ef5613835565b602002602001015190506000838381518110610f1357610f13613835565b60200260200101519050610f283383836122dc565b50508080610f359061384b565b915050610ed8565b505050565b6000610f4f848484612431565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610fd45760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b80565b610fe185338584036121b8565b506001949350505050565b6005546001600160a01b031633146110165760405162461bcd60e51b8152600401610b8090613764565b670de0b6b3a76400006103e861102b60025490565b6110369060026137af565b61104091906137c6565b61104a91906137c6565b8110156110ab5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610b80565b6110bd81670de0b6b3a76400006137af565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001610c62565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ddf9185906111299086906137e8565b6121b8565b6005546001600160a01b031633146111585760405162461bcd60e51b8152600401610b8090613764565b600b543060009081526020819052604090205410156111e1576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610b80565b600a805460ff60a01b1916600160a01b1790556111fc612ef0565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146112685760405162461bcd60e51b8152600401610b8090613764565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146112dc5760405162461bcd60e51b8152600401610b8090613764565b6012805460ff199081169091556014805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146113475760405162461bcd60e51b8152600401610b8090613764565b806113ba57600a546001600160a01b03908116908316036113ba5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610b80565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6005546000906001600160a01b031633146114125760405162461bcd60e51b8152600401610b8090613764565b6001600160a01b0383166114685760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b80565b306001600160a01b038416036114c05760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610b80565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611507573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152b9190613864565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561157e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a2919061387d565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146116185760405162461bcd60e51b8152600401610b8090613764565b6001600160a01b03811661166e5760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610b80565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146116ba5760405162461bcd60e51b8152600401610b8090613764565b601683905560178290556018819055806116d483856137e8565b6116de91906137e8565b601555505050565b606060048054610d4f906137fb565b6005546001600160a01b0316331461171f5760405162461bcd60e51b8152600401610b8090613764565b600a546001600160a01b03908116908316036117a35760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b80565b6117ad82826130fd565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146118135760405162461bcd60e51b8152600401610b8090613764565b6001600160a01b0381166118785760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610b80565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561191c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b80565b61192933858584036121b8565b5060019392505050565b6000610ddf338484612431565b6005546001600160a01b0316331461196a5760405162461bcd60e51b8152600401610b8090613764565b601a839055601b829055601c8190558061198483856137e8565b61198e91906137e8565b601955505050565b6005546001600160a01b031633146119c05760405162461bcd60e51b8152600401610b8090613764565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611a475760405162461bcd60e51b8152600401610b8090613764565b670de0b6b3a76400006103e8611a5c60025490565b611a679060036137af565b611a7191906137c6565b611a7b91906137c6565b811015611adf5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610b80565b611af181670de0b6b3a76400006137af565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610c62565b6005546001600160a01b03163314611b505760405162461bcd60e51b8152600401610b8090613764565b620186a0611b5d60025490565b611b689060016137af565b611b7291906137c6565b811015611bdf5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b80565b6103e8611beb60025490565b611bf69060016137af565b611c0091906137c6565b811115611c6c5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610b80565b600b55565b6005546001600160a01b03163314611c9b5760405162461bcd60e51b8152600401610b8090613764565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611cf05760405162461bcd60e51b8152600401610b8090613764565b6014805460ff19169055565b6005546001600160a01b03163314611d265760405162461bcd60e51b8152600401610b8090613764565b60005b82811015611d97578160106000868685818110611d4857611d48613835565b9050602002016020810190611d5d9190613440565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611d8f8161384b565b915050611d29565b50505050565b6005546001600160a01b03163314611dc75760405162461bcd60e51b8152600401610b8090613764565b6001601a8190556000601b819055601c829055611de490826137e8565b611dee91906137e8565b60195560016016819055600060178190556018829055611e0e90826137e8565b611e1891906137e8565b601555565b6005546001600160a01b03163314611e475760405162461bcd60e51b8152600401610b8090613764565b6001600160a01b038116611eac5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b80565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611f325760405162461bcd60e51b8152600401610b8090613764565b604051600090339047908381818185875af1925050503d8060008114611d97576040519150601f19603f3d011682016040523d82523d6000602084013e611d97565b6005546001600160a01b03163314611f9e5760405162461bcd60e51b8152600401610b8090613764565b678ac7230489e8000081111561202c5760405162461bcd60e51b815260206004820152604760248201527f4d6179206e6f7420627579206d6f7265207468616e2031302045544820696e2060448201527f612073696e676c652062757920746f207265647563652073616e64776963682060648201526661747461636b7360c81b608482015260a401610b80565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612096573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ba919061389a565b816000815181106120cd576120cd613835565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061210157612101613835565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de9590849061214990600090869061dead9042906004016138fb565b6000604051808303818588803b15801561216257600080fd5b505af1158015612176573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d684820568826040516121ac91815260200190565b60405180910390a15050565b6001600160a01b03831661221a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b80565b6001600160a01b03821661227b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b80565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123025760405162461bcd60e51b8152600401610b8090613930565b6001600160a01b0382166123285760405162461bcd60e51b8152600401610b8090613975565b6001600160a01b038316600090815260208190526040902054818110156123a05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b80565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906123d79084906137e8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161242391815260200190565b60405180910390a350505050565b6001600160a01b0383166124575760405162461bcd60e51b8152600401610b8090613930565b6001600160a01b03821661247d5760405162461bcd60e51b8152600401610b8090613975565b600081116124cd5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610b80565b601254610100900460ff1661255e576001600160a01b038316600090815260208052604090205460ff168061251957506001600160a01b038216600090815260208052604090205460ff165b61255e5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b80565b600f5415612631576001600160a01b03831660009081526010602052604090205460ff16158061259b57506005546001600160a01b038381169116145b806125b057506001600160a01b03821661dead145b6126315760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610b80565b60125460ff1615612a4b576005546001600160a01b0384811691161480159061266857506005546001600160a01b03838116911614155b801561267c57506001600160a01b03821615155b801561269357506001600160a01b03821661dead14155b80156126b757506001600160a01b038316600090815260208052604090205460ff16155b80156126db57506001600160a01b038216600090815260208052604090205460ff16155b15612a4b5760145460ff16156127f4576009546001600160a01b038381169116148015906127175750600a546001600160a01b03838116911614155b156127f4576127276002436139b8565b32600090815260136020526040902054108015612765575061274a6002436139b8565b6001600160a01b038316600090815260136020526040902054105b6127cf5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610b80565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526022602052604090205460ff16801561283557506001600160a01b03821660009081526021602052604090205460ff16155b156129115760065481111561289d5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610b80565b6008546001600160a01b0383166000908152602081905260409020546128c390836137e8565b111561290c5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610b80565b612a4b565b6001600160a01b03821660009081526022602052604090205460ff16801561295257506001600160a01b03831660009081526021602052604090205460ff16155b156129bc5760075481111561290c5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610b80565b6001600160a01b03821660009081526021602052604090205460ff16612a4b576008546001600160a01b038316600090815260208190526040902054612a0290836137e8565b1115612a4b5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610b80565b30600090815260208190526040902054600b5481108015908190612a77575060125462010000900460ff165b8015612a8d5750600a54600160a01b900460ff16155b8015612ab257506001600160a01b03851660009081526022602052604090205460ff16155b8015612ad657506001600160a01b038516600090815260208052604090205460ff16155b8015612afa57506001600160a01b038416600090815260208052604090205460ff16155b15612b2857600a805460ff60a01b1916600160a01b179055612b1a612ef0565b600a805460ff60a01b191690555b6001600160a01b038516600090815260208052604090205460019060ff1680612b6857506001600160a01b038516600090815260208052604090205460ff165b15612b71575060005b60008115612edc57600f5443108015612ba257506001600160a01b03871660009081526022602052604090205460ff165b8015612bc757506001600160a01b03861660009081526022602052604090205460ff16155b8015612bd557506000601554115b15612d25576001600160a01b03861660009081526010602052604090205460ff16612c75576001600160a01b0386166000908152601060205260408120805460ff191660019081179091556011805491929091612c339084906137e8565b90915550506040516001600160a01b03871681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064612c8286600a6137af565b612c8c91906137c6565b905060155460175482612c9f91906137af565b612ca991906137c6565b601e6000828254612cba91906137e8565b9091555050601554601654612ccf90836137af565b612cd991906137c6565b601d6000828254612cea91906137e8565b9091555050601554601854612cff90836137af565b612d0991906137c6565b601f6000828254612d1a91906137e8565b90915550612ebe9050565b6001600160a01b03861660009081526022602052604090205460ff168015612d4f57506000601954115b15612de157606460195486612d6491906137af565b612d6e91906137c6565b9050601954601b5482612d8191906137af565b612d8b91906137c6565b601e6000828254612d9c91906137e8565b9091555050601954601a54612db190836137af565b612dbb91906137c6565b601d6000828254612dcc91906137e8565b9091555050601954601c54612cff90836137af565b6001600160a01b03871660009081526022602052604090205460ff168015612e0b57506000601554115b15612ebe57606460155486612e2091906137af565b612e2a91906137c6565b905060155460175482612e3d91906137af565b612e4791906137c6565b601e6000828254612e5891906137e8565b9091555050601554601654612e6d90836137af565b612e7791906137c6565b601d6000828254612e8891906137e8565b9091555050601554601854612e9d90836137af565b612ea791906137c6565b601f6000828254612eb891906137e8565b90915550505b8015612ecf57612ecf8730836122dc565b612ed981866139b8565b94505b612ee78787876122dc565b50505050505050565b3060009081526020819052604081205490506000601f54601d54601e54612f1791906137e8565b612f2191906137e8565b9050811580612f2e575080155b15612f37575050565b600b54612f459060146137af565b821115612f5d57600b54612f5a9060146137af565b91505b600080600283601e5486612f7191906137af565b612f7b91906137c6565b612f8591906137c6565b9050612f99612f9482866139b8565b61312b565b601e5447908190600090612faf906002906137c6565b612fb990876139b8565b601d54612fc690856137af565b612fd091906137c6565b905060006002601e54612fe391906137c6565b612fed90886139b8565b601f54612ffa90866137af565b61300491906137c6565b905061301081836137e8565b61301a90846139b8565b6000601e819055601d819055601f559250841580159061303a5750600083115b15613049576130498584613285565b600d546040516001600160a01b03909116908290600081818185875af1925050503d8060008114613096576040519150601f19603f3d011682016040523d82523d6000602084013e61309b565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d80600081146130eb576040519150601f19603f3d011682016040523d82523d6000602084013e6130f0565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602260205260409020805460ff19168215151790556117ad8282613339565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061316057613160613835565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156131b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131dd919061389a565b816001815181106131f0576131f0613835565b6001600160a01b03928316602091820292909201015260095461321691309116846121b8565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac9479061324f9085906000908690309042906004016139cb565b600060405180830381600087803b15801561326957600080fd5b505af115801561327d573d6000803e3d6000fd5b505050505050565b60095461329d9030906001600160a01b0316846121b8565b600954600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561330d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133329190613a07565b5050505050565b6001600160a01b038216600081815260216020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd674691016121ac565b6000602082840312156133a757600080fd5b5035919050565b600060208083528351808285015260005b818110156133db578581018301518582016040015282016133bf565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461341157600080fd5b50565b6000806040838503121561342757600080fd5b8235613432816133fc565b946020939093013593505050565b60006020828403121561345257600080fd5b813561345d816133fc565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156134a3576134a3613464565b604052919050565b600067ffffffffffffffff8211156134c5576134c5613464565b5060051b60200190565b600082601f8301126134e057600080fd5b813560206134f56134f0836134ab565b61347a565b82815260059290921b8401810191818101908684111561351457600080fd5b8286015b8481101561352f5780358352918301918301613518565b509695505050505050565b6000806040838503121561354d57600080fd5b823567ffffffffffffffff8082111561356557600080fd5b818501915085601f83011261357957600080fd5b813560206135896134f0836134ab565b82815260059290921b840181019181810190898411156135a857600080fd5b948201945b838610156135cf5785356135c0816133fc565b825294820194908201906135ad565b965050860135925050808211156135e557600080fd5b506135f2858286016134cf565b9150509250929050565b60008060006060848603121561361157600080fd5b833561361c816133fc565b9250602084013561362c816133fc565b929592945050506040919091013590565b801515811461341157600080fd5b6000806040838503121561365e57600080fd5b8235613669816133fc565b915060208301356136798161363d565b809150509250929050565b6000806040838503121561369757600080fd5b82356136a2816133fc565b91506020830135613679816133fc565b6000806000606084860312156136c757600080fd5b505081359360208301359350604090920135919050565b6000806000604084860312156136f357600080fd5b833567ffffffffffffffff8082111561370b57600080fd5b818601915086601f83011261371f57600080fd5b81358181111561372e57600080fd5b8760208260051b850101111561374357600080fd5b602092830195509350508401356137598161363d565b809150509250925092565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610de357610de3613799565b6000826137e357634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610de357610de3613799565b600181811c9082168061380f57607f821691505b60208210810361382f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b60006001820161385d5761385d613799565b5060010190565b60006020828403121561387657600080fd5b5051919050565b60006020828403121561388f57600080fd5b815161345d8161363d565b6000602082840312156138ac57600080fd5b815161345d816133fc565b600081518084526020808501945080840160005b838110156138f05781516001600160a01b0316875295820195908201906001016138cb565b509495945050505050565b84815260806020820152600061391460808301866138b7565b6001600160a01b03949094166040830152506060015292915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610de357610de3613799565b85815284602082015260a0604082015260006139ea60a08301866138b7565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613a1c57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220d1cefaaf40118b68411a299d4540d9976e9958ece48e43ed96fed6dbfbffc61d64736f6c63430008110033

Deployed Bytecode Sourcemap

10152:18962:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15725:274;;;;;;;;;;-1:-1:-1;15725:274:0;;;;;:::i;:::-;;:::i;:::-;;14416:329;;;;;;;;;;-1:-1:-1;14416:329:0;;;;;:::i;:::-;;:::i;4041:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10301:27;;;;;;;;;;-1:-1:-1;10301:27:0;;;;-1:-1:-1;;;;;10301:27:0;;;;;;-1:-1:-1;;;;;934:32:1;;;916:51;;904:2;889:18;10301:27:0;752:221:1;4955:169:0;;;;;;;;;;-1:-1:-1;4955:169:0;;;;;:::i;:::-;;:::i;:::-;;;1599:14:1;;1592:22;1574:41;;1562:2;1547:18;4955:169:0;1434:187:1;11590:64:0;;;;;;;;;;-1:-1:-1;11590:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4362:108;;;;;;;;;;-1:-1:-1;4450:12:0;;4362:108;;;2024:25:1;;;2012:2;1997:18;4362:108:0;1878:177:1;11373:33:0;;;;;;;;;;;;;;;;16930:618;;;;;;;;;;-1:-1:-1;16930:618:0;;;;;:::i;:::-;;:::i;5132:492::-;;;;;;;;;;-1:-1:-1;5132:492:0;;;;;:::i;:::-;;:::i;15448:269::-;;;;;;;;;;-1:-1:-1;15448:269:0;;;;;:::i;:::-;;:::i;4261:93::-;;;;;;;;;;-1:-1:-1;4261:93:0;;4344:2;5150:36:1;;5138:2;5123:18;4261:93:0;5008:184:1;5632:215:0;;;;;;;;;;-1:-1:-1;5632:215:0;;;;;:::i;:::-;;:::i;10335:21::-;;;;;;;;;;-1:-1:-1;10335:21:0;;;;-1:-1:-1;;;;;10335:21:0;;;10696:33;;;;;;;;;;-1:-1:-1;10696:33:0;;;;;;;;11221:32;;;;;;;;;;;;;;;;28080:312;;;;;;;;;;;;;:::i;24256:120::-;;;;;;;;;;-1:-1:-1;24350:18:0;;24335:12;:33;24256:120;;11078:31;;;;;;;;;;;;;;;;10227:28;;;;;;;;;;;;;;;;11186;;;;;;;;;;;;;;;;10662:25;;;;;;;;;;;;;;;;10776:31;;;;;;;;;;-1:-1:-1;10776:31:0;;;;;;;;;;;4478:127;;;;;;;;;;-1:-1:-1;4478:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;4579:18:0;4552:7;4579:18;;;;;;;;;;;;4478:127;8676:150;;;;;;;;;;;;;:::i;14797:154::-;;;;;;;;;;;;;:::i;17556:260::-;;;;;;;;;;-1:-1:-1;17556:260:0;;;;;:::i;:::-;;:::i;26902:456::-;;;;;;;;;;-1:-1:-1;26902:456:0;;;;;:::i;:::-;;:::i;27837:191::-;;;;;;;;;;-1:-1:-1;27837:191:0;;;;;:::i;:::-;;:::i;10611:44::-;;;;;;;;;;-1:-1:-1;10611:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10193:27;;;;;;;;;;;;;;;;18375:303;;;;;;;;;;-1:-1:-1;18375:303:0;;;;;:::i;:::-;;:::i;8462:79::-;;;;;;;;;;-1:-1:-1;8527:6:0;;-1:-1:-1;;;;;8527:6:0;8462:79;;4149:104;;;;;;;;;;;;;:::i;17824:295::-;;;;;;;;;;-1:-1:-1;17824:295:0;;;;;:::i;:::-;;:::i;11153:24::-;;;;;;;;;;;;;;;;27596:233;;;;;;;;;;-1:-1:-1;27596:233:0;;;;;:::i;:::-;;:::i;11413:27::-;;;;;;;;;;;;;;;;11298:25;;;;;;;;;;;;;;;;5855:413;;;;;;;;;;-1:-1:-1;5855:413:0;;;;;:::i;:::-;;:::i;10571:33::-;;;;;;;;;;;;;;;;4613:175;;;;;;;;;;-1:-1:-1;4613:175:0;;;;;:::i;:::-;;:::i;10262:30::-;;;;;;;;;;;;;;;;18686:311;;;;;;;;;;-1:-1:-1;18686:311:0;;;;;:::i;:::-;;:::i;11812:58::-;;;;;;;;;;-1:-1:-1;11812:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10736:33;;;;;;;;;;-1:-1:-1;10736:33:0;;;;;;;;;;;19384:182;;;;;;;;;;-1:-1:-1;19384:182:0;;;;;:::i;:::-;;:::i;16007:284::-;;;;;;;;;;-1:-1:-1;16007:284:0;;;;;:::i;:::-;;:::i;10995:40::-;;;;;;;;;;-1:-1:-1;10995:40:0;;;;;;;;16361:346;;;;;;;;;;-1:-1:-1;16361:346:0;;;;;:::i;:::-;;:::i;11044:27::-;;;;;;;;;;;;;;;;4796:151;;;;;;;;;;-1:-1:-1;4796:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4912:18:0;;;4885:7;4912:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4796:151;10393:33;;;;;;;;;;;;;;;;14959:118;;;;;;;;;;-1:-1:-1;14959:118:0;;;;;:::i;:::-;;:::i;15342:98::-;;;;;;;;;;;;;:::i;15085:196::-;;;;;;;;;;-1:-1:-1;15085:196:0;;;;;:::i;:::-;;:::i;19005:371::-;;;;;;;;;;;;;:::i;10494:37::-;;;;;;;;;;;;;;;;11116:30;;;;;;;;;;;;;;;;8834:244;;;;;;;;;;-1:-1:-1;8834:244:0;;;;;:::i;:::-;;:::i;27428:160::-;;;;;;;;;;;;;:::i;11260:31::-;;;;;;;;;;;;;;;;11332:34;;;;;;;;;;;;;;;;28495:616;;;;;;;;;;-1:-1:-1;28495:616:0;;;;;:::i;:::-;;:::i;15725:274::-;8589:6;;-1:-1:-1;;;;;8589:6:0;270:10;8589:22;8581:67;;;;-1:-1:-1;;;8581:67:0;;;;;;;:::i;:::-;;;;;;;;;15845:4:::1;15839;15819:13;4450:12:::0;;;4362:108;15819:13:::1;:17;::::0;15835:1:::1;15819:17;:::i;:::-;:24;;;;:::i;:::-;15818:31;;;;:::i;:::-;15808:6;:41;;15800:96;;;::::0;-1:-1:-1;;;15800:96:0;;8474:2:1;15800:96:0::1;::::0;::::1;8456:21:1::0;8513:2;8493:18;;;8486:30;8552:34;8532:18;;;8525:62;-1:-1:-1;;;8603:18:1;;;8596:40;8653:19;;15800:96:0::1;8272:406:1::0;15800:96:0::1;15923:17;:6:::0;15933::::1;15923:17;:::i;:::-;15907:13;:33:::0;;;15956:35:::1;::::0;2024:25:1;;;15956:35:0::1;::::0;2012:2:1;1997:18;15956:35:0::1;;;;;;;;15725:274:::0;:::o;14416:329::-;8589:6;;-1:-1:-1;;;;;8589:6:0;270:10;8589:22;8581:67;;;;-1:-1:-1;;;8581:67:0;;;;;;;:::i;:::-;14497:13:::1;::::0;::::1;::::0;::::1;;;14496:14;14488:50;;;::::0;-1:-1:-1;;;14488:50:0;;8885:2:1;14488:50:0::1;::::0;::::1;8867:21:1::0;8924:2;8904:18;;;8897:30;8963:25;8943:18;;;8936:53;9006:18;;14488:50:0::1;8683:347:1::0;14488:50:0::1;14549:13;:20:::0;;-1:-1:-1;;14580:18:0;;;;;14630:12:::1;14609:18;:33:::0;;;14674:31:::1;::::0;14695:10;;14674:31:::1;:::i;:::-;14653:18;:52:::0;14721:16:::1;::::0;::::1;::::0;;;::::1;14416:329:::0;:::o;4041:100::-;4095:13;4128:5;4121:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4041:100;:::o;4955:169::-;5038:4;5055:39;270:10;5078:7;5087:6;5055:8;:39::i;:::-;-1:-1:-1;5112:4:0;4955:169;;;;;:::o;16930:618::-;8589:6;;-1:-1:-1;;;;;8589:6:0;270:10;8589:22;8581:67;;;;-1:-1:-1;;;8581:67:0;;;;;;;:::i;:::-;17072:15:::1;:22;17054:7;:14;:40;17046:83;;;::::0;-1:-1:-1;;;17046:83:0;;9752:2:1;17046:83:0::1;::::0;::::1;9734:21:1::0;9791:2;9771:18;;;9764:30;9830:32;9810:18;;;9803:60;9880:18;;17046:83:0::1;9550:354:1::0;17046:83:0::1;17165:3;17148:7;:14;:20;17140:87;;;::::0;-1:-1:-1;;;17140:87:0;;10111:2:1;17140:87:0::1;::::0;::::1;10093:21:1::0;10150:2;10130:18;;;10123:30;10189:34;10169:18;;;10162:62;-1:-1:-1;;;10240:18:1;;;10233:52;10302:19;;17140:87:0::1;9909:418:1::0;17140:87:0::1;17340:9;17336:205;17359:7;:14;17355:1;:18;17336:205;;;17394:14;17411:7;17419:1;17411:10;;;;;;;;:::i;:::-;;;;;;;17394:27;;17436:14;17453:15;17469:1;17453:18;;;;;;;;:::i;:::-;;;;;;;17436:35;;17486:43;17502:10;17514:6;17522;17486:15;:43::i;:::-;17379:162;;17375:3;;;;;:::i;:::-;;;;17336:205;;;;16930:618:::0;;:::o;5132:492::-;5272:4;5289:36;5299:6;5307:9;5318:6;5289:9;:36::i;:::-;-1:-1:-1;;;;;5365:19:0;;5338:24;5365:19;;;:11;:19;;;;;;;;270:10;5365:33;;;;;;;;5417:26;;;;5409:79;;;;-1:-1:-1;;;5409:79:0;;10806:2:1;5409:79:0;;;10788:21:1;10845:2;10825:18;;;10818:30;10884:34;10864:18;;;10857:62;-1:-1:-1;;;10935:18:1;;;10928:38;10983:19;;5409:79:0;10604:404:1;5409:79:0;5524:57;5533:6;270:10;5574:6;5555:16;:25;5524:8;:57::i;:::-;-1:-1:-1;5612:4:0;;5132:492;-1:-1:-1;;;;5132:492:0:o;15448:269::-;8589:6;;-1:-1:-1;;;;;8589:6:0;270:10;8589:22;8581:67;;;;-1:-1:-1;;;8581:67:0;;;;;;;:::i;:::-;15567:4:::1;15561;15541:13;4450:12:::0;;;4362:108;15541:13:::1;:17;::::0;15557:1:::1;15541:17;:::i;:::-;:24;;;;:::i;:::-;15540:31;;;;:::i;:::-;15530:6;:41;;15522:95;;;::::0;-1:-1:-1;;;15522:95:0;;11215:2:1;15522:95:0::1;::::0;::::1;11197:21:1::0;11254:2;11234:18;;;11227:30;11293:34;11273:18;;;11266:62;-1:-1:-1;;;11344:18:1;;;11337:39;11393:19;;15522:95:0::1;11013:405:1::0;15522:95:0::1;15643:17;:6:::0;15653::::1;15643:17;:::i;:::-;15628:12;:32:::0;;;15676:33:::1;::::0;2024:25:1;;;15676:33:0::1;::::0;2012:2:1;1997:18;15676:33:0::1;1878:177:1::0;5632:215:0;270:10;5720:4;5769:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5769:34:0;;;;;;;;;;5720:4;;5737:80;;5760:7;;5769:47;;5806:10;;5769:47;:::i;:::-;5737:8;:80::i;28080:312::-;8589:6;;-1:-1:-1;;;;;8589:6:0;270:10;8589:22;8581:67;;;;-1:-1:-1;;;8581:67:0;;;;;;;:::i;:::-;28171:18:::1;::::0;28161:4:::1;4552:7:::0;4579:18;;;;;;;;;;;28143:46:::1;;28135:123;;;::::0;;-1:-1:-1;;;28135:123:0;;11625:2:1;28135:123:0::1;::::0;::::1;11607:21:1::0;11644:18;;;11637:30;;;;11703:34;11683:18;;;11676:62;11774:34;11754:18;;;11747:62;11826:19;;28135:123:0::1;11423:428:1::0;28135:123:0::1;28269:8;:15:::0;;-1:-1:-1;;;;28269:15:0::1;-1:-1:-1::0;;;28269:15:0::1;::::0;;28295:10:::1;:8;:10::i;:::-;28316:8;:16:::0;;-1:-1:-1;;;;28316:16:0::1;::::0;;28348:36:::1;::::0;28368:15:::1;2024:25:1::0;;28348:36:0::1;::::0;2012:2:1;1997:18;28348:36:0::1;;;;;;;28080:312::o:0;8676:150::-;8589:6;;-1:-1:-1;;;;;8589:6:0;270:10;8589:22;8581:67;;;;-1:-1:-1;;;8581:67:0;;;;;;;:::i;:::-;8769:6:::1;::::0;8748:40:::1;::::0;8785:1:::1;::::0;-1:-1:-1;;;;;8769:6:0::1;::::0;8748:40:::1;::::0;8785:1;;8748:40:::1;8799:6;:19:::0;;-1:-1:-1;;;;;;8799:19:0::1;::::0;;8676:150::o;14797:154::-;8589:6;;-1:-1:-1;;;;;8589:6:0;270:10;8589:22;8581:67;;;;-1:-1:-1;;;8581:67:0;;;;;;;:::i;:::-;14851:14:::1;:22:::0;;-1:-1:-1;;14851:22:0;;::::1;::::0;;;14884:20:::1;:28:::0;;;;::::1;::::0;;14928:15:::1;::::0;::::1;::::0;14868:5:::1;::::0;14928:15:::1;14797:154::o:0;17556:260::-;8589:6;;-1:-1:-1;;;;;8589:6:0;270:10;8589:22;8581:67;;;;-1:-1:-1;;;8581:67:0;;;;;;;:::i;:::-;17652:4:::1;17648:104;;17690:6;::::0;-1:-1:-1;;;;;17690:6:0;;::::1;17680:16:::0;;::::1;::::0;17672:68:::1;;;::::0;-1:-1:-1;;;17672:68:0;;12058:2:1;17672:68:0::1;::::0;::::1;12040:21:1::0;12097:2;12077:18;;;12070:30;12136:34;12116:18;;;12109:62;-1:-1:-1;;;12187:18:1;;;12180:37;12234:19;;17672:68:0::1;11856:403:1::0;17672:68:0::1;-1:-1:-1::0;;;;;17762:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;17762:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17556:260::o;26902:456::-;8589:6;;26989:10;;-1:-1:-1;;;;;8589:6:0;270:10;8589:22;8581:67;;;;-1:-1:-1;;;8581:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27020:20:0;::::1;27012:59;;;::::0;-1:-1:-1;;;27012:59:0;;12466:2:1;27012:59:0::1;::::0;::::1;12448:21:1::0;12505:2;12485:18;;;12478:30;12544:28;12524:18;;;12517:56;12590:18;;27012:59:0::1;12264:350:1::0;27012:59:0::1;27108:4;-1:-1:-1::0;;;;;27090:23:0;::::1;::::0;27082:64:::1;;;::::0;-1:-1:-1;;;27082:64:0;;12821:2:1;27082:64:0::1;::::0;::::1;12803:21:1::0;12860:2;12840:18;;;12833:30;12899;12879:18;;;12872:58;12947:18;;27082:64:0::1;12619:352:1::0;27082:64:0::1;27184:39;::::0;-1:-1:-1;;;27184:39:0;;27217:4:::1;27184:39;::::0;::::1;916:51:1::0;27157:24:0::1;::::0;-1:-1:-1;;;;;27184:24:0;::::1;::::0;::::1;::::0;889:18:1;;27184:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27242:46;::::0;-1:-1:-1;;;27242:46:0;;-1:-1:-1;;;;;13357:32:1;;;27242:46:0::1;::::0;::::1;13339:51:1::0;13406:18;;;13399:34;;;27157:66:0;;-1:-1:-1;27242:23:0;;::::1;::::0;::::1;::::0;13312:18:1;;27242:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27304;::::0;;-1:-1:-1;;;;;13357:32:1;;13339:51;;13421:2;13406:18;;13399:34;;;27234:54:0;;-1:-1:-1;27304:46:0::1;::::0;13312:18:1;27304:46:0::1;;;;;;;27001:357;26902:456:::0;;;;:::o;27837:191::-;8589:6;;-1:-1:-1;;;;;8589:6:0;270:10;8589:22;8581:67;;;;-1:-1:-1;;;8581:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27915:25:0;::::1;27907:69;;;::::0;-1:-1:-1;;;27907:69:0;;13896:2:1;27907:69:0::1;::::0;::::1;13878:21:1::0;13935:2;13915:18;;;13908:30;13974:33;13954:18;;;13947:61;14025:18;;27907:69:0::1;13694:355:1::0;27907:69:0::1;27987:10;:33:::0;;-1:-1:-1;;;;;;27987:33:0::1;-1:-1:-1::0;;;;;27987:33:0;;;::::1;::::0;;;::::1;::::0;;27837:191::o;18375:303::-;8589:6;;-1:-1:-1;;;;;8589:6:0;270:10;8589:22;8581:67;;;;-1:-1:-1;;;8581:67:0;;;;;;;:::i;:::-;18493:16:::1;:33:::0;;;18537:15:::1;:31:::0;;;18579:9:::1;:19:::0;;;18591:7;18624:34:::1;18555:13:::0;18512:14;18624:34:::1;:::i;:::-;:46;;;;:::i;:::-;18609:12;:61:::0;-1:-1:-1;;;18375:303:0:o;4149:104::-;4205:13;4238:7;4231:14;;;;;:::i;17824:295::-;8589:6;;-1:-1:-1;;;;;8589:6:0;270:10;8589:22;8581:67;;;;-1:-1:-1;;;8581:67:0;;;;;;;:::i;:::-;17933:6:::1;::::0;-1:-1:-1;;;;;17933:6:0;;::::1;17925:14:::0;;::::1;::::0;17917:84:::1;;;::::0;-1:-1:-1;;;17917:84:0;;14256:2:1;17917:84:0::1;::::0;::::1;14238:21:1::0;14295:2;14275:18;;;14268:30;14334:34;14314:18;;;14307:62;14405:27;14385:18;;;14378:55;14450:19;;17917:84:0::1;14054:421:1::0;17917:84:0::1;18014:41;18043:4;18049:5;18014:28;:41::i;:::-;18071:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;18071:40:0;::::1;::::0;::::1;::::0;;;::::1;17824:295:::0;;:::o;27596:233::-;8589:6;;-1:-1:-1;;;;;8589:6:0;270:10;8589:22;8581:67;;;;-1:-1:-1;;;8581:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27688:32:0;::::1;27680:83;;;::::0;-1:-1:-1;;;27680:83:0;;14682:2:1;27680:83:0::1;::::0;::::1;14664:21:1::0;14721:2;14701:18;;;14694:30;14760:34;14740:18;;;14733:62;-1:-1:-1;;;14811:18:1;;;14804:36;14857:19;;27680:83:0::1;14480:402:1::0;27680:83:0::1;27774:17;:47:::0;;-1:-1:-1;;;;;;27774:47:0::1;-1:-1:-1::0;;;;;27774:47:0;;;::::1;::::0;;;::::1;::::0;;27596:233::o;5855:413::-;270:10;5948:4;5992:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5992:34:0;;;;;;;;;;6045:35;;;;6037:85;;;;-1:-1:-1;;;6037:85:0;;15089:2:1;6037:85:0;;;15071:21:1;15128:2;15108:18;;;15101:30;15167:34;15147:18;;;15140:62;-1:-1:-1;;;15218:18:1;;;15211:35;15263:19;;6037:85:0;14887:401:1;6037:85:0;6158:67;270:10;6181:7;6209:15;6190:16;:34;6158:8;:67::i;:::-;-1:-1:-1;6256:4:0;;5855:413;-1:-1:-1;;;5855:413:0:o;4613:175::-;4699:4;4716:42;270:10;4740:9;4751:6;4716:9;:42::i;18686:311::-;8589:6;;-1:-1:-1;;;;;8589:6:0;270:10;8589:22;8581:67;;;;-1:-1:-1;;;8581:67:0;;;;;;;:::i;:::-;18805:17:::1;:34:::0;;;18850:16:::1;:32:::0;;;18893:10:::1;:20:::0;;;18906:7;18940:36:::1;18869:13:::0;18825:14;18940:36:::1;:::i;:::-;:49;;;;:::i;:::-;18924:13;:65:::0;-1:-1:-1;;;18686:311:0:o;19384:182::-;8589:6;;-1:-1:-1;;;;;8589:6:0;270:10;8589:22;8581:67;;;;-1:-1:-1;;;8581:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19469:28:0;::::1;;::::0;;;:19:::1;:28:::0;;;;;;;;:39;;-1:-1:-1;;19469:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19524:34;;1574:41:1;;;19524:34:0::1;::::0;1547:18:1;19524:34:0::1;;;;;;;19384:182:::0;;:::o;16007:284::-;8589:6;;-1:-1:-1;;;;;8589:6:0;270:10;8589:22;8581:67;;;;-1:-1:-1;;;8581:67:0;;;;;;;:::i;:::-;16129:4:::1;16123;16103:13;4450:12:::0;;;4362:108;16103:13:::1;:17;::::0;16119:1:::1;16103:17;:::i;:::-;:24;;;;:::i;:::-;16102:31;;;;:::i;:::-;16092:6;:41;;16084:98;;;::::0;-1:-1:-1;;;16084:98:0;;15495:2:1;16084:98:0::1;::::0;::::1;15477:21:1::0;15534:2;15514:18;;;15507:30;15573:34;15553:18;;;15546:62;-1:-1:-1;;;15624:18:1;;;15617:42;15676:19;;16084:98:0::1;15293:408:1::0;16084:98:0::1;16211:17;:6:::0;16221::::1;16211:17;:::i;:::-;16193:15;:35:::0;;;16244:39:::1;::::0;2024:25:1;;;16244:39:0::1;::::0;2012:2:1;1997:18;16244:39:0::1;1878:177:1::0;16361:346:0;8589:6;;-1:-1:-1;;;;;8589:6:0;270:10;8589:22;8581:67;;;;-1:-1:-1;;;8581:67:0;;;;;;;:::i;:::-;16484:6:::1;16464:13;4450:12:::0;;;4362:108;16464:13:::1;:17;::::0;16480:1:::1;16464:17;:::i;:::-;:26;;;;:::i;:::-;16451:9;:39;;16443:105;;;::::0;-1:-1:-1;;;16443:105:0;;15908:2:1;16443:105:0::1;::::0;::::1;15890:21:1::0;15947:2;15927:18;;;15920:30;15986:34;15966:18;;;15959:62;-1:-1:-1;;;16037:18:1;;;16030:51;16098:19;;16443:105:0::1;15706:417:1::0;16443:105:0::1;16599:4;16579:13;4450:12:::0;;;4362:108;16579:13:::1;:17;::::0;16595:1:::1;16579:17;:::i;:::-;:24;;;;:::i;:::-;16566:9;:37;;16558:102;;;::::0;-1:-1:-1;;;16558:102:0;;16330:2:1;16558:102:0::1;::::0;::::1;16312:21:1::0;16369:2;16349:18;;;16342:30;16408:34;16388:18;;;16381:62;-1:-1:-1;;;16459:18:1;;;16452:50;16519:19;;16558:102:0::1;16128:416:1::0;16558:102:0::1;16670:18;:30:::0;16361:346::o;14959:118::-;8589:6;;-1:-1:-1;;;;;8589:6:0;270:10;8589:22;8581:67;;;;-1:-1:-1;;;8581:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15043:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:26;;-1:-1:-1;;15043:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14959:118::o;15342:98::-;8589:6;;-1:-1:-1;;;;;8589:6:0;270:10;8589:22;8581:67;;;;-1:-1:-1;;;8581:67:0;;;;;;;:::i;:::-;15404:20:::1;:28:::0;;-1:-1:-1;;15404:28:0::1;::::0;;15342:98::o;15085:196::-;8589:6;;-1:-1:-1;;;;;8589:6:0;270:10;8589:22;8581:67;;;;-1:-1:-1;;;8581:67:0;;;;;;;:::i;:::-;15178:9:::1;15174:100;15193:18:::0;;::::1;15174:100;;;15258:4;15232:11;:23;15244:7;;15252:1;15244:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15232:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;15232:23:0;:30;;-1:-1:-1;;15232:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15213:3;::::1;::::0;::::1;:::i;:::-;;;;15174:100;;;;15085:196:::0;;;:::o;19005:371::-;8589:6;;-1:-1:-1;;;;;8589:6:0;270:10;8589:22;8581:67;;;;-1:-1:-1;;;8581:67:0;;;;;;;:::i;:::-;19076:1:::1;19056:17;:21:::0;;;19107:1:::1;19088:16;:20:::0;;;19119:10:::1;:14:::0;;;19160:36:::1;::::0;19076:1;19160:36:::1;:::i;:::-;:49;;;;:::i;:::-;19144:13;:65:::0;19241:1:::1;19222:16;:20:::0;;;-1:-1:-1;19253:15:0::1;:19:::0;;;19283:9:::1;:13:::0;;;19322:34:::1;::::0;19241:1;19322:34:::1;:::i;:::-;:46;;;;:::i;:::-;19307:12;:61:::0;19005:371::o;8834:244::-;8589:6;;-1:-1:-1;;;;;8589:6:0;270:10;8589:22;8581:67;;;;-1:-1:-1;;;8581:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8923:22:0;::::1;8915:73;;;::::0;-1:-1:-1;;;8915:73:0;;16751:2:1;8915:73:0::1;::::0;::::1;16733:21:1::0;16790:2;16770:18;;;16763:30;16829:34;16809:18;;;16802:62;-1:-1:-1;;;16880:18:1;;;16873:36;16926:19;;8915:73:0::1;16549:402:1::0;8915:73:0::1;9025:6;::::0;9004:38:::1;::::0;-1:-1:-1;;;;;9004:38:0;;::::1;::::0;9025:6:::1;::::0;9004:38:::1;::::0;9025:6:::1;::::0;9004:38:::1;9053:6;:17:::0;;-1:-1:-1;;;;;;9053:17:0::1;-1:-1:-1::0;;;;;9053:17:0;;;::::1;::::0;;;::::1;::::0;;8834:244::o;27428:160::-;8589:6;;-1:-1:-1;;;;;8589:6:0;270:10;8589:22;8581:67;;;;-1:-1:-1;;;8581:67:0;;;;;;;:::i;:::-;27522:58:::1;::::0;27486:12:::1;::::0;27530:10:::1;::::0;27554:21:::1;::::0;27486:12;27522:58;27486:12;27522:58;27554:21;27530:10;27522:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28495:616:::0;8589:6;;-1:-1:-1;;;;;8589:6:0;270:10;8589:22;8581:67;;;;-1:-1:-1;;;8581:67:0;;;;;;;:::i;:::-;28592:8:::1;28577:11;:23;;28569:107;;;::::0;-1:-1:-1;;;28569:107:0;;17368:2:1;28569:107:0::1;::::0;::::1;17350:21:1::0;17407:2;17387:18;;;17380:30;17446:34;17426:18;;;17419:62;17517:34;17497:18;;;17490:62;-1:-1:-1;;;17568:19:1;;;17561:38;17616:19;;28569:107:0::1;17166:475:1::0;28569:107:0::1;28713:16;::::0;;28727:1:::1;28713:16:::0;;;;;::::1;::::0;;28689:21:::1;::::0;28713:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;28750:9:0::1;::::0;:16:::1;::::0;;-1:-1:-1;;;28750:16:0;;;;28689:40;;-1:-1:-1;;;;;;28750:9:0;;::::1;::::0;:14:::1;::::0;-1:-1:-1;28750:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28740:4;28745:1;28740:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1::0;;;;;28740:26:0::1;;;-1:-1:-1::0;;;;;28740:26:0::1;;;::::0;::::1;28795:4;28777;28782:1;28777:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28777:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;28839:9:::1;::::0;:219:::1;::::0;-1:-1:-1;;;28839:219:0;;:9;::::1;::::0;:60:::1;::::0;28907:11;;28839:219:::1;::::0;:9:::1;::::0;28983:4;;29010:6:::1;::::0;29032:15:::1;::::0;28839:219:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;29074:29;29091:11;29074:29;;;;2024:25:1::0;;2012:2;1997:18;;1878:177;29074:29:0::1;;;;;;;;28558:553;28495:616:::0;:::o;7755:380::-;-1:-1:-1;;;;;7891:19:0;;7883:68;;;;-1:-1:-1;;;7883:68:0;;19085:2:1;7883:68:0;;;19067:21:1;19124:2;19104:18;;;19097:30;19163:34;19143:18;;;19136:62;-1:-1:-1;;;19214:18:1;;;19207:34;19258:19;;7883:68:0;18883:400:1;7883:68:0;-1:-1:-1;;;;;7970:21:0;;7962:68;;;;-1:-1:-1;;;7962:68:0;;19490:2:1;7962:68:0;;;19472:21:1;19529:2;19509:18;;;19502:30;19568:34;19548:18;;;19541:62;-1:-1:-1;;;19619:18:1;;;19612:32;19661:19;;7962:68:0;19288:398:1;7962:68:0;-1:-1:-1;;;;;8043:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8095:32;;2024:25:1;;;8095:32:0;;1997:18:1;8095:32:0;;;;;;;7755:380;;;:::o;6276:614::-;-1:-1:-1;;;;;6416:20:0;;6408:70;;;;-1:-1:-1;;;6408:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6497:23:0;;6489:71;;;;-1:-1:-1;;;6489:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6597:17:0;;6573:21;6597:17;;;;;;;;;;;6633:23;;;;6625:74;;;;-1:-1:-1;;;6625:74:0;;20703:2:1;6625:74:0;;;20685:21:1;20742:2;20722:18;;;20715:30;20781:34;20761:18;;;20754:62;-1:-1:-1;;;20832:18:1;;;20825:36;20878:19;;6625:74:0;20501:402:1;6625:74:0;-1:-1:-1;;;;;6735:17:0;;;:9;:17;;;;;;;;;;;6755:22;;;6735:42;;6799:20;;;;;;;;:30;;6771:6;;6735:9;6799:30;;6771:6;;6799:30;:::i;:::-;;;;;;;;6864:9;-1:-1:-1;;;;;6847:35:0;6856:6;-1:-1:-1;;;;;6847:35:0;;6875:6;6847:35;;;;2024:25:1;;2012:2;1997:18;;1878:177;6847:35:0;;;;;;;;6397:493;6276:614;;;:::o;19574:4674::-;-1:-1:-1;;;;;19674:18:0;;19666:68;;;;-1:-1:-1;;;19666:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19753:16:0;;19745:64;;;;-1:-1:-1;;;19745:64:0;;;;;;;:::i;:::-;19837:1;19828:6;:10;19820:52;;;;-1:-1:-1;;;19820:52:0;;21110:2:1;19820:52:0;;;21092:21:1;21149:2;21129:18;;;21122:30;21188:31;21168:18;;;21161:59;21237:18;;19820:52:0;20908:353:1;19820:52:0;19889:13;;;;;;;19885:132;;-1:-1:-1;;;;;19926:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;19955:23:0;;;;;;:19;:23;;;;;;;;19926:52;19918:87;;;;-1:-1:-1;;;19918:87:0;;21468:2:1;19918:87:0;;;21450:21:1;21507:2;21487:18;;;21480:30;-1:-1:-1;;;21526:18:1;;;21519:52;21588:18;;19918:87:0;21266:346:1;19918:87:0;20032:18;;:22;20029:196;;-1:-1:-1;;;;;20079:17:0;;;;;;:11;:17;;;;;;;;20078:18;;:35;;-1:-1:-1;8527:6:0;;-1:-1:-1;;;;;20100:13:0;;;8527:6;;20100:13;20078:35;:60;;;-1:-1:-1;;;;;;20117:21:0;;20131:6;20117:21;20078:60;20070:143;;;;-1:-1:-1;;;20070:143:0;;21819:2:1;20070:143:0;;;21801:21:1;21858:2;21838:18;;;21831:30;21897:34;21877:18;;;21870:62;21968:34;21948:18;;;21941:62;-1:-1:-1;;;22019:19:1;;;22012:37;22066:19;;20070:143:0;21617:474:1;20070:143:0;20240:14;;;;20237:1649;;;8527:6;;-1:-1:-1;;;;;20274:15:0;;;8527:6;;20274:15;;;;:32;;-1:-1:-1;8527:6:0;;-1:-1:-1;;;;;20293:13:0;;;8527:6;;20293:13;;20274:32;:52;;;;-1:-1:-1;;;;;;20310:16:0;;;;20274:52;:77;;;;-1:-1:-1;;;;;;20330:21:0;;20344:6;20330:21;;20274:77;:107;;;;-1:-1:-1;;;;;;20356:25:0;;;;;;:19;:25;;;;;;;;20355:26;20274:107;:135;;;;-1:-1:-1;;;;;;20386:23:0;;;;;;:19;:23;;;;;;;;20385:24;20274:135;20270:1605;;;20567:20;;;;20563:506;;;20629:9;;-1:-1:-1;;;;;20615:24:0;;;20629:9;;20615:24;;;;:49;;-1:-1:-1;20657:6:0;;-1:-1:-1;;;;;20643:21:0;;;20657:6;;20643:21;;20615:49;20611:439;;;20742:16;20757:1;20742:12;:16;:::i;:::-;20729:9;20700:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;20797:16:0;20812:1;20797:12;:16;:::i;:::-;-1:-1:-1;;;;;20762:32:0;;;;;;:28;:32;;;;;;:51;20700:113;20692:179;;;;-1:-1:-1;;;20692:179:0;;22431:2:1;20692:179:0;;;22413:21:1;22470:2;22450:18;;;22443:30;22509:34;22489:18;;;22482:62;-1:-1:-1;;;22560:18:1;;;22553:51;22621:19;;20692:179:0;22229:417:1;20692:179:0;20927:9;20898:39;;;;:28;:39;;;;;;20940:12;20898:54;;;;-1:-1:-1;;;;;20979:32:0;;;;;;:47;20611:439;-1:-1:-1;;;;;21121:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;21157:35:0;;;;;;:31;:35;;;;;;;;21156:36;21121:71;21117:743;;;21239:12;;21229:6;:22;;21221:75;;;;-1:-1:-1;;;21221:75:0;;22853:2:1;21221:75:0;;;22835:21:1;22892:2;22872:18;;;22865:30;22931:34;22911:18;;;22904:62;-1:-1:-1;;;22982:18:1;;;22975:38;23030:19;;21221:75:0;22651:404:1;21221:75:0;21357:15;;-1:-1:-1;;;;;4579:18:0;;4552:7;4579:18;;;;;;;;;;;21331:22;;:6;:22;:::i;:::-;:41;;21323:78;;;;-1:-1:-1;;;21323:78:0;;23262:2:1;21323:78:0;;;23244:21:1;23301:2;23281:18;;;23274:30;-1:-1:-1;;;23320:18:1;;;23313:54;23384:18;;21323:78:0;23060:348:1;21323:78:0;21117:743;;;-1:-1:-1;;;;;21477:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;21511:37:0;;;;;;:31;:37;;;;;;;;21510:38;21477:71;21473:387;;;21595:13;;21585:6;:23;;21577:78;;;;-1:-1:-1;;;21577:78:0;;23615:2:1;21577:78:0;;;23597:21:1;23654:2;23634:18;;;23627:30;23693:34;23673:18;;;23666:62;-1:-1:-1;;;23744:18:1;;;23737:40;23794:19;;21577:78:0;23413:406:1;21473:387:0;-1:-1:-1;;;;;21703:35:0;;;;;;:31;:35;;;;;;;;21698:162;;21796:15;;-1:-1:-1;;;;;4579:18:0;;4552:7;4579:18;;;;;;;;;;;21770:22;;:6;:22;:::i;:::-;:41;;21762:78;;;;-1:-1:-1;;;21762:78:0;;23262:2:1;21762:78:0;;;23244:21:1;23301:2;23281:18;;;23274:30;-1:-1:-1;;;23320:18:1;;;23313:54;23384:18;;21762:78:0;23060:348:1;21762:78:0;21947:4;21898:28;4579:18;;;;;;;;;;;22005;;21981:42;;;;;;;22039:22;;-1:-1:-1;22050:11:0;;;;;;;22039:22;:35;;;;-1:-1:-1;22066:8:0;;-1:-1:-1;;;22066:8:0;;;;22065:9;22039:35;:71;;;;-1:-1:-1;;;;;;22079:31:0;;;;;;:25;:31;;;;;;;;22078:32;22039:71;:101;;;;-1:-1:-1;;;;;;22115:25:0;;;;;;:19;:25;;;;;;;;22114:26;22039:101;:129;;;;-1:-1:-1;;;;;;22145:23:0;;;;;;:19;:23;;;;;;;;22144:24;22039:129;22036:236;;;22185:8;:15;;-1:-1:-1;;;;22185:15:0;-1:-1:-1;;;22185:15:0;;;22217:10;:8;:10::i;:::-;22244:8;:16;;-1:-1:-1;;;;22244:16:0;;;22036:236;-1:-1:-1;;;;;22402:25:0;;22284:12;22402:25;;;:19;:25;;;;;;22299:4;;22402:25;;;:52;;-1:-1:-1;;;;;;22431:23:0;;;;;;:19;:23;;;;;;;;22402:52;22399:99;;;-1:-1:-1;22481:5:0;22399:99;22510:12;22614:7;22611:1584;;;24350:18;;24335:12;:33;22676:60;;;;-1:-1:-1;;;;;;22705:31:0;;;;;;:25;:31;;;;;;;;22676:60;:94;;;;-1:-1:-1;;;;;;22741:29:0;;;;;;:25;:29;;;;;;;;22740:30;22676:94;:114;;;;;22789:1;22774:12;;:16;22676:114;22673:1378;;;-1:-1:-1;;;;;22816:15:0;;;;;;:11;:15;;;;;;;;22812:171;;-1:-1:-1;;;;;22855:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;22855:22:0;22873:4;22855:22;;;;;;22900:10;:15;;22873:4;;22900:10;;:15;;22873:4;;22900:15;:::i;:::-;;;;-1:-1:-1;;22943:20:0;;-1:-1:-1;;;;;934:32:1;;916:51;;22943:20:0;;904:2:1;889:18;22943:20:0;;;;;;;22812:171;23024:3;23010:11;:6;23019:2;23010:11;:::i;:::-;:17;;;;:::i;:::-;23003:24;;23090:12;;23072:15;;23065:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;23043:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;23170:12:0;;23151:16;;23144:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;23121:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;23236:12:0;;23224:9;;23217:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;23201:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;22673:1378:0;;-1:-1:-1;22673:1378:0;;-1:-1:-1;;;;;23313:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;23362:1;23346:13;;:17;23313:50;23309:742;;;23415:3;23399:13;;23390:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;23383:35;;23485:13;;23466:16;;23459:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;23437:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;23567:13:0;;23547:17;;23540:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;23517:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;23635:13:0;;23622:10;;23615:17;;:4;:17;:::i;23309:742::-;-1:-1:-1;;;;;23711:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;23761:1;23746:12;;:16;23711:51;23708:343;;;23811:3;23796:12;;23787:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;23780:34;;23877:12;;23859:15;;23852:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;23830:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;23957:12:0;;23938:16;;23931:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;23908:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24023:12:0;;24011:9;;24004:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;23988:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;23708:343:0;24070:8;;24067:89;;24098:42;24114:4;24128;24135;24098:15;:42::i;:::-;24169:14;24179:4;24169:14;;:::i;:::-;;;22611:1584;24207:33;24223:4;24229:2;24233:6;24207:15;:33::i;:::-;19653:4595;;;;19574:4674;;;:::o;25493:1401::-;25578:4;25534:23;4579:18;;;;;;;;;;;25534:50;;25595:25;25666:12;;25644:19;;25623:18;;:40;;;;:::i;:::-;:55;;;;:::i;:::-;25595:83;-1:-1:-1;25694:20:0;;;:46;;-1:-1:-1;25718:22:0;;25694:46;25691:60;;;25743:7;;25493:1401::o;25691:60::-;25784:18;;:23;;25805:2;25784:23;:::i;:::-;25766:15;:41;25763:113;;;25841:18;;:23;;25862:2;25841:23;:::i;:::-;25823:41;;25763:113;25888:12;25962:23;26047:1;26027:17;26006:18;;25988:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;25962:86;-1:-1:-1;26061:51:0;26078:33;25962:86;26078:15;:33;:::i;:::-;26061:16;:51::i;:::-;26311:18;;26146:21;;;;26125:18;;26311:20;;26330:1;;26311:20;:::i;:::-;26290:42;;:17;:42;:::i;:::-;26267:19;;26254:32;;:10;:32;:::i;:::-;:79;;;;:::i;:::-;26227:106;;26344:17;26433:1;26414:18;;:20;;;;:::i;:::-;26393:42;;:17;:42;:::i;:::-;26377:12;;26364:25;;:10;:25;:::i;:::-;:72;;;;:::i;:::-;26344:92;-1:-1:-1;26468:28:0;26344:92;26468:16;:28;:::i;:::-;26449:47;;;;:::i;:::-;26530:1;26509:18;:22;;;26542:19;:23;;;26576:12;:16;26449:47;-1:-1:-1;26608:19:0;;;;;:42;;;26649:1;26631:15;:19;26608:42;26605:119;;;26666:46;26679:15;26696;26666:12;:46::i;:::-;26757:10;;26749:46;;-1:-1:-1;;;;;26757:10:0;;;;26781:9;;26749:46;;;;26781:9;26757:10;26749:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26829:17:0;;26821:65;;26736:59;;-1:-1:-1;;;;;;26829:17:0;;26860:21;;26821:65;;;;26860:21;26829:17;26821:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25493:1401:0:o;18127:240::-;-1:-1:-1;;;;;18210:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;18210:39:0;;;;;;;18262;18210:31;:39;18262:26;:39::i;24384:573::-;24536:16;;;24550:1;24536:16;;;;;;;;24512:21;;24536:16;;;;;;;;;;-1:-1:-1;24536:16:0;24512:40;;24581:4;24563;24568:1;24563:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24563:23:0;;;:7;;;;;;;;;;:23;;;;24607:9;;:16;;;-1:-1:-1;;;24607:16:0;;;;:9;;;;;:14;;:16;;;;;24563:7;;24607:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24597:4;24602:1;24597:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24597:26:0;;;:7;;;;;;;;;:26;24668:9;;24636:56;;24653:4;;24668:9;24680:11;24636:8;:56::i;:::-;24731:9;;:218;;-1:-1:-1;;;24731:218:0;;-1:-1:-1;;;;;24731:9:0;;;;:60;;:218;;24806:11;;24731:9;;24876:4;;24903;;24923:15;;24731:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24439:518;24384:573;:::o;24965:520::-;25145:9;;25113:56;;25130:4;;-1:-1:-1;;;;;25145:9:0;25157:11;25113:8;:56::i;:::-;25212:9;;25418:17;;25212:265;;-1:-1:-1;;;25212:265:0;;25278:4;25212:265;;;24752:34:1;24802:18;;;24795:34;;;25212:9:0;24845:18:1;;;24838:34;;;24888:18;;;24881:34;-1:-1:-1;;;;;25418:17:0;;;24931:19:1;;;24924:44;25451:15:0;24984:19:1;;;24977:35;25212:9:0;;;:25;;25245:9;;24686:19:1;;25212:265:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24965:520;;:::o;16715:207::-;-1:-1:-1;;;;;16803:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;16803:52:0;;;;;;;;;;16871:43;;25502:51:1;;;25569:18;;;25562:50;16871:43:0;;25475:18:1;16871:43:0;25334:284:1;14:180;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:548::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;483:3;668:1;663:2;654:6;643:9;639:22;635:31;628:42;738:2;731;727:7;722:2;714:6;710:15;706:29;695:9;691:45;687:54;679:62;;;;199:548;;;;:::o;978:131::-;-1:-1:-1;;;;;1053:31:1;;1043:42;;1033:70;;1099:1;1096;1089:12;1033:70;978:131;:::o;1114:315::-;1182:6;1190;1243:2;1231:9;1222:7;1218:23;1214:32;1211:52;;;1259:1;1256;1249:12;1211:52;1298:9;1285:23;1317:31;1342:5;1317:31;:::i;:::-;1367:5;1419:2;1404:18;;;;1391:32;;-1:-1:-1;;;1114:315:1:o;1626:247::-;1685:6;1738:2;1726:9;1717:7;1713:23;1709:32;1706:52;;;1754:1;1751;1744:12;1706:52;1793:9;1780:23;1812:31;1837:5;1812:31;:::i;:::-;1862:5;1626:247;-1:-1:-1;;;1626:247:1:o;2060:127::-;2121:10;2116:3;2112:20;2109:1;2102:31;2152:4;2149:1;2142:15;2176:4;2173:1;2166:15;2192:275;2263:2;2257:9;2328:2;2309:13;;-1:-1:-1;;2305:27:1;2293:40;;2363:18;2348:34;;2384:22;;;2345:62;2342:88;;;2410:18;;:::i;:::-;2446:2;2439:22;2192:275;;-1:-1:-1;2192:275:1:o;2472:183::-;2532:4;2565:18;2557:6;2554:30;2551:56;;;2587:18;;:::i;:::-;-1:-1:-1;2632:1:1;2628:14;2644:4;2624:25;;2472:183::o;2660:662::-;2714:5;2767:3;2760:4;2752:6;2748:17;2744:27;2734:55;;2785:1;2782;2775:12;2734:55;2821:6;2808:20;2847:4;2871:60;2887:43;2927:2;2887:43;:::i;:::-;2871:60;:::i;:::-;2965:15;;;3051:1;3047:10;;;;3035:23;;3031:32;;;2996:12;;;;3075:15;;;3072:35;;;3103:1;3100;3093:12;3072:35;3139:2;3131:6;3127:15;3151:142;3167:6;3162:3;3159:15;3151:142;;;3233:17;;3221:30;;3271:12;;;;3184;;3151:142;;;-1:-1:-1;3311:5:1;2660:662;-1:-1:-1;;;;;;2660:662:1:o;3327:1215::-;3445:6;3453;3506:2;3494:9;3485:7;3481:23;3477:32;3474:52;;;3522:1;3519;3512:12;3474:52;3562:9;3549:23;3591:18;3632:2;3624:6;3621:14;3618:34;;;3648:1;3645;3638:12;3618:34;3686:6;3675:9;3671:22;3661:32;;3731:7;3724:4;3720:2;3716:13;3712:27;3702:55;;3753:1;3750;3743:12;3702:55;3789:2;3776:16;3811:4;3835:60;3851:43;3891:2;3851:43;:::i;3835:60::-;3929:15;;;4011:1;4007:10;;;;3999:19;;3995:28;;;3960:12;;;;4035:19;;;4032:39;;;4067:1;4064;4057:12;4032:39;4091:11;;;;4111:217;4127:6;4122:3;4119:15;4111:217;;;4207:3;4194:17;4224:31;4249:5;4224:31;:::i;:::-;4268:18;;4144:12;;;;4306;;;;4111:217;;;4347:5;-1:-1:-1;;4390:18:1;;4377:32;;-1:-1:-1;;4421:16:1;;;4418:36;;;4450:1;4447;4440:12;4418:36;;4473:63;4528:7;4517:8;4506:9;4502:24;4473:63;:::i;:::-;4463:73;;;3327:1215;;;;;:::o;4547:456::-;4624:6;4632;4640;4693:2;4681:9;4672:7;4668:23;4664:32;4661:52;;;4709:1;4706;4699:12;4661:52;4748:9;4735:23;4767:31;4792:5;4767:31;:::i;:::-;4817:5;-1:-1:-1;4874:2:1;4859:18;;4846:32;4887:33;4846:32;4887:33;:::i;:::-;4547:456;;4939:7;;-1:-1:-1;;;4993:2:1;4978:18;;;;4965:32;;4547:456::o;5405:118::-;5491:5;5484:13;5477:21;5470:5;5467:32;5457:60;;5513:1;5510;5503:12;5528:382;5593:6;5601;5654:2;5642:9;5633:7;5629:23;5625:32;5622:52;;;5670:1;5667;5660:12;5622:52;5709:9;5696:23;5728:31;5753:5;5728:31;:::i;:::-;5778:5;-1:-1:-1;5835:2:1;5820:18;;5807:32;5848:30;5807:32;5848:30;:::i;:::-;5897:7;5887:17;;;5528:382;;;;;:::o;5915:388::-;5983:6;5991;6044:2;6032:9;6023:7;6019:23;6015:32;6012:52;;;6060:1;6057;6050:12;6012:52;6099:9;6086:23;6118:31;6143:5;6118:31;:::i;:::-;6168:5;-1:-1:-1;6225:2:1;6210:18;;6197:32;6238:33;6197:32;6238:33;:::i;6308:316::-;6385:6;6393;6401;6454:2;6442:9;6433:7;6429:23;6425:32;6422:52;;;6470:1;6467;6460:12;6422:52;-1:-1:-1;;6493:23:1;;;6563:2;6548:18;;6535:32;;-1:-1:-1;6614:2:1;6599:18;;;6586:32;;6308:316;-1:-1:-1;6308:316:1:o;6629:750::-;6721:6;6729;6737;6790:2;6778:9;6769:7;6765:23;6761:32;6758:52;;;6806:1;6803;6796:12;6758:52;6846:9;6833:23;6875:18;6916:2;6908:6;6905:14;6902:34;;;6932:1;6929;6922:12;6902:34;6970:6;6959:9;6955:22;6945:32;;7015:7;7008:4;7004:2;7000:13;6996:27;6986:55;;7037:1;7034;7027:12;6986:55;7077:2;7064:16;7103:2;7095:6;7092:14;7089:34;;;7119:1;7116;7109:12;7089:34;7174:7;7167:4;7157:6;7154:1;7150:14;7146:2;7142:23;7138:34;7135:47;7132:67;;;7195:1;7192;7185:12;7132:67;7226:4;7218:13;;;;-1:-1:-1;7250:6:1;-1:-1:-1;;7291:20:1;;7278:34;7321:28;7278:34;7321:28;:::i;:::-;7368:5;7358:15;;;6629:750;;;;;:::o;7384:356::-;7586:2;7568:21;;;7605:18;;;7598:30;7664:34;7659:2;7644:18;;7637:62;7731:2;7716:18;;7384:356::o;7745:127::-;7806:10;7801:3;7797:20;7794:1;7787:31;7837:4;7834:1;7827:15;7861:4;7858:1;7851:15;7877:168;7950:9;;;7981;;7998:15;;;7992:22;;7978:37;7968:71;;8019:18;;:::i;8050:217::-;8090:1;8116;8106:132;;8160:10;8155:3;8151:20;8148:1;8141:31;8195:4;8192:1;8185:15;8223:4;8220:1;8213:15;8106:132;-1:-1:-1;8252:9:1;;8050:217::o;9035:125::-;9100:9;;;9121:10;;;9118:36;;;9134:18;;:::i;9165:380::-;9244:1;9240:12;;;;9287;;;9308:61;;9362:4;9354:6;9350:17;9340:27;;9308:61;9415:2;9407:6;9404:14;9384:18;9381:38;9378:161;;9461:10;9456:3;9452:20;9449:1;9442:31;9496:4;9493:1;9486:15;9524:4;9521:1;9514:15;9378:161;;9165:380;;;:::o;10332:127::-;10393:10;10388:3;10384:20;10381:1;10374:31;10424:4;10421:1;10414:15;10448:4;10445:1;10438:15;10464:135;10503:3;10524:17;;;10521:43;;10544:18;;:::i;:::-;-1:-1:-1;10591:1:1;10580:13;;10464:135::o;12976:184::-;13046:6;13099:2;13087:9;13078:7;13074:23;13070:32;13067:52;;;13115:1;13112;13105:12;13067:52;-1:-1:-1;13138:16:1;;12976:184;-1:-1:-1;12976:184:1:o;13444:245::-;13511:6;13564:2;13552:9;13543:7;13539:23;13535:32;13532:52;;;13580:1;13577;13570:12;13532:52;13612:9;13606:16;13631:28;13653:5;13631:28;:::i;17646:251::-;17716:6;17769:2;17757:9;17748:7;17744:23;17740:32;17737:52;;;17785:1;17782;17775:12;17737:52;17817:9;17811:16;17836:31;17861:5;17836:31;:::i;17902:461::-;17955:3;17993:5;17987:12;18020:6;18015:3;18008:19;18046:4;18075:2;18070:3;18066:12;18059:19;;18112:2;18105:5;18101:14;18133:1;18143:195;18157:6;18154:1;18151:13;18143:195;;;18222:13;;-1:-1:-1;;;;;18218:39:1;18206:52;;18278:12;;;;18313:15;;;;18254:1;18172:9;18143:195;;;-1:-1:-1;18354:3:1;;17902:461;-1:-1:-1;;;;;17902:461:1:o;18368:510::-;18639:6;18628:9;18621:25;18682:3;18677:2;18666:9;18662:18;18655:31;18602:4;18703:57;18755:3;18744:9;18740:19;18732:6;18703:57;:::i;:::-;-1:-1:-1;;;;;18796:32:1;;;;18791:2;18776:18;;18769:60;-1:-1:-1;18860:2:1;18845:18;18838:34;18695:65;18368:510;-1:-1:-1;;18368:510:1:o;19691:401::-;19893:2;19875:21;;;19932:2;19912:18;;;19905:30;19971:34;19966:2;19951:18;;19944:62;-1:-1:-1;;;20037:2:1;20022:18;;20015:35;20082:3;20067:19;;19691:401::o;20097:399::-;20299:2;20281:21;;;20338:2;20318:18;;;20311:30;20377:34;20372:2;20357:18;;20350:62;-1:-1:-1;;;20443:2:1;20428:18;;20421:33;20486:3;20471:19;;20097:399::o;22096:128::-;22163:9;;;22184:11;;;22181:37;;;22198:18;;:::i;23824:582::-;24123:6;24112:9;24105:25;24166:6;24161:2;24150:9;24146:18;24139:34;24209:3;24204:2;24193:9;24189:18;24182:31;24086:4;24230:57;24282:3;24271:9;24267:19;24259:6;24230:57;:::i;:::-;-1:-1:-1;;;;;24323:32:1;;;;24318:2;24303:18;;24296:60;-1:-1:-1;24387:3:1;24372:19;24365:35;24222:65;23824:582;-1:-1:-1;;;23824:582:1:o;25023:306::-;25111:6;25119;25127;25180:2;25168:9;25159:7;25155:23;25151:32;25148:52;;;25196:1;25193;25186:12;25148:52;25225:9;25219:16;25209:26;;25275:2;25264:9;25260:18;25254:25;25244:35;;25319:2;25308:9;25304:18;25298:25;25288:35;;25023:306;;;;;:::o

Swarm Source

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