ETH Price: $3,300.91 (-0.35%)
Gas: 8 Gwei

Token

BB Gaming (BB)
 

Overview

Max Total Supply

1,000,000,000 BB

Holders

111 (0.00%)

Market

Price

$0.00 @ 0.000000 ETH (+0.29%)

Onchain Market Cap

$21,087.12

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
267,752.813740126415152519 BB

Value
$5.65 ( ~0.00171165028530841 Eth) [0.0268%]
0x78c2eac46577af313b450264d217b18183a96dc8
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Big Beans is a new age token focused on integrating the blockchain with gaming while also introducing an innovative way for players to earn. The Beans Meta will be the virtual world where the Beans ecosystem will exist; it will have virtual land, NFTs, P2E, gaming and cartoons.

Market

Volume (24H):$0.01
Market Capitalization:$0.00
Circulating Supply:0.00 BB
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BigBeansGaming

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;

interface IERC20 {
  function totalSupply() external view returns (uint256);
  function decimals() external view returns (uint8);
  function symbol() external view returns (string memory);
  function name() external view returns (string memory);
  function getOwner() external view returns (address);
  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);
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function allPairs(uint) external view returns (address lpPair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint 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 (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint 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 (uint);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    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 (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint 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,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface AntiSnipe {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ab) external;
    function removeSniper(address account) external;
    function getSniperAmt() external view returns (uint256);
    function removeBlacklisted(address account) external;
    function isBlacklisted(address account) external view returns (bool);
}

contract BigBeansGaming is IERC20 {
    // Ownership moved to in-contract for customizability.
    address private _owner;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

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

    mapping (address => bool) private presaleAddresses;
    bool private allowedPresaleExclusion = true;
    mapping (address => bool) private _liquidityHolders;

    uint256 private startingSupply = 1_000_000_000;

    string constant private _name = "BB Gaming";
    string constant private _symbol = "BB";

    struct FeesStruct {
        uint16 reflect;
        uint16 bigBeans;
        uint16 littleBeans;
        uint16 marketing;
    }

    struct StaticValuesStruct {
        uint16 maxReflectFee;
        uint16 maxBigBeansFee;
        uint16 maxLittleBeansFee;
        uint16 maxMarketingFee;
        uint16 masterTaxDivisor;
    }

    struct Ratios {
        uint16 bigBeans;
        uint16 littleBeans;
        uint16 marketing;
        uint16 total;
    }

    FeesStruct private currentTaxes = FeesStruct({
        reflect: 0,
        bigBeans: 0,
        littleBeans: 0,
        marketing: 0
        });

    FeesStruct public _buyTaxes = FeesStruct({
        reflect: 100,
        bigBeans: 400,
        littleBeans: 0,
        marketing: 300
        });

    FeesStruct public _sellTaxes = FeesStruct({
        reflect: 100,
        bigBeans: 600,
        littleBeans: 100,
        marketing: 400
        });

    FeesStruct public _transferTaxes = FeesStruct({
        reflect: 100,
        bigBeans: 700,
        littleBeans: 0,
        marketing: 400
        });

    Ratios public _ratios = Ratios({
        bigBeans: 14,
        littleBeans: 2,
        marketing: 9,
        total: 25
        });

    uint256 constant masterTaxDivisor = 10000;

    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals = 18;
    uint256 private _tTotal = startingSupply * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

    address constant private _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
    address payable private _marketingWallet = payable(0xebF386CA0540d6a72Afb6aA378774c805DA6651D);
    address payable private _bigBeansWallet = payable(0x15Fe17dc42a0463cC531AEf67A70490C5952077D);
    
    bool inSwap;
    bool public contractSwapEnabled = false;

    uint256 private swapThreshold = (_tTotal * 1) / 10000;
    uint256 private swapAmount = (_tTotal * 5) / 10000;

    uint256 private _maxTxAmount = (_tTotal * 2) / 100;

    address[] pairPath;
    bool public buybackEnabled;
    bool public littleBeansEnabled;
    bool public bigBeansEnabled;
    uint256 public littleBeansPercent = 10;
    uint256 public littleBeansDivisor = 100;

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    AntiSnipe antiSnipe;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event ContractSwapEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SniperCaught(address sniperAddress);
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier onlyOwner() {
        require(_owner == msg.sender, "Caller =/= owner.");
        _;
    }
    
    constructor () payable {
        _rOwned[msg.sender] = _rTotal;

        // Set the owner.
        _owner = msg.sender;

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;

        _approve(msg.sender, _routerAddress, type(uint256).max);
        _approve(address(this), _routerAddress, type(uint256).max);

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[owner()] = true;

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

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

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and recnouncements.
    // This allows for removal of ownership privelages from the owner once renounced or transferred.
    function owner() public view returns (address) {
        return _owner;
    }

    function transferOwner(address newOwner) external onlyOwner() {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);
        
        if (_marketingWallet == payable(_owner))
            _marketingWallet = payable(newOwner);
        
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

    function renounceOwnership() public virtual onlyOwner() {
        setExcludedFromFees(_owner, false);
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }
//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    function totalSupply() external view override returns (uint256) { return _tTotal; }
    function decimals() external view override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner(); }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    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) public override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

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

    function _approve(address sender, address spender, uint256 amount) private {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

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

    function approveContractContingency() public onlyOwner returns (bool) {
        _approve(address(this), address(dexRouter), type(uint256).max);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender] -= amount;
        }

        return _transfer(sender, recipient, amount);
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] - subtractedValue);
        return true;
    }

    function setNewRouter(address newRouter) public onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPairs[pair] = false;
            antiSnipe.setLpPair(pair, false);
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 3 days, "Cannot set a new pair this week!");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
            antiSnipe.setLpPair(pair, true);
        }
    }

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

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function setExcludedFromFees(address account, bool enabled) public onlyOwner {
        _isExcludedFromFees[account] = enabled;
    }

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

    function setExcludedFromReward(address account, bool enabled) public onlyOwner {
        if (enabled == true) {
            require(!_isExcluded[account], "Account is already excluded.");
            if(_rOwned[account] > 0) {
                _tOwned[account] = tokenFromReflection(_rOwned[account]);
            }
            _isExcluded[account] = true;
            _excluded.push(account);
        } else if (enabled == false) {
            require(_isExcluded[account], "Account is already included.");
            if(_excluded.length == 1){
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
            } else {
                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 setInitializer(address initializer) external onlyOwner {
        require(!_hasLiqBeenAdded, "Liquidity is already in.");
        require(initializer != address(this), "Can't be self.");
        antiSnipe = AntiSnipe(initializer);
    }

    function removeSniper(address account) external onlyOwner {
        antiSnipe.removeSniper(account);
    }


    function isBlacklisted(address account) public view returns (bool) {
        return antiSnipe.isBlacklisted(account);
    }

    function removeBlacklisted(address account) external onlyOwner {
        antiSnipe.removeBlacklisted(account);
    }

    function getSniperAmt() public view returns (uint256) {
        return antiSnipe.getSniperAmt();
    }

    function setProtectionSettings(bool _antiSnipe, bool _antiBlock) external onlyOwner {
        antiSnipe.setProtections(_antiSnipe, _antiBlock);
    }

    function setTaxesBuy(uint16 reflect, uint16 bigBeans, uint16 littleBeans, uint16 marketing) external onlyOwner {
        require(bigBeans + littleBeans + reflect + marketing <= 3000);
        _buyTaxes.bigBeans = bigBeans;
        _buyTaxes.littleBeans = littleBeans;
        _buyTaxes.reflect = reflect;
        _buyTaxes.marketing = marketing;
    }

    function setTaxesSell(uint16 reflect, uint16 bigBeans, uint16 littleBeans, uint16 marketing) external onlyOwner {
        require(bigBeans + littleBeans + reflect + marketing <= 3000);
        _sellTaxes.bigBeans = bigBeans;
        _sellTaxes.littleBeans = littleBeans;
        _sellTaxes.reflect = reflect;
        _sellTaxes.marketing = marketing;
    }

    function setTaxesTransfer(uint16 reflect, uint16 bigBeans, uint16 littleBeans, uint16 marketing) external onlyOwner {
        require(bigBeans + littleBeans + reflect + marketing <= 3000);
        _transferTaxes.bigBeans = bigBeans;
        _transferTaxes.littleBeans = littleBeans;
        _transferTaxes.reflect = reflect;
        _transferTaxes.marketing = marketing;
    }

    function setRatios(uint16 bigBeans, uint16 littleBeans, uint16 marketing) external onlyOwner {
        _ratios.bigBeans = bigBeans;
        _ratios.littleBeans = littleBeans;
        _ratios.marketing = marketing;
        _ratios.total = bigBeans + littleBeans + marketing;
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
    }

    function setWallets(address payable marketing, address payable bigBeans) external onlyOwner {
        _marketingWallet = payable(marketing);
        _bigBeansWallet = payable(bigBeans);
    }

    function setContractSwapEnabled(bool _enabled) public onlyOwner {
        contractSwapEnabled = _enabled;
        emit ContractSwapEnabledUpdated(_enabled);
    }
    
    function setBuybackEnabled(bool enabled) external onlyOwner {
        buybackEnabled = enabled;
    }

    function setBigBeansEnabled(bool enabled) external onlyOwner {
        if (enabled) {
            littleBeansEnabled = false;
        }
        bigBeansEnabled = enabled;
    }

    function setLittleBeansEnabled(bool enabled) external onlyOwner {
        if (enabled) {
            bigBeansEnabled = false;
        }
        littleBeansEnabled = enabled;
    }

    function setLittleBeansSettings(uint256 percent, uint256 divisor) external onlyOwner {
        littleBeansPercent = percent;
        littleBeansDivisor = divisor;
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        require((_tTotal * percent) / divisor >= (_tTotal / 1000), "Max Transaction amt must be above 0.1% of total supply.");
        _maxTxAmount = (_tTotal * percent) / divisor;
    }

    function getMaxTX() public view returns (uint256) {
        return _maxTxAmount / (10**_decimals);
    }

    function setExcludedFromLimits(address account, bool enabled) external onlyOwner {
        _isExcludedFromLimits[account] = enabled;
    }

    function isExcludedFromLimits(address account) public view returns (bool) {
        return _isExcludedFromLimits[account];
    }

    function excludePresaleAddresses(address router, address presale) external onlyOwner {
        require(allowedPresaleExclusion, "Function already used.");
        if (router == presale) {
            _liquidityHolders[presale] = true;
            presaleAddresses[presale] = true;
            setExcludedFromFees(presale, true);
            setExcludedFromReward(presale, true);
        } else {
            _liquidityHolders[router] = true;
            _liquidityHolders[presale] = true;
            presaleAddresses[router] = true;
            presaleAddresses[presale] = true;
            setExcludedFromFees(router, true);
            setExcludedFromFees(presale, true);
            setExcludedFromReward(router, true);
            setExcludedFromReward(presale, true);
        }
    }

    function _hasLimits(address from, address to) private view returns (bool) {
        return from != owner()
            && to != owner()
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this);
    }

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

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

        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if(lpPairs[from] || lpPairs[to]){
                if (!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                    require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
                }
            }
        }

        bool takeFee = true;
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }

        if (lpPairs[to]) {
            if (!inSwap
                && contractSwapEnabled
                && !presaleAddresses[to]
                && !presaleAddresses[from]
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    contractSwap(contractTokenBalance);
                }
            }

            if (buybackEnabled && from != address(this)) {
                uint256 bnbBalance = dexRouter.getAmountsOut(amount, pairPath)[1];
                if (littleBeansEnabled && (bnbBalance * littleBeansPercent) / littleBeansDivisor < address(this).balance) {
                    buybackAndBurn((bnbBalance * littleBeansPercent) / littleBeansDivisor);
                }

                if (bigBeansEnabled) {
                    if (address(this).balance < bnbBalance * 2) {
                        bigBeansEnabled = false;
                        littleBeansEnabled = true;
                    } else {
                        buybackAndBurn(bnbBalance * 2);
                    }
                }
            }
        } 
        return _finalizeTransfer(from, to, amount, takeFee);
    }

    function contractSwap(uint256 contractTokenBalance) private lockTheSwap {
        if (_ratios.total == 0)
            return;

        if(_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }

        uint256 initial = address(this).balance;
        
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            contractTokenBalance,
            0, // accept any amount of ETH
            pairPath,
            address(this),
            block.timestamp
        );

        uint256 amountBNB = address(this).balance - initial;

        if (amountBNB > 0) {
            _bigBeansWallet.transfer((amountBNB * _ratios.bigBeans) / _ratios.total);
            _marketingWallet.transfer(amountBNB * _ratios.marketing / _ratios.total);
        }
    }

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

        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountBNB}(
            0, // accept any amount of ETH
            path,
            DEAD,
            block.timestamp
        );
    }

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            if(address(antiSnipe) == address(0)){
                antiSnipe = AntiSnipe(address(this));
            }
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        setExcludedFromReward(address(this), true);
        setExcludedFromReward(lpPair, true);
        if(address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        try antiSnipe.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        tradingEnabled = true;
    }

    function sweepContingency() external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot call after liquidity.");
        payable(owner()).transfer(address(this).balance);
    }

    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tLiquidity;

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;
    }

    function _finalizeTransfer(address from, address to, uint256 tAmount, bool takeFee) private returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                revert("Only owner can transfer at this time.");
            }
        }

        ExtraValues memory values = _getValues(from, to, tAmount, takeFee);

        _rOwned[from] = _rOwned[from] - values.rAmount;
        _rOwned[to] = _rOwned[to] + values.rTransferAmount;

        if (_isExcluded[from] && !_isExcluded[to]) {
            _tOwned[from] = _tOwned[from] - tAmount;
        } else if (!_isExcluded[from] && _isExcluded[to]) {
            _tOwned[to] = _tOwned[to] + values.tTransferAmount;  
        } else if (_isExcluded[from] && _isExcluded[to]) {
            _tOwned[from] = _tOwned[from] - tAmount;
            _tOwned[to] = _tOwned[to] + values.tTransferAmount;
        }

        if (values.tLiquidity > 0)
            _takeLiquidity(from, values.tLiquidity);
        if (values.rFee > 0 || values.tFee > 0)
            _rTotal -= values.rFee;
            _tFeeTotal += values.tFee;

        emit Transfer(from, to, values.tTransferAmount);
        return true;
    }

    function _getValues(address from, address to, uint256 tAmount, bool takeFee) private returns (ExtraValues memory) {
        ExtraValues memory values;
        uint256 currentRate = _getRate();

        values.rAmount = tAmount * currentRate;

        if (_hasLimits(from, to)) {
            bool checked;
            try antiSnipe.checkUser(from, to, tAmount) returns (bool check) {
                checked = check;
            } catch {
                revert();
            }

            if(!checked) {
                revert();
            }
        }

        if(takeFee) {
            if (lpPairs[to]) {
                currentTaxes.reflect = _sellTaxes.reflect;
                currentTaxes.bigBeans = _sellTaxes.bigBeans;
                currentTaxes.marketing = _sellTaxes.marketing;
            } else if (lpPairs[from]) {
                currentTaxes.reflect = _buyTaxes.reflect;
                currentTaxes.bigBeans = _buyTaxes.bigBeans;
                currentTaxes.marketing = _buyTaxes.marketing;
            } else {
                currentTaxes.reflect = _transferTaxes.reflect;
                currentTaxes.bigBeans = _transferTaxes.bigBeans;
                currentTaxes.marketing = _transferTaxes.marketing;
            }

            values.tFee = (tAmount * currentTaxes.reflect) / masterTaxDivisor;
            values.tLiquidity = (tAmount * (currentTaxes.bigBeans + currentTaxes.marketing)) / masterTaxDivisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tLiquidity);

            values.rFee = values.tFee * currentRate;
        } else {
            values.tFee = 0;
            values.tLiquidity = 0;
            values.tTransferAmount = tAmount;

            values.rFee = 0;
        }
        values.rTransferAmount = values.rAmount - (values.rFee + (values.tLiquidity * currentRate));
        return values;
    }

    function _getRate() internal view returns(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 - _rOwned[_excluded[i]];
            tSupply = tSupply - _tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal) return _rTotal / _tTotal;
        return rSupply / tSupply;
    }

    function _takeLiquidity(address sender, uint256 tLiquidity) private {
        _rOwned[address(this)] = _rOwned[address(this)] + (tLiquidity * _getRate());
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
        emit Transfer(sender, address(this), tLiquidity); // Transparency is the key to success.
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","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":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":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"bigBeans","type":"uint16"},{"internalType":"uint16","name":"littleBeans","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"bigBeans","type":"uint16"},{"internalType":"uint16","name":"littleBeans","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"bigBeans","type":"uint16"},{"internalType":"uint16","name":"littleBeans","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"bigBeans","type":"uint16"},{"internalType":"uint16","name":"littleBeans","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bigBeansEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"presale","type":"address"}],"name":"excludePresaleAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSniperAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","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":[],"name":"littleBeansDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"littleBeansEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"littleBeansPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"address","name":"account","type":"address"}],"name":"removeBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBigBeansEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBuybackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLittleBeansEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setLittleBeansSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"bigBeans","type":"uint16"},{"internalType":"uint16","name":"littleBeans","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"bigBeans","type":"uint16"},{"internalType":"uint16","name":"littleBeans","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"bigBeans","type":"uint16"},{"internalType":"uint16","name":"littleBeans","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"bigBeans","type":"uint16"},{"internalType":"uint16","name":"littleBeans","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"bigBeans","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60006004819055600b8054600160ff1991821617909155633b9aca00600d55608082905260a082905260c082905260e0829052600e80546001600160401b03199081168255606461010081905261019061012081905261014086905261012c61016052600f8054841667012c0000019000641790556101808290526102586101a0526101c08290526101e0819052601080548416670190006402580064179055610200919091526102bc610220526102409490945261026093909352601180548416670190000002bc00641790556103006040526102805260026102a05260096102c05260196102e05260128054909216661900090002000e17825560138054909116821790556200011390600a620008e8565b600d5462000122919062000900565b6014819055620001359060001962000938565b62000143906000196200094f565b601555601980546001600160a01b03191673ebf386ca0540d6a72afb6aa378774c805da6651d179055601a8054600161ff0160a01b0319167315fe17dc42a0463cc531aef67a70490c5952077d17905560145461271090620001a790600162000900565b620001b3919062000969565b601b556127106014546005620001ca919062000900565b620001d6919062000969565b601c5560646014546002620001ec919062000900565b620001f8919062000969565b601d55600a602090815560646021556022805461ffff191690556015543360008181526001845260408082209390935580546001600160a01b0319908116909217905560178054737a250d5630b4cf539739df2c5dacb4c659f2488d921682179055815163c45a015560e01b81529151909263c45a015592600480820193918290030181865afa15801562000291573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b7919062000980565b6001600160a01b031663c9c65396601760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000319573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033f919062000980565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af11580156200038c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b2919062000980565b601880546001600160a01b0319166001600160a01b039290921691821790556000908152600360205260409020805460ff191660011790556200040d33737a250d5630b4cf539739df2c5dacb4c659f2488d60001962000651565b6200043030737a250d5630b4cf539739df2c5dacb4c659f2488d60001962000651565b600160066000620004496000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252812080548316600190811790915561dead82527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280549093168117909255600c90620004d16000546001600160a01b031690565b6001600160a01b031681526020808201929092526040908101600020805460ff191693151593909317909255815160028082526060820184529092909183019080368337505081516200052c92601e92506020019062000752565b5030601e600081548110620005455762000545620009ab565b60009182526020918290200180546001600160a01b0319166001600160a01b03938416179055601754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015620005ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d1919062000980565b601e600181548110620005e857620005e8620009ab565b600091825260208083209190910180546001600160a01b0319166001600160a01b03949094169390931790925560145460405190815233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3620009c1565b6001600160a01b038316620006a35760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620006f15760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064016200069a565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b828054828255906000526020600020908101928215620007aa579160200282015b82811115620007aa57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000773565b50620007b8929150620007bc565b5090565b5b80821115620007b85760008155600101620007bd565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200082a5781600019048211156200080e576200080e620007d3565b808516156200081c57918102915b93841c9390800290620007ee565b509250929050565b6000826200084357506001620008e2565b816200085257506000620008e2565b81600181146200086b5760028114620008765762000896565b6001915050620008e2565b60ff8411156200088a576200088a620007d3565b50506001821b620008e2565b5060208310610133831016604e8410600b8410161715620008bb575081810a620008e2565b620008c78383620007e9565b8060001904821115620008de57620008de620007d3565b0290505b92915050565b6000620008f960ff84168362000832565b9392505050565b60008160001904831182151516156200091d576200091d620007d3565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826200094a576200094a62000922565b500690565b600082821015620009645762000964620007d3565b500390565b6000826200097b576200097b62000922565b500490565b6000602082840312156200099357600080fd5b81516001600160a01b0381168114620008f957600080fd5b634e487b7160e01b600052603260045260246000fd5b614c4180620009d16000396000f3fe6080604052600436106103bc5760003560e01c806370a08231116101f2578063aa5454731161010d578063d29eedcc116100a0578063ee5d9c2d1161006f578063ee5d9c2d14610c30578063fb78680d14610c45578063fdb78c0e14610c65578063fe575a8714610c9857600080fd5b8063d29eedcc14610b94578063d3f6a15714610baa578063dd62ed3e14610bca578063eafb5a3c14610c1057600080fd5b8063c6831cd8116100dc578063c6831cd814610ada578063c6a276c214610b17578063cab5ebea14610b37578063cf84770614610b5757600080fd5b8063aa54547314610a3d578063bc77169d14610a5d578063becdf13f14610a7d578063c2fa418f14610a9d57600080fd5b80638a63bd9b116101855780639a9b567d116101545780639a9b567d146109bd578063a457c2d7146109dd578063a9059cbb146109fd578063aa22b17214610a1d57600080fd5b80638a63bd9b1461094d5780638a8c523c146109625780638da5cb5b1461092f57806395d89b411461097757600080fd5b806380c581d1116101c157806380c581d1146108b657806381b46f2e146108d657806388f82020146108f6578063893d20e81461092f57600080fd5b806370a08231146107f6578063715018a614610816578063798087321461082b5780637b45d4311461084b57600080fd5b806336fddb04116102e257806350a8e016116102755780635cce86cd116102445780635cce86cd14610772578063612c0321146107ab57806365707565146107cb5780636ebd0078146107e157600080fd5b806350a8e016146106fe57806355dbc3691461071d578063590ffdce146107325780635c24b0741461075257600080fd5b806349653eb7116102b157806349653eb71461066b5780634ada218b1461068b5780634fb2e45d146106a55780634fbee193146106c557600080fd5b806336fddb04146105eb578063395093511461060b5780633f3cf56c1461062b578063452ed4f11461064b57600080fd5b806314c9874b1161035a5780632b112e49116103295780632b112e49146105745780632d83811914610589578063313ce567146105a957806333251a0b146105cb57600080fd5b806314c9874b146104fc578063160d0da51461051b57806318160ddd1461053557806323b872dd1461055457600080fd5b80630758d924116103965780630758d9241461046c578063095ea7b31461048c57806313b4a7f4146104bc57806313e46192146104dc57600080fd5b806303fd2a45146103c8578063044df726146103fb57806306fdde031461041d57600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103de61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040757600080fd5b5061041b6104163660046144c8565b610cb8565b005b34801561042957600080fd5b5060408051808201909152600981527f42422047616d696e67000000000000000000000000000000000000000000000060208201525b6040516103f29190614501565b34801561047857600080fd5b506017546103de906001600160a01b031681565b34801561049857600080fd5b506104ac6104a736600461456b565b610d95565b60405190151581526020016103f2565b3480156104c857600080fd5b5061041b6104d7366004614597565b610dac565b3480156104e857600080fd5b5061041b6104f73660046145c5565b610f36565b34801561050857600080fd5b50601f546104ac90610100900460ff1681565b34801561052757600080fd5b50601f546104ac9060ff1681565b34801561054157600080fd5b506014545b6040519081526020016103f2565b34801561056057600080fd5b506104ac61056f3660046145e3565b6112f0565b34801561058057600080fd5b50610546611368565b34801561059557600080fd5b506105466105a4366004614624565b61139b565b3480156105b557600080fd5b5060135460405160ff90911681526020016103f2565b3480156105d757600080fd5b5061041b6105e636600461463d565b611432565b3480156105f757600080fd5b5061041b6106063660046145c5565b611503565b34801561061757600080fd5b506104ac61062636600461456b565b61157c565b34801561063757600080fd5b5061041b61064636600461465a565b6115b8565b34801561065757600080fd5b506018546103de906001600160a01b031681565b34801561067757600080fd5b5061041b61068636600461467c565b6116c3565b34801561069757600080fd5b506022546104ac9060ff1681565b3480156106b157600080fd5b5061041b6106c036600461463d565b61175b565b3480156106d157600080fd5b506104ac6106e036600461463d565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561070a57600080fd5b506022546104ac90610100900460ff1681565b34801561072957600080fd5b506105466119a1565b34801561073e57600080fd5b5061041b61074d3660046145c5565b611a1a565b34801561075e57600080fd5b5061041b61076d36600461463d565b611a93565b34801561077e57600080fd5b506104ac61078d36600461463d565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156107b757600080fd5b50601f546104ac9062010000900460ff1681565b3480156107d757600080fd5b5061054660215481565b3480156107ed57600080fd5b50610546611bd2565b34801561080257600080fd5b5061054661081136600461463d565b611bf3565b34801561082257600080fd5b5061041b611c52565b34801561083757600080fd5b5061041b61084636600461465a565b611d02565b34801561085757600080fd5b50600f546108889061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103f2565b3480156108c257600080fd5b5061041b6108d13660046145c5565b611d5b565b3480156108e257600080fd5b5061041b6108f136600461467c565b611f17565b34801561090257600080fd5b506104ac61091136600461463d565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561093b57600080fd5b506000546001600160a01b03166103de565b34801561095957600080fd5b506104ac611fae565b34801561096e57600080fd5b5061041b61201d565b34801561098357600080fd5b5060408051808201909152600281527f4242000000000000000000000000000000000000000000000000000000000000602082015261045f565b3480156109c957600080fd5b5061041b6109d836600461467c565b61222f565b3480156109e957600080fd5b506104ac6109f836600461456b565b612290565b348015610a0957600080fd5b506104ac610a1836600461456b565b6122c7565b348015610a2957600080fd5b5061041b610a383660046146b0565b6122de565b348015610a4957600080fd5b5061041b610a583660046146f3565b6123a6565b348015610a6957600080fd5b5061041b610a783660046146f3565b6124b3565b348015610a8957600080fd5b5061041b610a983660046146f3565b6125c0565b348015610aa957600080fd5b506011546108889061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610ae657600080fd5b506010546108889061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610b2357600080fd5b5061041b610b3236600461463d565b6126cd565b348015610b4357600080fd5b5061041b610b5236600461467c565b61276d565b348015610b6357600080fd5b506012546108889061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610ba057600080fd5b5061054660205481565b348015610bb657600080fd5b5061041b610bc5366004614597565b612840565b348015610bd657600080fd5b50610546610be5366004614597565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610c1c57600080fd5b5061041b610c2b36600461463d565b6128c9565b348015610c3c57600080fd5b5061041b612c78565b348015610c5157600080fd5b5061041b610c60366004614747565b612d5b565b348015610c7157600080fd5b50601a546104ac907501000000000000000000000000000000000000000000900460ff1681565b348015610ca457600080fd5b506104ac610cb336600461463d565b612de8565b6000546001600160a01b03163314610d0b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6022546040517fefbdbabd00000000000000000000000000000000000000000000000000000000815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610d7957600080fd5b505af1158015610d8d573d6000803e3d6000fd5b505050505050565b6000610da2338484612e76565b5060015b92915050565b6000546001600160a01b03163314610dfa5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b600b5460ff16610e4c5760405162461bcd60e51b815260206004820152601660248201527f46756e6374696f6e20616c726561647920757365642e000000000000000000006044820152606401610d02565b806001600160a01b0316826001600160a01b03161415610eba576001600160a01b0381166000908152600c602090815260408083208054600160ff199182168117909255600a9093529220805490911682179055610eab908290611a1a565b610eb6816001610f36565b5050565b6001600160a01b038281166000818152600c602090815260408083208054600160ff1991821681179092559587168085528285208054881683179055948452600a909252808320805486168317905592825291902080549092168117909155610f24908390611a1a565b610f2f816001611a1a565b610eab8260015b6000546001600160a01b03163314610f845760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b600181151514156110c6576001600160a01b03821660009081526008602052604090205460ff1615610ff85760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610d02565b6001600160a01b03821660009081526001602052604090205415611052576001600160a01b0382166000908152600160205260409020546110389061139b565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01805473ffffffffffffffffffffffffffffffffffffffff19169091179055565b80610eb6576001600160a01b03821660009081526008602052604090205460ff166111335760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610d02565b600954600114156111af576001600160a01b038216600090815260026020908152604080832083905560089091529020805460ff19169055600980548061117c5761117c614779565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b6009548110156112eb57826001600160a01b0316600982815481106111d9576111d96147a8565b6000918252602090912001546001600160a01b031614156112d9576009805461120490600190614806565b81548110611214576112146147a8565b600091825260209091200154600980546001600160a01b039092169183908110611240576112406147a8565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600282526040808220829055600890925220805460ff1916905560098054806112a5576112a5614779565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b806112e38161481d565b9150506111b2565b505050565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001914611355576001600160a01b03841660009081526005602090815260408083203384529091528120805484929061134f908490614806565b90915550505b611360848484612f83565b949350505050565b60006113746000611bf3565b61137f61dead611bf3565b6113899190614838565b6014546113969190614806565b905090565b60006015548211156114155760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610d02565b600061141f61352b565b905061142b8184614850565b9392505050565b6000546001600160a01b031633146114805760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b6022546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b906024015b600060405180830381600087803b1580156114e857600080fd5b505af11580156114fc573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146115515760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610da29185906115b3908690614838565b612e76565b6000546001600160a01b031633146116065760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b6103e86014546116169190614850565b8183601454611625919061488b565b61162f9190614850565b10156116a35760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610d02565b80826014546116b2919061488b565b6116bc9190614850565b601d555050565b6000546001600160a01b031633146117115760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b801561172357601f805461ff00191690555b601f805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b6000546001600160a01b031633146117a95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b6001600160a01b0381166118255760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d02565b6001600160a01b03811661dead14156118a65760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d02565b600080546118bf916001600160a01b0390911690611a1a565b6118ca816001611a1a565b6000546019546001600160a01b039081169116141561190c576019805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b60008054611922906001600160a01b0316611bf3565b111561194957600054611947906001600160a01b03168261194282611bf3565b612f83565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000602260029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139691906148aa565b6000546001600160a01b03163314611a685760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611ae15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b602254610100900460ff1615611b395760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610d02565b6001600160a01b038116301415611b925760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610d02565b602280546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b601354600090611be69060ff16600a6149a7565b601d546113969190614850565b6001600160a01b03811660009081526008602052604081205460ff1615611c3057506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610da69061139b565b6000546001600160a01b03163314611ca05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b60008054611cb9916001600160a01b0390911690611a1a565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611d505760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b602091909155602155565b6000546001600160a01b03163314611da95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b80611e35576001600160a01b03828116600081815260036020526040808220805460ff1916905560225490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610d7957600080fd5b60045415611e9c576203f48060045442611e4f9190614806565b11611e9c5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610d02565b6001600160a01b0382811660008181526003602052604090819020805460ff1916600190811790915542600490815560225492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610d5f565b6000546001600160a01b03163314611f655760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b8015611f9457601f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1690555b601f80549115156101000261ff0019909216919091179055565b600080546001600160a01b03163314611ffd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b6017546120179030906001600160a01b0316600019612e76565b50600190565b6000546001600160a01b0316331461206b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b60225460ff16156120be5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d02565b602254610100900460ff166121155760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d02565b612120306001610f36565b601854612137906001600160a01b03166001610f36565b6022546201000090046001600160a01b031661217d57602280547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6022546018546013546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561220e57600080fd5b505af192505050801561221f575060015b506022805460ff19166001179055565b6000546001600160a01b0316331461227d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b601f805460ff1916911515919091179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610da29185906115b3908690614806565b60006122d4338484612f83565b5060019392505050565b6000546001600160a01b0316331461232c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b6012805461ffff8381166401000000000265ffff0000000019868316620100000263ffffffff199094169288169290921792909217161790558061237083856149b6565b61237a91906149b6565b6012805461ffff9290921666010000000000000267ffff00000000000019909216919091179055505050565b6000546001600160a01b031633146123f45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b610bb8818561240385876149b6565b61240d91906149b6565b61241791906149b6565b61ffff16111561242657600080fd5b6011805461ffff9283166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff00009484166401000000000265ffff00000000199685166201000002969096167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffff909216919091179490941792909216931692909217179055565b6000546001600160a01b031633146125015760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b610bb8818561251085876149b6565b61251a91906149b6565b61252491906149b6565b61ffff16111561253357600080fd5b600f805461ffff9283166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff00009484166401000000000265ffff00000000199685166201000002969096167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffff909216919091179490941792909216931692909217179055565b6000546001600160a01b0316331461260e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b610bb8818561261d85876149b6565b61262791906149b6565b61263191906149b6565b61ffff16111561264057600080fd5b6010805461ffff9283166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff00009484166401000000000265ffff00000000199685166201000002969096167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffff909216919091179490941792909216931692909217179055565b6000546001600160a01b0316331461271b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b6022546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c2906024016114ce565b6000546001600160a01b031633146127bb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b601a80548215157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579061283590831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461288e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b601980546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff1991821617909155601a8054929093169116179055565b6000546001600160a01b031633146129175760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561295c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298091906149dc565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f191906149dc565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a7891906149dc565b90506001600160a01b038116612c1657816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ac6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aea91906149dc565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b5b91906149dc565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612bc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be491906149dc565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612c3f565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556112eb903090600019612e76565b6000546001600160a01b03163314612cc65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b602254610100900460ff1615612d1e5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d02565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015612d58573d6000803e3d6000fd5b50565b6000546001600160a01b03163314612da95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b8284601454612db8919061488b565b612dc29190614850565b601b556014548190612dd590849061488b565b612ddf9190614850565b601c5550505050565b6022546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015612e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da691906149f9565b6001600160a01b038316612ecc5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d02565b6001600160a01b038216612f225760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d02565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166130015760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610d02565b6001600160a01b03831661307d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610d02565b600082116130f35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610d02565b6130fd84846136bc565b156132575760225460ff166131545760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d02565b6001600160a01b03841660009081526003602052604090205460ff168061319357506001600160a01b03831660009081526003602052604090205460ff165b15613257576001600160a01b03841660009081526007602052604090205460ff161580156131da57506001600160a01b03831660009081526007602052604090205460ff16155b1561325757601d548211156132575760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610d02565b6001600160a01b03841660009081526006602052604090205460019060ff168061329957506001600160a01b03841660009081526006602052604090205460ff165b156132a2575060005b6001600160a01b03841660009081526003602052604090205460ff161561351657601a5474010000000000000000000000000000000000000000900460ff161580156133095750601a547501000000000000000000000000000000000000000000900460ff165b801561332e57506001600160a01b0384166000908152600a602052604090205460ff16155b801561335357506001600160a01b0385166000908152600a602052604090205460ff16155b1561338757600061336330611bf3565b9050601b54811061338557601c54811061337c5750601c545b61338581613779565b505b601f5460ff1680156133a257506001600160a01b0385163014155b15613516576017546040517fd06ca61f0000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063d06ca61f906133f4908790601e90600401614a5f565b600060405180830381865afa158015613411573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526134399190810190614aa7565b60018151811061344b5761344b6147a8565b60200260200101519050601f60019054906101000a900460ff16801561348a5750476021546020548361347e919061488b565b6134889190614850565b105b156134b2576134b2602154602054836134a3919061488b565b6134ad9190614850565b6139c7565b601f5462010000900460ff1615613514576134ce81600261488b565b47101561350657601f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff16610100179055613514565b6135146134ad82600261488b565b505b61352285858584613b4c565b95945050505050565b60155460145460009190825b60095481101561368357826001600060098481548110613559576135596147a8565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806135c4575081600260006009848154811061359d5761359d6147a8565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156135e1576014546015546135d99190614850565b935050505090565b60016000600983815481106135f8576135f86147a8565b60009182526020808320909101546001600160a01b031683528201929092526040019020546136279084614806565b92506002600060098381548110613640576136406147a8565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461366f9083614806565b91508061367b8161481d565b915050613537565b506014546015546136949190614850565b8210156136b2576014546015546136ab9190614850565b9250505090565b6136ab8183614850565b600080546001600160a01b038481169116148015906136e957506000546001600160a01b03838116911614155b801561370e57506001600160a01b0382166000908152600c602052604090205460ff16155b801561373357506001600160a01b0383166000908152600c602052604090205460ff16155b801561374a57506001600160a01b03821661dead14155b801561375e57506001600160a01b03821615155b801561142b57506001600160a01b0383163014159392505050565b601a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905560125461ffff6601000000000000909104166137d35761399c565b3060009081526005602090815260408083206017546001600160a01b031684529091529020546000191461382c573060009081526005602090815260408083206017546001600160a01b03168452909152902060001990555b6017546040517f791ac94700000000000000000000000000000000000000000000000000000000815247916001600160a01b03169063791ac9479061387f908590600090601e9030904290600401614b65565b600060405180830381600087803b15801561389957600080fd5b505af11580156138ad573d6000803e3d6000fd5b50505050600081476138bf9190614806565b9050801561399957601a546012546001600160a01b03909116906108fc9061ffff660100000000000082048116916138f891168561488b565b6139029190614850565b6040518115909202916000818181858888f1935050505015801561392a573d6000803e3d6000fd5b506019546012546001600160a01b03909116906108fc9061ffff6601000000000000820481169161396591640100000000909104168561488b565b61396f9190614850565b6040518115909202916000818181858888f19350505050158015613997573d6000803e3d6000fd5b505b50505b50601a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b6040805160028082526060820183526000926020830190803683375050601754604080517fad5c464800000000000000000000000000000000000000000000000000000000815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015613a4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a6e91906149dc565b81600081518110613a8157613a816147a8565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110613ab557613ab56147a8565b6001600160a01b0392831660209182029290920101526017546040517fb6f9de9500000000000000000000000000000000000000000000000000000000815291169063b6f9de95908490613b1690600090869061dead904290600401614ba1565b6000604051808303818588803b158015613b2f57600080fd5b505af1158015613b43573d6000803e3d6000fd5b50505050505050565b602254600090610100900460ff16613bf857613b688585613efe565b602254610100900460ff16158015613b855750613b8585856136bc565b15613bf85760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610d02565b6000613c068686868661408d565b60808101516001600160a01b038816600090815260016020526040902054919250613c3091614806565b6001600160a01b0380881660009081526001602052604080822093909355606084015191881681529190912054613c679190614838565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526008909152205460ff168015613cbb57506001600160a01b03851660009081526008602052604090205460ff16155b15613d02576001600160a01b038616600090815260026020526040902054613ce4908590614806565b6001600160a01b038716600090815260026020526040902055613e42565b6001600160a01b03861660009081526008602052604090205460ff16158015613d4357506001600160a01b03851660009081526008602052604090205460ff165b15613d8b5780516001600160a01b038616600090815260026020526040902054613d6d9190614838565b6001600160a01b038616600090815260026020526040902055613e42565b6001600160a01b03861660009081526008602052604090205460ff168015613dcb57506001600160a01b03851660009081526008602052604090205460ff165b15613e42576001600160a01b038616600090815260026020526040902054613df4908590614806565b6001600160a01b0380881660009081526002602052604080822093909355835191881681529190912054613e289190614838565b6001600160a01b0386166000908152600260205260409020555b604081015115613e5a57613e5a8682604001516143fa565b60008160a001511180613e71575060008160200151115b15613e92578060a0015160156000828254613e8c9190614806565b90915550505b806020015160166000828254613ea89190614838565b909155505080516040519081526001600160a01b0386811691908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600195945050505050565b602254610100900460ff1615613f7c5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610d02565b613f8682826136bc565b158015613fa057506018546001600160a01b038281169116145b15610eb6576001600160a01b038083166000908152600c60205260409020805460ff191660011790556022805461ff00191661010017908190556201000090041661401557602280547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601a80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6140c66040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6140ff6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600061410961352b565b9050614115818661488b565b608083015261412487876136bc565b156141d7576022546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af19250505080156141c0575060408051601f3d908101601f191682019092526141bd918101906149f9565b60015b6141c957600080fd5b9050806141d557600080fd5b505b83156143a4576001600160a01b03861660009081526003602052604090205460ff161561424c57601054600e805461ffff80841663ffffffff1990921691909117620100008085048316021767ffff000000000000191666010000000000009384900491909116909202919091179055614305565b6001600160a01b03871660009081526003602052604090205460ff16156142bb57600f54600e805461ffff80841663ffffffff1990921691909117620100008085048316021767ffff000000000000191666010000000000009384900491909116909202919091179055614305565b601154600e805461ffff80841663ffffffff1990921691909117620100008085048316021767ffff0000000000001916660100000000000093849004919091169092029190911790555b600e546127109061431a9061ffff168761488b565b6143249190614850565b6020830152600e54612710906143509061ffff66010000000000008204811691620100009004166149b6565b61435e9061ffff168761488b565b6143689190614850565b60408301819052602083015161437e9190614838565b6143889086614806565b8252602082015161439a90829061488b565b60a08301526143bd565b6000602083018190526040830181905285835260a08301525b8082604001516143cd919061488b565b8260a001516143dc9190614838565b82608001516143eb9190614806565b60608301525095945050505050565b61440261352b565b61440c908261488b565b306000908152600160205260409020546144269190614838565b3060009081526001602090815260408083209390935560089052205460ff16156144765730600090815260026020526040902054614465908290614838565b306000908152600260205260409020555b60405181815230906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b8015158114612d5857600080fd5b600080604083850312156144db57600080fd5b82356144e6816144ba565b915060208301356144f6816144ba565b809150509250929050565b600060208083528351808285015260005b8181101561452e57858101830151858201604001528201614512565b81811115614540576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612d5857600080fd5b6000806040838503121561457e57600080fd5b823561458981614556565b946020939093013593505050565b600080604083850312156145aa57600080fd5b82356145b581614556565b915060208301356144f681614556565b600080604083850312156145d857600080fd5b82356144e681614556565b6000806000606084860312156145f857600080fd5b833561460381614556565b9250602084013561461381614556565b929592945050506040919091013590565b60006020828403121561463657600080fd5b5035919050565b60006020828403121561464f57600080fd5b813561142b81614556565b6000806040838503121561466d57600080fd5b50508035926020909101359150565b60006020828403121561468e57600080fd5b813561142b816144ba565b803561ffff811681146146ab57600080fd5b919050565b6000806000606084860312156146c557600080fd5b6146ce84614699565b92506146dc60208501614699565b91506146ea60408501614699565b90509250925092565b6000806000806080858703121561470957600080fd5b61471285614699565b935061472060208601614699565b925061472e60408601614699565b915061473c60608601614699565b905092959194509250565b6000806000806080858703121561475d57600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015614818576148186147d7565b500390565b6000600019821415614831576148316147d7565b5060010190565b6000821982111561484b5761484b6147d7565b500190565b600082614886577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008160001904831182151516156148a5576148a56147d7565b500290565b6000602082840312156148bc57600080fd5b5051919050565b600181815b808511156148fe5781600019048211156148e4576148e46147d7565b808516156148f157918102915b93841c93908002906148c8565b509250929050565b60008261491557506001610da6565b8161492257506000610da6565b816001811461493857600281146149425761495e565b6001915050610da6565b60ff841115614953576149536147d7565b50506001821b610da6565b5060208310610133831016604e8410600b8410161715614981575081810a610da6565b61498b83836148c3565b806000190482111561499f5761499f6147d7565b029392505050565b600061142b60ff841683614906565b600061ffff8083168185168083038211156149d3576149d36147d7565b01949350505050565b6000602082840312156149ee57600080fd5b815161142b81614556565b600060208284031215614a0b57600080fd5b815161142b816144ba565b6000815480845260208085019450836000528060002060005b83811015614a545781546001600160a01b031687529582019560019182019101614a2f565b509495945050505050565b8281526040602082015260006113606040830184614a16565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020808385031215614aba57600080fd5b825167ffffffffffffffff80821115614ad257600080fd5b818501915085601f830112614ae657600080fd5b815181811115614af857614af8614a78565b8060051b604051601f19603f83011681018181108582111715614b1d57614b1d614a78565b604052918252848201925083810185019188831115614b3b57600080fd5b938501935b82851015614b5957845184529385019392850192614b40565b98975050505050505050565b85815284602082015260a060408201526000614b8460a0830186614a16565b6001600160a01b0394909416606083015250608001529392505050565b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015614beb5784516001600160a01b031683529383019391830191600101614bc6565b50506001600160a01b03969096166040850152505050606001529291505056fea2646970667358221220764a538ad44aae5cb7c8158ebb276bd328ded3edfbf26859dccb3f737bdb6a8764736f6c634300080c0033

Deployed Bytecode

0x6080604052600436106103bc5760003560e01c806370a08231116101f2578063aa5454731161010d578063d29eedcc116100a0578063ee5d9c2d1161006f578063ee5d9c2d14610c30578063fb78680d14610c45578063fdb78c0e14610c65578063fe575a8714610c9857600080fd5b8063d29eedcc14610b94578063d3f6a15714610baa578063dd62ed3e14610bca578063eafb5a3c14610c1057600080fd5b8063c6831cd8116100dc578063c6831cd814610ada578063c6a276c214610b17578063cab5ebea14610b37578063cf84770614610b5757600080fd5b8063aa54547314610a3d578063bc77169d14610a5d578063becdf13f14610a7d578063c2fa418f14610a9d57600080fd5b80638a63bd9b116101855780639a9b567d116101545780639a9b567d146109bd578063a457c2d7146109dd578063a9059cbb146109fd578063aa22b17214610a1d57600080fd5b80638a63bd9b1461094d5780638a8c523c146109625780638da5cb5b1461092f57806395d89b411461097757600080fd5b806380c581d1116101c157806380c581d1146108b657806381b46f2e146108d657806388f82020146108f6578063893d20e81461092f57600080fd5b806370a08231146107f6578063715018a614610816578063798087321461082b5780637b45d4311461084b57600080fd5b806336fddb04116102e257806350a8e016116102755780635cce86cd116102445780635cce86cd14610772578063612c0321146107ab57806365707565146107cb5780636ebd0078146107e157600080fd5b806350a8e016146106fe57806355dbc3691461071d578063590ffdce146107325780635c24b0741461075257600080fd5b806349653eb7116102b157806349653eb71461066b5780634ada218b1461068b5780634fb2e45d146106a55780634fbee193146106c557600080fd5b806336fddb04146105eb578063395093511461060b5780633f3cf56c1461062b578063452ed4f11461064b57600080fd5b806314c9874b1161035a5780632b112e49116103295780632b112e49146105745780632d83811914610589578063313ce567146105a957806333251a0b146105cb57600080fd5b806314c9874b146104fc578063160d0da51461051b57806318160ddd1461053557806323b872dd1461055457600080fd5b80630758d924116103965780630758d9241461046c578063095ea7b31461048c57806313b4a7f4146104bc57806313e46192146104dc57600080fd5b806303fd2a45146103c8578063044df726146103fb57806306fdde031461041d57600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103de61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040757600080fd5b5061041b6104163660046144c8565b610cb8565b005b34801561042957600080fd5b5060408051808201909152600981527f42422047616d696e67000000000000000000000000000000000000000000000060208201525b6040516103f29190614501565b34801561047857600080fd5b506017546103de906001600160a01b031681565b34801561049857600080fd5b506104ac6104a736600461456b565b610d95565b60405190151581526020016103f2565b3480156104c857600080fd5b5061041b6104d7366004614597565b610dac565b3480156104e857600080fd5b5061041b6104f73660046145c5565b610f36565b34801561050857600080fd5b50601f546104ac90610100900460ff1681565b34801561052757600080fd5b50601f546104ac9060ff1681565b34801561054157600080fd5b506014545b6040519081526020016103f2565b34801561056057600080fd5b506104ac61056f3660046145e3565b6112f0565b34801561058057600080fd5b50610546611368565b34801561059557600080fd5b506105466105a4366004614624565b61139b565b3480156105b557600080fd5b5060135460405160ff90911681526020016103f2565b3480156105d757600080fd5b5061041b6105e636600461463d565b611432565b3480156105f757600080fd5b5061041b6106063660046145c5565b611503565b34801561061757600080fd5b506104ac61062636600461456b565b61157c565b34801561063757600080fd5b5061041b61064636600461465a565b6115b8565b34801561065757600080fd5b506018546103de906001600160a01b031681565b34801561067757600080fd5b5061041b61068636600461467c565b6116c3565b34801561069757600080fd5b506022546104ac9060ff1681565b3480156106b157600080fd5b5061041b6106c036600461463d565b61175b565b3480156106d157600080fd5b506104ac6106e036600461463d565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561070a57600080fd5b506022546104ac90610100900460ff1681565b34801561072957600080fd5b506105466119a1565b34801561073e57600080fd5b5061041b61074d3660046145c5565b611a1a565b34801561075e57600080fd5b5061041b61076d36600461463d565b611a93565b34801561077e57600080fd5b506104ac61078d36600461463d565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156107b757600080fd5b50601f546104ac9062010000900460ff1681565b3480156107d757600080fd5b5061054660215481565b3480156107ed57600080fd5b50610546611bd2565b34801561080257600080fd5b5061054661081136600461463d565b611bf3565b34801561082257600080fd5b5061041b611c52565b34801561083757600080fd5b5061041b61084636600461465a565b611d02565b34801561085757600080fd5b50600f546108889061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103f2565b3480156108c257600080fd5b5061041b6108d13660046145c5565b611d5b565b3480156108e257600080fd5b5061041b6108f136600461467c565b611f17565b34801561090257600080fd5b506104ac61091136600461463d565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561093b57600080fd5b506000546001600160a01b03166103de565b34801561095957600080fd5b506104ac611fae565b34801561096e57600080fd5b5061041b61201d565b34801561098357600080fd5b5060408051808201909152600281527f4242000000000000000000000000000000000000000000000000000000000000602082015261045f565b3480156109c957600080fd5b5061041b6109d836600461467c565b61222f565b3480156109e957600080fd5b506104ac6109f836600461456b565b612290565b348015610a0957600080fd5b506104ac610a1836600461456b565b6122c7565b348015610a2957600080fd5b5061041b610a383660046146b0565b6122de565b348015610a4957600080fd5b5061041b610a583660046146f3565b6123a6565b348015610a6957600080fd5b5061041b610a783660046146f3565b6124b3565b348015610a8957600080fd5b5061041b610a983660046146f3565b6125c0565b348015610aa957600080fd5b506011546108889061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610ae657600080fd5b506010546108889061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610b2357600080fd5b5061041b610b3236600461463d565b6126cd565b348015610b4357600080fd5b5061041b610b5236600461467c565b61276d565b348015610b6357600080fd5b506012546108889061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610ba057600080fd5b5061054660205481565b348015610bb657600080fd5b5061041b610bc5366004614597565b612840565b348015610bd657600080fd5b50610546610be5366004614597565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610c1c57600080fd5b5061041b610c2b36600461463d565b6128c9565b348015610c3c57600080fd5b5061041b612c78565b348015610c5157600080fd5b5061041b610c60366004614747565b612d5b565b348015610c7157600080fd5b50601a546104ac907501000000000000000000000000000000000000000000900460ff1681565b348015610ca457600080fd5b506104ac610cb336600461463d565b612de8565b6000546001600160a01b03163314610d0b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6022546040517fefbdbabd00000000000000000000000000000000000000000000000000000000815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610d7957600080fd5b505af1158015610d8d573d6000803e3d6000fd5b505050505050565b6000610da2338484612e76565b5060015b92915050565b6000546001600160a01b03163314610dfa5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b600b5460ff16610e4c5760405162461bcd60e51b815260206004820152601660248201527f46756e6374696f6e20616c726561647920757365642e000000000000000000006044820152606401610d02565b806001600160a01b0316826001600160a01b03161415610eba576001600160a01b0381166000908152600c602090815260408083208054600160ff199182168117909255600a9093529220805490911682179055610eab908290611a1a565b610eb6816001610f36565b5050565b6001600160a01b038281166000818152600c602090815260408083208054600160ff1991821681179092559587168085528285208054881683179055948452600a909252808320805486168317905592825291902080549092168117909155610f24908390611a1a565b610f2f816001611a1a565b610eab8260015b6000546001600160a01b03163314610f845760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b600181151514156110c6576001600160a01b03821660009081526008602052604090205460ff1615610ff85760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610d02565b6001600160a01b03821660009081526001602052604090205415611052576001600160a01b0382166000908152600160205260409020546110389061139b565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01805473ffffffffffffffffffffffffffffffffffffffff19169091179055565b80610eb6576001600160a01b03821660009081526008602052604090205460ff166111335760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610d02565b600954600114156111af576001600160a01b038216600090815260026020908152604080832083905560089091529020805460ff19169055600980548061117c5761117c614779565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b6009548110156112eb57826001600160a01b0316600982815481106111d9576111d96147a8565b6000918252602090912001546001600160a01b031614156112d9576009805461120490600190614806565b81548110611214576112146147a8565b600091825260209091200154600980546001600160a01b039092169183908110611240576112406147a8565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600282526040808220829055600890925220805460ff1916905560098054806112a5576112a5614779565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b806112e38161481d565b9150506111b2565b505050565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001914611355576001600160a01b03841660009081526005602090815260408083203384529091528120805484929061134f908490614806565b90915550505b611360848484612f83565b949350505050565b60006113746000611bf3565b61137f61dead611bf3565b6113899190614838565b6014546113969190614806565b905090565b60006015548211156114155760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610d02565b600061141f61352b565b905061142b8184614850565b9392505050565b6000546001600160a01b031633146114805760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b6022546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b906024015b600060405180830381600087803b1580156114e857600080fd5b505af11580156114fc573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146115515760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610da29185906115b3908690614838565b612e76565b6000546001600160a01b031633146116065760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b6103e86014546116169190614850565b8183601454611625919061488b565b61162f9190614850565b10156116a35760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610d02565b80826014546116b2919061488b565b6116bc9190614850565b601d555050565b6000546001600160a01b031633146117115760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b801561172357601f805461ff00191690555b601f805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b6000546001600160a01b031633146117a95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b6001600160a01b0381166118255760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d02565b6001600160a01b03811661dead14156118a65760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d02565b600080546118bf916001600160a01b0390911690611a1a565b6118ca816001611a1a565b6000546019546001600160a01b039081169116141561190c576019805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b60008054611922906001600160a01b0316611bf3565b111561194957600054611947906001600160a01b03168261194282611bf3565b612f83565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000602260029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139691906148aa565b6000546001600160a01b03163314611a685760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611ae15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b602254610100900460ff1615611b395760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610d02565b6001600160a01b038116301415611b925760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610d02565b602280546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b601354600090611be69060ff16600a6149a7565b601d546113969190614850565b6001600160a01b03811660009081526008602052604081205460ff1615611c3057506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610da69061139b565b6000546001600160a01b03163314611ca05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b60008054611cb9916001600160a01b0390911690611a1a565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611d505760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b602091909155602155565b6000546001600160a01b03163314611da95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b80611e35576001600160a01b03828116600081815260036020526040808220805460ff1916905560225490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610d7957600080fd5b60045415611e9c576203f48060045442611e4f9190614806565b11611e9c5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610d02565b6001600160a01b0382811660008181526003602052604090819020805460ff1916600190811790915542600490815560225492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610d5f565b6000546001600160a01b03163314611f655760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b8015611f9457601f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1690555b601f80549115156101000261ff0019909216919091179055565b600080546001600160a01b03163314611ffd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b6017546120179030906001600160a01b0316600019612e76565b50600190565b6000546001600160a01b0316331461206b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b60225460ff16156120be5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d02565b602254610100900460ff166121155760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d02565b612120306001610f36565b601854612137906001600160a01b03166001610f36565b6022546201000090046001600160a01b031661217d57602280547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6022546018546013546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561220e57600080fd5b505af192505050801561221f575060015b506022805460ff19166001179055565b6000546001600160a01b0316331461227d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b601f805460ff1916911515919091179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610da29185906115b3908690614806565b60006122d4338484612f83565b5060019392505050565b6000546001600160a01b0316331461232c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b6012805461ffff8381166401000000000265ffff0000000019868316620100000263ffffffff199094169288169290921792909217161790558061237083856149b6565b61237a91906149b6565b6012805461ffff9290921666010000000000000267ffff00000000000019909216919091179055505050565b6000546001600160a01b031633146123f45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b610bb8818561240385876149b6565b61240d91906149b6565b61241791906149b6565b61ffff16111561242657600080fd5b6011805461ffff9283166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff00009484166401000000000265ffff00000000199685166201000002969096167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffff909216919091179490941792909216931692909217179055565b6000546001600160a01b031633146125015760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b610bb8818561251085876149b6565b61251a91906149b6565b61252491906149b6565b61ffff16111561253357600080fd5b600f805461ffff9283166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff00009484166401000000000265ffff00000000199685166201000002969096167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffff909216919091179490941792909216931692909217179055565b6000546001600160a01b0316331461260e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b610bb8818561261d85876149b6565b61262791906149b6565b61263191906149b6565b61ffff16111561264057600080fd5b6010805461ffff9283166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff00009484166401000000000265ffff00000000199685166201000002969096167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffff909216919091179490941792909216931692909217179055565b6000546001600160a01b0316331461271b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b6022546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c2906024016114ce565b6000546001600160a01b031633146127bb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b601a80548215157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579061283590831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461288e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b601980546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff1991821617909155601a8054929093169116179055565b6000546001600160a01b031633146129175760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561295c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298091906149dc565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f191906149dc565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a7891906149dc565b90506001600160a01b038116612c1657816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ac6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aea91906149dc565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b5b91906149dc565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612bc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be491906149dc565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612c3f565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556112eb903090600019612e76565b6000546001600160a01b03163314612cc65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b602254610100900460ff1615612d1e5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d02565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015612d58573d6000803e3d6000fd5b50565b6000546001600160a01b03163314612da95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d02565b8284601454612db8919061488b565b612dc29190614850565b601b556014548190612dd590849061488b565b612ddf9190614850565b601c5550505050565b6022546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015612e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da691906149f9565b6001600160a01b038316612ecc5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d02565b6001600160a01b038216612f225760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d02565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166130015760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610d02565b6001600160a01b03831661307d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610d02565b600082116130f35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610d02565b6130fd84846136bc565b156132575760225460ff166131545760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d02565b6001600160a01b03841660009081526003602052604090205460ff168061319357506001600160a01b03831660009081526003602052604090205460ff165b15613257576001600160a01b03841660009081526007602052604090205460ff161580156131da57506001600160a01b03831660009081526007602052604090205460ff16155b1561325757601d548211156132575760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610d02565b6001600160a01b03841660009081526006602052604090205460019060ff168061329957506001600160a01b03841660009081526006602052604090205460ff165b156132a2575060005b6001600160a01b03841660009081526003602052604090205460ff161561351657601a5474010000000000000000000000000000000000000000900460ff161580156133095750601a547501000000000000000000000000000000000000000000900460ff165b801561332e57506001600160a01b0384166000908152600a602052604090205460ff16155b801561335357506001600160a01b0385166000908152600a602052604090205460ff16155b1561338757600061336330611bf3565b9050601b54811061338557601c54811061337c5750601c545b61338581613779565b505b601f5460ff1680156133a257506001600160a01b0385163014155b15613516576017546040517fd06ca61f0000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063d06ca61f906133f4908790601e90600401614a5f565b600060405180830381865afa158015613411573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526134399190810190614aa7565b60018151811061344b5761344b6147a8565b60200260200101519050601f60019054906101000a900460ff16801561348a5750476021546020548361347e919061488b565b6134889190614850565b105b156134b2576134b2602154602054836134a3919061488b565b6134ad9190614850565b6139c7565b601f5462010000900460ff1615613514576134ce81600261488b565b47101561350657601f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff16610100179055613514565b6135146134ad82600261488b565b505b61352285858584613b4c565b95945050505050565b60155460145460009190825b60095481101561368357826001600060098481548110613559576135596147a8565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806135c4575081600260006009848154811061359d5761359d6147a8565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156135e1576014546015546135d99190614850565b935050505090565b60016000600983815481106135f8576135f86147a8565b60009182526020808320909101546001600160a01b031683528201929092526040019020546136279084614806565b92506002600060098381548110613640576136406147a8565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461366f9083614806565b91508061367b8161481d565b915050613537565b506014546015546136949190614850565b8210156136b2576014546015546136ab9190614850565b9250505090565b6136ab8183614850565b600080546001600160a01b038481169116148015906136e957506000546001600160a01b03838116911614155b801561370e57506001600160a01b0382166000908152600c602052604090205460ff16155b801561373357506001600160a01b0383166000908152600c602052604090205460ff16155b801561374a57506001600160a01b03821661dead14155b801561375e57506001600160a01b03821615155b801561142b57506001600160a01b0383163014159392505050565b601a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905560125461ffff6601000000000000909104166137d35761399c565b3060009081526005602090815260408083206017546001600160a01b031684529091529020546000191461382c573060009081526005602090815260408083206017546001600160a01b03168452909152902060001990555b6017546040517f791ac94700000000000000000000000000000000000000000000000000000000815247916001600160a01b03169063791ac9479061387f908590600090601e9030904290600401614b65565b600060405180830381600087803b15801561389957600080fd5b505af11580156138ad573d6000803e3d6000fd5b50505050600081476138bf9190614806565b9050801561399957601a546012546001600160a01b03909116906108fc9061ffff660100000000000082048116916138f891168561488b565b6139029190614850565b6040518115909202916000818181858888f1935050505015801561392a573d6000803e3d6000fd5b506019546012546001600160a01b03909116906108fc9061ffff6601000000000000820481169161396591640100000000909104168561488b565b61396f9190614850565b6040518115909202916000818181858888f19350505050158015613997573d6000803e3d6000fd5b505b50505b50601a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b6040805160028082526060820183526000926020830190803683375050601754604080517fad5c464800000000000000000000000000000000000000000000000000000000815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015613a4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a6e91906149dc565b81600081518110613a8157613a816147a8565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110613ab557613ab56147a8565b6001600160a01b0392831660209182029290920101526017546040517fb6f9de9500000000000000000000000000000000000000000000000000000000815291169063b6f9de95908490613b1690600090869061dead904290600401614ba1565b6000604051808303818588803b158015613b2f57600080fd5b505af1158015613b43573d6000803e3d6000fd5b50505050505050565b602254600090610100900460ff16613bf857613b688585613efe565b602254610100900460ff16158015613b855750613b8585856136bc565b15613bf85760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610d02565b6000613c068686868661408d565b60808101516001600160a01b038816600090815260016020526040902054919250613c3091614806565b6001600160a01b0380881660009081526001602052604080822093909355606084015191881681529190912054613c679190614838565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526008909152205460ff168015613cbb57506001600160a01b03851660009081526008602052604090205460ff16155b15613d02576001600160a01b038616600090815260026020526040902054613ce4908590614806565b6001600160a01b038716600090815260026020526040902055613e42565b6001600160a01b03861660009081526008602052604090205460ff16158015613d4357506001600160a01b03851660009081526008602052604090205460ff165b15613d8b5780516001600160a01b038616600090815260026020526040902054613d6d9190614838565b6001600160a01b038616600090815260026020526040902055613e42565b6001600160a01b03861660009081526008602052604090205460ff168015613dcb57506001600160a01b03851660009081526008602052604090205460ff165b15613e42576001600160a01b038616600090815260026020526040902054613df4908590614806565b6001600160a01b0380881660009081526002602052604080822093909355835191881681529190912054613e289190614838565b6001600160a01b0386166000908152600260205260409020555b604081015115613e5a57613e5a8682604001516143fa565b60008160a001511180613e71575060008160200151115b15613e92578060a0015160156000828254613e8c9190614806565b90915550505b806020015160166000828254613ea89190614838565b909155505080516040519081526001600160a01b0386811691908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600195945050505050565b602254610100900460ff1615613f7c5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610d02565b613f8682826136bc565b158015613fa057506018546001600160a01b038281169116145b15610eb6576001600160a01b038083166000908152600c60205260409020805460ff191660011790556022805461ff00191661010017908190556201000090041661401557602280547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601a80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6140c66040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6140ff6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600061410961352b565b9050614115818661488b565b608083015261412487876136bc565b156141d7576022546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af19250505080156141c0575060408051601f3d908101601f191682019092526141bd918101906149f9565b60015b6141c957600080fd5b9050806141d557600080fd5b505b83156143a4576001600160a01b03861660009081526003602052604090205460ff161561424c57601054600e805461ffff80841663ffffffff1990921691909117620100008085048316021767ffff000000000000191666010000000000009384900491909116909202919091179055614305565b6001600160a01b03871660009081526003602052604090205460ff16156142bb57600f54600e805461ffff80841663ffffffff1990921691909117620100008085048316021767ffff000000000000191666010000000000009384900491909116909202919091179055614305565b601154600e805461ffff80841663ffffffff1990921691909117620100008085048316021767ffff0000000000001916660100000000000093849004919091169092029190911790555b600e546127109061431a9061ffff168761488b565b6143249190614850565b6020830152600e54612710906143509061ffff66010000000000008204811691620100009004166149b6565b61435e9061ffff168761488b565b6143689190614850565b60408301819052602083015161437e9190614838565b6143889086614806565b8252602082015161439a90829061488b565b60a08301526143bd565b6000602083018190526040830181905285835260a08301525b8082604001516143cd919061488b565b8260a001516143dc9190614838565b82608001516143eb9190614806565b60608301525095945050505050565b61440261352b565b61440c908261488b565b306000908152600160205260409020546144269190614838565b3060009081526001602090815260408083209390935560089052205460ff16156144765730600090815260026020526040902054614465908290614838565b306000908152600260205260409020555b60405181815230906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b8015158114612d5857600080fd5b600080604083850312156144db57600080fd5b82356144e6816144ba565b915060208301356144f6816144ba565b809150509250929050565b600060208083528351808285015260005b8181101561452e57858101830151858201604001528201614512565b81811115614540576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612d5857600080fd5b6000806040838503121561457e57600080fd5b823561458981614556565b946020939093013593505050565b600080604083850312156145aa57600080fd5b82356145b581614556565b915060208301356144f681614556565b600080604083850312156145d857600080fd5b82356144e681614556565b6000806000606084860312156145f857600080fd5b833561460381614556565b9250602084013561461381614556565b929592945050506040919091013590565b60006020828403121561463657600080fd5b5035919050565b60006020828403121561464f57600080fd5b813561142b81614556565b6000806040838503121561466d57600080fd5b50508035926020909101359150565b60006020828403121561468e57600080fd5b813561142b816144ba565b803561ffff811681146146ab57600080fd5b919050565b6000806000606084860312156146c557600080fd5b6146ce84614699565b92506146dc60208501614699565b91506146ea60408501614699565b90509250925092565b6000806000806080858703121561470957600080fd5b61471285614699565b935061472060208601614699565b925061472e60408601614699565b915061473c60608601614699565b905092959194509250565b6000806000806080858703121561475d57600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015614818576148186147d7565b500390565b6000600019821415614831576148316147d7565b5060010190565b6000821982111561484b5761484b6147d7565b500190565b600082614886577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008160001904831182151516156148a5576148a56147d7565b500290565b6000602082840312156148bc57600080fd5b5051919050565b600181815b808511156148fe5781600019048211156148e4576148e46147d7565b808516156148f157918102915b93841c93908002906148c8565b509250929050565b60008261491557506001610da6565b8161492257506000610da6565b816001811461493857600281146149425761495e565b6001915050610da6565b60ff841115614953576149536147d7565b50506001821b610da6565b5060208310610133831016604e8410600b8410161715614981575081810a610da6565b61498b83836148c3565b806000190482111561499f5761499f6147d7565b029392505050565b600061142b60ff841683614906565b600061ffff8083168185168083038211156149d3576149d36147d7565b01949350505050565b6000602082840312156149ee57600080fd5b815161142b81614556565b600060208284031215614a0b57600080fd5b815161142b816144ba565b6000815480845260208085019450836000528060002060005b83811015614a545781546001600160a01b031687529582019560019182019101614a2f565b509495945050505050565b8281526040602082015260006113606040830184614a16565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020808385031215614aba57600080fd5b825167ffffffffffffffff80821115614ad257600080fd5b818501915085601f830112614ae657600080fd5b815181811115614af857614af8614a78565b8060051b604051601f19603f83011681018181108582111715614b1d57614b1d614a78565b604052918252848201925083810185019188831115614b3b57600080fd5b938501935b82851015614b5957845184529385019392850192614b40565b98975050505050505050565b85815284602082015260a060408201526000614b8460a0830186614a16565b6001600160a01b0394909416606083015250608001529392505050565b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015614beb5784516001600160a01b031683529383019391830191600101614bc6565b50506001600160a01b03969096166040850152505050606001529291505056fea2646970667358221220764a538ad44aae5cb7c8158ebb276bd328ded3edfbf26859dccb3f737bdb6a8764736f6c634300080c0033

Deployed Bytecode Sourcemap

9396:26912:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12042:73;;;;;;;;;;;;12073:42;12042:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;12042:73:0;;;;;;;;22211:151;;;;;;;;;;-1:-1:-1;22211:151:0;;;;;:::i;:::-;;:::i;:::-;;16542:80;;;;;;;;;;-1:-1:-1;16614:5:0;;;;;;;;;;;;;;;;;16542:80;;;;;;;:::i;11877:35::-;;;;;;;;;;-1:-1:-1;11877:35:0;;;;-1:-1:-1;;;;;11877:35:0;;;17234:159;;;;;;;;;;-1:-1:-1;17234:159:0;;;;;:::i;:::-;;:::i;:::-;;;2311:14:1;;2304:22;2286:41;;2274:2;2259:18;17234:159:0;2146:187:1;25811:806:0;;;;;;;;;;-1:-1:-1;25811:806:0;;;;;:::i;:::-;;:::i;20319:1139::-;;;;;;;;;;-1:-1:-1;20319:1139:0;;;;;:::i;:::-;;:::i;12631:30::-;;;;;;;;;;-1:-1:-1;12631:30:0;;;;;;;;;;;12598:26;;;;;;;;;;-1:-1:-1;12598:26:0;;;;;;;;16277:83;;;;;;;;;;-1:-1:-1;16350:7:0;;16277:83;;;3264:25:1;;;3252:2;3237:18;16277:83:0;3118:177:1;17899:306:0;;;;;;;;;;-1:-1:-1;17899:306:0;;;;;:::i;:::-;;:::i;19767:141::-;;;;;;;;;;;;;:::i;26956:250::-;;;;;;;;;;-1:-1:-1;26956:250:0;;;;;:::i;:::-;;:::i;16366:80::-;;;;;;;;;;-1:-1:-1;16434:9:0;;16366:80;;16434:9;;;;4088:36:1;;4076:2;4061:18;16366:80:0;3946:184:1;21722:108:0;;;;;;;;;;-1:-1:-1;21722:108:0;;;;;:::i;:::-;;:::i;25525:140::-;;;;;;;;;;-1:-1:-1;25525:140:0;;;;;:::i;:::-;;:::i;18213:211::-;;;;;;;;;;-1:-1:-1;18213:211:0;;;;;:::i;:::-;;:::i;25134:269::-;;;;;;;;;;-1:-1:-1;25134:269:0;;;;;:::i;:::-;;:::i;11919:21::-;;;;;;;;;;-1:-1:-1;11919:21:0;;;;-1:-1:-1;;;;;11919:21:0;;;24574:181;;;;;;;;;;-1:-1:-1;24574:181:0;;;;;:::i;:::-;;:::i;12795:34::-;;;;;;;;;;-1:-1:-1;12795:34:0;;;;;;;;15020:701;;;;;;;;;;-1:-1:-1;15020:701:0;;;;;:::i;:::-;;:::i;19916:125::-;;;;;;;;;;-1:-1:-1;19916:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;20005:28:0;19981:4;20005:28;;;:19;:28;;;;;;;;;19916:125;12836:36;;;;;;;;;;-1:-1:-1;12836:36:0;;;;;;;;;;;22099:104;;;;;;;;;;;;;:::i;20049:134::-;;;;;;;;;;-1:-1:-1;20049:134:0;;;;;:::i;:::-;;:::i;21466:248::-;;;;;;;;;;-1:-1:-1;21466:248:0;;;;;:::i;:::-;;:::i;25673:130::-;;;;;;;;;;-1:-1:-1;25673:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;25765:30:0;25741:4;25765:30;;;:21;:30;;;;;;;;;25673:130;12668:27;;;;;;;;;;-1:-1:-1;12668:27:0;;;;;;;;;;;12747:39;;;;;;;;;;;;;;;;25411:106;;;;;;;;;;;;;:::i;16855:198::-;;;;;;;;;;-1:-1:-1;16855:198:0;;;;;:::i;:::-;;:::i;15729:195::-;;;;;;;;;;;;;:::i;24955:171::-;;;;;;;;;;-1:-1:-1;24955:171:0;;;;;:::i;:::-;;:::i;10961:150::-;;;;;;;;;;-1:-1:-1;10961:150:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5119:6:1;5152:15;;;5134:34;;5204:15;;;5199:2;5184:18;;5177:43;5256:15;;;5236:18;;;5229:43;;;;5308:15;;;5303:2;5288:18;;5281:43;5096:3;5081:19;10961:150:0;4886:444:1;19243:516:0;;;;;;;;;;-1:-1:-1;19243:516:0;;;;;:::i;:::-;;:::i;24763:184::-;;;;;;;;;;-1:-1:-1;24763:184:0;;;;;:::i;:::-;;:::i;20191:120::-;;;;;;;;;;-1:-1:-1;20191:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;20283:20:0;20259:4;20283:20;;;:11;:20;;;;;;;;;20191:120;16628:80;;;;;;;;;;-1:-1:-1;16680:7:0;14998:6;-1:-1:-1;;;;;14998:6:0;16628:80;19767:141;17718:173;;;;;;;;;;;;;:::i;31258:528::-;;;;;;;;;;;;;:::i;16452:84::-;;;;;;;;;;-1:-1:-1;16526:7:0;;;;;;;;;;;;;;;;;16452:84;;24463:103;;;;;;;;;;-1:-1:-1;24463:103:0;;;;;:::i;:::-;;:::i;18432:221::-;;;;;;;;;;-1:-1:-1;18432:221:0;;;;;:::i;:::-;;:::i;17061:165::-;;;;;;;;;;-1:-1:-1;17061:165:0;;;;;:::i;:::-;;:::i;23495:284::-;;;;;;;;;;-1:-1:-1;23495:284:0;;;;;:::i;:::-;;:::i;23105:382::-;;;;;;;;;;-1:-1:-1;23105:382:0;;;;;:::i;:::-;;:::i;22370:357::-;;;;;;;;;;-1:-1:-1;22370:357:0;;;;;:::i;:::-;;:::i;22735:362::-;;;;;;;;;;-1:-1:-1;22735:362:0;;;;;:::i;:::-;;:::i;11282:155::-;;;;;;;;;;-1:-1:-1;11282:155:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11120:153;;;;;;;;;;-1:-1:-1;11120:153:0;;;;;;;;;;;;;;;;;;;;;;;;;;;21973:118;;;;;;;;;;-1:-1:-1;21973:118:0;;;;;:::i;:::-;;:::i;24286:165::-;;;;;;;;;;-1:-1:-1;24286:165:0;;;;;:::i;:::-;;:::i;11446:134::-;;;;;;;;;;-1:-1:-1;11446:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;12702:38;;;;;;;;;;;;;;;;24084:194;;;;;;;;;;-1:-1:-1;24084:194:0;;;;;:::i;:::-;;:::i;16714:133::-;;;;;;;;;;-1:-1:-1;16714:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;16816:19:0;;;16798:7;16816:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;16714:133;18661:574;;;;;;;;;;-1:-1:-1;18661:574:0;;;;;:::i;:::-;;:::i;31794:183::-;;;;;;;;;;;;;:::i;23787:289::-;;;;;;;;;;-1:-1:-1;23787:289:0;;;;;:::i;:::-;;:::i;12347:39::-;;;;;;;;;;-1:-1:-1;12347:39:0;;;;;;;;;;;21840:125;;;;;;;;;;-1:-1:-1;21840:125:0;;;;;:::i;:::-;;:::i;22211:151::-;13443:6;;-1:-1:-1;;;;;13443:6:0;13453:10;13443:20;13435:50;;;;-1:-1:-1;;;13435:50:0;;7239:2:1;13435:50:0;;;7221:21:1;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:47;7354:18;;13435:50:0;;;;;;;;;22306:9:::1;::::0;:48:::1;::::0;;;;7570:14:1;;7563:22;22306:48:0::1;::::0;::::1;7545:41:1::0;7629:14;;7622:22;7602:18;;;7595:50;22306:9:0;;;::::1;-1:-1:-1::0;;;;;22306:9:0::1;::::0;:24:::1;::::0;7518:18:1;;22306:48:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22211:151:::0;;:::o;17234:159::-;17309:4;17326:37;17335:10;17347:7;17356:6;17326:8;:37::i;:::-;-1:-1:-1;17381:4:0;17234:159;;;;;:::o;25811:806::-;13443:6;;-1:-1:-1;;;;;13443:6:0;13453:10;13443:20;13435:50;;;;-1:-1:-1;;;13435:50:0;;7239:2:1;13435:50:0;;;7221:21:1;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:47;7354:18;;13435:50:0;7037:341:1;13435:50:0;25915:23:::1;::::0;::::1;;25907:58;;;::::0;-1:-1:-1;;;25907:58:0;;7858:2:1;25907:58:0::1;::::0;::::1;7840:21:1::0;7897:2;7877:18;;;7870:30;7936:24;7916:18;;;7909:52;7978:18;;25907:58:0::1;7656:346:1::0;25907:58:0::1;25990:7;-1:-1:-1::0;;;;;25980:17:0::1;:6;-1:-1:-1::0;;;;;25980:17:0::1;;25976:634;;;-1:-1:-1::0;;;;;26014:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;:33;;26043:4:::1;-1:-1:-1::0;;26014:33:0;;::::1;::::0;::::1;::::0;;;26062:16:::1;:25:::0;;;;;:32;;;;::::1;::::0;::::1;::::0;;26109:34:::1;::::0;26014:26;;26109:19:::1;:34::i;:::-;26158:36;26180:7;26189:4;26158:21;:36::i;:::-;25811:806:::0;;:::o;25976:634::-:1;-1:-1:-1::0;;;;;26227:25:0;;::::1;;::::0;;;:17:::1;:25;::::0;;;;;;;:32;;26255:4:::1;-1:-1:-1::0;;26227:32:0;;::::1;::::0;::::1;::::0;;;26274:26;;::::1;::::0;;;;;;:33;;;::::1;::::0;::::1;::::0;;26322:24;;;:16:::1;:24:::0;;;;;;:31;;;::::1;::::0;::::1;::::0;;26368:25;;;;;;:32;;;;::::1;::::0;::::1;::::0;;;26415:33:::1;::::0;26227:25;;26415:19:::1;:33::i;:::-;26463:34;26483:7;26492:4;26463:19;:34::i;:::-;26512:35;26534:6;26542:4;20319:1139:::0;13443:6;;-1:-1:-1;;;;;13443:6:0;13453:10;13443:20;13435:50;;;;-1:-1:-1;;;13435:50:0;;7239:2:1;13435:50:0;;;7221:21:1;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:47;7354:18;;13435:50:0;7037:341:1;13435:50:0;20424:4:::1;20413:15:::0;::::1;;;20409:1042;;;-1:-1:-1::0;;;;;20454:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;20453:21;20445:62;;;::::0;-1:-1:-1;;;20445:62:0;;8209:2:1;20445:62:0::1;::::0;::::1;8191:21:1::0;8248:2;8228:18;;;8221:30;8287;8267:18;;;8260:58;8335:18;;20445:62:0::1;8007:352:1::0;20445:62:0::1;-1:-1:-1::0;;;;;20525:16:0;::::1;20544:1;20525:16:::0;;;:7:::1;:16;::::0;;;;;:20;20522:116:::1;;-1:-1:-1::0;;;;;20605:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;20585:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;20566:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;20522:116:::1;-1:-1:-1::0;;;;;;20652:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;20652:27:0::1;20675:4;20652:27:::0;;::::1;::::0;;;20694:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;20694:23:0::1;::::0;;::::1;::::0;;25811:806::o;20409:1042::-:1;20739:16:::0;20735:716:::1;;-1:-1:-1::0;;;;;20780:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;20772:61;;;::::0;-1:-1:-1;;;20772:61:0;;8566:2:1;20772:61:0::1;::::0;::::1;8548:21:1::0;8605:2;8585:18;;;8578:30;8644;8624:18;;;8617:58;8692:18;;20772:61:0::1;8364:352:1::0;20772:61:0::1;20851:9;:16:::0;20871:1:::1;20851:21;20848:592;;;-1:-1:-1::0;;;;;20892:16:0;::::1;20911:1;20892:16:::0;;;:7:::1;:16;::::0;;;;;;;:20;;;20931:11:::1;:20:::0;;;;;:28;;-1:-1:-1;;20931:28:0::1;::::0;;20978:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;20978:15:0;;;;;-1:-1:-1;;20978:15:0::1;::::0;;;;;25811:806;;:::o;20848:592::-:1;21039:9;21034:391;21058:9;:16:::0;21054:20;::::1;21034:391;;;21124:7;-1:-1:-1::0;;;;;21108:23:0::1;:9;21118:1;21108:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;21108:12:0::1;:23;21104:302;;;21175:9;21185:16:::0;;:20:::1;::::0;21204:1:::1;::::0;21185:20:::1;:::i;:::-;21175:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;21160:9:::1;:12:::0;;-1:-1:-1;;;;;21175:31:0;;::::1;::::0;21170:1;;21160:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;21160:46:0::1;-1:-1:-1::0;;;;;21160:46:0;;::::1;;::::0;;21233:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;21280:11:::1;:20:::0;;;;:28;;-1:-1:-1;;21280:28:0::1;::::0;;21335:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;21335:15:0;;;;;-1:-1:-1;;21335:15:0::1;::::0;;;;;21034:391:::1;20319:1139:::0;;:::o;21104:302::-:1;21076:3:::0;::::1;::::0;::::1;:::i;:::-;;;;21034:391;;;;20319:1139:::0;;:::o;17899:306::-;-1:-1:-1;;;;;18020:19:0;;17999:4;18020:19;;;:11;:19;;;;;;;;18040:10;18020:31;;;;;;;;-1:-1:-1;;18020:52:0;18016:126;;-1:-1:-1;;;;;18089:19:0;;;;;;:11;:19;;;;;;;;18109:10;18089:31;;;;;;;:41;;18124:6;;18089:19;:41;;18124:6;;18089:41;:::i;:::-;;;;-1:-1:-1;;18016:126:0;18161:36;18171:6;18179:9;18190:6;18161:9;:36::i;:::-;18154:43;17899:306;-1:-1:-1;;;;17899:306:0:o;19767:141::-;19820:7;19877:21;19895:1;19877:9;:21::i;:::-;19859:15;12073:42;19859:9;:15::i;:::-;:39;;;;:::i;:::-;19848:7;;:51;;;;:::i;:::-;19840:60;;19767:141;:::o;26956:250::-;27022:7;27061;;27050;:18;;27042:73;;;;-1:-1:-1;;;27042:73:0;;9953:2:1;27042:73:0;;;9935:21:1;9992:2;9972:18;;;9965:30;10031:34;10011:18;;;10004:62;10102:12;10082:18;;;10075:40;10132:19;;27042:73:0;9751:406:1;27042:73:0;27126:19;27149:10;:8;:10::i;:::-;27126:33;-1:-1:-1;27177:21:0;27126:33;27177:7;:21;:::i;:::-;27170:28;26956:250;-1:-1:-1;;;26956:250:0:o;21722:108::-;13443:6;;-1:-1:-1;;;;;13443:6:0;13453:10;13443:20;13435:50;;;;-1:-1:-1;;;13435:50:0;;7239:2:1;13435:50:0;;;7221:21:1;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:47;7354:18;;13435:50:0;7037:341:1;13435:50:0;21791:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;21791:31:0::1;::::0;::::1;160:74:1::0;21791:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;21791:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21722:108:::0;:::o;25525:140::-;13443:6;;-1:-1:-1;;;;;13443:6:0;13453:10;13443:20;13435:50;;;;-1:-1:-1;;;13435:50:0;;7239:2:1;13435:50:0;;;7221:21:1;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:47;7354:18;;13435:50:0;7037:341:1;13435:50:0;-1:-1:-1;;;;;25617:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;25617:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25525:140::o;18213:211::-;18327:10;18301:4;18348:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;18348:32:0;;;;;;;;;;18301:4;;18318:76;;18339:7;;18348:45;;18383:10;;18348:45;:::i;:::-;18318:8;:76::i;25134:269::-;13443:6;;-1:-1:-1;;;;;13443:6:0;13453:10;13443:20;13435:50;;;;-1:-1:-1;;;13435:50:0;;7239:2:1;13435:50:0;;;7221:21:1;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:47;7354:18;;13435:50:0;7037:341:1;13435:50:0;25275:4:::1;25265:7;;:14;;;;:::i;:::-;25253:7;25242;25232;;:17;;;;:::i;:::-;25231:29;;;;:::i;:::-;:49;;25223:117;;;::::0;-1:-1:-1;;;25223:117:0;;10876:2:1;25223:117:0::1;::::0;::::1;10858:21:1::0;10915:2;10895:18;;;10888:30;10954:34;10934:18;;;10927:62;11025:25;11005:18;;;10998:53;11068:19;;25223:117:0::1;10674:419:1::0;25223:117:0::1;25388:7;25377;25367;;:17;;;;:::i;:::-;25366:29;;;;:::i;:::-;25351:12;:44:::0;-1:-1:-1;;25134:269:0:o;24574:181::-;13443:6;;-1:-1:-1;;;;;13443:6:0;13453:10;13443:20;13435:50;;;;-1:-1:-1;;;13435:50:0;;7239:2:1;13435:50:0;;;7221:21:1;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:47;7354:18;;13435:50:0;7037:341:1;13435:50:0;24650:7:::1;24646:66;;;24674:18;:26:::0;;-1:-1:-1;;24674:26:0::1;::::0;;24646:66:::1;24722:15;:25:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;24574:181::o;15020:701::-;13443:6;;-1:-1:-1;;;;;13443:6:0;13453:10;13443:20;13435:50;;;;-1:-1:-1;;;13435:50:0;;7239:2:1;13435:50:0;;;7221:21:1;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:47;7354:18;;13435:50:0;7037:341:1;13435:50:0;-1:-1:-1;;;;;15101:22:0;::::1;15093:96;;;::::0;-1:-1:-1;;;15093:96:0;;11300:2:1;15093:96:0::1;::::0;::::1;11282:21:1::0;11339:2;11319:18;;;11312:30;11378:34;11358:18;;;11351:62;11449:31;11429:18;;;11422:59;11498:19;;15093:96:0::1;11098:425:1::0;15093:96:0::1;-1:-1:-1::0;;;;;15208:16:0;::::1;12073:42;15208:16;;15200:90;;;::::0;-1:-1:-1;;;15200:90:0;;11300:2:1;15200:90:0::1;::::0;::::1;11282:21:1::0;11339:2;11319:18;;;11312:30;11378:34;11358:18;;;11351:62;11449:31;11429:18;;;11422:59;11498:19;;15200:90:0::1;11098:425:1::0;15200:90:0::1;15321:6;::::0;;15301:34:::1;::::0;-1:-1:-1;;;;;15321:6:0;;::::1;::::0;15301:19:::1;:34::i;:::-;15346:35;15366:8;15376:4;15346:19;:35::i;:::-;15434:6;::::0;15406:16:::1;::::0;-1:-1:-1;;;;;15406:16:0;;::::1;15434:6:::0;::::1;15406:35;15402:90;;;15456:16;:36:::0;;-1:-1:-1;;15456:36:0::1;-1:-1:-1::0;;;;;15456:36:0;::::1;;::::0;;15402:90:::1;15536:1;15526:6:::0;;15516:17:::1;::::0;-1:-1:-1;;;;;15526:6:0::1;15516:9;:17::i;:::-;:21;15513:99;;;15564:6;::::0;15554:46:::1;::::0;-1:-1:-1;;;;;15564:6:0::1;15572:8:::0;15582:17:::1;15564:6:::0;15582:9:::1;:17::i;:::-;15554:9;:46::i;:::-;;15513:99;15632:6;:17:::0;;-1:-1:-1;;15632:17:0::1;-1:-1:-1::0;;;;;15632:17:0;::::1;::::0;;::::1;::::0;;15665:38:::1;::::0;15632:17;;;;15665:38:::1;::::0;15632:6;15665:38:::1;15020:701:::0;:::o;22099:104::-;22144:7;22171:9;;;;;;;;;-1:-1:-1;;;;;22171:9:0;-1:-1:-1;;;;;22171:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20049:134::-;13443:6;;-1:-1:-1;;;;;13443:6:0;13453:10;13443:20;13435:50;;;;-1:-1:-1;;;13435:50:0;;7239:2:1;13435:50:0;;;7221:21:1;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:47;7354:18;;13435:50:0;7037:341:1;13435:50:0;-1:-1:-1;;;;;20137:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;20137:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20049:134::o;21466:248::-;13443:6;;-1:-1:-1;;;;;13443:6:0;13453:10;13443:20;13435:50;;;;-1:-1:-1;;;13435:50:0;;7239:2:1;13435:50:0;;;7221:21:1;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:47;7354:18;;13435:50:0;7037:341:1;13435:50:0;21550:16:::1;::::0;::::1;::::0;::::1;;;21549:17;21541:54;;;::::0;-1:-1:-1;;;21541:54:0;;11919:2:1;21541:54:0::1;::::0;::::1;11901:21:1::0;11958:2;11938:18;;;11931:30;11997:26;11977:18;;;11970:54;12041:18;;21541:54:0::1;11717:348:1::0;21541:54:0::1;-1:-1:-1::0;;;;;21614:28:0;::::1;21637:4;21614:28;;21606:55;;;::::0;-1:-1:-1;;;21606:55:0;;12272:2:1;21606:55:0::1;::::0;::::1;12254:21:1::0;12311:2;12291:18;;;12284:30;12350:16;12330:18;;;12323:44;12384:18;;21606:55:0::1;12070:338:1::0;21606:55:0::1;21672:9;:34:::0;;-1:-1:-1;;;;;21672:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;21466:248::o;25411:106::-;25499:9;;25452:7;;25495:13;;25499:9;;25495:2;:13;:::i;:::-;25479:12;;:30;;;;:::i;16855:198::-;-1:-1:-1;;;;;16945:20:0;;16921:7;16945:20;;;:11;:20;;;;;;;;16941:49;;;-1:-1:-1;;;;;;16974:16:0;;;;;:7;:16;;;;;;;16855:198::o;16941:49::-;-1:-1:-1;;;;;17028:16:0;;;;;;:7;:16;;;;;;17008:37;;:19;:37::i;15729:195::-;13443:6;;-1:-1:-1;;;;;13443:6:0;13453:10;13443:20;13435:50;;;;-1:-1:-1;;;13435:50:0;;7239:2:1;13435:50:0;;;7221:21:1;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:47;7354:18;;13435:50:0;7037:341:1;13435:50:0;15816:6:::1;::::0;;15796:34:::1;::::0;-1:-1:-1;;;;;15816:6:0;;::::1;::::0;15796:19:::1;:34::i;:::-;15858:1;15841:19:::0;;-1:-1:-1;;15841:19:0::1;::::0;;15876:40:::1;::::0;15858:1;;15876:40:::1;::::0;15858:1;;15876:40:::1;15729:195::o:0;24955:171::-;13443:6;;-1:-1:-1;;;;;13443:6:0;13453:10;13443:20;13435:50;;;;-1:-1:-1;;;13435:50:0;;7239:2:1;13435:50:0;;;7221:21:1;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:47;7354:18;;13435:50:0;7037:341:1;13435:50:0;25051:18:::1;:28:::0;;;;25090:18:::1;:28:::0;24955:171::o;19243:516::-;13443:6;;-1:-1:-1;;;;;13443:6:0;13453:10;13443:20;13435:50;;;;-1:-1:-1;;;13435:50:0;;7239:2:1;13435:50:0;;;7221:21:1;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:47;7354:18;;13435:50:0;7037:341:1;13435:50:0;19324:16;19320:432:::1;;-1:-1:-1::0;;;;;19357:13:0;;::::1;19373:5;19357:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;19357:21:0::1;::::0;;19393:9:::1;::::0;:32;;;;;::::1;::::0;::::1;14084:74:1::0;;;;14174:18;;;14167:50;;;;19393:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;14057:18:1;;19393:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;19320:432;19462:17;::::0;:22;19458:152:::1;;19551:6;19531:17;;19513:15;:35;;;;:::i;:::-;:44;19505:89;;;::::0;-1:-1:-1;;;19505:89:0;;14430:2:1;19505:89:0::1;::::0;::::1;14412:21:1::0;;;14449:18;;;14442:30;14508:34;14488:18;;;14481:62;14560:18;;19505:89:0::1;14228:356:1::0;19505:89:0::1;-1:-1:-1::0;;;;;19624:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;19624:20:0::1;19640:4;19624:20:::0;;::::1;::::0;;;19679:15:::1;19659:17;:35:::0;;;19709:9:::1;::::0;:31;;;;;;;::::1;14084:74:1::0;;;;14174:18;;;14167:50;19709:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;14057:18:1;;19709:31:0::1;13916:307:1::0;24763:184:0;13443:6;;-1:-1:-1;;;;;13443:6:0;13453:10;13443:20;13435:50;;;;-1:-1:-1;;;13435:50:0;;7239:2:1;13435:50:0;;;7221:21:1;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:47;7354:18;;13435:50:0;7037:341:1;13435:50:0;24842:7:::1;24838:63;;;24866:15;:23:::0;;;::::1;::::0;;24838:63:::1;24911:18;:28:::0;;;::::1;;;;-1:-1:-1::0;;24911:28:0;;::::1;::::0;;;::::1;::::0;;24763:184::o;17718:173::-;17782:4;13443:6;;-1:-1:-1;;;;;13443:6:0;13453:10;13443:20;13435:50;;;;-1:-1:-1;;;13435:50:0;;7239:2:1;13435:50:0;;;7221:21:1;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:47;7354:18;;13435:50:0;7037:341:1;13435:50:0;17831:9:::1;::::0;17799:62:::1;::::0;17816:4:::1;::::0;-1:-1:-1;;;;;17831:9:0::1;-1:-1:-1::0;;17799:8:0::1;:62::i;:::-;-1:-1:-1::0;17879:4:0::1;17718:173:::0;:::o;31258:528::-;13443:6;;-1:-1:-1;;;;;13443:6:0;13453:10;13443:20;13435:50;;;;-1:-1:-1;;;13435:50:0;;7239:2:1;13435:50:0;;;7221:21:1;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:47;7354:18;;13435:50:0;7037:341:1;13435:50:0;31320:14:::1;::::0;::::1;;31319:15;31311:52;;;::::0;-1:-1:-1;;;31311:52:0;;14791:2:1;31311:52:0::1;::::0;::::1;14773:21:1::0;14830:2;14810:18;;;14803:30;14869:26;14849:18;;;14842:54;14913:18;;31311:52:0::1;14589:348:1::0;31311:52:0::1;31382:16;::::0;::::1;::::0;::::1;;;31374:53;;;::::0;-1:-1:-1;;;31374:53:0;;15144:2:1;31374:53:0::1;::::0;::::1;15126:21:1::0;15183:2;15163:18;;;15156:30;15222:26;15202:18;;;15195:54;15266:18;;31374:53:0::1;14942:348:1::0;31374:53:0::1;31438:42;31468:4;31475;31438:21;:42::i;:::-;31513:6;::::0;31491:35:::1;::::0;-1:-1:-1;;;;;31513:6:0::1;::::0;31491:21:::1;:35::i;:::-;31548:9;::::0;;;::::1;-1:-1:-1::0;;;;;31548:9:0::1;31537:99;;31588:9;:36:::0;;;::::1;31618:4;31588:36:::0;::::1;;::::0;;31537:99:::1;31650:9;::::0;31670:6:::1;::::0;31725:9:::1;::::0;31650:85:::1;::::0;;;;-1:-1:-1;;;;;31670:6:0;;::::1;31650:85;::::0;::::1;15518:74:1::0;15640:10;31685:12:0::1;15628:23:1::0;15608:18;;;15601:51;15700:18;31707:15:0::1;15688:31:1::0;15668:18;;;15661:59;31725:9:0::1;::::0;;::::1;15736:18:1::0;;;15729:45;31650:9:0;;;::::1;;::::0;:19:::1;::::0;15490::1;;31650:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;31646:101:::0;31757:14:::1;:21:::0;;-1:-1:-1;;31757:21:0::1;31774:4;31757:21;::::0;;31258:528::o;24463:103::-;13443:6;;-1:-1:-1;;;;;13443:6:0;13453:10;13443:20;13435:50;;;;-1:-1:-1;;;13435:50:0;;7239:2:1;13435:50:0;;;7221:21:1;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:47;7354:18;;13435:50:0;7037:341:1;13435:50:0;24534:14:::1;:24:::0;;-1:-1:-1;;24534:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24463:103::o;18432:221::-;18551:10;18525:4;18572:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;18572:32:0;;;;;;;;;;18525:4;;18542:81;;18563:7;;18572:50;;18607:15;;18572:50;:::i;17061:165::-;17139:4;17156:40;17166:10;17178:9;17189:6;17156:9;:40::i;:::-;-1:-1:-1;17214:4:0;;17061:165;-1:-1:-1;;;17061:165:0:o;23495:284::-;13443:6;;-1:-1:-1;;;;;13443:6:0;13453:10;13443:20;13435:50;;;;-1:-1:-1;;;13435:50:0;;7239:2:1;13435:50:0;;;7221:21:1;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:47;7354:18;;13435:50:0;7037:341:1;13435:50:0;23599:7:::1;:27:::0;;::::1;23681:29:::0;;::::1;::::0;::::1;-1:-1:-1::0;;23637:33:0;;::::1;::::0;::::1;-1:-1:-1::0;;23637:33:0;;;23599:27;;::::1;23637:33:::0;;;;;;;::::1;23681:29;;::::0;;23701:9;23737:22:::1;23659:11:::0;23618:8;23737:22:::1;:::i;:::-;:34;;;;:::i;:::-;23721:7;:50:::0;;::::1;::::0;;;::::1;::::0;::::1;-1:-1:-1::0;;23721:50:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;23495:284:0:o;23105:382::-;13443:6;;-1:-1:-1;;;;;13443:6:0;13453:10;13443:20;13435:50;;;;-1:-1:-1;;;13435:50:0;;7239:2:1;13435:50:0;;;7221:21:1;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:47;7354:18;;13435:50:0;7037:341:1;13435:50:0;23288:4:::1;23275:9:::0;23265:7;23240:22:::1;23251:11:::0;23240:8;:22:::1;:::i;:::-;:32;;;;:::i;:::-;:44;;;;:::i;:::-;:52;;;;23232:61;;;::::0;::::1;;23304:14;:34:::0;;::::1;23443:36:::0;;::::1;::::0;::::1;::::0;23349:40;;::::1;::::0;::::1;-1:-1:-1::0;;23304:34:0;;::::1;::::0;::::1;23349:40:::0;;;;;;;;;;;;;;;::::1;23443:36:::0;;;;23400:32;::::1;23443:36:::0;;;;::::1;::::0;;23105:382::o;22370:357::-;13443:6;;-1:-1:-1;;;;;13443:6:0;13453:10;13443:20;13435:50;;;;-1:-1:-1;;;13435:50:0;;7239:2:1;13435:50:0;;;7221:21:1;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:47;7354:18;;13435:50:0;7037:341:1;13435:50:0;22548:4:::1;22535:9:::0;22525:7;22500:22:::1;22511:11:::0;22500:8;:22:::1;:::i;:::-;:32;;;;:::i;:::-;:44;;;;:::i;:::-;:52;;;;22492:61;;;::::0;::::1;;22564:9;:29:::0;;::::1;22688:31:::0;;::::1;::::0;::::1;::::0;22604:35;;::::1;::::0;::::1;-1:-1:-1::0;;22564:29:0;;::::1;::::0;::::1;22604:35:::0;;;;;;;;;;;;;;;::::1;22688:31:::0;;;;22650:27;::::1;22688:31:::0;;;;::::1;::::0;;22370:357::o;22735:362::-;13443:6;;-1:-1:-1;;;;;13443:6:0;13453:10;13443:20;13435:50;;;;-1:-1:-1;;;13435:50:0;;7239:2:1;13435:50:0;;;7221:21:1;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:47;7354:18;;13435:50:0;7037:341:1;13435:50:0;22914:4:::1;22901:9:::0;22891:7;22866:22:::1;22877:11:::0;22866:8;:22:::1;:::i;:::-;:32;;;;:::i;:::-;:44;;;;:::i;:::-;:52;;;;22858:61;;;::::0;::::1;;22930:10;:30:::0;;::::1;23057:32:::0;;::::1;::::0;::::1;::::0;22971:36;;::::1;::::0;::::1;-1:-1:-1::0;;22930:30:0;;::::1;::::0;::::1;22971:36:::0;;;;;;;;;;;;;;;::::1;23057:32:::0;;;;23018:28;::::1;23057:32:::0;;;;::::1;::::0;;22735:362::o;21973:118::-;13443:6;;-1:-1:-1;;;;;13443:6:0;13453:10;13443:20;13435:50;;;;-1:-1:-1;;;13435:50:0;;7239:2:1;13435:50:0;;;7221:21:1;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:47;7354:18;;13435:50:0;7037:341:1;13435:50:0;22047:9:::1;::::0;:36:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;22047:36:0::1;::::0;::::1;160:74:1::0;22047:9:0;;;::::1;::::0;;::::1;::::0;:27:::1;::::0;133:18:1;;22047:36:0::1;14:226:1::0;24286:165:0;13443:6;;-1:-1:-1;;;;;13443:6:0;13453:10;13443:20;13435:50;;;;-1:-1:-1;;;13435:50:0;;7239:2:1;13435:50:0;;;7221:21:1;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:47;7354:18;;13435:50:0;7037:341:1;13435:50:0;24361:19:::1;:30:::0;;;::::1;;::::0;::::1;::::0;;;::::1;;::::0;;24407:36:::1;::::0;::::1;::::0;::::1;::::0;24383:8;2311:14:1;2304:22;2286:41;;2274:2;2259:18;;2146:187;24407:36:0::1;;;;;;;;24286:165:::0;:::o;24084:194::-;13443:6;;-1:-1:-1;;;;;13443:6:0;13453:10;13443:20;13435:50;;;;-1:-1:-1;;;13435:50:0;;7239:2:1;13435:50:0;;;7221:21:1;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:47;7354:18;;13435:50:0;7037:341:1;13435:50:0;24187:16:::1;:37:::0;;-1:-1:-1;;;;;24187:37:0;;::::1;-1:-1:-1::0;;24187:37:0;;::::1;;::::0;;;24235:15:::1;:35:::0;;;;;::::1;::::0;::::1;;::::0;;24084:194::o;18661:574::-;13443:6;;-1:-1:-1;;;;;13443:6:0;13453:10;13443:20;13435:50;;;;-1:-1:-1;;;13435:50:0;;7239:2:1;13435:50:0;;;7221:21:1;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:47;7354:18;;13435:50:0;7037:341:1;13435:50:0;18732:29:::1;18783:9;18732:61;;18804:16;18841:10;-1:-1:-1::0;;;;;18841:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18823:47:0::1;;18879:4;18886:10;-1:-1:-1::0;;;;;18886:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18823:81;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;16523:15:1;;;18823:81:0::1;::::0;::::1;16505:34:1::0;16575:15;;16555:18;;;16548:43;16417:18;;18823:81:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18804:100:::0;-1:-1:-1;;;;;;18919:22:0;::::1;18915:207;;18985:10;-1:-1:-1::0;;;;;18985:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18967:50:0::1;;19026:4;19033:10;-1:-1:-1::0;;;;;19033:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18967:84;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;16523:15:1;;;18967:84:0::1;::::0;::::1;16505:34:1::0;16575:15;;16555:18;;;16548:43;16417:18;;18967:84:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18958:6;:93:::0;;-1:-1:-1;;18958:93:0::1;-1:-1:-1::0;;;;;18958:93:0;;;::::1;::::0;;;::::1;::::0;;18915:207:::1;;;19093:6;:17:::0;;-1:-1:-1;;19093:17:0::1;-1:-1:-1::0;;;;;19093:17:0;::::1;;::::0;;18915:207:::1;19132:9;:22:::0;;-1:-1:-1;;19132:22:0::1;-1:-1:-1::0;;;;;19132:22:0;::::1;::::0;;::::1;::::0;;;19165:62:::1;::::0;19182:4:::1;::::0;-1:-1:-1;;19165:8:0::1;:62::i;31794:183::-:0;13443:6;;-1:-1:-1;;;;;13443:6:0;13453:10;13443:20;13435:50;;;;-1:-1:-1;;;13435:50:0;;7239:2:1;13435:50:0;;;7221:21:1;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:47;7354:18;;13435:50:0;7037:341:1;13435:50:0;31861:16:::1;::::0;::::1;::::0;::::1;;;31860:17;31852:58;;;::::0;-1:-1:-1;;;31852:58:0;;16804:2:1;31852:58:0::1;::::0;::::1;16786:21:1::0;16843:2;16823:18;;;16816:30;16882;16862:18;;;16855:58;16930:18;;31852:58:0::1;16602:352:1::0;31852:58:0::1;14971:7:::0;14998:6;;31921:48:::1;::::0;-1:-1:-1;;;;;14998:6:0;;;;31947:21:::1;31921:48:::0;::::1;;;::::0;31947:21;;31921:48;14971:7;31921:48;31947:21;14998:6;31921:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;31794:183::o:0;23787:289::-;13443:6;;-1:-1:-1;;;;;13443:6:0;13453:10;13443:20;13435:50;;;;-1:-1:-1;;;13435:50:0;;7239:2:1;13435:50:0;;;7221:21:1;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:47;7354:18;;13435:50:0;7037:341:1;13435:50:0;23987:16:::1;23967;23957:7;;:26;;;;:::i;:::-;23956:47;;;;:::i;:::-;23940:13;:63:::0;24028:7:::1;::::0;24055:13;;24028:23:::1;::::0;24038:13;;24028:23:::1;:::i;:::-;24027:41;;;;:::i;:::-;24014:10;:54:::0;-1:-1:-1;;;;23787:289:0:o;21840:125::-;21925:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;21925:32:0;;;160:74:1;21901:4:0;;21925:9;;;;;:23;;133:18:1;;21925:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17401:309::-;-1:-1:-1;;;;;17495:20:0;;17487:52;;;;-1:-1:-1;;;17487:52:0;;17411:2:1;17487:52:0;;;17393:21:1;17450:2;17430:18;;;17423:30;17489:21;17469:18;;;17462:49;17528:18;;17487:52:0;17209:343:1;17487:52:0;-1:-1:-1;;;;;17558:21:0;;17550:53;;;;-1:-1:-1;;;17550:53:0;;17411:2:1;17550:53:0;;;17393:21:1;17450:2;17430:18;;;17423:30;17489:21;17469:18;;;17462:49;17528:18;;17550:53:0;17209:343:1;17550:53:0;-1:-1:-1;;;;;17616:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;17669:33;;3264:25:1;;;17669:33:0;;3237:18:1;17669:33:0;;;;;;;17401:309;;;:::o;27214:2212::-;27293:4;-1:-1:-1;;;;;27318:18:0;;27310:68;;;;-1:-1:-1;;;27310:68:0;;17759:2:1;27310:68:0;;;17741:21:1;17798:2;17778:18;;;17771:30;17837:34;17817:18;;;17810:62;17908:7;17888:18;;;17881:35;17933:19;;27310:68:0;17557:401:1;27310:68:0;-1:-1:-1;;;;;27397:16:0;;27389:64;;;;-1:-1:-1;;;27389:64:0;;18165:2:1;27389:64:0;;;18147:21:1;18204:2;18184:18;;;18177:30;18243:34;18223:18;;;18216:62;18314:5;18294:18;;;18287:33;18337:19;;27389:64:0;17963:399:1;27389:64:0;27481:1;27472:6;:10;27464:64;;;;-1:-1:-1;;;27464:64:0;;18569:2:1;27464:64:0;;;18551:21:1;18608:2;18588:18;;;18581:30;18647:34;18627:18;;;18620:62;18718:11;18698:18;;;18691:39;18747:19;;27464:64:0;18367:405:1;27464:64:0;27544:20;27555:4;27561:2;27544:10;:20::i;:::-;27541:402;;;27585:14;;;;27581:89;;27620:34;;-1:-1:-1;;;27620:34:0;;18979:2:1;27620:34:0;;;18961:21:1;19018:2;18998:18;;;18991:30;19057:26;19037:18;;;19030:54;19101:18;;27620:34:0;18777:348:1;27581:89:0;-1:-1:-1;;;;;27687:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;27704:11:0;;;;;;:7;:11;;;;;;;;27687:28;27684:248;;;-1:-1:-1;;;;;27740:27:0;;;;;;:21;:27;;;;;;;;27739:28;:58;;;;-1:-1:-1;;;;;;27772:25:0;;;;;;:21;:25;;;;;;;;27771:26;27739:58;27735:182;;;27840:12;;27830:6;:22;;27822:75;;;;-1:-1:-1;;;27822:75:0;;19332:2:1;27822:75:0;;;19314:21:1;19371:2;19351:18;;;19344:30;19410:34;19390:18;;;19383:62;19481:10;19461:18;;;19454:38;19509:19;;27822:75:0;19130:404:1;27822:75:0;-1:-1:-1;;;;;27988:25:0;;27955:12;27988:25;;;:19;:25;;;;;;27970:4;;27988:25;;;:52;;-1:-1:-1;;;;;;28017:23:0;;;;;;:19;:23;;;;;;;;27988:52;27985:98;;;-1:-1:-1;28066:5:0;27985:98;-1:-1:-1;;;;;28099:11:0;;;;;;:7;:11;;;;;;;;28095:1261;;;28132:6;;;;;;;28131:7;:47;;;;-1:-1:-1;28159:19:0;;;;;;;28131:47;:89;;;;-1:-1:-1;;;;;;28200:20:0;;;;;;:16;:20;;;;;;;;28199:21;28131:89;:133;;;;-1:-1:-1;;;;;;28242:22:0;;;;;;:16;:22;;;;;;;;28241:23;28131:133;28127:480;;;28299:28;28330:24;28348:4;28330:9;:24::i;:::-;28299:55;;28401:13;;28377:20;:37;28373:219;;28466:10;;28442:20;:34;28439:77;;-1:-1:-1;28503:10:0;;28439:77;28538:34;28551:20;28538:12;:34::i;:::-;28280:327;28127:480;28627:14;;;;:39;;;;-1:-1:-1;;;;;;28645:21:0;;28661:4;28645:21;;28627:39;28623:722;;;28708:9;;:41;;;;;28687:18;;-1:-1:-1;;;;;28708:9:0;;:23;;:41;;28732:6;;28740:8;;28708:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28708:41:0;;;;;;;;;;;;:::i;:::-;28750:1;28708:44;;;;;;;;:::i;:::-;;;;;;;28687:65;;28775:18;;;;;;;;;;;:100;;;;;28854:21;28833:18;;28811;;28798:10;:31;;;;:::i;:::-;28797:54;;;;:::i;:::-;:78;28775:100;28771:219;;;28900:70;28951:18;;28929;;28916:10;:31;;;;:::i;:::-;28915:54;;;;:::i;:::-;28900:14;:70::i;:::-;29014:15;;;;;;;29010:320;;;29082:14;:10;29095:1;29082:14;:::i;:::-;29058:21;:38;29054:257;;;29125:15;:23;;29175:25;;29125:23;29175:25;;;29054:257;;;29257:30;29272:14;:10;29285:1;29272:14;:::i;29257:30::-;28668:677;28623:722;29374:44;29392:4;29398:2;29402:6;29410:7;29374:17;:44::i;:::-;29367:51;27214:2212;-1:-1:-1;;;;;27214:2212:0:o;35396:526::-;35476:7;;35512;;35438;;35476;35438;35530:282;35554:9;:16;35550:20;;35530:282;;;35620:7;35596;:21;35604:9;35614:1;35604:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35604:12:0;35596:21;;;;;;;;;;;;;:31;;:66;;;35655:7;35631;:21;35639:9;35649:1;35639:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35639:12:0;35631:21;;;;;;;;;;;;;:31;35596:66;35592:96;;;35681:7;;35671;;:17;;;;:::i;:::-;35664:24;;;;;35396:526;:::o;35592:96::-;35723:7;:21;35731:9;35741:1;35731:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35731:12:0;35723:21;;;;;;;;;;;;;35713:31;;:7;:31;:::i;:::-;35703:41;;35779:7;:21;35787:9;35797:1;35787:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35787:12:0;35779:21;;;;;;;;;;;;;35769:31;;:7;:31;:::i;:::-;35759:41;-1:-1:-1;35572:3:0;;;;:::i;:::-;;;;35530:282;;;;35846:7;;35836;;:17;;;;:::i;:::-;35826:7;:27;35822:57;;;35872:7;;35862;;:17;;;;:::i;:::-;35855:24;;;;35396:526;:::o;35822:57::-;35897:17;35907:7;35897;:17;:::i;26625:323::-;26693:4;14998:6;;-1:-1:-1;;;;;26717:15:0;;;14998:6;;26717:15;;;;:45;;-1:-1:-1;14971:7:0;14998:6;-1:-1:-1;;;;;26749:13:0;;;14998:6;;26749:13;;26717:45;:84;;;;-1:-1:-1;;;;;;26780:21:0;;;;;;:17;:21;;;;;;;;26779:22;26717:84;:125;;;;-1:-1:-1;;;;;;26819:23:0;;;;;;:17;:23;;;;;;;;26818:24;26717:125;:152;;;;-1:-1:-1;;;;;;26859:10:0;;12073:42;26859:10;;26717:152;:185;;;;-1:-1:-1;;;;;;26886:16:0;;;;26717:185;:223;;;;-1:-1:-1;;;;;;26919:21:0;;26935:4;26919:21;;26710:230;26625:323;-1:-1:-1;;;26625:323:0:o;29434:896::-;13337:6;:13;;;;;;;;29521:7:::1;:13:::0;::::1;::::0;;;::::1;;29517:44;;29554:7;;29517:44;29596:4;29576:26;::::0;;;:11:::1;:26;::::0;;;;;;;29611:9:::1;::::0;-1:-1:-1;;;;;29611:9:0::1;29576:46:::0;;;;;;;;-1:-1:-1;;29576:67:0::1;29573:165;;29680:4;29660:26;::::0;;;:11:::1;:26;::::0;;;;;;;29695:9:::1;::::0;-1:-1:-1;;;;;29695:9:0::1;29660:46:::0;;;;;;;-1:-1:-1;;29660:66:0;;29573:165:::1;29810:9;::::0;:231:::1;::::0;;;;29768:21:::1;::::0;-1:-1:-1;;;;;29810:9:0::1;::::0;:60:::1;::::0;:231:::1;::::0;29885:20;;29750:15:::1;::::0;29964:8:::1;::::0;29995:4:::1;::::0;30015:15:::1;::::0;29810:231:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30054:17;30098:7;30074:21;:31;;;;:::i;:::-;30054:51:::0;-1:-1:-1;30122:13:0;;30118:205:::1;;30152:15;::::0;30210:7:::1;:13:::0;-1:-1:-1;;;;;30152:15:0;;::::1;::::0;:72:::1;::::0;30210:13:::1;::::0;;::::1;::::0;::::1;::::0;30178:28:::1;::::0;30190:16:::1;30178:9:::0;:28:::1;:::i;:::-;30177:46;;;;:::i;:::-;30152:72;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;30239:16:0::1;::::0;30297:7:::1;:13:::0;-1:-1:-1;;;;;30239:16:0;;::::1;::::0;:72:::1;::::0;30297:13:::1;::::0;;::::1;::::0;::::1;::::0;30265:29:::1;::::0;30277:17;;;::::1;;30265:9:::0;:29:::1;:::i;:::-;:45;;;;:::i;:::-;30239:72;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;30118:205;29506:824;;13361:1;-1:-1:-1::0;13373:6:0;:14;;;;;;29434:896::o;30338:396::-;30425:16;;;30439:1;30425:16;;;;;;;;30401:21;;30425:16;;;;;;;;-1:-1:-1;;30462:9:0;;:16;;;;;;;;30401:40;;-1:-1:-1;;;;;;30462:9:0;;;;:14;;-1:-1:-1;30462:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30452:4;30457:1;30452:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;30452:26:0;;;-1:-1:-1;;;;;30452:26:0;;;;;30507:4;30489;30494:1;30489:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30489:23:0;;;:7;;;;;;;;;:23;30525:9;;:201;;;;;:9;;;:60;;30593:9;;30525:201;;:9;;30662:4;;12073:42;;30700:15;;30525:201;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30390:344;30338:396;:::o;32191:1273::-;32314:16;;32292:4;;32314:16;;;;;32309:221;;32347:28;32366:4;32372:2;32347:18;:28::i;:::-;32395:16;;;;;;;32394:17;:41;;;;;32415:20;32426:4;32432:2;32415:10;:20::i;:::-;32390:129;;;32456:47;;-1:-1:-1;;;32456:47:0;;23538:2:1;32456:47:0;;;23520:21:1;23577:2;23557:18;;;23550:30;23616:34;23596:18;;;23589:62;23687:7;23667:18;;;23660:35;23712:19;;32456:47:0;23336:401:1;32390:129:0;32542:25;32570:38;32581:4;32587:2;32591:7;32600;32570:10;:38::i;:::-;32653:14;;;;-1:-1:-1;;;;;32637:13:0;;;;;;:7;:13;;;;;;32542:66;;-1:-1:-1;32637:30:0;;;:::i;:::-;-1:-1:-1;;;;;32621:13:0;;;;;;;:7;:13;;;;;;:46;;;;32706:22;;;;32692:11;;;;;;;;;;:36;;32706:22;32692:36;:::i;:::-;-1:-1:-1;;;;;32678:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;32745:17;;;;;:11;:17;;;;;;;:37;;;;-1:-1:-1;;;;;;32767:15:0;;;;;;:11;:15;;;;;;;;32766:16;32745:37;32741:416;;;-1:-1:-1;;;;;32815:13:0;;;;;;:7;:13;;;;;;:23;;32831:7;;32815:23;:::i;:::-;-1:-1:-1;;;;;32799:13:0;;;;;;:7;:13;;;;;:39;32741:416;;;-1:-1:-1;;;;;32861:17:0;;;;;;:11;:17;;;;;;;;32860:18;:37;;;;-1:-1:-1;;;;;;32882:15:0;;;;;;:11;:15;;;;;;;;32860:37;32856:301;;;32942:22;;-1:-1:-1;;;;;32928:11:0;;32942:22;32928:11;;;:7;:11;;;;;;:36;;32942:22;32928:36;:::i;:::-;-1:-1:-1;;;;;32914:11:0;;;;;;:7;:11;;;;;:50;32856:301;;;-1:-1:-1;;;;;32988:17:0;;;;;;:11;:17;;;;;;;;:36;;;;-1:-1:-1;;;;;;33009:15:0;;;;;;:11;:15;;;;;;;;32988:36;32984:173;;;-1:-1:-1;;;;;33057:13:0;;;;;;:7;:13;;;;;;:23;;33073:7;;33057:23;:::i;:::-;-1:-1:-1;;;;;33041:13:0;;;;;;;:7;:13;;;;;;:39;;;;33123:22;;33109:11;;;;;;;;;;:36;;33123:22;33109:36;:::i;:::-;-1:-1:-1;;;;;33095:11:0;;;;;;:7;:11;;;;;:50;32984:173;33173:17;;;;:21;33169:79;;33209:39;33224:4;33230:6;:17;;;33209:14;:39::i;:::-;33277:1;33263:6;:11;;;:15;:34;;;;33296:1;33282:6;:11;;;:15;33263:34;33259:75;;;33323:6;:11;;;33312:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;33259:75:0;33363:6;:11;;;33349:10;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;33411:22:0;;33392:42;;3264:25:1;;;-1:-1:-1;;;;;33392:42:0;;;;;;;;;;3252:2:1;3237:18;33392:42:0;;;;;;;-1:-1:-1;33452:4:0;;32191:1273;-1:-1:-1;;;;;32191:1273:0:o;30742:508::-;30824:16;;;;;;;30823:17;30815:65;;;;-1:-1:-1;;;30815:65:0;;23944:2:1;30815:65:0;;;23926:21:1;23983:2;23963:18;;;23956:30;24022:34;24002:18;;;23995:62;24093:5;24073:18;;;24066:33;24116:19;;30815:65:0;23742:399:1;30815:65:0;30896:20;30907:4;30913:2;30896:10;:20::i;:::-;30895:21;:37;;;;-1:-1:-1;30926:6:0;;-1:-1:-1;;;;;30920:12:0;;;30926:6;;30920:12;30895:37;30891:352;;;-1:-1:-1;;;;;30949:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;30949:30:0;30975:4;30949:30;;;30994:16;:23;;-1:-1:-1;;30994:23:0;30949:30;30994:23;;;;;31043:9;;;;31032:107;;31087:9;:36;;;;31117:4;31087:36;;;;;31032:107;31153:19;:26;;;;;;;;31199:32;;-1:-1:-1;2286:41:1;;31199:32:0;;2274:2:1;2259:18;31199:32:0;;;;;;;30742:508;;:::o;33472:1916::-;33566:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33566:18:0;33597:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33597:25:0;33633:19;33655:10;:8;:10::i;:::-;33633:32;-1:-1:-1;33695:21:0;33633:32;33695:7;:21;:::i;:::-;33678:14;;;:38;33733:20;33744:4;33750:2;33733:10;:20::i;:::-;33729:315;;;33801:9;;:38;;;;;-1:-1:-1;;;;;24427:15:1;;;33801:38:0;;;24409:34:1;24479:15;;;24459:18;;;24452:43;24511:18;;;24504:34;;;33770:12:0;;33801:9;;;;;:19;;24321:18:1;;33801:38:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;33801:38:0;;;;;;;;-1:-1:-1;;33801:38:0;;;;;;;;;;;;:::i;:::-;;;33797:164;;33937:8;;;33797:164;33890:5;-1:-1:-1;33981:7:0;33977:56;;34009:8;;;33977:56;33755:289;33729:315;34059:7;34056:1199;;;-1:-1:-1;;;;;34087:11:0;;;;;;:7;:11;;;;;;;;34083:663;;;34142:10;:18;34119:12;:41;;34142:18;;;;-1:-1:-1;;34179:43:0;;;;;;;34203:19;;;;;;34179:43;;-1:-1:-1;;34241:45:0;34266:20;;;;;;;;;34241:45;;;;;;;;;34083:663;;;-1:-1:-1;;;;;34312:13:0;;;;;;:7;:13;;;;;;;;34308:438;;;34369:9;:17;34346:12;:40;;34369:17;;;;-1:-1:-1;;34405:42:0;;;;;;;34429:18;;;;;;34405:42;;-1:-1:-1;;34466:44:0;34491:19;;;;;;;;;34466:44;;;;;;;;;34308:438;;;34574:14;:22;34551:12;:45;;34574:22;;;;-1:-1:-1;;34615:47:0;;;;;;;34639:23;;;;;;34615:47;;-1:-1:-1;;34681:49:0;34706:24;;;;;;;;;34681:49;;;;;;;;;34308:438;34787:12;:20;11625:5;;34777:30;;34787:20;;34777:7;:30;:::i;:::-;34776:51;;;;:::i;:::-;34762:11;;;:65;34898:12;:22;11625:5;;34874:46;;34898:22;;;;;;;34874:21;;;;:46;:::i;:::-;34863:58;;;;:7;:58;:::i;:::-;34862:79;;;;:::i;:::-;34842:17;;;:99;;;34992:11;;;;:31;;34842:99;34992:31;:::i;:::-;34981:43;;:7;:43;:::i;:::-;34956:68;;35055:11;;;;:25;;35069:11;;35055:25;:::i;:::-;35041:11;;;:39;34056:1199;;;35127:1;35113:11;;;:15;;;35143:17;;;:21;;;35179:32;;;35228:11;;;:15;34056:1199;35343:11;35323:6;:17;;;:31;;;;:::i;:::-;35308:6;:11;;;:47;;;;:::i;:::-;35290:6;:14;;;:66;;;;:::i;:::-;35265:22;;;:91;-1:-1:-1;35265:22:0;33472:1916;-1:-1:-1;;;;;33472:1916:0:o;35930:375::-;36073:10;:8;:10::i;:::-;36060:23;;:10;:23;:::i;:::-;36050:4;36034:22;;;;:7;:22;;;;;;:50;;;;:::i;:::-;36025:4;36009:22;;;;:7;:22;;;;;;;;:75;;;;36098:11;:26;;;;;;36095:104;;;36180:4;36164:22;;;;:7;:22;;;;;;:35;;36189:10;;36164:35;:::i;:::-;36155:4;36139:22;;;;:7;:22;;;;;:60;36095:104;36215:43;;3264:25:1;;;36240:4:0;;-1:-1:-1;;;;;36215:43:0;;;;;3252:2:1;3237:18;36215:43:0;;;;;;;35930:375;;:::o;245:118:1:-;331:5;324:13;317:21;310:5;307:32;297:60;;353:1;350;343:12;368:376;430:6;438;491:2;479:9;470:7;466:23;462:32;459:52;;;507:1;504;497:12;459:52;546:9;533:23;565:28;587:5;565:28;:::i;:::-;612:5;-1:-1:-1;669:2:1;654:18;;641:32;682:30;641:32;682:30;:::i;:::-;731:7;721:17;;;368:376;;;;;:::o;749:656::-;861:4;890:2;919;908:9;901:21;951:6;945:13;994:6;989:2;978:9;974:18;967:34;1019:1;1029:140;1043:6;1040:1;1037:13;1029:140;;;1138:14;;;1134:23;;1128:30;1104:17;;;1123:2;1100:26;1093:66;1058:10;;1029:140;;;1187:6;1184:1;1181:13;1178:91;;;1257:1;1252:2;1243:6;1232:9;1228:22;1224:31;1217:42;1178:91;-1:-1:-1;1321:2:1;1309:15;-1:-1:-1;;1305:88:1;1290:104;;;;1396:2;1286:113;;749:656;-1:-1:-1;;;749:656:1:o;1667:154::-;-1:-1:-1;;;;;1746:5:1;1742:54;1735:5;1732:65;1722:93;;1811:1;1808;1801:12;1826:315;1894:6;1902;1955:2;1943:9;1934:7;1930:23;1926:32;1923:52;;;1971:1;1968;1961:12;1923:52;2010:9;1997:23;2029:31;2054:5;2029:31;:::i;:::-;2079:5;2131:2;2116:18;;;;2103:32;;-1:-1:-1;;;1826:315:1:o;2338:388::-;2406:6;2414;2467:2;2455:9;2446:7;2442:23;2438:32;2435:52;;;2483:1;2480;2473:12;2435:52;2522:9;2509:23;2541:31;2566:5;2541:31;:::i;:::-;2591:5;-1:-1:-1;2648:2:1;2633:18;;2620:32;2661:33;2620:32;2661:33;:::i;2731:382::-;2796:6;2804;2857:2;2845:9;2836:7;2832:23;2828:32;2825:52;;;2873:1;2870;2863:12;2825:52;2912:9;2899:23;2931:31;2956:5;2931:31;:::i;3300:456::-;3377:6;3385;3393;3446:2;3434:9;3425:7;3421:23;3417:32;3414:52;;;3462:1;3459;3452:12;3414:52;3501:9;3488:23;3520:31;3545:5;3520:31;:::i;:::-;3570:5;-1:-1:-1;3627:2:1;3612:18;;3599:32;3640:33;3599:32;3640:33;:::i;:::-;3300:456;;3692:7;;-1:-1:-1;;;3746:2:1;3731:18;;;;3718:32;;3300:456::o;3761:180::-;3820:6;3873:2;3861:9;3852:7;3848:23;3844:32;3841:52;;;3889:1;3886;3879:12;3841:52;-1:-1:-1;3912:23:1;;3761:180;-1:-1:-1;3761:180:1:o;4135:247::-;4194:6;4247:2;4235:9;4226:7;4222:23;4218:32;4215:52;;;4263:1;4260;4253:12;4215:52;4302:9;4289:23;4321:31;4346:5;4321:31;:::i;4387:248::-;4455:6;4463;4516:2;4504:9;4495:7;4491:23;4487:32;4484:52;;;4532:1;4529;4522:12;4484:52;-1:-1:-1;;4555:23:1;;;4625:2;4610:18;;;4597:32;;-1:-1:-1;4387:248:1:o;4640:241::-;4696:6;4749:2;4737:9;4728:7;4724:23;4720:32;4717:52;;;4765:1;4762;4755:12;4717:52;4804:9;4791:23;4823:28;4845:5;4823:28;:::i;5335:159::-;5402:20;;5462:6;5451:18;;5441:29;;5431:57;;5484:1;5481;5474:12;5431:57;5335:159;;;:::o;5499:328::-;5573:6;5581;5589;5642:2;5630:9;5621:7;5617:23;5613:32;5610:52;;;5658:1;5655;5648:12;5610:52;5681:28;5699:9;5681:28;:::i;:::-;5671:38;;5728:37;5761:2;5750:9;5746:18;5728:37;:::i;:::-;5718:47;;5784:37;5817:2;5806:9;5802:18;5784:37;:::i;:::-;5774:47;;5499:328;;;;;:::o;5832:401::-;5914:6;5922;5930;5938;5991:3;5979:9;5970:7;5966:23;5962:33;5959:53;;;6008:1;6005;5998:12;5959:53;6031:28;6049:9;6031:28;:::i;:::-;6021:38;;6078:37;6111:2;6100:9;6096:18;6078:37;:::i;:::-;6068:47;;6134:37;6167:2;6156:9;6152:18;6134:37;:::i;:::-;6124:47;;6190:37;6223:2;6212:9;6208:18;6190:37;:::i;:::-;6180:47;;5832:401;;;;;;;:::o;6647:385::-;6733:6;6741;6749;6757;6810:3;6798:9;6789:7;6785:23;6781:33;6778:53;;;6827:1;6824;6817:12;6778:53;-1:-1:-1;;6850:23:1;;;6920:2;6905:18;;6892:32;;-1:-1:-1;6971:2:1;6956:18;;6943:32;;7022:2;7007:18;6994:32;;-1:-1:-1;6647:385:1;-1:-1:-1;6647:385:1:o;8721:184::-;8773:77;8770:1;8763:88;8870:4;8867:1;8860:15;8894:4;8891:1;8884:15;8910:184;8962:77;8959:1;8952:88;9059:4;9056:1;9049:15;9083:4;9080:1;9073:15;9099:184;9151:77;9148:1;9141:88;9248:4;9245:1;9238:15;9272:4;9269:1;9262:15;9288:125;9328:4;9356:1;9353;9350:8;9347:34;;;9361:18;;:::i;:::-;-1:-1:-1;9398:9:1;;9288:125::o;9418:195::-;9457:3;-1:-1:-1;;9481:5:1;9478:77;9475:103;;;9558:18;;:::i;:::-;-1:-1:-1;9605:1:1;9594:13;;9418:195::o;9618:128::-;9658:3;9689:1;9685:6;9682:1;9679:13;9676:39;;;9695:18;;:::i;:::-;-1:-1:-1;9731:9:1;;9618:128::o;10162:274::-;10202:1;10228;10218:189;;10263:77;10260:1;10253:88;10364:4;10361:1;10354:15;10392:4;10389:1;10382:15;10218:189;-1:-1:-1;10421:9:1;;10162:274::o;10441:228::-;10481:7;10607:1;-1:-1:-1;;10535:74:1;10532:1;10529:81;10524:1;10517:9;10510:17;10506:105;10503:131;;;10614:18;;:::i;:::-;-1:-1:-1;10654:9:1;;10441:228::o;11528:184::-;11598:6;11651:2;11639:9;11630:7;11626:23;11622:32;11619:52;;;11667:1;11664;11657:12;11619:52;-1:-1:-1;11690:16:1;;11528:184;-1:-1:-1;11528:184:1:o;12413:482::-;12502:1;12545:5;12502:1;12559:330;12580:7;12570:8;12567:21;12559:330;;;12699:4;-1:-1:-1;;12627:77:1;12621:4;12618:87;12615:113;;;12708:18;;:::i;:::-;12758:7;12748:8;12744:22;12741:55;;;12778:16;;;;12741:55;12857:22;;;;12817:15;;;;12559:330;;;12563:3;12413:482;;;;;:::o;12900:866::-;12949:5;12979:8;12969:80;;-1:-1:-1;13020:1:1;13034:5;;12969:80;13068:4;13058:76;;-1:-1:-1;13105:1:1;13119:5;;13058:76;13150:4;13168:1;13163:59;;;;13236:1;13231:130;;;;13143:218;;13163:59;13193:1;13184:10;;13207:5;;;13231:130;13268:3;13258:8;13255:17;13252:43;;;13275:18;;:::i;:::-;-1:-1:-1;;13331:1:1;13317:16;;13346:5;;13143:218;;13445:2;13435:8;13432:16;13426:3;13420:4;13417:13;13413:36;13407:2;13397:8;13394:16;13389:2;13383:4;13380:12;13376:35;13373:77;13370:159;;;-1:-1:-1;13482:19:1;;;13514:5;;13370:159;13561:34;13586:8;13580:4;13561:34;:::i;:::-;13691:6;-1:-1:-1;;13619:79:1;13610:7;13607:92;13604:118;;;13702:18;;:::i;:::-;13740:20;;12900:866;-1:-1:-1;;;12900:866:1:o;13771:140::-;13829:5;13858:47;13899:4;13889:8;13885:19;13879:4;13858:47;:::i;15785:224::-;15824:3;15852:6;15885:2;15882:1;15878:10;15915:2;15912:1;15908:10;15946:3;15942:2;15938:12;15933:3;15930:21;15927:47;;;15954:18;;:::i;:::-;15990:13;;15785:224;-1:-1:-1;;;;15785:224:1:o;16014:251::-;16084:6;16137:2;16125:9;16116:7;16112:23;16108:32;16105:52;;;16153:1;16150;16143:12;16105:52;16185:9;16179:16;16204:31;16229:5;16204:31;:::i;16959:245::-;17026:6;17079:2;17067:9;17058:7;17054:23;17050:32;17047:52;;;17095:1;17092;17085:12;17047:52;17127:9;17121:16;17146:28;17168:5;17146:28;:::i;19539:518::-;19600:3;19638:5;19632:12;19665:6;19660:3;19653:19;19691:4;19720:2;19715:3;19711:12;19704:19;;19742:5;19739:1;19732:16;19784:2;19781:1;19771:16;19805:1;19815:217;19829:6;19826:1;19823:13;19815:217;;;19894:13;;-1:-1:-1;;;;;19890:62:1;19878:75;;19973:12;;;;20020:1;20008:14;;;;19844:9;19815:217;;;-1:-1:-1;20048:3:1;;19539:518;-1:-1:-1;;;;;19539:518:1:o;20062:337::-;20266:6;20255:9;20248:25;20309:2;20304;20293:9;20289:18;20282:30;20229:4;20329:64;20389:2;20378:9;20374:18;20366:6;20329:64;:::i;20404:184::-;20456:77;20453:1;20446:88;20553:4;20550:1;20543:15;20577:4;20574:1;20567:15;20593:1164;20688:6;20719:2;20762;20750:9;20741:7;20737:23;20733:32;20730:52;;;20778:1;20775;20768:12;20730:52;20811:9;20805:16;20840:18;20881:2;20873:6;20870:14;20867:34;;;20897:1;20894;20887:12;20867:34;20935:6;20924:9;20920:22;20910:32;;20980:7;20973:4;20969:2;20965:13;20961:27;20951:55;;21002:1;20999;20992:12;20951:55;21031:2;21025:9;21053:2;21049;21046:10;21043:36;;;21059:18;;:::i;:::-;21105:2;21102:1;21098:10;21137:2;21131:9;-1:-1:-1;;21191:2:1;21187;21183:11;21179:84;21171:6;21167:97;21314:6;21302:10;21299:22;21294:2;21282:10;21279:18;21276:46;21273:72;;;21325:18;;:::i;:::-;21361:2;21354:22;21411:18;;;21445:15;;;;-1:-1:-1;21487:11:1;;;21483:20;;;21515:19;;;21512:39;;;21547:1;21544;21537:12;21512:39;21571:11;;;;21591:135;21607:6;21602:3;21599:15;21591:135;;;21673:10;;21661:23;;21624:12;;;;21704;;;;21591:135;;;21745:6;20593:1164;-1:-1:-1;;;;;;;;20593:1164:1:o;21762:610::-;22058:6;22047:9;22040:25;22101:6;22096:2;22085:9;22081:18;22074:34;22144:3;22139:2;22128:9;22124:18;22117:31;22021:4;22165:65;22225:3;22214:9;22210:19;22202:6;22165:65;:::i;:::-;-1:-1:-1;;;;;22266:55:1;;;;22261:2;22246:18;;22239:83;-1:-1:-1;22353:3:1;22338:19;22331:35;22157:73;21762:610;-1:-1:-1;;;21762:610:1:o;22377:954::-;22611:4;22659:3;22648:9;22644:19;22690:6;22679:9;22672:25;22716:2;22754:3;22749:2;22738:9;22734:18;22727:31;22778:6;22813;22807:13;22844:6;22836;22829:22;22882:3;22871:9;22867:19;22860:26;;22921:2;22913:6;22909:15;22895:29;;22942:1;22952:218;22966:6;22963:1;22960:13;22952:218;;;23031:13;;-1:-1:-1;;;;;23027:62:1;23015:75;;23145:15;;;;23110:12;;;;22988:1;22981:9;22952:218;;;-1:-1:-1;;;;;;;23226:55:1;;;;23221:2;23206:18;;23199:83;-1:-1:-1;;;23313:2:1;23298:18;23291:34;23187:3;22377:954;-1:-1:-1;;22377:954:1:o

Swarm Source

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