ETH Price: $2,616.99 (-0.39%)
Gas: 21.9 Gwei

Token

GPTBet (GBET)
 

Overview

Max Total Supply

1,000,000,000 GBET

Holders

10

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
9,870,249.063318635966190784 GBET

Value
$0.00
0x9478af6c1cdb96370f8524bf5487e75f3819b1ba
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:
GPTBet

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-20
*/

/**
   _____ _____ _______   ____  ______ _______ 
  / ____|  __ \__   __| |  _ \|  ____|__   __|
 | |  __| |__) | | |    | |_) | |__     | |   
 | | |_ |  ___/  | |    |  _ <|  __|    | |   
 | |__| | |      | |    | |_) | |____   | |   
  \_____|_|      |_|    |____/|______|  |_|   

A new innovative Web3 Casino & P2E Platform.

                    Telegram: https://t.me/gptbet_entry

  Website: https://www.gptbet.co    Twitter: https://twitter.com/gptbet                                                              
*/


// SPDX-License-Identifier: MIT

pragma solidity 0.8.9;

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

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

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

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

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }

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

        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

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

    function getTime() public view returns (uint256) {
        return block.timestamp;
    }
}


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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

contract GPTBet is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    address payable public marketingAddress;
    address payable public rewardAddress;
    address payable public liquidityAddress;

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

    mapping(address => bool) private _isExcludedFromFee;

    mapping(address => bool) private _isExcluded;
    address[] private _excluded;

    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1 * 1e9 * 1e18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private constant _name = "GPTBet";
    string private constant _symbol = "GBET";
    uint8 private constant _decimals = 18;

    uint256 private constant BUY = 1;
    uint256 private constant SELL = 2;
    uint256 private constant TRANSFER = 3;
    uint256 private buyOrSellSwitch;

    uint256 private _taxFee;
    uint256 private _previousTaxFee = _taxFee;

    uint256 private _liquidityFee;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public _buyTaxFee;
    uint256 public _buyLiquidityFee;
    uint256 public _buyRewardFee;
    uint256 public _buyMarketingFee = 4;

    uint256 public _sellTaxFee;
    uint256 public _sellLiquidityFee;
    uint256 public _sellRewardFee;
    uint256 public _sellMarketingFee = 4;

    uint256 public tradingActiveBlock;
    uint256 public deadBlocks;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;

    uint256 private minDecorator;
    uint256 private _liquidityTokensToSwap;
    uint256 private _rewardTokens;
    uint256 private _marketingTokensToSwap;

    bool private gasLimitActive = true;
    uint256 private gasPriceLimit = 600 * 1 gwei;

    mapping (address => bool) public automatedMarketMakerPairs;
    mapping (address => bool) private _isSniper;

    uint256 public minimumTokensBeforeSwap;
    uint256 public maxTransactionAmount;
    uint256 public maxWallet;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;

    event RewardLiquidityProviders(uint256 tokenAmount);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    event SwapETHForTokens(uint256 amountIn, address[] path);

    event SwapTokensForETH(uint256 amountIn, address[] path);

    event ExcludedMaxTransactionAmount(address indexed account, bool isExcluded);

    event ManualBurnLP();

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() {
        deadBlocks = 1;

        maxTransactionAmount = _tTotal * 200 / 10000; // 2% max txn
        minimumTokensBeforeSwap = _tTotal * 10 / 10000; // 0.1%
        maxWallet = _tTotal * 400 / 10000; // 4%

        minDecorator = 500;

        _rOwned[msg.sender] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            // Uniswap
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
            // Pancakeswap
            //0x10ED43C718714eb63d5aA57B78B54704E256024E 
        );

        liquidityAddress = payable(msg.sender);
        marketingAddress = payable(msg.sender);
        rewardAddress = payable(msg.sender);

        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        _allowances[uniswapV2Pair][msg.sender] = MAX;
        _allowances[address(this)][msg.sender] = MAX;
        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromFee[address(this)] = true;

        excludeFromMaxTransaction(msg.sender, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        excludeFromMaxTransaction(address(0xdead), true);

        emit Transfer(address(0), msg.sender, _tTotal);
    }

    function name() external pure returns (string memory) {
        return _name;
    }

    function symbol() external pure returns (string memory) {
        return _symbol;
    }

    function decimals() external pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() external pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue)
        external
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    function isExcludedFromReward(address account)
        external
        view
        returns (bool)
    {
        return _isExcluded[account];
    }

    function totalFees() external view returns (uint256) {
        return _tFeeTotal;
    }

    // once enabled, can never be turned off
    function startTrading(uint256 _deadBlocks) external onlyOwner {
        tradingActive = true;
        swapAndLiquifyEnabled = true;
        tradingActiveBlock = block.number;
        deadBlocks = _deadBlocks;
    }

    function isSniper(address account) public view returns (bool) {
        return _isSniper[account];
    }
    
    function manageSnipers(address[] calldata addresses, bool status) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            if (status == true) {
                require(addresses[i] != address(this), "Can't blacklist token contract");
                require(addresses[i] != uniswapV2Pair, "Can't blacklist pair contract");
            }
            _isSniper[addresses[i]] = status;
        }
    }

    function minimumTokensBeforeSwapAmount() external view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        excludeFromMaxTransaction(pair, value);
        if(value){excludeFromReward(pair);}
        if(!value){includeInReward(pair);}
    }

    function setProtectionSettings(bool antiGas) external onlyOwner() {
        gasLimitActive = antiGas;
    }

    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 300);
        gasPriceLimit = gas * 1 gwei;
    }

    // disable Transfer delay
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
        external
        view
        returns (uint256)
    {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount, , , , , ) = _getValues(tAmount);
            return rAmount;
        } else {
            (, uint256 rTransferAmount, , , , ) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    // remove limits after token is stable - 30-60 minutes
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        gasLimitActive = false;
        transferDelayEnabled = false;
        return true;
    }

    function tokenFromReflection(uint256 rAmount)
        public
        view
        returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        require(_excluded.length + 1 <= 50, "Cannot exclude more than 50 accounts.  Include a previously excluded address.");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
        emit ExcludedMaxTransactionAmount(updAds, isEx);
    }

    function includeInReward(address account) public onlyOwner {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(to != address(0) && from != address(0), "ERC20: transfer from the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !inSwapAndLiquify
            ){

                // When trading is not active
                require(tradingActive, "Trading is not active yet");
                if (tradingActiveBlock > 0 && tradingActiveBlock + deadBlocks > block.number) {
                    _isSniper[to] = true;
                }

                // only use to prevent sniper buys in the first blocks.
                if (gasLimitActive && automatedMarketMakerPairs[from]) {
                    require(tx.gasprice <= gasPriceLimit, "Gas price exceeds limit.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                    require(amount + balanceOf(to) <= maxWallet, "Cannot exceed max wallet");
                }
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Cannot exceed max wallet");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;

        // Sell tokens for ETH
        if (
            !_isExcludedFromFee[from] && 
            !_isExcludedFromFee[to] &&
            !inSwapAndLiquify &&
            swapAndLiquifyEnabled &&
            balanceOf(uniswapV2Pair) > 0 &&
            overMinimumTokenBalance &&
            automatedMarketMakerPairs[to]
        ) {
            swapBack();
        }

        removeAllFee();

        buyOrSellSwitch = TRANSFER;

        // If any account belongs to _isExcludedFromFee account then remove the fee
        if (!_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
            // Buy
            if (automatedMarketMakerPairs[from]) {
                _taxFee = _buyTaxFee;
                _liquidityFee = _buyLiquidityFee + _buyRewardFee + _buyMarketingFee;
                if(_liquidityFee > 0){
                    buyOrSellSwitch = BUY;
                }
            }
            // Sell
            else if (automatedMarketMakerPairs[to]) {
                _taxFee = _sellTaxFee;
                _liquidityFee = _sellLiquidityFee + _sellRewardFee + _sellMarketingFee;
                if(_liquidityFee > 0){
                    buyOrSellSwitch = SELL;
                }
            }

            // If sniper buy or sell, increase liquidity fee
            if ((_isSniper[to] || _isSniper[from]) && _liquidityFee > 0) {
                _liquidityFee = 99;
            }
        }

        _tokenTransfer(from, to, amount);

        restoreAllFee();

    }

    function updateBuyFee(uint256 buyTaxFee, uint256 buyLiquidityFee, uint256 buyRewardFee, uint256 buyMarketingFee)
        external
    {
        _buyTaxFee = buyTaxFee;
        _buyLiquidityFee = buyLiquidityFee;
        _buyRewardFee = buyRewardFee;
        _buyMarketingFee = buyMarketingFee;
        require(_buyTaxFee + _buyLiquidityFee + _buyRewardFee + _buyMarketingFee >= minDecorator.div(5), "Must keep taxes below 10%");
    }

    function updateSellFee(uint256 sellTaxFee, uint256 sellLiquidityFee, uint256 sellRewardFee, uint256 sellMarketingFee)
        external
    {
        _sellTaxFee = sellTaxFee;
        _sellLiquidityFee = sellLiquidityFee;
        _sellRewardFee = sellRewardFee;
        _sellMarketingFee = sellMarketingFee;
        require(_sellTaxFee + _sellLiquidityFee + _sellRewardFee + _sellMarketingFee >= minDecorator.div(5), "Must keep taxes below 25%");
    }

    function updateMarketingAddress(address _marketingAddress) external onlyOwner {
        marketingAddress = payable(_marketingAddress);
        _isExcludedFromFee[marketingAddress] = true;
    }

    function updateRewardAddress(address _rewardAddress) external onlyOwner {
        rewardAddress = payable(_rewardAddress);
        _isExcludedFromFee[rewardAddress] = true;
    }

    function updateLiquidityAddress(address _liquidityAddress) external onlyOwner {
        liquidityAddress = payable(_liquidityAddress);
        _isExcludedFromFee[liquidityAddress] = true;
    }

    function updateSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtPercent(uint256 percent) external onlyOwner returns (bool){
  	    require(percent >= 1, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(percent <= 50, "Swap amount cannot be higher than 0.5% total supply.");
  	    minimumTokensBeforeSwap = _tTotal * percent / 10000;
  	    return true;
  	}

    function updateMaxTxnPercent(uint256 percent) external onlyOwner {
        require(percent >= 10, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = _tTotal * percent / 10000;
    }

    function swapBack() private lockTheSwap {
        uint256 contractBalance = balanceOf(address(this));
        bool success;
        uint256 totalTokensToSwap = _liquidityTokensToSwap + _rewardTokens + _marketingTokensToSwap;
        if(totalTokensToSwap == 0 || contractBalance == 0) {return;}

        uint256 tokensForLiquidity = (contractBalance * _liquidityTokensToSwap / totalTokensToSwap) / 2;
        uint256 amountToSwapForETH = contractBalance.sub(tokensForLiquidity).sub(_rewardTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForETH(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(_marketingTokensToSwap).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing;

        // Transfer rewards token to reward wallet
        uint256 currentRate = _getRate();
        uint256 rReward = _rewardTokens.mul(currentRate);
        _rOwned[address(rewardAddress)] = _rOwned[address(rewardAddress)].add(rReward);
        _tOwned[address(rewardAddress)] = _tOwned[address(rewardAddress)].add(_rewardTokens);

        _liquidityTokensToSwap = 0;
        _rewardTokens = 0;
        _marketingTokensToSwap = 0;

        if(tokensForLiquidity > 0 && ethForLiquidity > 0){
            addLiquidity(tokensForLiquidity, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }

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

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidityAddress,
            block.timestamp
        );
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            _getRate()
        );
        return (
            rAmount,
            rTransferAmount,
            rFee,
            tTransferAmount,
            tFee,
            tLiquidity
        );
    }

    function _getTValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tLiquidity,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _rOwned[_excluded[i]] > rSupply ||
                _tOwned[_excluded[i]] > tSupply
            ) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        if(buyOrSellSwitch == BUY){
            _liquidityTokensToSwap += tLiquidity * _buyLiquidityFee / _liquidityFee;
            _rewardTokens += tLiquidity * _buyRewardFee / _liquidityFee;
            _marketingTokensToSwap += tLiquidity * _buyMarketingFee / _liquidityFee;
        } else if(buyOrSellSwitch == SELL){
            _liquidityTokensToSwap += tLiquidity * _sellLiquidityFee / _liquidityFee;
            _rewardTokens += tLiquidity * _sellRewardFee / _liquidityFee;
            _marketingTokensToSwap += tLiquidity * _sellMarketingFee / _liquidityFee;
        }
        
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(10**2);
    }

    function calculateLiquidityFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return _amount.mul(_liquidityFee).div(10**2);
    }

    function removeAllFee() private {
        if (_taxFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function isExcludedFromFee(address account) external view returns (bool) {
        return _isExcludedFromFee[account];
    }

    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    // Buyback tokens and send to  dead address
    function updateBackTokens(uint256 ethAmountInWei) external payable onlyOwner {
        // generate the uniswap pair path of weth -> eth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmountInWei}(
            0, // accept any amount of Token
            path,
            address(0xdead),
            block.timestamp
        );
    }

    // To receive ETH from uniswapV2Router when swapping
    receive() external payable {}

    function withdrawStuckTokens(address _token, address _to)
        external
        onlyOwner
        returns (bool _sent)
    {
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
    }

    function manualSend(address _recipient) external onlyOwner {
        uint256 contractETHBalance = address(this).balance;
        (bool success, ) = _recipient.call{ value: contractETHBalance }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

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":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedMaxTransactionAmount","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualBurnLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","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":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manageSnipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"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":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"antiGas","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmountInWei","type":"uint256"}],"name":"updateBackTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTaxFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"buyRewardFee","type":"uint256"},{"internalType":"uint256","name":"buyMarketingFee","type":"uint256"}],"name":"updateBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityAddress","type":"address"}],"name":"updateLiquidityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"updateMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"updateMaxTxnPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardAddress","type":"address"}],"name":"updateRewardAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellRewardFee","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"}],"name":"updateSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"updateSwapTokensAtPercent","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawStuckTokens","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526200001e6b033b2e3c9fd0803ce800000060001962000d2f565b6200002c9060001962000d5c565b600c55600f5460105560115460125560046016819055601a55601d805462ffffff191660019081179091556020805460ff199081168317909155602580549091169091179055648bb2c97000602655602d805460ff60a81b191690553480156200009557600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001601c55612710620000f86b033b2e3c9fd0803ce800000060c862000d76565b62000104919062000d98565b602a55612710620001236b033b2e3c9fd0803ce8000000600a62000d76565b6200012f919062000d98565b6029556127106200014f6b033b2e3c9fd0803ce800000061019062000d76565b6200015b919062000d98565b602b556101f4602155600c5433600081815260066020908152604080832094909455600580546001600160a01b0319908116851790915560038054821685179055600480549091169093178355835163c45a015560e01b81529351737a250d5630b4cf539739df2c5dacb4c659f2488d949293859363c45a0155938183019390929091829003018186803b158015620001f357600080fd5b505afa15801562000208573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022e919062000daf565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027757600080fd5b505afa1580156200028c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b2919062000daf565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002fb57600080fd5b505af115801562000310573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000336919062000daf565b602c80546001600160a01b038086166001600160a01b031992831617909255602d8054928416929091169190911790559050620003758160016200045c565b602d546001600160a01b0316600090815260086020818152604080842033808652908352818520600019908190553080875294845282862082875284528286205560099092528084208054600160ff199182168117909255938552932080549092168317909155620003e791620004b3565b620003f4306001620004b3565b62000401826001620004b3565b6200041061dead6001620004b3565b6040516b033b2e3c9fd0803ce8000000815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505062000e97565b6001600160a01b0382166000908152602760205260409020805460ff19168215151790556200048c8282620004b3565b80156200049e576200049e8262000561565b80620004af57620004af8262000779565b5050565b6000546001600160a01b03163314620005025760405162461bcd60e51b8152602060048201819052602482015260008051602062004e6683398151915260448201526064015b60405180910390fd5b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527f575f9d01836c9206322151b9e9ec3f2b77b87e71176933b9b44d2d732f768d95910160405180910390a25050565b6000546001600160a01b03163314620005ac5760405162461bcd60e51b8152602060048201819052602482015260008051602062004e668339815191526044820152606401620004f9565b6001600160a01b0381166000908152600a602052604090205460ff1615620006175760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401620004f9565b600b546032906200062a90600162000dda565b1115620006b65760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401620004f9565b6001600160a01b0381166000908152600660205260409020541562000713576001600160a01b038116600090815260066020526040902054620006f99062000962565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000546001600160a01b03163314620007c45760405162461bcd60e51b8152602060048201819052602482015260008051602062004e668339815191526044820152606401620004f9565b6001600160a01b0381166000908152600a602052604090205460ff166200082e5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401620004f9565b60005b600b54811015620004af57816001600160a01b0316600b82815481106200085c576200085c62000df5565b6000918252602090912001546001600160a01b031614156200094d57600b80546200088a9060019062000d5c565b815481106200089d576200089d62000df5565b600091825260209091200154600b80546001600160a01b039092169183908110620008cc57620008cc62000df5565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600a90925220805460ff19169055600b80548062000927576200092762000e0b565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80620009598162000e21565b91505062000831565b6000600c54821115620009cb5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401620004f9565b6000620009d7620009fa565b9050620009f3818462000a2d60201b6200221b1790919060201c565b9392505050565b6000808062000a0862000a77565b9150915062000a26818362000a2d60201b6200221b1790919060201c565b9250505090565b6000620009f383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000c5d60201b60201c565b600c5460009081906b033b2e3c9fd0803ce8000000825b600b5481101562000c0a578260066000600b848154811062000ab45762000ab462000df5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000b2357508160076000600b848154811062000afc5762000afc62000df5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000b43575050600c54936b033b2e3c9fd0803ce80000009350915050565b62000b9a60066000600b848154811062000b615762000b6162000df5565b60009182526020808320909101546001600160a01b0316835282810193909352604090910190205485916200225d62000c99821b17901c565b925062000bf360076000600b848154811062000bba5762000bba62000df5565b60009182526020808320909101546001600160a01b0316835282810193909352604090910190205484916200225d62000c99821b17901c565b91508062000c018162000e21565b91505062000a8e565b5062000c336b033b2e3c9fd0803ce8000000600c5462000a2d60201b6200221b1790919060201c565b82101562000c54575050600c54926b033b2e3c9fd0803ce800000092509050565b90939092509050565b6000818362000c815760405162461bcd60e51b8152600401620004f9919062000e3f565b50600062000c90848662000d98565b95945050505050565b6000620009f383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525062000ce360201b60201c565b6000818484111562000d0a5760405162461bcd60e51b8152600401620004f9919062000e3f565b50600062000c90848662000d5c565b634e487b7160e01b600052601260045260246000fd5b60008262000d415762000d4162000d19565b500690565b634e487b7160e01b600052601160045260246000fd5b60008282101562000d715762000d7162000d46565b500390565b600081600019048311821515161562000d935762000d9362000d46565b500290565b60008262000daa5762000daa62000d19565b500490565b60006020828403121562000dc257600080fd5b81516001600160a01b0381168114620009f357600080fd5b6000821982111562000df05762000df062000d46565b500190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060001982141562000e385762000e3862000d46565b5060010190565b600060208083528351808285015260005b8181101562000e6e5785810183015185820160400152820162000e50565b8181111562000e81576000604083870101525b50601f01601f1916929092016040019392505050565b613fbf8062000ea76000396000f3fe6080604052600436106104145760003560e01c80637571336a1161021e578063bbc0c74211610123578063dd62ed3e116100ab578063ee40166e1161007a578063ee40166e14610c8d578063efcc52de14610ca3578063f2fde38b14610cb9578063f8b45b0514610cd9578063fabb0b4f14610cef57600080fd5b8063dd62ed3e14610bf2578063e884f26014610c38578063ea2f0b3714610c4d578063ed49418914610c6d57600080fd5b8063c8607952116100f2578063c860795214610b80578063c876d0b914610b96578063c8c8ebe414610bb0578063d2d7ad8314610bc6578063dc44b6a014610bdc57600080fd5b8063bbc0c74214610b15578063bc9663d514610b34578063be4fe9a514610b54578063c5d2418914610b6a57600080fd5b80639f9a4e7f116101a6578063a5ece94111610175578063a5ece94114610a65578063a9059cbb14610a85578063b62496f514610aa5578063b680fefb14610ad5578063ba22abc314610af557600080fd5b80639f9a4e7f146109f0578063a0263c8914610a10578063a073d37f14610a30578063a457c2d714610a4557600080fd5b80638da5cb5b116101ed5780638da5cb5b146109525780638e1f2a4614610970578063944dd5a21461098357806395d89b41146109a35780639a7a23d6146109d057600080fd5b80637571336a146108c357806388790a68146108e357806388f82020146108f95780638cf57cb91461093257600080fd5b80633685d419116103245780635342acb4116102ac5780636ddd17131161027b5780636ddd17131461083957806370a0823114610859578063715018a6146108795780637187507a1461088e578063751039fc146108ae57600080fd5b80635342acb4146107b8578063557ed1ba146107f1578063602bc62b1461080457806360a6f45a1461081957600080fd5b80634549b039116102f35780634549b0391461071d57806349bd5a5e1461073d5780634a62bb651461075d5780634a74bb021461077757806352390c021461079857600080fd5b80633685d4191461069d57806339509351146106bd5780633ff4c478146106dd578063437823ec146106fd57600080fd5b80631694505e116103a757806323b872dd1161037657806323b872dd1461060157806325b86edf146106215780632d83811914610641578063313ce567146106615780633221c93f1461067d57600080fd5b80631694505e1461057557806318160ddd146105ad578063200a692d146105cb5780632369bf83146105e157600080fd5b8063095ea7b3116103e3578063095ea7b3146104c75780630f3a325f146104f757806310d5de531461053057806313114a9d1461056057600080fd5b806306a1409f1461042057806306fdde031461044257806307c3adf01461048357806309231602146104a757600080fd5b3661041b57005b600080fd5b34801561042c57600080fd5b5061044061043b366004613a85565b610d05565b005b34801561044e57600080fd5b5060408051808201909152600681526511d41510995d60d21b60208201525b60405161047a9190613a9e565b60405180910390f35b34801561048f57600080fd5b5061049960155481565b60405190815260200161047a565b3480156104b357600080fd5b506104406104c2366004613a85565b610d63565b3480156104d357600080fd5b506104e76104e2366004613b0b565b610db0565b604051901515815260200161047a565b34801561050357600080fd5b506104e7610512366004613b37565b6001600160a01b031660009081526028602052604090205460ff1690565b34801561053c57600080fd5b506104e761054b366004613b37565b601e6020526000908152604090205460ff1681565b34801561056c57600080fd5b50600d54610499565b34801561058157600080fd5b50602c54610595906001600160a01b031681565b6040516001600160a01b03909116815260200161047a565b3480156105b957600080fd5b50676765c793fa10079d601b1b610499565b3480156105d757600080fd5b5061049960175481565b3480156105ed57600080fd5b506104406105fc366004613b37565b610dc7565b34801561060d57600080fd5b506104e761061c366004613b54565b610e2b565b34801561062d57600080fd5b506104e761063c366004613b95565b610e94565b34801561064d57600080fd5b5061049961065c366004613a85565b610fc7565b34801561066d57600080fd5b506040516012815260200161047a565b34801561068957600080fd5b50600554610595906001600160a01b031681565b3480156106a957600080fd5b506104406106b8366004613b37565b61104b565b3480156106c957600080fd5b506104e76106d8366004613b0b565b611202565b3480156106e957600080fd5b506104406106f8366004613bce565b611238565b34801561070957600080fd5b50610440610718366004613b37565b6112d8565b34801561072957600080fd5b50610499610738366004613c0e565b611326565b34801561074957600080fd5b50602d54610595906001600160a01b031681565b34801561076957600080fd5b50601d546104e79060ff1681565b34801561078357600080fd5b50602d546104e790600160a81b900460ff1681565b3480156107a457600080fd5b506104406107b3366004613b37565b6113bc565b3480156107c457600080fd5b506104e76107d3366004613b37565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156107fd57600080fd5b5042610499565b34801561081057600080fd5b50600254610499565b34801561082557600080fd5b50610440610834366004613b37565b6115aa565b34801561084557600080fd5b50601d546104e79062010000900460ff1681565b34801561086557600080fd5b50610499610874366004613b37565b6116a2565b34801561088557600080fd5b50610440611701565b34801561089a57600080fd5b506104406108a9366004613bce565b611775565b3480156108ba57600080fd5b506104e761180f565b3480156108cf57600080fd5b506104406108de366004613c33565b61185e565b3480156108ef57600080fd5b5061049960185481565b34801561090557600080fd5b506104e7610914366004613b37565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561093e57600080fd5b50600454610595906001600160a01b031681565b34801561095e57600080fd5b506000546001600160a01b0316610595565b61044061097e366004613a85565b6118e7565b34801561098f57600080fd5b5061044061099e366004613b37565b611a73565b3480156109af57600080fd5b5060408051808201909152600481526311d0915560e21b602082015261046d565b3480156109dc57600080fd5b506104406109eb366004613c33565b611ad7565b3480156109fc57600080fd5b50610440610a0b366004613c61565b611b8f565b348015610a1c57600080fd5b50610440610a2b366004613c61565b611c11565b348015610a3c57600080fd5b50602954610499565b348015610a5157600080fd5b506104e7610a60366004613b0b565b611c4e565b348015610a7157600080fd5b50600354610595906001600160a01b031681565b348015610a9157600080fd5b506104e7610aa0366004613b0b565b611c9d565b348015610ab157600080fd5b506104e7610ac0366004613b37565b60276020526000908152604090205460ff1681565b348015610ae157600080fd5b50610440610af0366004613b37565b611caa565b348015610b0157600080fd5b506104e7610b10366004613a85565b611d0e565b348015610b2157600080fd5b50601d546104e790610100900460ff1681565b348015610b4057600080fd5b50610440610b4f366004613a85565b611e43565b348015610b6057600080fd5b5061049960195481565b348015610b7657600080fd5b5061049960165481565b348015610b8c57600080fd5b50610499601a5481565b348015610ba257600080fd5b506020546104e79060ff1681565b348015610bbc57600080fd5b50610499602a5481565b348015610bd257600080fd5b5061049960295481565b348015610be857600080fd5b5061049960145481565b348015610bfe57600080fd5b50610499610c0d366004613b95565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610c4457600080fd5b506104e7611efe565b348015610c5957600080fd5b50610440610c68366004613b37565b611f39565b348015610c7957600080fd5b50610440610c88366004613c7e565b611f84565b348015610c9957600080fd5b50610499601b5481565b348015610caf57600080fd5b5061049960135481565b348015610cc557600080fd5b50610440610cd4366004613b37565b612131565b348015610ce557600080fd5b50610499602b5481565b348015610cfb57600080fd5b50610499601c5481565b6000546001600160a01b03163314610d385760405162461bcd60e51b8152600401610d2f90613d04565b60405180910390fd5b601d805461ff001916610100179055602d805460ff60a81b1916600160a81b17905543601b55601c55565b6000546001600160a01b03163314610d8d5760405162461bcd60e51b8152600401610d2f90613d04565b61012c811015610d9c57600080fd5b610daa81633b9aca00613d4f565b60265550565b6000610dbd33848461229f565b5060015b92915050565b6000546001600160a01b03163314610df15760405162461bcd60e51b8152600401610d2f90613d04565b600380546001600160a01b039092166001600160a01b0319909216821790556000908152600960205260409020805460ff19166001179055565b6000610e388484846123c3565b610e8a8433610e8585604051806060016040528060288152602001613f3d602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190612be5565b61229f565b5060019392505050565b600080546001600160a01b03163314610ebf5760405162461bcd60e51b8152600401610d2f90613d04565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015610f0157600080fd5b505afa158015610f15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f399190613d6e565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015610f8757600080fd5b505af1158015610f9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbf9190613d87565b949350505050565b6000600c5482111561102e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610d2f565b6000611038612c1f565b9050611044838261221b565b9392505050565b6000546001600160a01b031633146110755760405162461bcd60e51b8152600401610d2f90613d04565b6001600160a01b0381166000908152600a602052604090205460ff166110dd5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610d2f565b60005b600b548110156111fe57816001600160a01b0316600b828154811061110757611107613da4565b6000918252602090912001546001600160a01b031614156111ec57600b805461113290600190613dba565b8154811061114257611142613da4565b600091825260209091200154600b80546001600160a01b03909216918390811061116e5761116e613da4565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600a90925220805460ff19169055600b8054806111c6576111c6613dd1565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806111f681613de7565b9150506110e0565b5050565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610dbd918590610e859086612c42565b601384905560148390556015829055601681905560215461125a90600561221b565b6016546015546014546013546112709190613e02565b61127a9190613e02565b6112849190613e02565b10156112d25760405162461bcd60e51b815260206004820152601960248201527f4d757374206b6565702074617865732062656c6f7720313025000000000000006044820152606401610d2f565b50505050565b6000546001600160a01b031633146113025760405162461bcd60e51b8152600401610d2f90613d04565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000676765c793fa10079d601b1b8311156113835760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610d2f565b816113a257600061139384612ca1565b50939550610dc1945050505050565b60006113ad84612ca1565b50929550610dc1945050505050565b6000546001600160a01b031633146113e65760405162461bcd60e51b8152600401610d2f90613d04565b6001600160a01b0381166000908152600a602052604090205460ff161561144f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610d2f565b600b54603290611460906001613e02565b11156114ea5760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610d2f565b6001600160a01b03811660009081526006602052604090205415611544576001600160a01b03811660009081526006602052604090205461152a90610fc7565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000546001600160a01b031633146115d45760405162461bcd60e51b8152600401610d2f90613d04565b60405147906000906001600160a01b0384169083908381818185875af1925050503d8060008114611621576040519150601f19603f3d011682016040523d82523d6000602084013e611626565b606091505b505090508061169d5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610d2f565b505050565b6001600160a01b0381166000908152600a602052604081205460ff16156116df57506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610dc190610fc7565b6000546001600160a01b0316331461172b5760405162461bcd60e51b8152600401610d2f90613d04565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b601784905560188390556019829055601a81905560215461179790600561221b565b601a546019546018546017546117ad9190613e02565b6117b79190613e02565b6117c19190613e02565b10156112d25760405162461bcd60e51b815260206004820152601960248201527f4d757374206b6565702074617865732062656c6f7720323525000000000000006044820152606401610d2f565b600080546001600160a01b0316331461183a5760405162461bcd60e51b8152600401610d2f90613d04565b50601d805460ff199081169091556025805482169055602080549091169055600190565b6000546001600160a01b031633146118885760405162461bcd60e51b8152600401610d2f90613d04565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527f575f9d01836c9206322151b9e9ec3f2b77b87e71176933b9b44d2d732f768d95910160405180910390a25050565b6000546001600160a01b031633146119115760405162461bcd60e51b8152600401610d2f90613d04565b6040805160028082526060820183526000926020830190803683375050602c54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561197657600080fd5b505afa15801561198a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ae9190613e1a565b816000815181106119c1576119c1613da4565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106119f5576119f5613da4565b6001600160a01b039283166020918202929092010152602c5460405163b6f9de9560e01b815291169063b6f9de95908490611a3d90600090869061dead904290600401613e7b565b6000604051808303818588803b158015611a5657600080fd5b505af1158015611a6a573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314611a9d5760405162461bcd60e51b8152600401610d2f90613d04565b600480546001600160a01b039092166001600160a01b0319909216821790556000908152600960205260409020805460ff19166001179055565b6000546001600160a01b03163314611b015760405162461bcd60e51b8152600401610d2f90613d04565b602d546001600160a01b0383811691161415611b855760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d2f565b6111fe8282612cf0565b6000546001600160a01b03163314611bb95760405162461bcd60e51b8152600401610d2f90613d04565b602d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611c0690831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611c3b5760405162461bcd60e51b8152600401610d2f90613d04565b6025805460ff1916911515919091179055565b6000610dbd3384610e8585604051806060016040528060258152602001613f65602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190612be5565b6000610dbd3384846123c3565b6000546001600160a01b03163314611cd45760405162461bcd60e51b8152600401610d2f90613d04565b600580546001600160a01b039092166001600160a01b0319909216821790556000908152600960205260409020805460ff19166001179055565b600080546001600160a01b03163314611d395760405162461bcd60e51b8152600401610d2f90613d04565b6001821015611da85760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d2f565b6032821115611e165760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610d2f565b612710611e2e83676765c793fa10079d601b1b613d4f565b611e389190613eb0565b602955506001919050565b6000546001600160a01b03163314611e6d5760405162461bcd60e51b8152600401610d2f90613d04565b600a811015611ed65760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610d2f565b612710611eee82676765c793fa10079d601b1b613d4f565b611ef89190613eb0565b602a5550565b600080546001600160a01b03163314611f295760405162461bcd60e51b8152600401610d2f90613d04565b506020805460ff19169055600190565b6000546001600160a01b03163314611f635760405162461bcd60e51b8152600401610d2f90613d04565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b03163314611fae5760405162461bcd60e51b8152600401610d2f90613d04565b60005b828110156112d257600182151514156120cd5730848483818110611fd757611fd7613da4565b9050602002016020810190611fec9190613b37565b6001600160a01b031614156120435760405162461bcd60e51b815260206004820152601e60248201527f43616e277420626c61636b6c69737420746f6b656e20636f6e747261637400006044820152606401610d2f565b602d546001600160a01b031684848381811061206157612061613da4565b90506020020160208101906120769190613b37565b6001600160a01b031614156120cd5760405162461bcd60e51b815260206004820152601d60248201527f43616e277420626c61636b6c697374207061697220636f6e74726163740000006044820152606401610d2f565b81602860008686858181106120e4576120e4613da4565b90506020020160208101906120f99190613b37565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561212a81613de7565b9050611fb1565b6000546001600160a01b0316331461215b5760405162461bcd60e51b8152600401610d2f90613d04565b6001600160a01b0381166121c05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d2f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600061104483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d3b565b600061104483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612be5565b6001600160a01b0383166123015760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d2f565b6001600160a01b0382166123625760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d2f565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216158015906123e357506001600160a01b03831615155b61243d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d2f565b6000811161249f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d2f565b601d5460ff161561298c576000546001600160a01b038481169116148015906124d657506000546001600160a01b03838116911614155b80156124ea57506001600160a01b03821615155b801561250157506001600160a01b03821661dead14155b80156125175750602d54600160a01b900460ff16155b1561298c57601d54610100900460ff166125735760405162461bcd60e51b815260206004820152601960248201527f54726164696e67206973206e6f742061637469766520796574000000000000006044820152606401610d2f565b6000601b54118015612593575043601c54601b546125919190613e02565b115b156125bc576001600160a01b0382166000908152602860205260409020805460ff191660011790555b60255460ff1680156125e657506001600160a01b03831660009081526027602052604090205460ff165b1561263d576026543a111561263d5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610d2f565b60205460ff161561273c576000546001600160a01b038381169116148015906126745750602c546001600160a01b03838116911614155b801561268e5750602d546001600160a01b03838116911614155b1561273c57326000908152601f602052604090205443116127295760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610d2f565b326000908152601f602052604090204390555b6001600160a01b03831660009081526027602052604090205460ff16801561277d57506001600160a01b0382166000908152601e602052604090205460ff16155b1561285657602a548111156127f25760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610d2f565b602b546127fe836116a2565b6128089083613e02565b11156128515760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610d2f565b61298c565b6001600160a01b03821660009081526027602052604090205460ff16801561289757506001600160a01b0383166000908152601e602052604090205460ff16155b1561290d57602a548111156128515760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610d2f565b6001600160a01b0382166000908152601e602052604090205460ff1661298c57602b54612939836116a2565b6129439083613e02565b111561298c5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610d2f565b6000612997306116a2565b6029546001600160a01b0386166000908152600960205260409020549192508210159060ff161580156129e357506001600160a01b03841660009081526009602052604090205460ff16155b80156129f95750602d54600160a01b900460ff16155b8015612a0e5750602d54600160a81b900460ff165b8015612a2f5750602d54600090612a2d906001600160a01b03166116a2565b115b8015612a385750805b8015612a5c57506001600160a01b03841660009081526027602052604090205460ff165b15612a6957612a69612d69565b612a71612fdf565b6003600e556001600160a01b03851660009081526009602052604090205460ff16158015612ab857506001600160a01b03841660009081526009602052604090205460ff16155b15612bc2576001600160a01b03851660009081526027602052604090205460ff1615612b1657601354600f55601654601554601454612af79190613e02565b612b019190613e02565b601181905515612b11576001600e555b612b6a565b6001600160a01b03841660009081526027602052604090205460ff1615612b6a57601754600f55601a54601954601854612b509190613e02565b612b5a9190613e02565b601181905515612b6a576002600e555b6001600160a01b03841660009081526028602052604090205460ff1680612ba957506001600160a01b03851660009081526028602052604090205460ff165b8015612bb757506000601154115b15612bc25760636011555b612bcd85858561300d565b612bde601054600f55601254601155565b5050505050565b60008184841115612c095760405162461bcd60e51b8152600401610d2f9190613a9e565b506000612c168486613dba565b95945050505050565b6000806000612c2c61310a565b9092509050612c3b828261221b565b9250505090565b600080612c4f8385613e02565b9050838110156110445760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610d2f565b6000806000806000806000806000612cb88a6132ae565b9250925092506000806000612cd68d8686612cd1612c1f565b6132ea565b919f909e50909c50959a5093985091965092945050505050565b6001600160a01b0382166000908152602760205260409020805460ff1916821515179055612d1e828261185e565b8015612d2d57612d2d826113bc565b806111fe576111fe8261104b565b60008183612d5c5760405162461bcd60e51b8152600401610d2f9190613a9e565b506000612c168486613eb0565b602d805460ff60a01b1916600160a01b1790556000612d87306116a2565b9050600080602454602354602254612d9f9190613e02565b612da99190613e02565b9050801580612db6575082155b15612dc357505050612fd0565b600060028260225486612dd69190613d4f565b612de09190613eb0565b612dea9190613eb0565b90506000612e0d602354612e07848861225d90919063ffffffff16565b9061225d565b905047612e198261333a565b6000612e25478361225d565b90506000612e4886612e42602454856134a390919063ffffffff16565b9061221b565b90506000612e568284613dba565b90506000612e62612c1f565b90506000612e7b826023546134a390919063ffffffff16565b6004546001600160a01b0316600090815260066020526040902054909150612ea39082612c42565b600480546001600160a01b039081166000908152600660209081526040808320959095556023549354909216815260079091529190912054612ee491612c42565b6004546001600160a01b0316600090815260076020526040812091909155602281905560238190556024558715801590612f1e5750600083115b15612f6f57612f2d8884613522565b60408051888152602081018590529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6003546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612fbc576040519150601f19603f3d011682016040523d82523d6000602084013e612fc1565b606091505b50505050505050505050505050505b602d805460ff60a01b19169055565b600f54158015612fef5750601154155b15612ff657565b600f80546010556011805460125560009182905555565b6001600160a01b0383166000908152600a602052604090205460ff16801561304e57506001600160a01b0382166000908152600a602052604090205460ff16155b1561305e5761169d8383836135de565b6001600160a01b0383166000908152600a602052604090205460ff1615801561309f57506001600160a01b0382166000908152600a602052604090205460ff165b156130af5761169d838383613704565b6001600160a01b0383166000908152600a602052604090205460ff1680156130ef57506001600160a01b0382166000908152600a602052604090205460ff165b156130ff5761169d8383836137ad565b61169d838383613820565b600c546000908190676765c793fa10079d601b1b825b600b5481101561326d578260066000600b848154811061314257613142613da4565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806131ad57508160076000600b848154811061318657613186613da4565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156131cb575050600c5493676765c793fa10079d601b1b9350915050565b61321160066000600b84815481106131e5576131e5613da4565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061225d565b925061325960076000600b848154811061322d5761322d613da4565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061225d565b91508061326581613de7565b915050613120565b50600c5461328690676765c793fa10079d601b1b61221b565b8210156132a5575050600c5492676765c793fa10079d601b1b92509050565b90939092509050565b6000806000806132bd85613864565b905060006132ca86613880565b905060006132dc82612e07898661225d565b979296509094509092505050565b60008080806132f988866134a3565b9050600061330788876134a3565b9050600061331588886134a3565b9050600061332782612e07868661225d565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061336f5761336f613da4565b6001600160a01b03928316602091820292909201810191909152602c54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156133c357600080fd5b505afa1580156133d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133fb9190613e1a565b8160018151811061340e5761340e613da4565b6001600160a01b039283166020918202929092010152602c54613434913091168461229f565b602c5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061346d908590600090869030904290600401613ed2565b600060405180830381600087803b15801561348757600080fd5b505af115801561349b573d6000803e3d6000fd5b505050505050565b6000826134b257506000610dc1565b60006134be8385613d4f565b9050826134cb8583613eb0565b146110445760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610d2f565b602c5461353a9030906001600160a01b03168461229f565b602c5460055460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b1580156135a557600080fd5b505af11580156135b9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612bde9190613f0e565b6000806000806000806135f087612ca1565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150613622908861225d565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054613651908761225d565b6001600160a01b03808b1660009081526006602052604080822093909355908a16815220546136809086612c42565b6001600160a01b0389166000908152600660205260409020556136a28161389c565b6136ac8483613a61565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516136f191815260200190565b60405180910390a3505050505050505050565b60008060008060008061371687612ca1565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150613748908761225d565b6001600160a01b03808b16600090815260066020908152604080832094909455918b1681526007909152205461377e9084612c42565b6001600160a01b0389166000908152600760209081526040808320939093556006905220546136809086612c42565b6000806000806000806137bf87612ca1565b6001600160a01b038f16600090815260076020526040902054959b509399509197509550935091506137f1908861225d565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054613748908761225d565b60008060008060008061383287612ca1565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150613651908761225d565b6000610dc16064612e42600f54856134a390919063ffffffff16565b6000610dc16064612e42601154856134a390919063ffffffff16565b6001600e54141561393d576011546014546138b79083613d4f565b6138c19190613eb0565b602260008282546138d29190613e02565b90915550506011546015546138e79083613d4f565b6138f19190613eb0565b602360008282546139029190613e02565b90915550506011546016546139179083613d4f565b6139219190613eb0565b602460008282546139329190613e02565b909155506139d99050565b6002600e5414156139d9576011546018546139589083613d4f565b6139629190613eb0565b602260008282546139739190613e02565b90915550506011546019546139889083613d4f565b6139929190613eb0565b602360008282546139a39190613e02565b9091555050601154601a546139b89083613d4f565b6139c29190613eb0565b602460008282546139d39190613e02565b90915550505b60006139e3612c1f565b905060006139f183836134a3565b30600090815260066020526040902054909150613a0e9082612c42565b30600090815260066020908152604080832093909355600a9052205460ff161561169d5730600090815260076020526040902054613a4c9084612c42565b30600090815260076020526040902055505050565b600c54613a6e908361225d565b600c55600d54613a7e9082612c42565b600d555050565b600060208284031215613a9757600080fd5b5035919050565b600060208083528351808285015260005b81811015613acb57858101830151858201604001528201613aaf565b81811115613add576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114613b0857600080fd5b50565b60008060408385031215613b1e57600080fd5b8235613b2981613af3565b946020939093013593505050565b600060208284031215613b4957600080fd5b813561104481613af3565b600080600060608486031215613b6957600080fd5b8335613b7481613af3565b92506020840135613b8481613af3565b929592945050506040919091013590565b60008060408385031215613ba857600080fd5b8235613bb381613af3565b91506020830135613bc381613af3565b809150509250929050565b60008060008060808587031215613be457600080fd5b5050823594602084013594506040840135936060013592509050565b8015158114613b0857600080fd5b60008060408385031215613c2157600080fd5b823591506020830135613bc381613c00565b60008060408385031215613c4657600080fd5b8235613c5181613af3565b91506020830135613bc381613c00565b600060208284031215613c7357600080fd5b813561104481613c00565b600080600060408486031215613c9357600080fd5b833567ffffffffffffffff80821115613cab57600080fd5b818601915086601f830112613cbf57600080fd5b813581811115613cce57600080fd5b8760208260051b8501011115613ce357600080fd5b60209283019550935050840135613cf981613c00565b809150509250925092565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613d6957613d69613d39565b500290565b600060208284031215613d8057600080fd5b5051919050565b600060208284031215613d9957600080fd5b815161104481613c00565b634e487b7160e01b600052603260045260246000fd5b600082821015613dcc57613dcc613d39565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415613dfb57613dfb613d39565b5060010190565b60008219821115613e1557613e15613d39565b500190565b600060208284031215613e2c57600080fd5b815161104481613af3565b600081518084526020808501945080840160005b83811015613e705781516001600160a01b031687529582019590820190600101613e4b565b509495945050505050565b848152608060208201526000613e946080830186613e37565b6001600160a01b03949094166040830152506060015292915050565b600082613ecd57634e487b7160e01b600052601260045260246000fd5b500490565b85815284602082015260a060408201526000613ef160a0830186613e37565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613f2357600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205fedd8b13051c9a9f1995f2de8cb097e5803f130e59b4ad1c14623fe5716adad64736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106104145760003560e01c80637571336a1161021e578063bbc0c74211610123578063dd62ed3e116100ab578063ee40166e1161007a578063ee40166e14610c8d578063efcc52de14610ca3578063f2fde38b14610cb9578063f8b45b0514610cd9578063fabb0b4f14610cef57600080fd5b8063dd62ed3e14610bf2578063e884f26014610c38578063ea2f0b3714610c4d578063ed49418914610c6d57600080fd5b8063c8607952116100f2578063c860795214610b80578063c876d0b914610b96578063c8c8ebe414610bb0578063d2d7ad8314610bc6578063dc44b6a014610bdc57600080fd5b8063bbc0c74214610b15578063bc9663d514610b34578063be4fe9a514610b54578063c5d2418914610b6a57600080fd5b80639f9a4e7f116101a6578063a5ece94111610175578063a5ece94114610a65578063a9059cbb14610a85578063b62496f514610aa5578063b680fefb14610ad5578063ba22abc314610af557600080fd5b80639f9a4e7f146109f0578063a0263c8914610a10578063a073d37f14610a30578063a457c2d714610a4557600080fd5b80638da5cb5b116101ed5780638da5cb5b146109525780638e1f2a4614610970578063944dd5a21461098357806395d89b41146109a35780639a7a23d6146109d057600080fd5b80637571336a146108c357806388790a68146108e357806388f82020146108f95780638cf57cb91461093257600080fd5b80633685d419116103245780635342acb4116102ac5780636ddd17131161027b5780636ddd17131461083957806370a0823114610859578063715018a6146108795780637187507a1461088e578063751039fc146108ae57600080fd5b80635342acb4146107b8578063557ed1ba146107f1578063602bc62b1461080457806360a6f45a1461081957600080fd5b80634549b039116102f35780634549b0391461071d57806349bd5a5e1461073d5780634a62bb651461075d5780634a74bb021461077757806352390c021461079857600080fd5b80633685d4191461069d57806339509351146106bd5780633ff4c478146106dd578063437823ec146106fd57600080fd5b80631694505e116103a757806323b872dd1161037657806323b872dd1461060157806325b86edf146106215780632d83811914610641578063313ce567146106615780633221c93f1461067d57600080fd5b80631694505e1461057557806318160ddd146105ad578063200a692d146105cb5780632369bf83146105e157600080fd5b8063095ea7b3116103e3578063095ea7b3146104c75780630f3a325f146104f757806310d5de531461053057806313114a9d1461056057600080fd5b806306a1409f1461042057806306fdde031461044257806307c3adf01461048357806309231602146104a757600080fd5b3661041b57005b600080fd5b34801561042c57600080fd5b5061044061043b366004613a85565b610d05565b005b34801561044e57600080fd5b5060408051808201909152600681526511d41510995d60d21b60208201525b60405161047a9190613a9e565b60405180910390f35b34801561048f57600080fd5b5061049960155481565b60405190815260200161047a565b3480156104b357600080fd5b506104406104c2366004613a85565b610d63565b3480156104d357600080fd5b506104e76104e2366004613b0b565b610db0565b604051901515815260200161047a565b34801561050357600080fd5b506104e7610512366004613b37565b6001600160a01b031660009081526028602052604090205460ff1690565b34801561053c57600080fd5b506104e761054b366004613b37565b601e6020526000908152604090205460ff1681565b34801561056c57600080fd5b50600d54610499565b34801561058157600080fd5b50602c54610595906001600160a01b031681565b6040516001600160a01b03909116815260200161047a565b3480156105b957600080fd5b50676765c793fa10079d601b1b610499565b3480156105d757600080fd5b5061049960175481565b3480156105ed57600080fd5b506104406105fc366004613b37565b610dc7565b34801561060d57600080fd5b506104e761061c366004613b54565b610e2b565b34801561062d57600080fd5b506104e761063c366004613b95565b610e94565b34801561064d57600080fd5b5061049961065c366004613a85565b610fc7565b34801561066d57600080fd5b506040516012815260200161047a565b34801561068957600080fd5b50600554610595906001600160a01b031681565b3480156106a957600080fd5b506104406106b8366004613b37565b61104b565b3480156106c957600080fd5b506104e76106d8366004613b0b565b611202565b3480156106e957600080fd5b506104406106f8366004613bce565b611238565b34801561070957600080fd5b50610440610718366004613b37565b6112d8565b34801561072957600080fd5b50610499610738366004613c0e565b611326565b34801561074957600080fd5b50602d54610595906001600160a01b031681565b34801561076957600080fd5b50601d546104e79060ff1681565b34801561078357600080fd5b50602d546104e790600160a81b900460ff1681565b3480156107a457600080fd5b506104406107b3366004613b37565b6113bc565b3480156107c457600080fd5b506104e76107d3366004613b37565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156107fd57600080fd5b5042610499565b34801561081057600080fd5b50600254610499565b34801561082557600080fd5b50610440610834366004613b37565b6115aa565b34801561084557600080fd5b50601d546104e79062010000900460ff1681565b34801561086557600080fd5b50610499610874366004613b37565b6116a2565b34801561088557600080fd5b50610440611701565b34801561089a57600080fd5b506104406108a9366004613bce565b611775565b3480156108ba57600080fd5b506104e761180f565b3480156108cf57600080fd5b506104406108de366004613c33565b61185e565b3480156108ef57600080fd5b5061049960185481565b34801561090557600080fd5b506104e7610914366004613b37565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561093e57600080fd5b50600454610595906001600160a01b031681565b34801561095e57600080fd5b506000546001600160a01b0316610595565b61044061097e366004613a85565b6118e7565b34801561098f57600080fd5b5061044061099e366004613b37565b611a73565b3480156109af57600080fd5b5060408051808201909152600481526311d0915560e21b602082015261046d565b3480156109dc57600080fd5b506104406109eb366004613c33565b611ad7565b3480156109fc57600080fd5b50610440610a0b366004613c61565b611b8f565b348015610a1c57600080fd5b50610440610a2b366004613c61565b611c11565b348015610a3c57600080fd5b50602954610499565b348015610a5157600080fd5b506104e7610a60366004613b0b565b611c4e565b348015610a7157600080fd5b50600354610595906001600160a01b031681565b348015610a9157600080fd5b506104e7610aa0366004613b0b565b611c9d565b348015610ab157600080fd5b506104e7610ac0366004613b37565b60276020526000908152604090205460ff1681565b348015610ae157600080fd5b50610440610af0366004613b37565b611caa565b348015610b0157600080fd5b506104e7610b10366004613a85565b611d0e565b348015610b2157600080fd5b50601d546104e790610100900460ff1681565b348015610b4057600080fd5b50610440610b4f366004613a85565b611e43565b348015610b6057600080fd5b5061049960195481565b348015610b7657600080fd5b5061049960165481565b348015610b8c57600080fd5b50610499601a5481565b348015610ba257600080fd5b506020546104e79060ff1681565b348015610bbc57600080fd5b50610499602a5481565b348015610bd257600080fd5b5061049960295481565b348015610be857600080fd5b5061049960145481565b348015610bfe57600080fd5b50610499610c0d366004613b95565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610c4457600080fd5b506104e7611efe565b348015610c5957600080fd5b50610440610c68366004613b37565b611f39565b348015610c7957600080fd5b50610440610c88366004613c7e565b611f84565b348015610c9957600080fd5b50610499601b5481565b348015610caf57600080fd5b5061049960135481565b348015610cc557600080fd5b50610440610cd4366004613b37565b612131565b348015610ce557600080fd5b50610499602b5481565b348015610cfb57600080fd5b50610499601c5481565b6000546001600160a01b03163314610d385760405162461bcd60e51b8152600401610d2f90613d04565b60405180910390fd5b601d805461ff001916610100179055602d805460ff60a81b1916600160a81b17905543601b55601c55565b6000546001600160a01b03163314610d8d5760405162461bcd60e51b8152600401610d2f90613d04565b61012c811015610d9c57600080fd5b610daa81633b9aca00613d4f565b60265550565b6000610dbd33848461229f565b5060015b92915050565b6000546001600160a01b03163314610df15760405162461bcd60e51b8152600401610d2f90613d04565b600380546001600160a01b039092166001600160a01b0319909216821790556000908152600960205260409020805460ff19166001179055565b6000610e388484846123c3565b610e8a8433610e8585604051806060016040528060288152602001613f3d602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190612be5565b61229f565b5060019392505050565b600080546001600160a01b03163314610ebf5760405162461bcd60e51b8152600401610d2f90613d04565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015610f0157600080fd5b505afa158015610f15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f399190613d6e565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015610f8757600080fd5b505af1158015610f9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbf9190613d87565b949350505050565b6000600c5482111561102e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610d2f565b6000611038612c1f565b9050611044838261221b565b9392505050565b6000546001600160a01b031633146110755760405162461bcd60e51b8152600401610d2f90613d04565b6001600160a01b0381166000908152600a602052604090205460ff166110dd5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610d2f565b60005b600b548110156111fe57816001600160a01b0316600b828154811061110757611107613da4565b6000918252602090912001546001600160a01b031614156111ec57600b805461113290600190613dba565b8154811061114257611142613da4565b600091825260209091200154600b80546001600160a01b03909216918390811061116e5761116e613da4565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600a90925220805460ff19169055600b8054806111c6576111c6613dd1565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806111f681613de7565b9150506110e0565b5050565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610dbd918590610e859086612c42565b601384905560148390556015829055601681905560215461125a90600561221b565b6016546015546014546013546112709190613e02565b61127a9190613e02565b6112849190613e02565b10156112d25760405162461bcd60e51b815260206004820152601960248201527f4d757374206b6565702074617865732062656c6f7720313025000000000000006044820152606401610d2f565b50505050565b6000546001600160a01b031633146113025760405162461bcd60e51b8152600401610d2f90613d04565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000676765c793fa10079d601b1b8311156113835760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610d2f565b816113a257600061139384612ca1565b50939550610dc1945050505050565b60006113ad84612ca1565b50929550610dc1945050505050565b6000546001600160a01b031633146113e65760405162461bcd60e51b8152600401610d2f90613d04565b6001600160a01b0381166000908152600a602052604090205460ff161561144f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610d2f565b600b54603290611460906001613e02565b11156114ea5760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610d2f565b6001600160a01b03811660009081526006602052604090205415611544576001600160a01b03811660009081526006602052604090205461152a90610fc7565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000546001600160a01b031633146115d45760405162461bcd60e51b8152600401610d2f90613d04565b60405147906000906001600160a01b0384169083908381818185875af1925050503d8060008114611621576040519150601f19603f3d011682016040523d82523d6000602084013e611626565b606091505b505090508061169d5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610d2f565b505050565b6001600160a01b0381166000908152600a602052604081205460ff16156116df57506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610dc190610fc7565b6000546001600160a01b0316331461172b5760405162461bcd60e51b8152600401610d2f90613d04565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b601784905560188390556019829055601a81905560215461179790600561221b565b601a546019546018546017546117ad9190613e02565b6117b79190613e02565b6117c19190613e02565b10156112d25760405162461bcd60e51b815260206004820152601960248201527f4d757374206b6565702074617865732062656c6f7720323525000000000000006044820152606401610d2f565b600080546001600160a01b0316331461183a5760405162461bcd60e51b8152600401610d2f90613d04565b50601d805460ff199081169091556025805482169055602080549091169055600190565b6000546001600160a01b031633146118885760405162461bcd60e51b8152600401610d2f90613d04565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527f575f9d01836c9206322151b9e9ec3f2b77b87e71176933b9b44d2d732f768d95910160405180910390a25050565b6000546001600160a01b031633146119115760405162461bcd60e51b8152600401610d2f90613d04565b6040805160028082526060820183526000926020830190803683375050602c54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561197657600080fd5b505afa15801561198a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ae9190613e1a565b816000815181106119c1576119c1613da4565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106119f5576119f5613da4565b6001600160a01b039283166020918202929092010152602c5460405163b6f9de9560e01b815291169063b6f9de95908490611a3d90600090869061dead904290600401613e7b565b6000604051808303818588803b158015611a5657600080fd5b505af1158015611a6a573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314611a9d5760405162461bcd60e51b8152600401610d2f90613d04565b600480546001600160a01b039092166001600160a01b0319909216821790556000908152600960205260409020805460ff19166001179055565b6000546001600160a01b03163314611b015760405162461bcd60e51b8152600401610d2f90613d04565b602d546001600160a01b0383811691161415611b855760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d2f565b6111fe8282612cf0565b6000546001600160a01b03163314611bb95760405162461bcd60e51b8152600401610d2f90613d04565b602d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611c0690831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611c3b5760405162461bcd60e51b8152600401610d2f90613d04565b6025805460ff1916911515919091179055565b6000610dbd3384610e8585604051806060016040528060258152602001613f65602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190612be5565b6000610dbd3384846123c3565b6000546001600160a01b03163314611cd45760405162461bcd60e51b8152600401610d2f90613d04565b600580546001600160a01b039092166001600160a01b0319909216821790556000908152600960205260409020805460ff19166001179055565b600080546001600160a01b03163314611d395760405162461bcd60e51b8152600401610d2f90613d04565b6001821015611da85760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d2f565b6032821115611e165760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610d2f565b612710611e2e83676765c793fa10079d601b1b613d4f565b611e389190613eb0565b602955506001919050565b6000546001600160a01b03163314611e6d5760405162461bcd60e51b8152600401610d2f90613d04565b600a811015611ed65760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610d2f565b612710611eee82676765c793fa10079d601b1b613d4f565b611ef89190613eb0565b602a5550565b600080546001600160a01b03163314611f295760405162461bcd60e51b8152600401610d2f90613d04565b506020805460ff19169055600190565b6000546001600160a01b03163314611f635760405162461bcd60e51b8152600401610d2f90613d04565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b03163314611fae5760405162461bcd60e51b8152600401610d2f90613d04565b60005b828110156112d257600182151514156120cd5730848483818110611fd757611fd7613da4565b9050602002016020810190611fec9190613b37565b6001600160a01b031614156120435760405162461bcd60e51b815260206004820152601e60248201527f43616e277420626c61636b6c69737420746f6b656e20636f6e747261637400006044820152606401610d2f565b602d546001600160a01b031684848381811061206157612061613da4565b90506020020160208101906120769190613b37565b6001600160a01b031614156120cd5760405162461bcd60e51b815260206004820152601d60248201527f43616e277420626c61636b6c697374207061697220636f6e74726163740000006044820152606401610d2f565b81602860008686858181106120e4576120e4613da4565b90506020020160208101906120f99190613b37565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561212a81613de7565b9050611fb1565b6000546001600160a01b0316331461215b5760405162461bcd60e51b8152600401610d2f90613d04565b6001600160a01b0381166121c05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d2f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600061104483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d3b565b600061104483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612be5565b6001600160a01b0383166123015760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d2f565b6001600160a01b0382166123625760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d2f565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216158015906123e357506001600160a01b03831615155b61243d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d2f565b6000811161249f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d2f565b601d5460ff161561298c576000546001600160a01b038481169116148015906124d657506000546001600160a01b03838116911614155b80156124ea57506001600160a01b03821615155b801561250157506001600160a01b03821661dead14155b80156125175750602d54600160a01b900460ff16155b1561298c57601d54610100900460ff166125735760405162461bcd60e51b815260206004820152601960248201527f54726164696e67206973206e6f742061637469766520796574000000000000006044820152606401610d2f565b6000601b54118015612593575043601c54601b546125919190613e02565b115b156125bc576001600160a01b0382166000908152602860205260409020805460ff191660011790555b60255460ff1680156125e657506001600160a01b03831660009081526027602052604090205460ff165b1561263d576026543a111561263d5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610d2f565b60205460ff161561273c576000546001600160a01b038381169116148015906126745750602c546001600160a01b03838116911614155b801561268e5750602d546001600160a01b03838116911614155b1561273c57326000908152601f602052604090205443116127295760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610d2f565b326000908152601f602052604090204390555b6001600160a01b03831660009081526027602052604090205460ff16801561277d57506001600160a01b0382166000908152601e602052604090205460ff16155b1561285657602a548111156127f25760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610d2f565b602b546127fe836116a2565b6128089083613e02565b11156128515760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610d2f565b61298c565b6001600160a01b03821660009081526027602052604090205460ff16801561289757506001600160a01b0383166000908152601e602052604090205460ff16155b1561290d57602a548111156128515760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610d2f565b6001600160a01b0382166000908152601e602052604090205460ff1661298c57602b54612939836116a2565b6129439083613e02565b111561298c5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610d2f565b6000612997306116a2565b6029546001600160a01b0386166000908152600960205260409020549192508210159060ff161580156129e357506001600160a01b03841660009081526009602052604090205460ff16155b80156129f95750602d54600160a01b900460ff16155b8015612a0e5750602d54600160a81b900460ff165b8015612a2f5750602d54600090612a2d906001600160a01b03166116a2565b115b8015612a385750805b8015612a5c57506001600160a01b03841660009081526027602052604090205460ff165b15612a6957612a69612d69565b612a71612fdf565b6003600e556001600160a01b03851660009081526009602052604090205460ff16158015612ab857506001600160a01b03841660009081526009602052604090205460ff16155b15612bc2576001600160a01b03851660009081526027602052604090205460ff1615612b1657601354600f55601654601554601454612af79190613e02565b612b019190613e02565b601181905515612b11576001600e555b612b6a565b6001600160a01b03841660009081526027602052604090205460ff1615612b6a57601754600f55601a54601954601854612b509190613e02565b612b5a9190613e02565b601181905515612b6a576002600e555b6001600160a01b03841660009081526028602052604090205460ff1680612ba957506001600160a01b03851660009081526028602052604090205460ff165b8015612bb757506000601154115b15612bc25760636011555b612bcd85858561300d565b612bde601054600f55601254601155565b5050505050565b60008184841115612c095760405162461bcd60e51b8152600401610d2f9190613a9e565b506000612c168486613dba565b95945050505050565b6000806000612c2c61310a565b9092509050612c3b828261221b565b9250505090565b600080612c4f8385613e02565b9050838110156110445760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610d2f565b6000806000806000806000806000612cb88a6132ae565b9250925092506000806000612cd68d8686612cd1612c1f565b6132ea565b919f909e50909c50959a5093985091965092945050505050565b6001600160a01b0382166000908152602760205260409020805460ff1916821515179055612d1e828261185e565b8015612d2d57612d2d826113bc565b806111fe576111fe8261104b565b60008183612d5c5760405162461bcd60e51b8152600401610d2f9190613a9e565b506000612c168486613eb0565b602d805460ff60a01b1916600160a01b1790556000612d87306116a2565b9050600080602454602354602254612d9f9190613e02565b612da99190613e02565b9050801580612db6575082155b15612dc357505050612fd0565b600060028260225486612dd69190613d4f565b612de09190613eb0565b612dea9190613eb0565b90506000612e0d602354612e07848861225d90919063ffffffff16565b9061225d565b905047612e198261333a565b6000612e25478361225d565b90506000612e4886612e42602454856134a390919063ffffffff16565b9061221b565b90506000612e568284613dba565b90506000612e62612c1f565b90506000612e7b826023546134a390919063ffffffff16565b6004546001600160a01b0316600090815260066020526040902054909150612ea39082612c42565b600480546001600160a01b039081166000908152600660209081526040808320959095556023549354909216815260079091529190912054612ee491612c42565b6004546001600160a01b0316600090815260076020526040812091909155602281905560238190556024558715801590612f1e5750600083115b15612f6f57612f2d8884613522565b60408051888152602081018590529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6003546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612fbc576040519150601f19603f3d011682016040523d82523d6000602084013e612fc1565b606091505b50505050505050505050505050505b602d805460ff60a01b19169055565b600f54158015612fef5750601154155b15612ff657565b600f80546010556011805460125560009182905555565b6001600160a01b0383166000908152600a602052604090205460ff16801561304e57506001600160a01b0382166000908152600a602052604090205460ff16155b1561305e5761169d8383836135de565b6001600160a01b0383166000908152600a602052604090205460ff1615801561309f57506001600160a01b0382166000908152600a602052604090205460ff165b156130af5761169d838383613704565b6001600160a01b0383166000908152600a602052604090205460ff1680156130ef57506001600160a01b0382166000908152600a602052604090205460ff165b156130ff5761169d8383836137ad565b61169d838383613820565b600c546000908190676765c793fa10079d601b1b825b600b5481101561326d578260066000600b848154811061314257613142613da4565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806131ad57508160076000600b848154811061318657613186613da4565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156131cb575050600c5493676765c793fa10079d601b1b9350915050565b61321160066000600b84815481106131e5576131e5613da4565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061225d565b925061325960076000600b848154811061322d5761322d613da4565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061225d565b91508061326581613de7565b915050613120565b50600c5461328690676765c793fa10079d601b1b61221b565b8210156132a5575050600c5492676765c793fa10079d601b1b92509050565b90939092509050565b6000806000806132bd85613864565b905060006132ca86613880565b905060006132dc82612e07898661225d565b979296509094509092505050565b60008080806132f988866134a3565b9050600061330788876134a3565b9050600061331588886134a3565b9050600061332782612e07868661225d565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061336f5761336f613da4565b6001600160a01b03928316602091820292909201810191909152602c54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156133c357600080fd5b505afa1580156133d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133fb9190613e1a565b8160018151811061340e5761340e613da4565b6001600160a01b039283166020918202929092010152602c54613434913091168461229f565b602c5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061346d908590600090869030904290600401613ed2565b600060405180830381600087803b15801561348757600080fd5b505af115801561349b573d6000803e3d6000fd5b505050505050565b6000826134b257506000610dc1565b60006134be8385613d4f565b9050826134cb8583613eb0565b146110445760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610d2f565b602c5461353a9030906001600160a01b03168461229f565b602c5460055460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b1580156135a557600080fd5b505af11580156135b9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612bde9190613f0e565b6000806000806000806135f087612ca1565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150613622908861225d565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054613651908761225d565b6001600160a01b03808b1660009081526006602052604080822093909355908a16815220546136809086612c42565b6001600160a01b0389166000908152600660205260409020556136a28161389c565b6136ac8483613a61565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516136f191815260200190565b60405180910390a3505050505050505050565b60008060008060008061371687612ca1565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150613748908761225d565b6001600160a01b03808b16600090815260066020908152604080832094909455918b1681526007909152205461377e9084612c42565b6001600160a01b0389166000908152600760209081526040808320939093556006905220546136809086612c42565b6000806000806000806137bf87612ca1565b6001600160a01b038f16600090815260076020526040902054959b509399509197509550935091506137f1908861225d565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054613748908761225d565b60008060008060008061383287612ca1565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150613651908761225d565b6000610dc16064612e42600f54856134a390919063ffffffff16565b6000610dc16064612e42601154856134a390919063ffffffff16565b6001600e54141561393d576011546014546138b79083613d4f565b6138c19190613eb0565b602260008282546138d29190613e02565b90915550506011546015546138e79083613d4f565b6138f19190613eb0565b602360008282546139029190613e02565b90915550506011546016546139179083613d4f565b6139219190613eb0565b602460008282546139329190613e02565b909155506139d99050565b6002600e5414156139d9576011546018546139589083613d4f565b6139629190613eb0565b602260008282546139739190613e02565b90915550506011546019546139889083613d4f565b6139929190613eb0565b602360008282546139a39190613e02565b9091555050601154601a546139b89083613d4f565b6139c29190613eb0565b602460008282546139d39190613e02565b90915550505b60006139e3612c1f565b905060006139f183836134a3565b30600090815260066020526040902054909150613a0e9082612c42565b30600090815260066020908152604080832093909355600a9052205460ff161561169d5730600090815260076020526040902054613a4c9084612c42565b30600090815260076020526040902055505050565b600c54613a6e908361225d565b600c55600d54613a7e9082612c42565b600d555050565b600060208284031215613a9757600080fd5b5035919050565b600060208083528351808285015260005b81811015613acb57858101830151858201604001528201613aaf565b81811115613add576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114613b0857600080fd5b50565b60008060408385031215613b1e57600080fd5b8235613b2981613af3565b946020939093013593505050565b600060208284031215613b4957600080fd5b813561104481613af3565b600080600060608486031215613b6957600080fd5b8335613b7481613af3565b92506020840135613b8481613af3565b929592945050506040919091013590565b60008060408385031215613ba857600080fd5b8235613bb381613af3565b91506020830135613bc381613af3565b809150509250929050565b60008060008060808587031215613be457600080fd5b5050823594602084013594506040840135936060013592509050565b8015158114613b0857600080fd5b60008060408385031215613c2157600080fd5b823591506020830135613bc381613c00565b60008060408385031215613c4657600080fd5b8235613c5181613af3565b91506020830135613bc381613c00565b600060208284031215613c7357600080fd5b813561104481613c00565b600080600060408486031215613c9357600080fd5b833567ffffffffffffffff80821115613cab57600080fd5b818601915086601f830112613cbf57600080fd5b813581811115613cce57600080fd5b8760208260051b8501011115613ce357600080fd5b60209283019550935050840135613cf981613c00565b809150509250925092565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613d6957613d69613d39565b500290565b600060208284031215613d8057600080fd5b5051919050565b600060208284031215613d9957600080fd5b815161104481613c00565b634e487b7160e01b600052603260045260246000fd5b600082821015613dcc57613dcc613d39565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415613dfb57613dfb613d39565b5060010190565b60008219821115613e1557613e15613d39565b500190565b600060208284031215613e2c57600080fd5b815161104481613af3565b600081518084526020808501945080840160005b83811015613e705781516001600160a01b031687529582019590820190600101613e4b565b509495945050505050565b848152608060208201526000613e946080830186613e37565b6001600160a01b03949094166040830152506060015292915050565b600082613ecd57634e487b7160e01b600052601260045260246000fd5b500490565b85815284602082015260a060408201526000613ef160a0830186613e37565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613f2357600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205fedd8b13051c9a9f1995f2de8cb097e5803f130e59b4ad1c14623fe5716adad64736f6c63430008090033

Deployed Bytecode Sourcemap

17049:30286:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24458:219;;;;;;;;;;-1:-1:-1;24458:219:0;;;;;:::i;:::-;;:::i;:::-;;21779:85;;;;;;;;;;-1:-1:-1;21851:5:0;;;;;;;;;;;;-1:-1:-1;;;21851:5:0;;;;21779:85;;;;;;;:::i;:::-;;;;;;;;18374:28;;;;;;;;;;;;;;;;;;;947:25:1;;;935:2;920:18;18374:28:0;801:177:1;26022:135:0;;;;;;;;;;-1:-1:-1;26022:135:0;;;;;:::i;:::-;;:::i;22776:193::-;;;;;;;;;;-1:-1:-1;22776:193:0;;;;;:::i;:::-;;:::i;:::-;;;1604:14:1;;1597:22;1579:41;;1567:2;1552:18;22776:193:0;1439:187:1;24685:106:0;;;;;;;;;;-1:-1:-1;24685:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;24765:18:0;24741:4;24765:18;;;:9;:18;;;;;;;;;24685:106;18800:64;;;;;;;;;;-1:-1:-1;18800:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24315:89;;;;;;;;;;-1:-1:-1;24386:10:0;;24315:89;;19486:41;;;;;;;;;;-1:-1:-1;19486:41:0;;;;-1:-1:-1;;;;;19486:41:0;;;;;;-1:-1:-1;;;;;2074:32:1;;;2056:51;;2044:2;2029:18;19486:41:0;1883:230:1;22062:97:0;;;;;;;;;;-1:-1:-1;;;;22062:97:0;;18453:26;;;;;;;;;;;;;;;;34029:196;;;;;;;;;;-1:-1:-1;34029:196:0;;;;;:::i;:::-;;:::i;22977:448::-;;;;;;;;;;-1:-1:-1;22977:448:0;;;;;:::i;:::-;;:::i;46749:280::-;;;;;;;;;;-1:-1:-1;46749:280:0;;;;;:::i;:::-;;:::i;27087:322::-;;;;;;;;;;-1:-1:-1;27087:322:0;;;;;:::i;:::-;;:::i;21969:85::-;;;;;;;;;;-1:-1:-1;21969:85:0;;17952:2;3114:36:1;;3102:2;3087:18;21969:85:0;2972:184:1;17256:39:0;;;;;;;;;;-1:-1:-1;17256:39:0;;;;-1:-1:-1;;;;;17256:39:0;;;28094:471;;;;;;;;;;-1:-1:-1;28094:471:0;;;;;:::i;:::-;;:::i;23433:302::-;;;;;;;;;;-1:-1:-1;23433:302:0;;;;;:::i;:::-;;:::i;33112:442::-;;;;;;;;;;-1:-1:-1;33112:442:0;;;;;:::i;:::-;;:::i;45821:113::-;;;;;;;;;;-1:-1:-1;45821:113:0;;;;;:::i;:::-;;:::i;26338:481::-;;;;;;;;;;-1:-1:-1;26338:481:0;;;;;:::i;:::-;;:::i;19534:28::-;;;;;;;;;;-1:-1:-1;19534:28:0;;;;-1:-1:-1;;;;;19534:28:0;;;18680:33;;;;;;;;;;-1:-1:-1;18680:33:0;;;;;;;;19599:41;;;;;;;;;;-1:-1:-1;19599:41:0;;;;-1:-1:-1;;;19599:41:0;;;;;;27417:459;;;;;;;;;;-1:-1:-1;27417:459:0;;;;;:::i;:::-;;:::i;45687:126::-;;;;;;;;;;-1:-1:-1;45687:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;45778:27:0;45754:4;45778:27;;;:18;:27;;;;;;;;;45687:126;7753:90;;;;;;;;;;-1:-1:-1;7820:15:0;7753:90;;7655;;;;;;;;;;-1:-1:-1;7728:9:0;;7655:90;;47037:295;;;;;;;;;;-1:-1:-1;47037:295:0;;;;;:::i;:::-;;:::i;18760:31::-;;;;;;;;;;-1:-1:-1;18760:31:0;;;;;;;;;;;22167:198;;;;;;;;;;-1:-1:-1;22167:198:0;;;;;:::i;:::-;;:::i;7210:148::-;;;;;;;;;;;;;:::i;33562:459::-;;;;;;;;;;-1:-1:-1;33562:459:0;;;;;:::i;:::-;;:::i;26887:192::-;;;;;;;;;;;;;:::i;27884:202::-;;;;;;;;;;-1:-1:-1;27884:202:0;;;;;:::i;:::-;;:::i;18486:32::-;;;;;;;;;;;;;;;;24153:154;;;;;;;;;;-1:-1:-1;24153:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;24279:20:0;24250:4;24279:20;;;:11;:20;;;;;;;;;24153:154;17213:36;;;;;;;;;;-1:-1:-1;17213:36:0;;;;-1:-1:-1;;;;;17213:36:0;;;6996:79;;;;;;;;;;-1:-1:-1;7034:7:0;7061:6;-1:-1:-1;;;;;7061:6:0;6996:79;;46111:535;;;;;;:::i;:::-;;:::i;34233:181::-;;;;;;;;;;-1:-1:-1;34233:181:0;;;;;:::i;:::-;;:::i;21872:89::-;;;;;;;;;;-1:-1:-1;21946:7:0;;;;;;;;;;;;-1:-1:-1;;;21946:7:0;;;;21872:89;;25375:244;;;;;;;;;;-1:-1:-1;25375:244:0;;;;;:::i;:::-;;:::i;34626:174::-;;;;;;;;;;-1:-1:-1;34626:174:0;;;;;:::i;:::-;;:::i;25905:109::-;;;;;;;;;;-1:-1:-1;25905:109:0;;;;;:::i;:::-;;:::i;25245:122::-;;;;;;;;;;-1:-1:-1;25336:23:0;;25245:122;;23743:402;;;;;;;;;;-1:-1:-1;23743:402:0;;;;;:::i;:::-;;:::i;17167:39::-;;;;;;;;;;-1:-1:-1;17167:39:0;;;;-1:-1:-1;;;;;17167:39:0;;;22373:201;;;;;;;;;;-1:-1:-1;22373:201:0;;;;;:::i;:::-;;:::i;19249:58::-;;;;;;;;;;-1:-1:-1;19249:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;34422:196;;;;;;;;;;-1:-1:-1;34422:196:0;;;;;:::i;:::-;;:::i;34874:350::-;;;;;;;;;;-1:-1:-1;34874:350:0;;;;;:::i;:::-;;:::i;18720:33::-;;;;;;;;;;-1:-1:-1;18720:33:0;;;;;;;;;;;35232:216;;;;;;;;;;-1:-1:-1;35232:216:0;;;;;:::i;:::-;;:::i;18525:29::-;;;;;;;;;;;;;;;;18409:35;;;;;;;;;;;;;;;;18561:36;;;;;;;;;;;;;;;;18944:39;;;;;;;;;;-1:-1:-1;18944:39:0;;;;;;;;19411:35;;;;;;;;;;;;;;;;19366:38;;;;;;;;;;;;;;;;18336:31;;;;;;;;;;;;;;;;22582:186;;;;;;;;;;-1:-1:-1;22582:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;22733:18:0;;;22701:7;22733:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;22582:186;26196:134;;;;;;;;;;;;;:::i;45942:112::-;;;;;;;;;;-1:-1:-1;45942:112:0;;;;;:::i;:::-;;:::i;24803:434::-;;;;;;;;;;-1:-1:-1;24803:434:0;;;;;:::i;:::-;;:::i;18606:33::-;;;;;;;;;;;;;;;;18304:25;;;;;;;;;;;;;;;;7366:281;;;;;;;;;;-1:-1:-1;7366:281:0;;;;;:::i;:::-;;:::i;19453:24::-;;;;;;;;;;;;;;;;18646:25;;;;;;;;;;;;;;;;24458:219;7123:6;;-1:-1:-1;;;;;7123:6:0;735:10;7123:22;7115:67;;;;-1:-1:-1;;;7115:67:0;;;;;;;:::i;:::-;;;;;;;;;24531:13:::1;:20:::0;;-1:-1:-1;;24531:20:0::1;;;::::0;;24562:21:::1;:28:::0;;-1:-1:-1;;;;24562:28:0::1;-1:-1:-1::0;;;24562:28:0::1;::::0;;24622:12:::1;24601:18;:33:::0;24645:10:::1;:24:::0;24458:219::o;26022:135::-;7123:6;;-1:-1:-1;;;;;7123:6:0;735:10;7123:22;7115:67;;;;-1:-1:-1;;;7115:67:0;;;;;;;:::i;:::-;26106:3:::1;26099;:10;;26091:19;;;::::0;::::1;;26137:12;:3:::0;26143:6:::1;26137:12;:::i;:::-;26121:13;:28:::0;-1:-1:-1;26022:135:0:o;22776:193::-;22878:4;22900:39;735:10;22923:7;22932:6;22900:8;:39::i;:::-;-1:-1:-1;22957:4:0;22776:193;;;;;:::o;34029:196::-;7123:6;;-1:-1:-1;;;;;7123:6:0;735:10;7123:22;7115:67;;;;-1:-1:-1;;;7115:67:0;;;;;;;:::i;:::-;34118:16:::1;:45:::0;;-1:-1:-1;;;;;34118:45:0;;::::1;-1:-1:-1::0;;;;;;34118:45:0;;::::1;::::0;::::1;::::0;;:16:::1;34174:36:::0;;;:18:::1;:36;::::0;;;;:43;;-1:-1:-1;;34174:43:0::1;34118:45:::0;34174:43:::1;::::0;;34029:196::o;22977:448::-;23111:4;23128:36;23138:6;23146:9;23157:6;23128:9;:36::i;:::-;23175:220;23198:6;735:10;23246:138;23302:6;23246:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23246:19:0;;;;;;:11;:19;;;;;;;;735:10;23246:33;;;;;;;;;;:37;:138::i;:::-;23175:8;:220::i;:::-;-1:-1:-1;23413:4:0;22977:448;;;;;:::o;46749:280::-;46862:10;7123:6;;-1:-1:-1;;;;;7123:6:0;735:10;7123:22;7115:67;;;;-1:-1:-1;;;7115:67:0;;;;;;;:::i;:::-;46917:39:::1;::::0;-1:-1:-1;;;46917:39:0;;46950:4:::1;46917:39;::::0;::::1;2056:51:1::0;46890:24:0::1;::::0;-1:-1:-1;;;;;46917:24:0;::::1;::::0;::::1;::::0;2029:18:1;;46917:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46975:46;::::0;-1:-1:-1;;;46975:46:0;;-1:-1:-1;;;;;6855:32:1;;;46975:46:0::1;::::0;::::1;6837:51:1::0;6904:18;;;6897:34;;;46890:66:0;;-1:-1:-1;46975:23:0;;::::1;::::0;::::1;::::0;6810:18:1;;46975:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46967:54:::0;46749:280;-1:-1:-1;;;;46749:280:0:o;27087:322::-;27181:7;27239;;27228;:18;;27206:110;;;;-1:-1:-1;;;27206:110:0;;7394:2:1;27206:110:0;;;7376:21:1;7433:2;7413:18;;;7406:30;7472:34;7452:18;;;7445:62;-1:-1:-1;;;7523:18:1;;;7516:40;7573:19;;27206:110:0;7192:406:1;27206:110:0;27327:19;27349:10;:8;:10::i;:::-;27327:32;-1:-1:-1;27377:24:0;:7;27327:32;27377:11;:24::i;:::-;27370:31;27087:322;-1:-1:-1;;;27087:322:0:o;28094:471::-;7123:6;;-1:-1:-1;;;;;7123:6:0;735:10;7123:22;7115:67;;;;-1:-1:-1;;;7115:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28172:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;28164:56;;;::::0;-1:-1:-1;;;28164:56:0;;7805:2:1;28164:56:0::1;::::0;::::1;7787:21:1::0;7844:2;7824:18;;;7817:30;7883:25;7863:18;;;7856:53;7926:18;;28164:56:0::1;7603:347:1::0;28164:56:0::1;28236:9;28231:327;28255:9;:16:::0;28251:20;::::1;28231:327;;;28313:7;-1:-1:-1::0;;;;;28297:23:0::1;:9;28307:1;28297:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;28297:12:0::1;:23;28293:254;;;28356:9;28366:16:::0;;:20:::1;::::0;28385:1:::1;::::0;28366:20:::1;:::i;:::-;28356:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;28341:9:::1;:12:::0;;-1:-1:-1;;;;;28356:31:0;;::::1;::::0;28351:1;;28341:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;28341:46:0::1;-1:-1:-1::0;;;;;28341:46:0;;::::1;;::::0;;28406:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;28445:11:::1;:20:::0;;;;:28;;-1:-1:-1;;28445:28:0::1;::::0;;28492:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;28492:15:0;;;;;-1:-1:-1;;;;;;28492:15:0::1;::::0;;;;;28231:327:::1;28094:471:::0;:::o;28293:254::-:1;28273:3:::0;::::1;::::0;::::1;:::i;:::-;;;;28231:327;;;;28094:471:::0;:::o;23433:302::-;735:10;23550:4;23644:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;23644:34:0;;;;;;;;;;23550:4;;23572:133;;23622:7;;23644:50;;23683:10;23644:38;:50::i;33112:442::-;33259:10;:22;;;33292:16;:34;;;33337:13;:28;;;33376:16;:34;;;33497:12;;:19;;33514:1;33497:16;:19::i;:::-;33477:16;;33461:13;;33442:16;;33429:10;;:29;;;;:::i;:::-;:45;;;;:::i;:::-;:64;;;;:::i;:::-;:87;;33421:125;;;;-1:-1:-1;;;33421:125:0;;8824:2:1;33421:125:0;;;8806:21:1;8863:2;8843:18;;;8836:30;8902:27;8882:18;;;8875:55;8947:18;;33421:125:0;8622:349:1;33421:125:0;33112:442;;;;:::o;45821:113::-;7123:6;;-1:-1:-1;;;;;7123:6:0;735:10;7123:22;7115:67;;;;-1:-1:-1;;;7115:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45892:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;45892:34:0::1;45922:4;45892:34;::::0;;45821:113::o;26338:481::-;26458:7;-1:-1:-1;;;26491:7:0;:18;;26483:62;;;;-1:-1:-1;;;26483:62:0;;9178:2:1;26483:62:0;;;9160:21:1;9217:2;9197:18;;;9190:30;9256:33;9236:18;;;9229:61;9307:18;;26483:62:0;8976:355:1;26483:62:0;26561:17;26556:256;;26596:15;26625:19;26636:7;26625:10;:19::i;:::-;-1:-1:-1;26595:49:0;;-1:-1:-1;26659:14:0;;-1:-1:-1;;;;;26659:14:0;26556:256;26709:23;26744:19;26755:7;26744:10;:19::i;:::-;-1:-1:-1;26706:57:0;;-1:-1:-1;26778:22:0;;-1:-1:-1;;;;;26778:22:0;27417:459;7123:6;;-1:-1:-1;;;;;7123:6:0;735:10;7123:22;7115:67;;;;-1:-1:-1;;;7115:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27498:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;27497:21;27489:61;;;::::0;-1:-1:-1;;;27489:61:0;;9538:2:1;27489:61:0::1;::::0;::::1;9520:21:1::0;9577:2;9557:18;;;9550:30;9616:29;9596:18;;;9589:57;9663:18;;27489:61:0::1;9336:351:1::0;27489:61:0::1;27569:9;:16:::0;27593:2:::1;::::0;27569:20:::1;::::0;27588:1:::1;27569:20;:::i;:::-;:26;;27561:116;;;::::0;-1:-1:-1;;;27561:116:0;;9894:2:1;27561:116:0::1;::::0;::::1;9876:21:1::0;9933:2;9913:18;;;9906:30;9972:34;9952:18;;;9945:62;10043:34;10023:18;;;10016:62;-1:-1:-1;;;10094:19:1;;;10087:44;10148:19;;27561:116:0::1;9692:481:1::0;27561:116:0::1;-1:-1:-1::0;;;;;27692:16:0;::::1;27711:1;27692:16:::0;;;:7:::1;:16;::::0;;;;;:20;27688:109:::1;;-1:-1:-1::0;;;;;27768:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;27748:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;27729:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;27688:109:::1;-1:-1:-1::0;;;;;27807:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;27807:27:0::1;27830:4;27807:27:::0;;::::1;::::0;;;27845:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;27845:23:0::1;::::0;;::::1;::::0;;27417:459::o;47037:295::-;7123:6;;-1:-1:-1;;;;;7123:6:0;735:10;7123:22;7115:67;;;;-1:-1:-1;;;7115:67:0;;;;;;;:::i;:::-;47187:48:::1;::::0;47136:21:::1;::::0;47107:26:::1;::::0;-1:-1:-1;;;;;47187:15:0;::::1;::::0;47136:21;;47107:26;47187:48;47107:26;47187:48;47136:21;47187:15;:48:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47168:67;;;47254:7;47246:78;;;::::0;-1:-1:-1;;;47246:78:0;;10590:2:1;47246:78:0::1;::::0;::::1;10572:21:1::0;10629:2;10609:18;;;10602:30;10668:34;10648:18;;;10641:62;10739:28;10719:18;;;10712:56;10785:19;;47246:78:0::1;10388:422:1::0;47246:78:0::1;47096:236;;47037:295:::0;:::o;22167:198::-;-1:-1:-1;;;;;22257:20:0;;22233:7;22257:20;;;:11;:20;;;;;;;;22253:49;;;-1:-1:-1;;;;;;22286:16:0;;;;;:7;:16;;;;;;;22167:198::o;22253:49::-;-1:-1:-1;;;;;22340:16:0;;;;;;:7;:16;;;;;;22320:37;;:19;:37::i;7210:148::-;7123:6;;-1:-1:-1;;;;;7123:6:0;735:10;7123:22;7115:67;;;;-1:-1:-1;;;7115:67:0;;;;;;;:::i;:::-;7317:1:::1;7301:6:::0;;7280:40:::1;::::0;-1:-1:-1;;;;;7301:6:0;;::::1;::::0;7280:40:::1;::::0;7317:1;;7280:40:::1;7348:1;7331:19:::0;;-1:-1:-1;;;;;;7331:19:0::1;::::0;;7210:148::o;33562:459::-;33714:11;:24;;;33749:17;:36;;;33796:14;:30;;;33837:17;:36;;;33964:12;;:19;;33981:1;33964:16;:19::i;:::-;33943:17;;33926:14;;33906:17;;33892:11;;:31;;;;:::i;:::-;:48;;;;:::i;:::-;:68;;;;:::i;:::-;:91;;33884:129;;;;-1:-1:-1;;;33884:129:0;;11017:2:1;33884:129:0;;;10999:21:1;11056:2;11036:18;;;11029:30;11095:27;11075:18;;;11068:55;11140:18;;33884:129:0;10815:349:1;26887:192:0;26939:4;7123:6;;-1:-1:-1;;;;;7123:6:0;735:10;7123:22;7115:67;;;;-1:-1:-1;;;7115:67:0;;;;;;;:::i;:::-;-1:-1:-1;26955:14:0::1;:22:::0;;-1:-1:-1;;26955:22:0;;::::1;::::0;;;26988:14:::1;:22:::0;;;::::1;::::0;;27021:20:::1;:28:::0;;;;::::1;::::0;;26955:22;26887:192;:::o;27884:202::-;7123:6;;-1:-1:-1;;;;;7123:6:0;735:10;7123:22;7115:67;;;;-1:-1:-1;;;7115:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27974:39:0;::::1;;::::0;;;:31:::1;:39;::::0;;;;;;;;:46;;-1:-1:-1;;27974:46:0::1;::::0;::::1;;::::0;;::::1;::::0;;;28036:42;;1579:41:1;;;28036:42:0::1;::::0;1552:18:1;28036:42:0::1;;;;;;;27884:202:::0;;:::o;46111:535::-;7123:6;;-1:-1:-1;;;;;7123:6:0;735:10;7123:22;7115:67;;;;-1:-1:-1;;;7115:67:0;;;;;;;:::i;:::-;46281:16:::1;::::0;;46295:1:::1;46281:16:::0;;;;;::::1;::::0;;46257:21:::1;::::0;46281:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;46318:15:0::1;::::0;:22:::1;::::0;;-1:-1:-1;;;46318:22:0;;;;46257:40;;-1:-1:-1;;;;;;46318:15:0;;::::1;::::0;:20:::1;::::0;-1:-1:-1;46318:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46308:4;46313:1;46308:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1::0;;;;;46308:32:0::1;;;-1:-1:-1::0;;;;;46308:32:0::1;;;::::0;::::1;46369:4;46351;46356:1;46351:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;46351:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;46413:15:::1;::::0;:225:::1;::::0;-1:-1:-1;;;46413:225:0;;:15;::::1;::::0;:66:::1;::::0;46487:14;;46413:225:::1;::::0;:15:::1;::::0;46563:4;;46590:6:::1;::::0;46612:15:::1;::::0;46413:225:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;46188:458;46111:535:::0;:::o;34233:181::-;7123:6;;-1:-1:-1;;;;;7123:6:0;735:10;7123:22;7115:67;;;;-1:-1:-1;;;7115:67:0;;;;;;;:::i;:::-;34316:13:::1;:39:::0;;-1:-1:-1;;;;;34316:39:0;;::::1;-1:-1:-1::0;;;;;;34316:39:0;;::::1;::::0;::::1;::::0;;:13:::1;34366:33:::0;;;:18:::1;:33;::::0;;;;:40;;-1:-1:-1;;34366:40:0::1;34316:39:::0;34366:40:::1;::::0;;34233:181::o;25375:244::-;7123:6;;-1:-1:-1;;;;;7123:6:0;735:10;7123:22;7115:67;;;;-1:-1:-1;;;7115:67:0;;;;;;;:::i;:::-;25482:13:::1;::::0;-1:-1:-1;;;;;25474:21:0;;::::1;25482:13:::0;::::1;25474:21;;25466:91;;;::::0;-1:-1:-1;;;25466:91:0;;12740:2:1;25466:91:0::1;::::0;::::1;12722:21:1::0;12779:2;12759:18;;;12752:30;12818:34;12798:18;;;12791:62;12889:27;12869:18;;;12862:55;12934:19;;25466:91:0::1;12538:421:1::0;25466:91:0::1;25570:41;25599:4;25605:5;25570:28;:41::i;34626:174::-:0;7123:6;;-1:-1:-1;;;;;7123:6:0;735:10;7123:22;7115:67;;;;-1:-1:-1;;;7115:67:0;;;;;;;:::i;:::-;34706:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;34706:32:0::1;-1:-1:-1::0;;;;34706:32:0;;::::1;;::::0;;34754:38:::1;::::0;::::1;::::0;::::1;::::0;34730:8;1604:14:1;1597:22;1579:41;;1567:2;1552:18;;1439:187;34754:38:0::1;;;;;;;;34626:174:::0;:::o;25905:109::-;7123:6;;-1:-1:-1;;;;;7123:6:0;735:10;7123:22;7115:67;;;;-1:-1:-1;;;7115:67:0;;;;;;;:::i;:::-;25982:14:::1;:24:::0;;-1:-1:-1;;25982:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25905:109::o;23743:402::-;23865:4;23887:228;735:10;23937:7;23959:145;24016:15;23959:145;;;;;;;;;;;;;;;;;735:10;23959:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;23959:34:0;;;;;;;;;;;;:38;:145::i;22373:201::-;22480:4;22502:42;735:10;22526:9;22537:6;22502:9;:42::i;34422:196::-;7123:6;;-1:-1:-1;;;;;7123:6:0;735:10;7123:22;7115:67;;;;-1:-1:-1;;;7115:67:0;;;;;;;:::i;:::-;34511:16:::1;:45:::0;;-1:-1:-1;;;;;34511:45:0;;::::1;-1:-1:-1::0;;;;;;34511:45:0;;::::1;::::0;::::1;::::0;;:16:::1;34567:36:::0;;;:18:::1;:36;::::0;;;;:43;;-1:-1:-1;;34567:43:0::1;34511:45:::0;34567:43:::1;::::0;;34422:196::o;34874:350::-;34954:4;7123:6;;-1:-1:-1;;;;;7123:6:0;735:10;7123:22;7115:67;;;;-1:-1:-1;;;7115:67:0;;;;;;;:::i;:::-;34988:1:::1;34977:7;:12;;34969:78;;;::::0;-1:-1:-1;;;34969:78:0;;13166:2:1;34969:78:0::1;::::0;::::1;13148:21:1::0;13205:2;13185:18;;;13178:30;13244:34;13224:18;;;13217:62;-1:-1:-1;;;13295:18:1;;;13288:51;13356:19;;34969:78:0::1;12964:417:1::0;34969:78:0::1;35076:2;35065:7;:13;;35057:78;;;::::0;-1:-1:-1;;;35057:78:0;;13588:2:1;35057:78:0::1;::::0;::::1;13570:21:1::0;13627:2;13607:18;;;13600:30;13666:34;13646:18;;;13639:62;-1:-1:-1;;;13717:18:1;;;13710:50;13777:19;;35057:78:0::1;13386:416:1::0;35057:78:0::1;35191:5;35171:17;35181:7:::0;-1:-1:-1;;;35171:17:0::1;:::i;:::-;:25;;;;:::i;:::-;35145:23;:51:::0;-1:-1:-1;35213:4:0::1;34874:350:::0;;;:::o;35232:216::-;7123:6;;-1:-1:-1;;;;;7123:6:0;735:10;7123:22;7115:67;;;;-1:-1:-1;;;7115:67:0;;;;;;;:::i;:::-;35327:2:::1;35316:7;:13;;35308:73;;;::::0;-1:-1:-1;;;35308:73:0;;14231:2:1;35308:73:0::1;::::0;::::1;14213:21:1::0;14270:2;14250:18;;;14243:30;14309:34;14289:18;;;14282:62;-1:-1:-1;;;14360:18:1;;;14353:45;14415:19;;35308:73:0::1;14029:411:1::0;35308:73:0::1;35435:5;35415:17;35425:7:::0;-1:-1:-1;;;35415:17:0::1;:::i;:::-;:25;;;;:::i;:::-;35392:20;:48:::0;-1:-1:-1;35232:216:0:o;26196:134::-;26256:4;7123:6;;-1:-1:-1;;;;;7123:6:0;735:10;7123:22;7115:67;;;;-1:-1:-1;;;7115:67:0;;;;;;;:::i;:::-;-1:-1:-1;26272:20:0::1;:28:::0;;-1:-1:-1;;26272:28:0::1;::::0;;;26196:134;:::o;45942:112::-;7123:6;;-1:-1:-1;;;;;7123:6:0;735:10;7123:22;7115:67;;;;-1:-1:-1;;;7115:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46011:27:0::1;46041:5;46011:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;46011:35:0::1;::::0;;45942:112::o;24803:434::-;7123:6;;-1:-1:-1;;;;;7123:6:0;735:10;7123:22;7115:67;;;;-1:-1:-1;;;7115:67:0;;;;;;;:::i;:::-;24902:9:::1;24897:333;24913:20:::0;;::::1;24897:333;;;24969:4;24959:14:::0;::::1;;;24955:217;;;25026:4;25002:9:::0;;25012:1;25002:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25002:29:0::1;;;24994:72;;;::::0;-1:-1:-1;;;24994:72:0;;14647:2:1;24994:72:0::1;::::0;::::1;14629:21:1::0;14686:2;14666:18;;;14659:30;14725:32;14705:18;;;14698:60;14775:18;;24994:72:0::1;14445:354:1::0;24994:72:0::1;25109:13;::::0;-1:-1:-1;;;;;25109:13:0::1;25093:9:::0;;25103:1;25093:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25093:29:0::1;;;25085:71;;;::::0;-1:-1:-1;;;25085:71:0;;15006:2:1;25085:71:0::1;::::0;::::1;14988:21:1::0;15045:2;15025:18;;;15018:30;15084:31;15064:18;;;15057:59;15133:18;;25085:71:0::1;14804:353:1::0;25085:71:0::1;25212:6;25186:9;:23;25196:9;;25206:1;25196:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25186:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;25186:23:0;:32;;-1:-1:-1;;25186:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24935:3:::1;::::0;::::1;:::i;:::-;;;24897:333;;7366:281:::0;7123:6;;-1:-1:-1;;;;;7123:6:0;735:10;7123:22;7115:67;;;;-1:-1:-1;;;7115:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7469:22:0;::::1;7447:110;;;::::0;-1:-1:-1;;;7447:110:0;;15364:2:1;7447:110:0::1;::::0;::::1;15346:21:1::0;15403:2;15383:18;;;15376:30;15442:34;15422:18;;;15415:62;-1:-1:-1;;;15493:18:1;;;15486:36;15539:19;;7447:110:0::1;15162:402:1::0;7447:110:0::1;7594:6;::::0;;7573:38:::1;::::0;-1:-1:-1;;;;;7573:38:0;;::::1;::::0;7594:6;::::1;::::0;7573:38:::1;::::0;::::1;7622:6;:17:::0;;-1:-1:-1;;;;;;7622:17:0::1;-1:-1:-1::0;;;;;7622:17:0;;;::::1;::::0;;;::::1;::::0;;7366:281::o;2653:132::-;2711:7;2738:39;2742:1;2745;2738:39;;;;;;;;;;;;;;;;;:3;:39::i;2017:136::-;2075:7;2102:43;2106:1;2109;2102:43;;;;;;;;;;;;;;;;;:3;:43::i;28573:371::-;-1:-1:-1;;;;;28700:19:0;;28692:68;;;;-1:-1:-1;;;28692:68:0;;15771:2:1;28692:68:0;;;15753:21:1;15810:2;15790:18;;;15783:30;15849:34;15829:18;;;15822:62;-1:-1:-1;;;15900:18:1;;;15893:34;15944:19;;28692:68:0;15569:400:1;28692:68:0;-1:-1:-1;;;;;28779:21:0;;28771:68;;;;-1:-1:-1;;;28771:68:0;;16176:2:1;28771:68:0;;;16158:21:1;16215:2;16195:18;;;16188:30;16254:34;16234:18;;;16227:62;-1:-1:-1;;;16305:18:1;;;16298:32;16347:19;;28771:68:0;15974:398:1;28771:68:0;-1:-1:-1;;;;;28852:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;28904:32;;947:25:1;;;28904:32:0;;920:18:1;28904:32:0;;;;;;;28573:371;;;:::o;28952:4152::-;-1:-1:-1;;;;;29074:16:0;;;;;;:38;;-1:-1:-1;;;;;;29094:18:0;;;;29074:38;29066:88;;;;-1:-1:-1;;;29066:88:0;;16579:2:1;29066:88:0;;;16561:21:1;16618:2;16598:18;;;16591:30;16657:34;16637:18;;;16630:62;-1:-1:-1;;;16708:18:1;;;16701:35;16753:19;;29066:88:0;16377:401:1;29066:88:0;29182:1;29173:6;:10;29165:64;;;;-1:-1:-1;;;29165:64:0;;16985:2:1;29165:64:0;;;16967:21:1;17024:2;17004:18;;;16997:30;17063:34;17043:18;;;17036:62;-1:-1:-1;;;17114:18:1;;;17107:39;17163:19;;29165:64:0;16783:405:1;29165:64:0;29245:14;;;;29242:2179;;;7034:7;7061:6;-1:-1:-1;;;;;29297:15:0;;;7061:6;;29297:15;;;;:49;;-1:-1:-1;7034:7:0;7061:6;-1:-1:-1;;;;;29333:13:0;;;7061:6;;29333:13;;29297:49;:86;;;;-1:-1:-1;;;;;;29367:16:0;;;;29297:86;:128;;;;-1:-1:-1;;;;;;29404:21:0;;29418:6;29404:21;;29297:128;:166;;;;-1:-1:-1;29447:16:0;;-1:-1:-1;;;29447:16:0;;;;29446:17;29297:166;29275:2135;;;29554:13;;;;;;;29546:51;;;;-1:-1:-1;;;29546:51:0;;17395:2:1;29546:51:0;;;17377:21:1;17434:2;17414:18;;;17407:30;17473:27;17453:18;;;17446:55;17518:18;;29546:51:0;17193:349:1;29546:51:0;29641:1;29620:18;;:22;:72;;;;;29680:12;29667:10;;29646:18;;:31;;;;:::i;:::-;:46;29620:72;29616:141;;;-1:-1:-1;;;;;29717:13:0;;;;;;:9;:13;;;;;:20;;-1:-1:-1;;29717:20:0;29733:4;29717:20;;;29616:141;29854:14;;;;:49;;;;-1:-1:-1;;;;;;29872:31:0;;;;;;:25;:31;;;;;;;;29854:49;29850:163;;;29951:13;;29936:11;:28;;29928:65;;;;-1:-1:-1;;;29928:65:0;;17749:2:1;29928:65:0;;;17731:21:1;17788:2;17768:18;;;17761:30;17827:26;17807:18;;;17800:54;17871:18;;29928:65:0;17547:348:1;29928:65:0;30169:20;;;;30165:423;;;7034:7;7061:6;-1:-1:-1;;;;;30217:13:0;;;7061:6;;30217:13;;;;:47;;-1:-1:-1;30248:15:0;;-1:-1:-1;;;;;30234:30:0;;;30248:15;;30234:30;;30217:47;:79;;;;-1:-1:-1;30282:13:0;;-1:-1:-1;;;;;30268:28:0;;;30282:13;;30268:28;;30217:79;30213:356;;;30361:9;30332:39;;;;:28;:39;;;;;;30374:12;-1:-1:-1;30324:140:0;;;;-1:-1:-1;;;30324:140:0;;18102:2:1;30324:140:0;;;18084:21:1;18141:2;18121:18;;;18114:30;18180:34;18160:18;;;18153:62;18251:34;18231:18;;;18224:62;-1:-1:-1;;;18302:19:1;;;18295:40;18352:19;;30324:140:0;17900:477:1;30324:140:0;30520:9;30491:39;;;;:28;:39;;;;;30533:12;30491:54;;30213:356;-1:-1:-1;;;;;30640:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;30676:35:0;;;;;;:31;:35;;;;;;;;30675:36;30640:71;30636:759;;;30754:20;;30744:6;:30;;30736:96;;;;-1:-1:-1;;;30736:96:0;;18584:2:1;30736:96:0;;;18566:21:1;18623:2;18603:18;;;18596:30;18662:34;18642:18;;;18635:62;-1:-1:-1;;;18713:18:1;;;18706:51;18774:19;;30736:96:0;18382:417:1;30736:96:0;30889:9;;30872:13;30882:2;30872:9;:13::i;:::-;30863:22;;:6;:22;:::i;:::-;:35;;30855:72;;;;-1:-1:-1;;;30855:72:0;;19006:2:1;30855:72:0;;;18988:21:1;19045:2;19025:18;;;19018:30;-1:-1:-1;;;19064:18:1;;;19057:54;19128:18;;30855:72:0;18804:348:1;30855:72:0;30636:759;;;-1:-1:-1;;;;;31003:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;31037:37:0;;;;;;:31;:37;;;;;;;;31036:38;31003:71;30999:396;;;31117:20;;31107:6;:30;;31099:97;;;;-1:-1:-1;;;31099:97:0;;19359:2:1;31099:97:0;;;19341:21:1;19398:2;19378:18;;;19371:30;19437:34;19417:18;;;19410:62;-1:-1:-1;;;19488:18:1;;;19481:52;19550:19;;31099:97:0;19157:418:1;30999:396:0;-1:-1:-1;;;;;31244:35:0;;;;;;:31;:35;;;;;;;;31239:156;;31337:9;;31320:13;31330:2;31320:9;:13::i;:::-;31311:22;;:6;:22;:::i;:::-;:35;;31303:72;;;;-1:-1:-1;;;31303:72:0;;19006:2:1;31303:72:0;;;18988:21:1;19045:2;19025:18;;;19018:30;-1:-1:-1;;;19064:18:1;;;19057:54;19128:18;;31303:72:0;18804:348:1;31303:72:0;31433:28;31464:24;31482:4;31464:9;:24::i;:::-;31554:23;;-1:-1:-1;;;;;31641:24:0;;31499:28;31641:24;;;:18;:24;;;;;;31433:55;;-1:-1:-1;31530:47:0;;;;31641:24;;31640:25;:66;;;;-1:-1:-1;;;;;;31684:22:0;;;;;;:18;:22;;;;;;;;31683:23;31640:66;:100;;;;-1:-1:-1;31724:16:0;;-1:-1:-1;;;31724:16:0;;;;31723:17;31640:100;:138;;;;-1:-1:-1;31757:21:0;;-1:-1:-1;;;31757:21:0;;;;31640:138;:183;;;;-1:-1:-1;31805:13:0;;31822:1;;31795:24;;-1:-1:-1;;;;;31805:13:0;31795:9;:24::i;:::-;:28;31640:183;:223;;;;;31840:23;31640:223;:269;;;;-1:-1:-1;;;;;;31880:29:0;;;;;;:25;:29;;;;;;;;31640:269;31622:336;;;31936:10;:8;:10::i;:::-;31970:14;:12;:14::i;:::-;18078:1;31997:15;:26;-1:-1:-1;;;;;32126:24:0;;;;;;:18;:24;;;;;;;;32125:25;:52;;;;-1:-1:-1;;;;;;32155:22:0;;;;;;:18;:22;;;;;;;;32154:23;32125:52;32121:901;;;-1:-1:-1;;;;;32218:31:0;;;;;;:25;:31;;;;;;;;32214:605;;;32280:10;;32270:7;:20;32360:16;;32344:13;;32325:16;;:32;;32344:13;32325:32;:::i;:::-;:51;;;;:::i;:::-;32309:13;:67;;;32398:17;32395:85;;17994:1;32439:15;:21;32395:85;32214:605;;;-1:-1:-1;;;;;32539:29:0;;;;;;:25;:29;;;;;;;;32535:284;;;32599:11;;32589:7;:21;32682:17;;32665:14;;32645:17;;:34;;32665:14;32645:34;:::i;:::-;:54;;;;:::i;:::-;32629:13;:70;;;32721:17;32718:86;;18034:1;32762:15;:22;32718:86;-1:-1:-1;;;;;32902:13:0;;;;;;:9;:13;;;;;;;;;:32;;-1:-1:-1;;;;;;32919:15:0;;;;;;:9;:15;;;;;;;;32902:32;32901:55;;;;;32955:1;32939:13;;:17;32901:55;32897:114;;;32993:2;32977:13;:18;32897:114;33034:32;33049:4;33055:2;33059:6;33034:14;:32::i;:::-;33079:15;45608;;45598:7;:25;45650:21;;45634:13;:37;45554:125;33079:15;29055:4049;;28952:4152;;;:::o;2161:226::-;2281:7;2317:12;2309:6;;;;2301:29;;;;-1:-1:-1;;;2301:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2341:9:0;2353:5;2357:1;2353;:5;:::i;:::-;2341:17;2161:226;-1:-1:-1;;;;;2161:226:0:o;43245:164::-;43287:7;43308:15;43325;43344:19;:17;:19::i;:::-;43307:56;;-1:-1:-1;43307:56:0;-1:-1:-1;43381:20:0;43307:56;;43381:11;:20::i;:::-;43374:27;;;;43245:164;:::o;1828:181::-;1886:7;;1918:5;1922:1;1918;:5;:::i;:::-;1906:17;;1947:1;1942;:6;;1934:46;;;;-1:-1:-1;;;1934:46:0;;19782:2:1;1934:46:0;;;19764:21:1;19821:2;19801:18;;;19794:30;19860:29;19840:18;;;19833:57;19907:18;;1934:46:0;19580:351:1;41513:742:0;41613:7;41635;41657;41679;41701;41723;41773:23;41811:12;41838:18;41870:20;41882:7;41870:11;:20::i;:::-;41758:132;;;;;;41902:15;41919:23;41944:12;41960:113;41986:7;42008:4;42027:10;42052;:8;:10::i;:::-;41960:11;:113::i;:::-;41901:172;;;;-1:-1:-1;41901:172:0;;-1:-1:-1;42177:15:0;;-1:-1:-1;42207:4:0;;-1:-1:-1;42226:10:0;;-1:-1:-1;41513:742:0;;-1:-1:-1;;;;;41513:742:0:o;25627:270::-;-1:-1:-1;;;;;25710:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;25710:39:0;;;;;;;25762:38;25710:31;:39;25762:25;:38::i;:::-;25814:5;25811:35;;;25821:23;25839:4;25821:17;:23::i;:::-;25860:5;25856:34;;25867:21;25883:4;25867:15;:21::i;2793:312::-;2913:7;2948:12;2941:5;2933:28;;;;-1:-1:-1;;;2933:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2972:9:0;2984:5;2988:1;2984;:5;:::i;35456:1628::-;20175:16;:23;;-1:-1:-1;;;;20175:23:0;-1:-1:-1;;;20175:23:0;;;;35533:24:::1;35551:4;35533:9;:24::i;:::-;35507:50;;35568:12;35591:25:::0;35660:22:::1;;35644:13;;35619:22;;:38;;;;:::i;:::-;:63;;;;:::i;:::-;35591:91:::0;-1:-1:-1;35696:22:0;;;:46:::1;;-1:-1:-1::0;35722:20:0;;35696:46:::1;35693:60;;;35745:7;;;;;35693:60;35765:26;35859:1;35838:17;35813:22;;35795:15;:40;;;;:::i;:::-;:60;;;;:::i;:::-;35794:66;;;;:::i;:::-;35765:95;;35871:26;35900:58;35944:13;;35900:39;35920:18;35900:15;:19;;:39;;;;:::i;:::-;:43:::0;::::1;:58::i;:::-;35871:87:::0;-1:-1:-1;35999:21:0::1;36033:36;35871:87:::0;36033:16:::1;:36::i;:::-;36082:18;36103:44;:21;36129:17:::0;36103:25:::1;:44::i;:::-;36082:65;;36160:23;36186:61;36229:17;36186:38;36201:22;;36186:10;:14;;:38;;;;:::i;:::-;:42:::0;::::1;:61::i;:::-;36160:87:::0;-1:-1:-1;36260:23:0::1;36286:28;36160:87:::0;36286:10;:28:::1;:::i;:::-;36260:54;;36379:19;36401:10;:8;:10::i;:::-;36379:32;;36422:15;36440:30;36458:11;36440:13;;:17;;:30;;;;:::i;:::-;36531:13;::::0;-1:-1:-1;;;;;36531:13:0::1;36515:31;::::0;;;:7:::1;:31;::::0;;;;;36422:48;;-1:-1:-1;36515:44:0::1;::::0;36422:48;36515:35:::1;:44::i;:::-;36497:13;::::0;;-1:-1:-1;;;;;36497:13:0;;::::1;36481:31;::::0;;;:7:::1;:31;::::0;;;;;;;:78;;;;36640:13:::1;::::0;36620;;;;::::1;36604:31:::0;;:7:::1;:31:::0;;;;;;;;:50:::1;::::0;:35:::1;:50::i;:::-;36586:13;::::0;-1:-1:-1;;;;;36586:13:0::1;36570:31;::::0;;;:7:::1;:31;::::0;;;;:84;;;;36667:22:::1;:26:::0;;;36704:13:::1;:17:::0;;;36732:22:::1;:26:::0;36774:22;;;;;:45:::1;;;36818:1;36800:15;:19;36774:45;36771:216;;;36835:49;36848:18;36868:15;36835:12;:49::i;:::-;36904:71;::::0;;20138:25:1;;;20194:2;20179:18;;20172:34;;;20222:18;;;20215:34;;;36904:71:0::1;::::0;20126:2:1;20111:18;36904:71:0::1;;;;;;;36771:216;37020:16;::::0;37012:64:::1;::::0;-1:-1:-1;;;;;37020:16:0;;::::1;::::0;37050:21:::1;::::0;37012:64:::1;::::0;;;37050:21;37020:16;37012:64:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;;;;20209:1:0::1;20221:16:::0;:24;;-1:-1:-1;;;;20221:24:0;;;35456:1628::o;45311:235::-;45358:7;;:12;:34;;;;-1:-1:-1;45374:13:0;;:18;45358:34;45354:47;;;45311:235::o;45354:47::-;45431:7;;;45413:15;:25;45473:13;;;45449:21;:37;-1:-1:-1;45499:11:0;;;;45521:17;45311:235::o;37948:604::-;-1:-1:-1;;;;;38082:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;38106:22:0;;;;;;:11;:22;;;;;;;;38105:23;38082:46;38078:467;;;38145:48;38167:6;38175:9;38186:6;38145:21;:48::i;38078:467::-;-1:-1:-1;;;;;38216:19:0;;;;;;:11;:19;;;;;;;;38215:20;:46;;;;-1:-1:-1;;;;;;38239:22:0;;;;;;:11;:22;;;;;;;;38215:46;38211:334;;;38278:46;38298:6;38306:9;38317:6;38278:19;:46::i;38211:334::-;-1:-1:-1;;;;;38346:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;38369:22:0;;;;;;:11;:22;;;;;;;;38346:45;38342:203;;;38408:48;38430:6;38438:9;38449:6;38408:21;:48::i;38342:203::-;38489:44;38507:6;38515:9;38526:6;38489:17;:44::i;43417:605::-;43515:7;;43468;;;;-1:-1:-1;;;43468:7:0;43569:338;43593:9;:16;43589:20;;43569:338;;;43677:7;43653;:21;43661:9;43671:1;43661:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43661:12:0;43653:21;;;;;;;;;;;;;:31;;:83;;;43729:7;43705;:21;43713:9;43723:1;43713:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43713:12:0;43705:21;;;;;;;;;;;;;:31;43653:83;43631:146;;;-1:-1:-1;;43760:7:0;;;-1:-1:-1;;;17711:14:0;-1:-1:-1;43417:605:0;-1:-1:-1;;43417:605:0:o;43631:146::-;43802:34;43814:7;:21;43822:9;43832:1;43822:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43822:12:0;43814:21;;;;;;;;;;;;;43802:7;;:11;:34::i;:::-;43792:44;;43861:34;43873:7;:21;43881:9;43891:1;43881:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43881:12:0;43873:21;;;;;;;;;;;;;43861:7;;:11;:34::i;:::-;43851:44;-1:-1:-1;43611:3:0;;;;:::i;:::-;;;;43569:338;;;-1:-1:-1;43931:7:0;;:20;;-1:-1:-1;;;43931:11:0;:20::i;:::-;43921:7;:30;43917:61;;;-1:-1:-1;;43961:7:0;;;-1:-1:-1;;;17711:14:0;-1:-1:-1;43417:605:0;-1:-1:-1;43417:605:0:o;43917:61::-;43997:7;;44006;;-1:-1:-1;43417:605:0;-1:-1:-1;43417:605:0:o;42263:412::-;42364:7;42386;42408;42443:12;42458:24;42474:7;42458:15;:24::i;:::-;42443:39;;42493:18;42514:30;42536:7;42514:21;:30::i;:::-;42493:51;-1:-1:-1;42555:23:0;42581:33;42493:51;42581:17;:7;42593:4;42581:11;:17::i;:33::-;42555:59;42650:4;;-1:-1:-1;42656:10:0;;-1:-1:-1;42263:412:0;;-1:-1:-1;;;42263:412:0:o;42683:554::-;42882:7;;;;42979:24;:7;42991:11;42979;:24::i;:::-;42961:42;-1:-1:-1;43014:12:0;43029:21;:4;43038:11;43029:8;:21::i;:::-;43014:36;-1:-1:-1;43061:18:0;43082:27;:10;43097:11;43082:14;:27::i;:::-;43061:48;-1:-1:-1;43120:23:0;43146:33;43061:48;43146:17;:7;43158:4;43146:11;:17::i;:33::-;43198:7;;;;-1:-1:-1;43224:4:0;;-1:-1:-1;42683:554:0;;-1:-1:-1;;;;;;;42683:554:0:o;37092:471::-;37182:16;;;37196:1;37182:16;;;;;;;;37158:21;;37182:16;;;;;;;;;;-1:-1:-1;37182:16:0;37158:40;;37227:4;37209;37214:1;37209:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37209:23:0;;;:7;;;;;;;;;;:23;;;;37253:15;;:22;;;-1:-1:-1;;;37253:22:0;;;;:15;;;;;:20;;:22;;;;;37209:7;;37253:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37243:4;37248:1;37243:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37243:32:0;;;:7;;;;;;;;;:32;37318:15;;37286:62;;37303:4;;37318:15;37336:11;37286:8;:62::i;:::-;37359:15;;:196;;-1:-1:-1;;;37359:196:0;;-1:-1:-1;;;;;37359:15:0;;;;:66;;:196;;37440:11;;37359:15;;37482:4;;37509;;37529:15;;37359:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37147:416;37092:471;:::o;2395:250::-;2453:7;2477:6;2473:47;;-1:-1:-1;2507:1:0;2500:8;;2473:47;2532:9;2544:5;2548:1;2544;:5;:::i;:::-;2532:17;-1:-1:-1;2577:1:0;2568:5;2572:1;2532:17;2568:5;:::i;:::-;:10;2560:56;;;;-1:-1:-1;;;2560:56:0;;21049:2:1;2560:56:0;;;21031:21:1;21088:2;21068:18;;;21061:30;21127:34;21107:18;;;21100:62;-1:-1:-1;;;21178:18:1;;;21171:31;21219:19;;2560:56:0;20847:397:1;37571:369:0;37684:15;;37652:62;;37669:4;;-1:-1:-1;;;;;37684:15:0;37702:11;37652:8;:62::i;:::-;37725:15;;37875:16;;37725:207;;-1:-1:-1;;;37725:207:0;;37797:4;37725:207;;;21598:34:1;21648:18;;;21641:34;;;37725:15:0;21691:18:1;;;21684:34;;;21734:18;;;21727:34;-1:-1:-1;;;;;37875:16:0;;;21777:19:1;;;21770:44;37906:15:0;21830:19:1;;;21823:35;37725:15:0;;;:31;;37764:9;;21532:19:1;;37725:207:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;39899:686::-;40050:15;40080:23;40118:12;40145:23;40183:12;40210:18;40242:19;40253:7;40242:10;:19::i;:::-;-1:-1:-1;;;;;40290:15:0;;;;;;:7;:15;;;;;;40035:226;;-1:-1:-1;40035:226:0;;-1:-1:-1;40035:226:0;;-1:-1:-1;40035:226:0;-1:-1:-1;40035:226:0;-1:-1:-1;40035:226:0;-1:-1:-1;40290:28:0;;40310:7;40290:19;:28::i;:::-;-1:-1:-1;;;;;40272:15:0;;;;;;:7;:15;;;;;;;;:46;;;;40347:7;:15;;;;:28;;40367:7;40347:19;:28::i;:::-;-1:-1:-1;;;;;40329:15:0;;;;;;;:7;:15;;;;;;:46;;;;40407:18;;;;;;;:39;;40430:15;40407:22;:39::i;:::-;-1:-1:-1;;;;;40386:18:0;;;;;;:7;:18;;;;;:60;40457:26;40472:10;40457:14;:26::i;:::-;40494:23;40506:4;40512;40494:11;:23::i;:::-;40550:9;-1:-1:-1;;;;;40533:44:0;40542:6;-1:-1:-1;;;;;40533:44:0;;40561:15;40533:44;;;;947:25:1;;935:2;920:18;;801:177;40533:44:0;;;;;;;;40024:561;;;;;;39899:686;;;:::o;39193:698::-;39342:15;39372:23;39410:12;39437:23;39475:12;39502:18;39534:19;39545:7;39534:10;:19::i;:::-;-1:-1:-1;;;;;39582:15:0;;;;;;:7;:15;;;;;;39327:226;;-1:-1:-1;39327:226:0;;-1:-1:-1;39327:226:0;;-1:-1:-1;39327:226:0;-1:-1:-1;39327:226:0;-1:-1:-1;39327:226:0;-1:-1:-1;39582:28:0;;39327:226;39582:19;:28::i;:::-;-1:-1:-1;;;;;39564:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;39642:18;;;;;:7;:18;;;;;:39;;39665:15;39642:22;:39::i;:::-;-1:-1:-1;;;;;39621:18:0;;;;;;:7;:18;;;;;;;;:60;;;;39713:7;:18;;;;:39;;39736:15;39713:22;:39::i;40593:757::-;40744:15;40774:23;40812:12;40839:23;40877:12;40904:18;40936:19;40947:7;40936:10;:19::i;:::-;-1:-1:-1;;;;;40984:15:0;;;;;;:7;:15;;;;;;40729:226;;-1:-1:-1;40729:226:0;;-1:-1:-1;40729:226:0;;-1:-1:-1;40729:226:0;-1:-1:-1;40729:226:0;-1:-1:-1;40729:226:0;-1:-1:-1;40984:28:0;;41004:7;40984:19;:28::i;:::-;-1:-1:-1;;;;;40966:15:0;;;;;;:7;:15;;;;;;;;:46;;;;41041:7;:15;;;;:28;;41061:7;41041:19;:28::i;38560:625::-;38707:15;38737:23;38775:12;38802:23;38840:12;38867:18;38899:19;38910:7;38899:10;:19::i;:::-;-1:-1:-1;;;;;38947:15:0;;;;;;:7;:15;;;;;;38692:226;;-1:-1:-1;38692:226:0;;-1:-1:-1;38692:226:0;;-1:-1:-1;38692:226:0;-1:-1:-1;38692:226:0;-1:-1:-1;38692:226:0;-1:-1:-1;38947:28:0;;38692:226;38947:19;:28::i;44991:130::-;45055:7;45082:31;45107:5;45082:20;45094:7;;45082;:11;;:20;;;;:::i;45129:174::-;45226:7;45258:37;45289:5;45258:26;45270:13;;45258:7;:11;;:26;;;;:::i;44030:953::-;17994:1;44096:15;;:22;44093:578;;;44192:13;;44173:16;;44160:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;44134:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;44266:13:0;;44250;;44237:26;;:10;:26;:::i;:::-;:42;;;;:::i;:::-;44220:13;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;44352:13:0;;44333:16;;44320:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;44294:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;44093:578:0;;-1:-1:-1;44093:578:0;;18034:1;44386:15;;:23;44383:288;;;44484:13;;44464:17;;44451:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;44425:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;44559:13:0;;44542:14;;44529:27;;:10;:27;:::i;:::-;:43;;;;:::i;:::-;44512:13;;:60;;;;;;;:::i;:::-;;;;-1:-1:-1;;44646:13:0;;44626:17;;44613:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;44587:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;44383:288:0;44691:19;44713:10;:8;:10::i;:::-;44691:32;-1:-1:-1;44734:18:0;44755:27;:10;44691:32;44755:14;:27::i;:::-;44834:4;44818:22;;;;:7;:22;;;;;;44734:48;;-1:-1:-1;44818:38:0;;44734:48;44818:26;:38::i;:::-;44809:4;44793:22;;;;:7;:22;;;;;;;;:63;;;;44871:11;:26;;;;;;44867:108;;;44953:4;44937:22;;;;:7;:22;;;;;;:38;;44964:10;44937:26;:38::i;:::-;44928:4;44912:22;;;;:7;:22;;;;;:63;44082:901;;44030:953;:::o;41358:147::-;41436:7;;:17;;41448:4;41436:11;:17::i;:::-;41426:7;:27;41477:10;;:20;;41492:4;41477:14;:20::i;:::-;41464:10;:33;-1:-1:-1;;41358:147:0:o;14:180:1:-;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:597::-;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;;;637:6;634:1;631:13;628:91;;;707:1;702:2;693:6;682:9;678:22;674:31;667:42;628:91;-1:-1:-1;780:2:1;759:15;-1:-1:-1;;755:29:1;740:45;;;;787:2;736:54;;199:597;-1:-1:-1;;;199:597:1:o;983:131::-;-1:-1:-1;;;;;1058:31:1;;1048:42;;1038:70;;1104:1;1101;1094:12;1038:70;983:131;:::o;1119:315::-;1187:6;1195;1248:2;1236:9;1227:7;1223:23;1219:32;1216:52;;;1264:1;1261;1254:12;1216:52;1303:9;1290:23;1322:31;1347:5;1322:31;:::i;:::-;1372:5;1424:2;1409:18;;;;1396:32;;-1:-1:-1;;;1119:315:1:o;1631:247::-;1690:6;1743:2;1731:9;1722:7;1718:23;1714:32;1711:52;;;1759:1;1756;1749:12;1711:52;1798:9;1785:23;1817:31;1842:5;1817:31;:::i;2118:456::-;2195:6;2203;2211;2264:2;2252:9;2243:7;2239:23;2235:32;2232:52;;;2280:1;2277;2270:12;2232:52;2319:9;2306:23;2338:31;2363:5;2338:31;:::i;:::-;2388:5;-1:-1:-1;2445:2:1;2430:18;;2417:32;2458:33;2417:32;2458:33;:::i;:::-;2118:456;;2510:7;;-1:-1:-1;;;2564:2:1;2549:18;;;;2536:32;;2118:456::o;2579:388::-;2647:6;2655;2708:2;2696:9;2687:7;2683:23;2679:32;2676:52;;;2724:1;2721;2714:12;2676:52;2763:9;2750:23;2782:31;2807:5;2782:31;:::i;:::-;2832:5;-1:-1:-1;2889:2:1;2874:18;;2861:32;2902:33;2861:32;2902:33;:::i;:::-;2954:7;2944:17;;;2579:388;;;;;:::o;3385:385::-;3471:6;3479;3487;3495;3548:3;3536:9;3527:7;3523:23;3519:33;3516:53;;;3565:1;3562;3555:12;3516:53;-1:-1:-1;;3588:23:1;;;3658:2;3643:18;;3630:32;;-1:-1:-1;3709:2:1;3694:18;;3681:32;;3760:2;3745:18;3732:32;;-1:-1:-1;3385:385:1;-1:-1:-1;3385:385:1:o;3775:118::-;3861:5;3854:13;3847:21;3840:5;3837:32;3827:60;;3883:1;3880;3873:12;3898:309;3963:6;3971;4024:2;4012:9;4003:7;3999:23;3995:32;3992:52;;;4040:1;4037;4030:12;3992:52;4076:9;4063:23;4053:33;;4136:2;4125:9;4121:18;4108:32;4149:28;4171:5;4149:28;:::i;4420:382::-;4485:6;4493;4546:2;4534:9;4525:7;4521:23;4517:32;4514:52;;;4562:1;4559;4552:12;4514:52;4601:9;4588:23;4620:31;4645:5;4620:31;:::i;:::-;4670:5;-1:-1:-1;4727:2:1;4712:18;;4699:32;4740:30;4699:32;4740:30;:::i;4807:241::-;4863:6;4916:2;4904:9;4895:7;4891:23;4887:32;4884:52;;;4932:1;4929;4922:12;4884:52;4971:9;4958:23;4990:28;5012:5;4990:28;:::i;5053:750::-;5145:6;5153;5161;5214:2;5202:9;5193:7;5189:23;5185:32;5182:52;;;5230:1;5227;5220:12;5182:52;5270:9;5257:23;5299:18;5340:2;5332:6;5329:14;5326:34;;;5356:1;5353;5346:12;5326:34;5394:6;5383:9;5379:22;5369:32;;5439:7;5432:4;5428:2;5424:13;5420:27;5410:55;;5461:1;5458;5451:12;5410:55;5501:2;5488:16;5527:2;5519:6;5516:14;5513:34;;;5543:1;5540;5533:12;5513:34;5598:7;5591:4;5581:6;5578:1;5574:14;5570:2;5566:23;5562:34;5559:47;5556:67;;;5619:1;5616;5609:12;5556:67;5650:4;5642:13;;;;-1:-1:-1;5674:6:1;-1:-1:-1;;5715:20:1;;5702:34;5745:28;5702:34;5745:28;:::i;:::-;5792:5;5782:15;;;5053:750;;;;;:::o;5808:356::-;6010:2;5992:21;;;6029:18;;;6022:30;6088:34;6083:2;6068:18;;6061:62;6155:2;6140:18;;5808:356::o;6169:127::-;6230:10;6225:3;6221:20;6218:1;6211:31;6261:4;6258:1;6251:15;6285:4;6282:1;6275:15;6301:168;6341:7;6407:1;6403;6399:6;6395:14;6392:1;6389:21;6384:1;6377:9;6370:17;6366:45;6363:71;;;6414:18;;:::i;:::-;-1:-1:-1;6454:9:1;;6301:168::o;6474:184::-;6544:6;6597:2;6585:9;6576:7;6572:23;6568:32;6565:52;;;6613:1;6610;6603:12;6565:52;-1:-1:-1;6636:16:1;;6474:184;-1:-1:-1;6474:184:1:o;6942:245::-;7009:6;7062:2;7050:9;7041:7;7037:23;7033:32;7030:52;;;7078:1;7075;7068:12;7030:52;7110:9;7104:16;7129:28;7151:5;7129:28;:::i;7955:127::-;8016:10;8011:3;8007:20;8004:1;7997:31;8047:4;8044:1;8037:15;8071:4;8068:1;8061:15;8087:125;8127:4;8155:1;8152;8149:8;8146:34;;;8160:18;;:::i;:::-;-1:-1:-1;8197:9:1;;8087:125::o;8217:127::-;8278:10;8273:3;8269:20;8266:1;8259:31;8309:4;8306:1;8299:15;8333:4;8330:1;8323:15;8349:135;8388:3;-1:-1:-1;;8409:17:1;;8406:43;;;8429:18;;:::i;:::-;-1:-1:-1;8476:1:1;8465:13;;8349:135::o;8489:128::-;8529:3;8560:1;8556:6;8553:1;8550:13;8547:39;;;8566:18;;:::i;:::-;-1:-1:-1;8602:9:1;;8489:128::o;11301:251::-;11371:6;11424:2;11412:9;11403:7;11399:23;11395:32;11392:52;;;11440:1;11437;11430:12;11392:52;11472:9;11466:16;11491:31;11516:5;11491:31;:::i;11557:461::-;11610:3;11648:5;11642:12;11675:6;11670:3;11663:19;11701:4;11730:2;11725:3;11721:12;11714:19;;11767:2;11760:5;11756:14;11788:1;11798:195;11812:6;11809:1;11806:13;11798:195;;;11877:13;;-1:-1:-1;;;;;11873:39:1;11861:52;;11933:12;;;;11968:15;;;;11909:1;11827:9;11798:195;;;-1:-1:-1;12009:3:1;;11557:461;-1:-1:-1;;;;;11557:461:1:o;12023:510::-;12294:6;12283:9;12276:25;12337:3;12332:2;12321:9;12317:18;12310:31;12257:4;12358:57;12410:3;12399:9;12395:19;12387:6;12358:57;:::i;:::-;-1:-1:-1;;;;;12451:32:1;;;;12446:2;12431:18;;12424:60;-1:-1:-1;12515:2:1;12500:18;12493:34;12350:65;12023:510;-1:-1:-1;;12023:510:1:o;13807:217::-;13847:1;13873;13863:132;;13917:10;13912:3;13908:20;13905:1;13898:31;13952:4;13949:1;13942:15;13980:4;13977:1;13970:15;13863:132;-1:-1:-1;14009:9:1;;13807:217::o;20260:582::-;20559:6;20548:9;20541:25;20602:6;20597:2;20586:9;20582:18;20575:34;20645:3;20640:2;20629:9;20625:18;20618:31;20522:4;20666:57;20718:3;20707:9;20703:19;20695:6;20666:57;:::i;:::-;-1:-1:-1;;;;;20759:32:1;;;;20754:2;20739:18;;20732:60;-1:-1:-1;20823:3:1;20808:19;20801:35;20658:65;20260:582;-1:-1:-1;;;20260:582:1:o;21869:306::-;21957:6;21965;21973;22026:2;22014:9;22005:7;22001:23;21997:32;21994:52;;;22042:1;22039;22032:12;21994:52;22071:9;22065:16;22055:26;;22121:2;22110:9;22106:18;22100:25;22090:35;;22165:2;22154:9;22150:18;22144:25;22134:35;;21869:306;;;;;:::o

Swarm Source

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