ETH Price: $2,476.42 (-1.77%)

Token

BreakMePlx (BMP)
 

Overview

Max Total Supply

99,979,290,544.205407521554408035 BMP

Holders

18

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
20,583,986.049684452089964595 BMP

Value
$0.00
0xe2f0194e734178749ffe007024e84a1af2c6c13d
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BreakMePlx

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**
BreakMePlx SmartContract 
*/

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

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

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

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1,
                                                  uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);
    function mint(address to) external returns (uint256 liquidity);
    function burn(address to) external returns (uint256 amount0, uint256 amount1);

    function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint256) external view returns (address pair);
    function allPairsLength() external view returns (uint256);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

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

    uint256 internal _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount,"ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

        _beforeTokenTransfer(address(0), account, amount);

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

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount,"ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

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

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

interface DividendPayingTokenOptionalInterface {
    function withdrawableDividendOf(address _owner) external view returns (uint256);
    function withdrawnDividendOf(address _owner) external view returns (uint256);
    function accumulativeDividendOf(address _owner) external view returns (uint256);
}

interface DividendPayingTokenInterface {
    function dividendOf(address _owner) external view returns (uint256);
    function distributeDividends() external payable;
    function withdrawDividend() external;

    event DividendsDistributed(address indexed from, uint256 weiAmount);
    event DividendWithdrawn(address indexed to, uint256 weiAmount);
}

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

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

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

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

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

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

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

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

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

contract Ownable is Context {
    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

contract DividendPayingToken is ERC20, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface
{
    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;

    uint256 internal constant magnitude = 2**128;

    uint256 internal magnifiedDividendPerShare;

    mapping(address => int256) internal magnifiedDividendCorrections;
    mapping(address => uint256) internal withdrawnDividends;

    uint256 public totalDividendsDistributed;

    constructor(string memory _name, string memory _symbol)
        ERC20(_name, _symbol)
    {}

    receive() external payable {
        distributeDividends();
    }

    function distributeDividends() public payable override {
        require(totalSupply() > 0);

        if (msg.value > 0) {
            magnifiedDividendPerShare = magnifiedDividendPerShare.add(
                (msg.value).mul(magnitude) / totalSupply()
            );
            emit DividendsDistributed(msg.sender, msg.value);

            totalDividendsDistributed = totalDividendsDistributed.add(
                msg.value
            );
        }
    }

    function withdrawDividend() public virtual override {
        _withdrawDividendOfUser(payable(msg.sender));
    }

    function _withdrawDividendOfUser(address payable user) internal virtual returns (uint256) {
        uint256 _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
            withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);
            emit DividendWithdrawn(user, _withdrawableDividend);
            (bool success, ) = user.call{value: _withdrawableDividend, gas: 3000}("");

            if (!success) {
                withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
                return 0;
            }

            return _withdrawableDividend;
        }

        return 0;
    }

    function dividendOf(address _owner) public view override returns (uint256) {
        return withdrawableDividendOf(_owner);
    }

    function withdrawableDividendOf(address _owner) public view override returns (uint256) {
        return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
    }

    function withdrawnDividendOf(address _owner) public view override returns (uint256) {
        return withdrawnDividends[_owner];
    }

    function accumulativeDividendOf(address _owner) public view override returns (uint256) {
        return
            magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe()
            .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude;
    }

    function _transfer(address from, address to, uint256 value) internal virtual override {
        require(false);

        int256 _magCorrection = magnifiedDividendPerShare.mul(value).toInt256Safe();
        magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from].add(_magCorrection);
        magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(_magCorrection);
    }

    function _mint(address account, uint256 value) internal override {
        super._mint(account, value);

        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
        .sub((magnifiedDividendPerShare.mul(value)).toInt256Safe());
    }

    function _burn(address account, uint256 value) internal override {
        super._burn(account, value);

        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
        .add((magnifiedDividendPerShare.mul(value)).toInt256Safe());
    }

    function _setBalance(address account, uint256 newBalance) internal {
        uint256 currentBalance = balanceOf(account);

        if (newBalance > currentBalance) {
            uint256 mintAmount = newBalance.sub(currentBalance);
            _mint(account, mintAmount);
        } 
        else if (newBalance < currentBalance) {
            uint256 burnAmount = currentBalance.sub(newBalance);
            _burn(account, burnAmount);
        }
    }
}

contract BreakMePlx is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;

    address public uniswapV2Pair;
    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    bool private swapping;
    bool public tradingEnabled = false;

    uint256 public sellAmount = 1;
    uint256 public buyAmount = 1;

    uint256 private totalSellFees;
    uint256 private totalBuyFees;

    BreakMePlxDividendTracker public dividendTracker;

    address payable public marketingWallet;
    address payable public devWallet;

    // Max tx, dividend threshold and tax variables
    uint256 public maxWallet;
    uint256 public maxTX;
    uint256 public swapTokensAtAmount;
    uint256 public sellRewardsFee;
    uint256 public sellDeadFees;
    uint256 public sellMarketingFees;
    uint256 public sellLiquidityFee;
    uint256 public buyDeadFees;
    uint256 public buyMarketingFees;
    uint256 public buyLiquidityFee;
    uint256 public buyRewardsFee;
    uint256 public transferFee;

    bool public swapAndLiquifyEnabled = true;

    uint256 public gasForProcessing = 300000;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) private canTransferBeforeTradingIsEnabled;
    mapping(address => uint256) private tokensVesting;
    mapping(address => bool) private _isVesting;
    mapping(address => uint256) private _vestingTimestamp;
    mapping(address => bool) private _diamondHands;
    mapping(address => bool) private _multiplier;
    mapping(address => uint256) private _holderBuy1Timestamp;
    mapping(address => uint256) private _holderBuy2Timestamp;
    uint256 private minimumForDiamondHands;

    // Limit variables for bot protection
    bool public limitsInEffect = true; //boolean used to turn limits on and off
    uint256 private gasPriceLimit; 
    mapping(address => uint256) private _holderLastTransferBlock; // for 1 tx per block
    mapping(address => uint256) private _holderLastTransferTimestamp; // for sell cooldown timer
    mapping(address => uint256) private _holderFirstBuyTimestamp;
    
   
    
    uint256 public launchblock;
    uint256 public launchtimestamp;
    
    uint256 public delay;
    uint256 public cooldowntimer = 60; //default cooldown 60s

    event EnableSwapAndLiquify(bool enabled);
    event SetPreSaleWallet(address wallet);
    event UpdateDividendTracker(address indexed newAddress, address indexed oldAddress);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event TradingEnabled();
    event UpdateFees(uint256 sellDeadFees, uint256 sellMarketingFees, uint256 sellLiquidityFee, uint256 sellRewardsFee,
                     uint256 buyDeadFees, uint256 buyMarketingFees, uint256 buyLiquidityFee, uint256 buyRewardsFee);

    event UpdateTransferFee(uint256 transferFee);
    event Airdrop(address holder, uint256 amount);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event GasForProcessingUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);
    event SendDividends(uint256 amount, uint256 opAmount, bool success);
    event ProcessedDividendTracker(uint256 iterations, uint256 claims, uint256 lastProcessedIndex,
                                   bool indexed automatic, uint256 gas, address indexed processor);

    event UpdatePayoutToken(address token);

    constructor() ERC20("BreakMePlx", "BMP") {
        marketingWallet = payable(0xB4ba72b728248Ba8caC7f1A8f560324340a6c239);
        devWallet = payable(0xD907F5DA5e6c0dbe9649658CED8B8eEA942d4122);
        address router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

        buyDeadFees = 2;
        sellDeadFees = 2;
        buyMarketingFees = 2;
        sellMarketingFees = 2;
        buyLiquidityFee = 0;
        sellLiquidityFee = 0;
        buyRewardsFee = 2;
        sellRewardsFee = 2;
        transferFee = 1;

        totalBuyFees = buyRewardsFee.add(buyLiquidityFee).add(buyMarketingFees);
        totalSellFees = sellRewardsFee.add(sellLiquidityFee).add(sellMarketingFees);

        dividendTracker = new BreakMePlxDividendTracker(payable(this), router, 0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56,
                                                   "BreakMePlxTRACKER", "BMPTRACKER");

        uniswapV2Router = IUniswapV2Router02(router);
        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
                address(this),
                uniswapV2Router.WETH()
            );

        _setAutomatedMarketMakerPair(uniswapV2Pair, true);

        // exclude from receiving dividends
        dividendTracker.excludeFromDividends(address(dividendTracker));
        dividendTracker.excludeFromDividends(address(this));
        dividendTracker.excludeFromDividends(DEAD);
        dividendTracker.excludedFromDividends(address(0));
        dividendTracker.excludeFromDividends(router);
        dividendTracker.excludeFromDividends(marketingWallet);
        dividendTracker.excludeFromDividends(owner());

        // exclude from paying fees or having max transaction amount
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[address(dividendTracker)] = true;
        _isExcludedFromFees[address(marketingWallet)] = true;
        _isExcludedFromFees[address(devWallet)] = true;
        _isExcludedFromFees[msg.sender] = true;

        uint256 totalTokenSupply = (100_000_000_000) * (10**18);
        _mint(owner(), totalTokenSupply); // only time internal mint function is ever called is to create supply
        swapTokensAtAmount = totalTokenSupply / 2000; // 0.05%
        minimumForDiamondHands = totalTokenSupply / 2000; // 0.05%
        canTransferBeforeTradingIsEnabled[owner()] = true;
        canTransferBeforeTradingIsEnabled[address(this)] = true;
    }

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

    receive() external payable {}

    // writeable function to enable trading, can only enable, trading can never be disabled
    function enableTrading(uint256 initialMaxGwei, uint256 initialMaxWallet, uint256 initialMaxTX,
                           uint256 setDelay) external onlyOwner {
        initialMaxWallet = initialMaxWallet * (10**18);
        initialMaxTX = initialMaxTX * (10**18);
        require(!tradingEnabled);
        require(initialMaxWallet >= _totalSupply / 1000,"cannot set below 0.1%");
        require(initialMaxTX >= _totalSupply / 1000,"cannot set below 0.1%");
        maxWallet = initialMaxWallet;
        maxTX = initialMaxTX;
        gasPriceLimit = initialMaxGwei * 1 gwei;
        tradingEnabled = true;
        launchblock = block.number;
        launchtimestamp = block.timestamp;
        delay = setDelay;
        emit TradingEnabled();
    }
    // use for pre sale wallet, adds all exclusions to it
    function setPresaleWallet(address wallet) external onlyOwner {
        canTransferBeforeTradingIsEnabled[wallet] = true;
        _isExcludedFromFees[wallet] = true;
        dividendTracker.excludeFromDividends(wallet);
        emit SetPreSaleWallet(wallet);
    }
    
    // exclude a wallet from fees 
    function setExcludeFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    // exclude from dividends (rewards)
    function setExcludeDividends(address account) public onlyOwner {
        dividendTracker.excludeFromDividends(account);
    }

    // include in dividends 
    function setIncludeDividends(address account) public onlyOwner {
        dividendTracker.includeFromDividends(account);
        dividendTracker.setBalance(account, getMultiplier(account));
    }

    //allow a wallet to trade before trading enabled
    function setCanTransferBefore(address wallet, bool enable) external onlyOwner {
        canTransferBeforeTradingIsEnabled[wallet] = enable;
    }

    // turn limits on and off
    function setLimitsInEffect(bool value) external onlyOwner {
        limitsInEffect = value;
    }

    // set max GWEI
    function setGasPriceLimit(uint256 GWEI) external onlyOwner {
        require(GWEI >= 50, "can never be set lower than 50");
        gasPriceLimit = GWEI * 1 gwei;
    }

    // set cooldown timer, can only be between 0 and 300 seconds (5 mins max)
    function setcooldowntimer(uint256 value) external onlyOwner {
        require(value <= 300, "cooldown timer cannot exceed 5 minutes");
        cooldowntimer = value;
    }

    // set max wallet, can not be lower than 0.1% of supply
    function setmaxWallet(uint256 value) external onlyOwner {
        value = value * (10**18);
        require(value >= _totalSupply / 1000, "max wallet cannot be set to less than 0.1%");
        maxWallet = value;
    }

    // in case any ETH gets stuck in the contract
    function Sweep() external onlyOwner {
        uint256 amountETH = address(this).balance;
        payable(msg.sender).transfer(amountETH);
    }

    // set max tx, can not be lower than 0.1% of supply
    function setmaxTX(uint256 value) external onlyOwner {
        value = value * (10**18);
        require(value >= _totalSupply / 1000, "max tx cannot be set to less than 0.1%");
        maxTX = value;
    }

    function setMinimumForDiamondHands (uint256 value) external onlyOwner {
        value = value * (10**18);
        require(value <= _totalSupply / 2000, "cannot be set to less than 0.05%");
        minimumForDiamondHands = value;
    }

    // rewards threshold
    function setSwapTriggerAmount(uint256 amount) public onlyOwner {
        swapTokensAtAmount = amount * (10**18);
    }

    function enableSwapAndLiquify(bool enabled) public onlyOwner {
        require(swapAndLiquifyEnabled != enabled);
        swapAndLiquifyEnabled = enabled;
        emit EnableSwapAndLiquify(enabled);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        _setAutomatedMarketMakerPair(pair, value);
    }

    function setAllowCustomTokens(bool allow) public onlyOwner {
        dividendTracker.setAllowCustomTokens(allow);
    }

    function setAllowAutoReinvest(bool allow) public onlyOwner {
        dividendTracker.setAllowAutoReinvest(allow);
    }

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

        if (value) {
            dividendTracker.excludeFromDividends(pair);
        }

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateGasForProcessing(uint256 newValue) public onlyOwner {
        require(newValue >= 200000 && newValue <= 5000000);
        emit GasForProcessingUpdated(newValue, gasForProcessing);
        gasForProcessing = newValue;
    }

    function transferAdmin(address newOwner) public onlyOwner {
        dividendTracker.excludeFromDividends(newOwner);
        _isExcludedFromFees[newOwner] = true;
        transferOwnership(newOwner);
    }

    function updateTransferFee(uint256 newTransferFee) public onlyOwner {
        require (newTransferFee <= 5, "transfer fee cannot exceed 5%");
        transferFee = newTransferFee;
        emit UpdateTransferFee(transferFee);
    }

    function updateRewardsMultiplier() external {
        if (!_multiplier[msg.sender]) {
                    _multiplier[msg.sender] = true;
                }
        dividendTracker.setBalance(msg.sender, getMultiplier(msg.sender));
    }

    function updateFees(uint256 deadBuy, uint256 deadSell, uint256 marketingBuy, uint256 marketingSell,
                        uint256 liquidityBuy, uint256 liquiditySell, uint256 RewardsBuy,
                        uint256 RewardsSell) public onlyOwner {
        
        buyDeadFees = deadBuy;
        buyMarketingFees = marketingBuy;
        buyLiquidityFee = liquidityBuy;
        buyRewardsFee = RewardsBuy;
        sellDeadFees = deadSell;
        sellMarketingFees = marketingSell;
        sellLiquidityFee = liquiditySell;
        sellRewardsFee = RewardsSell;

        totalSellFees = sellRewardsFee.add(sellLiquidityFee).add(sellMarketingFees);

        totalBuyFees = buyRewardsFee.add(buyLiquidityFee).add(buyMarketingFees);
        require(deadBuy <= 3 && deadSell <= 3, "burn fees cannot exceed 3%");
        require(totalSellFees <= 10 && totalBuyFees <= 10, "total fees cannot exceed 10%");

        emit UpdateFees(sellDeadFees, sellMarketingFees, sellLiquidityFee, sellRewardsFee, buyDeadFees,
                        buyMarketingFees, buyLiquidityFee, buyRewardsFee);
    }

    function getTotalDividendsDistributed() external view returns (uint256) {
        return dividendTracker.totalDividendsDistributed();
    }

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

    function withdrawableDividendOf(address account) public view returns (uint256) {
        return dividendTracker.withdrawableDividendOf(account);
    }

    function dividendTokenBalanceOf(address account) public view returns (uint256) {
        return dividendTracker.balanceOf(account);
    }

    function getAccountDividendsInfo(address account) external view returns (address, int256, int256, uint256,
                                                                             uint256, uint256) {
        return dividendTracker.getAccount(account);
    }

    function getAccountDividendsInfoAtIndex(uint256 index) external view returns (address, int256, int256,
                                                                                  uint256, uint256, uint256) {
        return dividendTracker.getAccountAtIndex(index);
    }

    function processDividendTracker(uint256 gas) external {
        (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) = dividendTracker.process(gas);
        emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, false, gas, tx.origin);
    }

    function claim() external {
        dividendTracker.processAccount(payable(msg.sender), false);
    }

    function getLastProcessedIndex() external view returns (uint256) {
        return dividendTracker.getLastProcessedIndex();
    }

    function getNumberOfDividendTokenHolders() external view returns (uint256) {
        return dividendTracker.getNumberOfTokenHolders();
    }

    function setAutoClaim(bool value) external {
        dividendTracker.setAutoClaim(msg.sender, value);
    }

    function setReinvest(bool value) external {
        dividendTracker.setReinvest(msg.sender, value);
    }

    function setDividendsPaused(bool value) external onlyOwner {
        dividendTracker.setDividendsPaused(value);
    }

    function isExcludedFromAutoClaim(address account) external view returns (bool) {
        return dividendTracker.isExcludedFromAutoClaim(account);
    }

    function isReinvest(address account) external view returns (bool) {
        return dividendTracker.isReinvest(account);
    }

    function _transfer(address from, address to, uint256 amount) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        uint256 RewardsFee;
        uint256 deadFees;
        uint256 marketingFees;
        uint256 liquidityFee;

        if (!canTransferBeforeTradingIsEnabled[from]) {
            require(tradingEnabled, "Trading has not yet been enabled");
        }
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        } 

        if (_isVesting[from]) {
            if (block.timestamp < _vestingTimestamp[from] + 5 minutes) {
                require(balanceOf(from) - amount >= tokensVesting[from], "cant sell vested tokens");
            }
            else {
                tokensVesting[from] = 0;
                _isVesting[from] = false;
            }
        }

        
        else if (!swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            bool isSelling = automatedMarketMakerPairs[to];
            bool isBuying = automatedMarketMakerPairs[from];

            if (!isBuying && !isSelling) {
                if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
                    uint256 tFees = amount.mul(transferFee).div(100);
                    amount = amount.sub(tFees);
                    super._transfer(from, address(this), tFees);
                    super._transfer(from, to, amount);
                    dividendTracker.setBalance(from, getMultiplier(from));
                    dividendTracker.setBalance(to, getMultiplier(to));
                    _diamondHands[from] = false;
                    _multiplier[from] = false;
                    _holderFirstBuyTimestamp[from] = block.timestamp;
                    return;
                }
                else {
                    super._transfer(from, to, amount);
                    dividendTracker.setBalance(from, getMultiplier(from));
                    dividendTracker.setBalance(to, getMultiplier(to));
                    _diamondHands[from] = false;
                    _multiplier[from] = false;
                    _holderFirstBuyTimestamp[from] = block.timestamp;
                    return;
                }
            }

            else if (isSelling) {
                if (amount >= minimumForDiamondHands) {
                    RewardsFee = 8;
                }
                else {
                    RewardsFee = sellRewardsFee;
                }
                deadFees = sellDeadFees;
                marketingFees = sellMarketingFees;
                liquidityFee = sellLiquidityFee;

                if (limitsInEffect) {
                require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer,
                        "cooldown period active");
                require(amount <= maxTX,"above max transaction limit");
                _holderLastTransferTimestamp[tx.origin] = block.timestamp;

                }
                _diamondHands[from] = false;
                _multiplier[from] = false;
                _holderFirstBuyTimestamp[from] = block.timestamp;


            } else if (isBuying) {

                if (_diamondHands[to]) {
                    if (block.timestamp >= _holderBuy1Timestamp[to] + 5 minutes && balanceOf(to) >= minimumForDiamondHands) {
                        super._transfer(from, to, amount);
                        dividendTracker.setBalance(from, getMultiplier(from));
                        dividendTracker.setBalance(to, getMultiplier(to));
                        return;
                    }
                }

                if (!_multiplier[to]) {
                    _multiplier[to] = true;
                    _holderFirstBuyTimestamp[to] = block.timestamp;
                }

                if (!_diamondHands[to]) {
                    _diamondHands[to] = true;
                    _holderBuy1Timestamp[to] = block.timestamp;
                }

                RewardsFee = buyRewardsFee;
                deadFees = buyDeadFees;
                marketingFees = buyMarketingFees;
                liquidityFee = buyLiquidityFee;

                if (limitsInEffect) {
                require(block.timestamp > launchtimestamp + delay,"you shall not pass");
                require(tx.gasprice <= gasPriceLimit,"Gas price exceeds limit.");
                require(_holderLastTransferBlock[tx.origin] != block.number,"Too many TX in block");
                require(amount <= maxTX,"above max transaction limit");
                _holderLastTransferBlock[tx.origin] = block.number;
                }

                uint256 contractBalanceRecipient = balanceOf(to);
                require(contractBalanceRecipient + amount <= maxWallet,"Exceeds maximum wallet token amount." );
            }

            uint256 totalFees = RewardsFee.add(liquidityFee + marketingFees);

            uint256 contractTokenBalance = balanceOf(address(this));

            bool canSwap = contractTokenBalance >= swapTokensAtAmount;

            if (canSwap && isSelling) {
                swapping = true;

                if (swapAndLiquifyEnabled && liquidityFee > 0 && totalBuyFees > 0) {
                    uint256 totalBuySell = buyAmount.add(sellAmount);
                    uint256 swapAmountBought = contractTokenBalance.mul(buyAmount).div(totalBuySell);
                    uint256 swapAmountSold = contractTokenBalance.mul(sellAmount).div(totalBuySell);
                    uint256 swapBuyTokens = swapAmountBought.mul(liquidityFee).div(totalBuyFees);
                    uint256 swapSellTokens = swapAmountSold.mul(liquidityFee).div(totalSellFees);
                    uint256 swapTokens = swapSellTokens.add(swapBuyTokens);

                    swapAndLiquify(swapTokens);
                }

                uint256 remainingBalance = balanceOf(address(this));
                swapAndSendDividends(remainingBalance);
                buyAmount = 1;
                sellAmount = 1;
                swapping = false;
            }

            uint256 fees = amount.mul(totalFees).div(100);
            uint256 burntokens;

            if (deadFees > 0) {
            burntokens = amount.mul(deadFees) / 100;
            super._transfer(from, DEAD, burntokens);
            _totalSupply = _totalSupply.sub(burntokens);

            }

            amount = amount.sub(fees + burntokens);

            if (isSelling) {
                sellAmount = sellAmount.add(fees);
            } 
            else {
                buyAmount = buyAmount.add(fees);
            }

            super._transfer(from, address(this), fees);

            uint256 gas = gasForProcessing;

            try dividendTracker.process(gas) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) {
                emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, true, gas, tx.origin);
            } catch {}
        }

        super._transfer(from, to, amount);
        dividendTracker.setBalance(from, getMultiplier(from));
        dividendTracker.setBalance(to, getMultiplier(to));
    }

    function getMultiplier(address account) private view returns (uint256) {
        uint256 multiplier;
        if (_multiplier[account] && block.timestamp > _holderFirstBuyTimestamp[account] + 1 minutes && 
            block.timestamp < _holderFirstBuyTimestamp[account] + 2 minutes) {
            multiplier = balanceOf(account).mul(3);
        }
        else if (_multiplier[account] && block.timestamp > _holderFirstBuyTimestamp[account] + 2 minutes && 
                 block.timestamp < _holderFirstBuyTimestamp[account] + 3 minutes) {
                     multiplier = balanceOf(account).mul(5);
        }
        else if (_multiplier[account] && block.timestamp > _holderFirstBuyTimestamp[account] + 3 minutes) {
                     multiplier = balanceOf(account).mul(7);
        }
        else {
            multiplier = balanceOf(account);
        }
        
        return
                multiplier;
    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens.div(2);
        uint256 otherHalf = tokens.sub(half);
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered
        uint256 newBalance = address(this).balance.sub(initialBalance);
        addLiquidity(otherHalf, newBalance);
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function updatePayoutToken(address token) public onlyOwner {
        dividendTracker.updatePayoutToken(token);
        emit UpdatePayoutToken(token);
    }

    function getPayoutToken() public view returns (address) {
        return dividendTracker.getPayoutToken();
    }

    function setMinimumTokenBalanceForAutoDividends(uint256 value) public onlyOwner {
        dividendTracker.setMinimumTokenBalanceForAutoDividends(value);
    }

    function setMinimumTokenBalanceForDividends(uint256 value) public onlyOwner {
        dividendTracker.setMinimumTokenBalanceForDividends(value);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function forceSwapAndSendDividends(uint256 tokens) public onlyOwner {
        tokens = tokens * (10**18);
        uint256 totalAmount = buyAmount.add(sellAmount);
        uint256 fromBuy = tokens.mul(buyAmount).div(totalAmount);
        uint256 fromSell = tokens.mul(sellAmount).div(totalAmount);

        swapAndSendDividends(tokens);

        buyAmount = buyAmount.sub(fromBuy);
        sellAmount = sellAmount.sub(fromSell);
    }

    function swapAndSendDividends(uint256 tokens) private {
        if (tokens == 0) {
            return;
        }
        swapTokensForEth(tokens);
        uint256 totalAmount = buyAmount.add(sellAmount);

        bool success = true;
        bool successOp1 = true;

        uint256 dividends;
        uint256 dividendsFromBuy;
        uint256 dividendsFromSell;

        if (buyRewardsFee > 0) {
            dividendsFromBuy = address(this).balance.mul(buyAmount).div(totalAmount)
            .mul(buyRewardsFee).div(buyRewardsFee + buyMarketingFees);
        }
        if (sellRewardsFee > 0) {
            dividendsFromSell = address(this).balance.mul(sellAmount).div(totalAmount)
            .mul(sellRewardsFee).div(sellRewardsFee + sellMarketingFees);
        }
        dividends = dividendsFromBuy.add(dividendsFromSell);

        if (dividends > 0) {
            (success, ) = address(dividendTracker).call{value: dividends}("");
        }
        
        uint256 _completeFees = sellMarketingFees + buyMarketingFees;

        uint256 feePortions;
        if (_completeFees > 0) {
            feePortions = address(this).balance.div(_completeFees);
        }
        uint256 marketingPayout = buyMarketingFees.add(sellMarketingFees).mul(feePortions);

        if (marketingPayout > 0) {
            (successOp1, ) = address(marketingWallet).call{value: marketingPayout}("");
        }

        emit SendDividends(dividends, marketingPayout, success && successOp1);
    }

    function airdropToWallets(
        address[] memory airdropWallets,
        uint256[] memory amount
    ) external onlyOwner {
        require(airdropWallets.length == amount.length,"Arrays must be the same length");
        require(airdropWallets.length <= 200, "Wallets list length must be <= 200");
        for (uint256 i = 0; i < airdropWallets.length; i++) {
            address wallet = airdropWallets[i];
            uint256 airdropAmount = amount[i] * (10**18);
            super._transfer(msg.sender, wallet, airdropAmount);
            dividendTracker.setBalance(payable(wallet), getMultiplier(wallet));
        }
    }

    function airdropToWalletsAndVest(
        address[] memory airdropWallets,
        uint256[] memory amount
    ) external onlyOwner {
        require(airdropWallets.length == amount.length, "Arrays must be the same length");
        require(airdropWallets.length <= 200, "Wallets list length must be <= 200");
        for (uint256 i = 0; i < airdropWallets.length; i++) {
            address wallet = airdropWallets[i];
            uint256 airdropAmount = amount[i] * (10**18);
            super._transfer(msg.sender, wallet, airdropAmount);
            dividendTracker.setBalance(payable(wallet), getMultiplier(wallet));
            tokensVesting[wallet] = airdropAmount;
            _isVesting[wallet] = true;
            _vestingTimestamp[wallet] = block.timestamp;
        }
    }
}

contract BreakMePlxDividendTracker is DividendPayingToken, Ownable {
    using SafeMath for uint256;
    using SafeMathInt for int256;
    using IterableMapping for IterableMapping.Map;

    IterableMapping.Map private tokenHoldersMap;
    uint256 public lastProcessedIndex;

    mapping(address => bool) public excludedFromDividends;
    mapping(address => bool) public excludedFromAutoClaim;
    mapping(address => bool) public autoReinvest;
    address public defaultToken;
    bool public allowCustomTokens;
    bool public allowAutoReinvest;
    bool public dividendsPaused = false;

    string private trackerName;
    string private trackerTicker;

    IUniswapV2Router02 public uniswapV2Router;

    BreakMePlx public BreakMePlxContract;

    mapping(address => uint256) public lastClaimTimes;

    uint256 private minimumTokenBalanceForAutoDividends;
    uint256 private minimumTokenBalanceForDividends;

    event ExcludeFromDividends(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event DividendReinvested(address indexed acount, uint256 value, bool indexed automatic);
    event Claim(address indexed account, uint256 amount, bool indexed automatic);
    event DividendsPaused(bool paused);
    event SetAllowCustomTokens(bool allow);
    event SetAllowAutoReinvest(bool allow);

    constructor(address payable mainContract, address router, address token, string memory _name,
                string memory _ticker) DividendPayingToken(_name, _ticker) {
        
        trackerName = _name;
        trackerTicker = _ticker;
        defaultToken = token;
        BreakMePlxContract = BreakMePlx(mainContract);
        minimumTokenBalanceForAutoDividends = 1_000000000000000000; // 1 token
        minimumTokenBalanceForDividends = minimumTokenBalanceForAutoDividends;

        uniswapV2Router = IUniswapV2Router02(router);
        allowCustomTokens = true;
        allowAutoReinvest = false;
    }

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

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

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

    function _transfer(address, address, uint256) internal pure override {
        require(false, "No transfers allowed");
    }

    function withdrawDividend() public pure override {
        require(false, "withdrawDividend disabled. Use the 'claim' function on the main BreakMePlx contract.");
    }

    function isExcludedFromAutoClaim(address account) external view onlyOwner returns (bool) {
        return excludedFromAutoClaim[account];
    }

    function isReinvest(address account) external view onlyOwner returns (bool) {
        return autoReinvest[account];
    }

    function setAllowCustomTokens(bool allow) external onlyOwner {
        require(allowCustomTokens != allow);
        allowCustomTokens = allow;
        emit SetAllowCustomTokens(allow);
    }

    function setAllowAutoReinvest(bool allow) external onlyOwner {
        require(allowAutoReinvest != allow);
        allowAutoReinvest = allow;
        emit SetAllowAutoReinvest(allow);
    }

    function excludeFromDividends(address account) external onlyOwner {
        //require(!excludedFromDividends[account]);
        excludedFromDividends[account] = true;

        _setBalance(account, 0);
        tokenHoldersMap.remove(account);

        emit ExcludeFromDividends(account);
    }

    function includeFromDividends(address account) external onlyOwner {
        excludedFromDividends[account] = false;
    }

    function setAutoClaim(address account, bool value) external onlyOwner {
        excludedFromAutoClaim[account] = value;
    }

    function setReinvest(address account, bool value) external onlyOwner {
        autoReinvest[account] = value;
    }

    function setMinimumTokenBalanceForAutoDividends(uint256 value) external onlyOwner {
        minimumTokenBalanceForAutoDividends = value * (10**18);
    }

    function setMinimumTokenBalanceForDividends(uint256 value) external onlyOwner {
        minimumTokenBalanceForDividends = value * (10**18);
    }

    function setDividendsPaused(bool value) external onlyOwner {
        require(dividendsPaused != value);
        dividendsPaused = value;
        emit DividendsPaused(value);
    }

    function getLastProcessedIndex() external view returns (uint256) {
        return lastProcessedIndex;
    }

    function getNumberOfTokenHolders() external view returns (uint256) {
        return tokenHoldersMap.keys.length;
    }

    function getAccount(address _account) public view returns (address account, int256 index, int256 iterationsUntilProcessed,
                                                               uint256 withdrawableDividends, uint256 totalDividends,
                                                               uint256 lastClaimTime) {
        account = _account;
        index = tokenHoldersMap.getIndexOfKey(account);
        iterationsUntilProcessed = -1;

        if (index >= 0) {
            if (uint256(index) > lastProcessedIndex) {
                iterationsUntilProcessed = index.sub(int256(lastProcessedIndex));
            } 
            else {
                uint256 processesUntilEndOfArray = tokenHoldersMap.keys.length >
                    lastProcessedIndex
                    ? tokenHoldersMap.keys.length.sub(lastProcessedIndex)
                    : 0;

                iterationsUntilProcessed = index.add(int256(processesUntilEndOfArray));
            }
        }

        withdrawableDividends = withdrawableDividendOf(account);
        totalDividends = accumulativeDividendOf(account);

        lastClaimTime = lastClaimTimes[account];
    }

    function getAccountAtIndex(uint256 index) public view returns (address, int256, int256, uint256,
                                                                   uint256, uint256) {
        if (index >= tokenHoldersMap.size()) {
            return (0x0000000000000000000000000000000000000000, -1, -1, 0, 0, 0);
        }

        address account = tokenHoldersMap.getKeyAtIndex(index);

        return getAccount(account);
    }

    function setBalance(address account, uint256 newBalance) external onlyOwner
    {
        if (excludedFromDividends[account]) {
            return;
        }

        if (newBalance < minimumTokenBalanceForDividends) {
            tokenHoldersMap.remove(account);
            _setBalance(account, 0);

            return;
        }

        _setBalance(account, newBalance);

        if (newBalance >= minimumTokenBalanceForAutoDividends) {
            tokenHoldersMap.set(account, newBalance);
        } 
        else {
            tokenHoldersMap.remove(account);
        }
    }

    function process(uint256 gas) public returns (uint256, uint256, uint256)
    {
        uint256 numberOfTokenHolders = tokenHoldersMap.keys.length;

        if (numberOfTokenHolders == 0 || dividendsPaused) {
            return (0, 0, lastProcessedIndex);
        }

        uint256 _lastProcessedIndex = lastProcessedIndex;

        uint256 gasUsed = 0;

        uint256 gasLeft = gasleft();

        uint256 iterations = 0;
        uint256 claims = 0;

        while (gasUsed < gas && iterations < numberOfTokenHolders) {
            _lastProcessedIndex++;

            if (_lastProcessedIndex >= numberOfTokenHolders) {
                _lastProcessedIndex = 0;
            }

            address account = tokenHoldersMap.keys[_lastProcessedIndex];

            if (!excludedFromAutoClaim[account]) {
                if (processAccount(payable(account), true)) {
                    claims++;
                }
            }

            iterations++;

            uint256 newGasLeft = gasleft();

            if (gasLeft > newGasLeft) {
                gasUsed = gasUsed.add(gasLeft.sub(newGasLeft));
            }

            gasLeft = newGasLeft;
        }

        lastProcessedIndex = _lastProcessedIndex;

        return (iterations, claims, lastProcessedIndex);
    }

    function processAccount(address payable account, bool automatic) public onlyOwner
        returns (bool)
    {
        if (dividendsPaused) {
            return false;
        }

        bool reinvest = autoReinvest[account];

        if (automatic && reinvest && !allowAutoReinvest) {
            return false;
        }

        uint256 amount = reinvest
            ? _reinvestDividendOfUser(account)
            : _withdrawDividendOfUser(account);

        if (amount > 0) {
            lastClaimTimes[account] = block.timestamp;
            if (reinvest) {
                emit DividendReinvested(account, amount, automatic);
            } 
            else {
                emit Claim(account, amount, automatic);
            }
            return true;
        }

        return false;
    }

    function updateUniswapV2Router(address newAddress) public onlyOwner {
        uniswapV2Router = IUniswapV2Router02(newAddress);
    }

    function updatePayoutToken(address token) public onlyOwner {
        defaultToken = token;
    }

    function getPayoutToken() public view returns (address) {
        return defaultToken;
    }

    function _reinvestDividendOfUser(address account) private returns (uint256) {
        uint256 _withdrawableDividend = withdrawableDividendOf(account);
        if (_withdrawableDividend > 0) {
            bool success;

            withdrawnDividends[account] = withdrawnDividends[account].add(_withdrawableDividend);

            address[] memory path = new address[](2);
            path[0] = uniswapV2Router.WETH();
            path[1] = address(BreakMePlxContract);

            uint256 prevBalance = BreakMePlxContract.balanceOf(address(this));

            // make the swap
            try
                uniswapV2Router
                    .swapExactETHForTokensSupportingFeeOnTransferTokens{value: _withdrawableDividend}
                    (0, path, address(this), block.timestamp)
            {
                uint256 received = BreakMePlxContract.balanceOf(address(this)).sub(prevBalance);
                if (received > 0) {
                    success = true;
                    BreakMePlxContract.transfer(account, received);
                } 
                else {
                    success = false;
                }
            } catch {
                success = false;
            }

            if (!success) {
                withdrawnDividends[account] = withdrawnDividends[account].sub(_withdrawableDividend);
                return 0;
            }

            return _withdrawableDividend;
        }

        return 0;
    }

    function _withdrawDividendOfUser(address payable user) internal override returns (uint256)
    {
        uint256 _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
            withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);

            address tokenAddress = defaultToken;
            bool success;

            if (tokenAddress == address(0)) {
                (success, ) = user.call{value: _withdrawableDividend, gas: 3000}("");
            } 
            else {
                address[] memory path = new address[](2);
                path[0] = uniswapV2Router.WETH();
                path[1] = tokenAddress;
                try
                    uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{
                    value: _withdrawableDividend}(0, path, user, block.timestamp)
                {
                    success = true;
                } catch {
                    success = false;
                }
            }

            if (!success) {
                withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
                return 0;
            } 
            else {
                emit DividendWithdrawn(user, _withdrawableDividend);
            }
            return _withdrawableDividend;
        }
        return 0;
    }
}

library IterableMapping {
    // Iterable mapping from address to uint;
    struct Map {
        address[] keys;
        mapping(address => uint256) values;
        mapping(address => uint256) indexOf;
        mapping(address => bool) inserted;
    }

    function get(Map storage map, address key) internal view returns (uint256) {
        return map.values[key];
    }

    function getIndexOfKey(Map storage map, address key) internal view returns (int256) {
        if (!map.inserted[key]) {
            return -1;
        }
        return int256(map.indexOf[key]);
    }

    function getKeyAtIndex(Map storage map, uint256 index) internal view returns (address) {
        return map.keys[index];
    }

    function size(Map storage map) internal view returns (uint256) {
        return map.keys.length;
    }

    function set(Map storage map, address key, uint256 val) internal {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(Map storage map, address key) internal {
        if (!map.inserted[key]) {
            return;
        }

        delete map.inserted[key];
        delete map.values[key];

        uint256 index = map.indexOf[key];
        uint256 lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];

        map.indexOf[lastKey] = index;
        delete map.indexOf[key];

        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Airdrop","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"EnableSwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"opAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"SetPreSaleWallet","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":[],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellDeadFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellRewardsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyDeadFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyRewardsFee","type":"uint256"}],"name":"UpdateFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"UpdatePayoutToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"transferFee","type":"uint256"}],"name":"UpdateTransferFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropToWalletsAndVest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDeadFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldowntimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract BreakMePlxDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"initialMaxGwei","type":"uint256"},{"internalType":"uint256","name":"initialMaxWallet","type":"uint256"},{"internalType":"uint256","name":"initialMaxTX","type":"uint256"},{"internalType":"uint256","name":"setDelay","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"forceSwapAndSendDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountDividendsInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getAccountDividendsInfoAtIndex","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPayoutToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","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":"isExcludedFromAutoClaim","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":"isReinvest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchblock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchtimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDeadFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"allow","type":"bool"}],"name":"setAllowAutoReinvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"allow","type":"bool"}],"name":"setAllowCustomTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutoClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setCanTransferBefore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setDividendsPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setExcludeDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"GWEI","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setIncludeDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setLimitsInEffect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMinimumForDiamondHands","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMinimumTokenBalanceForAutoDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMinimumTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setPresaleWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setReinvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTriggerAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setcooldowntimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setmaxTX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setmaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"newOwner","type":"address"}],"name":"transferAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"deadBuy","type":"uint256"},{"internalType":"uint256","name":"deadSell","type":"uint256"},{"internalType":"uint256","name":"marketingBuy","type":"uint256"},{"internalType":"uint256","name":"marketingSell","type":"uint256"},{"internalType":"uint256","name":"liquidityBuy","type":"uint256"},{"internalType":"uint256","name":"liquiditySell","type":"uint256"},{"internalType":"uint256","name":"RewardsBuy","type":"uint256"},{"internalType":"uint256","name":"RewardsSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"updatePayoutToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateRewardsMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTransferFee","type":"uint256"}],"name":"updateTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260088054600161ff0160a01b03191661dead17905560016009819055600a819055601c805460ff199081168317909155620493e0601d55602980549091169091179055603c6031553480156200005957600080fd5b506040518060400160405280600a815260200169084e4cac2d69acaa0d8f60b31b815250604051806040016040528060038152602001620424d560ec1b8152508160039081620000aa919062000b61565b506004620000b9828262000b61565b5050506000620000ce6200086e60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600e805473b4ba72b728248ba8cac7f1a8f560324340a6c2396001600160a01b031991821617909155600f805473d907f5da5e6c0dbe9649658ced8b8eea942d4122921691909117905560026017819055601481905560188190556015819055600060198190556016819055601a82905560138290556001601b55737a250d5630b4cf539739df2c5dacb4c659f2488d91620001df91620001cb90829062000872602090811b62002c1617901c565b6200087260201b62002c161790919060201c565b600c819055506200020a601554620001cb6016546013546200087260201b62002c161790919060201c565b600b81905550308173e9e7cea3dedca5984780bafc599bd69add087d56604051620002359062000aaf565b6001600160a01b0393841681529183166020830152909116604082015260a06060820181905260119082015270213932b0b5a6b2a8363c2a2920a1a5a2a960791b60c082015260e060808201819052600a90820152692126a82a2920a1a5a2a960b11b61010082015261012001604051809103906000f080158015620002bf573d6000803e3d6000fd5b50600d80546001600160a01b039283166001600160a01b0319918216179091556006805492841692909116821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200032a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000350919062000c2d565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d9919062000c2d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000427573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044d919062000c2d565b600780546001600160a01b0319166001600160a01b0392909216918217905562000479906001620008e2565b600d5460405163031e79db60e41b81526001600160a01b0390911660048201819052906331e79db090602401600060405180830381600087803b158015620004c057600080fd5b505af1158015620004d5573d6000803e3d6000fd5b5050600d5460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200051f57600080fd5b505af115801562000534573d6000803e3d6000fd5b5050600d5460085460405163031e79db60e41b81526001600160a01b039182166004820152911692506331e79db09150602401600060405180830381600087803b1580156200058257600080fd5b505af115801562000597573d6000803e3d6000fd5b5050600d54604051634e7b827f60e01b8152600060048201526001600160a01b039091169250634e7b827f9150602401602060405180830381865afa158015620005e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060b919062000c58565b50600d5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b1580156200065457600080fd5b505af115801562000669573d6000803e3d6000fd5b5050600d54600e5460405163031e79db60e41b81526001600160a01b039182166004820152911692506331e79db09150602401600060405180830381600087803b158015620006b757600080fd5b505af1158015620006cc573d6000803e3d6000fd5b5050600d546001600160a01b031691506331e79db09050620006f66005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156200073857600080fd5b505af11580156200074d573d6000803e3d6000fd5b5050306000908152601e60205260408082208054600160ff199182168117909255600d546001600160a01b0390811685528385208054831684179055600e54811685528385208054831684179055600f5416845282842080548216831790553384529190922080549091169091179055506c01431e0fae6d7217caa00000009050620007ec620007e56005546001600160a01b031690565b82620009ae565b620007fa6107d08262000c7c565b6012556200080b6107d08262000c7c565b602855600160206000620008276005546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081529180529020805490911660011790555062000cc19050565b3390565b60008062000881838562000c9f565b905083811015620008d95760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b90505b92915050565b6001600160a01b0382166000908152601f60205260409020805460ff191682158015919091179091556200097257600d5460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b1580156200095857600080fd5b505af11580156200096d573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b03821662000a065760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620008d0565b62000a22816002546200087260201b62002c161790919060201c565b6002556001600160a01b0382166000908152602081815260409091205462000a5591839062002c1662000872821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b61305b80620059b883390190565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000ae857607f821691505b60208210810362000b0957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000aaa57600081815260208120601f850160051c8101602086101562000b385750805b601f850160051c820191505b8181101562000b595782815560010162000b44565b505050505050565b81516001600160401b0381111562000b7d5762000b7d62000abd565b62000b958162000b8e845462000ad3565b8462000b0f565b602080601f83116001811462000bcd576000841562000bb45750858301515b600019600386901b1c1916600185901b17855562000b59565b600085815260208120601f198616915b8281101562000bfe5788860151825594840194600190910190840162000bdd565b508582101562000c1d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000c4057600080fd5b81516001600160a01b0381168114620008d957600080fd5b60006020828403121562000c6b57600080fd5b81518015158114620008d957600080fd5b60008262000c9a57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620008dc57634e487b7160e01b600052601160045260246000fd5b614ce78062000cd16000396000f3fe6080604052600436106104cf5760003560e01c806375829def11610276578063ad56c13c1161014f578063e2f45605116100c1578063f2f5ec3a11610085578063f2f5ec3a14610eb3578063f2fde38b14610ed3578063f5d3c79a14610ef3578063f637434214610f13578063f8b45b0514610f29578063fc6b151c14610f3f57600080fd5b8063e2f4560514610e3c578063e7841ec014610e52578063ebae7c1c14610e67578063f11a24d314610e7d578063f27fd25414610e9357600080fd5b8063bb8d513111610113578063bb8d513114610d60578063d07a091c14610d76578063d5e3725114610d96578063d8032ed314610db6578063dd62ed3e14610dd6578063e14a93d614610e1c57600080fd5b8063ad56c13c14610c83578063b494298814610cda578063b62496f514610cf0578063b74e3b1114610d20578063ba079d4914610d4057600080fd5b806394564774116101e85780639c3372ea116101ac5780639c3372ea14610bcd5780639ec1037e14610bed578063a457c2d714610c0d578063a8b9d24014610c2d578063a9059cbb14610c4d578063acb2ad6f14610c6d57600080fd5b80639456477414610b5757806395451c2914610b6c57806395d89b4114610b825780639a7a23d614610b975780639c1b8af514610bb757600080fd5b8063868730c71161023a578063868730c714610aad578063871c128d14610acd5780638c3c82b214610aed5780638ca2923a14610b035780638da5cb5b14610b195780638ea5220f14610b3757600080fd5b806375829def14610a1757806375f0a87414610a3757806377a3b60914610a575780637fdde05c14610a6d5780638577a6d514610a8d57600080fd5b80634a74bb02116103a857806366236b4a1161031a578063700bb191116102de578063700bb1911461096d5780637088fb7f1461098d57806370a08231146109a257806370c8be13146109c2578063715018a6146109e257806372d8edf4146109f757600080fd5b806366236b4a146108d7578063679ca6e9146108f75780636843cd84146109175780636a42b8f8146109375780636d48467b1461094d57600080fd5b80635124f8741161036c5780635124f874146108365780635a84c5eb1461084c5780635c234bb61461086c5780635ebf4db9146108825780635eee4bae146108a257806364b0f653146108c257600080fd5b80634a74bb021461078d5780634ada218b146107a75780634e71d92d146107c85780634e974537146107dd5780634fbee193146107fd57600080fd5b806323b872dd116104415780633599bb17116104055780633599bb17146106dd57806339509351146106fd5780633f407b841461071d57806340ffdd801461073357806349bd5a5e146107535780634a62bb651461077357600080fd5b806323b872dd1461065757806325cd3598146106775780632c1f52161461068c57806330bb4cff146106ac578063313ce567146106c157600080fd5b8063095ea7b311610493578063095ea7b31461059c5780631694505e146105cc57806318160ddd146105ec5780631d7b1fb41461060b5780631fa70531146106215780632307b4411461063757600080fd5b806303fd2a45146104db57806305ca5f081461051857806306fdde031461053a57806308dfe8a51461055c578063092316021461057c57600080fd5b366104d657005b600080fd5b3480156104e757600080fd5b506008546104fb906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561052457600080fd5b5061053861053336600461454c565b610f5f565b005b34801561054657600080fd5b5061054f611030565b60405161050f9190614565565b34801561056857600080fd5b506105386105773660046145d6565b6110c2565b34801561058857600080fd5b5061053861059736600461454c565b61114b565b3480156105a857600080fd5b506105bc6105b736600461460f565b6111da565b604051901515815260200161050f565b3480156105d857600080fd5b506006546104fb906001600160a01b031681565b3480156105f857600080fd5b506002545b60405190815260200161050f565b34801561061757600080fd5b506105fd60315481565b34801561062d57600080fd5b506105fd600a5481565b34801561064357600080fd5b50610538610652366004614711565b6111f1565b34801561066357600080fd5b506105bc6106723660046147d3565b611378565b34801561068357600080fd5b506104fb6113e1565b34801561069857600080fd5b50600d546104fb906001600160a01b031681565b3480156106b857600080fd5b506105fd611454565b3480156106cd57600080fd5b506040516012815260200161050f565b3480156106e957600080fd5b506105386106f8366004614814565b6114c2565b34801561070957600080fd5b506105bc61071836600461460f565b61154f565b34801561072957600080fd5b506105fd60095481565b34801561073f57600080fd5b5061053861074e366004614814565b611585565b34801561075f57600080fd5b506007546104fb906001600160a01b031681565b34801561077f57600080fd5b506029546105bc9060ff1681565b34801561079957600080fd5b50601c546105bc9060ff1681565b3480156107b357600080fd5b506008546105bc90600160a81b900460ff1681565b3480156107d457600080fd5b506105386115e0565b3480156107e957600080fd5b506105386107f836600461454c565b611658565b34801561080957600080fd5b506105bc610818366004614831565b6001600160a01b03166000908152601e602052604090205460ff1690565b34801561084257600080fd5b506105fd60185481565b34801561085857600080fd5b5061053861086736600461454c565b6116fa565b34801561087857600080fd5b506105fd60175481565b34801561088e57600080fd5b5061053861089d36600461454c565b611755565b3480156108ae57600080fd5b506105386108bd36600461454c565b6117b0565b3480156108ce57600080fd5b506105fd6117f2565b3480156108e357600080fd5b506105386108f236600461454c565b61183c565b34801561090357600080fd5b50610538610912366004614814565b6118ed565b34801561092357600080fd5b506105fd610932366004614831565b61192a565b34801561094357600080fd5b506105fd60305481565b34801561095957600080fd5b506105bc610968366004614831565b61199a565b34801561097957600080fd5b5061053861098836600461454c565b611a0a565b34801561099957600080fd5b50610538611adc565b3480156109ae57600080fd5b506105fd6109bd366004614831565b611b39565b3480156109ce57600080fd5b506105386109dd366004614711565b611b54565b3480156109ee57600080fd5b50610538611d0d565b348015610a0357600080fd5b50610538610a12366004614831565b611d81565b348015610a2357600080fd5b50610538610a32366004614831565b611ddd565b348015610a4357600080fd5b50600e546104fb906001600160a01b031681565b348015610a6357600080fd5b506105fd601a5481565b348015610a7957600080fd5b50610538610a883660046145d6565b611e92565b348015610a9957600080fd5b50610538610aa836600461454c565b611ee6565b348015610ab957600080fd5b50610538610ac8366004614814565b611f9d565b348015610ad957600080fd5b50610538610ae836600461454c565b611fd5565b348015610af957600080fd5b506105fd602f5481565b348015610b0f57600080fd5b506105fd60145481565b348015610b2557600080fd5b506005546001600160a01b03166104fb565b348015610b4357600080fd5b50600f546104fb906001600160a01b031681565b348015610b6357600080fd5b50610538612051565b348015610b7857600080fd5b506105fd60155481565b348015610b8e57600080fd5b5061054f6120ef565b348015610ba357600080fd5b50610538610bb23660046145d6565b6120fe565b348015610bc357600080fd5b506105fd601d5481565b348015610bd957600080fd5b50610538610be8366004614814565b612132565b348015610bf957600080fd5b50610538610c08366004614831565b61218e565b348015610c1957600080fd5b506105bc610c2836600461460f565b612251565b348015610c3957600080fd5b506105fd610c48366004614831565b6122a0565b348015610c5957600080fd5b506105bc610c6836600461460f565b6122d3565b348015610c7957600080fd5b506105fd601b5481565b348015610c8f57600080fd5b50610ca3610c9e366004614831565b6122e0565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c00161050f565b348015610ce657600080fd5b506105fd602e5481565b348015610cfc57600080fd5b506105bc610d0b366004614831565b601f6020526000908152604090205460ff1681565b348015610d2c57600080fd5b50610538610d3b36600461454c565b612370565b348015610d4c57600080fd5b506105bc610d5b366004614831565b612400565b348015610d6c57600080fd5b506105fd60135481565b348015610d8257600080fd5b50610538610d91366004614831565b612433565b348015610da257600080fd5b50610538610db1366004614814565b612529565b348015610dc257600080fd5b50610538610dd1366004614831565b6125ab565b348015610de257600080fd5b506105fd610df136600461484e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610e2857600080fd5b50610538610e3736600461487c565b61266e565b348015610e4857600080fd5b506105fd60125481565b348015610e5e57600080fd5b506105fd6127f0565b348015610e7357600080fd5b506105fd60115481565b348015610e8957600080fd5b506105fd60195481565b348015610e9f57600080fd5b50610ca3610eae36600461454c565b61283a565b348015610ebf57600080fd5b50610538610ece3660046148ae565b612878565b348015610edf57600080fd5b50610538610eee366004614831565b612a3e565b348015610eff57600080fd5b50610538610f0e366004614814565b612b29565b348015610f1f57600080fd5b506105fd60165481565b348015610f3557600080fd5b506105fd60105481565b348015610f4b57600080fd5b50610538610f5a36600461454c565b612b61565b6005546001600160a01b03163314610f925760405162461bcd60e51b8152600401610f8990614903565b60405180910390fd5b610fa481670de0b6b3a764000061494e565b90506000610fbf600954600a54612c1690919063ffffffff16565b90506000610fe282610fdc600a5486612c7c90919063ffffffff16565b90612cfe565b90506000610fff83610fdc60095487612c7c90919063ffffffff16565b905061100a84612d40565b600a546110179083612f65565b600a556009546110279082612f65565b60095550505050565b60606003805461103f90614965565b80601f016020809104026020016040519081016040528092919081815260200182805461106b90614965565b80156110b85780601f1061108d576101008083540402835291602001916110b8565b820191906000526020600020905b81548152906001019060200180831161109b57829003601f168201915b5050505050905090565b6005546001600160a01b031633146110ec5760405162461bcd60e51b8152600401610f8990614903565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146111755760405162461bcd60e51b8152600401610f8990614903565b60328110156111c65760405162461bcd60e51b815260206004820152601e60248201527f63616e206e6576657220626520736574206c6f776572207468616e20353000006044820152606401610f89565b6111d481633b9aca0061494e565b602a5550565b60006111e7338484612fa7565b5060015b92915050565b6005546001600160a01b0316331461121b5760405162461bcd60e51b8152600401610f8990614903565b805182511461126c5760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610f89565b60c88251111561128e5760405162461bcd60e51b8152600401610f899061499f565b60005b82518110156113735760008382815181106112ae576112ae6149e1565b6020026020010151905060008383815181106112cc576112cc6149e1565b6020026020010151670de0b6b3a76400006112e7919061494e565b90506112f43383836130cc565b600d546001600160a01b031663e30443bc8361130f816131d5565b6040518363ffffffff1660e01b815260040161132c9291906149f7565b600060405180830381600087803b15801561134657600080fd5b505af115801561135a573d6000803e3d6000fd5b505050505050808061136b90614a10565b915050611291565b505050565b600061138584848461335a565b6113d784336113d285604051806060016040528060288152602001614c65602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190614190565b612fa7565b5060019392505050565b600d54604080516304b9a6b360e31b815290516000926001600160a01b0316916325cd35989160048083019260209291908290030181865afa15801561142b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144f9190614a29565b905090565b600d54604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa15801561149e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144f9190614a46565b6005546001600160a01b031633146114ec5760405162461bcd60e51b8152600401610f8990614903565b600d54604051633599bb1760e01b815282151560048201526001600160a01b0390911690633599bb17906024015b600060405180830381600087803b15801561153457600080fd5b505af1158015611548573d6000803e3d6000fd5b5050505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916111e79185906113d29086612c16565b6005546001600160a01b031633146115af5760405162461bcd60e51b8152600401610f8990614903565b600d546040516281ffbb60e71b815282151560048201526001600160a01b03909116906340ffdd809060240161151a565b600d5460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af1158015611631573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116559190614a5f565b50565b6005546001600160a01b031633146116825760405162461bcd60e51b8152600401610f8990614903565b61169481670de0b6b3a764000061494e565b90506107d06002546116a69190614a7c565b8111156116f55760405162461bcd60e51b815260206004820181905260248201527f63616e6e6f742062652073657420746f206c657373207468616e20302e3035256044820152606401610f89565b602855565b6005546001600160a01b031633146117245760405162461bcd60e51b8152600401610f8990614903565b600d54604051635a84c5eb60e01b8152600481018390526001600160a01b0390911690635a84c5eb9060240161151a565b6005546001600160a01b0316331461177f5760405162461bcd60e51b8152600401610f8990614903565b600d54604051635ebf4db960e01b8152600481018390526001600160a01b0390911690635ebf4db99060240161151a565b6005546001600160a01b031633146117da5760405162461bcd60e51b8152600401610f8990614903565b6117ec81670de0b6b3a764000061494e565b60125550565b600d54604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa15801561149e573d6000803e3d6000fd5b6005546001600160a01b031633146118665760405162461bcd60e51b8152600401610f8990614903565b61187881670de0b6b3a764000061494e565b90506103e860025461188a9190614a7c565b8110156118e85760405162461bcd60e51b815260206004820152602660248201527f6d61782074782063616e6e6f742062652073657420746f206c657373207468616044820152656e20302e312560d01b6064820152608401610f89565b601155565b6005546001600160a01b031633146119175760405162461bcd60e51b8152600401610f8990614903565b6029805460ff1916911515919091179055565b600d546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015611976573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111eb9190614a46565b600d54604051636d48467b60e01b81526001600160a01b0383811660048301526000921690636d48467b906024015b602060405180830381865afa1580156119e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111eb9190614a5f565b600d546040516001624d3b8760e01b0319815260048101839052600091829182916001600160a01b03169063ffb2c479906024016060604051808303816000875af1158015611a5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a819190614a9e565b604080518481526020810184905290810182905260608101889052929550909350915032906000907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a350505050565b6005546001600160a01b03163314611b065760405162461bcd60e51b8152600401610f8990614903565b6040514790339082156108fc029083906000818181858888f19350505050158015611b35573d6000803e3d6000fd5b5050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314611b7e5760405162461bcd60e51b8152600401610f8990614903565b8051825114611bcf5760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610f89565b60c882511115611bf15760405162461bcd60e51b8152600401610f899061499f565b60005b8251811015611373576000838281518110611c1157611c116149e1565b602002602001015190506000838381518110611c2f57611c2f6149e1565b6020026020010151670de0b6b3a7640000611c4a919061494e565b9050611c573383836130cc565b600d546001600160a01b031663e30443bc83611c72816131d5565b6040518363ffffffff1660e01b8152600401611c8f9291906149f7565b600060405180830381600087803b158015611ca957600080fd5b505af1158015611cbd573d6000803e3d6000fd5b5050506001600160a01b0390921660009081526021602090815260408083209390935560228152828220805460ff1916600117905560239052204290555080611d0581614a10565b915050611bf4565b6005546001600160a01b03163314611d375760405162461bcd60e51b8152600401610f8990614903565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314611dab5760405162461bcd60e51b8152600401610f8990614903565b600d5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db09060240161151a565b6005546001600160a01b03163314611e075760405162461bcd60e51b8152600401610f8990614903565b600d5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b158015611e4e57600080fd5b505af1158015611e62573d6000803e3d6000fd5b5050506001600160a01b0382166000908152601e60205260409020805460ff191660011790555061165581612a3e565b6005546001600160a01b03163314611ebc5760405162461bcd60e51b8152600401610f8990614903565b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611f105760405162461bcd60e51b8152600401610f8990614903565b6005811115611f615760405162461bcd60e51b815260206004820152601d60248201527f7472616e73666572206665652063616e6e6f74206578636565642035250000006044820152606401610f89565b601b8190556040518181527f6fbeac6c79c640ca4f5f47271bd7a36c7eb83076224c65a3b3378c8844720343906020015b60405180910390a150565b600d54604051638bc1d63960e01b815233600482015282151560248201526001600160a01b0390911690638bc1d6399060440161151a565b6005546001600160a01b03163314611fff5760405162461bcd60e51b8152600401610f8990614903565b62030d4081101580156120155750624c4b408111155b61201e57600080fd5b601d5460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3601d55565b3360009081526025602052604090205460ff1661208357336000908152602560205260409020805460ff191660011790555b600d546001600160a01b031663e30443bc3361209e816131d5565b6040518363ffffffff1660e01b81526004016120bb9291906149f7565b600060405180830381600087803b1580156120d557600080fd5b505af11580156120e9573d6000803e3d6000fd5b50505050565b60606004805461103f90614965565b6005546001600160a01b031633146121285760405162461bcd60e51b8152600401610f8990614903565b611b3582826141ca565b6005546001600160a01b0316331461215c5760405162461bcd60e51b8152600401610f8990614903565b600d54604051634e19b97560e11b815282151560048201526001600160a01b0390911690639c3372ea9060240161151a565b6005546001600160a01b031633146121b85760405162461bcd60e51b8152600401610f8990614903565b600d54604051630928847160e01b81526001600160a01b03838116600483015290911690630928847190602401600060405180830381600087803b1580156121ff57600080fd5b505af1158015612213573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc905082612234816131d5565b6040518363ffffffff1660e01b815260040161151a9291906149f7565b60006111e733846113d285604051806060016040528060258152602001614c8d602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190614190565b600d546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401611959565b60006111e733848461335a565b600d5460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283929091169063fbcbc0f1906024015b60c060405180830381865afa158015612338573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235c9190614acc565b949c939b5091995097509550909350915050565b6005546001600160a01b0316331461239a5760405162461bcd60e51b8152600401610f8990614903565b61012c8111156123fb5760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d604482015265696e7574657360d01b6064820152608401610f89565b603155565b600d5460405163ba079d4960e01b81526001600160a01b038381166004830152600092169063ba079d49906024016119c9565b6005546001600160a01b0316331461245d5760405162461bcd60e51b8152600401610f8990614903565b6001600160a01b038181166000818152602080805260408083208054600160ff199182168117909255601e9093529281902080549092169092179055600d54905163031e79db60e41b81526004810192909252909116906331e79db090602401600060405180830381600087803b1580156124d757600080fd5b505af11580156124eb573d6000803e3d6000fd5b50506040516001600160a01b03841681527f85d097e432d8e396fa72c83ebd34196326e1cf1694ef910cd53554b2ee7597c592506020019050611f92565b6005546001600160a01b031633146125535760405162461bcd60e51b8152600401610f8990614903565b601c5481151560ff90911615150361256a57600080fd5b601c805460ff19168215159081179091556040519081527fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef90602001611f92565b6005546001600160a01b031633146125d55760405162461bcd60e51b8152600401610f8990614903565b600d5460405163d8032ed360e01b81526001600160a01b0383811660048301529091169063d8032ed390602401600060405180830381600087803b15801561261c57600080fd5b505af1158015612630573d6000803e3d6000fd5b50506040516001600160a01b03841681527f7597aa09105646b4cc4486748aecd1d7c5dbcbb7bbe2863c3fc27e613b64432d92506020019050611f92565b6005546001600160a01b031633146126985760405162461bcd60e51b8152600401610f8990614903565b6126aa83670de0b6b3a764000061494e565b92506126be82670de0b6b3a764000061494e565b600854909250600160a81b900460ff16156126d857600080fd5b6103e86002546126e89190614a7c565b83101561272f5760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b6044820152606401610f89565b6103e860025461273f9190614a7c565b8210156127865760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b6044820152606401610f89565b6010839055601182905561279e84633b9aca0061494e565b602a556008805460ff60a81b1916600160a81b17905543602e5542602f5560308190556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a150505050565b600d546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec09160048083019260209291908290030181865afa15801561149e573d6000803e3d6000fd5b600d54604051635183d6fd60e01b815260048101839052600091829182918291829182916001600160a01b0390911690635183d6fd9060240161231b565b6005546001600160a01b031633146128a25760405162461bcd60e51b8152600401610f8990614903565b601788905560188690556019849055601a82905560148790556015859055601683905560138190556128de856128d88386612c16565b90612c16565b600b55601854601954601a546128f992916128d89190612c16565b600c556003881180159061290e575060038711155b61295a5760405162461bcd60e51b815260206004820152601a60248201527f6275726e20666565732063616e6e6f74206578636565642033250000000000006044820152606401610f89565b600a600b54111580156129705750600a600c5411155b6129bc5760405162461bcd60e51b815260206004820152601c60248201527f746f74616c20666565732063616e6e6f742065786365656420313025000000006044820152606401610f89565b601454601554601654601354601754601854601954601a54604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e08201527f1640531881cbf0e2bf36c30fec3ed06b08e062adb13340f00fd16cedba09637a906101000160405180910390a15050505050505050565b6005546001600160a01b03163314612a685760405162461bcd60e51b8152600401610f8990614903565b6001600160a01b038116612acd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f89565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600d54604051632c8be28160e21b815233600482015282151560248201526001600160a01b039091169063b22f8a049060440161151a565b6005546001600160a01b03163314612b8b5760405162461bcd60e51b8152600401610f8990614903565b612b9d81670de0b6b3a764000061494e565b90506103e8600254612baf9190614a7c565b811015612c115760405162461bcd60e51b815260206004820152602a60248201527f6d61782077616c6c65742063616e6e6f742062652073657420746f206c657373604482015269207468616e20302e312560b01b6064820152608401610f89565b601055565b600080612c238385614b1f565b905083811015612c755760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610f89565b9392505050565b600082600003612c8e575060006111eb565b6000612c9a838561494e565b905082612ca78583614a7c565b14612c755760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610f89565b6000612c7583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614293565b80600003612d4b5750565b612d54816142c1565b6000612d6d600954600a54612c1690919063ffffffff16565b601a5490915060019081906000908190819015612dbf57612dbc601854601a54612d979190614b1f565b610fdc601a54612db68a610fdc600a5447612c7c90919063ffffffff16565b90612c7c565b91505b60135415612dfc57612df9601554601354612dda9190614b1f565b610fdc601354612db68a610fdc60095447612c7c90919063ffffffff16565b90505b612e068282612c16565b92508215612e6657600d546040516001600160a01b03909116908490600081818185875af1925050503d8060008114612e5b576040519150601f19603f3d011682016040523d82523d6000602084013e612e60565b606091505b50909550505b6000601854601554612e789190614b1f565b905060008115612e8f57612e8c4783612cfe565b90505b6000612eac82612db6601554601854612c1690919063ffffffff16565b90508015612f0c57600e546040516001600160a01b03909116908290600081818185875af1925050503d8060008114612f01576040519150601f19603f3d011682016040523d82523d6000602084013e612f06565b606091505b50909750505b7f8e09ec88c0d24c22e3a9b8555c029afcc4a7c609daabf6d7849e814c2d14efd086828a8015612f395750895b60408051938452602084019290925215159082015260600160405180910390a150505050505050505050565b6000612c7583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614190565b6001600160a01b0383166130095760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f89565b6001600160a01b03821661306a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f89565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166130f25760405162461bcd60e51b8152600401610f8990614b32565b6001600160a01b0382166131185760405162461bcd60e51b8152600401610f8990614b77565b61315581604051806060016040528060268152602001614c3f602691396001600160a01b0386166000908152602081905260409020549190614190565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546131849082612c16565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016130bf565b6001600160a01b038116600090815260256020526040812054819060ff16801561322157506001600160a01b0383166000908152602d602052604090205461321e90603c614b1f565b42115b801561324f57506001600160a01b0383166000908152602d602052604090205461324c906078614b1f565b42105b15613269576132626003612db685611b39565b90506111eb565b6001600160a01b03831660009081526025602052604090205460ff1680156132b357506001600160a01b0383166000908152602d60205260409020546132b0906078614b1f565b42115b80156132e157506001600160a01b0383166000908152602d60205260409020546132de9060b4614b1f565b42105b156132f4576132626005612db685611b39565b6001600160a01b03831660009081526025602052604090205460ff16801561333e57506001600160a01b0383166000908152602d602052604090205461333b9060b4614b1f565b42115b15613351576132626007612db685611b39565b612c7583611b39565b6001600160a01b0383166133805760405162461bcd60e51b8152600401610f8990614b32565b6001600160a01b0382166133a65760405162461bcd60e51b8152600401610f8990614b77565b6001600160a01b038316600090815260208052604081205481908190819060ff1661342457600854600160a81b900460ff166134245760405162461bcd60e51b815260206004820181905260248201527f54726164696e6720686173206e6f7420796574206265656e20656e61626c65646044820152606401610f89565b8460000361344157613438878760006130cc565b50505050505050565b6001600160a01b03871660009081526022602052604090205460ff1615613540576001600160a01b0387166000908152602360205260409020546134879061012c614b1f565b42101561350e576001600160a01b038716600090815260216020526040902054856134b189611b39565b6134bb9190614bba565b10156135095760405162461bcd60e51b815260206004820152601760248201527f63616e742073656c6c2076657374656420746f6b656e730000000000000000006044820152606401610f89565b6140a6565b6001600160a01b038716600090815260216020908152604080832083905560229091529020805460ff191690556140a6565b600854600160a01b900460ff1615801561357357506001600160a01b0387166000908152601e602052604090205460ff16155b801561359857506001600160a01b0386166000908152601e602052604090205460ff16155b156140a6576001600160a01b038087166000908152601f602052604080822054928a16825290205460ff9182169116801580156135d3575081155b156138a9576001600160a01b0389166000908152601e602052604090205460ff1615801561361a57506001600160a01b0388166000908152601e602052604090205460ff16155b1561377f57600061363b6064610fdc601b548b612c7c90919063ffffffff16565b90506136478882612f65565b97506136548a30836130cc565b61365f8a8a8a6130cc565b600d546001600160a01b031663e30443bc8b61367a816131d5565b6040518363ffffffff1660e01b81526004016136979291906149f7565b600060405180830381600087803b1580156136b157600080fd5b505af11580156136c5573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc90508a6136e6816131d5565b6040518363ffffffff1660e01b81526004016137039291906149f7565b600060405180830381600087803b15801561371d57600080fd5b505af1158015613731573d6000803e3d6000fd5b5050506001600160a01b03909a166000908152602460209081526040808320805460ff199081169091556025835281842080549091169055602d909152902042905550505050505050505050565b61378a8989896130cc565b600d546001600160a01b031663e30443bc8a6137a5816131d5565b6040518363ffffffff1660e01b81526004016137c29291906149f7565b600060405180830381600087803b1580156137dc57600080fd5b505af11580156137f0573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc905089613811816131d5565b6040518363ffffffff1660e01b815260040161382e9291906149f7565b600060405180830381600087803b15801561384857600080fd5b505af115801561385c573d6000803e3d6000fd5b5050506001600160a01b039099166000908152602460209081526040808320805460ff199081169091556025835281842080549091169055602d9091529020429055505050505050505050565b81156139f05760285487106138c157600895506138c7565b60135495505b601454601554601654602954929750909550935060ff16156139ad57603154326000908152602c60205260409020546139009190614b1f565b4210156139485760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b6044820152606401610f89565b60115487111561399a5760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d697400000000006044820152606401610f89565b326000908152602c602052604090204290555b6001600160a01b0389166000908152602460209081526040808320805460ff199081169091556025835281842080549091169055602d9091529020429055613de0565b8015613de0576001600160a01b03881660009081526024602052604090205460ff1615613b46576001600160a01b038816600090815260266020526040902054613a3c9061012c614b1f565b4210158015613a555750602854613a5289611b39565b10155b15613b4657613a658989896130cc565b600d546001600160a01b031663e30443bc8a613a80816131d5565b6040518363ffffffff1660e01b8152600401613a9d9291906149f7565b600060405180830381600087803b158015613ab757600080fd5b505af1158015613acb573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc905089613aec816131d5565b6040518363ffffffff1660e01b8152600401613b099291906149f7565b600060405180830381600087803b158015613b2357600080fd5b505af1158015613b37573d6000803e3d6000fd5b50505050505050505050505050565b6001600160a01b03881660009081526025602052604090205460ff16613b97576001600160a01b0388166000908152602560209081526040808320805460ff19166001179055602d90915290204290555b6001600160a01b03881660009081526024602052604090205460ff16613be8576001600160a01b0388166000908152602460209081526040808320805460ff19166001179055602690915290204290555b601a546017546018546019546029549399509197509550935060ff1615613d6957603054602f54613c199190614b1f565b4211613c5c5760405162461bcd60e51b8152602060048201526012602482015271796f75207368616c6c206e6f74207061737360701b6044820152606401610f89565b602a543a1115613cae5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610f89565b326000908152602b6020526040902054439003613d045760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e7920545820696e20626c6f636b60601b6044820152606401610f89565b601154871115613d565760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d697400000000006044820152606401610f89565b326000908152602b602052604090204390555b6000613d7489611b39565b601054909150613d848983614b1f565b1115613dde5760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610f89565b505b6000613df6613def8686614b1f565b8890612c16565b90506000613e0330611b39565b60125490915081108015908190613e175750845b15613f30576008805460ff60a01b1916600160a01b179055601c5460ff168015613e415750600086115b8015613e4f57506000600c54115b15613f01576000613e6d600954600a54612c1690919063ffffffff16565b90506000613e8a82610fdc600a5487612c7c90919063ffffffff16565b90506000613ea783610fdc60095488612c7c90919063ffffffff16565b90506000613ec4600c54610fdc8c86612c7c90919063ffffffff16565b90506000613ee1600b54610fdc8d86612c7c90919063ffffffff16565b90506000613eef8284612c16565b9050613efa8161441b565b5050505050505b6000613f0c30611b39565b9050613f1781612d40565b506001600a8190556009556008805460ff60a01b191690555b6000613f416064610fdc8d87612c7c565b905060008915613f8d576064613f578d8c612c7c565b613f619190614a7c565b600854909150613f7c908f906001600160a01b0316836130cc565b600254613f899082612f65565b6002555b613fa1613f9a8284614b1f565b8d90612f65565b9b508615613fbe57600954613fb69083612c16565b600955613fcf565b600a54613fcb9083612c16565b600a555b613fda8e30846130cc565b601d54600d546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af1925050508015614047575060408051601f3d908101601f1916820190925261404491810190614a9e565b60015b1561409d5760408051848152602081018490529081018290526060810185905232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b50505050505050505b6140b18787876130cc565b600d546001600160a01b031663e30443bc886140cc816131d5565b6040518363ffffffff1660e01b81526004016140e99291906149f7565b600060405180830381600087803b15801561410357600080fd5b505af1158015614117573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc905087614138816131d5565b6040518363ffffffff1660e01b81526004016141559291906149f7565b600060405180830381600087803b15801561416f57600080fd5b505af1158015614183573d6000803e3d6000fd5b5050505050505050505050565b600081848411156141b45760405162461bcd60e51b8152600401610f899190614565565b5060006141c18486614bba565b95945050505050565b6001600160a01b0382166000908152601f60205260409020805460ff1916821580159190911790915561425757600d5460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801561423e57600080fd5b505af1158015614252573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b600081836142b45760405162461bcd60e51b8152600401610f899190614565565b5060006141c18486614a7c565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106142f6576142f66149e1565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561434f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143739190614a29565b81600181518110614386576143866149e1565b6001600160a01b0392831660209182029290920101526006546143ac9130911684612fa7565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906143e5908590600090869030904290600401614bcd565b600060405180830381600087803b1580156143ff57600080fd5b505af1158015614413573d6000803e3d6000fd5b505050505050565b6000614428826002612cfe565b905060006144368383612f65565b905047614442836142c1565b600061444e4783612f65565b905061445a83826144a2565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b6006546144ba9030906001600160a01b031684612fa7565b60065460405163f305d71960e01b8152306004820152602481018490526000604482018190526064820181905260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015614527573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906115489190614a9e565b60006020828403121561455e57600080fd5b5035919050565b600060208083528351808285015260005b8181101561459257858101830151858201604001528201614576565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461165557600080fd5b801515811461165557600080fd5b600080604083850312156145e957600080fd5b82356145f4816145b3565b91506020830135614604816145c8565b809150509250929050565b6000806040838503121561462257600080fd5b823561462d816145b3565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561467a5761467a61463b565b604052919050565b600067ffffffffffffffff82111561469c5761469c61463b565b5060051b60200190565b600082601f8301126146b757600080fd5b813560206146cc6146c783614682565b614651565b82815260059290921b840181019181810190868411156146eb57600080fd5b8286015b8481101561470657803583529183019183016146ef565b509695505050505050565b6000806040838503121561472457600080fd5b823567ffffffffffffffff8082111561473c57600080fd5b818501915085601f83011261475057600080fd5b813560206147606146c783614682565b82815260059290921b8401810191818101908984111561477f57600080fd5b948201945b838610156147a6578535614797816145b3565b82529482019490820190614784565b965050860135925050808211156147bc57600080fd5b506147c9858286016146a6565b9150509250929050565b6000806000606084860312156147e857600080fd5b83356147f3816145b3565b92506020840135614803816145b3565b929592945050506040919091013590565b60006020828403121561482657600080fd5b8135612c75816145c8565b60006020828403121561484357600080fd5b8135612c75816145b3565b6000806040838503121561486157600080fd5b823561486c816145b3565b91506020830135614604816145b3565b6000806000806080858703121561489257600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600080600080610100898b0312156148cb57600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176111eb576111eb614938565b600181811c9082168061497957607f821691505b60208210810361499957634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526022908201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2032604082015261030360f41b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03929092168252602082015260400190565b600060018201614a2257614a22614938565b5060010190565b600060208284031215614a3b57600080fd5b8151612c75816145b3565b600060208284031215614a5857600080fd5b5051919050565b600060208284031215614a7157600080fd5b8151612c75816145c8565b600082614a9957634e487b7160e01b600052601260045260246000fd5b500490565b600080600060608486031215614ab357600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c08789031215614ae557600080fd5b8651614af0816145b3565b6020880151604089015160608a015160808b015160a0909b0151939c929b509099909850965090945092505050565b808201808211156111eb576111eb614938565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156111eb576111eb614938565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015614c1d5784516001600160a01b031683529383019391830191600101614bf8565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201ab2eb92f6e3f742f859d8e596b0e9fe67f66ffdbde1080c246d170ffee9f4c964736f6c6343000811003360806040526012805460ff60b01b191690553480156200001e57600080fd5b506040516200305b3803806200305b833981016040819052620000419162000238565b81818181600362000053838262000372565b50600462000062828262000372565b50505050506000620000796200015660201b60201c565b600980546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506013620000d5838262000372565b506014620000e4828262000372565b505060128054601680546001600160a01b03199081166001600160a01b0398891617909155670de0b6b3a764000060188190556019556015805490911695871695909517909455600160a01b929094166001600160a81b0319909316929092171760ff60a81b1916909155506200043e565b3390565b6001600160a01b03811681146200017057600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200019b57600080fd5b81516001600160401b0380821115620001b857620001b862000173565b604051601f8301601f19908116603f01168101908282118183101715620001e357620001e362000173565b816040528381526020925086838588010111156200020057600080fd5b600091505b8382101562000224578582018301518183018401529082019062000205565b600093810190920192909252949350505050565b600080600080600060a086880312156200025157600080fd5b85516200025e816200015a565b602087015190955062000271816200015a565b604087015190945062000284816200015a565b60608701519093506001600160401b0380821115620002a257600080fd5b620002b089838a0162000189565b93506080880151915080821115620002c757600080fd5b50620002d68882890162000189565b9150509295509295909350565b600181811c90821680620002f857607f821691505b6020821081036200031957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200036d57600081815260208120601f850160051c81016020861015620003485750805b601f850160051c820191505b81811015620003695782815560010162000354565b5050505b505050565b81516001600160401b038111156200038e576200038e62000173565b620003a6816200039f8454620002e3565b846200031f565b602080601f831160018114620003de5760008415620003c55750858301515b600019600386901b1c1916600185901b17855562000369565b600085815260208120601f198616915b828110156200040f57888601518255948401946001909101908401620003ee565b50858210156200042e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b612c0d806200044e6000396000f3fe60806040526004361061031e5760003560e01c80636d48467b116101ab578063a457c2d7116100f7578063d8032ed311610095578063e7841ec01161006f578063e7841ec0146109ed578063f2fde38b14610a02578063fbcbc0f114610a22578063ffb2c47914610a4257600080fd5b8063d8032ed314610967578063dd62ed3e14610987578063e30443bc146109cd57600080fd5b8063aafd847a116100d1578063aafd847a146108d1578063b22f8a0414610907578063ba079d4914610927578063bc4c4b371461094757600080fd5b8063a457c2d714610871578063a8b9d24014610891578063a9059cbb146108b157600080fd5b80638da5cb5b1161016457806395d89b411161013e57806395d89b41146107fa5780639c3372ea1461080f5780639eec101e1461082f578063a42340691461085057600080fd5b80638da5cb5b1461079c57806390fdfe33146107ba57806391b89fba146107da57600080fd5b80636d48467b146106db57806370a08231146106fb578063715018a61461073157806374c13fda1461074657806385a6b3ae146107665780638bc1d6391461077c57600080fd5b8063313ce5671161026a5780634e7b827f116102235780635ebf4db9116101fd5780635ebf4db91461065657806365b8dbc0146106765780636a474002146106965780636b69163b146106ab57600080fd5b80634e7b827f146105af5780635183d6fd146105df5780635a84c5eb1461063657600080fd5b8063313ce567146104f257806331e79db01461050e5780633599bb171461052e578063395093511461054e57806340ffdd801461056e578063418089041461058e57600080fd5b806318160ddd116102d757806323b872dd116102b157806323b872dd1461047e57806325cd35981461049e57806327ce0147146104bc5780633009a609146104dc57600080fd5b806318160ddd1461040c5780631d4ff89a14610421578063226cfa3d1461045157600080fd5b806303c833021461033257806306fdde031461033a5780630928847114610365578063095ea7b31461038557806309bbedde146103b55780631694505e146103d457600080fd5b3661032d5761032b610a7d565b005b600080fd5b61032b610a7d565b34801561034657600080fd5b5061034f610b10565b60405161035c9190612789565b60405180910390f35b34801561037157600080fd5b5061032b6103803660046127ef565b610ba2565b34801561039157600080fd5b506103a56103a036600461280c565b610bf6565b604051901515815260200161035c565b3480156103c157600080fd5b50600a545b60405190815260200161035c565b3480156103e057600080fd5b506015546103f4906001600160a01b031681565b6040516001600160a01b03909116815260200161035c565b34801561041857600080fd5b506002546103c6565b34801561042d57600080fd5b506103a561043c3660046127ef565b60116020526000908152604090205460ff1681565b34801561045d57600080fd5b506103c661046c3660046127ef565b60176020526000908152604090205481565b34801561048a57600080fd5b506103a5610499366004612838565b610c0d565b3480156104aa57600080fd5b506012546001600160a01b03166103f4565b3480156104c857600080fd5b506103c66104d73660046127ef565b610c76565b3480156104e857600080fd5b506103c6600e5481565b3480156104fe57600080fd5b506040516012815260200161035c565b34801561051a57600080fd5b5061032b6105293660046127ef565b610cd2565b34801561053a57600080fd5b5061032b610549366004612887565b610d6c565b34801561055a57600080fd5b506103a561056936600461280c565b610e0d565b34801561057a57600080fd5b5061032b610589366004612887565b610e43565b34801561059a57600080fd5b506012546103a590600160a81b900460ff1681565b3480156105bb57600080fd5b506103a56105ca3660046127ef565b600f6020526000908152604090205460ff1681565b3480156105eb57600080fd5b506105ff6105fa3660046128a4565b610ed9565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c00161035c565b34801561064257600080fd5b5061032b6106513660046128a4565b610f39565b34801561066257600080fd5b5061032b6106713660046128a4565b610f7b565b34801561068257600080fd5b5061032b6106913660046127ef565b610fbd565b3480156106a257600080fd5b5061032b611009565b3480156106b757600080fd5b506103a56106c63660046127ef565b60106020526000908152604090205460ff1681565b3480156106e757600080fd5b506103a56106f63660046127ef565b611094565b34801561070757600080fd5b506103c66107163660046127ef565b6001600160a01b031660009081526020819052604090205490565b34801561073d57600080fd5b5061032b6110e0565b34801561075257600080fd5b506012546103f4906001600160a01b031681565b34801561077257600080fd5b506103c660085481565b34801561078857600080fd5b5061032b6107973660046128bd565b611154565b3480156107a857600080fd5b506009546001600160a01b03166103f4565b3480156107c657600080fd5b506016546103f4906001600160a01b031681565b3480156107e657600080fd5b506103c66107f53660046127ef565b6111a9565b34801561080657600080fd5b5061034f6111b4565b34801561081b57600080fd5b5061032b61082a366004612887565b6111c3565b34801561083b57600080fd5b506012546103a590600160a01b900460ff1681565b34801561085c57600080fd5b506012546103a590600160b01b900460ff1681565b34801561087d57600080fd5b506103a561088c36600461280c565b611259565b34801561089d57600080fd5b506103c66108ac3660046127ef565b6112a8565b3480156108bd57600080fd5b506103a56108cc36600461280c565b6112d4565b3480156108dd57600080fd5b506103c66108ec3660046127ef565b6001600160a01b031660009081526007602052604090205490565b34801561091357600080fd5b5061032b6109223660046128bd565b6112e1565b34801561093357600080fd5b506103a56109423660046127ef565b611336565b34801561095357600080fd5b506103a56109623660046128bd565b611382565b34801561097357600080fd5b5061032b6109823660046127ef565b611503565b34801561099357600080fd5b506103c66109a23660046128f6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109d957600080fd5b5061032b6109e836600461280c565b61154f565b3480156109f957600080fd5b50600e546103c6565b348015610a0e57600080fd5b5061032b610a1d3660046127ef565b6115e7565b348015610a2e57600080fd5b506105ff610a3d3660046127ef565b6116d2565b348015610a4e57600080fd5b50610a62610a5d3660046128a4565b611781565b6040805193845260208401929092529082015260600161035c565b6000610a8860025490565b11610a9257600080fd5b3415610b0e57610ac5610aa460025490565b610ab234600160801b6118a7565b610abc919061293a565b60055490611930565b60055560405134815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600854610b0a9034611930565b6008555b565b606060138054610b1f9061295c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4b9061295c565b8015610b985780601f10610b6d57610100808354040283529160200191610b98565b820191906000526020600020905b815481529060010190602001808311610b7b57829003601f168201915b5050505050905090565b6009546001600160a01b03163314610bd55760405162461bcd60e51b8152600401610bcc90612996565b60405180910390fd5b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6000610c0333848461198f565b5060015b92915050565b6000610c1a848484611ab3565b610c6c8433610c6785604051806060016040528060288152602001612b8b602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611af7565b61198f565b5060019392505050565b6001600160a01b03811660009081526006602090815260408083205491839052822054600554600160801b92610cc892610cc392610cbd91610cb891906118a7565b611b31565b90611b41565b611b7f565b610c07919061293a565b6009546001600160a01b03163314610cfc5760405162461bcd60e51b8152600401610bcc90612996565b6001600160a01b0381166000908152600f60205260408120805460ff19166001179055610d2a908290611b92565b610d35600a82611bf1565b6040516001600160a01b038216907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a250565b6009546001600160a01b03163314610d965760405162461bcd60e51b8152600401610bcc90612996565b801515601260169054906101000a900460ff16151503610db557600080fd5b60128054821515600160b01b0260ff60b01b199091161790556040517f3da2593f2c4724acfbd754045321e852cad26f3974834b1890045530f89c21b390610e0290831515815260200190565b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c03918590610c679086611930565b6009546001600160a01b03163314610e6d5760405162461bcd60e51b8152600401610bcc90612996565b801515601260159054906101000a900460ff16151503610e8c57600080fd5b60128054821515600160a81b0260ff60a81b199091161790556040517fc138a28750b971696f46ea59731c471ef1e08e4015404afdb139fd2e87dca1bb90610e0290831515815260200190565b600080600080600080610eeb600a5490565b8710610f0a575060009450600019935083925084915081905080610f30565b6000610f17600a89611d2c565b9050610f22816116d2565b965096509650965096509650505b91939550919395565b6009546001600160a01b03163314610f635760405162461bcd60e51b8152600401610bcc90612996565b610f7581670de0b6b3a76400006129cb565b60185550565b6009546001600160a01b03163314610fa55760405162461bcd60e51b8152600401610bcc90612996565b610fb781670de0b6b3a76400006129cb565b60195550565b6009546001600160a01b03163314610fe75760405162461bcd60e51b8152600401610bcc90612996565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b60405162461bcd60e51b815260206004820152605460248201527f77697468647261774469766964656e642064697361626c65642e20557365207460448201527f68652027636c61696d272066756e6374696f6e206f6e20746865206d61696e20606482015273213932b0b5a6b2a8363c1031b7b73a3930b1ba1760611b608482015260a401610bcc565b6009546000906001600160a01b031633146110c15760405162461bcd60e51b8152600401610bcc90612996565b506001600160a01b031660009081526010602052604090205460ff1690565b6009546001600160a01b0316331461110a5760405162461bcd60e51b8152600401610bcc90612996565b6009546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600980546001600160a01b0319169055565b6009546001600160a01b0316331461117e5760405162461bcd60e51b8152600401610bcc90612996565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000610c07826112a8565b606060148054610b1f9061295c565b6009546001600160a01b031633146111ed5760405162461bcd60e51b8152600401610bcc90612996565b801515601260149054906101000a900460ff1615150361120c57600080fd5b60128054821515600160a01b0260ff60a01b199091161790556040517f8d34c313963017194ed726d050e868657d0e2d2c6748d13e358cd4b89d4ee7c890610e0290831515815260200190565b6000610c033384610c6785604051806060016040528060258152602001612bb3602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611af7565b6001600160a01b038116600090815260076020526040812054610c07906112ce84610c76565b90611d5f565b6000610c03338484611ab3565b6009546001600160a01b0316331461130b5760405162461bcd60e51b8152600401610bcc90612996565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6009546000906001600160a01b031633146113635760405162461bcd60e51b8152600401610bcc90612996565b506001600160a01b031660009081526011602052604090205460ff1690565b6009546000906001600160a01b031633146113af5760405162461bcd60e51b8152600401610bcc90612996565b601254600160b01b900460ff16156113c957506000610c07565b6001600160a01b03831660009081526011602052604090205460ff168280156113ef5750805b80156114055750601254600160a81b900460ff16155b15611414576000915050610c07565b6000816114295761142485611da1565b611432565b6114328561205a565b905080156114f8576001600160a01b038516600090815260176020526040902042905581156114a657831515856001600160a01b03167ffbd928dd3806a2bdf802f3a28a2cc55205f95dbcd2c3ed313abfca278366f80c8360405161149991815260200190565b60405180910390a36114ed565b831515856001600160a01b03167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf092836040516114e491815260200190565b60405180910390a35b600192505050610c07565b506000949350505050565b6009546001600160a01b0316331461152d5760405162461bcd60e51b8152600401610bcc90612996565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b031633146115795760405162461bcd60e51b8152600401610bcc90612996565b6001600160a01b0382166000908152600f602052604090205460ff166115b9576019548110156115bd576115ae600a83611bf1565b6115b9826000611b92565b5050565b6115c78282611b92565b60185481106115dc576115b9600a83836123cd565b6115b9600a83611bf1565b6009546001600160a01b031633146116115760405162461bcd60e51b8152600401610bcc90612996565b6001600160a01b0381166116765760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bcc565b6009546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b806000808080806116e4600a87612476565b945060001993506000851261174657600e5485111561171257600e5461170b9086906124c1565b9350611746565b600e54600a5460009110611727576000611736565b600e54600a5461173691611d5f565b90506117428682611b41565b9450505b61174f866112a8565b925061175a86610c76565b6001600160a01b038716600090815260176020526040902054969895975093959294915050565b600a54600090819081908015806117a15750601254600160b01b900460ff165b156117b7575050600e54600092508291506118a0565b600e546000805a90506000805b89841080156117d257508582105b1561188f57846117e1816129e2565b9550508585106117f057600094505b6000600a6000018681548110611808576118086129fb565b60009182526020808320909101546001600160a01b0316808352601090915260409091205490915060ff1661185557611842816001611382565b156118555781611851816129e2565b9250505b8261185f816129e2565b93505060005a9050808511156118865761188361187c8683611d5f565b8790611930565b95505b93506117c49050565b600e85905590975095509193505050505b9193909250565b6000826000036118b957506000610c07565b60006118c583856129cb565b9050826118d2858361293a565b146119295760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bcc565b9392505050565b60008061193d8385612a11565b9050838110156119295760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bcc565b6001600160a01b0383166119f15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bcc565b6001600160a01b038216611a525760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bcc565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b8152602060048201526014602482015273139bc81d1c985b9cd9995c9cc8185b1b1bddd95960621b6044820152606401610bcc565b505050565b60008184841115611b1b5760405162461bcd60e51b8152600401610bcc9190612789565b506000611b288486612a24565b95945050505050565b60008181811215610c0757600080fd5b600080611b4e8385612a37565b905060008312158015611b615750838112155b80611b765750600083128015611b7657508381125b61192957600080fd5b600080821215611b8e57600080fd5b5090565b6001600160a01b03821660009081526020819052604090205480821115611bd1576000611bbf8383611d5f565b9050611bcb84826124fe565b50505050565b80821015611af2576000611be58284611d5f565b9050611bcb8482612562565b6001600160a01b038116600090815260038301602052604090205460ff16611c17575050565b6001600160a01b03811660009081526003830160209081526040808320805460ff1916905560018086018352818420849055600286019092528220548454909291611c6191612a24565b90506000846000018281548110611c7a57611c7a6129fb565b60009182526020808320909101546001600160a01b03908116808452600289019092526040808420879055908716835282209190915585549091508190869085908110611cc957611cc96129fb565b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790558454859080611d0357611d03612a5f565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b6000826000018281548110611d4357611d436129fb565b6000918252602090912001546001600160a01b03169392505050565b600061192983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611af7565b600080611dad836112a8565b90508015612051576001600160a01b038316600090815260076020526040902054611dd89082611930565b6001600160a01b03808516600090815260076020526040812092909255601254169081611e5d576040516001600160a01b03861690610bb89085906000818181858888f193505050503d8060008114611e4d576040519150601f19603f3d011682016040523d82523d6000602084013e611e52565b606091505b505080915050611fb7565b6040805160028082526060820183526000926020830190803683375050601554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eeb9190612a75565b81600081518110611efe57611efe6129fb565b60200260200101906001600160a01b031690816001600160a01b0316815250508281600181518110611f3257611f326129fb565b6001600160a01b03928316602091820292909201015260155460405163b6f9de9560e01b815291169063b6f9de95908690611f789060009086908c904290600401612ad6565b6000604051808303818588803b158015611f9157600080fd5b505af193505050508015611fa3575060015b611fb05760009150611fb5565b600191505b505b80612005576001600160a01b038516600090815260076020526040902054611fdf9084611d5f565b6001600160a01b0390951660009081526007602052604081209590955550929392505050565b846001600160a01b03167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d8460405161204091815260200190565b60405180910390a250909392505050565b50600092915050565b600080612066836112a8565b90508015612051576001600160a01b0383166000908152600760205260408120546120919083611930565b6001600160a01b03851660009081526007602052604080822092909255815160028082526060820190935290918160200160208202803683375050601554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612119573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213d9190612a75565b81600081518110612150576121506129fb565b6001600160a01b039283166020918202929092010152601654825191169082906001908110612181576121816129fb565b6001600160a01b0392831660209182029290920101526016546040516370a0823160e01b815230600482015260009291909116906370a0823190602401602060405180830381865afa1580156121db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ff9190612b0b565b60155460405163b6f9de9560e01b81529192506001600160a01b03169063b6f9de9590869061223990600090879030904290600401612ad6565b6000604051808303818588803b15801561225257600080fd5b505af193505050508015612264575060015b6122715760009250612374565b6016546040516370a0823160e01b81523060048201526000916122e49184916001600160a01b0316906370a0823190602401602060405180830381865afa1580156122c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ce9190612b0b565b9050801561236d5760165460405163a9059cbb60e01b81526001600160a01b03898116600483015260248201849052600196509091169063a9059cbb906044016020604051808303816000875af1158015612343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123679190612b24565b50612372565b600093505b505b826123c3576001600160a01b03861660009081526007602052604090205461239c9085611d5f565b6001600160a01b039096166000908152600760205260408120969096555093949350505050565b5091949350505050565b6001600160a01b038216600090815260038401602052604090205460ff1615612412576001600160a01b03821660009081526001840160205260409020819055505050565b6001600160a01b03821660008181526003850160209081526040808320805460ff19166001908117909155878101835281842086905587546002890184529184208290558101875586835291200180546001600160a01b0319169091179055505050565b6001600160a01b038116600090815260038301602052604081205460ff166124a15750600019610c07565b506001600160a01b03166000908152600291909101602052604090205490565b6000806124ce8385612b41565b9050600083121580156124e15750838113155b80611b765750600083128015611b76575083811361192957600080fd5b61250882826125a6565b612542612523610cb8836005546118a790919063ffffffff16565b6001600160a01b038416600090815260066020526040902054906124c1565b6001600160a01b0390921660009081526006602052604090209190915550565b61256c8282612685565b612542612587610cb8836005546118a790919063ffffffff16565b6001600160a01b03841660009081526006602052604090205490611b41565b6001600160a01b0382166125fc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610bcc565b6002546126099082611930565b6002556001600160a01b03821660009081526020819052604090205461262f9082611930565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6001600160a01b0382166126e55760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610bcc565b61272281604051806060016040528060228152602001612b69602291396001600160a01b0385166000908152602081905260409020549190611af7565b6001600160a01b0383166000908152602081905260409020556002546127489082611d5f565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001612679565b600060208083528351808285015260005b818110156127b65785810183015185820160400152820161279a565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146127ec57600080fd5b50565b60006020828403121561280157600080fd5b8135611929816127d7565b6000806040838503121561281f57600080fd5b823561282a816127d7565b946020939093013593505050565b60008060006060848603121561284d57600080fd5b8335612858816127d7565b92506020840135612868816127d7565b929592945050506040919091013590565b80151581146127ec57600080fd5b60006020828403121561289957600080fd5b813561192981612879565b6000602082840312156128b657600080fd5b5035919050565b600080604083850312156128d057600080fd5b82356128db816127d7565b915060208301356128eb81612879565b809150509250929050565b6000806040838503121561290957600080fd5b8235612914816127d7565b915060208301356128eb816127d7565b634e487b7160e01b600052601160045260246000fd5b60008261295757634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061297057607f821691505b60208210810361299057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8082028115828204841417610c0757610c07612924565b6000600182016129f4576129f4612924565b5060010190565b634e487b7160e01b600052603260045260246000fd5b80820180821115610c0757610c07612924565b81810381811115610c0757610c07612924565b8082018281126000831280158216821582161715612a5757612a57612924565b505092915050565b634e487b7160e01b600052603160045260246000fd5b600060208284031215612a8757600080fd5b8151611929816127d7565b600081518084526020808501945080840160005b83811015612acb5781516001600160a01b031687529582019590820190600101612aa6565b509495945050505050565b848152608060208201526000612aef6080830186612a92565b6001600160a01b03949094166040830152506060015292915050565b600060208284031215612b1d57600080fd5b5051919050565b600060208284031215612b3657600080fd5b815161192981612879565b8181036000831280158383131683831282161715612b6157612b61612924565b509291505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202c3895905f6b1cbf07c581a0e0bba910c9eeb1a9c4f9e5c107baabec583c6b5b64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106104cf5760003560e01c806375829def11610276578063ad56c13c1161014f578063e2f45605116100c1578063f2f5ec3a11610085578063f2f5ec3a14610eb3578063f2fde38b14610ed3578063f5d3c79a14610ef3578063f637434214610f13578063f8b45b0514610f29578063fc6b151c14610f3f57600080fd5b8063e2f4560514610e3c578063e7841ec014610e52578063ebae7c1c14610e67578063f11a24d314610e7d578063f27fd25414610e9357600080fd5b8063bb8d513111610113578063bb8d513114610d60578063d07a091c14610d76578063d5e3725114610d96578063d8032ed314610db6578063dd62ed3e14610dd6578063e14a93d614610e1c57600080fd5b8063ad56c13c14610c83578063b494298814610cda578063b62496f514610cf0578063b74e3b1114610d20578063ba079d4914610d4057600080fd5b806394564774116101e85780639c3372ea116101ac5780639c3372ea14610bcd5780639ec1037e14610bed578063a457c2d714610c0d578063a8b9d24014610c2d578063a9059cbb14610c4d578063acb2ad6f14610c6d57600080fd5b80639456477414610b5757806395451c2914610b6c57806395d89b4114610b825780639a7a23d614610b975780639c1b8af514610bb757600080fd5b8063868730c71161023a578063868730c714610aad578063871c128d14610acd5780638c3c82b214610aed5780638ca2923a14610b035780638da5cb5b14610b195780638ea5220f14610b3757600080fd5b806375829def14610a1757806375f0a87414610a3757806377a3b60914610a575780637fdde05c14610a6d5780638577a6d514610a8d57600080fd5b80634a74bb02116103a857806366236b4a1161031a578063700bb191116102de578063700bb1911461096d5780637088fb7f1461098d57806370a08231146109a257806370c8be13146109c2578063715018a6146109e257806372d8edf4146109f757600080fd5b806366236b4a146108d7578063679ca6e9146108f75780636843cd84146109175780636a42b8f8146109375780636d48467b1461094d57600080fd5b80635124f8741161036c5780635124f874146108365780635a84c5eb1461084c5780635c234bb61461086c5780635ebf4db9146108825780635eee4bae146108a257806364b0f653146108c257600080fd5b80634a74bb021461078d5780634ada218b146107a75780634e71d92d146107c85780634e974537146107dd5780634fbee193146107fd57600080fd5b806323b872dd116104415780633599bb17116104055780633599bb17146106dd57806339509351146106fd5780633f407b841461071d57806340ffdd801461073357806349bd5a5e146107535780634a62bb651461077357600080fd5b806323b872dd1461065757806325cd3598146106775780632c1f52161461068c57806330bb4cff146106ac578063313ce567146106c157600080fd5b8063095ea7b311610493578063095ea7b31461059c5780631694505e146105cc57806318160ddd146105ec5780631d7b1fb41461060b5780631fa70531146106215780632307b4411461063757600080fd5b806303fd2a45146104db57806305ca5f081461051857806306fdde031461053a57806308dfe8a51461055c578063092316021461057c57600080fd5b366104d657005b600080fd5b3480156104e757600080fd5b506008546104fb906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561052457600080fd5b5061053861053336600461454c565b610f5f565b005b34801561054657600080fd5b5061054f611030565b60405161050f9190614565565b34801561056857600080fd5b506105386105773660046145d6565b6110c2565b34801561058857600080fd5b5061053861059736600461454c565b61114b565b3480156105a857600080fd5b506105bc6105b736600461460f565b6111da565b604051901515815260200161050f565b3480156105d857600080fd5b506006546104fb906001600160a01b031681565b3480156105f857600080fd5b506002545b60405190815260200161050f565b34801561061757600080fd5b506105fd60315481565b34801561062d57600080fd5b506105fd600a5481565b34801561064357600080fd5b50610538610652366004614711565b6111f1565b34801561066357600080fd5b506105bc6106723660046147d3565b611378565b34801561068357600080fd5b506104fb6113e1565b34801561069857600080fd5b50600d546104fb906001600160a01b031681565b3480156106b857600080fd5b506105fd611454565b3480156106cd57600080fd5b506040516012815260200161050f565b3480156106e957600080fd5b506105386106f8366004614814565b6114c2565b34801561070957600080fd5b506105bc61071836600461460f565b61154f565b34801561072957600080fd5b506105fd60095481565b34801561073f57600080fd5b5061053861074e366004614814565b611585565b34801561075f57600080fd5b506007546104fb906001600160a01b031681565b34801561077f57600080fd5b506029546105bc9060ff1681565b34801561079957600080fd5b50601c546105bc9060ff1681565b3480156107b357600080fd5b506008546105bc90600160a81b900460ff1681565b3480156107d457600080fd5b506105386115e0565b3480156107e957600080fd5b506105386107f836600461454c565b611658565b34801561080957600080fd5b506105bc610818366004614831565b6001600160a01b03166000908152601e602052604090205460ff1690565b34801561084257600080fd5b506105fd60185481565b34801561085857600080fd5b5061053861086736600461454c565b6116fa565b34801561087857600080fd5b506105fd60175481565b34801561088e57600080fd5b5061053861089d36600461454c565b611755565b3480156108ae57600080fd5b506105386108bd36600461454c565b6117b0565b3480156108ce57600080fd5b506105fd6117f2565b3480156108e357600080fd5b506105386108f236600461454c565b61183c565b34801561090357600080fd5b50610538610912366004614814565b6118ed565b34801561092357600080fd5b506105fd610932366004614831565b61192a565b34801561094357600080fd5b506105fd60305481565b34801561095957600080fd5b506105bc610968366004614831565b61199a565b34801561097957600080fd5b5061053861098836600461454c565b611a0a565b34801561099957600080fd5b50610538611adc565b3480156109ae57600080fd5b506105fd6109bd366004614831565b611b39565b3480156109ce57600080fd5b506105386109dd366004614711565b611b54565b3480156109ee57600080fd5b50610538611d0d565b348015610a0357600080fd5b50610538610a12366004614831565b611d81565b348015610a2357600080fd5b50610538610a32366004614831565b611ddd565b348015610a4357600080fd5b50600e546104fb906001600160a01b031681565b348015610a6357600080fd5b506105fd601a5481565b348015610a7957600080fd5b50610538610a883660046145d6565b611e92565b348015610a9957600080fd5b50610538610aa836600461454c565b611ee6565b348015610ab957600080fd5b50610538610ac8366004614814565b611f9d565b348015610ad957600080fd5b50610538610ae836600461454c565b611fd5565b348015610af957600080fd5b506105fd602f5481565b348015610b0f57600080fd5b506105fd60145481565b348015610b2557600080fd5b506005546001600160a01b03166104fb565b348015610b4357600080fd5b50600f546104fb906001600160a01b031681565b348015610b6357600080fd5b50610538612051565b348015610b7857600080fd5b506105fd60155481565b348015610b8e57600080fd5b5061054f6120ef565b348015610ba357600080fd5b50610538610bb23660046145d6565b6120fe565b348015610bc357600080fd5b506105fd601d5481565b348015610bd957600080fd5b50610538610be8366004614814565b612132565b348015610bf957600080fd5b50610538610c08366004614831565b61218e565b348015610c1957600080fd5b506105bc610c2836600461460f565b612251565b348015610c3957600080fd5b506105fd610c48366004614831565b6122a0565b348015610c5957600080fd5b506105bc610c6836600461460f565b6122d3565b348015610c7957600080fd5b506105fd601b5481565b348015610c8f57600080fd5b50610ca3610c9e366004614831565b6122e0565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c00161050f565b348015610ce657600080fd5b506105fd602e5481565b348015610cfc57600080fd5b506105bc610d0b366004614831565b601f6020526000908152604090205460ff1681565b348015610d2c57600080fd5b50610538610d3b36600461454c565b612370565b348015610d4c57600080fd5b506105bc610d5b366004614831565b612400565b348015610d6c57600080fd5b506105fd60135481565b348015610d8257600080fd5b50610538610d91366004614831565b612433565b348015610da257600080fd5b50610538610db1366004614814565b612529565b348015610dc257600080fd5b50610538610dd1366004614831565b6125ab565b348015610de257600080fd5b506105fd610df136600461484e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610e2857600080fd5b50610538610e3736600461487c565b61266e565b348015610e4857600080fd5b506105fd60125481565b348015610e5e57600080fd5b506105fd6127f0565b348015610e7357600080fd5b506105fd60115481565b348015610e8957600080fd5b506105fd60195481565b348015610e9f57600080fd5b50610ca3610eae36600461454c565b61283a565b348015610ebf57600080fd5b50610538610ece3660046148ae565b612878565b348015610edf57600080fd5b50610538610eee366004614831565b612a3e565b348015610eff57600080fd5b50610538610f0e366004614814565b612b29565b348015610f1f57600080fd5b506105fd60165481565b348015610f3557600080fd5b506105fd60105481565b348015610f4b57600080fd5b50610538610f5a36600461454c565b612b61565b6005546001600160a01b03163314610f925760405162461bcd60e51b8152600401610f8990614903565b60405180910390fd5b610fa481670de0b6b3a764000061494e565b90506000610fbf600954600a54612c1690919063ffffffff16565b90506000610fe282610fdc600a5486612c7c90919063ffffffff16565b90612cfe565b90506000610fff83610fdc60095487612c7c90919063ffffffff16565b905061100a84612d40565b600a546110179083612f65565b600a556009546110279082612f65565b60095550505050565b60606003805461103f90614965565b80601f016020809104026020016040519081016040528092919081815260200182805461106b90614965565b80156110b85780601f1061108d576101008083540402835291602001916110b8565b820191906000526020600020905b81548152906001019060200180831161109b57829003601f168201915b5050505050905090565b6005546001600160a01b031633146110ec5760405162461bcd60e51b8152600401610f8990614903565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146111755760405162461bcd60e51b8152600401610f8990614903565b60328110156111c65760405162461bcd60e51b815260206004820152601e60248201527f63616e206e6576657220626520736574206c6f776572207468616e20353000006044820152606401610f89565b6111d481633b9aca0061494e565b602a5550565b60006111e7338484612fa7565b5060015b92915050565b6005546001600160a01b0316331461121b5760405162461bcd60e51b8152600401610f8990614903565b805182511461126c5760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610f89565b60c88251111561128e5760405162461bcd60e51b8152600401610f899061499f565b60005b82518110156113735760008382815181106112ae576112ae6149e1565b6020026020010151905060008383815181106112cc576112cc6149e1565b6020026020010151670de0b6b3a76400006112e7919061494e565b90506112f43383836130cc565b600d546001600160a01b031663e30443bc8361130f816131d5565b6040518363ffffffff1660e01b815260040161132c9291906149f7565b600060405180830381600087803b15801561134657600080fd5b505af115801561135a573d6000803e3d6000fd5b505050505050808061136b90614a10565b915050611291565b505050565b600061138584848461335a565b6113d784336113d285604051806060016040528060288152602001614c65602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190614190565b612fa7565b5060019392505050565b600d54604080516304b9a6b360e31b815290516000926001600160a01b0316916325cd35989160048083019260209291908290030181865afa15801561142b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144f9190614a29565b905090565b600d54604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa15801561149e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144f9190614a46565b6005546001600160a01b031633146114ec5760405162461bcd60e51b8152600401610f8990614903565b600d54604051633599bb1760e01b815282151560048201526001600160a01b0390911690633599bb17906024015b600060405180830381600087803b15801561153457600080fd5b505af1158015611548573d6000803e3d6000fd5b5050505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916111e79185906113d29086612c16565b6005546001600160a01b031633146115af5760405162461bcd60e51b8152600401610f8990614903565b600d546040516281ffbb60e71b815282151560048201526001600160a01b03909116906340ffdd809060240161151a565b600d5460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af1158015611631573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116559190614a5f565b50565b6005546001600160a01b031633146116825760405162461bcd60e51b8152600401610f8990614903565b61169481670de0b6b3a764000061494e565b90506107d06002546116a69190614a7c565b8111156116f55760405162461bcd60e51b815260206004820181905260248201527f63616e6e6f742062652073657420746f206c657373207468616e20302e3035256044820152606401610f89565b602855565b6005546001600160a01b031633146117245760405162461bcd60e51b8152600401610f8990614903565b600d54604051635a84c5eb60e01b8152600481018390526001600160a01b0390911690635a84c5eb9060240161151a565b6005546001600160a01b0316331461177f5760405162461bcd60e51b8152600401610f8990614903565b600d54604051635ebf4db960e01b8152600481018390526001600160a01b0390911690635ebf4db99060240161151a565b6005546001600160a01b031633146117da5760405162461bcd60e51b8152600401610f8990614903565b6117ec81670de0b6b3a764000061494e565b60125550565b600d54604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa15801561149e573d6000803e3d6000fd5b6005546001600160a01b031633146118665760405162461bcd60e51b8152600401610f8990614903565b61187881670de0b6b3a764000061494e565b90506103e860025461188a9190614a7c565b8110156118e85760405162461bcd60e51b815260206004820152602660248201527f6d61782074782063616e6e6f742062652073657420746f206c657373207468616044820152656e20302e312560d01b6064820152608401610f89565b601155565b6005546001600160a01b031633146119175760405162461bcd60e51b8152600401610f8990614903565b6029805460ff1916911515919091179055565b600d546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015611976573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111eb9190614a46565b600d54604051636d48467b60e01b81526001600160a01b0383811660048301526000921690636d48467b906024015b602060405180830381865afa1580156119e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111eb9190614a5f565b600d546040516001624d3b8760e01b0319815260048101839052600091829182916001600160a01b03169063ffb2c479906024016060604051808303816000875af1158015611a5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a819190614a9e565b604080518481526020810184905290810182905260608101889052929550909350915032906000907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a350505050565b6005546001600160a01b03163314611b065760405162461bcd60e51b8152600401610f8990614903565b6040514790339082156108fc029083906000818181858888f19350505050158015611b35573d6000803e3d6000fd5b5050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314611b7e5760405162461bcd60e51b8152600401610f8990614903565b8051825114611bcf5760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610f89565b60c882511115611bf15760405162461bcd60e51b8152600401610f899061499f565b60005b8251811015611373576000838281518110611c1157611c116149e1565b602002602001015190506000838381518110611c2f57611c2f6149e1565b6020026020010151670de0b6b3a7640000611c4a919061494e565b9050611c573383836130cc565b600d546001600160a01b031663e30443bc83611c72816131d5565b6040518363ffffffff1660e01b8152600401611c8f9291906149f7565b600060405180830381600087803b158015611ca957600080fd5b505af1158015611cbd573d6000803e3d6000fd5b5050506001600160a01b0390921660009081526021602090815260408083209390935560228152828220805460ff1916600117905560239052204290555080611d0581614a10565b915050611bf4565b6005546001600160a01b03163314611d375760405162461bcd60e51b8152600401610f8990614903565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314611dab5760405162461bcd60e51b8152600401610f8990614903565b600d5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db09060240161151a565b6005546001600160a01b03163314611e075760405162461bcd60e51b8152600401610f8990614903565b600d5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b158015611e4e57600080fd5b505af1158015611e62573d6000803e3d6000fd5b5050506001600160a01b0382166000908152601e60205260409020805460ff191660011790555061165581612a3e565b6005546001600160a01b03163314611ebc5760405162461bcd60e51b8152600401610f8990614903565b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611f105760405162461bcd60e51b8152600401610f8990614903565b6005811115611f615760405162461bcd60e51b815260206004820152601d60248201527f7472616e73666572206665652063616e6e6f74206578636565642035250000006044820152606401610f89565b601b8190556040518181527f6fbeac6c79c640ca4f5f47271bd7a36c7eb83076224c65a3b3378c8844720343906020015b60405180910390a150565b600d54604051638bc1d63960e01b815233600482015282151560248201526001600160a01b0390911690638bc1d6399060440161151a565b6005546001600160a01b03163314611fff5760405162461bcd60e51b8152600401610f8990614903565b62030d4081101580156120155750624c4b408111155b61201e57600080fd5b601d5460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3601d55565b3360009081526025602052604090205460ff1661208357336000908152602560205260409020805460ff191660011790555b600d546001600160a01b031663e30443bc3361209e816131d5565b6040518363ffffffff1660e01b81526004016120bb9291906149f7565b600060405180830381600087803b1580156120d557600080fd5b505af11580156120e9573d6000803e3d6000fd5b50505050565b60606004805461103f90614965565b6005546001600160a01b031633146121285760405162461bcd60e51b8152600401610f8990614903565b611b3582826141ca565b6005546001600160a01b0316331461215c5760405162461bcd60e51b8152600401610f8990614903565b600d54604051634e19b97560e11b815282151560048201526001600160a01b0390911690639c3372ea9060240161151a565b6005546001600160a01b031633146121b85760405162461bcd60e51b8152600401610f8990614903565b600d54604051630928847160e01b81526001600160a01b03838116600483015290911690630928847190602401600060405180830381600087803b1580156121ff57600080fd5b505af1158015612213573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc905082612234816131d5565b6040518363ffffffff1660e01b815260040161151a9291906149f7565b60006111e733846113d285604051806060016040528060258152602001614c8d602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190614190565b600d546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401611959565b60006111e733848461335a565b600d5460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283929091169063fbcbc0f1906024015b60c060405180830381865afa158015612338573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235c9190614acc565b949c939b5091995097509550909350915050565b6005546001600160a01b0316331461239a5760405162461bcd60e51b8152600401610f8990614903565b61012c8111156123fb5760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d604482015265696e7574657360d01b6064820152608401610f89565b603155565b600d5460405163ba079d4960e01b81526001600160a01b038381166004830152600092169063ba079d49906024016119c9565b6005546001600160a01b0316331461245d5760405162461bcd60e51b8152600401610f8990614903565b6001600160a01b038181166000818152602080805260408083208054600160ff199182168117909255601e9093529281902080549092169092179055600d54905163031e79db60e41b81526004810192909252909116906331e79db090602401600060405180830381600087803b1580156124d757600080fd5b505af11580156124eb573d6000803e3d6000fd5b50506040516001600160a01b03841681527f85d097e432d8e396fa72c83ebd34196326e1cf1694ef910cd53554b2ee7597c592506020019050611f92565b6005546001600160a01b031633146125535760405162461bcd60e51b8152600401610f8990614903565b601c5481151560ff90911615150361256a57600080fd5b601c805460ff19168215159081179091556040519081527fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef90602001611f92565b6005546001600160a01b031633146125d55760405162461bcd60e51b8152600401610f8990614903565b600d5460405163d8032ed360e01b81526001600160a01b0383811660048301529091169063d8032ed390602401600060405180830381600087803b15801561261c57600080fd5b505af1158015612630573d6000803e3d6000fd5b50506040516001600160a01b03841681527f7597aa09105646b4cc4486748aecd1d7c5dbcbb7bbe2863c3fc27e613b64432d92506020019050611f92565b6005546001600160a01b031633146126985760405162461bcd60e51b8152600401610f8990614903565b6126aa83670de0b6b3a764000061494e565b92506126be82670de0b6b3a764000061494e565b600854909250600160a81b900460ff16156126d857600080fd5b6103e86002546126e89190614a7c565b83101561272f5760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b6044820152606401610f89565b6103e860025461273f9190614a7c565b8210156127865760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b6044820152606401610f89565b6010839055601182905561279e84633b9aca0061494e565b602a556008805460ff60a81b1916600160a81b17905543602e5542602f5560308190556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a150505050565b600d546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec09160048083019260209291908290030181865afa15801561149e573d6000803e3d6000fd5b600d54604051635183d6fd60e01b815260048101839052600091829182918291829182916001600160a01b0390911690635183d6fd9060240161231b565b6005546001600160a01b031633146128a25760405162461bcd60e51b8152600401610f8990614903565b601788905560188690556019849055601a82905560148790556015859055601683905560138190556128de856128d88386612c16565b90612c16565b600b55601854601954601a546128f992916128d89190612c16565b600c556003881180159061290e575060038711155b61295a5760405162461bcd60e51b815260206004820152601a60248201527f6275726e20666565732063616e6e6f74206578636565642033250000000000006044820152606401610f89565b600a600b54111580156129705750600a600c5411155b6129bc5760405162461bcd60e51b815260206004820152601c60248201527f746f74616c20666565732063616e6e6f742065786365656420313025000000006044820152606401610f89565b601454601554601654601354601754601854601954601a54604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e08201527f1640531881cbf0e2bf36c30fec3ed06b08e062adb13340f00fd16cedba09637a906101000160405180910390a15050505050505050565b6005546001600160a01b03163314612a685760405162461bcd60e51b8152600401610f8990614903565b6001600160a01b038116612acd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f89565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600d54604051632c8be28160e21b815233600482015282151560248201526001600160a01b039091169063b22f8a049060440161151a565b6005546001600160a01b03163314612b8b5760405162461bcd60e51b8152600401610f8990614903565b612b9d81670de0b6b3a764000061494e565b90506103e8600254612baf9190614a7c565b811015612c115760405162461bcd60e51b815260206004820152602a60248201527f6d61782077616c6c65742063616e6e6f742062652073657420746f206c657373604482015269207468616e20302e312560b01b6064820152608401610f89565b601055565b600080612c238385614b1f565b905083811015612c755760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610f89565b9392505050565b600082600003612c8e575060006111eb565b6000612c9a838561494e565b905082612ca78583614a7c565b14612c755760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610f89565b6000612c7583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614293565b80600003612d4b5750565b612d54816142c1565b6000612d6d600954600a54612c1690919063ffffffff16565b601a5490915060019081906000908190819015612dbf57612dbc601854601a54612d979190614b1f565b610fdc601a54612db68a610fdc600a5447612c7c90919063ffffffff16565b90612c7c565b91505b60135415612dfc57612df9601554601354612dda9190614b1f565b610fdc601354612db68a610fdc60095447612c7c90919063ffffffff16565b90505b612e068282612c16565b92508215612e6657600d546040516001600160a01b03909116908490600081818185875af1925050503d8060008114612e5b576040519150601f19603f3d011682016040523d82523d6000602084013e612e60565b606091505b50909550505b6000601854601554612e789190614b1f565b905060008115612e8f57612e8c4783612cfe565b90505b6000612eac82612db6601554601854612c1690919063ffffffff16565b90508015612f0c57600e546040516001600160a01b03909116908290600081818185875af1925050503d8060008114612f01576040519150601f19603f3d011682016040523d82523d6000602084013e612f06565b606091505b50909750505b7f8e09ec88c0d24c22e3a9b8555c029afcc4a7c609daabf6d7849e814c2d14efd086828a8015612f395750895b60408051938452602084019290925215159082015260600160405180910390a150505050505050505050565b6000612c7583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614190565b6001600160a01b0383166130095760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f89565b6001600160a01b03821661306a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f89565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166130f25760405162461bcd60e51b8152600401610f8990614b32565b6001600160a01b0382166131185760405162461bcd60e51b8152600401610f8990614b77565b61315581604051806060016040528060268152602001614c3f602691396001600160a01b0386166000908152602081905260409020549190614190565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546131849082612c16565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016130bf565b6001600160a01b038116600090815260256020526040812054819060ff16801561322157506001600160a01b0383166000908152602d602052604090205461321e90603c614b1f565b42115b801561324f57506001600160a01b0383166000908152602d602052604090205461324c906078614b1f565b42105b15613269576132626003612db685611b39565b90506111eb565b6001600160a01b03831660009081526025602052604090205460ff1680156132b357506001600160a01b0383166000908152602d60205260409020546132b0906078614b1f565b42115b80156132e157506001600160a01b0383166000908152602d60205260409020546132de9060b4614b1f565b42105b156132f4576132626005612db685611b39565b6001600160a01b03831660009081526025602052604090205460ff16801561333e57506001600160a01b0383166000908152602d602052604090205461333b9060b4614b1f565b42115b15613351576132626007612db685611b39565b612c7583611b39565b6001600160a01b0383166133805760405162461bcd60e51b8152600401610f8990614b32565b6001600160a01b0382166133a65760405162461bcd60e51b8152600401610f8990614b77565b6001600160a01b038316600090815260208052604081205481908190819060ff1661342457600854600160a81b900460ff166134245760405162461bcd60e51b815260206004820181905260248201527f54726164696e6720686173206e6f7420796574206265656e20656e61626c65646044820152606401610f89565b8460000361344157613438878760006130cc565b50505050505050565b6001600160a01b03871660009081526022602052604090205460ff1615613540576001600160a01b0387166000908152602360205260409020546134879061012c614b1f565b42101561350e576001600160a01b038716600090815260216020526040902054856134b189611b39565b6134bb9190614bba565b10156135095760405162461bcd60e51b815260206004820152601760248201527f63616e742073656c6c2076657374656420746f6b656e730000000000000000006044820152606401610f89565b6140a6565b6001600160a01b038716600090815260216020908152604080832083905560229091529020805460ff191690556140a6565b600854600160a01b900460ff1615801561357357506001600160a01b0387166000908152601e602052604090205460ff16155b801561359857506001600160a01b0386166000908152601e602052604090205460ff16155b156140a6576001600160a01b038087166000908152601f602052604080822054928a16825290205460ff9182169116801580156135d3575081155b156138a9576001600160a01b0389166000908152601e602052604090205460ff1615801561361a57506001600160a01b0388166000908152601e602052604090205460ff16155b1561377f57600061363b6064610fdc601b548b612c7c90919063ffffffff16565b90506136478882612f65565b97506136548a30836130cc565b61365f8a8a8a6130cc565b600d546001600160a01b031663e30443bc8b61367a816131d5565b6040518363ffffffff1660e01b81526004016136979291906149f7565b600060405180830381600087803b1580156136b157600080fd5b505af11580156136c5573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc90508a6136e6816131d5565b6040518363ffffffff1660e01b81526004016137039291906149f7565b600060405180830381600087803b15801561371d57600080fd5b505af1158015613731573d6000803e3d6000fd5b5050506001600160a01b03909a166000908152602460209081526040808320805460ff199081169091556025835281842080549091169055602d909152902042905550505050505050505050565b61378a8989896130cc565b600d546001600160a01b031663e30443bc8a6137a5816131d5565b6040518363ffffffff1660e01b81526004016137c29291906149f7565b600060405180830381600087803b1580156137dc57600080fd5b505af11580156137f0573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc905089613811816131d5565b6040518363ffffffff1660e01b815260040161382e9291906149f7565b600060405180830381600087803b15801561384857600080fd5b505af115801561385c573d6000803e3d6000fd5b5050506001600160a01b039099166000908152602460209081526040808320805460ff199081169091556025835281842080549091169055602d9091529020429055505050505050505050565b81156139f05760285487106138c157600895506138c7565b60135495505b601454601554601654602954929750909550935060ff16156139ad57603154326000908152602c60205260409020546139009190614b1f565b4210156139485760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b6044820152606401610f89565b60115487111561399a5760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d697400000000006044820152606401610f89565b326000908152602c602052604090204290555b6001600160a01b0389166000908152602460209081526040808320805460ff199081169091556025835281842080549091169055602d9091529020429055613de0565b8015613de0576001600160a01b03881660009081526024602052604090205460ff1615613b46576001600160a01b038816600090815260266020526040902054613a3c9061012c614b1f565b4210158015613a555750602854613a5289611b39565b10155b15613b4657613a658989896130cc565b600d546001600160a01b031663e30443bc8a613a80816131d5565b6040518363ffffffff1660e01b8152600401613a9d9291906149f7565b600060405180830381600087803b158015613ab757600080fd5b505af1158015613acb573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc905089613aec816131d5565b6040518363ffffffff1660e01b8152600401613b099291906149f7565b600060405180830381600087803b158015613b2357600080fd5b505af1158015613b37573d6000803e3d6000fd5b50505050505050505050505050565b6001600160a01b03881660009081526025602052604090205460ff16613b97576001600160a01b0388166000908152602560209081526040808320805460ff19166001179055602d90915290204290555b6001600160a01b03881660009081526024602052604090205460ff16613be8576001600160a01b0388166000908152602460209081526040808320805460ff19166001179055602690915290204290555b601a546017546018546019546029549399509197509550935060ff1615613d6957603054602f54613c199190614b1f565b4211613c5c5760405162461bcd60e51b8152602060048201526012602482015271796f75207368616c6c206e6f74207061737360701b6044820152606401610f89565b602a543a1115613cae5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610f89565b326000908152602b6020526040902054439003613d045760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e7920545820696e20626c6f636b60601b6044820152606401610f89565b601154871115613d565760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d697400000000006044820152606401610f89565b326000908152602b602052604090204390555b6000613d7489611b39565b601054909150613d848983614b1f565b1115613dde5760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610f89565b505b6000613df6613def8686614b1f565b8890612c16565b90506000613e0330611b39565b60125490915081108015908190613e175750845b15613f30576008805460ff60a01b1916600160a01b179055601c5460ff168015613e415750600086115b8015613e4f57506000600c54115b15613f01576000613e6d600954600a54612c1690919063ffffffff16565b90506000613e8a82610fdc600a5487612c7c90919063ffffffff16565b90506000613ea783610fdc60095488612c7c90919063ffffffff16565b90506000613ec4600c54610fdc8c86612c7c90919063ffffffff16565b90506000613ee1600b54610fdc8d86612c7c90919063ffffffff16565b90506000613eef8284612c16565b9050613efa8161441b565b5050505050505b6000613f0c30611b39565b9050613f1781612d40565b506001600a8190556009556008805460ff60a01b191690555b6000613f416064610fdc8d87612c7c565b905060008915613f8d576064613f578d8c612c7c565b613f619190614a7c565b600854909150613f7c908f906001600160a01b0316836130cc565b600254613f899082612f65565b6002555b613fa1613f9a8284614b1f565b8d90612f65565b9b508615613fbe57600954613fb69083612c16565b600955613fcf565b600a54613fcb9083612c16565b600a555b613fda8e30846130cc565b601d54600d546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af1925050508015614047575060408051601f3d908101601f1916820190925261404491810190614a9e565b60015b1561409d5760408051848152602081018490529081018290526060810185905232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b50505050505050505b6140b18787876130cc565b600d546001600160a01b031663e30443bc886140cc816131d5565b6040518363ffffffff1660e01b81526004016140e99291906149f7565b600060405180830381600087803b15801561410357600080fd5b505af1158015614117573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc905087614138816131d5565b6040518363ffffffff1660e01b81526004016141559291906149f7565b600060405180830381600087803b15801561416f57600080fd5b505af1158015614183573d6000803e3d6000fd5b5050505050505050505050565b600081848411156141b45760405162461bcd60e51b8152600401610f899190614565565b5060006141c18486614bba565b95945050505050565b6001600160a01b0382166000908152601f60205260409020805460ff1916821580159190911790915561425757600d5460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801561423e57600080fd5b505af1158015614252573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b600081836142b45760405162461bcd60e51b8152600401610f899190614565565b5060006141c18486614a7c565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106142f6576142f66149e1565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561434f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143739190614a29565b81600181518110614386576143866149e1565b6001600160a01b0392831660209182029290920101526006546143ac9130911684612fa7565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906143e5908590600090869030904290600401614bcd565b600060405180830381600087803b1580156143ff57600080fd5b505af1158015614413573d6000803e3d6000fd5b505050505050565b6000614428826002612cfe565b905060006144368383612f65565b905047614442836142c1565b600061444e4783612f65565b905061445a83826144a2565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b6006546144ba9030906001600160a01b031684612fa7565b60065460405163f305d71960e01b8152306004820152602481018490526000604482018190526064820181905260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015614527573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906115489190614a9e565b60006020828403121561455e57600080fd5b5035919050565b600060208083528351808285015260005b8181101561459257858101830151858201604001528201614576565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461165557600080fd5b801515811461165557600080fd5b600080604083850312156145e957600080fd5b82356145f4816145b3565b91506020830135614604816145c8565b809150509250929050565b6000806040838503121561462257600080fd5b823561462d816145b3565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561467a5761467a61463b565b604052919050565b600067ffffffffffffffff82111561469c5761469c61463b565b5060051b60200190565b600082601f8301126146b757600080fd5b813560206146cc6146c783614682565b614651565b82815260059290921b840181019181810190868411156146eb57600080fd5b8286015b8481101561470657803583529183019183016146ef565b509695505050505050565b6000806040838503121561472457600080fd5b823567ffffffffffffffff8082111561473c57600080fd5b818501915085601f83011261475057600080fd5b813560206147606146c783614682565b82815260059290921b8401810191818101908984111561477f57600080fd5b948201945b838610156147a6578535614797816145b3565b82529482019490820190614784565b965050860135925050808211156147bc57600080fd5b506147c9858286016146a6565b9150509250929050565b6000806000606084860312156147e857600080fd5b83356147f3816145b3565b92506020840135614803816145b3565b929592945050506040919091013590565b60006020828403121561482657600080fd5b8135612c75816145c8565b60006020828403121561484357600080fd5b8135612c75816145b3565b6000806040838503121561486157600080fd5b823561486c816145b3565b91506020830135614604816145b3565b6000806000806080858703121561489257600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600080600080610100898b0312156148cb57600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176111eb576111eb614938565b600181811c9082168061497957607f821691505b60208210810361499957634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526022908201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2032604082015261030360f41b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03929092168252602082015260400190565b600060018201614a2257614a22614938565b5060010190565b600060208284031215614a3b57600080fd5b8151612c75816145b3565b600060208284031215614a5857600080fd5b5051919050565b600060208284031215614a7157600080fd5b8151612c75816145c8565b600082614a9957634e487b7160e01b600052601260045260246000fd5b500490565b600080600060608486031215614ab357600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c08789031215614ae557600080fd5b8651614af0816145b3565b6020880151604089015160608a015160808b015160a0909b0151939c929b509099909850965090945092505050565b808201808211156111eb576111eb614938565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156111eb576111eb614938565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015614c1d5784516001600160a01b031683529383019391830191600101614bf8565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201ab2eb92f6e3f742f859d8e596b0e9fe67f66ffdbde1080c246d170ffee9f4c964736f6c63430008110033

Deployed Bytecode Sourcemap

23380:29546:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23545:64;;;;;;;;;;-1:-1:-1;23545:64:0;;;;-1:-1:-1;;;;;23545:64:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;23545:64:0;;;;;;;;49496:443;;;;;;;;;;-1:-1:-1;49496:443:0;;;;;:::i;:::-;;:::i;:::-;;5029:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;31007:181::-;;;;;;;;;;-1:-1:-1;31007:181:0;;;;;:::i;:::-;;:::i;31975:171::-;;;;;;;;;;-1:-1:-1;31975:171:0;;;;;:::i;:::-;;:::i;5943:169::-;;;;;;;;;;-1:-1:-1;5943:169:0;;;;;:::i;:::-;;:::i;:::-;;;2091:14:1;;2084:22;2066:41;;2054:2;2039:18;5943:169:0;1926:187:1;23460:41:0;;;;;;;;;;-1:-1:-1;23460:41:0;;;;-1:-1:-1;;;;;23460:41:0;;;5350:108;;;;;;;;;;-1:-1:-1;5438:12:0;;5350:108;;;2499:25:1;;;2487:2;2472:18;5350:108:0;2353:177:1;25724:33:0;;;;;;;;;;;;;;;;23723:28;;;;;;;;;;;;;;;;51475:641;;;;;;;;;;-1:-1:-1;51475:641:0;;;;;:::i;:::-;;:::i;6120:338::-;;;;;;;;;;-1:-1:-1;6120:338:0;;;;;:::i;:::-;;:::i;48522:114::-;;;;;;;;;;;;;:::i;23833:48::-;;;;;;;;;;-1:-1:-1;23833:48:0;;;;-1:-1:-1;;;;;23833:48:0;;;36568:141;;;;;;;;;;;;;:::i;29632:93::-;;;;;;;;;;-1:-1:-1;29632:93:0;;29715:2;5875:36:1;;5863:2;5848:18;29632:93:0;5733:184:1;38627:119:0;;;;;;;;;;-1:-1:-1;38627:119:0;;;;;:::i;:::-;;:::i;6466:218::-;;;;;;;;;;-1:-1:-1;6466:218:0;;;;;:::i;:::-;;:::i;23687:29::-;;;;;;;;;;;;;;;;34077:121;;;;;;;;;;-1:-1:-1;34077:121:0;;;;;:::i;:::-;;:::i;23510:28::-;;;;;;;;;;-1:-1:-1;23510:28:0;;;;-1:-1:-1;;;;;23510:28:0;;;25232:33;;;;;;;;;;-1:-1:-1;25232:33:0;;;;;;;;24452:40;;;;;;;;;;-1:-1:-1;24452:40:0;;;;;;;;23644:34;;;;;;;;;;-1:-1:-1;23644:34:0;;;;-1:-1:-1;;;23644:34:0;;;;;;37996:103;;;;;;;;;;;;;:::i;33184:238::-;;;;;;;;;;-1:-1:-1;33184:238:0;;;;;:::i;:::-;;:::i;36717:126::-;;;;;;;;;;-1:-1:-1;36717:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;36807:28:0;36783:4;36807:28;;;:19;:28;;;;;;;;;36717:126;24307:31;;;;;;;;;;;;;;;;48644:160;;;;;;;;;;-1:-1:-1;48644:160:0;;;;;:::i;:::-;;:::i;24274:26::-;;;;;;;;;;;;;;;;48812:152;;;;;;;;;;-1:-1:-1;48812:152:0;;;;;:::i;:::-;;:::i;33456:120::-;;;;;;;;;;-1:-1:-1;33456:120:0;;;;;:::i;:::-;;:::i;38245:142::-;;;;;;;;;;;;;:::i;32967:209::-;;;;;;;;;;-1:-1:-1;32967:209:0;;;;;:::i;:::-;;:::i;31847:99::-;;;;;;;;;;-1:-1:-1;31847:99:0;;;;;:::i;:::-;;:::i;37011:139::-;;;;;;;;;;-1:-1:-1;37011:139:0;;;;;:::i;:::-;;:::i;25697:20::-;;;;;;;;;;;;;;;;38754:153;;;;;;;;;;-1:-1:-1;38754:153:0;;;;;:::i;:::-;;:::i;37717:271::-;;;;;;;;;;-1:-1:-1;37717:271:0;;;;;:::i;:::-;;:::i;32756:146::-;;;;;;;;;;;;;:::i;5466:127::-;;;;;;;;;;-1:-1:-1;5466:127:0;;;;;:::i;:::-;;:::i;52124:799::-;;;;;;;;;;-1:-1:-1;52124:799:0;;;;;:::i;:::-;;:::i;11545:148::-;;;;;;;;;;;;;:::i;31237:127::-;;;;;;;;;;-1:-1:-1;31237:127:0;;;;;:::i;:::-;;:::i;34743:208::-;;;;;;;;;;-1:-1:-1;34743:208:0;;;;;:::i;:::-;;:::i;23890:38::-;;;;;;;;;;-1:-1:-1;23890:38:0;;;;-1:-1:-1;;;;;23890:38:0;;;24382:28;;;;;;;;;;;;;;;;31661:147;;;;;;;;;;-1:-1:-1;31661:147:0;;;;;:::i;:::-;;:::i;34959:234::-;;;;;;;;;;-1:-1:-1;34959:234:0;;;;;:::i;:::-;;:::i;38395:109::-;;;;;;;;;;-1:-1:-1;38395:109:0;;;;;:::i;:::-;;:::i;34494:241::-;;;;;;;;;;-1:-1:-1;34494:241:0;;;;;:::i;:::-;;:::i;25654:30::-;;;;;;;;;;;;;;;;24163:27;;;;;;;;;;;;;;;;11331:79;;;;;;;;;;-1:-1:-1;11396:6:0;;-1:-1:-1;;;;;11396:6:0;11331:79;;23935:32;;;;;;;;;;-1:-1:-1;23935:32:0;;;;-1:-1:-1;;;;;23935:32:0;;;35201:241;;;;;;;;;;;;;:::i;24197:32::-;;;;;;;;;;;;;;;;5137:104;;;;;;;;;;;;;:::i;33800:140::-;;;;;;;;;;-1:-1:-1;33800:140:0;;;;;:::i;:::-;;:::i;24501:40::-;;;;;;;;;;;;;;;;33948:121;;;;;;;;;;-1:-1:-1;33948:121:0;;;;;:::i;:::-;;:::i;31402:197::-;;;;;;;;;;-1:-1:-1;31402:197:0;;;;;:::i;:::-;;:::i;6692:286::-;;;;;;;;;;-1:-1:-1;6692:286:0;;;;;:::i;:::-;;:::i;36851:152::-;;;;;;;;;;-1:-1:-1;36851:152:0;;;;;:::i;:::-;;:::i;5601:175::-;;;;;;;;;;-1:-1:-1;5601:175:0;;;;;:::i;:::-;;:::i;24417:26::-;;;;;;;;;;;;;;;;37158:264;;;;;;;;;;-1:-1:-1;37158:264:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;6945:32:1;;;6927:51;;7009:2;6994:18;;6987:34;;;;7037:18;;;7030:34;;;;7095:2;7080:18;;7073:34;7138:3;7123:19;;7116:35;6965:3;7167:19;;7160:35;6914:3;6899:19;37158:264:0;6644:557:1;25621:26:0;;;;;;;;;;;;;;;;24609:57;;;;;;;;;;-1:-1:-1;24609:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32233:174;;;;;;;;;;-1:-1:-1;32233:174:0;;;;;:::i;:::-;;:::i;38915:127::-;;;;;;;;;;-1:-1:-1;38915:127:0;;;;;:::i;:::-;;:::i;24127:29::-;;;;;;;;;;;;;;;;30691:268;;;;;;;;;;-1:-1:-1;30691:268:0;;;;;:::i;:::-;;:::i;33584:208::-;;;;;;;;;;-1:-1:-1;33584:208:0;;;;;:::i;:::-;;:::i;48356:158::-;;;;;;;;;;-1:-1:-1;48356:158:0;;;;;:::i;:::-;;:::i;5784:151::-;;;;;;;;;;-1:-1:-1;5784:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;5900:18:0;;;5873:7;5900:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5784:151;29863:763;;;;;;;;;;-1:-1:-1;29863:763:0;;;;;:::i;:::-;;:::i;24087:33::-;;;;;;;;;;;;;;;;38107:130;;;;;;;;;;;;;:::i;24060:20::-;;;;;;;;;;;;;;;;24345:30;;;;;;;;;;;;;;;;37430:279;;;;;;;;;;-1:-1:-1;37430:279:0;;;;;:::i;:::-;;:::i;35450:1110::-;;;;;;;;;;-1:-1:-1;35450:1110:0;;;;;:::i;:::-;;:::i;11701:243::-;;;;;;;;;;-1:-1:-1;11701:243:0;;;;;:::i;:::-;;:::i;38512:107::-;;;;;;;;;;-1:-1:-1;38512:107:0;;;;;:::i;:::-;;:::i;24236:31::-;;;;;;;;;;;;;;;;24029:24;;;;;;;;;;;;;;;;32476:221;;;;;;;;;;-1:-1:-1;32476:221:0;;;;;:::i;:::-;;:::i;49496:443::-;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;;;;;;;;;49584:17:::1;:6:::0;49594::::1;49584:17;:::i;:::-;49575:26;;49612:19;49634:25;49648:10;;49634:9;;:13;;:25;;;;:::i;:::-;49612:47;;49670:15;49688:38;49714:11;49688:21;49699:9;;49688:6;:10;;:21;;;;:::i;:::-;:25:::0;::::1;:38::i;:::-;49670:56;;49737:16;49756:39;49783:11;49756:22;49767:10;;49756:6;:10;;:22;;;;:::i;:39::-;49737:58;;49808:28;49829:6;49808:20;:28::i;:::-;49861:9;::::0;:22:::1;::::0;49875:7;49861:13:::1;:22::i;:::-;49849:9;:34:::0;49907:10:::1;::::0;:24:::1;::::0;49922:8;49907:14:::1;:24::i;:::-;49894:10;:37:::0;-1:-1:-1;;;;49496:443:0:o;5029:100::-;5083:13;5116:5;5109:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5029:100;:::o;31007:181::-;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31091:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;31091:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;31146:34;;2066:41:1;;;31146:34:0::1;::::0;2039:18:1;31146:34:0::1;;;;;;;31007:181:::0;;:::o;31975:171::-;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;32061:2:::1;32053:4;:10;;32045:53;;;::::0;-1:-1:-1;;;32045:53:0;;9908:2:1;32045:53:0::1;::::0;::::1;9890:21:1::0;9947:2;9927:18;;;9920:30;9986:32;9966:18;;;9959:60;10036:18;;32045:53:0::1;9706:354:1::0;32045:53:0::1;32125:13;:4:::0;32132:6:::1;32125:13;:::i;:::-;32109;:29:::0;-1:-1:-1;31975:171:0:o;5943:169::-;6026:4;6043:39;211:10;6066:7;6075:6;6043:8;:39::i;:::-;-1:-1:-1;6100:4:0;5943:169;;;;;:::o;51475:641::-;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;51647:6:::1;:13;51622:14;:21;:38;51614:80;;;::::0;-1:-1:-1;;;51614:80:0;;10267:2:1;51614:80:0::1;::::0;::::1;10249:21:1::0;10306:2;10286:18;;;10279:30;10345:32;10325:18;;;10318:60;10395:18;;51614:80:0::1;10065:354:1::0;51614:80:0::1;51738:3;51713:14;:21;:28;;51705:75;;;;-1:-1:-1::0;;;51705:75:0::1;;;;;;;:::i;:::-;51796:9;51791:318;51815:14;:21;51811:1;:25;51791:318;;;51858:14;51875;51890:1;51875:17;;;;;;;;:::i;:::-;;;;;;;51858:34;;51907:21;51931:6;51938:1;51931:9;;;;;;;;:::i;:::-;;;;;;;51944:6;51931:20;;;;:::i;:::-;51907:44;;51966:50;51982:10;51994:6;52002:13;51966:15;:50::i;:::-;52031:15;::::0;-1:-1:-1;;;;;52031:15:0::1;:26;52066:6:::0;52075:21:::1;52066:6:::0;52075:13:::1;:21::i;:::-;52031:66;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;51843:266;;51838:3;;;;;:::i;:::-;;;;51791:318;;;;51475:641:::0;;:::o;6120:338::-;6226:4;6243:36;6253:6;6261:9;6272:6;6243:9;:36::i;:::-;6290:138;6299:6;211:10;6321:106;6359:6;6321:106;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6321:19:0;;;;;;:11;:19;;;;;;;;211:10;6321:33;;;;;;;;;;:37;:106::i;:::-;6290:8;:138::i;:::-;-1:-1:-1;6446:4:0;6120:338;;;;;:::o;48522:114::-;48596:15;;:32;;;-1:-1:-1;;;48596:32:0;;;;48569:7;;-1:-1:-1;;;;;48596:15:0;;:30;;:32;;;;;;;;;;;;;;:15;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48589:39;;48522:114;:::o;36568:141::-;36658:15;;:43;;;-1:-1:-1;;;36658:43:0;;;;36631:7;;-1:-1:-1;;;;;36658:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;38627:119::-;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;38697:15:::1;::::0;:41:::1;::::0;-1:-1:-1;;;38697:41:0;;2091:14:1;;2084:22;38697:41:0::1;::::0;::::1;2066::1::0;-1:-1:-1;;;;;38697:15:0;;::::1;::::0;:34:::1;::::0;2039:18:1;;38697:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;38627:119:::0;:::o;6466:218::-;211:10;6554:4;6603:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6603:34:0;;;;;;;;;;6554:4;;6571:83;;6594:7;;6603:50;;6642:10;6603:38;:50::i;34077:121::-;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;34147:15:::1;::::0;:43:::1;::::0;-1:-1:-1;;;34147:43:0;;2091:14:1;;2084:22;34147:43:0::1;::::0;::::1;2066:41:1::0;-1:-1:-1;;;;;34147:15:0;;::::1;::::0;:36:::1;::::0;2039:18:1;;34147:43:0::1;1926:187:1::0;37996:103:0;38033:15;;:58;;-1:-1:-1;;;38033:58:0;;38072:10;38033:58;;;12015:51:1;38033:15:0;12082:18:1;;;12075:50;-1:-1:-1;;;;;38033:15:0;;;;:30;;11988:18:1;;38033:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37996:103::o;33184:238::-;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;33273:16:::1;:5:::0;33282:6:::1;33273:16;:::i;:::-;33265:24;;33332:4;33317:12;;:19;;;;:::i;:::-;33308:5;:28;;33300:73;;;::::0;-1:-1:-1;;;33300:73:0;;12810:2:1;33300:73:0::1;::::0;::::1;12792:21:1::0;;;12829:18;;;12822:30;12888:34;12868:18;;;12861:62;12940:18;;33300:73:0::1;12608:356:1::0;33300:73:0::1;33384:22;:30:::0;33184:238::o;48644:160::-;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;48735:15:::1;::::0;:61:::1;::::0;-1:-1:-1;;;48735:61:0;;::::1;::::0;::::1;2499:25:1::0;;;-1:-1:-1;;;;;48735:15:0;;::::1;::::0;:54:::1;::::0;2472:18:1;;48735:61:0::1;2353:177:1::0;48812:152:0;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;48899:15:::1;::::0;:57:::1;::::0;-1:-1:-1;;;48899:57:0;;::::1;::::0;::::1;2499:25:1::0;;;-1:-1:-1;;;;;48899:15:0;;::::1;::::0;:50:::1;::::0;2472:18:1;;48899:57:0::1;2353:177:1::0;33456:120:0;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;33551:17:::1;:6:::0;33561::::1;33551:17;:::i;:::-;33530:18;:38:::0;-1:-1:-1;33456:120:0:o;38245:142::-;38338:15;;:41;;;-1:-1:-1;;;38338:41:0;;;;38311:7;;-1:-1:-1;;;;;38338:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;;;;;32967:209;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;33038:16:::1;:5:::0;33047:6:::1;33038:16;:::i;:::-;33030:24;;33097:4;33082:12;;:19;;;;:::i;:::-;33073:5;:28;;33065:79;;;::::0;-1:-1:-1;;;33065:79:0;;13171:2:1;33065:79:0::1;::::0;::::1;13153:21:1::0;13210:2;13190:18;;;13183:30;13249:34;13229:18;;;13222:62;-1:-1:-1;;;13300:18:1;;;13293:36;13346:19;;33065:79:0::1;12969:402:1::0;33065:79:0::1;33155:5;:13:::0;32967:209::o;31847:99::-;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;31916:14:::1;:22:::0;;-1:-1:-1;;31916:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31847:99::o;37011:139::-;37108:15;;:34;;-1:-1:-1;;;37108:34:0;;-1:-1:-1;;;;;178:32:1;;;37108:34:0;;;160:51:1;37081:7:0;;37108:15;;:25;;133:18:1;;37108:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;38754:153::-;38851:15;;:48;;-1:-1:-1;;;38851:48:0;;-1:-1:-1;;;;;178:32:1;;;38851:48:0;;;160:51:1;38827:4:0;;38851:15;;:39;;133:18:1;;38851:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;37717:271::-;37849:15;;:28;;-1:-1:-1;;;;;;37849:28:0;;;;;2499:25:1;;;37783:18:0;;;;;;-1:-1:-1;;;;;37849:15:0;;:23;;2472:18:1;;37849:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37893:87;;;13918:25:1;;;13974:2;13959:18;;13952:34;;;14002:18;;;13995:34;;;14060:2;14045:18;;14038:34;;;37782:95:0;;-1:-1:-1;37782:95:0;;-1:-1:-1;37782:95:0;-1:-1:-1;37970:9:0;;37958:5;;37893:87;;13905:3:1;13890:19;37893:87:0;;;;;;;37771:217;;;37717:271;:::o;32756:146::-;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;32855:39:::1;::::0;32823:21:::1;::::0;32863:10:::1;::::0;32855:39;::::1;;;::::0;32823:21;;32803:17:::1;32855:39:::0;32803:17;32855:39;32823:21;32863:10;32855:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;32792:110;32756:146::o:0;5466:127::-;-1:-1:-1;;;;;5567:18:0;5540:7;5567:18;;;;;;;;;;;;5466:127::o;52124:799::-;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;52303:6:::1;:13;52278:14;:21;:38;52270:81;;;::::0;-1:-1:-1;;;52270:81:0;;10267:2:1;52270:81:0::1;::::0;::::1;10249:21:1::0;10306:2;10286:18;;;10279:30;10345:32;10325:18;;;10318:60;10395:18;;52270:81:0::1;10065:354:1::0;52270:81:0::1;52395:3;52370:14;:21;:28;;52362:75;;;;-1:-1:-1::0;;;52362:75:0::1;;;;;;;:::i;:::-;52453:9;52448:468;52472:14;:21;52468:1;:25;52448:468;;;52515:14;52532;52547:1;52532:17;;;;;;;;:::i;:::-;;;;;;;52515:34;;52564:21;52588:6;52595:1;52588:9;;;;;;;;:::i;:::-;;;;;;;52601:6;52588:20;;;;:::i;:::-;52564:44;;52623:50;52639:10;52651:6;52659:13;52623:15;:50::i;:::-;52688:15;::::0;-1:-1:-1;;;;;52688:15:0::1;:26;52723:6:::0;52732:21:::1;52723:6:::0;52732:13:::1;:21::i;:::-;52688:66;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;;;;;;52769:21:0;;::::1;;::::0;;;:13:::1;:21;::::0;;;;;;;:37;;;;52821:10:::1;:18:::0;;;;;:25;;-1:-1:-1;;52821:25:0::1;52842:4;52821:25;::::0;;52861:17:::1;:25:::0;;;52889:15:::1;52861:43:::0;;-1:-1:-1;52495:3:0;::::1;::::0;::::1;:::i;:::-;;;;52448:468;;11545:148:::0;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;11636:6:::1;::::0;11615:40:::1;::::0;11652:1:::1;::::0;-1:-1:-1;;;;;11636:6:0::1;::::0;11615:40:::1;::::0;11652:1;;11615:40:::1;11666:6;:19:::0;;-1:-1:-1;;;;;;11666:19:0::1;::::0;;11545:148::o;31237:127::-;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;31311:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;31311:45:0;;-1:-1:-1;;;;;178:32:1;;;31311:45:0::1;::::0;::::1;160:51:1::0;31311:15:0;;::::1;::::0;:36:::1;::::0;133:18:1;;31311:45:0::1;14:203:1::0;34743:208:0;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;34812:15:::1;::::0;:46:::1;::::0;-1:-1:-1;;;34812:46:0;;-1:-1:-1;;;;;178:32:1;;;34812:46:0::1;::::0;::::1;160:51:1::0;34812:15:0;;::::1;::::0;:36:::1;::::0;133:18:1;;34812:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;;;;;;34869:29:0;::::1;;::::0;;;:19:::1;:29;::::0;;;;:36;;-1:-1:-1;;34869:36:0::1;34901:4;34869:36;::::0;;-1:-1:-1;34916:27:0::1;34889:8:::0;34916:17:::1;:27::i;31661:147::-:0;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31750:41:0;;;::::1;;::::0;;;:33:::1;:41:::0;;;;;:50;;-1:-1:-1;;31750:50:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31661:147::o;34959:234::-;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;35065:1:::1;35047:14;:19;;35038:62;;;::::0;-1:-1:-1;;;35038:62:0;;14285:2:1;35038:62:0::1;::::0;::::1;14267:21:1::0;14324:2;14304:18;;;14297:30;14363:31;14343:18;;;14336:59;14412:18;;35038:62:0::1;14083:353:1::0;35038:62:0::1;35111:11;:28:::0;;;35155:30:::1;::::0;2499:25:1;;;35155:30:0::1;::::0;2487:2:1;2472:18;35155:30:0::1;;;;;;;;34959:234:::0;:::o;38395:109::-;38449:15;;:47;;-1:-1:-1;;;38449:47:0;;38478:10;38449:47;;;12015:51:1;12109:14;;12102:22;12082:18;;;12075:50;-1:-1:-1;;;;;38449:15:0;;;;:28;;11988:18:1;;38449:47:0;11831:300:1;34494:241:0;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;34592:6:::1;34580:8;:18;;:41;;;;;34614:7;34602:8;:19;;34580:41;34572:50;;;::::0;::::1;;34672:16;::::0;34638:51:::1;::::0;34662:8;;34638:51:::1;::::0;;;::::1;34700:16;:27:::0;34494:241::o;35201:::-;35273:10;35261:23;;;;:11;:23;;;;;;;;35256:103;;35321:10;35309:23;;;;:11;:23;;;;;:30;;-1:-1:-1;;35309:30:0;35335:4;35309:30;;;35256:103;35369:15;;-1:-1:-1;;;;;35369:15:0;:26;35396:10;35408:25;35396:10;35408:13;:25::i;:::-;35369:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35201:241::o;5137:104::-;5193:13;5226:7;5219:14;;;;;:::i;33800:140::-;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;33891:41:::1;33920:4;33926:5;33891:28;:41::i;33948:121::-:0;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;34018:15:::1;::::0;:43:::1;::::0;-1:-1:-1;;;34018:43:0;;2091:14:1;;2084:22;34018:43:0::1;::::0;::::1;2066:41:1::0;-1:-1:-1;;;;;34018:15:0;;::::1;::::0;:36:::1;::::0;2039:18:1;;34018:43:0::1;1926:187:1::0;31402:197:0;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;31476:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;31476:45:0;;-1:-1:-1;;;;;178:32:1;;;31476:45:0::1;::::0;::::1;160:51:1::0;31476:15:0;;::::1;::::0;:36:::1;::::0;133:18:1;;31476:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;31532:15:0::1;::::0;-1:-1:-1;;;;;31532:15:0::1;::::0;-1:-1:-1;31532:26:0::1;::::0;-1:-1:-1;31559:7:0;31568:22:::1;31559:7:::0;31568:13:::1;:22::i;:::-;31532:59;;;;;;;;;;;;;;;;:::i;6692:286::-:0;6785:4;6802:146;211:10;6825:7;6834:113;6873:15;6834:113;;;;;;;;;;;;;;;;;211:10;6834:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6834:34:0;;;;;;;;;;;;:38;:113::i;36851:152::-;36948:15;;:47;;-1:-1:-1;;;36948:47:0;;-1:-1:-1;;;;;178:32:1;;;36948:47:0;;;160:51:1;36921:7:0;;36948:15;;:38;;133:18:1;;36948:47:0;14:203:1;5601:175:0;5687:4;5704:42;211:10;5728:9;5739:6;5704:9;:42::i;37158:264::-;37379:15;;:35;;-1:-1:-1;;;37379:35:0;;-1:-1:-1;;;;;178:32:1;;;37379:35:0;;;160:51:1;37231:7:0;;;;;;;;;;;;37379:15;;;;:26;;133:18:1;;37379:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37372:42;;;;-1:-1:-1;37372:42:0;;-1:-1:-1;37372:42:0;-1:-1:-1;37372:42:0;-1:-1:-1;37372:42:0;;-1:-1:-1;37158:264:0;-1:-1:-1;;37158:264:0:o;32233:174::-;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;32321:3:::1;32312:5;:12;;32304:63;;;::::0;-1:-1:-1;;;32304:63:0;;15773:2:1;32304:63:0::1;::::0;::::1;15755:21:1::0;15812:2;15792:18;;;15785:30;15851:34;15831:18;;;15824:62;-1:-1:-1;;;15902:18:1;;;15895:36;15948:19;;32304:63:0::1;15571:402:1::0;32304:63:0::1;32378:13;:21:::0;32233:174::o;38915:127::-;38999:15;;:35;;-1:-1:-1;;;38999:35:0;;-1:-1:-1;;;;;178:32:1;;;38999:35:0;;;160:51:1;38975:4:0;;38999:15;;:26;;133:18:1;;38999:35:0;14:203:1;30691:268:0;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30763:41:0;;::::1;;::::0;;;:33:::1;:41:::0;;;;;;;:48;;30807:4:::1;-1:-1:-1::0;;30763:48:0;;::::1;::::0;::::1;::::0;;;30822:19:::1;:27:::0;;;;;;;:34;;;;::::1;::::0;;::::1;::::0;;30867:15:::1;::::0;:44;;-1:-1:-1;;;30867:44:0;;::::1;::::0;::::1;160:51:1::0;;;;30867:15:0;;::::1;::::0;:36:::1;::::0;133:18:1;;30867:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;30927:24:0::1;::::0;-1:-1:-1;;;;;178:32:1;;160:51;;30927:24:0::1;::::0;-1:-1:-1;148:2:1;133:18;;-1:-1:-1;30927:24:0::1;14:203:1::0;33584:208:0;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;33664:21:::1;::::0;:32;::::1;;:21;::::0;;::::1;:32;;::::0;33656:41:::1;;;::::0;::::1;;33708:21;:31:::0;;-1:-1:-1;;33708:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33755:29:::1;::::0;2066:41:1;;;33755:29:0::1;::::0;2054:2:1;2039:18;33755:29:0::1;1926:187:1::0;48356:158:0;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;48426:15:::1;::::0;:40:::1;::::0;-1:-1:-1;;;48426:40:0;;-1:-1:-1;;;;;178:32:1;;;48426:40:0::1;::::0;::::1;160:51:1::0;48426:15:0;;::::1;::::0;:33:::1;::::0;133:18:1;;48426:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;48482:24:0::1;::::0;-1:-1:-1;;;;;178:32:1;;160:51;;48482:24:0::1;::::0;-1:-1:-1;148:2:1;133:18;;-1:-1:-1;48482:24:0::1;14:203:1::0;29863:763:0;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;30053:27:::1;:16:::0;30073:6:::1;30053:27;:::i;:::-;30034:46:::0;-1:-1:-1;30106:23:0::1;:12:::0;30122:6:::1;30106:23;:::i;:::-;30149:14;::::0;30091:38;;-1:-1:-1;;;;30149:14:0;::::1;;;30148:15;30140:24;;;::::0;::::1;;30218:4;30203:12;;:19;;;;:::i;:::-;30183:16;:39;;30175:72;;;::::0;-1:-1:-1;;;30175:72:0;;16180:2:1;30175:72:0::1;::::0;::::1;16162:21:1::0;16219:2;16199:18;;;16192:30;-1:-1:-1;;;16238:18:1;;;16231:51;16299:18;;30175:72:0::1;15978:345:1::0;30175:72:0::1;30297:4;30282:12;;:19;;;;:::i;:::-;30266:12;:35;;30258:68;;;::::0;-1:-1:-1;;;30258:68:0;;16180:2:1;30258:68:0::1;::::0;::::1;16162:21:1::0;16219:2;16199:18;;;16192:30;-1:-1:-1;;;16238:18:1;;;16231:51;16299:18;;30258:68:0::1;15978:345:1::0;30258:68:0::1;30337:9;:28:::0;;;30376:5:::1;:20:::0;;;30423:23:::1;:14:::0;30440:6:::1;30423:23;:::i;:::-;30407:13;:39:::0;30457:14:::1;:21:::0;;-1:-1:-1;;;;30457:21:0::1;-1:-1:-1::0;;;30457:21:0::1;::::0;;30503:12:::1;30489:11;:26:::0;30544:15:::1;30526;:33:::0;30570:5:::1;:16:::0;;;30602::::1;::::0;::::1;::::0;30457:21;;30602:16:::1;29863:763:::0;;;;:::o;38107:130::-;38190:15;;:39;;;-1:-1:-1;;;38190:39:0;;;;38163:7;;-1:-1:-1;;;;;38190:15:0;;:37;;:39;;;;;;;;;;;;;;:15;:39;;;;;;;;;;;;;;37430:279;37661:15;;:40;;-1:-1:-1;;;37661:40:0;;;;;2499:25:1;;;37508:7:0;;;;;;;;;;;;-1:-1:-1;;;;;37661:15:0;;;;:33;;2472:18:1;;37661:40:0;2353:177:1;35450:1110:0;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;35724:11:::1;:21:::0;;;35756:16:::1;:31:::0;;;35798:15:::1;:30:::0;;;35839:13:::1;:26:::0;;;35876:12:::1;:23:::0;;;35910:17:::1;:33:::0;;;35954:16:::1;:32:::0;;;35997:14:::1;:28:::0;;;36054:59:::1;35930:13:::0;36054:36:::1;36014:11:::0;35973:13;36054:18:::1;:36::i;:::-;:40:::0;::::1;:59::i;:::-;36038:13;:75:::0;36180:16:::1;::::0;36159:15:::1;::::0;36141:13:::1;::::0;:56:::1;::::0;36180:16;36141:34:::1;::::0;:13;:17:::1;:34::i;:56::-;36126:12;:71:::0;36227:1:::1;36216:12:::0;::::1;::::0;::::1;::::0;:29:::1;;;36244:1;36232:8;:13;;36216:29;36208:68;;;::::0;-1:-1:-1;;;36208:68:0;;16530:2:1;36208:68:0::1;::::0;::::1;16512:21:1::0;16569:2;16549:18;;;16542:30;16608:28;16588:18;;;16581:56;16654:18;;36208:68:0::1;16328:350:1::0;36208:68:0::1;36312:2;36295:13;;:19;;:41;;;;;36334:2;36318:12;;:18;;36295:41;36287:82;;;::::0;-1:-1:-1;;;36287:82:0;;16885:2:1;36287:82:0::1;::::0;::::1;16867:21:1::0;16924:2;16904:18;;;16897:30;16963;16943:18;;;16936:58;17011:18;;36287:82:0::1;16683:352:1::0;36287:82:0::1;36398:12;::::0;36412:17:::1;::::0;36431:16:::1;::::0;36449:14:::1;::::0;36465:11:::1;::::0;36503:16:::1;::::0;36521:15:::1;::::0;36538:13:::1;::::0;36387:165:::1;::::0;;17383:25:1;;;17439:2;17424:18;;17417:34;;;;17467:18;;;17460:34;;;;17525:2;17510:18;;17503:34;;;;17568:3;17553:19;;17546:35;17612:3;17597:19;;17590:35;17656:3;17641:19;;17634:35;17700:3;17685:19;;17678:35;36387:165:0::1;::::0;17370:3:1;17355:19;36387:165:0::1;;;;;;;35450:1110:::0;;;;;;;;:::o;11701:243::-;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11790:22:0;::::1;11782:72;;;::::0;-1:-1:-1;;;11782:72:0;;17926:2:1;11782:72:0::1;::::0;::::1;17908:21:1::0;17965:2;17945:18;;;17938:30;18004:34;17984:18;;;17977:62;-1:-1:-1;;;18055:18:1;;;18048:36;18101:19;;11782:72:0::1;17724:402:1::0;11782:72:0::1;11891:6;::::0;11870:38:::1;::::0;-1:-1:-1;;;;;11870:38:0;;::::1;::::0;11891:6:::1;::::0;11870:38:::1;::::0;11891:6:::1;::::0;11870:38:::1;11919:6;:17:::0;;-1:-1:-1;;;;;;11919:17:0::1;-1:-1:-1::0;;;;;11919:17:0;;;::::1;::::0;;;::::1;::::0;;11701:243::o;38512:107::-;38565:15;;:46;;-1:-1:-1;;;38565:46:0;;38593:10;38565:46;;;12015:51:1;12109:14;;12102:22;12082:18;;;12075:50;-1:-1:-1;;;;;38565:15:0;;;;:27;;11988:18:1;;38565:46:0;11831:300:1;32476:221:0;11458:6;;-1:-1:-1;;;;;11458:6:0;211:10;11458:22;11450:67;;;;-1:-1:-1;;;11450:67:0;;;;;;;:::i;:::-;32551:16:::1;:5:::0;32560:6:::1;32551:16;:::i;:::-;32543:24;;32610:4;32595:12;;:19;;;;:::i;:::-;32586:5;:28;;32578:83;;;::::0;-1:-1:-1;;;32578:83:0;;18333:2:1;32578:83:0::1;::::0;::::1;18315:21:1::0;18372:2;18352:18;;;18345:30;18411:34;18391:18;;;18384:62;-1:-1:-1;;;18462:18:1;;;18455:40;18512:19;;32578:83:0::1;18131:406:1::0;32578:83:0::1;32672:9;:17:::0;32476:221::o;9492:179::-;9550:7;;9582:5;9586:1;9582;:5;:::i;:::-;9570:17;;9611:1;9606;:6;;9598:46;;;;-1:-1:-1;;;9598:46:0;;18874:2:1;9598:46:0;;;18856:21:1;18913:2;18893:18;;;18886:30;18952:29;18932:18;;;18925:57;18999:18;;9598:46:0;18672:351:1;9598:46:0;9662:1;9492:179;-1:-1:-1;;;9492:179:0:o;10021:248::-;10079:7;10103:1;10108;10103:6;10099:47;;-1:-1:-1;10133:1:0;10126:8;;10099:47;10158:9;10170:5;10174:1;10170;:5;:::i;:::-;10158:17;-1:-1:-1;10203:1:0;10194:5;10198:1;10158:17;10194:5;:::i;:::-;:10;10186:56;;;;-1:-1:-1;;;10186:56:0;;19230:2:1;10186:56:0;;;19212:21:1;19269:2;19249:18;;;19242:30;19308:34;19288:18;;;19281:62;-1:-1:-1;;;19359:18:1;;;19352:31;19400:19;;10186:56:0;19028:397:1;10277:132:0;10335:7;10362:39;10366:1;10369;10362:39;;;;;;;;;;;;;;;;;:3;:39::i;49947:1520::-;50016:6;50026:1;50016:11;50012:50;;49947:1520;:::o;50012:50::-;50072:24;50089:6;50072:16;:24::i;:::-;50107:19;50129:25;50143:10;;50129:9;;:13;;:25;;;;:::i;:::-;50337:13;;50107:47;;-1:-1:-1;50182:4:0;;;;50167:12;;;;;;50337:17;50333:193;;50390:124;50497:16;;50481:13;;:32;;;;:::i;:::-;50390:86;50462:13;;50390:53;50431:11;50390:36;50416:9;;50390:21;:25;;:36;;;;:::i;:53::-;:71;;:86::i;:124::-;50371:143;;50333:193;50540:14;;:18;50536:199;;50595:128;50705:17;;50688:14;;:34;;;;:::i;:::-;50595:88;50668:14;;50595:54;50637:11;50595:37;50621:10;;50595:21;:25;;:37;;;;:::i;:128::-;50575:148;;50536:199;50757:39;:16;50778:17;50757:20;:39::i;:::-;50745:51;-1:-1:-1;50813:13:0;;50809:111;;50865:15;;50857:51;;-1:-1:-1;;;;;50865:15:0;;;;50894:9;;50857:51;;;;50894:9;50865:15;50857:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50843:65:0;;-1:-1:-1;;50809:111:0;50940:21;50984:16;;50964:17;;:36;;;;:::i;:::-;50940:60;-1:-1:-1;51013:19:0;51047:17;;51043:104;;51095:40;:21;51121:13;51095:25;:40::i;:::-;51081:54;;51043:104;51157:23;51183:56;51227:11;51183:39;51204:17;;51183:16;;:20;;:39;;;;:::i;:56::-;51157:82;-1:-1:-1;51256:19:0;;51252:126;;51317:15;;51309:57;;-1:-1:-1;;;;;51317:15:0;;;;51346;;51309:57;;;;51346:15;51317;51309:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51292:74:0;;-1:-1:-1;;51252:126:0;51395:64;51409:9;51420:15;51437:7;:21;;;;;51448:10;51437:21;51395:64;;;19836:25:1;;;19892:2;19877:18;;19870:34;;;;19947:14;19940:22;19920:18;;;19913:50;19824:2;19809:18;51395:64:0;;;;;;;50001:1466;;;;;;;;;49947:1520;:::o;9679:136::-;9737:7;9764:43;9768:1;9771;9764:43;;;;;;;;;;;;;;;;;:3;:43::i;8343:346::-;-1:-1:-1;;;;;8445:19:0;;8437:68;;;;-1:-1:-1;;;8437:68:0;;20176:2:1;8437:68:0;;;20158:21:1;20215:2;20195:18;;;20188:30;20254:34;20234:18;;;20227:62;-1:-1:-1;;;20305:18:1;;;20298:34;20349:19;;8437:68:0;19974:400:1;8437:68:0;-1:-1:-1;;;;;8524:21:0;;8516:68;;;;-1:-1:-1;;;8516:68:0;;20581:2:1;8516:68:0;;;20563:21:1;20620:2;20600:18;;;20593:30;20659:34;20639:18;;;20632:62;-1:-1:-1;;;20710:18:1;;;20703:32;20752:19;;8516:68:0;20379:398:1;8516:68:0;-1:-1:-1;;;;;8597:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8649:32;;2499:25:1;;;8649:32:0;;2472:18:1;8649:32:0;;;;;;;;8343:346;;;:::o;6986:538::-;-1:-1:-1;;;;;7092:20:0;;7084:70;;;;-1:-1:-1;;;7084:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7173:23:0;;7165:71;;;;-1:-1:-1;;;7165:71:0;;;;;;;:::i;:::-;7329:70;7351:6;7329:70;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7329:17:0;;:9;:17;;;;;;;;;;;;:70;:21;:70::i;:::-;-1:-1:-1;;;;;7309:17:0;;;:9;:17;;;;;;;;;;;:90;;;;7433:20;;;;;;;:32;;7458:6;7433:24;:32::i;:::-;-1:-1:-1;;;;;7410:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;7481:35;2499:25:1;;;7410:20:0;;7481:35;;;;;;2472:18:1;7481:35:0;2353:177:1;46418:935:0;-1:-1:-1;;;;;46533:20:0;;46480:7;46533:20;;;:11;:20;;;;;;46480:7;;46533:20;;:87;;;;-1:-1:-1;;;;;;46575:33:0;;;;;;:24;:33;;;;;;:45;;46611:9;46575:45;:::i;:::-;46557:15;:63;46533:87;:168;;;;-1:-1:-1;;;;;;46656:33:0;;;;;;:24;:33;;;;;;:45;;46692:9;46656:45;:::i;:::-;46638:15;:63;46533:168;46529:762;;;46731:25;46754:1;46731:18;46741:7;46731:9;:18::i;:25::-;46718:38;;46529:762;;;-1:-1:-1;;;;;46787:20:0;;;;;;:11;:20;;;;;;;;:87;;;;-1:-1:-1;;;;;;46829:33:0;;;;;;:24;:33;;;;;;:45;;46865:9;46829:45;:::i;:::-;46811:15;:63;46787:87;:173;;;;-1:-1:-1;;;;;;46915:33:0;;;;;;:24;:33;;;;;;:45;;46951:9;46915:45;:::i;:::-;46897:15;:63;46787:173;46783:508;;;46999:25;47022:1;46999:18;47009:7;46999:9;:18::i;46783:508::-;-1:-1:-1;;;;;47055:20:0;;;;;;:11;:20;;;;;;;;:87;;;;-1:-1:-1;;;;;;47097:33:0;;;;;;:24;:33;;;;;;:45;;47133:9;47097:45;:::i;:::-;47079:15;:63;47055:87;47051:240;;;47181:25;47204:1;47181:18;47191:7;47181:9;:18::i;47051:240::-;47261:18;47271:7;47261:9;:18::i;39050:7360::-;-1:-1:-1;;;;;39148:18:0;;39140:68;;;;-1:-1:-1;;;39140:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39227:16:0;;39219:64;;;;-1:-1:-1;;;39219:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39420:39:0;;39294:18;39420:39;;;:33;:39;;;;;;39294:18;;;;;;39420:39;;39415:132;;39484:14;;-1:-1:-1;;;39484:14:0;;;;39476:59;;;;-1:-1:-1;;;39476:59:0;;21794:2:1;39476:59:0;;;21776:21:1;;;21813:18;;;21806:30;21872:34;21852:18;;;21845:62;21924:18;;39476:59:0;21592:356:1;39476:59:0;39561:6;39571:1;39561:11;39557:93;;39589:28;39605:4;39611:2;39615:1;39589:15;:28::i;:::-;39632:7;;;;39050:7360;;;:::o;39557:93::-;-1:-1:-1;;;;;39667:16:0;;;;;;:10;:16;;;;;;;;39663:6570;;;-1:-1:-1;;;;;39722:23:0;;;;;;:17;:23;;;;;;:35;;39748:9;39722:35;:::i;:::-;39704:15;:53;39700:297;;;-1:-1:-1;;;;;39814:19:0;;;;;;:13;:19;;;;;;39804:6;39786:15;39828:4;39786:9;:15::i;:::-;:24;;;;:::i;:::-;:47;;39778:83;;;;-1:-1:-1;;;39778:83:0;;22288:2:1;39778:83:0;;;22270:21:1;22327:2;22307:18;;;22300:30;22366:25;22346:18;;;22339:53;22409:18;;39778:83:0;22086:347:1;39778:83:0;39663:6570;;39700:297;-1:-1:-1;;;;;39915:19:0;;39937:1;39915:19;;;:13;:19;;;;;;;;:23;;;39957:10;:16;;;;;:24;;-1:-1:-1;;39957:24:0;;;39663:6570;;;40040:8;;-1:-1:-1;;;40040:8:0;;;;40039:9;:39;;;;-1:-1:-1;;;;;;40053:25:0;;;;;;:19;:25;;;;;;;;40052:26;40039:39;:67;;;;-1:-1:-1;;;;;;40083:23:0;;;;;;:19;:23;;;;;;;;40082:24;40039:67;40035:6198;;;-1:-1:-1;;;;;40140:29:0;;;40123:14;40140:29;;;:25;:29;;;;;;;40200:31;;;;;;;;40140:29;;;;;40200:31;40252:9;;:23;;;;;40266:9;40265:10;40252:23;40248:3801;;;-1:-1:-1;;;;;40301:25:0;;;;;;:19;:25;;;;;;;;40300:26;:54;;;;-1:-1:-1;;;;;;40331:23:0;;;;;;:19;:23;;;;;;;;40330:24;40300:54;40296:1113;;;40379:13;40395:32;40423:3;40395:23;40406:11;;40395:6;:10;;:23;;;;:::i;:32::-;40379:48;-1:-1:-1;40459:17:0;:6;40379:48;40459:10;:17::i;:::-;40450:26;;40499:43;40515:4;40529;40536:5;40499:15;:43::i;:::-;40565:33;40581:4;40587:2;40591:6;40565:15;:33::i;:::-;40621:15;;-1:-1:-1;;;;;40621:15:0;:26;40648:4;40654:19;40648:4;40654:13;:19::i;:::-;40621:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;40697:15:0;;-1:-1:-1;;;;;40697:15:0;;-1:-1:-1;40697:26:0;;-1:-1:-1;40724:2:0;40728:17;40724:2;40728:13;:17::i;:::-;40697:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;40769:19:0;;;40791:5;40769:19;;;:13;:19;;;;;;;;:27;;-1:-1:-1;;40769:27:0;;;;;;40819:11;:17;;;;;:25;;;;;;;40867:24;:30;;;;;40900:15;40867:48;;-1:-1:-1;;;;;;;;;;39050:7360:0:o;40296:1113::-;41010:33;41026:4;41032:2;41036:6;41010:15;:33::i;:::-;41066:15;;-1:-1:-1;;;;;41066:15:0;:26;41093:4;41099:19;41093:4;41099:13;:19::i;:::-;41066:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;41142:15:0;;-1:-1:-1;;;;;41142:15:0;;-1:-1:-1;41142:26:0;;-1:-1:-1;41169:2:0;41173:17;41169:2;41173:13;:17::i;:::-;41142:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;41214:19:0;;;41236:5;41214:19;;;:13;:19;;;;;;;;:27;;-1:-1:-1;;41214:27:0;;;;;;41264:11;:17;;;;;:25;;;;;;;41312:24;:30;;;;;41345:15;41312:48;;-1:-1:-1;;;;;;;;;39050:7360:0:o;40248:3801::-;41449:9;41445:2604;;;41493:22;;41483:6;:32;41479:188;;41553:1;41540:14;;41479:188;;;41633:14;;41620:27;;41479:188;41696:12;;41743:17;;41794:16;;41835:14;;41696:12;;-1:-1:-1;41743:17:0;;-1:-1:-1;41794:16:0;-1:-1:-1;41835:14:0;;41831:344;;;41939:13;;41926:9;41897:39;;;;:28;:39;;;;;;:55;;41939:13;41897:55;:::i;:::-;41878:15;:74;;41870:134;;;;-1:-1:-1;;;41870:134:0;;22640:2:1;41870:134:0;;;22622:21:1;22679:2;22659:18;;;22652:30;-1:-1:-1;;;22698:18:1;;;22691:52;22760:18;;41870:134:0;22438:346:1;41870:134:0;42041:5;;42031:6;:15;;42023:54;;;;-1:-1:-1;;;42023:54:0;;22991:2:1;42023:54:0;;;22973:21:1;23030:2;23010:18;;;23003:30;23069:29;23049:18;;;23042:57;23116:18;;42023:54:0;22789:351:1;42023:54:0;42125:9;42096:39;;;;:28;:39;;;;;42138:15;42096:57;;41831:344;-1:-1:-1;;;;;42193:19:0;;42215:5;42193:19;;;:13;:19;;;;;;;;:27;;-1:-1:-1;;42193:27:0;;;;;;42239:11;:17;;;;;:25;;;;;;;42283:24;:30;;;;;42316:15;42283:48;;41445:2604;;;42361:8;42357:1692;;;-1:-1:-1;;;;;42396:17:0;;;;;;:13;:17;;;;;;;;42392:442;;;-1:-1:-1;;;;;42461:24:0;;;;;;:20;:24;;;;;;:36;;42488:9;42461:36;:::i;:::-;42442:15;:55;;:98;;;;;42518:22;;42501:13;42511:2;42501:9;:13::i;:::-;:39;;42442:98;42438:377;;;42569:33;42585:4;42591:2;42595:6;42569:15;:33::i;:::-;42629:15;;-1:-1:-1;;;;;42629:15:0;:26;42656:4;42662:19;42656:4;42662:13;:19::i;:::-;42629:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;42709:15:0;;-1:-1:-1;;;;;42709:15:0;;-1:-1:-1;42709:26:0;;-1:-1:-1;42736:2:0;42740:17;42736:2;42740:13;:17::i;:::-;42709:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42785:7;;;;;;39050:7360;;;:::o;42438:377::-;-1:-1:-1;;;;;42859:15:0;;;;;;:11;:15;;;;;;;;42854:156;;-1:-1:-1;;;;;42899:15:0;;;;;;:11;:15;;;;;;;;:22;;-1:-1:-1;;42899:22:0;42917:4;42899:22;;;42944:24;:28;;;;;42975:15;42944:46;;42854:156;-1:-1:-1;;;;;43035:17:0;;;;;;:13;:17;;;;;;;;43030:156;;-1:-1:-1;;;;;43077:17:0;;;;;;:13;:17;;;;;;;;:24;;-1:-1:-1;;43077:24:0;43097:4;43077:24;;;43124:20;:24;;;;;43151:15;43124:42;;43030:156;43219:13;;43262:11;;43308:16;;43358:15;;43398:14;;43219:13;;-1:-1:-1;43262:11:0;;-1:-1:-1;43308:16:0;-1:-1:-1;43358:15:0;-1:-1:-1;43398:14:0;;43394:457;;;43477:5;;43459:15;;:23;;;;:::i;:::-;43441:15;:41;43433:71;;;;-1:-1:-1;;;43433:71:0;;23347:2:1;43433:71:0;;;23329:21:1;23386:2;23366:18;;;23359:30;-1:-1:-1;;;23405:18:1;;;23398:48;23463:18;;43433:71:0;23145:342:1;43433:71:0;43546:13;;43531:11;:28;;43523:64;;;;-1:-1:-1;;;43523:64:0;;23694:2:1;43523:64:0;;;23676:21:1;23733:2;23713:18;;;23706:30;23772:26;23752:18;;;23745:54;23816:18;;43523:64:0;23492:348:1;43523:64:0;43639:9;43614:35;;;;:24;:35;;;;;;43653:12;43614:51;;43606:83;;;;-1:-1:-1;;;43606:83:0;;24047:2:1;43606:83:0;;;24029:21:1;24086:2;24066:18;;;24059:30;-1:-1:-1;;;24105:18:1;;;24098:50;24165:18;;43606:83:0;23845:344:1;43606:83:0;43726:5;;43716:6;:15;;43708:54;;;;-1:-1:-1;;;43708:54:0;;22991:2:1;43708:54:0;;;22973:21:1;23030:2;23010:18;;;23003:30;23069:29;23049:18;;;23042:57;23116:18;;43708:54:0;22789:351:1;43708:54:0;43806:9;43781:35;;;;:24;:35;;;;;43819:12;43781:50;;43394:457;43871:32;43906:13;43916:2;43906:9;:13::i;:::-;43983:9;;43871:48;;-1:-1:-1;43946:33:0;43973:6;43871:48;43946:33;:::i;:::-;:46;;43938:95;;;;-1:-1:-1;;;43938:95:0;;24396:2:1;43938:95:0;;;24378:21:1;24435:2;24415:18;;;24408:30;24474:34;24454:18;;;24447:62;-1:-1:-1;;;24525:18:1;;;24518:34;24569:19;;43938:95:0;24194:400:1;43938:95:0;42371:1678;42357:1692;44065:17;44085:44;44100:28;44115:13;44100:12;:28;:::i;:::-;44085:10;;:14;:44::i;:::-;44065:64;;44146:28;44177:24;44195:4;44177:9;:24::i;:::-;44257:18;;44146:55;;-1:-1:-1;44233:42:0;;;;;;;44296:20;;;44307:9;44296:20;44292:1014;;;44337:8;:15;;-1:-1:-1;;;;44337:15:0;-1:-1:-1;;;44337:15:0;;;44377:21;;44337:15;44377:21;:41;;;;;44417:1;44402:12;:16;44377:41;:61;;;;;44437:1;44422:12;;:16;44377:61;44373:689;;;44463:20;44486:25;44500:10;;44486:9;;:13;;:25;;;;:::i;:::-;44463:48;;44534:24;44561:53;44601:12;44561:35;44586:9;;44561:20;:24;;:35;;;;:::i;:53::-;44534:80;;44637:22;44662:54;44703:12;44662:36;44687:10;;44662:20;:24;;:36;;;;:::i;:54::-;44637:79;;44739:21;44763:52;44802:12;;44763:34;44784:12;44763:16;:20;;:34;;;;:::i;:52::-;44739:76;;44838:22;44863:51;44900:13;;44863:32;44882:12;44863:14;:18;;:32;;;;:::i;:51::-;44838:76;-1:-1:-1;44937:18:0;44958:33;44838:76;44977:13;44958:18;:33::i;:::-;44937:54;;45016:26;45031:10;45016:14;:26::i;:::-;44440:622;;;;;;44373:689;45082:24;45109;45127:4;45109:9;:24::i;:::-;45082:51;;45152:38;45173:16;45152:20;:38::i;:::-;-1:-1:-1;45221:1:0;45209:9;:13;;;45241:10;:14;45274:8;:16;;-1:-1:-1;;;;45274:16:0;;;44292:1014;45322:12;45337:30;45363:3;45337:21;:6;45348:9;45337:10;:21::i;:30::-;45322:45;-1:-1:-1;45382:18:0;45421:12;;45417:202;;45486:3;45463:20;:6;45474:8;45463:10;:20::i;:::-;:26;;;;:::i;:::-;45526:4;;45450:39;;-1:-1:-1;45504:39:0;;45520:4;;-1:-1:-1;;;;;45526:4:0;45450:39;45504:15;:39::i;:::-;45573:12;;:28;;45590:10;45573:16;:28::i;:::-;45558:12;:43;45417:202;45644:29;45655:17;45662:10;45655:4;:17;:::i;:::-;45644:6;;:10;:29::i;:::-;45635:38;;45694:9;45690:169;;;45737:10;;:20;;45752:4;45737:14;:20::i;:::-;45724:10;:33;45690:169;;;45824:9;;:19;;45838:4;45824:13;:19::i;:::-;45812:9;:31;45690:169;45875:42;45891:4;45905;45912;45875:15;:42::i;:::-;45948:16;;45985:15;;:28;;-1:-1:-1;;;;;;45985:28:0;;;;;2499:25:1;;;-1:-1:-1;;;;;45985:15:0;;;;:23;;2472:18:1;;45985:28:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;45985:28:0;;;;;;;;-1:-1:-1;;45985:28:0;;;;;;;;;;;;:::i;:::-;;;45981:241;;;46111:86;;;13918:25:1;;;13974:2;13959:18;;13952:34;;;14002:18;;;13995:34;;;14060:2;14045:18;;14038:34;;;46187:9:0;;46176:4;;46111:86;;13905:3:1;13890:19;46111:86:0;;;;;;;46014:199;;;45981:241;40108:6125;;;;;;;;40035:6198;46245:33;46261:4;46267:2;46271:6;46245:15;:33::i;:::-;46289:15;;-1:-1:-1;;;;;46289:15:0;:26;46316:4;46322:19;46316:4;46322:13;:19::i;:::-;46289:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;46353:15:0;;-1:-1:-1;;;;;46353:15:0;;-1:-1:-1;46353:26:0;;-1:-1:-1;46380:2:0;46384:17;46380:2;46384:13;:17::i;:::-;46353:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39129:7281;;;;39050:7360;;;:::o;9823:190::-;9909:7;9945:12;9937:6;;;;9929:29;;;;-1:-1:-1;;;9929:29:0;;;;;;;;:::i;:::-;-1:-1:-1;9969:9:0;9981:5;9985:1;9981;:5;:::i;:::-;9969:17;9823:190;-1:-1:-1;;;;;9823:190:0:o;34206:280::-;-1:-1:-1;;;;;34289:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;34289:39:0;;;;;;;;;;;;34341:80;;34367:15;;:42;;-1:-1:-1;;;34367:42:0;;-1:-1:-1;;;;;178:32:1;;;34367:42:0;;;160:51:1;34367:15:0;;;;:36;;133:18:1;;34367:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34341:80;34438:40;;;;;;-1:-1:-1;;;;;34438:40:0;;;;;;;;34206:280;;:::o;10417:276::-;10503:7;10538:12;10531:5;10523:28;;;;-1:-1:-1;;;10523:28:0;;;;;;;;:::i;:::-;-1:-1:-1;10562:9:0;10574:5;10578:1;10574;:5;:::i;47849:499::-;47939:16;;;47953:1;47939:16;;;;;;;;47915:21;;47939:16;;;;;;;;;;-1:-1:-1;47939:16:0;47915:40;;47984:4;47966;47971:1;47966:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;47966:23:0;;;:7;;;;;;;;;;:23;;;;48010:15;;:22;;;-1:-1:-1;;;48010:22:0;;;;:15;;;;;:20;;:22;;;;;47966:7;;48010:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48000:4;48005:1;48000:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48000:32:0;;;:7;;;;;;;;;:32;48075:15;;48043:62;;48060:4;;48075:15;48093:11;48043:8;:62::i;:::-;48116:15;;:224;;-1:-1:-1;;;48116:224:0;;-1:-1:-1;;;;;48116:15:0;;;;:66;;:224;;48197:11;;48116:15;;48267:4;;48294;;48314:15;;48116:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47904:444;47849:499;:::o;47361:480::-;47420:12;47435:13;:6;47446:1;47435:10;:13::i;:::-;47420:28;-1:-1:-1;47459:17:0;47479:16;:6;47420:28;47479:10;:16::i;:::-;47459:36;-1:-1:-1;47531:21:0;47563:22;47580:4;47563:16;:22::i;:::-;47666:18;47687:41;:21;47713:14;47687:25;:41::i;:::-;47666:62;;47739:35;47752:9;47763:10;47739:12;:35::i;:::-;47790:43;;;25786:25:1;;;25842:2;25827:18;;25820:34;;;25870:18;;;25863:34;;;47790:43:0;;25774:2:1;25759:18;47790:43:0;;;;;;;47409:432;;;;47361:480;:::o;48972:516::-;49152:15;;49120:62;;49137:4;;-1:-1:-1;;;;;49152:15:0;49170:11;49120:8;:62::i;:::-;49225:15;;:255;;-1:-1:-1;;;49225:255:0;;49297:4;49225:255;;;26249:34:1;26299:18;;;26292:34;;;49225:15:0;26342:18:1;;;26335:34;;;26385:18;;;26378:34;;;26428:19;;;26421:44;49454:15:0;26481:19:1;;;26474:35;-1:-1:-1;;;;;49225:15:0;;;;:31;;49264:9;;26183:19:1;;49225:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;222:180:1:-;281:6;334:2;322:9;313:7;309:23;305:32;302:52;;;350:1;347;340:12;302:52;-1:-1:-1;373:23:1;;222:180;-1:-1:-1;222:180:1:o;407:548::-;519:4;548:2;577;566:9;559:21;609:6;603:13;652:6;647:2;636:9;632:18;625:34;677:1;687:140;701:6;698:1;695:13;687:140;;;796:14;;;792:23;;786:30;762:17;;;781:2;758:26;751:66;716:10;;687:140;;;691:3;876:1;871:2;862:6;851:9;847:22;843:31;836:42;946:2;939;935:7;930:2;922:6;918:15;914:29;903:9;899:45;895:54;887:62;;;;407:548;;;;:::o;960:131::-;-1:-1:-1;;;;;1035:31:1;;1025:42;;1015:70;;1081:1;1078;1071:12;1096:118;1182:5;1175:13;1168:21;1161:5;1158:32;1148:60;;1204:1;1201;1194:12;1219:382;1284:6;1292;1345:2;1333:9;1324:7;1320:23;1316:32;1313:52;;;1361:1;1358;1351:12;1313:52;1400:9;1387:23;1419:31;1444:5;1419:31;:::i;:::-;1469:5;-1:-1:-1;1526:2:1;1511:18;;1498:32;1539:30;1498:32;1539:30;:::i;:::-;1588:7;1578:17;;;1219:382;;;;;:::o;1606:315::-;1674:6;1682;1735:2;1723:9;1714:7;1710:23;1706:32;1703:52;;;1751:1;1748;1741:12;1703:52;1790:9;1777:23;1809:31;1834:5;1809:31;:::i;:::-;1859:5;1911:2;1896:18;;;;1883:32;;-1:-1:-1;;;1606:315:1:o;2535:127::-;2596:10;2591:3;2587:20;2584:1;2577:31;2627:4;2624:1;2617:15;2651:4;2648:1;2641:15;2667:275;2738:2;2732:9;2803:2;2784:13;;-1:-1:-1;;2780:27:1;2768:40;;2838:18;2823:34;;2859:22;;;2820:62;2817:88;;;2885:18;;:::i;:::-;2921:2;2914:22;2667:275;;-1:-1:-1;2667:275:1:o;2947:183::-;3007:4;3040:18;3032:6;3029:30;3026:56;;;3062:18;;:::i;:::-;-1:-1:-1;3107:1:1;3103:14;3119:4;3099:25;;2947:183::o;3135:662::-;3189:5;3242:3;3235:4;3227:6;3223:17;3219:27;3209:55;;3260:1;3257;3250:12;3209:55;3296:6;3283:20;3322:4;3346:60;3362:43;3402:2;3362:43;:::i;:::-;3346:60;:::i;:::-;3440:15;;;3526:1;3522:10;;;;3510:23;;3506:32;;;3471:12;;;;3550:15;;;3547:35;;;3578:1;3575;3568:12;3547:35;3614:2;3606:6;3602:15;3626:142;3642:6;3637:3;3634:15;3626:142;;;3708:17;;3696:30;;3746:12;;;;3659;;3626:142;;;-1:-1:-1;3786:5:1;3135:662;-1:-1:-1;;;;;;3135:662:1:o;3802:1215::-;3920:6;3928;3981:2;3969:9;3960:7;3956:23;3952:32;3949:52;;;3997:1;3994;3987:12;3949:52;4037:9;4024:23;4066:18;4107:2;4099:6;4096:14;4093:34;;;4123:1;4120;4113:12;4093:34;4161:6;4150:9;4146:22;4136:32;;4206:7;4199:4;4195:2;4191:13;4187:27;4177:55;;4228:1;4225;4218:12;4177:55;4264:2;4251:16;4286:4;4310:60;4326:43;4366:2;4326:43;:::i;4310:60::-;4404:15;;;4486:1;4482:10;;;;4474:19;;4470:28;;;4435:12;;;;4510:19;;;4507:39;;;4542:1;4539;4532:12;4507:39;4566:11;;;;4586:217;4602:6;4597:3;4594:15;4586:217;;;4682:3;4669:17;4699:31;4724:5;4699:31;:::i;:::-;4743:18;;4619:12;;;;4781;;;;4586:217;;;4822:5;-1:-1:-1;;4865:18:1;;4852:32;;-1:-1:-1;;4896:16:1;;;4893:36;;;4925:1;4922;4915:12;4893:36;;4948:63;5003:7;4992:8;4981:9;4977:24;4948:63;:::i;:::-;4938:73;;;3802:1215;;;;;:::o;5022:456::-;5099:6;5107;5115;5168:2;5156:9;5147:7;5143:23;5139:32;5136:52;;;5184:1;5181;5174:12;5136:52;5223:9;5210:23;5242:31;5267:5;5242:31;:::i;:::-;5292:5;-1:-1:-1;5349:2:1;5334:18;;5321:32;5362:33;5321:32;5362:33;:::i;:::-;5022:456;;5414:7;;-1:-1:-1;;;5468:2:1;5453:18;;;;5440:32;;5022:456::o;5922:241::-;5978:6;6031:2;6019:9;6010:7;6006:23;6002:32;5999:52;;;6047:1;6044;6037:12;5999:52;6086:9;6073:23;6105:28;6127:5;6105:28;:::i;6168:247::-;6227:6;6280:2;6268:9;6259:7;6255:23;6251:32;6248:52;;;6296:1;6293;6286:12;6248:52;6335:9;6322:23;6354:31;6379:5;6354:31;:::i;7206:388::-;7274:6;7282;7335:2;7323:9;7314:7;7310:23;7306:32;7303:52;;;7351:1;7348;7341:12;7303:52;7390:9;7377:23;7409:31;7434:5;7409:31;:::i;:::-;7459:5;-1:-1:-1;7516:2:1;7501:18;;7488:32;7529:33;7488:32;7529:33;:::i;7599:385::-;7685:6;7693;7701;7709;7762:3;7750:9;7741:7;7737:23;7733:33;7730:53;;;7779:1;7776;7769:12;7730:53;-1:-1:-1;;7802:23:1;;;7872:2;7857:18;;7844:32;;-1:-1:-1;7923:2:1;7908:18;;7895:32;;7974:2;7959:18;7946:32;;-1:-1:-1;7599:385:1;-1:-1:-1;7599:385:1:o;7989:661::-;8111:6;8119;8127;8135;8143;8151;8159;8167;8220:3;8208:9;8199:7;8195:23;8191:33;8188:53;;;8237:1;8234;8227:12;8188:53;-1:-1:-1;;8260:23:1;;;8330:2;8315:18;;8302:32;;-1:-1:-1;8381:2:1;8366:18;;8353:32;;8432:2;8417:18;;8404:32;;-1:-1:-1;8483:3:1;8468:19;;8455:33;;-1:-1:-1;8535:3:1;8520:19;;8507:33;;-1:-1:-1;8587:3:1;8572:19;;8559:33;;-1:-1:-1;8639:3:1;8624:19;8611:33;;-1:-1:-1;7989:661:1;-1:-1:-1;7989:661:1:o;8655:356::-;8857:2;8839:21;;;8876:18;;;8869:30;8935:34;8930:2;8915:18;;8908:62;9002:2;8987:18;;8655:356::o;9016:127::-;9077:10;9072:3;9068:20;9065:1;9058:31;9108:4;9105:1;9098:15;9132:4;9129:1;9122:15;9148:168;9221:9;;;9252;;9269:15;;;9263:22;;9249:37;9239:71;;9290:18;;:::i;9321:380::-;9400:1;9396:12;;;;9443;;;9464:61;;9518:4;9510:6;9506:17;9496:27;;9464:61;9571:2;9563:6;9560:14;9540:18;9537:38;9534:161;;9617:10;9612:3;9608:20;9605:1;9598:31;9652:4;9649:1;9642:15;9680:4;9677:1;9670:15;9534:161;;9321:380;;;:::o;10424:398::-;10626:2;10608:21;;;10665:2;10645:18;;;10638:30;10704:34;10699:2;10684:18;;10677:62;-1:-1:-1;;;10770:2:1;10755:18;;10748:32;10812:3;10797:19;;10424:398::o;10827:127::-;10888:10;10883:3;10879:20;10876:1;10869:31;10919:4;10916:1;10909:15;10943:4;10940:1;10933:15;10959:282;-1:-1:-1;;;;;11159:32:1;;;;11141:51;;11223:2;11208:18;;11201:34;11129:2;11114:18;;10959:282::o;11246:135::-;11285:3;11306:17;;;11303:43;;11326:18;;:::i;:::-;-1:-1:-1;11373:1:1;11362:13;;11246:135::o;11386:251::-;11456:6;11509:2;11497:9;11488:7;11484:23;11480:32;11477:52;;;11525:1;11522;11515:12;11477:52;11557:9;11551:16;11576:31;11601:5;11576:31;:::i;11642:184::-;11712:6;11765:2;11753:9;11744:7;11740:23;11736:32;11733:52;;;11781:1;11778;11771:12;11733:52;-1:-1:-1;11804:16:1;;11642:184;-1:-1:-1;11642:184:1:o;12136:245::-;12203:6;12256:2;12244:9;12235:7;12231:23;12227:32;12224:52;;;12272:1;12269;12262:12;12224:52;12304:9;12298:16;12323:28;12345:5;12323:28;:::i;12386:217::-;12426:1;12452;12442:132;;12496:10;12491:3;12487:20;12484:1;12477:31;12531:4;12528:1;12521:15;12559:4;12556:1;12549:15;12442:132;-1:-1:-1;12588:9:1;;12386:217::o;13376:306::-;13464:6;13472;13480;13533:2;13521:9;13512:7;13508:23;13504:32;13501:52;;;13549:1;13546;13539:12;13501:52;13578:9;13572:16;13562:26;;13628:2;13617:9;13613:18;13607:25;13597:35;;13672:2;13661:9;13657:18;13651:25;13641:35;;13376:306;;;;;:::o;15009:557::-;15122:6;15130;15138;15146;15154;15162;15215:3;15203:9;15194:7;15190:23;15186:33;15183:53;;;15232:1;15229;15222:12;15183:53;15264:9;15258:16;15283:31;15308:5;15283:31;:::i;:::-;15378:2;15363:18;;15357:25;15422:2;15407:18;;15401:25;15466:2;15451:18;;15445:25;15510:3;15495:19;;15489:26;15555:3;15540:19;;;15534:26;15333:5;;15357:25;;-1:-1:-1;15401:25:1;;15445;;-1:-1:-1;15489:26:1;-1:-1:-1;15534:26:1;;-1:-1:-1;15009:557:1;-1:-1:-1;;;15009:557:1:o;18542:125::-;18607:9;;;18628:10;;;18625:36;;;18641:18;;:::i;20782:401::-;20984:2;20966:21;;;21023:2;21003:18;;;20996:30;21062:34;21057:2;21042:18;;21035:62;-1:-1:-1;;;21128:2:1;21113:18;;21106:35;21173:3;21158:19;;20782:401::o;21188:399::-;21390:2;21372:21;;;21429:2;21409:18;;;21402:30;21468:34;21463:2;21448:18;;21441:62;-1:-1:-1;;;21534:2:1;21519:18;;21512:33;21577:3;21562:19;;21188:399::o;21953:128::-;22020:9;;;22041:11;;;22038:37;;;22055:18;;:::i;24599:980::-;24861:4;24909:3;24898:9;24894:19;24940:6;24929:9;24922:25;24966:2;25004:6;24999:2;24988:9;24984:18;24977:34;25047:3;25042:2;25031:9;25027:18;25020:31;25071:6;25106;25100:13;25137:6;25129;25122:22;25175:3;25164:9;25160:19;25153:26;;25214:2;25206:6;25202:15;25188:29;;25235:1;25245:195;25259:6;25256:1;25253:13;25245:195;;;25324:13;;-1:-1:-1;;;;;25320:39:1;25308:52;;25415:15;;;;25380:12;;;;25356:1;25274:9;25245:195;;;-1:-1:-1;;;;;;;25496:32:1;;;;25491:2;25476:18;;25469:60;-1:-1:-1;;;25560:3:1;25545:19;25538:35;25457:3;24599:980;-1:-1:-1;;;24599:980:1:o

Swarm Source

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